From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 85D7071B46; Tue, 30 Jan 2024 20:28:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706646481; cv=none; b=up3+V6AHNuG8PxcdWQso8fZil4F0xkg7EPZRtDvyQQ6mL2WIyPjhCkyF4ZJW3hnD2UlPMeLYWcRqyvwVZcWlWi9jmj49P1xl8u2Zt0wPDrpiuEhsqzyxlFw511oLsAIWSj2kN3W09bMKtIIY5CHCjugU3sMraPQdRIM2NoFuYmI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706646481; c=relaxed/simple; bh=f8ZYd/m4g8k5qSL4jcMpv2BFLuBv2/ih8nBsDbbrmcc=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=q8BwjY3dvAo9VKEb/tKiZ0YkL2yQaS/+djp23vkWxhLztzJ40/38HBVhZcmG02a6kETxeycrCATTYTPNJ1cQUJ/nBPGuFEto7k4XlKvrBoRtXTuAzztCeBxkdhwBtyIlU12GXpVb2CSTqUw6v5pX8elGUl+WFuLVihpnTo1+TRU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=AYnG2/su; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="AYnG2/su" Received: by smtp.kernel.org (Postfix) with ESMTPSA id B9175C433C7; Tue, 30 Jan 2024 20:28:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1706646481; bh=f8ZYd/m4g8k5qSL4jcMpv2BFLuBv2/ih8nBsDbbrmcc=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=AYnG2/su8b0tWxPMCgTKFeab0yZ4Gv08nGflRtzlcX9Fe47LS+vYkAKmHACAHfqBY cYIDpVXCO4L1PCd0TStF+aLdoXC4O1+g/7Dp4gzmxA4XWT0mM9YUumfAVwksJN6Qbi YkPuu7x0Cq2xaG+ktiLImKtmAZ2D4Tm9EZYNzOefGcu3UxuAx9zF7NUah5pmaGj/+D Wa2ns5MKD63QvR82EbBZ7rwu8aWJT5WwFoGb9b6PYxQyhCnyMcB6Ui0TkQhO3HNIqo uswf0ZCCgt/2NIaJC0AqW2t1FD0ghEd+2ICBSKFRoUovNAEf4lJw7S/gb/KPX3lxVj t42n071vwoNHw== Date: Tue, 30 Jan 2024 14:27:58 -0600 From: Rob Herring To: Saravana Kannan Cc: Krzysztof Kozlowski , Peter Griffin , arnd@arndb.de, krzysztof.kozlowski+dt@linaro.org, linux@roeck-us.net, wim@linux-watchdog.org, conor+dt@kernel.org, alim.akhtar@samsung.com, jaewon02.kim@samsung.com, chanho61.park@samsung.com, semen.protsenko@linaro.org, kernel-team@android.com, tudor.ambarus@linaro.org, andre.draszik@linaro.org, willmcvicker@google.com, linux-fsd@tesla.com, linux-watchdog@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, Greg Kroah-Hartman Subject: Re: [PATCH 3/9] watchdog: s3c2410_wdt: update to use new exynos_pmu_*() apis Message-ID: <20240130202758.GA2237959-robh@kernel.org> References: <20240122225710.1952066-1-peter.griffin@linaro.org> <20240122225710.1952066-4-peter.griffin@linaro.org> <6c72a521-1048-42eb-ac74-d8f718a90723@linaro.org> Precedence: bulk X-Mailing-List: linux-samsung-soc@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: On Wed, Jan 24, 2024 at 01:27:01PM -0800, Saravana Kannan wrote: > On Tue, Jan 23, 2024 at 10:27 PM Krzysztof Kozlowski > wrote: > > > > On 24/01/2024 04:37, Saravana Kannan wrote: > > > On Tue, Jan 23, 2024 at 10:12 AM Krzysztof Kozlowski > > > wrote: > > >> > > >> On 23/01/2024 18:30, Peter Griffin wrote: > > >>>>> dev_warn(wdt->dev, "Couldn't get RST_STAT register\n"); > > >>>>> else if (rst_stat & BIT(wdt->drv_data->rst_stat_bit)) > > >>>>> @@ -698,14 +699,6 @@ static int s3c2410wdt_probe(struct platform_device *pdev) > > >>>>> if (ret) > > >>>>> return ret; > > >>>>> > > >>>>> - if (wdt->drv_data->quirks & QUIRKS_HAVE_PMUREG) { > > >>>>> - wdt->pmureg = syscon_regmap_lookup_by_phandle(dev->of_node, > > >>>>> - "samsung,syscon-phandle"); > > >>>>> - if (IS_ERR(wdt->pmureg)) > > >>>>> - return dev_err_probe(dev, PTR_ERR(wdt->pmureg), > > >>>>> - "syscon regmap lookup failed.\n"); > > >>>> > > >>>> > > >>>> Continuing topic from the binding: I don't see how you handle probe > > >>>> deferral, suspend ordering. > > >>> > > >>> The current implementation is simply relying on exynos-pmu being > > >>> postcore_initcall level. > > >>> > > >>> I was just looking around for any existing Linux APIs that could be a > > >>> more robust solution. It looks like > > >>> > > >>> of_parse_phandle() > > >>> and > > >>> of_find_device_by_node(); > > >>> > > >>> Are often used to solve this type of probe deferral issue between > > >>> devices. Is that what you would recommend using? Or is there something > > >>> even better? > > >> > > >> I think you should keep the phandle and then set device link based on > > >> of_find_device_by_node(). This would actually improve the code, because > > >> syscon_regmap_lookup_by_phandle() does not create device links. > > > > > > I kinda agree with this. Just because we no longer use a syscon API to > > > find the PMU register address doesn't mean the WDT doesn't depend on > > > the PMU. > > > > > > However, I think we should move to a generic "syscon" property. Then I > > > can add support for "syscon" property to fw_devlink and then things > > > will just work in terms of probe ordering, suspend/resume and also > > > showing the dependency in DT even if you don't use the syscon APIs. > > > > > > Side note 1: > > > > > > I think we really should officially document a generic syscon DT > > > property similar to how we have a generic "clocks" or "dmas" property. > > > Then we can have a syscon_get_regmap() that's like so: The difference is we know what to do with clocks, dma, etc. The only thing we know from "syscon" is it's random register bits. > > > > > > struct regmap *syscon_get_regmap(struct device *dev) > > > { > > > return syscon_regmap_lookup_by_phandle(dev->of_node, "syscon"); > > > } > > > > > > Instead of every device defining its own bespoke DT property to do the > > > exact same thing. I did a quick "back of the envelope" grep on this > > > and I get about 143 unique properties just to get the syscon regmap. > > > $ git grep -A1 syscon_regmap_lookup_by_phandle | grep '"' | sed -e > > > 's/^[^"]*//' -e 's/"[^"]*$/"/' | sort | uniq | wc -l > > > 143 > > > > Sorry, generic "syscon" property won't fly with DT maintainers, because > > there is no such thing as syscon in any of hardware. > > Then why do we allow a "syscon" compatible string and nodes? If the > "syscon" property isn't clear enough, we can make it something like > gpios and have it be -syscon or have syscon-names property > if you want to give it a name. I'm pretty hesistant to expand anything syscon related. Really, I'd like to get rid of "syscon" compatible. It's just a hint to create a regmap. > 143 bespoke properties all to say "here are some registers I need to > twiddle that's outside my regmap" doesn't seem great. I wonder how many aren't outside of the node's main registers, but are the only registers. That's quite common, but that would have largely been before we started saying to make those a child node of the syscon. Changing wouldn't do anything to get rid of the bespoke strings. It just shifts them from property names to property name prefix or -names string. > > > > > > > Side note 2: > > > > > > How are we making sure that it's the exynos-pmu driver that ends up > > > probing the PMU and not the generic syscon driver? Both of these are > > > platform drivers. And the exynos PMU device lists both the exynos > > > compatible string and the syscon property. Is it purely a link order > > > coincidence? > > > > initcall ordering > > Both these drivers usr postcore_initcall(). So it's purely because > soc/ is listed earlier in drivers/Makefile than mfd/. And as soon as > drivers are made into modules this is going to break. This is > terrible. If you want to have a modular system, this is going to throw > in a wrench. IMO, a "syscon" shouldn't be a module. It's just a regmap. Rob 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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id 4072EC46CD2 for ; Tue, 30 Jan 2024 20:28:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=aBHh5/fn/4H3CajmRzLKbJwbZzSrnSkM1hOHSqRgY6M=; b=fm90S7kiyILvoV XtkrgPtxDCP8PCSD/gqi9NNO6uD8J9Kc5+iwNgcJoRdOpNysweT572yoQYV2mo0TVNGVPMmEk8FYo zjWNU4v2M3wsqZlMSRvpB8DCsUC2snHaUleVKqlihAeMpEysmmsipqo+eL8TcKSUq5gqbU+tdieja 4tZ/FOqjay2qUSXSLzrPF4NQnkNenWODBTXLD3AjQJhIXjIBO57XFXK+ubm2Op5vba6gpfq0J3GpV ed3m+RfwHBlfolAPp0XWlD/8Kt0lRSHU7GFi67L0H6/mnIt8/xr+Ejk0cu+duwxtm+hhLgBF/0UWe e1UEgDw1kwtUkbcDi+4g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rUuiE-00000000SwW-1Zav; Tue, 30 Jan 2024 20:28:06 +0000 Received: from sin.source.kernel.org ([2604:1380:40e1:4800::1]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rUuiB-00000000Sv7-2d8S for linux-arm-kernel@lists.infradead.org; Tue, 30 Jan 2024 20:28:05 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by sin.source.kernel.org (Postfix) with ESMTP id B9A28CE1CA8; Tue, 30 Jan 2024 20:28:01 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id B9175C433C7; Tue, 30 Jan 2024 20:28:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1706646481; bh=f8ZYd/m4g8k5qSL4jcMpv2BFLuBv2/ih8nBsDbbrmcc=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=AYnG2/su8b0tWxPMCgTKFeab0yZ4Gv08nGflRtzlcX9Fe47LS+vYkAKmHACAHfqBY cYIDpVXCO4L1PCd0TStF+aLdoXC4O1+g/7Dp4gzmxA4XWT0mM9YUumfAVwksJN6Qbi YkPuu7x0Cq2xaG+ktiLImKtmAZ2D4Tm9EZYNzOefGcu3UxuAx9zF7NUah5pmaGj/+D Wa2ns5MKD63QvR82EbBZ7rwu8aWJT5WwFoGb9b6PYxQyhCnyMcB6Ui0TkQhO3HNIqo uswf0ZCCgt/2NIaJC0AqW2t1FD0ghEd+2ICBSKFRoUovNAEf4lJw7S/gb/KPX3lxVj t42n071vwoNHw== Date: Tue, 30 Jan 2024 14:27:58 -0600 From: Rob Herring To: Saravana Kannan Cc: Krzysztof Kozlowski , Peter Griffin , arnd@arndb.de, krzysztof.kozlowski+dt@linaro.org, linux@roeck-us.net, wim@linux-watchdog.org, conor+dt@kernel.org, alim.akhtar@samsung.com, jaewon02.kim@samsung.com, chanho61.park@samsung.com, semen.protsenko@linaro.org, kernel-team@android.com, tudor.ambarus@linaro.org, andre.draszik@linaro.org, willmcvicker@google.com, linux-fsd@tesla.com, linux-watchdog@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, Greg Kroah-Hartman Subject: Re: [PATCH 3/9] watchdog: s3c2410_wdt: update to use new exynos_pmu_*() apis Message-ID: <20240130202758.GA2237959-robh@kernel.org> References: <20240122225710.1952066-1-peter.griffin@linaro.org> <20240122225710.1952066-4-peter.griffin@linaro.org> <6c72a521-1048-42eb-ac74-d8f718a90723@linaro.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240130_122804_052340_CA63D2F9 X-CRM114-Status: GOOD ( 46.28 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gV2VkLCBKYW4gMjQsIDIwMjQgYXQgMDE6Mjc6MDFQTSAtMDgwMCwgU2FyYXZhbmEgS2FubmFu IHdyb3RlOgo+IE9uIFR1ZSwgSmFuIDIzLCAyMDI0IGF0IDEwOjI34oCvUE0gS3J6eXN6dG9mIEtv emxvd3NraQo+IDxrcnp5c3p0b2Yua296bG93c2tpQGxpbmFyby5vcmc+IHdyb3RlOgo+ID4KPiA+ IE9uIDI0LzAxLzIwMjQgMDQ6MzcsIFNhcmF2YW5hIEthbm5hbiB3cm90ZToKPiA+ID4gT24gVHVl LCBKYW4gMjMsIDIwMjQgYXQgMTA6MTLigK9BTSBLcnp5c3p0b2YgS296bG93c2tpCj4gPiA+IDxr cnp5c3p0b2Yua296bG93c2tpQGxpbmFyby5vcmc+IHdyb3RlOgo+ID4gPj4KPiA+ID4+IE9uIDIz LzAxLzIwMjQgMTg6MzAsIFBldGVyIEdyaWZmaW4gd3JvdGU6Cj4gPiA+Pj4+PiAgICAgICAgICAg ICAgIGRldl93YXJuKHdkdC0+ZGV2LCAiQ291bGRuJ3QgZ2V0IFJTVF9TVEFUIHJlZ2lzdGVyXG4i KTsKPiA+ID4+Pj4+ICAgICAgIGVsc2UgaWYgKHJzdF9zdGF0ICYgQklUKHdkdC0+ZHJ2X2RhdGEt PnJzdF9zdGF0X2JpdCkpCj4gPiA+Pj4+PiBAQCAtNjk4LDE0ICs2OTksNiBAQCBzdGF0aWMgaW50 IHMzYzI0MTB3ZHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiA+ID4+Pj4+ ICAgICAgIGlmIChyZXQpCj4gPiA+Pj4+PiAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4gPiA+ Pj4+Pgo+ID4gPj4+Pj4gLSAgICAgaWYgKHdkdC0+ZHJ2X2RhdGEtPnF1aXJrcyAmIFFVSVJLU19I QVZFX1BNVVJFRykgewo+ID4gPj4+Pj4gLSAgICAgICAgICAgICB3ZHQtPnBtdXJlZyA9IHN5c2Nv bl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUoZGV2LT5vZl9ub2RlLAo+ID4gPj4+Pj4gLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzYW1zdW5nLHN5c2Nvbi1w aGFuZGxlIik7Cj4gPiA+Pj4+PiAtICAgICAgICAgICAgIGlmIChJU19FUlIod2R0LT5wbXVyZWcp KQo+ID4gPj4+Pj4gLSAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZXZfZXJyX3Byb2JlKGRl diwgUFRSX0VSUih3ZHQtPnBtdXJlZyksCj4gPiA+Pj4+PiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgInN5c2NvbiByZWdtYXAgbG9va3VwIGZhaWxlZC5cbiIpOwo+ ID4gPj4+Pgo+ID4gPj4+Pgo+ID4gPj4+PiBDb250aW51aW5nIHRvcGljIGZyb20gdGhlIGJpbmRp bmc6IEkgZG9uJ3Qgc2VlIGhvdyB5b3UgaGFuZGxlIHByb2JlCj4gPiA+Pj4+IGRlZmVycmFsLCBz dXNwZW5kIG9yZGVyaW5nLgo+ID4gPj4+Cj4gPiA+Pj4gVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRp b24gaXMgc2ltcGx5IHJlbHlpbmcgb24gZXh5bm9zLXBtdSBiZWluZwo+ID4gPj4+IHBvc3Rjb3Jl X2luaXRjYWxsIGxldmVsLgo+ID4gPj4+Cj4gPiA+Pj4gSSB3YXMganVzdCBsb29raW5nIGFyb3Vu ZCBmb3IgYW55IGV4aXN0aW5nIExpbnV4IEFQSXMgdGhhdCBjb3VsZCBiZSBhCj4gPiA+Pj4gbW9y ZSByb2J1c3Qgc29sdXRpb24uIEl0IGxvb2tzIGxpa2UKPiA+ID4+Pgo+ID4gPj4+IG9mX3BhcnNl X3BoYW5kbGUoKQo+ID4gPj4+IGFuZAo+ID4gPj4+IG9mX2ZpbmRfZGV2aWNlX2J5X25vZGUoKTsK PiA+ID4+Pgo+ID4gPj4+IEFyZSBvZnRlbiB1c2VkIHRvIHNvbHZlIHRoaXMgdHlwZSBvZiBwcm9i ZSBkZWZlcnJhbCBpc3N1ZSBiZXR3ZWVuCj4gPiA+Pj4gZGV2aWNlcy4gSXMgdGhhdCB3aGF0IHlv dSB3b3VsZCByZWNvbW1lbmQgdXNpbmc/IE9yIGlzIHRoZXJlIHNvbWV0aGluZwo+ID4gPj4+IGV2 ZW4gYmV0dGVyPwo+ID4gPj4KPiA+ID4+IEkgdGhpbmsgeW91IHNob3VsZCBrZWVwIHRoZSBwaGFu ZGxlIGFuZCB0aGVuIHNldCBkZXZpY2UgbGluayBiYXNlZCBvbgo+ID4gPj4gb2ZfZmluZF9kZXZp Y2VfYnlfbm9kZSgpLiBUaGlzIHdvdWxkIGFjdHVhbGx5IGltcHJvdmUgdGhlIGNvZGUsIGJlY2F1 c2UKPiA+ID4+IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUoKSBkb2VzIG5vdCBjcmVh dGUgZGV2aWNlIGxpbmtzLgo+ID4gPgo+ID4gPiBJIGtpbmRhIGFncmVlIHdpdGggdGhpcy4gSnVz dCBiZWNhdXNlIHdlIG5vIGxvbmdlciB1c2UgYSBzeXNjb24gQVBJIHRvCj4gPiA+IGZpbmQgdGhl IFBNVSByZWdpc3RlciBhZGRyZXNzIGRvZXNuJ3QgbWVhbiB0aGUgV0RUIGRvZXNuJ3QgZGVwZW5k IG9uCj4gPiA+IHRoZSBQTVUuCj4gPiA+Cj4gPiA+IEhvd2V2ZXIsIEkgdGhpbmsgd2Ugc2hvdWxk IG1vdmUgdG8gYSBnZW5lcmljICJzeXNjb24iIHByb3BlcnR5LiBUaGVuIEkKPiA+ID4gY2FuIGFk ZCBzdXBwb3J0IGZvciAic3lzY29uIiBwcm9wZXJ0eSB0byBmd19kZXZsaW5rIGFuZCB0aGVuIHRo aW5ncwo+ID4gPiB3aWxsIGp1c3Qgd29yayBpbiB0ZXJtcyBvZiBwcm9iZSBvcmRlcmluZywgc3Vz cGVuZC9yZXN1bWUgYW5kIGFsc28KPiA+ID4gc2hvd2luZyB0aGUgZGVwZW5kZW5jeSBpbiBEVCBl dmVuIGlmIHlvdSBkb24ndCB1c2UgdGhlIHN5c2NvbiBBUElzLgo+ID4gPgo+ID4gPiBTaWRlIG5v dGUgMToKPiA+ID4KPiA+ID4gSSB0aGluayB3ZSByZWFsbHkgc2hvdWxkIG9mZmljaWFsbHkgZG9j dW1lbnQgYSBnZW5lcmljIHN5c2NvbiBEVAo+ID4gPiBwcm9wZXJ0eSBzaW1pbGFyIHRvIGhvdyB3 ZSBoYXZlIGEgZ2VuZXJpYyAiY2xvY2tzIiBvciAiZG1hcyIgcHJvcGVydHkuCj4gPiA+IFRoZW4g d2UgY2FuIGhhdmUgYSBzeXNjb25fZ2V0X3JlZ21hcCgpIHRoYXQncyBsaWtlIHNvOgoKVGhlIGRp ZmZlcmVuY2UgaXMgd2Uga25vdyB3aGF0IHRvIGRvIHdpdGggY2xvY2tzLCBkbWEsIGV0Yy4gVGhl IG9ubHkgCnRoaW5nIHdlIGtub3cgZnJvbSAic3lzY29uIiBpcyBpdCdzIHJhbmRvbSByZWdpc3Rl ciBiaXRzLgoKPiA+ID4KPiA+ID4gc3RydWN0IHJlZ21hcCAqc3lzY29uX2dldF9yZWdtYXAoc3Ry dWN0IGRldmljZSAqZGV2KQo+ID4gPiB7Cj4gPiA+ICAgICAgICAgcmV0dXJuIHN5c2Nvbl9yZWdt YXBfbG9va3VwX2J5X3BoYW5kbGUoZGV2LT5vZl9ub2RlLCAic3lzY29uIik7Cj4gPiA+IH0KPiA+ ID4KPiA+ID4gSW5zdGVhZCBvZiBldmVyeSBkZXZpY2UgZGVmaW5pbmcgaXRzIG93biBiZXNwb2tl IERUIHByb3BlcnR5IHRvIGRvIHRoZQo+ID4gPiBleGFjdCBzYW1lIHRoaW5nLiBJIGRpZCBhIHF1 aWNrICJiYWNrIG9mIHRoZSBlbnZlbG9wZSIgZ3JlcCBvbiB0aGlzCj4gPiA+IGFuZCBJIGdldCBh Ym91dCAxNDMgdW5pcXVlIHByb3BlcnRpZXMganVzdCB0byBnZXQgdGhlIHN5c2NvbiByZWdtYXAu Cj4gPiA+ICQgZ2l0IGdyZXAgLUExIHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3BoYW5kbGUgfCBn cmVwICciJyB8IHNlZCAtZQo+ID4gPiAncy9eW14iXSovLycgLWUgJ3MvIlteIl0qJC8iLycgfCBz b3J0IHwgdW5pcSB8IHdjIC1sCj4gPiA+IDE0Mwo+ID4KPiA+IFNvcnJ5LCBnZW5lcmljICJzeXNj b24iIHByb3BlcnR5IHdvbid0IGZseSB3aXRoIERUIG1haW50YWluZXJzLCBiZWNhdXNlCj4gPiB0 aGVyZSBpcyBubyBzdWNoIHRoaW5nIGFzIHN5c2NvbiBpbiBhbnkgb2YgaGFyZHdhcmUuCj4gCj4g VGhlbiB3aHkgZG8gd2UgYWxsb3cgYSAic3lzY29uIiBjb21wYXRpYmxlIHN0cmluZyBhbmQgbm9k ZXM/IElmIHRoZQo+ICJzeXNjb24iIHByb3BlcnR5IGlzbid0IGNsZWFyIGVub3VnaCwgd2UgY2Fu IG1ha2UgaXQgc29tZXRoaW5nIGxpa2UKPiBncGlvcyBhbmQgaGF2ZSBpdCBiZSA8d2hhdGV2ZXI+ LXN5c2NvbiBvciBoYXZlIHN5c2Nvbi1uYW1lcyBwcm9wZXJ0eQo+IGlmIHlvdSB3YW50IHRvIGdp dmUgaXQgYSBuYW1lLgoKSSdtIHByZXR0eSBoZXNpc3RhbnQgdG8gZXhwYW5kIGFueXRoaW5nIHN5 c2NvbiByZWxhdGVkLiBSZWFsbHksIEknZCBsaWtlIAp0byBnZXQgcmlkIG9mICJzeXNjb24iIGNv bXBhdGlibGUuIEl0J3MganVzdCBhIGhpbnQgdG8gY3JlYXRlIGEgcmVnbWFwLgoKPiAxNDMgYmVz cG9rZSBwcm9wZXJ0aWVzIGFsbCB0byBzYXkgImhlcmUgYXJlIHNvbWUgcmVnaXN0ZXJzIEkgbmVl ZCB0bwo+IHR3aWRkbGUgdGhhdCdzIG91dHNpZGUgbXkgcmVnbWFwIiBkb2Vzbid0IHNlZW0gZ3Jl YXQuCgpJIHdvbmRlciBob3cgbWFueSBhcmVuJ3Qgb3V0c2lkZSBvZiB0aGUgbm9kZSdzIG1haW4g cmVnaXN0ZXJzLCBidXQgYXJlIAp0aGUgb25seSByZWdpc3RlcnMuIFRoYXQncyBxdWl0ZSBjb21t b24sIGJ1dCB0aGF0IHdvdWxkIGhhdmUgbGFyZ2VseSAKYmVlbiBiZWZvcmUgd2Ugc3RhcnRlZCBz YXlpbmcgdG8gbWFrZSB0aG9zZSBhIGNoaWxkIG5vZGUgb2YgdGhlIHN5c2Nvbi4KCkNoYW5naW5n IHdvdWxkbid0IGRvIGFueXRoaW5nIHRvIGdldCByaWQgb2YgdGhlIGJlc3Bva2Ugc3RyaW5ncy4g SXQganVzdCAKc2hpZnRzIHRoZW0gZnJvbSBwcm9wZXJ0eSBuYW1lcyB0byBwcm9wZXJ0eSBuYW1l IHByZWZpeCBvciAtbmFtZXMgCnN0cmluZy4KCj4gCj4gPiA+Cj4gPiA+IFNpZGUgbm90ZSAyOgo+ ID4gPgo+ID4gPiBIb3cgYXJlIHdlIG1ha2luZyBzdXJlIHRoYXQgaXQncyB0aGUgZXh5bm9zLXBt dSBkcml2ZXIgdGhhdCBlbmRzIHVwCj4gPiA+IHByb2JpbmcgdGhlIFBNVSBhbmQgbm90IHRoZSBn ZW5lcmljIHN5c2NvbiBkcml2ZXI/IEJvdGggb2YgdGhlc2UgYXJlCj4gPiA+IHBsYXRmb3JtIGRy aXZlcnMuIEFuZCB0aGUgZXh5bm9zIFBNVSBkZXZpY2UgbGlzdHMgYm90aCB0aGUgZXh5bm9zCj4g PiA+IGNvbXBhdGlibGUgc3RyaW5nIGFuZCB0aGUgc3lzY29uIHByb3BlcnR5LiBJcyBpdCBwdXJl bHkgYSBsaW5rIG9yZGVyCj4gPiA+IGNvaW5jaWRlbmNlPwo+ID4KPiA+IGluaXRjYWxsIG9yZGVy aW5nCj4gCj4gQm90aCB0aGVzZSBkcml2ZXJzIHVzciBwb3N0Y29yZV9pbml0Y2FsbCgpLiBTbyBp dCdzIHB1cmVseSBiZWNhdXNlCj4gc29jLyBpcyBsaXN0ZWQgZWFybGllciBpbiBkcml2ZXJzL01h a2VmaWxlIHRoYW4gbWZkLy4gQW5kIGFzIHNvb24gYXMKPiBkcml2ZXJzIGFyZSBtYWRlIGludG8g bW9kdWxlcyB0aGlzIGlzIGdvaW5nIHRvIGJyZWFrLiBUaGlzIGlzCj4gdGVycmlibGUuIElmIHlv dSB3YW50IHRvIGhhdmUgYSBtb2R1bGFyIHN5c3RlbSwgdGhpcyBpcyBnb2luZyB0byB0aHJvdwo+ IGluIGEgd3JlbmNoLgoKSU1PLCBhICJzeXNjb24iIHNob3VsZG4ndCBiZSBhIG1vZHVsZS4gSXQn cyBqdXN0IGEgcmVnbWFwLgoKUm9iCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2Vy bmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1h bi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==