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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 390FBC433EF for ; Thu, 20 Jan 2022 06:01:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231271AbiATGBw (ORCPT ); Thu, 20 Jan 2022 01:01:52 -0500 Received: from ams.source.kernel.org ([145.40.68.75]:57156 "EHLO ams.source.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230385AbiATGBv (ORCPT ); Thu, 20 Jan 2022 01:01:51 -0500 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 61C07B81CDB; Thu, 20 Jan 2022 06:01:50 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0FF24C340E0; Thu, 20 Jan 2022 06:01:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1642658509; bh=byhNPY5mxbXic33tX2h88V+7lpizYcbc+f67+IcnEnk=; h=In-Reply-To:References:Subject:From:Cc:To:Date:From; b=iT6S9Ey3WM7CUkSZgLpHioATP2Veja0Ox+KzsCXn2W6/FNSh72qpmJb5rF5exVWL0 2lHQNsnDveaYyZZujZrgsG27Xps6nllbaO0FsdTA5ReNvnwMb6Gy+iWmc0ScnSOQPN PekZ6rrRpLtEytMTl08oUedVMllmjW3x+q+QU9xjTR6czljKxFlmQBKMQlL9LnsEbf KmRdkRpp26cR4IfrDajklvo91aRgqb+4Tb9zEuGntUHnKXsFQn85VD5dYOR8Gx7W1o SxPBdwAE2qiGxBhMLO86iYTgrOGUDHH7E2NKrYEfiOzYFdHYA+dF0KlgvkDYv/gwuT yEHCXGb/H3aqA== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable In-Reply-To: <20220120000651.in7s6nazif5qjkme@pali> References: <163425678347.1688384.10695189000353676651@swboyd.mtv.corp.google.com> <20211015093701.pfvkighxsndj4ujg@pali> <163433494758.1688384.5994009027317282677@swboyd.mtv.corp.google.com> <20211016064210.7ahqfqcvf66wtt66@pali> <20220115080213.0CCAFC36AE3@smtp.kernel.org> <20220115115018.he4hnnhlvrb6kann@pali> <20220115130509.4a240730@thinkpad> <20220115122618.plhiqnjh2755bv5h@pali> <20220119231655.EFFF3C004E1@smtp.kernel.org> <20220120000651.in7s6nazif5qjkme@pali> Subject: Re: [PATCH v7 3/6] dt-bindings: mvebu-uart: document DT bindings for marvell,armada-3700-uart-clock From: Stephen Boyd Cc: Marek =?utf-8?q?Beh=C3=BAn?= , Greg Kroah-Hartman , Michael Turquette , Rob Herring , Andrew Lunn , Gregory Clement , Sebastian Hesselbarth , Vladimir Vid , linux-clk@vger.kernel.org, linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org To: Pali =?utf-8?q?Roh=C3=A1r?= Date: Wed, 19 Jan 2022 22:01:47 -0800 User-Agent: alot/0.10 Message-Id: <20220120060149.0FF24C340E0@smtp.kernel.org> Precedence: bulk List-ID: X-Mailing-List: linux-clk@vger.kernel.org Quoting Pali Roh=C3=A1r (2022-01-19 16:06:51) > On Wednesday 19 January 2022 15:16:54 Stephen Boyd wrote: > > Quoting Pali Roh=C3=A1r (2022-01-15 04:26:18) > > > On Saturday 15 January 2022 13:05:09 Marek Beh=C3=BAn wrote: > > > > On Sat, 15 Jan 2022 12:50:18 +0100 > > > > Pali Roh=C3=A1r wrote: > > > >=20 > > > > > On Saturday 15 January 2022 00:02:11 Stephen Boyd wrote: > > > > > > Quoting Pali Roh=C3=A1r (2021-10-15 23:42:10) =20 > > > > > > >=20 > > > > > > > If I was designing this driver and DTS bindings I would have = choose > > > > > > > something like this: > > > > > > >=20 > > > > > > > uart@0x12000 { =20 > > > > > >=20 > > > > > > Drop the 0x > > > > > > =20 > > > > > > > reg =3D <0x12000 0x18>, <0x12200 0x30>; > > > > > > > clock-controller { > > > > > > > ... > > > > > > > }; =20 > > > > > >=20 > > > > > > Drop this node and put whatever properties are inside into the = parent > > > > > > node. > > > > > > =20 > > > > > > > serial1 { > > > > > > > ... > > > > > > > status =3D "disabled"; > > > > > > > }; > > > > > > > serial2 { > > > > > > > ... > > > > > > > status =3D "disabled"; > > > > > > > }; > > > > > > > }; > > > > > > >=20 > > > > > > > Meaning that 0x12000 node would be 3 subnodes and all registe= rs would be > > > > > > > defined in top level nodes and would be handled by one driver. > > > > > > >=20 > > > > > > > This is really how hardware block looks like. But it is not b= ackward > > > > > > > compatible... =20 > > > > > >=20 > > > > > > Sounds good to me. I presume we need the serial child nodes so = we can > > > > > > reference them from the stdout-path? =20 > > > > >=20 > > > > > Yes, exactly, separate nodes for serial1 and serial2 are still re= quired. > > > > >=20 > > > > > But dropping clock controller is not possible as for higher baudr= ates we > > > > > need to use and configure uart clock controller. Without it we ju= st get > > > > > comparable feature support which is already present in driver. > > > >=20 > > > > What Stephen means is making clock controller out of the uart node > > > > directly. No need to add separate subnode just for clock controller. > > >=20 > > > This is already implemented in v7 patch series. Clock controller is > > > already outside of uart nodes. > >=20 > > I mean to combine the uart node and the clock-controller node together > >=20 > > uart-wrapper { > > reg =3D <0x12000 0x18>, <0x12200 0x30>; > > #clock-cells ... > >=20 > > serial1 { > > ... > > }; > >=20 > > serial2 { > > ... > > }; > > }; >=20 > Ok, now I see what you mean. >=20 > But problem is that this is not backward compatible change. And would > not work per existing DT bindings definitions, which defines how > bootloader should set configured clocks. >=20 > As I wrote in emails 3 months ago, this new "proposed" DTS definition is > something which I would have chosen if I had designed this driver and > bindings in past. But that did not happen and different approach is > already widely in used. >=20 > To support existing DTS definitions and bootloaders, it is really > required to have current structure backward compatible like it is > defined in current DT bindings document. And my changes in this patch > series are backward compatible. I'm lost. Is the bootloader the one that's expecting some particular serial node format and updating something? What is the bootloader doing? >=20 > To change DTS structure, it would be needed to provide uart nodes in DTS > files two times: once in old style (the current one) and second time in > this new style. That's not a good idea. Why do we need to support both at the same time? >=20 > But such thing would even more complicate updating driver and it needs > to be implemented. >=20 > Plus this would open a question how to define default stdout-path if > there would be 4 serial nodes, where one pair would describe old style > and second pair new style; meaning that 2 cross nodes would describe > same define. Huh? We shouldn't have both bindings present in the DTB. >=20 > For me this looks like a more complications and I do not see any benefit > from it. >=20 > It is really important to break backward compatibility, just to try > having new cleaner API at the cost of having more complications and > requirement for more development and also important maintenance? It's important to not make DT nodes have reg properties that overlap. Maybe this is a DT purist viewpoint and I'm totally off base! I think Rob did ack this binding already so I must be coming from the wrong angle. Nothing prevents register overlap from happening in practice, but it's good to avoid such a situation as it clearly divides the I/O space by assigning an address range to a particular device. In this case, we see the two uarts are really one device, but we need two nodes in DT for stdout-path, so we make some child nodes and have the driver figure out which serial port to use for the console. We shouldn't be adding more nodes to DT to get drivers to probe for device I/O spaces that have already been described in DT. When this happens, we learn that some I/O range is actually a combination of functions, like uart and clks, and thus we should be able to add any required properties to the existing DT node to support that new feature that wasn't described before in the binding. 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 9082CC433EF for ; Thu, 20 Jan 2022 06:03:21 +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:Message-Id:Date:To:Cc:From:Subject: References:In-Reply-To:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=KxgZvLWtUbryRFDhBC/bGn58RGH4olGT2/qqEOlrf1I=; b=dbktltrqahQIBb qBMWpi3M9iUR2eiGZICr4ZrghXaE+JA1TQXCZPZ0i5g9TfNpRAbp1KHFmXOjNmLhMuaOVcUfIC9Wm ogrBxcZPp3SNt8X+MMP6CJUNP+dSPxBmOV8xSf+AR7CEgKjmiBu5PWReIHgZs3QWEnRXP9pnuUZkJ 4jw/c8aD2aYgFEz1SXyIF3TzbFSu/y8TZJ4I3CIINqRImCP+m0cShiwQ2Vcnw46f/sIYgUTcMNzEO UOqZG993N2qVx3i2/9Ym98sUrgJ6AToNNhVx7A9TELBcmQ/VtHOBBd2GwnRVkVMPme5v7iN8ndKXu 64c7DMcAGFoQyEHaJQsQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nAQWB-008vx3-JV; Thu, 20 Jan 2022 06:01:55 +0000 Received: from ams.source.kernel.org ([2604:1380:4601:e00::1]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nAQW8-008vwL-8J for linux-arm-kernel@lists.infradead.org; Thu, 20 Jan 2022 06:01:54 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 4864FB81CD9; Thu, 20 Jan 2022 06:01:50 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0FF24C340E0; Thu, 20 Jan 2022 06:01:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1642658509; bh=byhNPY5mxbXic33tX2h88V+7lpizYcbc+f67+IcnEnk=; h=In-Reply-To:References:Subject:From:Cc:To:Date:From; b=iT6S9Ey3WM7CUkSZgLpHioATP2Veja0Ox+KzsCXn2W6/FNSh72qpmJb5rF5exVWL0 2lHQNsnDveaYyZZujZrgsG27Xps6nllbaO0FsdTA5ReNvnwMb6Gy+iWmc0ScnSOQPN PekZ6rrRpLtEytMTl08oUedVMllmjW3x+q+QU9xjTR6czljKxFlmQBKMQlL9LnsEbf KmRdkRpp26cR4IfrDajklvo91aRgqb+4Tb9zEuGntUHnKXsFQn85VD5dYOR8Gx7W1o SxPBdwAE2qiGxBhMLO86iYTgrOGUDHH7E2NKrYEfiOzYFdHYA+dF0KlgvkDYv/gwuT yEHCXGb/H3aqA== MIME-Version: 1.0 In-Reply-To: <20220120000651.in7s6nazif5qjkme@pali> References: <163425678347.1688384.10695189000353676651@swboyd.mtv.corp.google.com> <20211015093701.pfvkighxsndj4ujg@pali> <163433494758.1688384.5994009027317282677@swboyd.mtv.corp.google.com> <20211016064210.7ahqfqcvf66wtt66@pali> <20220115080213.0CCAFC36AE3@smtp.kernel.org> <20220115115018.he4hnnhlvrb6kann@pali> <20220115130509.4a240730@thinkpad> <20220115122618.plhiqnjh2755bv5h@pali> <20220119231655.EFFF3C004E1@smtp.kernel.org> <20220120000651.in7s6nazif5qjkme@pali> Subject: Re: [PATCH v7 3/6] dt-bindings: mvebu-uart: document DT bindings for marvell, armada-3700-uart-clock From: Stephen Boyd Cc: Marek =?utf-8?q?Beh=C3=BAn?= , Greg Kroah-Hartman , Michael Turquette , Rob Herring , Andrew Lunn , Gregory Clement , Sebastian Hesselbarth , Vladimir Vid , linux-clk@vger.kernel.org, linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org To: Pali =?utf-8?q?Roh=C3=A1r?= Date: Wed, 19 Jan 2022 22:01:47 -0800 User-Agent: alot/0.10 Message-Id: <20220120060149.0FF24C340E0@smtp.kernel.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220119_220152_607458_C8784899 X-CRM114-Status: GOOD ( 45.27 ) 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 UXVvdGluZyBQYWxpIFJvaMOhciAoMjAyMi0wMS0xOSAxNjowNjo1MSkKPiBPbiBXZWRuZXNkYXkg MTkgSmFudWFyeSAyMDIyIDE1OjE2OjU0IFN0ZXBoZW4gQm95ZCB3cm90ZToKPiA+IFF1b3Rpbmcg UGFsaSBSb2jDoXIgKDIwMjItMDEtMTUgMDQ6MjY6MTgpCj4gPiA+IE9uIFNhdHVyZGF5IDE1IEph bnVhcnkgMjAyMiAxMzowNTowOSBNYXJlayBCZWjDum4gd3JvdGU6Cj4gPiA+ID4gT24gU2F0LCAx NSBKYW4gMjAyMiAxMjo1MDoxOCArMDEwMAo+ID4gPiA+IFBhbGkgUm9ow6FyIDxwYWxpQGtlcm5l bC5vcmc+IHdyb3RlOgo+ID4gPiA+IAo+ID4gPiA+ID4gT24gU2F0dXJkYXkgMTUgSmFudWFyeSAy MDIyIDAwOjAyOjExIFN0ZXBoZW4gQm95ZCB3cm90ZToKPiA+ID4gPiA+ID4gUXVvdGluZyBQYWxp IFJvaMOhciAoMjAyMS0xMC0xNSAyMzo0MjoxMCkgIAo+ID4gPiA+ID4gPiA+IAo+ID4gPiA+ID4g PiA+IElmIEkgd2FzIGRlc2lnbmluZyB0aGlzIGRyaXZlciBhbmQgRFRTIGJpbmRpbmdzIEkgd291 bGQgaGF2ZSBjaG9vc2UKPiA+ID4gPiA+ID4gPiBzb21ldGhpbmcgbGlrZSB0aGlzOgo+ID4gPiA+ ID4gPiA+IAo+ID4gPiA+ID4gPiA+IHVhcnRAMHgxMjAwMCB7ICAKPiA+ID4gPiA+ID4gCj4gPiA+ ID4gPiA+IERyb3AgdGhlIDB4Cj4gPiA+ID4gPiA+ICAgCj4gPiA+ID4gPiA+ID4gICAgIHJlZyA9 IDwweDEyMDAwIDB4MTg+LCA8MHgxMjIwMCAweDMwPjsKPiA+ID4gPiA+ID4gPiAgICAgY2xvY2st Y29udHJvbGxlciB7Cj4gPiA+ID4gPiA+ID4gICAgICAgICAuLi4KPiA+ID4gPiA+ID4gPiAgICAg fTsgIAo+ID4gPiA+ID4gPiAKPiA+ID4gPiA+ID4gRHJvcCB0aGlzIG5vZGUgYW5kIHB1dCB3aGF0 ZXZlciBwcm9wZXJ0aWVzIGFyZSBpbnNpZGUgaW50byB0aGUgcGFyZW50Cj4gPiA+ID4gPiA+IG5v ZGUuCj4gPiA+ID4gPiA+ICAgCj4gPiA+ID4gPiA+ID4gICAgIHNlcmlhbDEgewo+ID4gPiA+ID4g PiA+ICAgICAgICAgLi4uCj4gPiA+ID4gPiA+ID4gICAgICAgICBzdGF0dXMgPSAiZGlzYWJsZWQi Owo+ID4gPiA+ID4gPiA+ICAgICB9Owo+ID4gPiA+ID4gPiA+ICAgICBzZXJpYWwyIHsKPiA+ID4g PiA+ID4gPiAgICAgICAgIC4uLgo+ID4gPiA+ID4gPiA+ICAgICAgICAgc3RhdHVzID0gImRpc2Fi bGVkIjsKPiA+ID4gPiA+ID4gPiAgICAgfTsKPiA+ID4gPiA+ID4gPiB9Owo+ID4gPiA+ID4gPiA+ IAo+ID4gPiA+ID4gPiA+IE1lYW5pbmcgdGhhdCAweDEyMDAwIG5vZGUgd291bGQgYmUgMyBzdWJu b2RlcyBhbmQgYWxsIHJlZ2lzdGVycyB3b3VsZCBiZQo+ID4gPiA+ID4gPiA+IGRlZmluZWQgaW4g dG9wIGxldmVsIG5vZGVzIGFuZCB3b3VsZCBiZSBoYW5kbGVkIGJ5IG9uZSBkcml2ZXIuCj4gPiA+ ID4gPiA+ID4gCj4gPiA+ID4gPiA+ID4gVGhpcyBpcyByZWFsbHkgaG93IGhhcmR3YXJlIGJsb2Nr IGxvb2tzIGxpa2UuIEJ1dCBpdCBpcyBub3QgYmFja3dhcmQKPiA+ID4gPiA+ID4gPiBjb21wYXRp YmxlLi4uICAKPiA+ID4gPiA+ID4gCj4gPiA+ID4gPiA+IFNvdW5kcyBnb29kIHRvIG1lLiBJIHBy ZXN1bWUgd2UgbmVlZCB0aGUgc2VyaWFsIGNoaWxkIG5vZGVzIHNvIHdlIGNhbgo+ID4gPiA+ID4g PiByZWZlcmVuY2UgdGhlbSBmcm9tIHRoZSBzdGRvdXQtcGF0aD8gIAo+ID4gPiA+ID4gCj4gPiA+ ID4gPiBZZXMsIGV4YWN0bHksIHNlcGFyYXRlIG5vZGVzIGZvciBzZXJpYWwxIGFuZCBzZXJpYWwy IGFyZSBzdGlsbCByZXF1aXJlZC4KPiA+ID4gPiA+IAo+ID4gPiA+ID4gQnV0IGRyb3BwaW5nIGNs b2NrIGNvbnRyb2xsZXIgaXMgbm90IHBvc3NpYmxlIGFzIGZvciBoaWdoZXIgYmF1ZHJhdGVzIHdl Cj4gPiA+ID4gPiBuZWVkIHRvIHVzZSBhbmQgY29uZmlndXJlIHVhcnQgY2xvY2sgY29udHJvbGxl ci4gV2l0aG91dCBpdCB3ZSBqdXN0IGdldAo+ID4gPiA+ID4gY29tcGFyYWJsZSBmZWF0dXJlIHN1 cHBvcnQgd2hpY2ggaXMgYWxyZWFkeSBwcmVzZW50IGluIGRyaXZlci4KPiA+ID4gPiAKPiA+ID4g PiBXaGF0IFN0ZXBoZW4gbWVhbnMgaXMgbWFraW5nIGNsb2NrIGNvbnRyb2xsZXIgb3V0IG9mIHRo ZSB1YXJ0IG5vZGUKPiA+ID4gPiBkaXJlY3RseS4gTm8gbmVlZCB0byBhZGQgc2VwYXJhdGUgc3Vi bm9kZSBqdXN0IGZvciBjbG9jayBjb250cm9sbGVyLgo+ID4gPiAKPiA+ID4gVGhpcyBpcyBhbHJl YWR5IGltcGxlbWVudGVkIGluIHY3IHBhdGNoIHNlcmllcy4gQ2xvY2sgY29udHJvbGxlciBpcwo+ ID4gPiBhbHJlYWR5IG91dHNpZGUgb2YgdWFydCBub2Rlcy4KPiA+IAo+ID4gSSBtZWFuIHRvIGNv bWJpbmUgdGhlIHVhcnQgbm9kZSBhbmQgdGhlIGNsb2NrLWNvbnRyb2xsZXIgbm9kZSB0b2dldGhl cgo+ID4gCj4gPiAgICAgICB1YXJ0LXdyYXBwZXIgewo+ID4gICAgICAgICAgICAgICByZWcgPSA8 MHgxMjAwMCAweDE4PiwgPDB4MTIyMDAgMHgzMD47Cj4gPiAgICAgICAgICAgICAgICNjbG9jay1j ZWxscyAuLi4KPiA+IAo+ID4gICAgICAgICAgICAgICBzZXJpYWwxIHsKPiA+ICAgICAgICAgICAg ICAgICAgICAgICAuLi4KPiA+ICAgICAgICAgICAgICAgfTsKPiA+IAo+ID4gICAgICAgICAgICAg ICBzZXJpYWwyIHsKPiA+ICAgICAgICAgICAgICAgICAgICAgICAuLi4KPiA+ICAgICAgICAgICAg ICAgfTsKPiA+ICAgICAgIH07Cj4gCj4gT2ssIG5vdyBJIHNlZSB3aGF0IHlvdSBtZWFuLgo+IAo+ IEJ1dCBwcm9ibGVtIGlzIHRoYXQgdGhpcyBpcyBub3QgYmFja3dhcmQgY29tcGF0aWJsZSBjaGFu Z2UuIEFuZCB3b3VsZAo+IG5vdCB3b3JrIHBlciBleGlzdGluZyBEVCBiaW5kaW5ncyBkZWZpbml0 aW9ucywgd2hpY2ggZGVmaW5lcyBob3cKPiBib290bG9hZGVyIHNob3VsZCBzZXQgY29uZmlndXJl ZCBjbG9ja3MuCj4gCj4gQXMgSSB3cm90ZSBpbiBlbWFpbHMgMyBtb250aHMgYWdvLCB0aGlzIG5l dyAicHJvcG9zZWQiIERUUyBkZWZpbml0aW9uIGlzCj4gc29tZXRoaW5nIHdoaWNoIEkgd291bGQg aGF2ZSBjaG9zZW4gaWYgSSBoYWQgZGVzaWduZWQgdGhpcyBkcml2ZXIgYW5kCj4gYmluZGluZ3Mg aW4gcGFzdC4gQnV0IHRoYXQgZGlkIG5vdCBoYXBwZW4gYW5kIGRpZmZlcmVudCBhcHByb2FjaCBp cwo+IGFscmVhZHkgd2lkZWx5IGluIHVzZWQuCj4gCj4gVG8gc3VwcG9ydCBleGlzdGluZyBEVFMg ZGVmaW5pdGlvbnMgYW5kIGJvb3Rsb2FkZXJzLCBpdCBpcyByZWFsbHkKPiByZXF1aXJlZCB0byBo YXZlIGN1cnJlbnQgc3RydWN0dXJlIGJhY2t3YXJkIGNvbXBhdGlibGUgbGlrZSBpdCBpcwo+IGRl ZmluZWQgaW4gY3VycmVudCBEVCBiaW5kaW5ncyBkb2N1bWVudC4gQW5kIG15IGNoYW5nZXMgaW4g dGhpcyBwYXRjaAo+IHNlcmllcyBhcmUgYmFja3dhcmQgY29tcGF0aWJsZS4KCkknbSBsb3N0LiBJ cyB0aGUgYm9vdGxvYWRlciB0aGUgb25lIHRoYXQncyBleHBlY3Rpbmcgc29tZSBwYXJ0aWN1bGFy CnNlcmlhbCBub2RlIGZvcm1hdCBhbmQgdXBkYXRpbmcgc29tZXRoaW5nPyBXaGF0IGlzIHRoZSBi b290bG9hZGVyIGRvaW5nPwoKPiAKPiBUbyBjaGFuZ2UgRFRTIHN0cnVjdHVyZSwgaXQgd291bGQg YmUgbmVlZGVkIHRvIHByb3ZpZGUgdWFydCBub2RlcyBpbiBEVFMKPiBmaWxlcyB0d28gdGltZXM6 IG9uY2UgaW4gb2xkIHN0eWxlICh0aGUgY3VycmVudCBvbmUpIGFuZCBzZWNvbmQgdGltZSBpbgo+ IHRoaXMgbmV3IHN0eWxlLgoKVGhhdCdzIG5vdCBhIGdvb2QgaWRlYS4gV2h5IGRvIHdlIG5lZWQg dG8gc3VwcG9ydCBib3RoIGF0IHRoZSBzYW1lIHRpbWU/Cgo+IAo+IEJ1dCBzdWNoIHRoaW5nIHdv dWxkIGV2ZW4gbW9yZSBjb21wbGljYXRlIHVwZGF0aW5nIGRyaXZlciBhbmQgaXQgbmVlZHMKPiB0 byBiZSBpbXBsZW1lbnRlZC4KPiAKPiBQbHVzIHRoaXMgd291bGQgb3BlbiBhIHF1ZXN0aW9uIGhv dyB0byBkZWZpbmUgZGVmYXVsdCBzdGRvdXQtcGF0aCBpZgo+IHRoZXJlIHdvdWxkIGJlIDQgc2Vy aWFsIG5vZGVzLCB3aGVyZSBvbmUgcGFpciB3b3VsZCBkZXNjcmliZSBvbGQgc3R5bGUKPiBhbmQg c2Vjb25kIHBhaXIgbmV3IHN0eWxlOyBtZWFuaW5nIHRoYXQgMiBjcm9zcyBub2RlcyB3b3VsZCBk ZXNjcmliZQo+IHNhbWUgZGVmaW5lLgoKSHVoPyBXZSBzaG91bGRuJ3QgaGF2ZSBib3RoIGJpbmRp bmdzIHByZXNlbnQgaW4gdGhlIERUQi4KCj4gCj4gRm9yIG1lIHRoaXMgbG9va3MgbGlrZSBhIG1v cmUgY29tcGxpY2F0aW9ucyBhbmQgSSBkbyBub3Qgc2VlIGFueSBiZW5lZml0Cj4gZnJvbSBpdC4K PiAKPiBJdCBpcyByZWFsbHkgaW1wb3J0YW50IHRvIGJyZWFrIGJhY2t3YXJkIGNvbXBhdGliaWxp dHksIGp1c3QgdG8gdHJ5Cj4gaGF2aW5nIG5ldyBjbGVhbmVyIEFQSSBhdCB0aGUgY29zdCBvZiBo YXZpbmcgbW9yZSBjb21wbGljYXRpb25zIGFuZAo+IHJlcXVpcmVtZW50IGZvciBtb3JlIGRldmVs b3BtZW50IGFuZCBhbHNvIGltcG9ydGFudCBtYWludGVuYW5jZT8KCkl0J3MgaW1wb3J0YW50IHRv IG5vdCBtYWtlIERUIG5vZGVzIGhhdmUgcmVnIHByb3BlcnRpZXMgdGhhdCBvdmVybGFwLgpNYXli ZSB0aGlzIGlzIGEgRFQgcHVyaXN0IHZpZXdwb2ludCBhbmQgSSdtIHRvdGFsbHkgb2ZmIGJhc2Uh IEkgdGhpbmsKUm9iIGRpZCBhY2sgdGhpcyBiaW5kaW5nIGFscmVhZHkgc28gSSBtdXN0IGJlIGNv bWluZyBmcm9tIHRoZSB3cm9uZwphbmdsZS4KCk5vdGhpbmcgcHJldmVudHMgcmVnaXN0ZXIgb3Zl cmxhcCBmcm9tIGhhcHBlbmluZyBpbiBwcmFjdGljZSwgYnV0IGl0J3MKZ29vZCB0byBhdm9pZCBz dWNoIGEgc2l0dWF0aW9uIGFzIGl0IGNsZWFybHkgZGl2aWRlcyB0aGUgSS9PIHNwYWNlIGJ5CmFz c2lnbmluZyBhbiBhZGRyZXNzIHJhbmdlIHRvIGEgcGFydGljdWxhciBkZXZpY2UuIEluIHRoaXMg Y2FzZSwgd2Ugc2VlCnRoZSB0d28gdWFydHMgYXJlIHJlYWxseSBvbmUgZGV2aWNlLCBidXQgd2Ug bmVlZCB0d28gbm9kZXMgaW4gRFQgZm9yCnN0ZG91dC1wYXRoLCBzbyB3ZSBtYWtlIHNvbWUgY2hp bGQgbm9kZXMgYW5kIGhhdmUgdGhlIGRyaXZlciBmaWd1cmUgb3V0CndoaWNoIHNlcmlhbCBwb3J0 IHRvIHVzZSBmb3IgdGhlIGNvbnNvbGUuCgpXZSBzaG91bGRuJ3QgYmUgYWRkaW5nIG1vcmUgbm9k ZXMgdG8gRFQgdG8gZ2V0IGRyaXZlcnMgdG8gcHJvYmUgZm9yCmRldmljZSBJL08gc3BhY2VzIHRo YXQgaGF2ZSBhbHJlYWR5IGJlZW4gZGVzY3JpYmVkIGluIERULiBXaGVuIHRoaXMKaGFwcGVucywg d2UgbGVhcm4gdGhhdCBzb21lIEkvTyByYW5nZSBpcyBhY3R1YWxseSBhIGNvbWJpbmF0aW9uIG9m CmZ1bmN0aW9ucywgbGlrZSB1YXJ0IGFuZCBjbGtzLCBhbmQgdGh1cyB3ZSBzaG91bGQgYmUgYWJs ZSB0byBhZGQgYW55CnJlcXVpcmVkIHByb3BlcnRpZXMgdG8gdGhlIGV4aXN0aW5nIERUIG5vZGUg dG8gc3VwcG9ydCB0aGF0IG5ldyBmZWF0dXJlCnRoYXQgd2Fzbid0IGRlc2NyaWJlZCBiZWZvcmUg aW4gdGhlIGJpbmRpbmcuCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxp c3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0 aW5mby9saW51eC1hcm0ta2VybmVsCg==