From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from galahad.ideasonboard.com ([185.26.127.97]:39233 "EHLO galahad.ideasonboard.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750929AbdLKU6i (ORCPT ); Mon, 11 Dec 2017 15:58:38 -0500 From: Laurent Pinchart To: kieran.bingham@ideasonboard.com Cc: Laurent Pinchart , dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org, linux-renesas-soc@vger.kernel.org Subject: Re: [PATCH v2 13/14] drm: rcar-du: Restrict DPLL duty cycle workaround to H3 ES1.x Date: Mon, 11 Dec 2017 22:58:40 +0200 Message-ID: <2653318.Q8RMW46eQ1@avalon> In-Reply-To: <8f72d427-4a7c-29ee-2492-d3a99449dfb8@ideasonboard.com> References: <20170626181226.29575-1-laurent.pinchart+renesas@ideasonboard.com> <20170626181226.29575-14-laurent.pinchart+renesas@ideasonboard.com> <8f72d427-4a7c-29ee-2492-d3a99449dfb8@ideasonboard.com> 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 Kieran, I found this e-mail already written and sitting in my outbox, so even if it's quite outdated I decided to still send it. On Tuesday 01 Aug 2017 15:06:20 Kieran Bingham wrote: > On 26/06/17 19:12, Laurent Pinchart wrote: > > The H3 ES1.x exhibits dot clock duty cycle stability issues. We can work > > around them by configuring the DPLL to twice the desired frequency, > > coupled with a /2 post-divider. This isn't needed on other SoCs and > > breaks HDMI output on M3-W for a currently unknown reason, so restrict > > the workaround to H3 ES1.x. > > > > From an implementation point of view, move work around handling outside > > of the rcar_du_dpll_divider() function by requesting a x2 DPLL output > > frequency explicitly. The existing post-divider calculation mechanism > > will then take care of dividing the clock by two automatically. > > > > While at it, print a more useful debugging message to ease debugging > > clock rate issues. > > > > Signed-off-by: Laurent Pinchart > > > > --- > > > > drivers/gpu/drm/rcar-du/rcar_du_crtc.c | 37 ++++++++++++++++++++--------- > > 1 file changed, 27 insertions(+), 10 deletions(-) > > > > diff --git a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c > > b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c index 8f942ebdd0c6..6c29981377c0 > > 100644 > > --- a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c > > +++ b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c > > @@ -13,6 +13,7 @@ > > > > #include > > #include > > +#include > > > > #include > > #include > > @@ -129,10 +130,8 @@ static void rcar_du_dpll_divider(struct rcar_du_crtc > > *rcrtc, > > for (fdpll = 1; fdpll < 32; fdpll++) { > > unsigned long output; > > > > - /* 1/2 (FRQSEL=1) for duty rate 50% */ > > output = input * (n + 1) / (m + 1) > > - / (fdpll + 1) / 2; > > - > > + / (fdpll + 1); > > I'm finding this hard to interpret vs the commit-message. > > Here we remove the /2 (which affects all targets... is this a problem?) The purpose of the rcar_du_dpll_divider() function is to compute the DPLL settings for a target output frequency. However, at the moment, it computes settings that will generate twice the output frequency, assuming that the caller will configure an additional /2 post-divider. I found that confusing, so I've modified this function to generate the target output frequency. The caller is modified below to request twice the desired display clock frequency when adding the post-divider. Note that DPLLs are available on Gen3 only, so this affects H3 and M3-W only. > > if (output >= 400000000) > > continue; [snip] > > @@ -185,7 +189,20 @@ static void rcar_du_crtc_set_display_timing(struct > > rcar_du_crtc *rcrtc)> > > extclk = clk_get_rate(rcrtc->extclock); > > if (rcdu->info->dpll_ch & (1 << rcrtc->index)) { > > > > - rcar_du_dpll_divider(rcrtc, &dpll, extclk, > > mode_clock); > > + unsigned long target = mode_clock; > > + > > + /* > > + * The H3 ES1.x exhibits dot clock duty cycle > > stability > > + * issues. We can work around them by configuring the > > + * DPLL to twice the desired frequency, coupled with a > > + * /2 post-divider. This isn't needed on other SoCs > > and > > But here we discuss 'coupling' it with a /2 post - divider. > > My inference here then is that by setting a target that is 'twice' the value > - code later will provide the /2 post-divide? Correct. On H3 ES1.x the behaviour of the code is unchanged, while on H3 ES2.0 and M3-W we now configure the DPLL without the post-divider. > > + * breaks HDMI output on M3-W for a currently unknown > > + * reason, so restrict the workaround to H3 ES1.x. > > + */ > > + if (soc_device_match(rcar_du_r8a7795_es1)) > > + target *= 2; > > + > > + rcar_du_dpll_divider(rcrtc, &dpll, extclk, target); > > extclk = dpll.output; > > } > > > > @@ -197,8 +214,6 @@ static void rcar_du_crtc_set_display_timing(struct > > rcar_du_crtc *rcrtc) > > if (abs((long)extrate - (long)mode_clock) < > > abs((long)rate - (long)mode_clock)) { > > - dev_dbg(rcrtc->group->dev->dev, > > - "crtc%u: using external clock\n", > > rcrtc->index); > > > > if (rcdu->info->dpll_ch & (1 << rcrtc->index)) { > > u32 dpllcr = DPLLCR_CODE | DPLLCR_CLKE > > @@ -215,12 +230,14 @@ static void rcar_du_crtc_set_display_timing(struct > > rcar_du_crtc *rcrtc) > > rcar_du_group_write(rcrtc->group, DPLLCR, > > dpllcr); > > - > > - escr = ESCR_DCLKSEL_DCLKIN | 1; > > - } else { > > - escr = ESCR_DCLKSEL_DCLKIN | extdiv; > > } > > + > > + escr = ESCR_DCLKSEL_DCLKIN | extdiv; > > Therefore - is this the post-divider? Correct again. There's no need for any SoC-specific processing here, as extdiv is simply computed as DPLL output frequency / pixel clock frequency. > If my inferences are correct - then OK: > > Reviewed-by: Kieran Bingham > > > } > > + > > + dev_dbg(rcrtc->group->dev->dev, > > + "mode clock %lu extrate %lu rate %lu ESCR 0x%08x\n", > > + mode_clock, extrate, rate, escr); > > } > > > > rcar_du_group_write(rcrtc->group, rcrtc->index % 2 ? ESCR2 : ESCR, -- Regards, Laurent Pinchart From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH v2 13/14] drm: rcar-du: Restrict DPLL duty cycle workaround to H3 ES1.x Date: Mon, 11 Dec 2017 22:58:40 +0200 Message-ID: <2653318.Q8RMW46eQ1@avalon> References: <20170626181226.29575-1-laurent.pinchart+renesas@ideasonboard.com> <20170626181226.29575-14-laurent.pinchart+renesas@ideasonboard.com> <8f72d427-4a7c-29ee-2492-d3a99449dfb8@ideasonboard.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from galahad.ideasonboard.com (galahad.ideasonboard.com [185.26.127.97]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2E61A89CAC for ; Mon, 11 Dec 2017 20:58:38 +0000 (UTC) In-Reply-To: <8f72d427-4a7c-29ee-2492-d3a99449dfb8@ideasonboard.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: kieran.bingham@ideasonboard.com Cc: linux-renesas-soc@vger.kernel.org, Laurent Pinchart , dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org SGkgS2llcmFuLAoKSSBmb3VuZCB0aGlzIGUtbWFpbCBhbHJlYWR5IHdyaXR0ZW4gYW5kIHNpdHRp bmcgaW4gbXkgb3V0Ym94LCBzbyBldmVuIGlmIGl0J3MgCnF1aXRlIG91dGRhdGVkIEkgZGVjaWRl ZCB0byBzdGlsbCBzZW5kIGl0LgoKT24gVHVlc2RheSAwMSBBdWcgMjAxNyAxNTowNjoyMCBLaWVy YW4gQmluZ2hhbSB3cm90ZToKPiBPbiAyNi8wNi8xNyAxOToxMiwgTGF1cmVudCBQaW5jaGFydCB3 cm90ZToKPiA+IFRoZSBIMyBFUzEueCBleGhpYml0cyBkb3QgY2xvY2sgZHV0eSBjeWNsZSBzdGFi aWxpdHkgaXNzdWVzLiBXZSBjYW4gd29yawo+ID4gYXJvdW5kIHRoZW0gYnkgY29uZmlndXJpbmcg dGhlIERQTEwgdG8gdHdpY2UgdGhlIGRlc2lyZWQgZnJlcXVlbmN5LAo+ID4gY291cGxlZCB3aXRo IGEgLzIgcG9zdC1kaXZpZGVyLiBUaGlzIGlzbid0IG5lZWRlZCBvbiBvdGhlciBTb0NzIGFuZAo+ ID4gYnJlYWtzIEhETUkgb3V0cHV0IG9uIE0zLVcgZm9yIGEgY3VycmVudGx5IHVua25vd24gcmVh c29uLCBzbyByZXN0cmljdAo+ID4gdGhlIHdvcmthcm91bmQgdG8gSDMgRVMxLnguCj4gPiAKPiA+ IEZyb20gYW4gaW1wbGVtZW50YXRpb24gcG9pbnQgb2YgdmlldywgbW92ZSB3b3JrIGFyb3VuZCBo YW5kbGluZyBvdXRzaWRlCj4gPiBvZiB0aGUgcmNhcl9kdV9kcGxsX2RpdmlkZXIoKSBmdW5jdGlv biBieSByZXF1ZXN0aW5nIGEgeDIgRFBMTCBvdXRwdXQKPiA+IGZyZXF1ZW5jeSBleHBsaWNpdGx5 LiBUaGUgZXhpc3RpbmcgcG9zdC1kaXZpZGVyIGNhbGN1bGF0aW9uIG1lY2hhbmlzbQo+ID4gd2ls bCB0aGVuIHRha2UgY2FyZSBvZiBkaXZpZGluZyB0aGUgY2xvY2sgYnkgdHdvIGF1dG9tYXRpY2Fs bHkuCj4gPiAKPiA+IFdoaWxlIGF0IGl0LCBwcmludCBhIG1vcmUgdXNlZnVsIGRlYnVnZ2luZyBt ZXNzYWdlIHRvIGVhc2UgZGVidWdnaW5nCj4gPiBjbG9jayByYXRlIGlzc3Vlcy4KPiA+IAo+ID4g U2lnbmVkLW9mZi1ieTogTGF1cmVudCBQaW5jaGFydAo+ID4gPGxhdXJlbnQucGluY2hhcnQrcmVu ZXNhc0BpZGVhc29uYm9hcmQuY29tPgo+ID4gLS0tCj4gPiAKPiA+ICBkcml2ZXJzL2dwdS9kcm0v cmNhci1kdS9yY2FyX2R1X2NydGMuYyB8IDM3ICsrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0t Cj4gPiAgMSBmaWxlIGNoYW5nZWQsIDI3IGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQo+ ID4gCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JjYXItZHUvcmNhcl9kdV9jcnRj LmMKPiA+IGIvZHJpdmVycy9ncHUvZHJtL3JjYXItZHUvcmNhcl9kdV9jcnRjLmMgaW5kZXggOGY5 NDJlYmRkMGM2Li42YzI5OTgxMzc3YzAKPiA+IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL3JjYXItZHUvcmNhcl9kdV9jcnRjLmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9yY2Fy LWR1L3JjYXJfZHVfY3J0Yy5jCj4gPiBAQCAtMTMsNiArMTMsNyBAQAo+ID4gCj4gPiAgI2luY2x1 ZGUgPGxpbnV4L2Nsay5oPgo+ID4gICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgo+ID4gKyNpbmNs dWRlIDxsaW51eC9zeXNfc29jLmg+Cj4gPiAKPiA+ICAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiA+ ICAjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KPiA+IEBAIC0xMjksMTAgKzEzMCw4IEBAIHN0 YXRpYyB2b2lkIHJjYXJfZHVfZHBsbF9kaXZpZGVyKHN0cnVjdCByY2FyX2R1X2NydGMKPiA+ICpy Y3J0YywKPiA+ICAJCQlmb3IgKGZkcGxsID0gMTsgZmRwbGwgPCAzMjsgZmRwbGwrKykgewo+ID4g IAkJCQl1bnNpZ25lZCBsb25nIG91dHB1dDsKPiA+IAo+ID4gLQkJCQkvKiAxLzIgKEZSUVNFTD0x KSBmb3IgZHV0eSByYXRlIDUwJSAqLwo+ID4gIAkJCQlvdXRwdXQgPSBpbnB1dCAqIChuICsgMSkg LyAobSArIDEpCj4gPiAtCQkJCSAgICAgICAvIChmZHBsbCArIDEpIC8gMjsKPiA+IC0KPiA+ICsJ CQkJICAgICAgIC8gKGZkcGxsICsgMSk7Cj4gCj4gSSdtIGZpbmRpbmcgdGhpcyBoYXJkIHRvIGlu dGVycHJldCB2cyB0aGUgY29tbWl0LW1lc3NhZ2UuCj4gCj4gSGVyZSB3ZSByZW1vdmUgdGhlIC8y ICh3aGljaCBhZmZlY3RzIGFsbCB0YXJnZXRzLi4uIGlzIHRoaXMgYSBwcm9ibGVtPykKClRoZSBw dXJwb3NlIG9mIHRoZSByY2FyX2R1X2RwbGxfZGl2aWRlcigpIGZ1bmN0aW9uIGlzIHRvIGNvbXB1 dGUgdGhlIERQTEwgCnNldHRpbmdzIGZvciBhIHRhcmdldCBvdXRwdXQgZnJlcXVlbmN5LiBIb3dl dmVyLCBhdCB0aGUgbW9tZW50LCBpdCBjb21wdXRlcyAKc2V0dGluZ3MgdGhhdCB3aWxsIGdlbmVy YXRlIHR3aWNlIHRoZSBvdXRwdXQgZnJlcXVlbmN5LCBhc3N1bWluZyB0aGF0IHRoZSAKY2FsbGVy IHdpbGwgY29uZmlndXJlIGFuIGFkZGl0aW9uYWwgLzIgcG9zdC1kaXZpZGVyLgoKSSBmb3VuZCB0 aGF0IGNvbmZ1c2luZywgc28gSSd2ZSBtb2RpZmllZCB0aGlzIGZ1bmN0aW9uIHRvIGdlbmVyYXRl IHRoZSB0YXJnZXQgCm91dHB1dCBmcmVxdWVuY3kuIFRoZSBjYWxsZXIgaXMgbW9kaWZpZWQgYmVs b3cgdG8gcmVxdWVzdCB0d2ljZSB0aGUgZGVzaXJlZCAKZGlzcGxheSBjbG9jayBmcmVxdWVuY3kg d2hlbiBhZGRpbmcgdGhlIHBvc3QtZGl2aWRlci4KCk5vdGUgdGhhdCBEUExMcyBhcmUgYXZhaWxh YmxlIG9uIEdlbjMgb25seSwgc28gdGhpcyBhZmZlY3RzIEgzIGFuZCBNMy1XIG9ubHkuCgo+ID4g IAkJCQlpZiAob3V0cHV0ID49IDQwMDAwMDAwMCkKPiA+ICAJCQkJCWNvbnRpbnVlOwoKW3NuaXBd Cgo+ID4gQEAgLTE4NSw3ICsxODksMjAgQEAgc3RhdGljIHZvaWQgcmNhcl9kdV9jcnRjX3NldF9k aXNwbGF5X3RpbWluZyhzdHJ1Y3QKPiA+IHJjYXJfZHVfY3J0YyAqcmNydGMpPiAKPiA+ICAJCWV4 dGNsayA9IGNsa19nZXRfcmF0ZShyY3J0Yy0+ZXh0Y2xvY2spOwo+ID4gIAkJaWYgKHJjZHUtPmlu Zm8tPmRwbGxfY2ggJiAoMSA8PCByY3J0Yy0+aW5kZXgpKSB7Cj4gPiAKPiA+IC0JCQlyY2FyX2R1 X2RwbGxfZGl2aWRlcihyY3J0YywgJmRwbGwsIGV4dGNsaywKPiA+IG1vZGVfY2xvY2spOwo+ID4g KwkJCXVuc2lnbmVkIGxvbmcgdGFyZ2V0ID0gbW9kZV9jbG9jazsKPiA+ICsKPiA+ICsJCQkvKgo+ ID4gKwkJCSAqIFRoZSBIMyBFUzEueCBleGhpYml0cyBkb3QgY2xvY2sgZHV0eSBjeWNsZQo+ID4g c3RhYmlsaXR5Cj4gPiArCQkJICogaXNzdWVzLiBXZSBjYW4gd29yayBhcm91bmQgdGhlbSBieSBj b25maWd1cmluZyB0aGUKPiA+ICsJCQkgKiBEUExMIHRvIHR3aWNlIHRoZSBkZXNpcmVkIGZyZXF1 ZW5jeSwgY291cGxlZCB3aXRoIGEKPiA+ICsJCQkgKiAvMiBwb3N0LWRpdmlkZXIuIFRoaXMgaXNu J3QgbmVlZGVkIG9uIG90aGVyIFNvQ3MKPiA+IGFuZAo+IAo+IEJ1dCBoZXJlIHdlIGRpc2N1c3Mg J2NvdXBsaW5nJyBpdCB3aXRoIGEgLzIgcG9zdCAtIGRpdmlkZXIuCj4gCj4gTXkgaW5mZXJlbmNl IGhlcmUgdGhlbiBpcyB0aGF0IGJ5IHNldHRpbmcgYSB0YXJnZXQgdGhhdCBpcyAndHdpY2UnIHRo ZSB2YWx1ZQo+IC0gY29kZSBsYXRlciB3aWxsIHByb3ZpZGUgdGhlIC8yIHBvc3QtZGl2aWRlPwoK Q29ycmVjdC4gT24gSDMgRVMxLnggdGhlIGJlaGF2aW91ciBvZiB0aGUgY29kZSBpcyB1bmNoYW5n ZWQsIHdoaWxlIG9uIEgzIEVTMi4wIAphbmQgTTMtVyB3ZSBub3cgY29uZmlndXJlIHRoZSBEUExM IHdpdGhvdXQgdGhlIHBvc3QtZGl2aWRlci4KCj4gPiArCQkJICogYnJlYWtzIEhETUkgb3V0cHV0 IG9uIE0zLVcgZm9yIGEgY3VycmVudGx5IHVua25vd24KPiA+ICsJCQkgKiByZWFzb24sIHNvIHJl c3RyaWN0IHRoZSB3b3JrYXJvdW5kIHRvIEgzIEVTMS54Lgo+ID4gKwkJCSAqLwo+ID4gKwkJCWlm IChzb2NfZGV2aWNlX21hdGNoKHJjYXJfZHVfcjhhNzc5NV9lczEpKQo+ID4gKwkJCQl0YXJnZXQg Kj0gMjsKPiA+ICsKPiA+ICsJCQlyY2FyX2R1X2RwbGxfZGl2aWRlcihyY3J0YywgJmRwbGwsIGV4 dGNsaywgdGFyZ2V0KTsKPiA+ICAJCQlleHRjbGsgPSBkcGxsLm91dHB1dDsKPiA+ICAJCX0KPiA+ IAo+ID4gQEAgLTE5Nyw4ICsyMTQsNiBAQCBzdGF0aWMgdm9pZCByY2FyX2R1X2NydGNfc2V0X2Rp c3BsYXlfdGltaW5nKHN0cnVjdAo+ID4gcmNhcl9kdV9jcnRjICpyY3J0YykKPiA+ICAJCWlmIChh YnMoKGxvbmcpZXh0cmF0ZSAtIChsb25nKW1vZGVfY2xvY2spIDwKPiA+ICAJCSAgICBhYnMoKGxv bmcpcmF0ZSAtIChsb25nKW1vZGVfY2xvY2spKSB7Cj4gPiAtCQkJZGV2X2RiZyhyY3J0Yy0+Z3Jv dXAtPmRldi0+ZGV2LAo+ID4gLQkJCQkiY3J0YyV1OiB1c2luZyBleHRlcm5hbCBjbG9ja1xuIiwK PiA+IHJjcnRjLT5pbmRleCk7Cj4gPiAKPiA+ICAJCQlpZiAocmNkdS0+aW5mby0+ZHBsbF9jaCAm ICgxIDw8IHJjcnRjLT5pbmRleCkpIHsKPiA+ICAJCQkJdTMyIGRwbGxjciA9IERQTExDUl9DT0RF IHwgRFBMTENSX0NMS0UKPiA+IEBAIC0yMTUsMTIgKzIzMCwxNCBAQCBzdGF0aWMgdm9pZCByY2Fy X2R1X2NydGNfc2V0X2Rpc3BsYXlfdGltaW5nKHN0cnVjdAo+ID4gcmNhcl9kdV9jcnRjICpyY3J0 YykKPiA+ICAJCQkJcmNhcl9kdV9ncm91cF93cml0ZShyY3J0Yy0+Z3JvdXAsIERQTExDUiwKPiA+ ICAJCQkJCQkgICAgZHBsbGNyKTsKPiA+IC0KPiA+IC0JCQkJZXNjciA9IEVTQ1JfRENMS1NFTF9E Q0xLSU4gfCAxOwo+ID4gLQkJCX0gZWxzZSB7Cj4gPiAtCQkJCWVzY3IgPSBFU0NSX0RDTEtTRUxf RENMS0lOIHwgZXh0ZGl2Owo+ID4gIAkJCX0KPiA+ICsKPiA+ICsJCQllc2NyID0gRVNDUl9EQ0xL U0VMX0RDTEtJTiB8IGV4dGRpdjsKPiAKPiBUaGVyZWZvcmUgLSBpcyB0aGlzIHRoZSBwb3N0LWRp dmlkZXI/CgpDb3JyZWN0IGFnYWluLiBUaGVyZSdzIG5vIG5lZWQgZm9yIGFueSBTb0Mtc3BlY2lm aWMgcHJvY2Vzc2luZyBoZXJlLCBhcyBleHRkaXYgCmlzIHNpbXBseSBjb21wdXRlZCBhcyBEUExM IG91dHB1dCBmcmVxdWVuY3kgLyBwaXhlbCBjbG9jayBmcmVxdWVuY3kuCgo+IElmIG15IGluZmVy ZW5jZXMgYXJlIGNvcnJlY3QgLSB0aGVuIE9LOgo+IAo+IFJldmlld2VkLWJ5OiBLaWVyYW4gQmlu Z2hhbSA8a2llcmFuLmJpbmdoYW0rcmVuZXNhc0BpZGVhc29uYm9hcmQuY29tPgo+IAo+ID4gIAkJ fQo+ID4gKwo+ID4gKwkJZGV2X2RiZyhyY3J0Yy0+Z3JvdXAtPmRldi0+ZGV2LAo+ID4gKwkJCSJt b2RlIGNsb2NrICVsdSBleHRyYXRlICVsdSByYXRlICVsdSBFU0NSIDB4JTA4eFxuIiwKPiA+ICsJ CQltb2RlX2Nsb2NrLCBleHRyYXRlLCByYXRlLCBlc2NyKTsKPiA+ICAJfQo+ID4gIAkKPiA+ICAJ cmNhcl9kdV9ncm91cF93cml0ZShyY3J0Yy0+Z3JvdXAsIHJjcnRjLT5pbmRleCAlIDIgPyBFU0NS MiA6IEVTQ1IsCgotLSAKUmVnYXJkcywKCkxhdXJlbnQgUGluY2hhcnQKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApk cmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==