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.8 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_PASS,URIBL_BLOCKED,USER_AGENT_NEOMUTT 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 C9C4FC282C3 for ; Tue, 22 Jan 2019 10:58:56 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 816D720879 for ; Tue, 22 Jan 2019 10:58:56 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=armlinux.org.uk header.i=@armlinux.org.uk header.b="kOjEmGAE" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727862AbfAVK6y (ORCPT ); Tue, 22 Jan 2019 05:58:54 -0500 Received: from pandora.armlinux.org.uk ([78.32.30.218]:35208 "EHLO pandora.armlinux.org.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726095AbfAVK6x (ORCPT ); Tue, 22 Jan 2019 05:58:53 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=armlinux.org.uk; s=pandora-2014; h=Sender:In-Reply-To:Content-Type: MIME-Version:References:Message-ID:Subject:Cc:To:From:Date:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=a6bym608hIJ9SVvjatXXKExOED6G2/6CTtQ/Xl8LgOg=; b=kOjEmGAE+GnZl8mOoy6HO72Ug T2JNr3szdKyAVkbvYK9EgrDjKmK/oL4aQHlnLfPB0FEZ3ZH+CkT+xBCdzQiXcxhgs7EdZ1m57hWc3 riqFIxmNCaxjI+dxtcFNIIF5QJLv/iwKoaJ+Wy48bDLrfBAttKhT+pkwOSlNFXRLtkTN8=; Received: from e5254000004ec.dyn.armlinux.org.uk ([2002:4e20:1eda:1:5054:ff:fe00:4ec]:46178 helo=shell.armlinux.org.uk) by pandora.armlinux.org.uk with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.90_1) (envelope-from ) id 1gltlU-0002z9-2H; Tue, 22 Jan 2019 10:58:44 +0000 Received: from linux by shell.armlinux.org.uk with local (Exim 4.89) (envelope-from ) id 1gltlT-0001eY-FS; Tue, 22 Jan 2019 10:58:43 +0000 Date: Tue, 22 Jan 2019 10:58:43 +0000 From: Russell King - ARM Linux admin To: Rob Herring Cc: Lubomir Rintel , Mark Rutland , dri-devel , devicetree@vger.kernel.org, "linux-kernel@vger.kernel.org" Subject: Re: [PATCH 4/6] dt-bindings: display: armada: Add display subsystem binding Message-ID: <20190122105843.cqtzit2adfoungku@e5254000004ec.dyn.armlinux.org.uk> References: <20190120172534.24617-1-lkundrak@v3.sk> <20190120172534.24617-5-lkundrak@v3.sk> <3191cdde84978adf98d200a9db6f3c18e0a46390.camel@v3.sk> <20190121175301.lremzw6dul7dyff4@e5254000004ec.dyn.armlinux.org.uk> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: NeoMutt/20170113 (1.7.2) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Jan 21, 2019 at 05:58:50PM -0600, Rob Herring wrote: > On Mon, Jan 21, 2019 at 11:53 AM Russell King - ARM Linux admin > wrote: > > > > On Mon, Jan 21, 2019 at 10:07:11AM -0600, Rob Herring wrote: > > > On Mon, Jan 21, 2019 at 9:46 AM Lubomir Rintel wrote: > > > > > > > > On Mon, 2019-01-21 at 09:35 -0600, Rob Herring wrote: > > > > > On Sun, Jan 20, 2019 at 11:26 AM Lubomir Rintel wrote: > > > > > > The Marvell Armada DRM master device is a virtual device needed to list all > > > > > > nodes that comprise the graphics subsystem. > > > > > > > > > > > > Signed-off-by: Lubomir Rintel > > > > > > --- > > > > > > .../display/armada/marvell-armada-drm.txt | 24 +++++++++++++++++++ > > > > > > 1 file changed, 24 insertions(+) > > > > > > > > > > > > diff --git a/Documentation/devicetree/bindings/display/armada/marvell-armada-drm.txt b/Documentation/devicetree/bindings/display/armada/marvell-armada-drm.txt > > > > > > index de4cca9432c8..3dbfa8047f0b 100644 > > > > > > --- a/Documentation/devicetree/bindings/display/armada/marvell-armada-drm.txt > > > > > > +++ b/Documentation/devicetree/bindings/display/armada/marvell-armada-drm.txt > > > > > > @@ -1,3 +1,27 @@ > > > > > > +Marvell Armada DRM master device > > > > > > +================================ > > > > > > + > > > > > > +The Marvell Armada DRM master device is a virtual device needed to list all > > > > > > +nodes that comprise the graphics subsystem. > > > > > > + > > > > > > +Required properties: > > > > > > + > > > > > > + - compatible: value should be "marvell,dove-display-subsystem", > > > > > > + "marvell,armada-display-subsystem" > > > > > > + - ports: a list of phandles pointing to display interface ports of CRTC > > > > > > + devices > > > > > > + - memory-region: phandle to a node describing memory to be used for the > > > > > > + framebuffer > > > > > > + > > > > > > +Example: > > > > > > + > > > > > > + display-subsystem { > > > > > > + compatible = "marvell,dove-display-subsystem", > > > > > > + "marvell,armada-display-subsystem"; > > > > > > + memory-region = <&display_reserved>; > > > > > > + ports = <&lcd0_port>; > > > > > > > > > > If there is only one device, you don't need this virtual node. > > > > > > > > By "one device" you mean one LCD controller (CRTC)? > > > > > > Yes. > > > > How does that work (as far as the Linux implementation) ? I can't see > > a way that could work, while allowing the flexibility that Armada DRM > > allows (two completely independent LCD controllers as two separate DRM > > devices vs one DRM device containing both LCD controllers.) > > > > > > I suppose in the (single CRTC) example case, the display-subsystem node > > > > used to associate it with the memory region reserved for allocating the > > > > frame buffers from. Could that be done differently? > > > > > > Move memory-region to the LCD controller node. > > > > That doesn't work - it would appear in the wrong part of the driver. > > Why? You can fetch properties from other nodes. > > If you have 2 CRTCs, do you have 1 or 2 reserved memory regions? I'd > think 2 with each one in the corresponding LCDC that uses them would > be more flexible. There would still be one reserved memory region, since it is shared between both LCDCs. > Or just get the data out of the /reserved-memory node directly. Surely > it has a compatible that you can find it with. I see that the DT reserved memory support has progressed since I wrote the armada code to deal with it, and it's now possible to make use of reserved memory via of_reserved_mem_lookup() rather than using the RESERVEDMEM_OF_DECLARE() and so forth. > > > > Also, if the node is indeed made optional, then it's going to > > > > complicate things on the DRM side. Currently the driver that binds to > > > > the node creates the DRM device once it sees all the components > > > > connected to the ports appear. If we loose it, then the LCD controller > > > > driver would somehow need to find out that it's alone and create the > > > > DRM device itself. > > > > > > DT is not the only way to create devices. The DRM driver can bind to > > > the LCDC node and then create a child CRTC device (or even multiple > > > ones for h/w with multiple pipelines). > > > > That seems completely upside down and rediculous to me - are you > > really suggesting that we should have some kind of virtual device > > in DT, and omit the _real_ physical devices for that, having the > > driver create the device with all the appropriate SoC resources? > > We create child platform devices that inherit from the parent in DT > all the time. MFD child drivers are a common case. Sometime the child > devices have DT nodes and sometimes they don't. I still don't think what you're saying is the right way to go about this. You _appear_ to be saying to group _both_ LCD controllers into one DT node, despite the fact that they are two separate devices with different mmio resources, interrupts etc, and have code in the kernel to split the DT device up into sub-devices. IOW: lcd-controllers@810000 { compatible = "marvell,dove-lcd-subsystem"; reg = <0x810000 0x1000>, <0x820000 0x1000>; interrupts = <46>, <47>; status = "disabled"; }; rather than: lcd1: lcd-controller@810000 { compatible = "marvell,dove-lcd"; reg = <0x810000 0x1000>; interrupts = <46>; status = "disabled"; }; lcd0: lcd-controller@820000 { compatible = "marvell,dove-lcd"; reg = <0x820000 0x1000>; interrupts = <47>; status = "disabled"; }; Why do we need all that extra complexity, when DT can perfectly well describe each individual LCD controller as a separate node? How do we then do stuff such as: &lcd0 { status = "okay"; clocks = <&si5351 0>; clock-names = "ext_ref_clk1"; lcd0_port: port { lcd0_rgb: endpoint { remote-endpoint = <&tda998x_video>; }; }; }; &lcd1 { status = "okay"; clocks = <÷r_clk 3>; clock-names = "plldivider"; lcd1_port: port { lcd1_rgb: endpoint { remote-endpoint = <&vga_bridge_in>; }; }; }; in board files - we seem to lose a way to reference each individual LCD controller using this method. This is why I say your suggestion is upside down and rather rediculous - it doesn't really fit the hardware at all, and to me just seems to be an exercise in making things unnecessarily difficult. > Otherwise, do it the other way around. Create a virtual DRM device > conditioned on the SoC: > > if (of_machine_is_compatible("foo,bar")) > platform_device_register_simple(...) I guess that's possible at the expense of losing the flexibility - my original idea was to allow a case where you could have two DRM devices, one per LCD controller if you wanted, rather than having a binding that forces one DRM device optionally containing both LCD controllers. This is the flexibility I talk about above, that you seem to have skipped over in your reply. > > > You'll also notice that there are only 3 cases of this virtual node in > > > the tree: STi, i.MX IPU, and Rockchip. That's because we've deprecated > > > doing these virtual nodes for some time now. IOW, there are several > > > examples of how to do this without a virtual node. > > > > This driver has been in-tree with this setup for some time, although > > the documentation has been missing (we actually have a _lot_ of > > instances of that.) However, we have no in-tree DT using it. > > The current Armada DRM driver has no binding to DT at all, so no, it > is not just missing documentation or a dts file. > > > I don't really see how to satisfy your comments without totally > > restructuring the driver, which is going to be quite a big chunk > > of work. I'm not sure I have the motivation to do that right now. > > It's not a big chunk of work. Look at commit 246774d17fc0 > ("drm/etnaviv: remove the need for a gpu-subsystem DT node") for an > example. > > Rob > -- RMK's Patch system: https://www.armlinux.org.uk/developer/patches/ FTTC broadband for 0.8mile line in suburbia: sync at 12.1Mbps down 622kbps up According to speedtest.net: 11.9Mbps down 500kbps up From mboxrd@z Thu Jan 1 00:00:00 1970 From: Russell King - ARM Linux admin Subject: Re: [PATCH 4/6] dt-bindings: display: armada: Add display subsystem binding Date: Tue, 22 Jan 2019 10:58:43 +0000 Message-ID: <20190122105843.cqtzit2adfoungku@e5254000004ec.dyn.armlinux.org.uk> References: <20190120172534.24617-1-lkundrak@v3.sk> <20190120172534.24617-5-lkundrak@v3.sk> <3191cdde84978adf98d200a9db6f3c18e0a46390.camel@v3.sk> <20190121175301.lremzw6dul7dyff4@e5254000004ec.dyn.armlinux.org.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Rob Herring Cc: Mark Rutland , Lubomir Rintel , "linux-kernel@vger.kernel.org" , dri-devel , devicetree@vger.kernel.org List-Id: devicetree@vger.kernel.org T24gTW9uLCBKYW4gMjEsIDIwMTkgYXQgMDU6NTg6NTBQTSAtMDYwMCwgUm9iIEhlcnJpbmcgd3Jv dGU6Cj4gT24gTW9uLCBKYW4gMjEsIDIwMTkgYXQgMTE6NTMgQU0gUnVzc2VsbCBLaW5nIC0gQVJN IExpbnV4IGFkbWluCj4gPGxpbnV4QGFybWxpbnV4Lm9yZy51az4gd3JvdGU6Cj4gPgo+ID4gT24g TW9uLCBKYW4gMjEsIDIwMTkgYXQgMTA6MDc6MTFBTSAtMDYwMCwgUm9iIEhlcnJpbmcgd3JvdGU6 Cj4gPiA+IE9uIE1vbiwgSmFuIDIxLCAyMDE5IGF0IDk6NDYgQU0gTHVib21pciBSaW50ZWwgPGxr dW5kcmFrQHYzLnNrPiB3cm90ZToKPiA+ID4gPgo+ID4gPiA+IE9uIE1vbiwgMjAxOS0wMS0yMSBh dCAwOTozNSAtMDYwMCwgUm9iIEhlcnJpbmcgd3JvdGU6Cj4gPiA+ID4gPiBPbiBTdW4sIEphbiAy MCwgMjAxOSBhdCAxMToyNiBBTSBMdWJvbWlyIFJpbnRlbCA8bGt1bmRyYWtAdjMuc2s+IHdyb3Rl Ogo+ID4gPiA+ID4gPiBUaGUgTWFydmVsbCBBcm1hZGEgRFJNIG1hc3RlciBkZXZpY2UgaXMgYSB2 aXJ0dWFsIGRldmljZSBuZWVkZWQgdG8gbGlzdCBhbGwKPiA+ID4gPiA+ID4gbm9kZXMgdGhhdCBj b21wcmlzZSB0aGUgZ3JhcGhpY3Mgc3Vic3lzdGVtLgo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiBT aWduZWQtb2ZmLWJ5OiBMdWJvbWlyIFJpbnRlbCA8bGt1bmRyYWtAdjMuc2s+Cj4gPiA+ID4gPiA+ IC0tLQo+ID4gPiA+ID4gPiAgLi4uL2Rpc3BsYXkvYXJtYWRhL21hcnZlbGwtYXJtYWRhLWRybS50 eHQgICAgIHwgMjQgKysrKysrKysrKysrKysrKysrKwo+ID4gPiA+ID4gPiAgMSBmaWxlIGNoYW5n ZWQsIDI0IGluc2VydGlvbnMoKykKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gZGlmZiAtLWdpdCBh L0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L2FybWFkYS9tYXJ2ZWxs LWFybWFkYS1kcm0udHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2Rpc3Bs YXkvYXJtYWRhL21hcnZlbGwtYXJtYWRhLWRybS50eHQKPiA+ID4gPiA+ID4gaW5kZXggZGU0Y2Nh OTQzMmM4Li4zZGJmYTgwNDdmMGIgMTAwNjQ0Cj4gPiA+ID4gPiA+IC0tLSBhL0RvY3VtZW50YXRp b24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L2FybWFkYS9tYXJ2ZWxsLWFybWFkYS1kcm0u dHh0Cj4gPiA+ID4gPiA+ICsrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9k aXNwbGF5L2FybWFkYS9tYXJ2ZWxsLWFybWFkYS1kcm0udHh0Cj4gPiA+ID4gPiA+IEBAIC0xLDMg KzEsMjcgQEAKPiA+ID4gPiA+ID4gK01hcnZlbGwgQXJtYWRhIERSTSBtYXN0ZXIgZGV2aWNlCj4g PiA+ID4gPiA+ICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+ID4gPiA+ID4gPiAr Cj4gPiA+ID4gPiA+ICtUaGUgTWFydmVsbCBBcm1hZGEgRFJNIG1hc3RlciBkZXZpY2UgaXMgYSB2 aXJ0dWFsIGRldmljZSBuZWVkZWQgdG8gbGlzdCBhbGwKPiA+ID4gPiA+ID4gK25vZGVzIHRoYXQg Y29tcHJpc2UgdGhlIGdyYXBoaWNzIHN1YnN5c3RlbS4KPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4g PiArUmVxdWlyZWQgcHJvcGVydGllczoKPiA+ID4gPiA+ID4gKwo+ID4gPiA+ID4gPiArIC0gY29t cGF0aWJsZTogdmFsdWUgc2hvdWxkIGJlICJtYXJ2ZWxsLGRvdmUtZGlzcGxheS1zdWJzeXN0ZW0i LAo+ID4gPiA+ID4gPiArICAgIm1hcnZlbGwsYXJtYWRhLWRpc3BsYXktc3Vic3lzdGVtIgo+ID4g PiA+ID4gPiArIC0gcG9ydHM6IGEgbGlzdCBvZiBwaGFuZGxlcyBwb2ludGluZyB0byBkaXNwbGF5 IGludGVyZmFjZSBwb3J0cyBvZiBDUlRDCj4gPiA+ID4gPiA+ICsgICBkZXZpY2VzCj4gPiA+ID4g PiA+ICsgLSBtZW1vcnktcmVnaW9uOiBwaGFuZGxlIHRvIGEgbm9kZSBkZXNjcmliaW5nIG1lbW9y eSB0byBiZSB1c2VkIGZvciB0aGUKPiA+ID4gPiA+ID4gKyAgIGZyYW1lYnVmZmVyCj4gPiA+ID4g PiA+ICsKPiA+ID4gPiA+ID4gK0V4YW1wbGU6Cj4gPiA+ID4gPiA+ICsKPiA+ID4gPiA+ID4gKyAg ICAgICBkaXNwbGF5LXN1YnN5c3RlbSB7Cj4gPiA+ID4gPiA+ICsgICAgICAgICAgICAgICBjb21w YXRpYmxlID0gIm1hcnZlbGwsZG92ZS1kaXNwbGF5LXN1YnN5c3RlbSIsCj4gPiA+ID4gPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1hcnZlbGwsYXJtYWRhLWRpc3BsYXktc3Vic3lz dGVtIjsKPiA+ID4gPiA+ID4gKyAgICAgICAgICAgICAgIG1lbW9yeS1yZWdpb24gPSA8JmRpc3Bs YXlfcmVzZXJ2ZWQ+Owo+ID4gPiA+ID4gPiArICAgICAgICAgICAgICAgcG9ydHMgPSA8JmxjZDBf cG9ydD47Cj4gPiA+ID4gPgo+ID4gPiA+ID4gSWYgdGhlcmUgaXMgb25seSBvbmUgZGV2aWNlLCB5 b3UgZG9uJ3QgbmVlZCB0aGlzIHZpcnR1YWwgbm9kZS4KPiA+ID4gPgo+ID4gPiA+IEJ5ICJvbmUg ZGV2aWNlIiB5b3UgbWVhbiBvbmUgTENEIGNvbnRyb2xsZXIgKENSVEMpPwo+ID4gPgo+ID4gPiBZ ZXMuCj4gPgo+ID4gSG93IGRvZXMgdGhhdCB3b3JrIChhcyBmYXIgYXMgdGhlIExpbnV4IGltcGxl bWVudGF0aW9uKSA/ICBJIGNhbid0IHNlZQo+ID4gYSB3YXkgdGhhdCBjb3VsZCB3b3JrLCB3aGls ZSBhbGxvd2luZyB0aGUgZmxleGliaWxpdHkgdGhhdCBBcm1hZGEgRFJNCj4gPiBhbGxvd3MgKHR3 byBjb21wbGV0ZWx5IGluZGVwZW5kZW50IExDRCBjb250cm9sbGVycyBhcyB0d28gc2VwYXJhdGUg RFJNCj4gPiBkZXZpY2VzIHZzIG9uZSBEUk0gZGV2aWNlIGNvbnRhaW5pbmcgYm90aCBMQ0QgY29u dHJvbGxlcnMuKQo+ID4KPiA+ID4gPiBJIHN1cHBvc2UgaW4gdGhlIChzaW5nbGUgQ1JUQykgZXhh bXBsZSBjYXNlLCB0aGUgZGlzcGxheS1zdWJzeXN0ZW0gbm9kZQo+ID4gPiA+IHVzZWQgdG8gYXNz b2NpYXRlIGl0IHdpdGggdGhlIG1lbW9yeSByZWdpb24gcmVzZXJ2ZWQgZm9yIGFsbG9jYXRpbmcg dGhlCj4gPiA+ID4gZnJhbWUgYnVmZmVycyBmcm9tLiBDb3VsZCB0aGF0IGJlIGRvbmUgZGlmZmVy ZW50bHk/Cj4gPiA+Cj4gPiA+IE1vdmUgbWVtb3J5LXJlZ2lvbiB0byB0aGUgTENEIGNvbnRyb2xs ZXIgbm9kZS4KPiA+Cj4gPiBUaGF0IGRvZXNuJ3Qgd29yayAtIGl0IHdvdWxkIGFwcGVhciBpbiB0 aGUgd3JvbmcgcGFydCBvZiB0aGUgZHJpdmVyLgo+IAo+IFdoeT8gWW91IGNhbiBmZXRjaCBwcm9w ZXJ0aWVzIGZyb20gb3RoZXIgbm9kZXMuCj4gCj4gSWYgeW91IGhhdmUgMiBDUlRDcywgZG8geW91 IGhhdmUgMSBvciAyIHJlc2VydmVkIG1lbW9yeSByZWdpb25zPyBJJ2QKPiB0aGluayAyIHdpdGgg ZWFjaCBvbmUgaW4gdGhlIGNvcnJlc3BvbmRpbmcgTENEQyB0aGF0IHVzZXMgdGhlbSB3b3VsZAo+ IGJlIG1vcmUgZmxleGlibGUuCgpUaGVyZSB3b3VsZCBzdGlsbCBiZSBvbmUgcmVzZXJ2ZWQgbWVt b3J5IHJlZ2lvbiwgc2luY2UgaXQgaXMgc2hhcmVkCmJldHdlZW4gYm90aCBMQ0RDcy4KCj4gT3Ig anVzdCBnZXQgdGhlIGRhdGEgb3V0IG9mIHRoZSAvcmVzZXJ2ZWQtbWVtb3J5IG5vZGUgZGlyZWN0 bHkuIFN1cmVseQo+IGl0IGhhcyBhIGNvbXBhdGlibGUgdGhhdCB5b3UgY2FuIGZpbmQgaXQgd2l0 aC4KCkkgc2VlIHRoYXQgdGhlIERUIHJlc2VydmVkIG1lbW9yeSBzdXBwb3J0IGhhcyBwcm9ncmVz c2VkIHNpbmNlIEkgd3JvdGUKdGhlIGFybWFkYSBjb2RlIHRvIGRlYWwgd2l0aCBpdCwgYW5kIGl0 J3Mgbm93IHBvc3NpYmxlIHRvIG1ha2UgdXNlIG9mCnJlc2VydmVkIG1lbW9yeSB2aWEgb2ZfcmVz ZXJ2ZWRfbWVtX2xvb2t1cCgpIHJhdGhlciB0aGFuIHVzaW5nIHRoZQpSRVNFUlZFRE1FTV9PRl9E RUNMQVJFKCkgYW5kIHNvIGZvcnRoLgoKPiA+ID4gPiBBbHNvLCBpZiB0aGUgbm9kZSBpcyBpbmRl ZWQgbWFkZSBvcHRpb25hbCwgdGhlbiBpdCdzIGdvaW5nIHRvCj4gPiA+ID4gY29tcGxpY2F0ZSB0 aGluZ3Mgb24gdGhlIERSTSBzaWRlLiBDdXJyZW50bHkgdGhlIGRyaXZlciB0aGF0IGJpbmRzIHRv Cj4gPiA+ID4gdGhlIG5vZGUgY3JlYXRlcyB0aGUgRFJNIGRldmljZSBvbmNlIGl0IHNlZXMgYWxs IHRoZSBjb21wb25lbnRzCj4gPiA+ID4gY29ubmVjdGVkIHRvIHRoZSBwb3J0cyBhcHBlYXIuIElm IHdlIGxvb3NlIGl0LCB0aGVuIHRoZSBMQ0QgY29udHJvbGxlcgo+ID4gPiA+IGRyaXZlciB3b3Vs ZCBzb21laG93IG5lZWQgdG8gZmluZCBvdXQgdGhhdCBpdCdzIGFsb25lIGFuZCBjcmVhdGUgdGhl Cj4gPiA+ID4gRFJNIGRldmljZSBpdHNlbGYuCj4gPiA+Cj4gPiA+IERUIGlzIG5vdCB0aGUgb25s eSB3YXkgdG8gY3JlYXRlIGRldmljZXMuIFRoZSBEUk0gZHJpdmVyIGNhbiBiaW5kIHRvCj4gPiA+ IHRoZSBMQ0RDIG5vZGUgYW5kIHRoZW4gY3JlYXRlIGEgY2hpbGQgQ1JUQyBkZXZpY2UgKG9yIGV2 ZW4gbXVsdGlwbGUKPiA+ID4gb25lcyBmb3IgaC93IHdpdGggbXVsdGlwbGUgcGlwZWxpbmVzKS4K PiA+Cj4gPiBUaGF0IHNlZW1zIGNvbXBsZXRlbHkgdXBzaWRlIGRvd24gYW5kIHJlZGljdWxvdXMg dG8gbWUgLSBhcmUgeW91Cj4gPiByZWFsbHkgc3VnZ2VzdGluZyB0aGF0IHdlIHNob3VsZCBoYXZl IHNvbWUga2luZCBvZiB2aXJ0dWFsIGRldmljZQo+ID4gaW4gRFQsIGFuZCBvbWl0IHRoZSBfcmVh bF8gcGh5c2ljYWwgZGV2aWNlcyBmb3IgdGhhdCwgaGF2aW5nIHRoZQo+ID4gZHJpdmVyIGNyZWF0 ZSB0aGUgZGV2aWNlIHdpdGggYWxsIHRoZSBhcHByb3ByaWF0ZSBTb0MgcmVzb3VyY2VzPwo+IAo+ IFdlIGNyZWF0ZSBjaGlsZCBwbGF0Zm9ybSBkZXZpY2VzIHRoYXQgaW5oZXJpdCBmcm9tIHRoZSBw YXJlbnQgaW4gRFQKPiBhbGwgdGhlIHRpbWUuIE1GRCBjaGlsZCBkcml2ZXJzIGFyZSBhIGNvbW1v biBjYXNlLiBTb21ldGltZSB0aGUgY2hpbGQKPiBkZXZpY2VzIGhhdmUgRFQgbm9kZXMgYW5kIHNv bWV0aW1lcyB0aGV5IGRvbid0LgoKSSBzdGlsbCBkb24ndCB0aGluayB3aGF0IHlvdSdyZSBzYXlp bmcgaXMgdGhlIHJpZ2h0IHdheSB0byBnbyBhYm91dAp0aGlzLgoKWW91IF9hcHBlYXJfIHRvIGJl IHNheWluZyB0byBncm91cCBfYm90aF8gTENEIGNvbnRyb2xsZXJzIGludG8gb25lCkRUIG5vZGUs IGRlc3BpdGUgdGhlIGZhY3QgdGhhdCB0aGV5IGFyZSB0d28gc2VwYXJhdGUgZGV2aWNlcyB3aXRo CmRpZmZlcmVudCBtbWlvIHJlc291cmNlcywgaW50ZXJydXB0cyBldGMsIGFuZCBoYXZlIGNvZGUg aW4gdGhlCmtlcm5lbCB0byBzcGxpdCB0aGUgRFQgZGV2aWNlIHVwIGludG8gc3ViLWRldmljZXMu ICBJT1c6CgogICAgICAgICAgICAgICAgICAgICAgICBsY2QtY29udHJvbGxlcnNAODEwMDAwIHsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gIm1hcnZlbGwsZG92 ZS1sY2Qtc3Vic3lzdGVtIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSA8 MHg4MTAwMDAgMHgxMDAwPiwgPDB4ODIwMDAwIDB4MTAwMD47CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50ZXJydXB0cyA9IDw0Nj4sIDw0Nz47CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RhdHVzID0gImRpc2FibGVkIjsKICAgICAgICAgICAgICAgICAgICAgICAg fTsKCnJhdGhlciB0aGFuOgoKICAgICAgICAgICAgICAgICAgICAgICAgbGNkMTogbGNkLWNvbnRy b2xsZXJAODEwMDAwIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxl ID0gIm1hcnZlbGwsZG92ZS1sY2QiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl ZyA9IDwweDgxMDAwMCAweDEwMDA+OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dGVycnVwdHMgPSA8NDY+OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9 ICJkaXNhYmxlZCI7CiAgICAgICAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAg ICAgICAgICBsY2QwOiBsY2QtY29udHJvbGxlckA4MjAwMDAgewogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAibWFydmVsbCxkb3ZlLWxjZCI7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDB4ODIwMDAwIDB4MTAwMD47CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0cyA9IDw0Nz47CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RhdHVzID0gImRpc2FibGVkIjsKICAgICAgICAgICAgICAgICAgICAg ICAgfTsKCldoeSBkbyB3ZSBuZWVkIGFsbCB0aGF0IGV4dHJhIGNvbXBsZXhpdHksIHdoZW4gRFQg Y2FuIHBlcmZlY3RseSB3ZWxsCmRlc2NyaWJlIGVhY2ggaW5kaXZpZHVhbCBMQ0QgY29udHJvbGxl ciBhcyBhIHNlcGFyYXRlIG5vZGU/CgpIb3cgZG8gd2UgdGhlbiBkbyBzdHVmZiBzdWNoIGFzOgoK JmxjZDAgewogICAgICAgIHN0YXR1cyA9ICJva2F5IjsKICAgICAgICBjbG9ja3MgPSA8JnNpNTM1 MSAwPjsKICAgICAgICBjbG9jay1uYW1lcyA9ICJleHRfcmVmX2NsazEiOwogICAgICAgIGxjZDBf cG9ydDogcG9ydCB7CiAgICAgICAgICAgICAgICBsY2QwX3JnYjogZW5kcG9pbnQgewogICAgICAg ICAgICAgICAgICAgICAgICByZW1vdGUtZW5kcG9pbnQgPSA8JnRkYTk5OHhfdmlkZW8+OwogICAg ICAgICAgICAgICAgfTsKICAgICAgICB9Owp9OwoKJmxjZDEgewogICAgICAgIHN0YXR1cyA9ICJv a2F5IjsKICAgICAgICBjbG9ja3MgPSA8JmRpdmlkZXJfY2xrIDM+OwogICAgICAgIGNsb2NrLW5h bWVzID0gInBsbGRpdmlkZXIiOwogICAgICAgIGxjZDFfcG9ydDogcG9ydCB7CiAgICAgICAgICAg ICAgICBsY2QxX3JnYjogZW5kcG9pbnQgewogICAgICAgICAgICAgICAgICAgICAgICByZW1vdGUt ZW5kcG9pbnQgPSA8JnZnYV9icmlkZ2VfaW4+OwogICAgICAgICAgICAgICAgfTsKICAgICAgICB9 Owp9OwoKaW4gYm9hcmQgZmlsZXMgLSB3ZSBzZWVtIHRvIGxvc2UgYSB3YXkgdG8gcmVmZXJlbmNl IGVhY2ggaW5kaXZpZHVhbApMQ0QgY29udHJvbGxlciB1c2luZyB0aGlzIG1ldGhvZC4gIFRoaXMg aXMgd2h5IEkgc2F5IHlvdXIgc3VnZ2VzdGlvbgppcyB1cHNpZGUgZG93biBhbmQgcmF0aGVyIHJl ZGljdWxvdXMgLSBpdCBkb2Vzbid0IHJlYWxseSBmaXQgdGhlCmhhcmR3YXJlIGF0IGFsbCwgYW5k IHRvIG1lIGp1c3Qgc2VlbXMgdG8gYmUgYW4gZXhlcmNpc2UgaW4gbWFraW5nCnRoaW5ncyB1bm5l Y2Vzc2FyaWx5IGRpZmZpY3VsdC4KCj4gT3RoZXJ3aXNlLCBkbyBpdCB0aGUgb3RoZXIgd2F5IGFy b3VuZC4gQ3JlYXRlIGEgdmlydHVhbCBEUk0gZGV2aWNlCj4gY29uZGl0aW9uZWQgb24gdGhlIFNv QzoKPiAKPiBpZiAob2ZfbWFjaGluZV9pc19jb21wYXRpYmxlKCJmb28sYmFyIikpCj4gICBwbGF0 Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKC4uLikKCkkgZ3Vlc3MgdGhhdCdzIHBvc3NpYmxl IGF0IHRoZSBleHBlbnNlIG9mIGxvc2luZyB0aGUgZmxleGliaWxpdHkgLSBteQpvcmlnaW5hbCBp ZGVhIHdhcyB0byBhbGxvdyBhIGNhc2Ugd2hlcmUgeW91IGNvdWxkIGhhdmUgdHdvIERSTSBkZXZp Y2VzLApvbmUgcGVyIExDRCBjb250cm9sbGVyIGlmIHlvdSB3YW50ZWQsIHJhdGhlciB0aGFuIGhh dmluZyBhIGJpbmRpbmcgdGhhdApmb3JjZXMgb25lIERSTSBkZXZpY2Ugb3B0aW9uYWxseSBjb250 YWluaW5nIGJvdGggTENEIGNvbnRyb2xsZXJzLgoKVGhpcyBpcyB0aGUgZmxleGliaWxpdHkgSSB0 YWxrIGFib3V0IGFib3ZlLCB0aGF0IHlvdSBzZWVtIHRvIGhhdmUKc2tpcHBlZCBvdmVyIGluIHlv dXIgcmVwbHkuCgo+ID4gPiBZb3UnbGwgYWxzbyBub3RpY2UgdGhhdCB0aGVyZSBhcmUgb25seSAz IGNhc2VzIG9mIHRoaXMgdmlydHVhbCBub2RlIGluCj4gPiA+IHRoZSB0cmVlOiBTVGksIGkuTVgg SVBVLCBhbmQgUm9ja2NoaXAuIFRoYXQncyBiZWNhdXNlIHdlJ3ZlIGRlcHJlY2F0ZWQKPiA+ID4g ZG9pbmcgdGhlc2UgdmlydHVhbCBub2RlcyBmb3Igc29tZSB0aW1lIG5vdy4gSU9XLCB0aGVyZSBh cmUgc2V2ZXJhbAo+ID4gPiBleGFtcGxlcyBvZiBob3cgdG8gZG8gdGhpcyB3aXRob3V0IGEgdmly dHVhbCBub2RlLgo+ID4KPiA+IFRoaXMgZHJpdmVyIGhhcyBiZWVuIGluLXRyZWUgd2l0aCB0aGlz IHNldHVwIGZvciBzb21lIHRpbWUsIGFsdGhvdWdoCj4gPiB0aGUgZG9jdW1lbnRhdGlvbiBoYXMg YmVlbiBtaXNzaW5nICh3ZSBhY3R1YWxseSBoYXZlIGEgX2xvdF8gb2YKPiA+IGluc3RhbmNlcyBv ZiB0aGF0LikgIEhvd2V2ZXIsIHdlIGhhdmUgbm8gaW4tdHJlZSBEVCB1c2luZyBpdC4KPiAKPiBU aGUgY3VycmVudCBBcm1hZGEgRFJNIGRyaXZlciBoYXMgbm8gYmluZGluZyB0byBEVCBhdCBhbGws IHNvIG5vLCBpdAo+IGlzIG5vdCBqdXN0IG1pc3NpbmcgZG9jdW1lbnRhdGlvbiBvciBhIGR0cyBm aWxlLgo+IAo+ID4gSSBkb24ndCByZWFsbHkgc2VlIGhvdyB0byBzYXRpc2Z5IHlvdXIgY29tbWVu dHMgd2l0aG91dCB0b3RhbGx5Cj4gPiByZXN0cnVjdHVyaW5nIHRoZSBkcml2ZXIsIHdoaWNoIGlz IGdvaW5nIHRvIGJlIHF1aXRlIGEgYmlnIGNodW5rCj4gPiBvZiB3b3JrLiAgSSdtIG5vdCBzdXJl IEkgaGF2ZSB0aGUgbW90aXZhdGlvbiB0byBkbyB0aGF0IHJpZ2h0IG5vdy4KPiAKPiBJdCdzIG5v dCBhIGJpZyBjaHVuayBvZiB3b3JrLiBMb29rIGF0IGNvbW1pdCAyNDY3NzRkMTdmYzAKPiAoImRy bS9ldG5hdml2OiByZW1vdmUgdGhlIG5lZWQgZm9yIGEgZ3B1LXN1YnN5c3RlbSBEVCBub2RlIikg Zm9yIGFuCj4gZXhhbXBsZS4KPiAKPiBSb2IKPiAKCi0tIApSTUsncyBQYXRjaCBzeXN0ZW06IGh0 dHBzOi8vd3d3LmFybWxpbnV4Lm9yZy51ay9kZXZlbG9wZXIvcGF0Y2hlcy8KRlRUQyBicm9hZGJh bmQgZm9yIDAuOG1pbGUgbGluZSBpbiBzdWJ1cmJpYTogc3luYyBhdCAxMi4xTWJwcyBkb3duIDYy MmticHMgdXAKQWNjb3JkaW5nIHRvIHNwZWVkdGVzdC5uZXQ6IDExLjlNYnBzIGRvd24gNTAwa2Jw cyB1cApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmkt ZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6 Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK