From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from na01-bn1-obe.outbound.protection.outlook.com (mail-bn1lp0144.outbound.protection.outlook.com [207.46.163.144]) (using TLSv1 with cipher AES128-SHA (128/128 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3CFA5140F9B for ; Tue, 6 May 2014 16:01:52 +1000 (EST) Message-ID: <53687913.70900@Freescale.com> Date: Tue, 6 May 2014 00:54:27 -0500 From: Emil Medve MIME-Version: 1.0 To: Scott Wood Subject: Re: [PATCH 4/6] powerpc/corenet: Create the dts components for the DPAA FMan References: <1397823693-27977-1-git-send-email-Shruti@Freescale.com> <1397823693-27977-4-git-send-email-Shruti@Freescale.com> <1398118262.1694.188.camel__8135.6513932862$1398128944$gmane$org@snotra.buserror.net> <5364BEB3.6000904@Freescale.com> <1399332359.15726.154.camel@snotra.buserror.net> In-Reply-To: <1399332359.15726.154.camel@snotra.buserror.net> Content-Type: text/plain; charset="UTF-8" Cc: devicetree@vger.kernel.org, Shruti Kanetkar , "linuxppc-dev@lists.ozlabs.org" List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Hello Scott, On 05/05/2014 06:25 PM, Scott Wood wrote: > On Sat, 2014-05-03 at 05:02 -0500, Emil Medve wrote: >> Hello Scott, >> >> >> On 04/21/2014 05:11 PM, Scott Wood wrote: >>> On Fri, 2014-04-18 at 07:21 -0500, Shruti Kanetkar wrote: >>>> +fman@400000 { >>>> + mdio@f1000 { >>>> + #address-cells = <1>; >>>> + #size-cells = <0>; >>>> + compatible = "fsl,fman-xmdio"; >>>> + reg = <0xf1000 0x1000>; >>>> + }; >>>> +}; >>> >>> I'd like to see a complete fman binding before we start adding pieces. >> >> The driver for the FMan 10 Gb/s MDIO has upstreamed a couple of years >> ago: '9f35a73 net/fsl: introduce Freescale 10G MDIO driver', granted >> without a binding writeup. > > Pushing driver code through the netdev tree does not establish device > tree ABI. Binding documents and dts files do. Sure, ideally and formally. But upstreaming a driver represents, if nothing else, a statement of intent to observe a device tree ABI. Via the SDK, FSL customers are using the device tree ABI the driver de facto establishes. I guess a driver that makes it upstream can establish an device tree ABI We'll re-spin adding the binding document >> This patch series should probably include a >> binding blurb. However, let's not gate this patchset on a complete >> binding for the FMan > > I at least want to see enough of the FMan binding to have confidence > that what we're adding now is correct. I'm not sure what you're looking for. The nodes we're adding are describing a very common CCSR space interface for quite common device blocks >> As you know we don't own the FMan work and the FMan work is... not ready >> for upstreaming. > > I'm not asking for a driver, just a binding that describes hardware. Is > there any reason why the fman node needs to be anywhere near as > complicated as it is in the SDK, if we're limiting it to actual hardware > description? Is this a trick question? :-) Of course it doesn't need to be more complicated than actual hardware. But, to repeat myself, said description is not... ready and I don't know when it will be. Somebody else owns pushing the bulk of FMan upstream and I'd rather not step on their turf quite like this > Do we really need to have nodes for all the sub-blocks? Definitely no, and internally I'm pushing to clean that up. However, you surely remember we've been pushing from the early days of P4080 and it's been, to put it optimistically, slow >> In an attempt to make some sort of progress we've >> decided to upstream the pieces that are less controversial and MDIO is >> an obvious candidate >> >>>> +fman@400000 { >>>> + mdio0: mdio@e1120 { >>>> + #address-cells = <1>; >>>> + #size-cells = <0>; >>>> + compatible = "fsl,fman-mdio"; >>>> + reg = <0xe1120 0xee0>; >>>> + }; >>>> +}; >>> >>> What is the difference between "fsl,fman-mdio" and "fsl,fman-xmdio"? I >>> don't see the latter on the list of compatibles in patch 3/6. >> >> 'fsl,fman-mdio' is the 1 Gb/s MDIO (Clause 22 only). 'fsl,fman-xmdio' is >> the 10 Gb/s MDIO (Clause 45 only). We can respin this patch wi >> > > "respin this patch wi..."? Not sure where the end of that sentence went. I meant we'll re-spin with a binding for the 10 Gb/s MDIO block >> I believe 'fsl,fman-mdio' (and others on that list) was added >> gratuitously as the FMan MDIO is completely compatible with the >> eTSEC/gianfar MDIO driver, but we can deal with that later > > It's still good to identify the specific device, even if it's believed > to be 100% compatible. You suggesting we create new compatibles for every instance/integration of a hardware block even though is identical with an earlier hardware integration? Well, I guess that's been done that and now we have about 8 different compatibles that convey no real difference at all > Plus, IIRC there's been enough badness in the > eTSEC MDIO binding that it'd be good to steer clear of it. Hmm... I guess we can leave things as they are. I wasn't going to touch this just now anyway >>> Within each category, is the exact fman version discoverable from the >>> mdio registers? >> >> No, but that's irrelevant as that's not the difference between the two >> compatibles > > It's relevant because it means the compatible string should have a block > version number in it, or at least some other way in the MDIO node to > indicate the block version. The 1 Gb/s MDIO block doesn't track a version of its own and from a programming interface perspective it has no visible difference since eTSEC. The 10 Gb/s MDIO doesn't track a version of its own either and across the existing FMan versions is identical from a programming interface perspective I guess we can append a 'v1.0' to the MDIO compatible(s). However, given the SDK we'll have to support the compatibles the (already upstream) drivers support. Dealing with all that legacy is going to be so tedious >>>> +fman@500000 { >>>> + #address-cells = <1>; >>>> + #size-cells = <1>; >>>> + compatible = "simple-bus"; >>> >>> Why is this simple-bus? >> >> Because that's the translation type for the FMan sub-nodes. > > What do you mean by "translation type"? I mean address translation across buses >> We need it now to get the MDIO nodes probed > > No. "simple-bus" is stating an attribute of the hardware, that the > child nodes represent simple memory-mapped devices that can be used > without special bus knowledge. I don't think that applies here. Yes it does. The FMan sub-nodes are "simple memory-mapped devices that can be used without special bus knowledge". Perhaps you're thinking about the PHY devices on the MDIO bus > You can get the MDIO node probed without misusing simple-bus by adding > the fman node's compatible to the probe list in the kernel code. I think that's gratuitous and it's been done gratuitously in the past for CCSR space (sub-)nodes > This sort of thing is why I want to see what the rest of the fman > binding will look like. > >> and we'll needed later to probe other nodes/devices that will have >> standalone drivers: MAC, MURAM. etc. > > How are they truly standalone? I meant that they have individual drivers and they are not handled by the high-level FMan driver > The exist in service to the greater > entity that is fman. They presumably work together in some fashion. Some blocks can work independently. The MURAM is an example and it seems the existing CPM/QE MURAM code allows it to be used as regular memory. The MDIO block could handle PHY(s) for other MACs in the system. >>>> + /* mdio nodes for fman v3 @ 0x500000 */ >>>> + mdio@fc000 { >>>> + #address-cells = <1>; >>>> + #size-cells = <0>; >>>> + reg = <0xfc000 0x1000>; >>>> + }; >>>> + >>>> + mdio@fd000 { >>>> + #address-cells = <1>; >>>> + #size-cells = <0>; >>>> + reg = <0xfd000 0x1000>; >>>> + }; >>>> +}; >>> >>> Where's the compatible? Why is this file different from all the others? >> >> The FMan v3 MDIO block (supports both Clause 22/45) is compatible with >> the FMan v2 10 Gb/s MDIO (the xgmac-mdio driver). However, the driver >> needs a small clean-up patch (still in internal review) that will get it >> working for FMan v3 MDIO. > > This suggests that it is not 100% backwards compatible. It is. The code is just not everything it should be Cheers, >> With that patch will add the compatible to these nodes. However, we >> need these nodes now for the board level MDIO bus muxing support >> (included in this patchset) > > If you need these nodes now then add the compatible property now. > > -Scott From mboxrd@z Thu Jan 1 00:00:00 1970 From: Emil Medve Subject: Re: [PATCH 4/6] powerpc/corenet: Create the dts components for the DPAA FMan Date: Tue, 6 May 2014 00:54:27 -0500 Message-ID: <53687913.70900@Freescale.com> References: <1397823693-27977-1-git-send-email-Shruti@Freescale.com> <1397823693-27977-4-git-send-email-Shruti@Freescale.com> <1398118262.1694.188.camel__8135.6513932862$1398128944$gmane$org@snotra.buserror.net> <5364BEB3.6000904@Freescale.com> <1399332359.15726.154.camel@snotra.buserror.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1399332359.15726.154.camel@snotra.buserror.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: linuxppc-dev-bounces+glppe-linuxppc-embedded-2=m.gmane.org@lists.ozlabs.org Sender: "Linuxppc-dev" To: Scott Wood Cc: devicetree@vger.kernel.org, Shruti Kanetkar , "linuxppc-dev@lists.ozlabs.org" List-Id: devicetree@vger.kernel.org SGVsbG8gU2NvdHQsCgoKT24gMDUvMDUvMjAxNCAwNjoyNSBQTSwgU2NvdHQgV29vZCB3cm90ZToK PiBPbiBTYXQsIDIwMTQtMDUtMDMgYXQgMDU6MDIgLTA1MDAsIEVtaWwgTWVkdmUgd3JvdGU6Cj4+ IEhlbGxvIFNjb3R0LAo+Pgo+Pgo+PiBPbiAwNC8yMS8yMDE0IDA1OjExIFBNLCBTY290dCBXb29k IHdyb3RlOgo+Pj4gT24gRnJpLCAyMDE0LTA0LTE4IGF0IDA3OjIxIC0wNTAwLCBTaHJ1dGkgS2Fu ZXRrYXIgd3JvdGU6Cj4+Pj4gK2ZtYW5ANDAwMDAwIHsKPj4+PiArCW1kaW9AZjEwMDAgewo+Pj4+ ICsJCSNhZGRyZXNzLWNlbGxzID0gPDE+Owo+Pj4+ICsJCSNzaXplLWNlbGxzID0gPDA+Owo+Pj4+ ICsJCWNvbXBhdGlibGUgPSAiZnNsLGZtYW4teG1kaW8iOwo+Pj4+ICsJCXJlZyA9IDwweGYxMDAw IDB4MTAwMD47Cj4+Pj4gKwl9Owo+Pj4+ICt9Owo+Pj4KPj4+IEknZCBsaWtlIHRvIHNlZSBhIGNv bXBsZXRlIGZtYW4gYmluZGluZyBiZWZvcmUgd2Ugc3RhcnQgYWRkaW5nIHBpZWNlcy4KPj4KPj4g VGhlIGRyaXZlciBmb3IgdGhlIEZNYW4gMTAgR2IvcyBNRElPIGhhcyB1cHN0cmVhbWVkIGEgY291 cGxlIG9mIHllYXJzCj4+IGFnbzogJzlmMzVhNzMgbmV0L2ZzbDogaW50cm9kdWNlIEZyZWVzY2Fs ZSAxMEcgTURJTyBkcml2ZXInLCBncmFudGVkCj4+IHdpdGhvdXQgYSBiaW5kaW5nIHdyaXRldXAu Cj4gCj4gUHVzaGluZyBkcml2ZXIgY29kZSB0aHJvdWdoIHRoZSBuZXRkZXYgdHJlZSBkb2VzIG5v dCBlc3RhYmxpc2ggZGV2aWNlCj4gdHJlZSBBQkkuICBCaW5kaW5nIGRvY3VtZW50cyBhbmQgZHRz IGZpbGVzIGRvLgoKU3VyZSwgaWRlYWxseSBhbmQgZm9ybWFsbHkuIEJ1dCB1cHN0cmVhbWluZyBh IGRyaXZlciByZXByZXNlbnRzLCBpZgpub3RoaW5nIGVsc2UsIGEgc3RhdGVtZW50IG9mIGludGVu dCB0byBvYnNlcnZlIGEgZGV2aWNlIHRyZWUgQUJJLiBWaWEKdGhlIFNESywgRlNMIGN1c3RvbWVy cyBhcmUgdXNpbmcgdGhlIGRldmljZSB0cmVlIEFCSSB0aGUgZHJpdmVyIGRlIGZhY3RvCmVzdGFi bGlzaGVzLiBJIGd1ZXNzIGEgZHJpdmVyIHRoYXQgbWFrZXMgaXQgdXBzdHJlYW0gY2FuIGVzdGFi bGlzaCBhbgpkZXZpY2UgdHJlZSBBQkkKCldlJ2xsIHJlLXNwaW4gYWRkaW5nIHRoZSBiaW5kaW5n IGRvY3VtZW50Cgo+PiBUaGlzIHBhdGNoIHNlcmllcyBzaG91bGQgcHJvYmFibHkgaW5jbHVkZSBh Cj4+IGJpbmRpbmcgYmx1cmIuIEhvd2V2ZXIsIGxldCdzIG5vdCBnYXRlIHRoaXMgcGF0Y2hzZXQg b24gYSBjb21wbGV0ZQo+PiBiaW5kaW5nIGZvciB0aGUgRk1hbgo+IAo+IEkgYXQgbGVhc3Qgd2Fu dCB0byBzZWUgZW5vdWdoIG9mIHRoZSBGTWFuIGJpbmRpbmcgdG8gaGF2ZSBjb25maWRlbmNlCj4g dGhhdCB3aGF0IHdlJ3JlIGFkZGluZyBub3cgaXMgY29ycmVjdC4KCkknbSBub3Qgc3VyZSB3aGF0 IHlvdSdyZSBsb29raW5nIGZvci4gVGhlIG5vZGVzIHdlJ3JlIGFkZGluZyBhcmUKZGVzY3JpYmlu ZyBhIHZlcnkgY29tbW9uIENDU1Igc3BhY2UgaW50ZXJmYWNlIGZvciBxdWl0ZSBjb21tb24gZGV2 aWNlIGJsb2NrcwoKPj4gQXMgeW91IGtub3cgd2UgZG9uJ3Qgb3duIHRoZSBGTWFuIHdvcmsgYW5k IHRoZSBGTWFuIHdvcmsgaXMuLi4gbm90IHJlYWR5Cj4+IGZvciB1cHN0cmVhbWluZy4KPiAKPiBJ J20gbm90IGFza2luZyBmb3IgYSBkcml2ZXIsIGp1c3QgYSBiaW5kaW5nIHRoYXQgZGVzY3JpYmVz IGhhcmR3YXJlLiAgSXMKPiB0aGVyZSBhbnkgcmVhc29uIHdoeSB0aGUgZm1hbiBub2RlIG5lZWRz IHRvIGJlIGFueXdoZXJlIG5lYXIgYXMKPiBjb21wbGljYXRlZCBhcyBpdCBpcyBpbiB0aGUgU0RL LCBpZiB3ZSdyZSBsaW1pdGluZyBpdCB0byBhY3R1YWwgaGFyZHdhcmUKPiBkZXNjcmlwdGlvbj8K CklzIHRoaXMgYSB0cmljayBxdWVzdGlvbj8gOi0pIE9mIGNvdXJzZSBpdCBkb2Vzbid0IG5lZWQg dG8gYmUgbW9yZQpjb21wbGljYXRlZCB0aGFuIGFjdHVhbCBoYXJkd2FyZS4gQnV0LCB0byByZXBl YXQgbXlzZWxmLCBzYWlkCmRlc2NyaXB0aW9uIGlzIG5vdC4uLiByZWFkeSBhbmQgSSBkb24ndCBr bm93IHdoZW4gaXQgd2lsbCBiZS4gU29tZWJvZHkKZWxzZSBvd25zIHB1c2hpbmcgdGhlIGJ1bGsg b2YgRk1hbiB1cHN0cmVhbSBhbmQgSSdkIHJhdGhlciBub3Qgc3RlcCBvbgp0aGVpciB0dXJmIHF1 aXRlIGxpa2UgdGhpcwoKPiBEbyB3ZSByZWFsbHkgbmVlZCB0byBoYXZlIG5vZGVzIGZvciBhbGwg dGhlIHN1Yi1ibG9ja3M/CgpEZWZpbml0ZWx5IG5vLCBhbmQgaW50ZXJuYWxseSBJJ20gcHVzaGlu ZyB0byBjbGVhbiB0aGF0IHVwLiBIb3dldmVyLCB5b3UKc3VyZWx5IHJlbWVtYmVyIHdlJ3ZlIGJl ZW4gcHVzaGluZyBmcm9tIHRoZSBlYXJseSBkYXlzIG9mIFA0MDgwIGFuZCBpdCdzCmJlZW4sIHRv IHB1dCBpdCBvcHRpbWlzdGljYWxseSwgc2xvdwoKPj4gSW4gYW4gYXR0ZW1wdCB0byBtYWtlIHNv bWUgc29ydCBvZiBwcm9ncmVzcyB3ZSd2ZQo+PiBkZWNpZGVkIHRvIHVwc3RyZWFtIHRoZSBwaWVj ZXMgdGhhdCBhcmUgbGVzcyBjb250cm92ZXJzaWFsIGFuZCBNRElPIGlzCj4+IGFuIG9idmlvdXMg Y2FuZGlkYXRlCj4+Cj4+Pj4gK2ZtYW5ANDAwMDAwIHsKPj4+PiArCW1kaW8wOiBtZGlvQGUxMTIw IHsKPj4+PiArCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKPj4+PiArCQkjc2l6ZS1jZWxscyA9IDww PjsKPj4+PiArCQljb21wYXRpYmxlID0gImZzbCxmbWFuLW1kaW8iOwo+Pj4+ICsJCXJlZyA9IDww eGUxMTIwIDB4ZWUwPjsKPj4+PiArCX07Cj4+Pj4gK307Cj4+Pgo+Pj4gV2hhdCBpcyB0aGUgZGlm ZmVyZW5jZSBiZXR3ZWVuICJmc2wsZm1hbi1tZGlvIiBhbmQgImZzbCxmbWFuLXhtZGlvIj8gIEkK Pj4+IGRvbid0IHNlZSB0aGUgbGF0dGVyIG9uIHRoZSBsaXN0IG9mIGNvbXBhdGlibGVzIGluIHBh dGNoIDMvNi4KPj4KPj4gJ2ZzbCxmbWFuLW1kaW8nIGlzIHRoZSAxIEdiL3MgTURJTyAoQ2xhdXNl IDIyIG9ubHkpLiAnZnNsLGZtYW4teG1kaW8nIGlzCj4+IHRoZSAxMCBHYi9zIE1ESU8gKENsYXVz ZSA0NSBvbmx5KS4gV2UgY2FuIHJlc3BpbiB0aGlzIHBhdGNoIHdpCj4+Cj4gCj4gInJlc3BpbiB0 aGlzIHBhdGNoIHdpLi4uIj8KCk5vdCBzdXJlIHdoZXJlIHRoZSBlbmQgb2YgdGhhdCBzZW50ZW5j ZSB3ZW50LiBJIG1lYW50IHdlJ2xsIHJlLXNwaW4gd2l0aAphIGJpbmRpbmcgZm9yIHRoZSAxMCBH Yi9zIE1ESU8gYmxvY2sKCj4+IEkgYmVsaWV2ZSAnZnNsLGZtYW4tbWRpbycgKGFuZCBvdGhlcnMg b24gdGhhdCBsaXN0KSB3YXMgYWRkZWQKPj4gZ3JhdHVpdG91c2x5IGFzIHRoZSBGTWFuIE1ESU8g aXMgY29tcGxldGVseSBjb21wYXRpYmxlIHdpdGggdGhlCj4+IGVUU0VDL2dpYW5mYXIgTURJTyBk cml2ZXIsIGJ1dCB3ZSBjYW4gZGVhbCB3aXRoIHRoYXQgbGF0ZXIKPiAKPiBJdCdzIHN0aWxsIGdv b2QgdG8gaWRlbnRpZnkgdGhlIHNwZWNpZmljIGRldmljZSwgZXZlbiBpZiBpdCdzIGJlbGlldmVk Cj4gdG8gYmUgMTAwJSBjb21wYXRpYmxlLgoKWW91IHN1Z2dlc3Rpbmcgd2UgY3JlYXRlIG5ldyBj b21wYXRpYmxlcyBmb3IgZXZlcnkgaW5zdGFuY2UvaW50ZWdyYXRpb24Kb2YgYSBoYXJkd2FyZSBi bG9jayBldmVuIHRob3VnaCBpcyBpZGVudGljYWwgd2l0aCBhbiBlYXJsaWVyIGhhcmR3YXJlCmlu dGVncmF0aW9uPyBXZWxsLCBJIGd1ZXNzIHRoYXQncyBiZWVuIGRvbmUgdGhhdCBhbmQgbm93IHdl IGhhdmUgYWJvdXQgOApkaWZmZXJlbnQgY29tcGF0aWJsZXMgdGhhdCBjb252ZXkgbm8gcmVhbCBk aWZmZXJlbmNlIGF0IGFsbAoKPiBQbHVzLCBJSVJDIHRoZXJlJ3MgYmVlbiBlbm91Z2ggYmFkbmVz cyBpbiB0aGUKPiBlVFNFQyBNRElPIGJpbmRpbmcgdGhhdCBpdCdkIGJlIGdvb2QgdG8gc3RlZXIg Y2xlYXIgb2YgaXQuCgpIbW0uLi4gSSBndWVzcyB3ZSBjYW4gbGVhdmUgdGhpbmdzIGFzIHRoZXkg YXJlLiBJIHdhc24ndCBnb2luZyB0byB0b3VjaAp0aGlzIGp1c3Qgbm93IGFueXdheQoKPj4+IFdp dGhpbiBlYWNoIGNhdGVnb3J5LCBpcyB0aGUgZXhhY3QgZm1hbiB2ZXJzaW9uIGRpc2NvdmVyYWJs ZSBmcm9tIHRoZQo+Pj4gbWRpbyByZWdpc3RlcnM/Cj4+Cj4+IE5vLCBidXQgdGhhdCdzIGlycmVs ZXZhbnQgYXMgdGhhdCdzIG5vdCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28KPj4gY29t cGF0aWJsZXMKPiAKPiBJdCdzIHJlbGV2YW50IGJlY2F1c2UgaXQgbWVhbnMgdGhlIGNvbXBhdGli bGUgc3RyaW5nIHNob3VsZCBoYXZlIGEgYmxvY2sKPiB2ZXJzaW9uIG51bWJlciBpbiBpdCwgb3Ig YXQgbGVhc3Qgc29tZSBvdGhlciB3YXkgaW4gdGhlIE1ESU8gbm9kZSB0bwo+IGluZGljYXRlIHRo ZSBibG9jayB2ZXJzaW9uLgoKVGhlIDEgR2IvcyBNRElPIGJsb2NrIGRvZXNuJ3QgdHJhY2sgYSB2 ZXJzaW9uIG9mIGl0cyBvd24gYW5kIGZyb20gYQpwcm9ncmFtbWluZyBpbnRlcmZhY2UgcGVyc3Bl Y3RpdmUgaXQgaGFzIG5vIHZpc2libGUgZGlmZmVyZW5jZSBzaW5jZQplVFNFQy4gVGhlIDEwIEdi L3MgTURJTyBkb2Vzbid0IHRyYWNrIGEgdmVyc2lvbiBvZiBpdHMgb3duIGVpdGhlciBhbmQKYWNy b3NzIHRoZSBleGlzdGluZyBGTWFuIHZlcnNpb25zIGlzIGlkZW50aWNhbCBmcm9tIGEgcHJvZ3Jh bW1pbmcKaW50ZXJmYWNlIHBlcnNwZWN0aXZlCgpJIGd1ZXNzIHdlIGNhbiBhcHBlbmQgYSAndjEu MCcgdG8gdGhlIE1ESU8gY29tcGF0aWJsZShzKS4gSG93ZXZlciwgZ2l2ZW4KdGhlIFNESyB3ZSds bCBoYXZlIHRvIHN1cHBvcnQgdGhlIGNvbXBhdGlibGVzIHRoZSAoYWxyZWFkeSB1cHN0cmVhbSkK ZHJpdmVycyBzdXBwb3J0LiBEZWFsaW5nIHdpdGggYWxsIHRoYXQgbGVnYWN5IGlzIGdvaW5nIHRv IGJlIHNvIHRlZGlvdXMKCj4+Pj4gK2ZtYW5ANTAwMDAwIHsKPj4+PiArCSNhZGRyZXNzLWNlbGxz ID0gPDE+Owo+Pj4+ICsJI3NpemUtY2VsbHMgPSA8MT47Cj4+Pj4gKwljb21wYXRpYmxlID0gInNp bXBsZS1idXMiOwo+Pj4KPj4+IFdoeSBpcyB0aGlzIHNpbXBsZS1idXM/Cj4+Cj4+IEJlY2F1c2Ug dGhhdCdzIHRoZSB0cmFuc2xhdGlvbiB0eXBlIGZvciB0aGUgRk1hbiBzdWItbm9kZXMuCj4gCj4g V2hhdCBkbyB5b3UgbWVhbiBieSAidHJhbnNsYXRpb24gdHlwZSI/CgpJIG1lYW4gYWRkcmVzcyB0 cmFuc2xhdGlvbiBhY3Jvc3MgYnVzZXMKCj4+IFdlIG5lZWQgaXQgbm93IHRvIGdldCB0aGUgTURJ TyBub2RlcyBwcm9iZWQKPiAKPiBOby4gICJzaW1wbGUtYnVzIiBpcyBzdGF0aW5nIGFuIGF0dHJp YnV0ZSBvZiB0aGUgaGFyZHdhcmUsIHRoYXQgdGhlCj4gY2hpbGQgbm9kZXMgcmVwcmVzZW50IHNp bXBsZSBtZW1vcnktbWFwcGVkIGRldmljZXMgdGhhdCBjYW4gYmUgdXNlZAo+IHdpdGhvdXQgc3Bl Y2lhbCBidXMga25vd2xlZGdlLiAgSSBkb24ndCB0aGluayB0aGF0IGFwcGxpZXMgaGVyZS4KClll cyBpdCBkb2VzLiBUaGUgRk1hbiBzdWItbm9kZXMgYXJlICJzaW1wbGUgbWVtb3J5LW1hcHBlZCBk ZXZpY2VzIHRoYXQKY2FuIGJlIHVzZWQgd2l0aG91dCBzcGVjaWFsIGJ1cyBrbm93bGVkZ2UiLiBQ ZXJoYXBzIHlvdSdyZSB0aGlua2luZwphYm91dCB0aGUgUEhZIGRldmljZXMgb24gdGhlIE1ESU8g YnVzCgo+IFlvdSBjYW4gZ2V0IHRoZSBNRElPIG5vZGUgcHJvYmVkIHdpdGhvdXQgbWlzdXNpbmcg c2ltcGxlLWJ1cyBieSBhZGRpbmcKPiB0aGUgZm1hbiBub2RlJ3MgY29tcGF0aWJsZSB0byB0aGUg cHJvYmUgbGlzdCBpbiB0aGUga2VybmVsIGNvZGUuCgpJIHRoaW5rIHRoYXQncyBncmF0dWl0b3Vz IGFuZCBpdCdzIGJlZW4gZG9uZSBncmF0dWl0b3VzbHkgaW4gdGhlIHBhc3QKZm9yIENDU1Igc3Bh Y2UgKHN1Yi0pbm9kZXMKCj4gVGhpcyBzb3J0IG9mIHRoaW5nIGlzIHdoeSBJIHdhbnQgdG8gc2Vl IHdoYXQgdGhlIHJlc3Qgb2YgdGhlIGZtYW4KPiBiaW5kaW5nIHdpbGwgbG9vayBsaWtlLgo+IAo+ PiAgYW5kIHdlJ2xsIG5lZWRlZCBsYXRlciB0byBwcm9iZSBvdGhlciBub2Rlcy9kZXZpY2VzIHRo YXQgd2lsbCBoYXZlCj4+IHN0YW5kYWxvbmUgZHJpdmVyczogTUFDLCBNVVJBTS4gZXRjLiAKPiAK PiBIb3cgYXJlIHRoZXkgdHJ1bHkgc3RhbmRhbG9uZT8KCkkgbWVhbnQgdGhhdCB0aGV5IGhhdmUg aW5kaXZpZHVhbCBkcml2ZXJzIGFuZCB0aGV5IGFyZSBub3QgaGFuZGxlZCBieQp0aGUgaGlnaC1s ZXZlbCBGTWFuIGRyaXZlcgoKPiBUaGUgZXhpc3QgaW4gc2VydmljZSB0byB0aGUgZ3JlYXRlcgo+ IGVudGl0eSB0aGF0IGlzIGZtYW4uICBUaGV5IHByZXN1bWFibHkgd29yayB0b2dldGhlciBpbiBz b21lIGZhc2hpb24uCgpTb21lIGJsb2NrcyBjYW4gd29yayBpbmRlcGVuZGVudGx5LiBUaGUgTVVS QU0gaXMgYW4gZXhhbXBsZSBhbmQgaXQgc2VlbXMKdGhlIGV4aXN0aW5nIENQTS9RRSBNVVJBTSBj b2RlIGFsbG93cyBpdCB0byBiZSB1c2VkIGFzIHJlZ3VsYXIgbWVtb3J5LgpUaGUgTURJTyBibG9j ayBjb3VsZCBoYW5kbGUgUEhZKHMpIGZvciBvdGhlciBNQUNzIGluIHRoZSBzeXN0ZW0uCgo+Pj4+ ICsJLyogbWRpbyBub2RlcyBmb3IgZm1hbiB2MyBAIDB4NTAwMDAwICovCj4+Pj4gKwltZGlvQGZj MDAwIHsKPj4+PiArCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKPj4+PiArCQkjc2l6ZS1jZWxscyA9 IDwwPjsKPj4+PiArCQlyZWcgPSA8MHhmYzAwMCAweDEwMDA+Owo+Pj4+ICsJfTsKPj4+PiArCj4+ Pj4gKwltZGlvQGZkMDAwIHsKPj4+PiArCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKPj4+PiArCQkj c2l6ZS1jZWxscyA9IDwwPjsKPj4+PiArCQlyZWcgPSA8MHhmZDAwMCAweDEwMDA+Owo+Pj4+ICsJ fTsKPj4+PiArfTsKPj4+Cj4+PiBXaGVyZSdzIHRoZSBjb21wYXRpYmxlPyAgV2h5IGlzIHRoaXMg ZmlsZSBkaWZmZXJlbnQgZnJvbSBhbGwgdGhlIG90aGVycz8KPj4KPj4gVGhlIEZNYW4gdjMgTURJ TyBibG9jayAoc3VwcG9ydHMgYm90aCBDbGF1c2UgMjIvNDUpIGlzIGNvbXBhdGlibGUgd2l0aAo+ PiB0aGUgRk1hbiB2MiAxMCBHYi9zIE1ESU8gKHRoZSB4Z21hYy1tZGlvIGRyaXZlcikuIEhvd2V2 ZXIsIHRoZSBkcml2ZXIKPj4gbmVlZHMgYSBzbWFsbCBjbGVhbi11cCBwYXRjaCAoc3RpbGwgaW4g aW50ZXJuYWwgcmV2aWV3KSB0aGF0IHdpbGwgZ2V0IGl0Cj4+IHdvcmtpbmcgZm9yIEZNYW4gdjMg TURJTy4KPiAKPiBUaGlzIHN1Z2dlc3RzIHRoYXQgaXQgaXMgbm90IDEwMCUgYmFja3dhcmRzIGNv bXBhdGlibGUuCgpJdCBpcy4gVGhlIGNvZGUgaXMganVzdCBub3QgZXZlcnl0aGluZyBpdCBzaG91 bGQgYmUKCgpDaGVlcnMsCgoKPj4gIFdpdGggdGhhdCBwYXRjaCB3aWxsIGFkZCB0aGUgY29tcGF0 aWJsZSB0byB0aGVzZSBub2Rlcy4gSG93ZXZlciwgd2UKPj4gbmVlZCB0aGVzZSBub2RlcyBub3cg Zm9yIHRoZSBib2FyZCBsZXZlbCBNRElPIGJ1cyBtdXhpbmcgc3VwcG9ydAo+PiAoaW5jbHVkZWQg aW4gdGhpcyBwYXRjaHNldCkKPiAKPiBJZiB5b3UgbmVlZCB0aGVzZSBub2RlcyBub3cgdGhlbiBh ZGQgdGhlIGNvbXBhdGlibGUgcHJvcGVydHkgbm93Lgo+IAo+IC1TY290dApfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51eHBwYy1kZXYgbWFpbGluZyBs aXN0CkxpbnV4cHBjLWRldkBsaXN0cy5vemxhYnMub3JnCmh0dHBzOi8vbGlzdHMub3psYWJzLm9y Zy9saXN0aW5mby9saW51eHBwYy1kZXY=