From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from perceval.ideasonboard.com ([213.167.242.64]:51394 "EHLO perceval.ideasonboard.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727598AbeINCgi (ORCPT ); Thu, 13 Sep 2018 22:36:38 -0400 From: Laurent Pinchart To: jacopo mondi Cc: Laurent Pinchart , dri-devel@lists.freedesktop.org, linux-renesas-soc@vger.kernel.org Subject: Re: [PATCH 08/16] drm: rcar-du: Enable configurable DPAD0 routing on Gen3 Date: Fri, 14 Sep 2018 00:25:32 +0300 Message-ID: <3457296.bcsaz67t6o@avalon> In-Reply-To: <20180911154653.GW28160@w540> References: <20180904121027.24031-1-laurent.pinchart+renesas@ideasonboard.com> <20180904121027.24031-9-laurent.pinchart+renesas@ideasonboard.com> <20180911154653.GW28160@w540> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Sender: linux-renesas-soc-owner@vger.kernel.org List-ID: Hi Jacopo, Thank you for the patch. On Tuesday, 11 September 2018 18:46:53 EEST jacopo mondi wrote: > On Tue, Sep 04, 2018 at 03:10:19PM +0300, Laurent Pinchart wrote: > > All Gen3 SoCs supported so far have a fixed association between DPAD0 > > and DU channels, which led to hardcoding that association when writing > > the corresponding hardware register. The D3 and E3 will break that > > mechanism as DPAD0 can be dynamically connected to either DU0 or DU1. > > > > Make DPAD0 routing dynamic on Gen3. To ensure a valid hardware > > configuration when the DU starts without the RGB output enabled, DPAD0 > > is associated at initialization time to the first DU channel that it can > > be connected to. This makes no change on Gen2 as all Gen2 SoCs can > > connected DPAD0 to DU0, which is the current implicit default value. > > > > As the DPAD0 source is always 0 when a single source is possible on > > Gen2, we can also simplify the Gen2 code in the same function to remove > > a conditional check. > > Does this patch only prepares for routing to be mad dynamic or it is > already supported? It's already dynamic. We support dynamic routing of the DPAD (RGB) output on Gen2. On Gen3 all the SoCs supported so far could only route one CRTC to the DPAD output, so the routing wasn't very dynamic, but the register still had to be programmed accordingly. This patch reuses the existing dynamic routing that we use on Gen2 for Gen3. > I am missing where those dynamic association happens, as I see the > possible dpad0 source being changed in 'rcar_du_crtc_route_output()' > which is in turn called by the mode set operation > 'rcar_du_crtc_route_output()'. > > But at the same time, I only see the routing register DEFR8 being > written by rcar_du_group_setup_defr8() called by the group route setup > operation rcar_du_group_set_routing() called at crtc setup time only. > > Would the mode set operation on the encoder being supporsed to go to > the group's set_routing operation? Or does DEFR8 configuration happens > with a different call path? Your analysis of the code flow is right. The reason why we don't write DEFR8 directly is that changes to the register only take effect when the group is disabled (lovely hardware design, isn't it ?). The driver relies on the fact that changing the routing involves disabling and enabling CRTCs, but the mechanism is fragile, and it might even be buggy. The RGB output on D3 and E3 isn't officially supported by this patch series, so I already plan to revisit the code later and hopefully clean it. > > Signed-off-by: Laurent Pinchart > > > > --- > > > > drivers/gpu/drm/rcar-du/rcar_du_group.c | 17 ++++++----------- > > drivers/gpu/drm/rcar-du/rcar_du_kms.c | 12 ++++++++++++ > > 2 files changed, 18 insertions(+), 11 deletions(-) > > > > diff --git a/drivers/gpu/drm/rcar-du/rcar_du_group.c > > b/drivers/gpu/drm/rcar-du/rcar_du_group.c index > > 4c62841eff2f..f38703e7a10d 100644 > > --- a/drivers/gpu/drm/rcar-du/rcar_du_group.c > > +++ b/drivers/gpu/drm/rcar-du/rcar_du_group.c > > @@ -56,8 +56,6 @@ static void rcar_du_group_setup_pins(struct > > rcar_du_group *rgrp) > > static void rcar_du_group_setup_defr8(struct rcar_du_group *rgrp) > > { > > struct rcar_du_device *rcdu = rgrp->dev; > > - unsigned int possible_crtcs = > > - rcdu->info->routes[RCAR_DU_OUTPUT_DPAD0].possible_crtcs; > > u32 defr8 = DEFR8_CODE; > > > > if (rcdu->info->gen < 3) { > > @@ -69,21 +67,18 @@ static void rcar_du_group_setup_defr8(struct > > rcar_du_group *rgrp) > > * DU instances that support it. > > */ > > if (rgrp->index == 0) { > > - if (possible_crtcs > 1) > > - defr8 |= DEFR8_DRGBS_DU(rcdu->dpad0_source); > > + defr8 |= DEFR8_DRGBS_DU(rcdu->dpad0_source); > > if (rgrp->dev->vspd1_sink == 2) > > defr8 |= DEFR8_VSCS; > > } > > } else { > > /* > > - * On Gen3 VSPD routing can't be configured, but DPAD routing > > - * needs to be set despite having a single option available. > > + * On Gen3 VSPD routing can't be configured, and DPAD routing > > + * is set in the group corresponding to the DPAD output (no Gen3 > > + * SoC has multiple DPAD sources belonging to separate groups). > > */ > > - unsigned int rgb_crtc = ffs(possible_crtcs) - 1; > > - struct rcar_du_crtc *crtc = &rcdu->crtcs[rgb_crtc]; > > - > > - if (crtc->index / 2 == rgrp->index) > > - defr8 |= DEFR8_DRGBS_DU(crtc->index); > > + if (rgrp->index == rcdu->dpad0_source / 2) > > + defr8 |= DEFR8_DRGBS_DU(rcdu->dpad0_source); > > } > > > > rcar_du_group_write(rgrp, DEFR8, defr8); > > diff --git a/drivers/gpu/drm/rcar-du/rcar_du_kms.c > > b/drivers/gpu/drm/rcar-du/rcar_du_kms.c index ed7fa3204892..bd01197700c5 > > 100644 > > --- a/drivers/gpu/drm/rcar-du/rcar_du_kms.c > > +++ b/drivers/gpu/drm/rcar-du/rcar_du_kms.c > > @@ -501,6 +501,7 @@ int rcar_du_modeset_init(struct rcar_du_device *rcdu) > > struct drm_device *dev = rcdu->ddev; > > struct drm_encoder *encoder; > > struct drm_fbdev_cma *fbdev; > > + unsigned int dpad0_sources; > > unsigned int num_encoders; > > unsigned int num_groups; > > unsigned int swindex; > > @@ -613,6 +614,17 @@ int rcar_du_modeset_init(struct rcar_du_device *rcdu) > > encoder->possible_clones = (1 << num_encoders) - 1; > > } > > > > + /* > > + * Initialize the default DPAD0 source to the index of the first DU > > + * channel that can be connected to DPAD0. The exact value doesn't > > + * matter as it should be overwritten by mode setting for the RGB > > + * output, but it is nonetheless required to ensure a valid initial > > + * hardware configuration on Gen3 where DU0 can't always be connected > > to > > + * DPAD0. > > + */ > > + dpad0_sources = rcdu->info-> > > routes[RCAR_DU_OUTPUT_DPAD0].possible_crtcs; > > + rcdu->dpad0_source = ffs(dpad0_sources) - 1; > > + > > drm_mode_config_reset(dev); > > > > drm_kms_helper_poll_init(dev); -- Regards, Laurent Pinchart From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH 08/16] drm: rcar-du: Enable configurable DPAD0 routing on Gen3 Date: Fri, 14 Sep 2018 00:25:32 +0300 Message-ID: <3457296.bcsaz67t6o@avalon> References: <20180904121027.24031-1-laurent.pinchart+renesas@ideasonboard.com> <20180904121027.24031-9-laurent.pinchart+renesas@ideasonboard.com> <20180911154653.GW28160@w540> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by gabe.freedesktop.org (Postfix) with ESMTPS id B25966E274 for ; Thu, 13 Sep 2018 21:25:21 +0000 (UTC) In-Reply-To: <20180911154653.GW28160@w540> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: jacopo mondi Cc: linux-renesas-soc@vger.kernel.org, Laurent Pinchart , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org SGkgSmFjb3BvLAoKVGhhbmsgeW91IGZvciB0aGUgcGF0Y2guCgpPbiBUdWVzZGF5LCAxMSBTZXB0 ZW1iZXIgMjAxOCAxODo0Njo1MyBFRVNUIGphY29wbyBtb25kaSB3cm90ZToKPiBPbiBUdWUsIFNl cCAwNCwgMjAxOCBhdCAwMzoxMDoxOVBNICswMzAwLCBMYXVyZW50IFBpbmNoYXJ0IHdyb3RlOgo+ ID4gQWxsIEdlbjMgU29DcyBzdXBwb3J0ZWQgc28gZmFyIGhhdmUgYSBmaXhlZCBhc3NvY2lhdGlv biBiZXR3ZWVuIERQQUQwCj4gPiBhbmQgRFUgY2hhbm5lbHMsIHdoaWNoIGxlZCB0byBoYXJkY29k aW5nIHRoYXQgYXNzb2NpYXRpb24gd2hlbiB3cml0aW5nCj4gPiB0aGUgY29ycmVzcG9uZGluZyBo YXJkd2FyZSByZWdpc3Rlci4gVGhlIEQzIGFuZCBFMyB3aWxsIGJyZWFrIHRoYXQKPiA+IG1lY2hh bmlzbSBhcyBEUEFEMCBjYW4gYmUgZHluYW1pY2FsbHkgY29ubmVjdGVkIHRvIGVpdGhlciBEVTAg b3IgRFUxLgo+ID4gCj4gPiBNYWtlIERQQUQwIHJvdXRpbmcgZHluYW1pYyBvbiBHZW4zLiBUbyBl bnN1cmUgYSB2YWxpZCBoYXJkd2FyZQo+ID4gY29uZmlndXJhdGlvbiB3aGVuIHRoZSBEVSBzdGFy dHMgd2l0aG91dCB0aGUgUkdCIG91dHB1dCBlbmFibGVkLCBEUEFEMAo+ID4gaXMgYXNzb2NpYXRl ZCBhdCBpbml0aWFsaXphdGlvbiB0aW1lIHRvIHRoZSBmaXJzdCBEVSBjaGFubmVsIHRoYXQgaXQg Y2FuCj4gPiBiZSBjb25uZWN0ZWQgdG8uIFRoaXMgbWFrZXMgbm8gY2hhbmdlIG9uIEdlbjIgYXMg YWxsIEdlbjIgU29DcyBjYW4KPiA+IGNvbm5lY3RlZCBEUEFEMCB0byBEVTAsIHdoaWNoIGlzIHRo ZSBjdXJyZW50IGltcGxpY2l0IGRlZmF1bHQgdmFsdWUuCj4gPiAKPiA+IEFzIHRoZSBEUEFEMCBz b3VyY2UgaXMgYWx3YXlzIDAgd2hlbiBhIHNpbmdsZSBzb3VyY2UgaXMgcG9zc2libGUgb24KPiA+ IEdlbjIsIHdlIGNhbiBhbHNvIHNpbXBsaWZ5IHRoZSBHZW4yIGNvZGUgaW4gdGhlIHNhbWUgZnVu Y3Rpb24gdG8gcmVtb3ZlCj4gPiBhIGNvbmRpdGlvbmFsIGNoZWNrLgo+IAo+IERvZXMgdGhpcyBw YXRjaCBvbmx5IHByZXBhcmVzIGZvciByb3V0aW5nIHRvIGJlIG1hZCBkeW5hbWljIG9yIGl0IGlz Cj4gYWxyZWFkeSBzdXBwb3J0ZWQ/CgpJdCdzIGFscmVhZHkgZHluYW1pYy4gV2Ugc3VwcG9ydCBk eW5hbWljIHJvdXRpbmcgb2YgdGhlIERQQUQgKFJHQikgb3V0cHV0IG9uIApHZW4yLiBPbiBHZW4z IGFsbCB0aGUgU29DcyBzdXBwb3J0ZWQgc28gZmFyIGNvdWxkIG9ubHkgcm91dGUgb25lIENSVEMg dG8gdGhlIApEUEFEIG91dHB1dCwgc28gdGhlIHJvdXRpbmcgd2Fzbid0IHZlcnkgZHluYW1pYywg YnV0IHRoZSByZWdpc3RlciBzdGlsbCBoYWQgdG8gCmJlIHByb2dyYW1tZWQgYWNjb3JkaW5nbHku IFRoaXMgcGF0Y2ggcmV1c2VzIHRoZSBleGlzdGluZyBkeW5hbWljIHJvdXRpbmcgdGhhdCAKd2Ug dXNlIG9uIEdlbjIgZm9yIEdlbjMuCgo+IEkgYW0gbWlzc2luZyB3aGVyZSB0aG9zZSBkeW5hbWlj IGFzc29jaWF0aW9uIGhhcHBlbnMsIGFzIEkgc2VlIHRoZQo+IHBvc3NpYmxlIGRwYWQwIHNvdXJj ZSBiZWluZyBjaGFuZ2VkIGluICdyY2FyX2R1X2NydGNfcm91dGVfb3V0cHV0KCknCj4gd2hpY2gg aXMgaW4gdHVybiBjYWxsZWQgYnkgdGhlIG1vZGUgc2V0IG9wZXJhdGlvbgo+ICdyY2FyX2R1X2Ny dGNfcm91dGVfb3V0cHV0KCknLgo+IAo+IEJ1dCBhdCB0aGUgc2FtZSB0aW1lLCBJIG9ubHkgc2Vl IHRoZSByb3V0aW5nIHJlZ2lzdGVyIERFRlI4IGJlaW5nCj4gd3JpdHRlbiBieSByY2FyX2R1X2dy b3VwX3NldHVwX2RlZnI4KCkgY2FsbGVkIGJ5IHRoZSBncm91cCByb3V0ZSBzZXR1cAo+IG9wZXJh dGlvbiByY2FyX2R1X2dyb3VwX3NldF9yb3V0aW5nKCkgY2FsbGVkIGF0IGNydGMgc2V0dXAgdGlt ZSBvbmx5Lgo+IAo+IFdvdWxkIHRoZSBtb2RlIHNldCBvcGVyYXRpb24gb24gdGhlIGVuY29kZXIg YmVpbmcgc3VwcG9yc2VkIHRvIGdvIHRvCj4gdGhlIGdyb3VwJ3Mgc2V0X3JvdXRpbmcgb3BlcmF0 aW9uPyBPciBkb2VzIERFRlI4IGNvbmZpZ3VyYXRpb24gaGFwcGVucwo+IHdpdGggYSBkaWZmZXJl bnQgY2FsbCBwYXRoPwoKWW91ciBhbmFseXNpcyBvZiB0aGUgY29kZSBmbG93IGlzIHJpZ2h0LiBU aGUgcmVhc29uIHdoeSB3ZSBkb24ndCB3cml0ZSBERUZSOCAKZGlyZWN0bHkgaXMgdGhhdCBjaGFu Z2VzIHRvIHRoZSByZWdpc3RlciBvbmx5IHRha2UgZWZmZWN0IHdoZW4gdGhlIGdyb3VwIGlzIApk aXNhYmxlZCAobG92ZWx5IGhhcmR3YXJlIGRlc2lnbiwgaXNuJ3QgaXQgPykuIFRoZSBkcml2ZXIg cmVsaWVzIG9uIHRoZSBmYWN0IAp0aGF0IGNoYW5naW5nIHRoZSByb3V0aW5nIGludm9sdmVzIGRp c2FibGluZyBhbmQgZW5hYmxpbmcgQ1JUQ3MsIGJ1dCB0aGUgCm1lY2hhbmlzbSBpcyBmcmFnaWxl LCBhbmQgaXQgbWlnaHQgZXZlbiBiZSBidWdneS4KClRoZSBSR0Igb3V0cHV0IG9uIEQzIGFuZCBF MyBpc24ndCBvZmZpY2lhbGx5IHN1cHBvcnRlZCBieSB0aGlzIHBhdGNoIHNlcmllcywgCnNvIEkg YWxyZWFkeSBwbGFuIHRvIHJldmlzaXQgdGhlIGNvZGUgbGF0ZXIgYW5kIGhvcGVmdWxseSBjbGVh biBpdC4KCj4gPiBTaWduZWQtb2ZmLWJ5OiBMYXVyZW50IFBpbmNoYXJ0Cj4gPiA8bGF1cmVudC5w aW5jaGFydCtyZW5lc2FzQGlkZWFzb25ib2FyZC5jb20+Cj4gPiAtLS0KPiA+IAo+ID4gIGRyaXZl cnMvZ3B1L2RybS9yY2FyLWR1L3JjYXJfZHVfZ3JvdXAuYyB8IDE3ICsrKysrKy0tLS0tLS0tLS0t Cj4gPiAgZHJpdmVycy9ncHUvZHJtL3JjYXItZHUvcmNhcl9kdV9rbXMuYyAgIHwgMTIgKysrKysr KysrKysrCj4gPiAgMiBmaWxlcyBjaGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlv bnMoLSkKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yY2FyLWR1L3JjYXJf ZHVfZ3JvdXAuYwo+ID4gYi9kcml2ZXJzL2dwdS9kcm0vcmNhci1kdS9yY2FyX2R1X2dyb3VwLmMg aW5kZXgKPiA+IDRjNjI4NDFlZmYyZi4uZjM4NzAzZTdhMTBkIDEwMDY0NAo+ID4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL3JjYXItZHUvcmNhcl9kdV9ncm91cC5jCj4gPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vcmNhci1kdS9yY2FyX2R1X2dyb3VwLmMKPiA+IEBAIC01Niw4ICs1Niw2IEBAIHN0YXRp YyB2b2lkIHJjYXJfZHVfZ3JvdXBfc2V0dXBfcGlucyhzdHJ1Y3QKPiA+IHJjYXJfZHVfZ3JvdXAg KnJncnApCj4gPiAgc3RhdGljIHZvaWQgcmNhcl9kdV9ncm91cF9zZXR1cF9kZWZyOChzdHJ1Y3Qg cmNhcl9kdV9ncm91cCAqcmdycCkKPiA+ICB7Cj4gPiAgCXN0cnVjdCByY2FyX2R1X2RldmljZSAq cmNkdSA9IHJncnAtPmRldjsKPiA+IC0JdW5zaWduZWQgaW50IHBvc3NpYmxlX2NydGNzID0KPiA+ IC0JCXJjZHUtPmluZm8tPnJvdXRlc1tSQ0FSX0RVX09VVFBVVF9EUEFEMF0ucG9zc2libGVfY3J0 Y3M7Cj4gPiAgCXUzMiBkZWZyOCA9IERFRlI4X0NPREU7Cj4gPiAgCQo+ID4gIAlpZiAocmNkdS0+ aW5mby0+Z2VuIDwgMykgewo+ID4gQEAgLTY5LDIxICs2NywxOCBAQCBzdGF0aWMgdm9pZCByY2Fy X2R1X2dyb3VwX3NldHVwX2RlZnI4KHN0cnVjdAo+ID4gcmNhcl9kdV9ncm91cCAqcmdycCkKPiA+ ICAJCSAqIERVIGluc3RhbmNlcyB0aGF0IHN1cHBvcnQgaXQuCj4gPiAgCQkgKi8KPiA+ICAJCWlm IChyZ3JwLT5pbmRleCA9PSAwKSB7Cj4gPiAtCQkJaWYgKHBvc3NpYmxlX2NydGNzID4gMSkKPiA+ IC0JCQkJZGVmcjggfD0gREVGUjhfRFJHQlNfRFUocmNkdS0+ZHBhZDBfc291cmNlKTsKPiA+ICsJ CQlkZWZyOCB8PSBERUZSOF9EUkdCU19EVShyY2R1LT5kcGFkMF9zb3VyY2UpOwo+ID4gIAkJCWlm IChyZ3JwLT5kZXYtPnZzcGQxX3NpbmsgPT0gMikKPiA+ICAJCQkJZGVmcjggfD0gREVGUjhfVlND UzsKPiA+ICAJCX0KPiA+ICAJfSBlbHNlIHsKPiA+ICAJCS8qCj4gPiAtCQkgKiBPbiBHZW4zIFZT UEQgcm91dGluZyBjYW4ndCBiZSBjb25maWd1cmVkLCBidXQgRFBBRCByb3V0aW5nCj4gPiAtCQkg KiBuZWVkcyB0byBiZSBzZXQgZGVzcGl0ZSBoYXZpbmcgYSBzaW5nbGUgb3B0aW9uIGF2YWlsYWJs ZS4KPiA+ICsJCSAqIE9uIEdlbjMgVlNQRCByb3V0aW5nIGNhbid0IGJlIGNvbmZpZ3VyZWQsIGFu ZCBEUEFEIHJvdXRpbmcKPiA+ICsJCSAqIGlzIHNldCBpbiB0aGUgZ3JvdXAgY29ycmVzcG9uZGlu ZyB0byB0aGUgRFBBRCBvdXRwdXQgKG5vIEdlbjMKPiA+ICsJCSAqIFNvQyBoYXMgbXVsdGlwbGUg RFBBRCBzb3VyY2VzIGJlbG9uZ2luZyB0byBzZXBhcmF0ZSBncm91cHMpLgo+ID4gIAkJICovCj4g PiAtCQl1bnNpZ25lZCBpbnQgcmdiX2NydGMgPSBmZnMocG9zc2libGVfY3J0Y3MpIC0gMTsKPiA+ IC0JCXN0cnVjdCByY2FyX2R1X2NydGMgKmNydGMgPSAmcmNkdS0+Y3J0Y3NbcmdiX2NydGNdOwo+ ID4gLQo+ID4gLQkJaWYgKGNydGMtPmluZGV4IC8gMiA9PSByZ3JwLT5pbmRleCkKPiA+IC0JCQlk ZWZyOCB8PSBERUZSOF9EUkdCU19EVShjcnRjLT5pbmRleCk7Cj4gPiArCQlpZiAocmdycC0+aW5k ZXggPT0gcmNkdS0+ZHBhZDBfc291cmNlIC8gMikKPiA+ICsJCQlkZWZyOCB8PSBERUZSOF9EUkdC U19EVShyY2R1LT5kcGFkMF9zb3VyY2UpOwo+ID4gIAl9Cj4gPiAgCQo+ID4gIAlyY2FyX2R1X2dy b3VwX3dyaXRlKHJncnAsIERFRlI4LCBkZWZyOCk7Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3JjYXItZHUvcmNhcl9kdV9rbXMuYwo+ID4gYi9kcml2ZXJzL2dwdS9kcm0vcmNhci1k dS9yY2FyX2R1X2ttcy5jIGluZGV4IGVkN2ZhMzIwNDg5Mi4uYmQwMTE5NzcwMGM1Cj4gPiAxMDA2 NDQKPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yY2FyLWR1L3JjYXJfZHVfa21zLmMKPiA+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9yY2FyLWR1L3JjYXJfZHVfa21zLmMKPiA+IEBAIC01MDEsNiAr NTAxLDcgQEAgaW50IHJjYXJfZHVfbW9kZXNldF9pbml0KHN0cnVjdCByY2FyX2R1X2RldmljZSAq cmNkdSkKPiA+ICAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHJjZHUtPmRkZXY7Cj4gPiAgCXN0 cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKPiA+ICAJc3RydWN0IGRybV9mYmRldl9jbWEgKmZi ZGV2Owo+ID4gKwl1bnNpZ25lZCBpbnQgZHBhZDBfc291cmNlczsKPiA+ICAJdW5zaWduZWQgaW50 IG51bV9lbmNvZGVyczsKPiA+ICAJdW5zaWduZWQgaW50IG51bV9ncm91cHM7Cj4gPiAgCXVuc2ln bmVkIGludCBzd2luZGV4Owo+ID4gQEAgLTYxMyw2ICs2MTQsMTcgQEAgaW50IHJjYXJfZHVfbW9k ZXNldF9pbml0KHN0cnVjdCByY2FyX2R1X2RldmljZSAqcmNkdSkKPiA+ICAJCWVuY29kZXItPnBv c3NpYmxlX2Nsb25lcyA9ICgxIDw8IG51bV9lbmNvZGVycykgLSAxOwo+ID4gIAl9Cj4gPiAKPiA+ ICsJLyoKPiA+ICsJICogSW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCBEUEFEMCBzb3VyY2UgdG8gdGhl IGluZGV4IG9mIHRoZSBmaXJzdCBEVQo+ID4gKwkgKiBjaGFubmVsIHRoYXQgY2FuIGJlIGNvbm5l Y3RlZCB0byBEUEFEMC4gVGhlIGV4YWN0IHZhbHVlIGRvZXNuJ3QKPiA+ICsJICogbWF0dGVyIGFz IGl0IHNob3VsZCBiZSBvdmVyd3JpdHRlbiBieSBtb2RlIHNldHRpbmcgZm9yIHRoZSBSR0IKPiA+ ICsJICogb3V0cHV0LCBidXQgaXQgaXMgbm9uZXRoZWxlc3MgcmVxdWlyZWQgdG8gZW5zdXJlIGEg dmFsaWQgaW5pdGlhbAo+ID4gKwkgKiBoYXJkd2FyZSBjb25maWd1cmF0aW9uIG9uIEdlbjMgd2hl cmUgRFUwIGNhbid0IGFsd2F5cyBiZSBjb25uZWN0ZWQKPiA+IHRvCj4gPiArCSAqIERQQUQwLgo+ ID4gKwkgKi8KPiA+ICsJZHBhZDBfc291cmNlcyA9IHJjZHUtPmluZm8tPgo+ID4gcm91dGVzW1JD QVJfRFVfT1VUUFVUX0RQQUQwXS5wb3NzaWJsZV9jcnRjczsKPiA+ICsJcmNkdS0+ZHBhZDBfc291 cmNlID0gZmZzKGRwYWQwX3NvdXJjZXMpIC0gMTsKPiA+ICsKPiA+ICAJZHJtX21vZGVfY29uZmln X3Jlc2V0KGRldik7Cj4gPiAgCQo+ID4gIAlkcm1fa21zX2hlbHBlcl9wb2xsX2luaXQoZGV2KTsK Ci0tIApSZWdhcmRzLAoKTGF1cmVudCBQaW5jaGFydAoKCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZl bEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9kcmktZGV2ZWwK