From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ozlabs.org (ozlabs.org [IPv6:2401:3900:2:1::2]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id A85BE1A1773 for ; Thu, 23 Oct 2014 07:07:12 +1100 (AEDT) Received: from na01-bn1-obe.outbound.protection.outlook.com (mail-bn1bn0105.outbound.protection.outlook.com [157.56.110.105]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 32E5E14007F for ; Thu, 23 Oct 2014 07:07:10 +1100 (AEDT) Message-ID: <54480DF8.3070604@Freescale.com> Date: Wed, 22 Oct 2014 15:05:12 -0500 From: Emil Medve MIME-Version: 1.0 To: Mark Rutland Subject: Re: [PATCH 3/4] dt/bindings: Introduce the FSL QorIQ DPAA QMan References: <1413986972-621-1-git-send-email-Emilian.Medve@Freescale.com> <1413986972-621-3-git-send-email-Emilian.Medve@Freescale.com> <20141022143732.GB4010@leverpostej> In-Reply-To: <20141022143732.GB4010@leverpostej> Content-Type: text/plain; charset="windows-1252" Cc: "devicetree@vger.kernel.org" , Pawel Moll , "ijc+devicetree@hellion.org.uk" , "Geoff.Thorpe@freescale.com" , "corbet@lwn.net" , "linux-doc@vger.kernel.org" , "linuxppc-dev@ozlabs.org" , "robh+dt@kernel.org" , "galak@codeaurora.org" , "scottwood@freescale.com" List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Hello Mark, On 10/22/2014 09:37 AM, Mark Rutland wrote: > On Wed, Oct 22, 2014 at 03:09:31PM +0100, Emil Medve wrote: >> The Queue Manager is part of the Data-Path Acceleration Architecture (DPAA). >> QMan supports queuing and QoS scheduling of frames to CPUs, network interfaces >> and DPAA logic modules, maintains packet ordering within flows. Besides >> providing flow-level queuing, is also responsible for congestion management >> functions such as RED/WRED, congestion notifications and tail discards. This >> binding covers the CCSR space programming model >> >> Signed-off-by: Emil Medve >> Change-Id: I3acb223893e42003d6c9dc061db568ec0b10d29b >> --- >> .../devicetree/bindings/powerpc/fsl/qman.txt | 134 +++++++++++++++++++++ >> 1 file changed, 134 insertions(+) >> create mode 100644 Documentation/devicetree/bindings/powerpc/fsl/qman.txt >> >> diff --git a/Documentation/devicetree/bindings/powerpc/fsl/qman.txt b/Documentation/devicetree/bindings/powerpc/fsl/qman.txt >> new file mode 100644 >> index 0000000..b9f288f >> --- /dev/null >> +++ b/Documentation/devicetree/bindings/powerpc/fsl/qman.txt >> @@ -0,0 +1,134 @@ >> +QorIQ DPAA Queue Manager Device Tree Binding >> + >> +Copyright (C) 2008 - 2014 Freescale Semiconductor Inc. >> + >> +CONTENTS >> + >> + - QMan Node >> + - QMan Private Memory Nodes >> + - Example >> + >> +NOTE: The bindings described in this document are preliminary and subject to >> + change > > As with the BMan portal binding, I'm rather uncomfortable with a > preliminary binding. Ditto >> + >> +QMan Node >> + >> +PROPERTIES >> + >> +- compatible >> + Usage: Required >> + Value type: >> + Definition: Must include "fsl,qman" >> + May include "fsl,-qman" >> + >> +- reg >> + Usage: Required >> + Value type: >> + Definition: Registers region within the CCSR address space >> + >> +- fsl,liodn >> + Usage: See pamu.txt >> + Value type: >> + Definition: PAMU property used for static LIODN assignment >> + >> +- fsl,iommu-parent >> + Usage: See pamu.txt >> + Value type: >> + Definition: PAMU property used for dynamic LIODN assignment >> + >> + For additional details about the PAMU/LIODN binding(s) see pamu.txt > > This is not present in the example. Is this always required? Sort of. Initial hardware (and current documentation) programming suggestion was to configure all the PAMU instances the same way regardless of what devices were behind them. Given the PAMU internal caches sizes, this proved suboptimal from a performance perspective so we're trying to discover/describe/use the PAMU topology fsl,liodn is part of the undocumented static LIODN assignment binding that the current PAMU driver uses. If fsl,iommu-parent is present, fsl,liodn can be ignored and the LIODN can be assigned dynamically and/or programmed only in the relevant PAMU instance >> + >> +- clocks >> + Usage: See clock-bindings.txt and qoriq-clock.txt >> + Value type: >> + Definition: Half of the platform clock >> + > > I don't understand the description here. What is the clock from the PoV > of the QMan? Which input line on the QMan is this clock attached to? > > Is there only one clock input? Or jsut one that you need to manage at > the moment? As part of the programming model (QoS features specifically) QMan needs to know its clock speed. Prior to the existence of the clock-bindings.txt, a "static" clock-frequency property was/is used convey such information. Using clock-binding.txt to describe the clocking hierarchy in the SoC makes it easier with DFS, power management, etc. The platform clock/PLL binding is part of qoriq-clock.txt > You also seem to have an interrupt in the example. How many do you > expect, and what are their their logical functions? That's the error interrupt and hopefully it never triggers. I didn't add [many] words about it as it's a standard property >> +QMan Private Memory Nodes >> + >> +QMan requires two contiguous range of physical memory used for the backing store >> +for QMan Frame Queue Descriptor and Packed Frame Descriptor Record. This memory >> +is reserved/allocated as a nodes under the /reserved-memory node >> + >> +The QMan FQD memory node must be named "qman-fqd" >> + >> +PROPERTIES >> + >> +- compatible >> + Usage: required >> + Value type: >> + Definition: Must inclide "fsl,qman-fqd" >> + >> +The QMan PFDR memory node must be named "qman-pfdr" >> + >> +PROPERTIES >> + >> +- compatible >> + Usage: required >> + Value type: >> + Definition: Must inclide "fsl,qman-pfdr" >> + >> +The following constraints are relevant to the FQD and PFDR private memory: >> + - The size must be 2^(size + 1), with size = 11..29. That is 4 KiB to >> + 1 GiB >> + - The alignment must be a muliptle of the memory size >> + >> +The size of the FQD and PFDP must be chosen by observing the hardware features >> +configured via the RCW and that are relevant to a specific board (e.g. number of >> +MAC(s) pinned-out, number of offline/host command FMan ports, etc.). The size >> +configured in the DT must reflect the hardware capabilities and not the specific >> +needs of an application >> + >> +If the memory reserved in the device tree proves to be larger then the needs of >> +the application a QMan driver may provide a method to release the extra memory >> +back to the OS > > Driver details should be unimportant to the binding. This sentence can > disappear. I'm trying to discourage reserved-memory nodes to be used to "optimize" the memory allocation/usage. If it comes to it, I can drop this sentence Cheers, > Thanks, > Mark. > >> + >> +For additional details about reserved memory regions see reserved-memory.txt >> + >> +EXAMPLE >> + >> +The example below shows a QMan FQD and a PFDR dynamic allocation memory nodes >> + >> + reserved-memory { >> + #address-cells = <2>; >> + #size-cells = <2>; >> + ranges; >> + >> + qman-fqd { >> + compatible = "fsl,qman-fqd"; >> + alloc-ranges = <0 0 0xf 0xffffffff>; >> + size = <0 0x400000>; >> + alignment = <0 0x400000>; >> + }; >> + qman-pfdr { >> + compatible = "fsl,qman-pfdr"; >> + alloc-ranges = <0 0 0xf 0xffffffff>; >> + size = <0 0x2000000>; >> + alignment = <0 0x2000000>; >> + }; >> + }; >> + >> +The example below shows a (P4080) QMan CCSR-space node >> + >> + clockgen: global-utilities@e1000 { >> + ... >> + sysclk: sysclk { >> + ... >> + }; >> + ... >> + platform-pll: platform-pll@c00 { >> + #clock-cells = <1>; >> + reg = <0xc00 0x4>; >> + compatible = "fsl,qoriq-platform-pll-1.0"; >> + clocks = <&sysclk>; >> + clock-output-names = "platform-pll", "platform-pll-div2"; >> + }; >> + ... >> + }; >> + >> + qman@318000 { >> + compatible = "fsl,qman"; >> + reg = <0x318000 0x1000>; >> + interrupts = <16 2 1 3> >> + fsl,liodn = <0x16>; >> + clocks = <&platform-pll 1>; >> + }; >> -- >> 2.1.2 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Emil Medve Subject: Re: [PATCH 3/4] dt/bindings: Introduce the FSL QorIQ DPAA QMan Date: Wed, 22 Oct 2014 15:05:12 -0500 Message-ID: <54480DF8.3070604@Freescale.com> References: <1413986972-621-1-git-send-email-Emilian.Medve@Freescale.com> <1413986972-621-3-git-send-email-Emilian.Medve@Freescale.com> <20141022143732.GB4010@leverpostej> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20141022143732.GB4010@leverpostej> 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: Mark Rutland Cc: "devicetree@vger.kernel.org" , Pawel Moll , "ijc+devicetree@hellion.org.uk" , "Geoff.Thorpe@freescale.com" , "corbet@lwn.net" , "linux-doc@vger.kernel.org" , "linuxppc-dev@ozlabs.org" , "robh+dt@kernel.org" , "galak@codeaurora.org" , "scottwood@freescale.com" List-Id: devicetree@vger.kernel.org SGVsbG8gTWFyaywKCgpPbiAxMC8yMi8yMDE0IDA5OjM3IEFNLCBNYXJrIFJ1dGxhbmQgd3JvdGU6 Cj4gT24gV2VkLCBPY3QgMjIsIDIwMTQgYXQgMDM6MDk6MzFQTSArMDEwMCwgRW1pbCBNZWR2ZSB3 cm90ZToKPj4gVGhlIFF1ZXVlIE1hbmFnZXIgaXMgcGFydCBvZiB0aGUgRGF0YS1QYXRoIEFjY2Vs ZXJhdGlvbiBBcmNoaXRlY3R1cmUgKERQQUEpLgo+PiBRTWFuIHN1cHBvcnRzIHF1ZXVpbmcgYW5k IFFvUyBzY2hlZHVsaW5nIG9mIGZyYW1lcyB0byBDUFVzLCBuZXR3b3JrIGludGVyZmFjZXMKPj4g YW5kIERQQUEgbG9naWMgbW9kdWxlcywgbWFpbnRhaW5zIHBhY2tldCBvcmRlcmluZyB3aXRoaW4g Zmxvd3MuIEJlc2lkZXMKPj4gcHJvdmlkaW5nIGZsb3ctbGV2ZWwgcXVldWluZywgaXMgYWxzbyBy ZXNwb25zaWJsZSBmb3IgY29uZ2VzdGlvbiBtYW5hZ2VtZW50Cj4+IGZ1bmN0aW9ucyBzdWNoIGFz IFJFRC9XUkVELCBjb25nZXN0aW9uIG5vdGlmaWNhdGlvbnMgYW5kIHRhaWwgZGlzY2FyZHMuIFRo aXMKPj4gYmluZGluZyBjb3ZlcnMgdGhlIENDU1Igc3BhY2UgcHJvZ3JhbW1pbmcgbW9kZWwKPj4K Pj4gU2lnbmVkLW9mZi1ieTogRW1pbCBNZWR2ZSA8RW1pbGlhbi5NZWR2ZUBGcmVlc2NhbGUuY29t Pgo+PiBDaGFuZ2UtSWQ6IEkzYWNiMjIzODkzZTQyMDAzZDZjOWRjMDYxZGI1NjhlYzBiMTBkMjli Cj4+IC0tLQo+PiAgLi4uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvcW1hbi50eHQg ICAgICAgfCAxMzQgKysrKysrKysrKysrKysrKysrKysrCj4+ICAxIGZpbGUgY2hhbmdlZCwgMTM0 IGluc2VydGlvbnMoKykKPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBEb2N1bWVudGF0aW9uL2Rldmlj ZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvcW1hbi50eHQKPj4KPj4gZGlmZiAtLWdpdCBhL0Rv Y3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9xbWFuLnR4dCBiL0Rv Y3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9xbWFuLnR4dAo+PiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi5iOWYyODhmCj4+IC0tLSAvZGV2 L251bGwKPj4gKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMv ZnNsL3FtYW4udHh0Cj4+IEBAIC0wLDAgKzEsMTM0IEBACj4+ICtRb3JJUSBEUEFBIFF1ZXVlIE1h bmFnZXIgRGV2aWNlIFRyZWUgQmluZGluZwo+PiArCj4+ICtDb3B5cmlnaHQgKEMpIDIwMDggLSAy MDE0IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KPj4gKwo+PiArQ09OVEVOVFMKPj4gKwo+ PiArCS0gUU1hbiBOb2RlCj4+ICsJLSBRTWFuIFByaXZhdGUgTWVtb3J5IE5vZGVzCj4+ICsJLSBF eGFtcGxlCj4+ICsKPj4gK05PVEU6CVRoZSBiaW5kaW5ncyBkZXNjcmliZWQgaW4gdGhpcyBkb2N1 bWVudCBhcmUgcHJlbGltaW5hcnkgYW5kIHN1YmplY3QgdG8KPj4gKwljaGFuZ2UKPiAKPiBBcyB3 aXRoIHRoZSBCTWFuIHBvcnRhbCBiaW5kaW5nLCBJJ20gcmF0aGVyIHVuY29tZm9ydGFibGUgd2l0 aCBhCj4gcHJlbGltaW5hcnkgYmluZGluZy4KCkRpdHRvCgo+PiArCj4+ICtRTWFuIE5vZGUKPj4g Kwo+PiArUFJPUEVSVElFUwo+PiArCj4+ICstIGNvbXBhdGlibGUKPj4gKwlVc2FnZToJCVJlcXVp cmVkCj4+ICsJVmFsdWUgdHlwZToJPHN0cmluZ2xpc3Q+Cj4+ICsJRGVmaW5pdGlvbjoJTXVzdCBp bmNsdWRlICJmc2wscW1hbiIKPj4gKwkJCU1heSBpbmNsdWRlICJmc2wsPFNvQz4tcW1hbiIKPj4g Kwo+PiArLSByZWcKPj4gKwlVc2FnZToJCVJlcXVpcmVkCj4+ICsJVmFsdWUgdHlwZToJPHByb3At ZW5jb2RlZC1hcnJheT4KPj4gKwlEZWZpbml0aW9uOglSZWdpc3RlcnMgcmVnaW9uIHdpdGhpbiB0 aGUgQ0NTUiBhZGRyZXNzIHNwYWNlCj4+ICsKPj4gKy0gZnNsLGxpb2RuCj4+ICsJVXNhZ2U6CQlT ZWUgcGFtdS50eHQKPj4gKwlWYWx1ZSB0eXBlOgk8cHJvcC1lbmNvZGVkLWFycmF5Pgo+PiArCURl ZmluaXRpb246CVBBTVUgcHJvcGVydHkgdXNlZCBmb3Igc3RhdGljIExJT0ROIGFzc2lnbm1lbnQK Pj4gKwo+PiArLSBmc2wsaW9tbXUtcGFyZW50Cj4+ICsJVXNhZ2U6CQlTZWUgcGFtdS50eHQKPj4g KwlWYWx1ZSB0eXBlOgk8cGhhbmRsZT4KPj4gKwlEZWZpbml0aW9uOglQQU1VIHByb3BlcnR5IHVz ZWQgZm9yIGR5bmFtaWMgTElPRE4gYXNzaWdubWVudAo+PiArCj4+ICsJRm9yIGFkZGl0aW9uYWwg ZGV0YWlscyBhYm91dCB0aGUgUEFNVS9MSU9ETiBiaW5kaW5nKHMpIHNlZSBwYW11LnR4dAo+IAo+ IFRoaXMgaXMgbm90IHByZXNlbnQgaW4gdGhlIGV4YW1wbGUuIElzIHRoaXMgYWx3YXlzIHJlcXVp cmVkPwoKU29ydCBvZi4gSW5pdGlhbCBoYXJkd2FyZSAoYW5kIGN1cnJlbnQgZG9jdW1lbnRhdGlv bikgcHJvZ3JhbW1pbmcKc3VnZ2VzdGlvbiB3YXMgdG8gY29uZmlndXJlIGFsbCB0aGUgUEFNVSBp bnN0YW5jZXMgdGhlIHNhbWUgd2F5CnJlZ2FyZGxlc3Mgb2Ygd2hhdCBkZXZpY2VzIHdlcmUgYmVo aW5kIHRoZW0uIEdpdmVuIHRoZSBQQU1VIGludGVybmFsCmNhY2hlcyBzaXplcywgdGhpcyBwcm92 ZWQgc3Vib3B0aW1hbCBmcm9tIGEgcGVyZm9ybWFuY2UgcGVyc3BlY3RpdmUgc28Kd2UncmUgdHJ5 aW5nIHRvIGRpc2NvdmVyL2Rlc2NyaWJlL3VzZSB0aGUgUEFNVSB0b3BvbG9neQoKZnNsLGxpb2Ru IGlzIHBhcnQgb2YgdGhlIHVuZG9jdW1lbnRlZCBzdGF0aWMgTElPRE4gYXNzaWdubWVudCBiaW5k aW5nCnRoYXQgdGhlIGN1cnJlbnQgUEFNVSBkcml2ZXIgdXNlcy4gSWYgZnNsLGlvbW11LXBhcmVu dCBpcyBwcmVzZW50LApmc2wsbGlvZG4gY2FuIGJlIGlnbm9yZWQgYW5kIHRoZSBMSU9ETiBjYW4g YmUgYXNzaWduZWQgZHluYW1pY2FsbHkKYW5kL29yIHByb2dyYW1tZWQgb25seSBpbiB0aGUgcmVs ZXZhbnQgUEFNVSBpbnN0YW5jZQoKPj4gKwo+PiArLSBjbG9ja3MKPj4gKwlVc2FnZToJCVNlZSBj bG9jay1iaW5kaW5ncy50eHQgYW5kIHFvcmlxLWNsb2NrLnR4dAo+PiArCVZhbHVlIHR5cGU6CTxw cm9wLWVuY29kZWQtYXJyYXk+Cj4+ICsJRGVmaW5pdGlvbjoJSGFsZiBvZiB0aGUgcGxhdGZvcm0g Y2xvY2sKPj4gKwo+IAo+IEkgZG9uJ3QgdW5kZXJzdGFuZCB0aGUgZGVzY3JpcHRpb24gaGVyZS4g V2hhdCBpcyB0aGUgY2xvY2sgZnJvbSB0aGUgUG9WCj4gb2YgdGhlIFFNYW4/IFdoaWNoIGlucHV0 IGxpbmUgb24gdGhlIFFNYW4gaXMgdGhpcyBjbG9jayBhdHRhY2hlZCB0bz8KPiAKPiBJcyB0aGVy ZSBvbmx5IG9uZSBjbG9jayBpbnB1dD8gT3IganN1dCBvbmUgdGhhdCB5b3UgbmVlZCB0byBtYW5h Z2UgYXQKPiB0aGUgbW9tZW50PwoKQXMgcGFydCBvZiB0aGUgcHJvZ3JhbW1pbmcgbW9kZWwgKFFv UyBmZWF0dXJlcyBzcGVjaWZpY2FsbHkpIFFNYW4gbmVlZHMKdG8ga25vdyBpdHMgY2xvY2sgc3Bl ZWQuIFByaW9yIHRvIHRoZSBleGlzdGVuY2Ugb2YgdGhlCmNsb2NrLWJpbmRpbmdzLnR4dCwgYSAi c3RhdGljIiBjbG9jay1mcmVxdWVuY3kgcHJvcGVydHkgd2FzL2lzIHVzZWQKY29udmV5IHN1Y2gg aW5mb3JtYXRpb24uIFVzaW5nIGNsb2NrLWJpbmRpbmcudHh0IHRvIGRlc2NyaWJlIHRoZQpjbG9j a2luZyBoaWVyYXJjaHkgaW4gdGhlIFNvQyBtYWtlcyBpdCBlYXNpZXIgd2l0aCBERlMsIHBvd2Vy Cm1hbmFnZW1lbnQsIGV0Yy4KClRoZSBwbGF0Zm9ybSBjbG9jay9QTEwgYmluZGluZyBpcyBwYXJ0 IG9mIHFvcmlxLWNsb2NrLnR4dAoKPiBZb3UgYWxzbyBzZWVtIHRvIGhhdmUgYW4gaW50ZXJydXB0 IGluIHRoZSBleGFtcGxlLiBIb3cgbWFueSBkbyB5b3UKPiBleHBlY3QsIGFuZCB3aGF0IGFyZSB0 aGVpciB0aGVpciBsb2dpY2FsIGZ1bmN0aW9ucz8KClRoYXQncyB0aGUgZXJyb3IgaW50ZXJydXB0 IGFuZCBob3BlZnVsbHkgaXQgbmV2ZXIgdHJpZ2dlcnMuIEkgZGlkbid0IGFkZApbbWFueV0gd29y ZHMgYWJvdXQgaXQgYXMgaXQncyBhIHN0YW5kYXJkIHByb3BlcnR5Cgo+PiArUU1hbiBQcml2YXRl IE1lbW9yeSBOb2Rlcwo+PiArCj4+ICtRTWFuIHJlcXVpcmVzIHR3byBjb250aWd1b3VzIHJhbmdl IG9mIHBoeXNpY2FsIG1lbW9yeSB1c2VkIGZvciB0aGUgYmFja2luZyBzdG9yZQo+PiArZm9yIFFN YW4gRnJhbWUgUXVldWUgRGVzY3JpcHRvciBhbmQgUGFja2VkIEZyYW1lIERlc2NyaXB0b3IgUmVj b3JkLiBUaGlzIG1lbW9yeQo+PiAraXMgcmVzZXJ2ZWQvYWxsb2NhdGVkIGFzIGEgbm9kZXMgdW5k ZXIgdGhlIC9yZXNlcnZlZC1tZW1vcnkgbm9kZQo+PiArCj4+ICtUaGUgUU1hbiBGUUQgbWVtb3J5 IG5vZGUgbXVzdCBiZSBuYW1lZCAicW1hbi1mcWQiCj4+ICsKPj4gK1BST1BFUlRJRVMKPj4gKwo+ PiArLSBjb21wYXRpYmxlCj4+ICsJVXNhZ2U6CQlyZXF1aXJlZAo+PiArCVZhbHVlIHR5cGU6CTxz dHJpbmdsaXN0Pgo+PiArCURlZmluaXRpb246CU11c3QgaW5jbGlkZSAiZnNsLHFtYW4tZnFkIgo+ PiArCj4+ICtUaGUgUU1hbiBQRkRSIG1lbW9yeSBub2RlIG11c3QgYmUgbmFtZWQgInFtYW4tcGZk ciIKPj4gKwo+PiArUFJPUEVSVElFUwo+PiArCj4+ICstIGNvbXBhdGlibGUKPj4gKwlVc2FnZToJ CXJlcXVpcmVkCj4+ICsJVmFsdWUgdHlwZToJPHN0cmluZ2xpc3Q+Cj4+ICsJRGVmaW5pdGlvbjoJ TXVzdCBpbmNsaWRlICJmc2wscW1hbi1wZmRyIgo+PiArCj4+ICtUaGUgZm9sbG93aW5nIGNvbnN0 cmFpbnRzIGFyZSByZWxldmFudCB0byB0aGUgRlFEIGFuZCBQRkRSIHByaXZhdGUgbWVtb3J5Ogo+ PiArCS0gVGhlIHNpemUgbXVzdCBiZSAyXihzaXplICsgMSksIHdpdGggc2l6ZSA9IDExLi4yOS4g VGhhdCBpcyA0IEtpQiB0bwo+PiArCSAgMSBHaUIKPj4gKwktIFRoZSBhbGlnbm1lbnQgbXVzdCBi ZSBhIG11bGlwdGxlIG9mIHRoZSBtZW1vcnkgc2l6ZQo+PiArCj4+ICtUaGUgc2l6ZSBvZiB0aGUg RlFEIGFuZCBQRkRQIG11c3QgYmUgY2hvc2VuIGJ5IG9ic2VydmluZyB0aGUgaGFyZHdhcmUgZmVh dHVyZXMKPj4gK2NvbmZpZ3VyZWQgdmlhIHRoZSBSQ1cgYW5kIHRoYXQgYXJlIHJlbGV2YW50IHRv IGEgc3BlY2lmaWMgYm9hcmQgKGUuZy4gbnVtYmVyIG9mCj4+ICtNQUMocykgcGlubmVkLW91dCwg bnVtYmVyIG9mIG9mZmxpbmUvaG9zdCBjb21tYW5kIEZNYW4gcG9ydHMsIGV0Yy4pLiBUaGUgc2l6 ZQo+PiArY29uZmlndXJlZCBpbiB0aGUgRFQgbXVzdCByZWZsZWN0IHRoZSBoYXJkd2FyZSBjYXBh YmlsaXRpZXMgYW5kIG5vdCB0aGUgc3BlY2lmaWMKPj4gK25lZWRzIG9mIGFuIGFwcGxpY2F0aW9u Cj4+ICsKPj4gK0lmIHRoZSBtZW1vcnkgcmVzZXJ2ZWQgaW4gdGhlIGRldmljZSB0cmVlIHByb3Zl cyB0byBiZSBsYXJnZXIgdGhlbiB0aGUgbmVlZHMgb2YKPj4gK3RoZSBhcHBsaWNhdGlvbiBhIFFN YW4gZHJpdmVyIG1heSBwcm92aWRlIGEgbWV0aG9kIHRvIHJlbGVhc2UgdGhlIGV4dHJhIG1lbW9y eQo+PiArYmFjayB0byB0aGUgT1MKPiAKPiBEcml2ZXIgZGV0YWlscyBzaG91bGQgYmUgdW5pbXBv cnRhbnQgdG8gdGhlIGJpbmRpbmcuIFRoaXMgc2VudGVuY2UgY2FuCj4gZGlzYXBwZWFyLgoKSSdt IHRyeWluZyB0byBkaXNjb3VyYWdlIHJlc2VydmVkLW1lbW9yeSBub2RlcyB0byBiZSB1c2VkIHRv ICJvcHRpbWl6ZSIKdGhlIG1lbW9yeSBhbGxvY2F0aW9uL3VzYWdlLiBJZiBpdCBjb21lcyB0byBp dCwgSSBjYW4gZHJvcCB0aGlzIHNlbnRlbmNlCgoKQ2hlZXJzLAoKCj4gVGhhbmtzLAo+IE1hcmsu Cj4gCj4+ICsKPj4gK0ZvciBhZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQgcmVzZXJ2ZWQgbWVtb3J5 IHJlZ2lvbnMgc2VlIHJlc2VydmVkLW1lbW9yeS50eHQKPj4gKwo+PiArRVhBTVBMRQo+PiArCj4+ ICtUaGUgZXhhbXBsZSBiZWxvdyBzaG93cyBhIFFNYW4gRlFEIGFuZCBhIFBGRFIgZHluYW1pYyBh bGxvY2F0aW9uIG1lbW9yeSBub2Rlcwo+PiArCj4+ICsJcmVzZXJ2ZWQtbWVtb3J5IHsKPj4gKwkJ I2FkZHJlc3MtY2VsbHMgPSA8Mj47Cj4+ICsJCSNzaXplLWNlbGxzID0gPDI+Owo+PiArCQlyYW5n ZXM7Cj4+ICsKPj4gKwkJcW1hbi1mcWQgewo+PiArCQkJY29tcGF0aWJsZSA9ICJmc2wscW1hbi1m cWQiOwo+PiArCQkJYWxsb2MtcmFuZ2VzID0gPDAgMCAweGYgMHhmZmZmZmZmZj47Cj4+ICsJCQlz aXplID0gPDAgMHg0MDAwMDA+Owo+PiArCQkJYWxpZ25tZW50ID0gPDAgMHg0MDAwMDA+Owo+PiAr CQl9Owo+PiArCQlxbWFuLXBmZHIgewo+PiArCQkJY29tcGF0aWJsZSA9ICJmc2wscW1hbi1wZmRy IjsKPj4gKwkJCWFsbG9jLXJhbmdlcyA9IDwwIDAgMHhmIDB4ZmZmZmZmZmY+Owo+PiArCQkJc2l6 ZSA9IDwwIDB4MjAwMDAwMD47Cj4+ICsJCQlhbGlnbm1lbnQgPSA8MCAweDIwMDAwMDA+Owo+PiAr CQl9Owo+PiArCX07Cj4+ICsKPj4gK1RoZSBleGFtcGxlIGJlbG93IHNob3dzIGEgKFA0MDgwKSBR TWFuIENDU1Itc3BhY2Ugbm9kZQo+PiArCj4+ICsJY2xvY2tnZW46IGdsb2JhbC11dGlsaXRpZXNA ZTEwMDAgewo+PiArCQkuLi4KPj4gKwkJc3lzY2xrOiBzeXNjbGsgewo+PiArCQkJLi4uCj4+ICsJ CX07Cj4+ICsJCS4uLgo+PiArCQlwbGF0Zm9ybS1wbGw6IHBsYXRmb3JtLXBsbEBjMDAgewo+PiAr CQkJI2Nsb2NrLWNlbGxzID0gPDE+Owo+PiArCQkJcmVnID0gPDB4YzAwIDB4ND47Cj4+ICsJCQlj b21wYXRpYmxlID0gImZzbCxxb3JpcS1wbGF0Zm9ybS1wbGwtMS4wIjsKPj4gKwkJCWNsb2NrcyA9 IDwmc3lzY2xrPjsKPj4gKwkJCWNsb2NrLW91dHB1dC1uYW1lcyA9ICJwbGF0Zm9ybS1wbGwiLCAi cGxhdGZvcm0tcGxsLWRpdjIiOwo+PiArCQl9Owo+PiArCQkuLi4KPj4gKwl9Owo+PiArCj4+ICsJ cW1hbkAzMTgwMDAgewo+PiArCQljb21wYXRpYmxlID0gImZzbCxxbWFuIjsKPj4gKwkJcmVnID0g PDB4MzE4MDAwIDB4MTAwMD47Cj4+ICsJCWludGVycnVwdHMgPSA8MTYgMiAxIDM+Cj4+ICsJCWZz bCxsaW9kbiA9IDwweDE2PjsKPj4gKwkJY2xvY2tzID0gPCZwbGF0Zm9ybS1wbGwgMT47Cj4+ICsJ fTsKPj4gLS0gCj4+IDIuMS4yCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCkxpbnV4cHBjLWRldiBtYWlsaW5nIGxpc3QKTGludXhwcGMtZGV2QGxpc3RzLm96 bGFicy5vcmcKaHR0cHM6Ly9saXN0cy5vemxhYnMub3JnL2xpc3RpbmZvL2xpbnV4cHBjLWRldg==