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=-8.5 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1 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 CE053C433DF for ; Fri, 3 Jul 2020 15:43:22 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id AC32D2088E for ; Fri, 3 Jul 2020 15:43:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726152AbgGCPnW (ORCPT ); Fri, 3 Jul 2020 11:43:22 -0400 Received: from foss.arm.com ([217.140.110.172]:45726 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726108AbgGCPnW (ORCPT ); Fri, 3 Jul 2020 11:43:22 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 1FBF431B; Fri, 3 Jul 2020 08:43:21 -0700 (PDT) Received: from [10.57.21.32] (unknown [10.57.21.32]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 47F303F73C; Fri, 3 Jul 2020 08:43:19 -0700 (PDT) Subject: Re: [PATCH v4 1/2] clk: rockchip: rk3288: Handle clock tree for rk3288w To: Heiko Stuebner , Jagan Teki Cc: =?UTF-8?Q?Myl=c3=a8ne_Josserand?= , Michael Turquette , Stephen Boyd , Rob Herring , devicetree , linux-kernel , "open list:ARM/Rockchip SoC..." , kernel@collabora.com, linux-clk , linux-arm-kernel References: <20200602080644.11333-1-mylene.josserand@collabora.com> <1793210.9Kb5SQUFvz@phil> <1847101.XIPLBOrDxk@phil> From: Robin Murphy Message-ID: <8ebc6a0d-1c88-cf74-e19d-dd9f3cef728e@arm.com> Date: Fri, 3 Jul 2020 16:43:17 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <1847101.XIPLBOrDxk@phil> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-GB Content-Transfer-Encoding: 8bit Sender: linux-clk-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-clk@vger.kernel.org On 2020-07-03 15:48, Heiko Stuebner wrote: > Am Freitag, 3. Juli 2020, 16:23:27 CEST schrieb Jagan Teki: >> On Fri, Jul 3, 2020 at 7:41 PM Heiko Stuebner wrote: >>> >>> Hi Jagan, >>> >>> Am Montag, 29. Juni 2020, 21:11:03 CEST schrieb Jagan Teki: >>>> On Tue, Jun 2, 2020 at 1:37 PM Mylène Josserand >>>> wrote: >>>>> >>>>> The revision rk3288w has a different clock tree about "hclk_vio" >>>>> clock, according to the BSP kernel code. >>>>> >>>>> This patch handles this difference by detecting which device-tree >>>>> we are using. If it is a "rockchip,rk3288-cru", let's register >>>>> the clock tree as it was before. If the device-tree node is >>>>> "rockchip,rk3288w-cru", we will apply the difference with this >>>>> version of this SoC. >>>>> >>>>> Noticed that this new device-tree compatible must be handled in >>>>> bootloader such as u-boot. >>>>> >>>>> Signed-off-by: Mylène Josserand >>>>> --- >>>>> drivers/clk/rockchip/clk-rk3288.c | 20 ++++++++++++++++++-- >>>>> 1 file changed, 18 insertions(+), 2 deletions(-) >>>>> >>>>> diff --git a/drivers/clk/rockchip/clk-rk3288.c b/drivers/clk/rockchip/clk-rk3288.c >>>>> index cc2a177bbdbf..204976e2d0cb 100644 >>>>> --- a/drivers/clk/rockchip/clk-rk3288.c >>>>> +++ b/drivers/clk/rockchip/clk-rk3288.c >>>>> @@ -425,8 +425,6 @@ static struct rockchip_clk_branch rk3288_clk_branches[] __initdata = { >>>>> COMPOSITE(0, "aclk_vio0", mux_pll_src_cpll_gpll_usb480m_p, CLK_IGNORE_UNUSED, >>>>> RK3288_CLKSEL_CON(31), 6, 2, MFLAGS, 0, 5, DFLAGS, >>>>> RK3288_CLKGATE_CON(3), 0, GFLAGS), >>>>> - DIV(0, "hclk_vio", "aclk_vio0", 0, >>>>> - RK3288_CLKSEL_CON(28), 8, 5, DFLAGS), >>>>> COMPOSITE(0, "aclk_vio1", mux_pll_src_cpll_gpll_usb480m_p, CLK_IGNORE_UNUSED, >>>>> RK3288_CLKSEL_CON(31), 14, 2, MFLAGS, 8, 5, DFLAGS, >>>>> RK3288_CLKGATE_CON(3), 2, GFLAGS), >>>>> @@ -819,6 +817,16 @@ static struct rockchip_clk_branch rk3288_clk_branches[] __initdata = { >>>>> INVERTER(0, "pclk_isp", "pclk_isp_in", RK3288_CLKSEL_CON(29), 3, IFLAGS), >>>>> }; >>>>> >>>>> +static struct rockchip_clk_branch rk3288w_hclkvio_branch[] __initdata = { >>>>> + DIV(0, "hclk_vio", "aclk_vio1", 0, >>>>> + RK3288_CLKSEL_CON(28), 8, 5, DFLAGS), >>>>> +}; >>>>> + >>>>> +static struct rockchip_clk_branch rk3288_hclkvio_branch[] __initdata = { >>>>> + DIV(0, "hclk_vio", "aclk_vio0", 0, >>>>> + RK3288_CLKSEL_CON(28), 8, 5, DFLAGS), >>>>> +}; >>>>> + >>>>> static const char *const rk3288_critical_clocks[] __initconst = { >>>>> "aclk_cpu", >>>>> "aclk_peri", >>>>> @@ -936,6 +944,14 @@ static void __init rk3288_clk_init(struct device_node *np) >>>>> RK3288_GRF_SOC_STATUS1); >>>>> rockchip_clk_register_branches(ctx, rk3288_clk_branches, >>>>> ARRAY_SIZE(rk3288_clk_branches)); >>>>> + >>>>> + if (of_device_is_compatible(np, "rockchip,rk3288w-cru")) >>>>> + rockchip_clk_register_branches(ctx, rk3288w_hclkvio_branch, >>>>> + ARRAY_SIZE(rk3288w_hclkvio_branch)); >>>>> + else >>>>> + rockchip_clk_register_branches(ctx, rk3288_hclkvio_branch, >>>>> + ARRAY_SIZE(rk3288_hclkvio_branch)); >>>>> + >>>> >>>> Sorry for the late query on this. I am a bit unclear about this >>>> compatible change, does Linux expect to replace rockchip,rk3288-cru >>>> with rockchip,rk3288w-cru in bootloader if the chip is RK3288w? or >>>> append the existing cru compatible node with rockchip,rk3288w-cru? >>>> because replace new cru node make clock never probe since the >>>> CLK_OF_DECLARE checking rockchip,rk3288-cru >>> >>> I guess right now we'd expect "rockchip,rk3288w-cru", "rockchip,rk3288-cru", >>> >>> Thinking again about this, I'm wondering if we should switch to having >>> only one per variant ... like on the two rk3188 variants, >>> so declaring separate rk3288-cru and rk3288w-cru of-clks with shared >>> common code. >> >> What if can check the root compatible instead cru compatible for revision W like >> >> - if (of_device_is_compatible(np, "rockchip,rk3288w-cru")) >> + if (of_device_is_compatible(np, "rockchip,rk3288w")) > > you'd need to check against the root compatible. > >> >> This way we can have a single compatible update at bootloader that >> makes Linux adjust revision W chips code. >> >> Doesn't it make sense? > > The compatible describes the block and the rk3288w's cru isn't the same as > the rk3288's ... as the clock routing is different, so it should have a > different compatible value, I think. Right, if two devices behave differently in a way that one behaviour is not a strict superset of the other, and there's no way to tell which is which by simply looking at the device itself, then by definition they are not compatible. > As the DT sis supposed to be a _generic_ description of the hardware, > we don't want to cement hacks to other implementations would need to copy. Indeed it's a pain in the bum for driver developers to be given a new thing that's 99.9% compatible with the old thing but the one tiny difference fundamentally breaks it, and the temptation to look for an easy way out is strong, but c'est la vie ;) The question I always bear in mind for cases like these is this: If a kernel without the driver patch runs on the new system with the expected new DTB, will it: A) work entirely correctly B) ignore the device (with or without an error), but the rest of the system still works fine C) ignore the device and fail to boot at all (with or without an error) because it's critical to operation of the rest of the system D) probe the device and superficially appear to be OK but actually be broken in weird and subtle ways A and B are the ideal answers. C is a little unfortunate, but acceptable if neither A nor B is possible. D is a sign that you're doing something wrong, unless there are *very* specific circumstances that might justify it (e.g. the SoC is exclusively deployed in embedded devices with a controlled update mechanism such that users could never introduce this mismatch in the first place). Robin. 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=-8.5 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 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 77216C433DF for ; Fri, 3 Jul 2020 15:46:32 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (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 4165120870 for ; Fri, 3 Jul 2020 15:46:32 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="kYDLkCiU" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4165120870 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+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=merlin.20170209; h=Sender:Content-Type: Content-Transfer-Encoding:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=XM8ysm4rNYTl4wuIaCi8SK38Tl5JEraqtF6aCu6FjYI=; b=kYDLkCiUWcwL44te8u63TULR3 98UqVZogPFCVUWRwZKYs68GFHQIOv7ELWdzJ2Y5FXZ2BR5r59yabbSVAhjTD/lbOYk+7TRgVX4C5l 8W64fn9M333qgzlFOsgLunkjVO0+TQ3vwn9exx0eW+376DkiLFgZcyqR1wjlau7SCPMqb3jAaKX4+ D8cgliqiMrYbOMc8aSXDjulS6ZPl75OxBfhVMUvlFB307ILZ+ktKNojCnN08HqlQRjoRN+DyjhhYc g5o8a6Yhw/H5DqsCTW50oVI8y9zMxkQrLI+cR13+z2+WupRaCiy9+OcUGkA/R0lvfbZwayRv0mQ9k VCfsAVqPA==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jrNs6-0000N4-Bi; Fri, 03 Jul 2020 15:45:02 +0000 Received: from foss.arm.com ([217.140.110.172]) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jrNqU-0004tu-Ad; Fri, 03 Jul 2020 15:43:23 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 1FBF431B; Fri, 3 Jul 2020 08:43:21 -0700 (PDT) Received: from [10.57.21.32] (unknown [10.57.21.32]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 47F303F73C; Fri, 3 Jul 2020 08:43:19 -0700 (PDT) Subject: Re: [PATCH v4 1/2] clk: rockchip: rk3288: Handle clock tree for rk3288w To: Heiko Stuebner , Jagan Teki References: <20200602080644.11333-1-mylene.josserand@collabora.com> <1793210.9Kb5SQUFvz@phil> <1847101.XIPLBOrDxk@phil> From: Robin Murphy Message-ID: <8ebc6a0d-1c88-cf74-e19d-dd9f3cef728e@arm.com> Date: Fri, 3 Jul 2020 16:43:17 +0100 User-Agent: Mozilla/5.0 (Windows NT 10.0; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <1847101.XIPLBOrDxk@phil> Content-Language: en-GB X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200703_114322_489379_91E55E44 X-CRM114-Status: GOOD ( 30.25 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: =?UTF-8?Q?Myl=c3=a8ne_Josserand?= , devicetree , Stephen Boyd , Michael Turquette , linux-kernel , "open list:ARM/Rockchip SoC..." , Rob Herring , kernel@collabora.com, linux-clk , linux-arm-kernel Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gMjAyMC0wNy0wMyAxNTo0OCwgSGVpa28gU3R1ZWJuZXIgd3JvdGU6Cj4gQW0gRnJlaXRhZywg My4gSnVsaSAyMDIwLCAxNjoyMzoyNyBDRVNUIHNjaHJpZWIgSmFnYW4gVGVraToKPj4gT24gRnJp LCBKdWwgMywgMjAyMCBhdCA3OjQxIFBNIEhlaWtvIFN0dWVibmVyIDxoZWlrb0BzbnRlY2guZGU+ IHdyb3RlOgo+Pj4KPj4+IEhpIEphZ2FuLAo+Pj4KPj4+IEFtIE1vbnRhZywgMjkuIEp1bmkgMjAy MCwgMjE6MTE6MDMgQ0VTVCBzY2hyaWViIEphZ2FuIFRla2k6Cj4+Pj4gT24gVHVlLCBKdW4gMiwg MjAyMCBhdCAxOjM3IFBNIE15bMOobmUgSm9zc2VyYW5kCj4+Pj4gPG15bGVuZS5qb3NzZXJhbmRA Y29sbGFib3JhLmNvbT4gd3JvdGU6Cj4+Pj4+Cj4+Pj4+IFRoZSByZXZpc2lvbiByazMyODh3IGhh cyBhIGRpZmZlcmVudCBjbG9jayB0cmVlIGFib3V0ICJoY2xrX3ZpbyIKPj4+Pj4gY2xvY2ssIGFj Y29yZGluZyB0byB0aGUgQlNQIGtlcm5lbCBjb2RlLgo+Pj4+Pgo+Pj4+PiBUaGlzIHBhdGNoIGhh bmRsZXMgdGhpcyBkaWZmZXJlbmNlIGJ5IGRldGVjdGluZyB3aGljaCBkZXZpY2UtdHJlZQo+Pj4+ PiB3ZSBhcmUgdXNpbmcuIElmIGl0IGlzIGEgInJvY2tjaGlwLHJrMzI4OC1jcnUiLCBsZXQncyBy ZWdpc3Rlcgo+Pj4+PiB0aGUgY2xvY2sgdHJlZSBhcyBpdCB3YXMgYmVmb3JlLiBJZiB0aGUgZGV2 aWNlLXRyZWUgbm9kZSBpcwo+Pj4+PiAicm9ja2NoaXAscmszMjg4dy1jcnUiLCB3ZSB3aWxsIGFw cGx5IHRoZSBkaWZmZXJlbmNlIHdpdGggdGhpcwo+Pj4+PiB2ZXJzaW9uIG9mIHRoaXMgU29DLgo+ Pj4+Pgo+Pj4+PiBOb3RpY2VkIHRoYXQgdGhpcyBuZXcgZGV2aWNlLXRyZWUgY29tcGF0aWJsZSBt dXN0IGJlIGhhbmRsZWQgaW4KPj4+Pj4gYm9vdGxvYWRlciBzdWNoIGFzIHUtYm9vdC4KPj4+Pj4K Pj4+Pj4gU2lnbmVkLW9mZi1ieTogTXlsw6huZSBKb3NzZXJhbmQgPG15bGVuZS5qb3NzZXJhbmRA Y29sbGFib3JhLmNvbT4KPj4+Pj4gLS0tCj4+Pj4+ICAgZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xr LXJrMzI4OC5jIHwgMjAgKysrKysrKysrKysrKysrKysrLS0KPj4+Pj4gICAxIGZpbGUgY2hhbmdl ZCwgMTggaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKPj4+Pj4KPj4+Pj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazMyODguYyBiL2RyaXZlcnMvY2xrL3JvY2tj aGlwL2Nsay1yazMyODguYwo+Pj4+PiBpbmRleCBjYzJhMTc3YmJkYmYuLjIwNDk3NmUyZDBjYiAx MDA2NDQKPj4+Pj4gLS0tIGEvZHJpdmVycy9jbGsvcm9ja2NoaXAvY2xrLXJrMzI4OC5jCj4+Pj4+ ICsrKyBiL2RyaXZlcnMvY2xrL3JvY2tjaGlwL2Nsay1yazMyODguYwo+Pj4+PiBAQCAtNDI1LDgg KzQyNSw2IEBAIHN0YXRpYyBzdHJ1Y3Qgcm9ja2NoaXBfY2xrX2JyYW5jaCByazMyODhfY2xrX2Jy YW5jaGVzW10gX19pbml0ZGF0YSA9IHsKPj4+Pj4gICAgICAgICAgQ09NUE9TSVRFKDAsICJhY2xr X3ZpbzAiLCBtdXhfcGxsX3NyY19jcGxsX2dwbGxfdXNiNDgwbV9wLCBDTEtfSUdOT1JFX1VOVVNF RCwKPj4+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgIFJLMzI4OF9DTEtTRUxfQ09OKDMxKSwg NiwgMiwgTUZMQUdTLCAwLCA1LCBERkxBR1MsCj4+Pj4+ICAgICAgICAgICAgICAgICAgICAgICAg ICBSSzMyODhfQ0xLR0FURV9DT04oMyksIDAsIEdGTEFHUyksCj4+Pj4+IC0gICAgICAgRElWKDAs ICJoY2xrX3ZpbyIsICJhY2xrX3ZpbzAiLCAwLAo+Pj4+PiAtICAgICAgICAgICAgICAgICAgICAg ICBSSzMyODhfQ0xLU0VMX0NPTigyOCksIDgsIDUsIERGTEFHUyksCj4+Pj4+ICAgICAgICAgIENP TVBPU0lURSgwLCAiYWNsa192aW8xIiwgbXV4X3BsbF9zcmNfY3BsbF9ncGxsX3VzYjQ4MG1fcCwg Q0xLX0lHTk9SRV9VTlVTRUQsCj4+Pj4+ICAgICAgICAgICAgICAgICAgICAgICAgICBSSzMyODhf Q0xLU0VMX0NPTigzMSksIDE0LCAyLCBNRkxBR1MsIDgsIDUsIERGTEFHUywKPj4+Pj4gICAgICAg ICAgICAgICAgICAgICAgICAgIFJLMzI4OF9DTEtHQVRFX0NPTigzKSwgMiwgR0ZMQUdTKSwKPj4+ Pj4gQEAgLTgxOSw2ICs4MTcsMTYgQEAgc3RhdGljIHN0cnVjdCByb2NrY2hpcF9jbGtfYnJhbmNo IHJrMzI4OF9jbGtfYnJhbmNoZXNbXSBfX2luaXRkYXRhID0gewo+Pj4+PiAgICAgICAgICBJTlZF UlRFUigwLCAicGNsa19pc3AiLCAicGNsa19pc3BfaW4iLCBSSzMyODhfQ0xLU0VMX0NPTigyOSks IDMsIElGTEFHUyksCj4+Pj4+ICAgfTsKPj4+Pj4KPj4+Pj4gK3N0YXRpYyBzdHJ1Y3Qgcm9ja2No aXBfY2xrX2JyYW5jaCByazMyODh3X2hjbGt2aW9fYnJhbmNoW10gX19pbml0ZGF0YSA9IHsKPj4+ Pj4gKyAgICAgICBESVYoMCwgImhjbGtfdmlvIiwgImFjbGtfdmlvMSIsIDAsCj4+Pj4+ICsgICAg ICAgICAgICAgICAgICAgICAgIFJLMzI4OF9DTEtTRUxfQ09OKDI4KSwgOCwgNSwgREZMQUdTKSwK Pj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBzdHJ1Y3Qgcm9ja2NoaXBfY2xrX2JyYW5j aCByazMyODhfaGNsa3Zpb19icmFuY2hbXSBfX2luaXRkYXRhID0gewo+Pj4+PiArICAgICAgIERJ VigwLCAiaGNsa192aW8iLCAiYWNsa192aW8wIiwgMCwKPj4+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgUkszMjg4X0NMS1NFTF9DT04oMjgpLCA4LCA1LCBERkxBR1MpLAo+Pj4+PiArfTsKPj4+ Pj4gKwo+Pj4+PiAgIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCByazMyODhfY3JpdGljYWxfY2xv Y2tzW10gX19pbml0Y29uc3QgPSB7Cj4+Pj4+ICAgICAgICAgICJhY2xrX2NwdSIsCj4+Pj4+ICAg ICAgICAgICJhY2xrX3BlcmkiLAo+Pj4+PiBAQCAtOTM2LDYgKzk0NCwxNCBAQCBzdGF0aWMgdm9p ZCBfX2luaXQgcmszMjg4X2Nsa19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCj4+Pj4+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJLMzI4OF9HUkZfU09DX1NUQVRVUzEp Owo+Pj4+PiAgICAgICAgICByb2NrY2hpcF9jbGtfcmVnaXN0ZXJfYnJhbmNoZXMoY3R4LCByazMy ODhfY2xrX2JyYW5jaGVzLAo+Pj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEFSUkFZX1NJWkUocmszMjg4X2Nsa19icmFuY2hlcykpOwo+Pj4+PiArCj4+Pj4+ICsgICAgICAg aWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAicm9ja2NoaXAscmszMjg4dy1jcnUiKSkK Pj4+Pj4gKyAgICAgICAgICAgICAgIHJvY2tjaGlwX2Nsa19yZWdpc3Rlcl9icmFuY2hlcyhjdHgs IHJrMzI4OHdfaGNsa3Zpb19icmFuY2gsCj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQVJSQVlfU0laRShyazMyODh3X2hjbGt2aW9fYnJhbmNoKSk7 Cj4+Pj4+ICsgICAgICAgZWxzZQo+Pj4+PiArICAgICAgICAgICAgICAgcm9ja2NoaXBfY2xrX3Jl Z2lzdGVyX2JyYW5jaGVzKGN0eCwgcmszMjg4X2hjbGt2aW9fYnJhbmNoLAo+Pj4+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSUkFZX1NJWkUocmszMjg4 X2hjbGt2aW9fYnJhbmNoKSk7Cj4+Pj4+ICsKPj4+Pgo+Pj4+IFNvcnJ5IGZvciB0aGUgbGF0ZSBx dWVyeSBvbiB0aGlzLiBJIGFtIGEgYml0IHVuY2xlYXIgYWJvdXQgdGhpcwo+Pj4+IGNvbXBhdGli bGUgY2hhbmdlLCBkb2VzIExpbnV4IGV4cGVjdCB0byByZXBsYWNlIHJvY2tjaGlwLHJrMzI4OC1j cnUKPj4+PiB3aXRoIHJvY2tjaGlwLHJrMzI4OHctY3J1IGluIGJvb3Rsb2FkZXIgaWYgdGhlIGNo aXAgaXMgUkszMjg4dz8gb3IKPj4+PiBhcHBlbmQgdGhlIGV4aXN0aW5nIGNydSBjb21wYXRpYmxl IG5vZGUgd2l0aCByb2NrY2hpcCxyazMyODh3LWNydT8KPj4+PiBiZWNhdXNlIHJlcGxhY2UgbmV3 IGNydSBub2RlIG1ha2UgY2xvY2sgbmV2ZXIgcHJvYmUgc2luY2UgdGhlCj4+Pj4gQ0xLX09GX0RF Q0xBUkUgY2hlY2tpbmcgcm9ja2NoaXAscmszMjg4LWNydQo+Pj4KPj4+IEkgZ3Vlc3MgcmlnaHQg bm93IHdlJ2QgZXhwZWN0ICJyb2NrY2hpcCxyazMyODh3LWNydSIsICJyb2NrY2hpcCxyazMyODgt Y3J1IiwKPj4+Cj4+PiBUaGlua2luZyBhZ2FpbiBhYm91dCB0aGlzLCBJJ20gd29uZGVyaW5nIGlm IHdlIHNob3VsZCBzd2l0Y2ggdG8gaGF2aW5nCj4+PiBvbmx5IG9uZSBwZXIgdmFyaWFudCAuLi4g bGlrZSBvbiB0aGUgdHdvIHJrMzE4OCB2YXJpYW50cywKPj4+IHNvIGRlY2xhcmluZyBzZXBhcmF0 ZSByazMyODgtY3J1IGFuZCByazMyODh3LWNydSBvZi1jbGtzIHdpdGggc2hhcmVkCj4+PiBjb21t b24gY29kZS4KPj4KPj4gV2hhdCBpZiBjYW4gY2hlY2sgdGhlIHJvb3QgY29tcGF0aWJsZSBpbnN0 ZWFkIGNydSBjb21wYXRpYmxlIGZvciByZXZpc2lvbiBXIGxpa2UKPj4KPj4gLSAgaWYgKG9mX2Rl dmljZV9pc19jb21wYXRpYmxlKG5wLCAicm9ja2NoaXAscmszMjg4dy1jcnUiKSkKPj4gKyBpZiAo b2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJyb2NrY2hpcCxyazMyODh3IikpCj4gCj4geW91 J2QgbmVlZCB0byBjaGVjayBhZ2FpbnN0IHRoZSByb290IGNvbXBhdGlibGUuCj4gCj4+Cj4+IFRo aXMgd2F5IHdlIGNhbiBoYXZlIGEgc2luZ2xlIGNvbXBhdGlibGUgdXBkYXRlIGF0IGJvb3Rsb2Fk ZXIgdGhhdAo+PiBtYWtlcyBMaW51eCBhZGp1c3QgcmV2aXNpb24gVyBjaGlwcyBjb2RlLgo+Pgo+ PiBEb2Vzbid0IGl0IG1ha2Ugc2Vuc2U/Cj4gCj4gVGhlIGNvbXBhdGlibGUgZGVzY3JpYmVzIHRo ZSBibG9jayBhbmQgdGhlIHJrMzI4OHcncyBjcnUgaXNuJ3QgdGhlIHNhbWUgYXMKPiB0aGUgcmsz Mjg4J3MgLi4uIGFzIHRoZSBjbG9jayByb3V0aW5nIGlzIGRpZmZlcmVudCwgc28gaXQgc2hvdWxk IGhhdmUgYQo+IGRpZmZlcmVudCBjb21wYXRpYmxlIHZhbHVlLCBJIHRoaW5rLgoKUmlnaHQsIGlm IHR3byBkZXZpY2VzIGJlaGF2ZSBkaWZmZXJlbnRseSBpbiBhIHdheSB0aGF0IG9uZSBiZWhhdmlv dXIgaXMgCm5vdCBhIHN0cmljdCBzdXBlcnNldCBvZiB0aGUgb3RoZXIsIGFuZCB0aGVyZSdzIG5v IHdheSB0byB0ZWxsIHdoaWNoIGlzIAp3aGljaCBieSBzaW1wbHkgbG9va2luZyBhdCB0aGUgZGV2 aWNlIGl0c2VsZiwgdGhlbiBieSBkZWZpbml0aW9uIHRoZXkgCmFyZSBub3QgY29tcGF0aWJsZS4K Cj4gQXMgdGhlIERUIHNpcyBzdXBwb3NlZCB0byBiZSBhIF9nZW5lcmljXyBkZXNjcmlwdGlvbiBv ZiB0aGUgaGFyZHdhcmUsCj4gd2UgZG9uJ3Qgd2FudCB0byBjZW1lbnQgaGFja3MgdG8gb3RoZXIg aW1wbGVtZW50YXRpb25zIHdvdWxkIG5lZWQgdG8gY29weS4KCkluZGVlZCBpdCdzIGEgcGFpbiBp biB0aGUgYnVtIGZvciBkcml2ZXIgZGV2ZWxvcGVycyB0byBiZSBnaXZlbiBhIG5ldyAKdGhpbmcg dGhhdCdzIDk5LjklIGNvbXBhdGlibGUgd2l0aCB0aGUgb2xkIHRoaW5nIGJ1dCB0aGUgb25lIHRp bnkgCmRpZmZlcmVuY2UgZnVuZGFtZW50YWxseSBicmVha3MgaXQsIGFuZCB0aGUgdGVtcHRhdGlv biB0byBsb29rIGZvciBhbiAKZWFzeSB3YXkgb3V0IGlzIHN0cm9uZywgYnV0IGMnZXN0IGxhIHZp ZSA7KQoKVGhlIHF1ZXN0aW9uIEkgYWx3YXlzIGJlYXIgaW4gbWluZCBmb3IgY2FzZXMgbGlrZSB0 aGVzZSBpcyB0aGlzOiBJZiBhIAprZXJuZWwgd2l0aG91dCB0aGUgZHJpdmVyIHBhdGNoIHJ1bnMg b24gdGhlIG5ldyBzeXN0ZW0gd2l0aCB0aGUgZXhwZWN0ZWQgCm5ldyBEVEIsIHdpbGwgaXQ6CgpB KSB3b3JrIGVudGlyZWx5IGNvcnJlY3RseQpCKSBpZ25vcmUgdGhlIGRldmljZSAod2l0aCBvciB3 aXRob3V0IGFuIGVycm9yKSwgYnV0IHRoZSByZXN0IG9mIHRoZSAKc3lzdGVtIHN0aWxsIHdvcmtz IGZpbmUKQykgaWdub3JlIHRoZSBkZXZpY2UgYW5kIGZhaWwgdG8gYm9vdCBhdCBhbGwgKHdpdGgg b3Igd2l0aG91dCBhbiBlcnJvcikgCmJlY2F1c2UgaXQncyBjcml0aWNhbCB0byBvcGVyYXRpb24g b2YgdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbQpEKSBwcm9iZSB0aGUgZGV2aWNlIGFuZCBzdXBlcmZp Y2lhbGx5IGFwcGVhciB0byBiZSBPSyBidXQgYWN0dWFsbHkgYmUgCmJyb2tlbiBpbiB3ZWlyZCBh bmQgc3VidGxlIHdheXMKCkEgYW5kIEIgYXJlIHRoZSBpZGVhbCBhbnN3ZXJzLiBDIGlzIGEgbGl0 dGxlIHVuZm9ydHVuYXRlLCBidXQgYWNjZXB0YWJsZSAKaWYgbmVpdGhlciBBIG5vciBCIGlzIHBv c3NpYmxlLiBEIGlzIGEgc2lnbiB0aGF0IHlvdSdyZSBkb2luZyBzb21ldGhpbmcgCndyb25nLCB1 bmxlc3MgdGhlcmUgYXJlICp2ZXJ5KiBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzIHRoYXQgbWlnaHQg anVzdGlmeSAKaXQgKGUuZy4gdGhlIFNvQyBpcyBleGNsdXNpdmVseSBkZXBsb3llZCBpbiBlbWJl ZGRlZCBkZXZpY2VzIHdpdGggYSAKY29udHJvbGxlZCB1cGRhdGUgbWVjaGFuaXNtIHN1Y2ggdGhh dCB1c2VycyBjb3VsZCBuZXZlciBpbnRyb2R1Y2UgdGhpcyAKbWlzbWF0Y2ggaW4gdGhlIGZpcnN0 IHBsYWNlKS4KClJvYmluLgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBs aXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlz dGluZm8vbGludXgtYXJtLWtlcm5lbAo=