From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id ADCABC072B5 for ; Fri, 24 May 2019 06:45:25 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 6F3682184B for ; Fri, 24 May 2019 06:45:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388451AbfEXGpY convert rfc822-to-8bit (ORCPT ); Fri, 24 May 2019 02:45:24 -0400 Received: from gloria.sntech.de ([185.11.138.130]:34568 "EHLO gloria.sntech.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388365AbfEXGpY (ORCPT ); Fri, 24 May 2019 02:45:24 -0400 Received: from [46.183.103.17] (helo=phil.localnet) by gloria.sntech.de with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1hU3x7-0002US-Pg; Fri, 24 May 2019 08:45:18 +0200 From: Heiko Stuebner To: "elaine.zhang" Cc: Enric Balletbo Serra , Daniel Lezcano , Mark Rutland , "devicetree@vger.kernel.org" , huangtao@rock-chips.com, Linux PM list , xxx@rock-chips.com, xf@rock-chips.com, linux-kernel , Eduardo Valentin , "open list:ARM/Rockchip SoC..." , Rob Herring , Zhang Rui , Linux ARM , Doug Anderson , vicencb@gmail.com Subject: Re: [PATCH v3 1/3] thermal: rockchip: fix up the tsadc pinctrl setting error Date: Fri, 24 May 2019 08:45:12 +0200 Message-ID: <23620031.GKuRlaLy8o@phil> In-Reply-To: References: <1556618986-18923-1-git-send-email-zhangqing@rock-chips.com> <2174314.1vfUlvne1O@phil> MIME-Version: 1.0 Content-Transfer-Encoding: 8BIT Content-Type: text/plain; charset="UTF-8" Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org Hi Elaine, Am Donnerstag, 23. Mai 2019, 03:34:37 CEST schrieb elaine.zhang: > hi, Heiko & Enric: > > 在 2019/5/22 下午8:27, Heiko Stuebner 写道: > > Hi Enric, > > > > Am Montag, 20. Mai 2019, 15:38:32 CEST schrieb Enric Balletbo Serra: > >> Hi all, > >> > >> As pointed by [1] and [2] this commit, that now is upstream, breaks > >> veyron (rk3288) and kevin (rk3399) boards. The problem is especially > >> critical for veyron boards because they don't boot anymore. > >> > >> I didn't look deep at the problem but I have some concerns about this > >> patch, see below. > >> > >> [1] https://www.spinics.net/lists/linux-rockchip/msg24657.html > >> [2] https://www.spinics.net/lists/linux-rockchip/msg24735.html > >> > >> Missatge de Daniel Lezcano del dia dt., 30 > >> d’abr. 2019 a les 15:39: > >>> On 30/04/2019 12:09, Elaine Zhang wrote: > >>>> Explicitly use the pinctrl to set/unset the right mode > >>>> instead of relying on the pinctrl init mode. > >>>> And it requires setting the tshut polarity before select pinctrl. > >>>> > >>>> When the temperature sensor mode is set to 0, it will automatically > >>>> reset the board via the Clock-Reset-Unit (CRU) if the over temperature > >>>> threshold is reached. However, when the pinctrl initializes, it does a > >>>> transition to "otp_out" which may lead the SoC restart all the time. > >>>> > >>>> "otp_out" IO may be connected to the RESET circuit on the hardware. > >>>> If the IO is in the wrong state, it will trigger RESET. > >>>> (similar to the effect of pressing the RESET button) > >>>> which will cause the soc to restart all the time. > >>>> > >>>> Signed-off-by: Elaine Zhang > >>> Reviewed-by: Daniel Lezcano > >>> > >>> > >>> > >>>> --- > >>>> drivers/thermal/rockchip_thermal.c | 36 +++++++++++++++++++++++++++++++++--- > >>>> 1 file changed, 33 insertions(+), 3 deletions(-) > >>>> > >>>> diff --git a/drivers/thermal/rockchip_thermal.c b/drivers/thermal/rockchip_thermal.c > >>>> index 9c7643d62ed7..6dc7fc516abf 100644 > >>>> --- a/drivers/thermal/rockchip_thermal.c > >>>> +++ b/drivers/thermal/rockchip_thermal.c > >>>> @@ -172,6 +172,9 @@ struct rockchip_thermal_data { > >>>> int tshut_temp; > >>>> enum tshut_mode tshut_mode; > >>>> enum tshut_polarity tshut_polarity; > >>>> + struct pinctrl *pinctrl; > >>>> + struct pinctrl_state *gpio_state; > >>>> + struct pinctrl_state *otp_state; > >>>> }; > >>>> > >>>> /** > >>>> @@ -1242,6 +1245,8 @@ static int rockchip_thermal_probe(struct platform_device *pdev) > >>>> return error; > >>>> } > >>>> > >>>> + thermal->chip->control(thermal->regs, false); > >>>> + > >> That's the line that causes the hang. Commenting this makes the veyron > >> boot again. Probably this needs to go after chip->initialize? > > It needs to go after the clk_enable calls. > > At this point the tsadc may still be unclocked. > > The clk is enable by default. Not necessarily. A driver needing a clock should not rely on it being magically on :-) . Especially rk3288 devices were affected by this ... see the number of people "complaining". As you need to have the pclk enabled to access the tsadc registers I'd suggest changing the control to something like clk_prepare_enable(pclk) ->control(..., false) clk_prepare_enable(tsadc) So just swapping the clk-enable order (right now pclk only gets enabled later as second clock) > The reason for this modification: > > The otp Pin polarity setting for tsadc must be set when tsadc is turned off. > > The order: > > Close the tsadc->Set the otp pin polarity ->Set the pinctrl->initialize > the tsadc->Open the tsadc I'm still trying to understand why you need the additional pin-states though. I.e. you introduce an additional gpio and otpout state, but instead could just select the "init" state when needed? (when the tsadc gets disabled) Staying backwards compatible with existing devicetrees is really important and changing the pinctrl requirements makes tsadc probe fail on these. Heiko > > > As for the problem you mentioned, I guess: The default polarity of otp > does not match the default state, that is, the otp is triggered by > default, and then the reset circuit of the hardware takes effect and is > restarted all the time. > Modification: > 1. For this hardware, otp pin default state is modified. > 2. The mode of using CRU is rockchip,hw-tshut-mode = <0> in DTS; > /* tshut mode 0:CRU 1:GPIO */ > > Recommended use method 2. You can try it. > > > > >>>> error = clk_prepare_enable(thermal->clk); > >>>> if (error) { > >>>> dev_err(&pdev->dev, "failed to enable converter clock: %d\n", > >>>> @@ -1267,6 +1272,30 @@ static int rockchip_thermal_probe(struct platform_device *pdev) > >>>> thermal->chip->initialize(thermal->grf, thermal->regs, > >>>> thermal->tshut_polarity); > >>>> > >>>> + if (thermal->tshut_mode == TSHUT_MODE_GPIO) { > >>>> + thermal->pinctrl = devm_pinctrl_get(&pdev->dev); > >>>> + if (IS_ERR(thermal->pinctrl)) { > >>>> + dev_err(&pdev->dev, "failed to find thermal pinctrl\n"); > >>>> + return PTR_ERR(thermal->pinctrl); > >>>> + } > >>>> + > >>>> + thermal->gpio_state = pinctrl_lookup_state(thermal->pinctrl, > >>>> + "gpio"); > >> Shouldn't this mode be documented properly in the binding first? > > More importantly, it should be _backwards-compatible_, aka work with > > old devicetrees without that property and not break thermal handling for > > them entirely. > If need _backwards-compatible_, It's can't return > PTR_ERR(thermal->pinctrl) when get > > devm_pinctrl_get failed. > > > > >> The binding [3] talks about init, default and sleep states but *not* > >> gpio and otpout. The patch series looks incomplete to me or not using > >> the proper names. > >> > >> [3] https://elixir.bootlin.com/linux/v5.2-rc1/source/Documentation/devicetree/bindings/thermal/rockchip-thermal.txt > >> > >>>> + if (IS_ERR_OR_NULL(thermal->gpio_state)) { > >>>> + dev_err(&pdev->dev, "failed to find thermal gpio state\n"); > >>>> + return -EINVAL; > >>>> + } > >>>> + > >>>> + thermal->otp_state = pinctrl_lookup_state(thermal->pinctrl, > >>>> + "otpout"); > >>>> + if (IS_ERR_OR_NULL(thermal->otp_state)) { > >>>> + dev_err(&pdev->dev, "failed to find thermal otpout state\n"); > >>>> + return -EINVAL; > >>>> + } > >>>> + > >> Same here otpout is not a documented. > >> > >> As this change is now in mainline and is causing veyron to hang I'd > >> suggest reverting this change for now. Even fixing the root cause > >> (maybe the one I pointed above) after this patch we will have the > >> thermal driver to fail because "gpio" and "otpout" states are not > >> defined nor documented (a change on this will need some reviews and > >> acks and time I guess). > > I definitly agree here. Handling + checking the binding change > > as well as needed fallback code is definitly not material for -rc-kernels > > so we should just revert for now and let Elaine fix the issues for 5.3. > > > > Anyone volunteering for sending a revert-patch to Eduardo? :-) > > I agree to revert the patch,and I will correct it and push it later. > > Do I need to commit the revert the patch now?@Heiko From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,T_DKIMWL_WL_HIGH,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C00D0C072B5 for ; Fri, 24 May 2019 06:45:36 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 8FC8620868 for ; Fri, 24 May 2019 06:45:36 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="XuApsK9q" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8FC8620868 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=sntech.de Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=k418X93/qXzuPE8dd8fQWHPFzWJb/KWQacgfAg/mrzc=; b=XuApsK9qjNvmmQ oReuqzWOX9Bukt/IJ4xJKR9yUh36Y4SHzxCiJ1We5N5P/WLRO8WKpxwV6UAjgOe5WQzwlX0FJmgmz uTCcDpxLRfBj3rGmdC/hX7dYKNT6ygtUS6zxPG9TimROUvLhEY3+Sr1kqt9qJtZr6kl6Rsx1JTMdO r94M0ldfghqV1F/SGvYMDNVA9o1VdfwS/bVpziD1cW3nmZwAVk99/f3AYgqQhaUIVHV83hEtMhVSm zVfvZdaZe/7KSzNJUO1CotvDBq+2TvrcFODB4W9tMC6dD2AbwwozrKRTl5xW+zTxBTR+caLkeg5y8 QNQFcEju8fK0Ad88PGjw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1hU3xK-0001rw-1p; Fri, 24 May 2019 06:45:30 +0000 Received: from gloria.sntech.de ([185.11.138.130]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1hU3xG-0001qe-Ib; Fri, 24 May 2019 06:45:28 +0000 Received: from [46.183.103.17] (helo=phil.localnet) by gloria.sntech.de with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1hU3x7-0002US-Pg; Fri, 24 May 2019 08:45:18 +0200 From: Heiko Stuebner To: "elaine.zhang" Subject: Re: [PATCH v3 1/3] thermal: rockchip: fix up the tsadc pinctrl setting error Date: Fri, 24 May 2019 08:45:12 +0200 Message-ID: <23620031.GKuRlaLy8o@phil> In-Reply-To: References: <1556618986-18923-1-git-send-email-zhangqing@rock-chips.com> <2174314.1vfUlvne1O@phil> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190523_234526_771539_7F0C13D5 X-CRM114-Status: GOOD ( 33.81 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Mark Rutland , huangtao@rock-chips.com, Doug Anderson , Linux PM list , Enric Balletbo Serra , xxx@rock-chips.com, Daniel Lezcano , linux-kernel , vicencb@gmail.com, xf@rock-chips.com, Eduardo Valentin , "open list:ARM/Rockchip SoC..." , "devicetree@vger.kernel.org" , Rob Herring , Zhang Rui , Linux ARM Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgRWxhaW5lLAoKQW0gRG9ubmVyc3RhZywgMjMuIE1haSAyMDE5LCAwMzozNDozNyBDRVNUIHNj aHJpZWIgZWxhaW5lLnpoYW5nOgo+IGhpLCBIZWlrbyAmIEVucmljOgo+IAo+IOWcqCAyMDE5LzUv MjIg5LiL5Y2IODoyNywgSGVpa28gU3R1ZWJuZXIg5YaZ6YGTOgo+ID4gSGkgRW5yaWMsCj4gPgo+ ID4gQW0gTW9udGFnLCAyMC4gTWFpIDIwMTksIDE1OjM4OjMyIENFU1Qgc2NocmllYiBFbnJpYyBC YWxsZXRibyBTZXJyYToKPiA+PiBIaSBhbGwsCj4gPj4KPiA+PiBBcyBwb2ludGVkIGJ5IFsxXSBh bmQgWzJdIHRoaXMgY29tbWl0LCB0aGF0IG5vdyBpcyB1cHN0cmVhbSwgYnJlYWtzCj4gPj4gdmV5 cm9uIChyazMyODgpIGFuZCBrZXZpbiAocmszMzk5KSBib2FyZHMuIFRoZSBwcm9ibGVtIGlzIGVz cGVjaWFsbHkKPiA+PiBjcml0aWNhbCBmb3IgdmV5cm9uIGJvYXJkcyBiZWNhdXNlIHRoZXkgZG9u J3QgYm9vdCBhbnltb3JlLgo+ID4+Cj4gPj4gSSBkaWRuJ3QgbG9vayBkZWVwIGF0IHRoZSBwcm9i bGVtIGJ1dCBJIGhhdmUgc29tZSBjb25jZXJucyBhYm91dCB0aGlzCj4gPj4gcGF0Y2gsIHNlZSBi ZWxvdy4KPiA+Pgo+ID4+IFsxXSBodHRwczovL3d3dy5zcGluaWNzLm5ldC9saXN0cy9saW51eC1y b2NrY2hpcC9tc2cyNDY1Ny5odG1sCj4gPj4gWzJdIGh0dHBzOi8vd3d3LnNwaW5pY3MubmV0L2xp c3RzL2xpbnV4LXJvY2tjaGlwL21zZzI0NzM1Lmh0bWwKPiA+Pgo+ID4+IE1pc3NhdGdlIGRlIERh bmllbCBMZXpjYW5vIDxkYW5pZWwubGV6Y2Fub0BsaW5hcm8ub3JnPiBkZWwgZGlhIGR0LiwgMzAK PiA+PiBk4oCZYWJyLiAyMDE5IGEgbGVzIDE1OjM5Ogo+ID4+PiBPbiAzMC8wNC8yMDE5IDEyOjA5 LCBFbGFpbmUgWmhhbmcgd3JvdGU6Cj4gPj4+PiBFeHBsaWNpdGx5IHVzZSB0aGUgcGluY3RybCB0 byBzZXQvdW5zZXQgdGhlIHJpZ2h0IG1vZGUKPiA+Pj4+IGluc3RlYWQgb2YgcmVseWluZyBvbiB0 aGUgcGluY3RybCBpbml0IG1vZGUuCj4gPj4+PiBBbmQgaXQgcmVxdWlyZXMgc2V0dGluZyB0aGUg dHNodXQgcG9sYXJpdHkgYmVmb3JlIHNlbGVjdCBwaW5jdHJsLgo+ID4+Pj4KPiA+Pj4+IFdoZW4g dGhlIHRlbXBlcmF0dXJlIHNlbnNvciBtb2RlIGlzIHNldCB0byAwLCBpdCB3aWxsIGF1dG9tYXRp Y2FsbHkKPiA+Pj4+IHJlc2V0IHRoZSBib2FyZCB2aWEgdGhlIENsb2NrLVJlc2V0LVVuaXQgKENS VSkgaWYgdGhlIG92ZXIgdGVtcGVyYXR1cmUKPiA+Pj4+IHRocmVzaG9sZCBpcyByZWFjaGVkLiBI b3dldmVyLCB3aGVuIHRoZSBwaW5jdHJsIGluaXRpYWxpemVzLCBpdCBkb2VzIGEKPiA+Pj4+IHRy YW5zaXRpb24gdG8gIm90cF9vdXQiIHdoaWNoIG1heSBsZWFkIHRoZSBTb0MgcmVzdGFydCBhbGwg dGhlIHRpbWUuCj4gPj4+Pgo+ID4+Pj4gIm90cF9vdXQiIElPIG1heSBiZSBjb25uZWN0ZWQgdG8g dGhlIFJFU0VUIGNpcmN1aXQgb24gdGhlIGhhcmR3YXJlLgo+ID4+Pj4gSWYgdGhlIElPIGlzIGlu IHRoZSB3cm9uZyBzdGF0ZSwgaXQgd2lsbCB0cmlnZ2VyIFJFU0VULgo+ID4+Pj4gKHNpbWlsYXIg dG8gdGhlIGVmZmVjdCBvZiBwcmVzc2luZyB0aGUgUkVTRVQgYnV0dG9uKQo+ID4+Pj4gd2hpY2gg d2lsbCBjYXVzZSB0aGUgc29jIHRvIHJlc3RhcnQgYWxsIHRoZSB0aW1lLgo+ID4+Pj4KPiA+Pj4+ IFNpZ25lZC1vZmYtYnk6IEVsYWluZSBaaGFuZyA8emhhbmdxaW5nQHJvY2stY2hpcHMuY29tPgo+ ID4+PiBSZXZpZXdlZC1ieTogRGFuaWVsIExlemNhbm8gPGRhbmllbC5sZXpjYW5vQGxpbmFyby5v cmc+Cj4gPj4+Cj4gPj4+Cj4gPj4+Cj4gPj4+PiAtLS0KPiA+Pj4+ICAgZHJpdmVycy90aGVybWFs L3JvY2tjaGlwX3RoZXJtYWwuYyB8IDM2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Ky0tLQo+ID4+Pj4gICAxIGZpbGUgY2hhbmdlZCwgMzMgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlv bnMoLSkKPiA+Pj4+Cj4gPj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL3JvY2tjaGlw X3RoZXJtYWwuYyBiL2RyaXZlcnMvdGhlcm1hbC9yb2NrY2hpcF90aGVybWFsLmMKPiA+Pj4+IGlu ZGV4IDljNzY0M2Q2MmVkNy4uNmRjN2ZjNTE2YWJmIDEwMDY0NAo+ID4+Pj4gLS0tIGEvZHJpdmVy cy90aGVybWFsL3JvY2tjaGlwX3RoZXJtYWwuYwo+ID4+Pj4gKysrIGIvZHJpdmVycy90aGVybWFs L3JvY2tjaGlwX3RoZXJtYWwuYwo+ID4+Pj4gQEAgLTE3Miw2ICsxNzIsOSBAQCBzdHJ1Y3Qgcm9j a2NoaXBfdGhlcm1hbF9kYXRhIHsKPiA+Pj4+ICAgICAgICBpbnQgdHNodXRfdGVtcDsKPiA+Pj4+ ICAgICAgICBlbnVtIHRzaHV0X21vZGUgdHNodXRfbW9kZTsKPiA+Pj4+ICAgICAgICBlbnVtIHRz aHV0X3BvbGFyaXR5IHRzaHV0X3BvbGFyaXR5Owo+ID4+Pj4gKyAgICAgc3RydWN0IHBpbmN0cmwg KnBpbmN0cmw7Cj4gPj4+PiArICAgICBzdHJ1Y3QgcGluY3RybF9zdGF0ZSAqZ3Bpb19zdGF0ZTsK PiA+Pj4+ICsgICAgIHN0cnVjdCBwaW5jdHJsX3N0YXRlICpvdHBfc3RhdGU7Cj4gPj4+PiAgIH07 Cj4gPj4+Pgo+ID4+Pj4gICAvKioKPiA+Pj4+IEBAIC0xMjQyLDYgKzEyNDUsOCBAQCBzdGF0aWMg aW50IHJvY2tjaGlwX3RoZXJtYWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikK PiA+Pj4+ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcjsKPiA+Pj4+ICAgICAgICB9Cj4gPj4+ Pgo+ID4+Pj4gKyAgICAgdGhlcm1hbC0+Y2hpcC0+Y29udHJvbCh0aGVybWFsLT5yZWdzLCBmYWxz ZSk7Cj4gPj4+PiArCj4gPj4gVGhhdCdzIHRoZSBsaW5lIHRoYXQgY2F1c2VzIHRoZSBoYW5nLiBD b21tZW50aW5nIHRoaXMgbWFrZXMgdGhlIHZleXJvbgo+ID4+IGJvb3QgYWdhaW4uIFByb2JhYmx5 IHRoaXMgbmVlZHMgdG8gZ28gYWZ0ZXIgY2hpcC0+aW5pdGlhbGl6ZT8KPiA+IEl0IG5lZWRzIHRv IGdvIGFmdGVyIHRoZSBjbGtfZW5hYmxlIGNhbGxzLgo+ID4gQXQgdGhpcyBwb2ludCB0aGUgdHNh ZGMgbWF5IHN0aWxsIGJlIHVuY2xvY2tlZC4KPiAKPiBUaGUgY2xrIGlzIGVuYWJsZSBieSBkZWZh dWx0LgoKTm90IG5lY2Vzc2FyaWx5LiBBIGRyaXZlciBuZWVkaW5nIGEgY2xvY2sgc2hvdWxkIG5v dCByZWx5IG9uIGl0IGJlaW5nCm1hZ2ljYWxseSBvbiA6LSkgLiBFc3BlY2lhbGx5IHJrMzI4OCBk ZXZpY2VzIHdlcmUgYWZmZWN0ZWQgYnkgdGhpcyAuLi4Kc2VlIHRoZSBudW1iZXIgb2YgcGVvcGxl ICJjb21wbGFpbmluZyIuCgpBcyB5b3UgbmVlZCB0byBoYXZlIHRoZSBwY2xrIGVuYWJsZWQgdG8g YWNjZXNzIHRoZSB0c2FkYyByZWdpc3RlcnMKSSdkIHN1Z2dlc3QgY2hhbmdpbmcgdGhlIGNvbnRy b2wgdG8gc29tZXRoaW5nIGxpa2UKCmNsa19wcmVwYXJlX2VuYWJsZShwY2xrKQotPmNvbnRyb2wo Li4uLCBmYWxzZSkKY2xrX3ByZXBhcmVfZW5hYmxlKHRzYWRjKQoKU28ganVzdCBzd2FwcGluZyB0 aGUgY2xrLWVuYWJsZSBvcmRlciAocmlnaHQgbm93IHBjbGsgb25seSBnZXRzIGVuYWJsZWQKbGF0 ZXIgYXMgc2Vjb25kIGNsb2NrKQoKPiBUaGUgcmVhc29uIGZvciB0aGlzIG1vZGlmaWNhdGlvbjoK PiAKPiBUaGUgb3RwIFBpbiBwb2xhcml0eSBzZXR0aW5nIGZvciB0c2FkYyBtdXN0IGJlIHNldCB3 aGVuIHRzYWRjIGlzIHR1cm5lZCBvZmYuCj4gCj4gVGhlIG9yZGVyOgo+IAo+IENsb3NlIHRoZSB0 c2FkYy0+U2V0IHRoZSBvdHAgcGluIHBvbGFyaXR5IC0+U2V0IHRoZSBwaW5jdHJsLT5pbml0aWFs aXplIAo+IHRoZSB0c2FkYy0+T3BlbiB0aGUgdHNhZGMKCkknbSBzdGlsbCB0cnlpbmcgdG8gdW5k ZXJzdGFuZCB3aHkgeW91IG5lZWQgdGhlIGFkZGl0aW9uYWwgcGluLXN0YXRlcwp0aG91Z2guIEku ZS4geW91IGludHJvZHVjZSBhbiBhZGRpdGlvbmFsIGdwaW8gYW5kIG90cG91dCBzdGF0ZSwgYnV0 Cmluc3RlYWQgY291bGQganVzdCBzZWxlY3QgdGhlICJpbml0IiBzdGF0ZSB3aGVuIG5lZWRlZD8K KHdoZW4gdGhlIHRzYWRjIGdldHMgZGlzYWJsZWQpCgpTdGF5aW5nIGJhY2t3YXJkcyBjb21wYXRp YmxlIHdpdGggZXhpc3RpbmcgZGV2aWNldHJlZXMgaXMgcmVhbGx5IGltcG9ydGFudAphbmQgY2hh bmdpbmcgdGhlIHBpbmN0cmwgcmVxdWlyZW1lbnRzIG1ha2VzIHRzYWRjIHByb2JlIGZhaWwgb24g dGhlc2UuCgpIZWlrbwoKCj4gCj4gCj4gQXMgZm9yIHRoZSBwcm9ibGVtIHlvdSBtZW50aW9uZWQs IEkgZ3Vlc3M6IFRoZSBkZWZhdWx0IHBvbGFyaXR5IG9mIG90cCAKPiBkb2VzIG5vdCBtYXRjaCB0 aGUgZGVmYXVsdCBzdGF0ZSwgdGhhdCBpcywgdGhlIG90cCBpcyB0cmlnZ2VyZWQgYnkgCj4gZGVm YXVsdCwgYW5kIHRoZW4gdGhlIHJlc2V0IGNpcmN1aXQgb2YgdGhlIGhhcmR3YXJlIHRha2VzIGVm ZmVjdCBhbmQgaXMgCj4gcmVzdGFydGVkIGFsbCB0aGUgdGltZS4KPiBNb2RpZmljYXRpb246Cj4g MS4gRm9yIHRoaXMgaGFyZHdhcmUsIG90cCBwaW4gZGVmYXVsdCBzdGF0ZSBpcyBtb2RpZmllZC4K PiAyLiBUaGUgbW9kZSBvZiB1c2luZyBDUlUgaXMgcm9ja2NoaXAsaHctdHNodXQtbW9kZSA9IDww PiBpbiBEVFM7Cj4gLyogdHNodXQgbW9kZSAwOkNSVSAxOkdQSU8gKi8KPiAKPiBSZWNvbW1lbmRl ZCB1c2UgbWV0aG9kIDIuIFlvdSBjYW4gdHJ5IGl0Lgo+IAo+ID4KPiA+Pj4+ICAgICAgICBlcnJv ciA9IGNsa19wcmVwYXJlX2VuYWJsZSh0aGVybWFsLT5jbGspOwo+ID4+Pj4gICAgICAgIGlmIChl cnJvcikgewo+ID4+Pj4gICAgICAgICAgICAgICAgZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVk IHRvIGVuYWJsZSBjb252ZXJ0ZXIgY2xvY2s6ICVkXG4iLAo+ID4+Pj4gQEAgLTEyNjcsNiArMTI3 MiwzMCBAQCBzdGF0aWMgaW50IHJvY2tjaGlwX3RoZXJtYWxfcHJvYmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldikKPiA+Pj4+ICAgICAgICB0aGVybWFsLT5jaGlwLT5pbml0aWFsaXplKHRo ZXJtYWwtPmdyZiwgdGhlcm1hbC0+cmVncywKPiA+Pj4+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRoZXJtYWwtPnRzaHV0X3BvbGFyaXR5KTsKPiA+Pj4+Cj4gPj4+PiArICAgICBp ZiAodGhlcm1hbC0+dHNodXRfbW9kZSA9PSBUU0hVVF9NT0RFX0dQSU8pIHsKPiA+Pj4+ICsgICAg ICAgICAgICAgdGhlcm1hbC0+cGluY3RybCA9IGRldm1fcGluY3RybF9nZXQoJnBkZXYtPmRldik7 Cj4gPj4+PiArICAgICAgICAgICAgIGlmIChJU19FUlIodGhlcm1hbC0+cGluY3RybCkpIHsKPiA+ Pj4+ICsgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8g ZmluZCB0aGVybWFsIHBpbmN0cmxcbiIpOwo+ID4+Pj4gKyAgICAgICAgICAgICAgICAgICAgIHJl dHVybiBQVFJfRVJSKHRoZXJtYWwtPnBpbmN0cmwpOwo+ID4+Pj4gKyAgICAgICAgICAgICB9Cj4g Pj4+PiArCj4gPj4+PiArICAgICAgICAgICAgIHRoZXJtYWwtPmdwaW9fc3RhdGUgPSBwaW5jdHJs X2xvb2t1cF9zdGF0ZSh0aGVybWFsLT5waW5jdHJsLAo+ID4+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdwaW8iKTsKPiA+PiBTaG91 bGRuJ3QgdGhpcyBtb2RlIGJlIGRvY3VtZW50ZWQgcHJvcGVybHkgaW4gdGhlIGJpbmRpbmcgZmly c3Q/Cj4gPiBNb3JlIGltcG9ydGFudGx5LCBpdCBzaG91bGQgYmUgX2JhY2t3YXJkcy1jb21wYXRp YmxlXywgYWthIHdvcmsgd2l0aAo+ID4gb2xkIGRldmljZXRyZWVzIHdpdGhvdXQgdGhhdCBwcm9w ZXJ0eSBhbmQgbm90IGJyZWFrIHRoZXJtYWwgaGFuZGxpbmcgZm9yCj4gPiB0aGVtIGVudGlyZWx5 Lgo+IElmIG5lZWQgIF9iYWNrd2FyZHMtY29tcGF0aWJsZV8sICBJdCdzIGNhbid0IHJldHVybiAK PiBQVFJfRVJSKHRoZXJtYWwtPnBpbmN0cmwpIHdoZW4gZ2V0Cj4gCj4gZGV2bV9waW5jdHJsX2dl dCBmYWlsZWQuCj4gCj4gPgo+ID4+IFRoZSBiaW5kaW5nIFszXSB0YWxrcyBhYm91dCBpbml0LCBk ZWZhdWx0IGFuZCBzbGVlcCBzdGF0ZXMgYnV0ICpub3QqCj4gPj4gZ3BpbyBhbmQgb3Rwb3V0LiBU aGUgcGF0Y2ggc2VyaWVzIGxvb2tzIGluY29tcGxldGUgdG8gbWUgb3Igbm90IHVzaW5nCj4gPj4g dGhlIHByb3BlciBuYW1lcy4KPiA+Pgo+ID4+IFszXSBodHRwczovL2VsaXhpci5ib290bGluLmNv bS9saW51eC92NS4yLXJjMS9zb3VyY2UvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdz L3RoZXJtYWwvcm9ja2NoaXAtdGhlcm1hbC50eHQKPiA+Pgo+ID4+Pj4gKyAgICAgICAgICAgICBp ZiAoSVNfRVJSX09SX05VTEwodGhlcm1hbC0+Z3Bpb19zdGF0ZSkpIHsKPiA+Pj4+ICsgICAgICAg ICAgICAgICAgICAgICBkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZmluZCB0aGVybWFs IGdwaW8gc3RhdGVcbiIpOwo+ID4+Pj4gKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlO VkFMOwo+ID4+Pj4gKyAgICAgICAgICAgICB9Cj4gPj4+PiArCj4gPj4+PiArICAgICAgICAgICAg IHRoZXJtYWwtPm90cF9zdGF0ZSA9IHBpbmN0cmxfbG9va3VwX3N0YXRlKHRoZXJtYWwtPnBpbmN0 cmwsCj4gPj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJvdHBvdXQiKTsKPiA+Pj4+ICsgICAgICAgICAgICAgaWYgKElTX0VSUl9PUl9O VUxMKHRoZXJtYWwtPm90cF9zdGF0ZSkpIHsKPiA+Pj4+ICsgICAgICAgICAgICAgICAgICAgICBk ZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZmluZCB0aGVybWFsIG90cG91dCBzdGF0ZVxu Iik7Cj4gPj4+PiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPj4+PiAr ICAgICAgICAgICAgIH0KPiA+Pj4+ICsKPiA+PiBTYW1lIGhlcmUgb3Rwb3V0IGlzIG5vdCBhIGRv Y3VtZW50ZWQuCj4gPj4KPiA+PiBBcyB0aGlzIGNoYW5nZSBpcyBub3cgaW4gbWFpbmxpbmUgYW5k IGlzIGNhdXNpbmcgdmV5cm9uIHRvIGhhbmcgSSdkCj4gPj4gc3VnZ2VzdCByZXZlcnRpbmcgdGhp cyBjaGFuZ2UgZm9yIG5vdy4gRXZlbiBmaXhpbmcgdGhlIHJvb3QgY2F1c2UKPiA+PiAobWF5YmUg dGhlIG9uZSBJIHBvaW50ZWQgYWJvdmUpIGFmdGVyIHRoaXMgcGF0Y2ggd2Ugd2lsbCBoYXZlIHRo ZQo+ID4+IHRoZXJtYWwgZHJpdmVyIHRvIGZhaWwgYmVjYXVzZSAiZ3BpbyIgYW5kICJvdHBvdXQi IHN0YXRlcyBhcmUgbm90Cj4gPj4gZGVmaW5lZCBub3IgZG9jdW1lbnRlZCAoYSBjaGFuZ2Ugb24g dGhpcyB3aWxsIG5lZWQgc29tZSByZXZpZXdzIGFuZAo+ID4+IGFja3MgYW5kIHRpbWUgSSBndWVz cykuCj4gPiBJIGRlZmluaXRseSBhZ3JlZSBoZXJlLiBIYW5kbGluZyArIGNoZWNraW5nIHRoZSBi aW5kaW5nIGNoYW5nZQo+ID4gYXMgd2VsbCBhcyBuZWVkZWQgZmFsbGJhY2sgY29kZSBpcyBkZWZp bml0bHkgbm90IG1hdGVyaWFsIGZvciAtcmMta2VybmVscwo+ID4gc28gd2Ugc2hvdWxkIGp1c3Qg cmV2ZXJ0IGZvciBub3cgYW5kIGxldCBFbGFpbmUgZml4IHRoZSBpc3N1ZXMgZm9yIDUuMy4KPiA+ Cj4gPiBBbnlvbmUgdm9sdW50ZWVyaW5nIGZvciBzZW5kaW5nIGEgcmV2ZXJ0LXBhdGNoIHRvIEVk dWFyZG8/IDotKQo+IAo+IEkgYWdyZWUgdG8gcmV2ZXJ0IHRoZSBwYXRjaCxhbmQgSSB3aWxsIGNv cnJlY3QgaXQgYW5kIHB1c2ggaXQgbGF0ZXIuCj4gCj4gRG8gSSBuZWVkIHRvIGNvbW1pdCB0aGUg cmV2ZXJ0IHRoZSBwYXRjaCBub3c/QEhlaWtvCgoKCgoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGlu dXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQu b3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=