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 7C3D327291F; Tue, 11 Feb 2025 23:34:32 +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=1739316872; cv=none; b=a010MCHog9G7EruZzOtQgswm38m/aM3YtRPTUsVyr0iLsH8UZrOKQLpoBQVx6RFt0eKDGXdJZSm10kq0KH1ooF3mIJjgdS9/9ZsVRiIiPXBXQhUax/kSj4kXwVMDXx+pvy13TRqufl/mJadmPQuISK982qxSG8X4uczATOCs73U= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739316872; c=relaxed/simple; bh=nDtnBAQ+E7kXVtn1qwbaoJMQmIELR47EumTe1bf8h8w=; h=Date:From:To:Cc:Subject:Message-ID:MIME-Version:Content-Type: Content-Disposition:In-Reply-To; b=nDae/q3xFZyflK4YdzjfQn4cxhzp6+s8KZpYUG4fHXMzAULNwKCMqsLvoXV4t2GtoqbeP5J1RgDGMxsvKqID/BckHOXnpSfLKPp0wUi48aHNsoor3GpXlgt+fK0zCn4+ZhFCizWu5LZUT6IqV3yDjvCPD2zdBRY0Y5e0JH8uFmo= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=k2ICWTO9; 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="k2ICWTO9" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 943EFC4CEDD; Tue, 11 Feb 2025 23:34:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1739316871; bh=nDtnBAQ+E7kXVtn1qwbaoJMQmIELR47EumTe1bf8h8w=; h=Date:From:To:Cc:Subject:In-Reply-To:From; b=k2ICWTO9rwBqtNelUW9bhvvXeUcB0Q6JaiScS57tKkU2lEyzmcoidNcao1OWkKh7V hXkF6OH/GjwOaQm8WD4nxLZqxVfUtwk1JfLc2v7DcdV++l8vK/o+LeFuw6YB1S3oo3 qPGAP5VDEsLuC/SkVipZrsMeCyPf+c/UMGB+pS/QcSBok5xl642Hgk3yHgTq/+hnhE ilq101pYZaDwtMzO+XmFrGaCFIz8eqLOLUMI9DdsMpJnKhLiX+aYX865NEE+wruw3r gwmqOeg7To+tJ1Z6fSLJgPfA0mj/C5s6QRFulxkOfiRFTrGdD+HfnIE4/MLB9iQkHJ O+JpnRG7Z9MxA== Date: Tue, 11 Feb 2025 17:34:30 -0600 From: Bjorn Helgaas To: Chen Wang Cc: Chen Wang , kw@linux.com, u.kleine-koenig@baylibre.com, aou@eecs.berkeley.edu, arnd@arndb.de, bhelgaas@google.com, conor+dt@kernel.org, guoren@kernel.org, inochiama@outlook.com, krzk+dt@kernel.org, lee@kernel.org, lpieralisi@kernel.org, manivannan.sadhasivam@linaro.org, palmer@dabbelt.com, paul.walmsley@sifive.com, pbrobinson@gmail.com, robh@kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-riscv@lists.infradead.org, chao.wei@sophgo.com, xiaoguang.xing@sophgo.com, fengchun.li@sophgo.com Subject: Re: [PATCH v3 1/5] dt-bindings: pci: Add Sophgo SG2042 PCIe host Message-ID: <20250211233430.GA55431@bhelgaas> Precedence: bulk X-Mailing-List: linux-pci@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 Sun, Jan 26, 2025 at 10:27:27AM +0800, Chen Wang wrote: > On 2025/1/23 6:21, Bjorn Helgaas wrote: > > On Wed, Jan 15, 2025 at 03:06:37PM +0800, Chen Wang wrote: > > > From: Chen Wang > > > > > > Add binding for Sophgo SG2042 PCIe host controller. > > > + sophgo,link-id: > > > + $ref: /schemas/types.yaml#/definitions/uint32 > > > + description: | > > > + SG2042 uses Cadence IP, every IP is composed of 2 cores (called link0 > > > + & link1 as Cadence's term). Each core corresponds to a host bridge, > > > + and each host bridge has only one root port. Their configuration > > > + registers are completely independent. SG2042 integrates two Cadence IPs, > > > + so there can actually be up to four host bridges. "sophgo,link-id" is > > > + used to identify which core/link the PCIe host bridge node corresponds to. > > IIUC, the registers of Cadence IP 1 and IP 2 are completely > > independent, and if you describe both of them, you would have separate > > "pcie@62000000" stanzas with separate 'reg' and 'ranges' properties. > > To be precise, for two cores of a cadence IP, each core has a separate set > of configuration registers, that is, the configuration of each core is > completely independent. This is also what I meant in the binding by "Each > core corresponds to a host bridge, and each host bridge has only one root > port. Their configuration registers are completely independent.". Maybe the > "Their" here is a bit unclear. My original intention was to refer to the > core. I can improve this description next time. > > > From the driver, it does not look like the registers for Link0 and > > Link1 are independent, since the driver claims the > > "sophgo,sg2042-pcie-host", which includes two Cores, and it tests > > pcie->link_id to select the correct register address and bit mask. > In the driver code, one "sophgo,sg2042-pcie-host" corresponds to one core, > not two. So, you can see in patch 4 of this pathset [1], 3 pcie host-bridge > nodes are defined, pcie_rc0 ~ pcie_rc2, each corresponding to one core. > > [1]:https://lore.kernel.org/linux-riscv/4a1f23e5426bfb56cad9c07f90d4efaad5eab976.1736923025.git.unicorn_wang@outlook.com/ > > I also need to explain that link0 and link1 are actually completely > independent in PCIE processing, but when sophgo implements the internal msi > controller for PCIE, its design is not good enough, and the registers for > processing msi are not made separately for link0 and link1, but mixed > together, which is what I said cdns_pcie0_ctrl/cdns_pcie1_ctrl. In these two > new register files added by sophgo (only involving MSI processing), take the > second cadence IP as an example, some registers are used to control the msi > controller of pcie_rc1 (corresponding to link0), and some registers are used > to control the msi controller of pcie_rc2 (corresponding to link1). In a > more complicated situation, some bits in a register are used to control > pcie_rc1, and some bits are used to control pcie_rc2. This is why I have to > add the link_id attribute to know whether the current PCIe host bridge > corresponds to link0 or link1, so that when processing the msi controller > related to this pcie host bridge, we can find the corresponding register or > even the bit of a register in cdns_pcieX_ctrl. > > > "sophgo,link-id" corresponds to Cadence documentation, but I think it > > is somewhat misleading in the binding because a PCIe "Link" refers to > > the downstream side of a Root Port. If we use "link-id" to identify > > either Core0 or Core1 of a Cadence IP, it sort of bakes in the > > idea that there can never be more than one Root Port per Core. > > The fact is that for the cadence IP used by sg2042, only one root port is > supported per core. 1) That's true today but may not be true forever. 2) Even if there's only one root port forever, "link" already means something specific in PCIe, and this usage means something different, so it's a little confusing. Maybe a comment to say that this refers to a "Core", not a PCIe link, is the best we can do. > ... > Based on the above analysis, I think the introduction of a three-layer > structure (pcie-core-port) looks a bit too complicated for candence IP. In > fact, the source of the discussion at the beginning of this issue was > whether some attributes should be placed under the host bridge or the root > port. I suggest that adding the root port layer on the basis of the existing > patch may be enough. What do you think? > > e.g., > > pcie_rc0: pcie@7060000000 { >     compatible = "sophgo,sg2042-pcie-host"; >     ...... // host bride level properties >     sophgo,link-id = <0>; >     port { >         // port level properties >         vendor-id = <0x1f1c>; >         device-id = <0x2042>; >         num-lanes = <4>; >     } > }; > > pcie_rc1: pcie@7062000000 { >     compatible = "sophgo,sg2042-pcie-host"; >     ...... // host bride level properties >     sophgo,link-id = <0>; >     port { >         // port level properties >         vendor-id = <0x1f1c>; >         device-id = <0x2042>; >         num-lanes = <2>; >     }; > }; > > pcie_rc2: pcie@7062800000 { >     compatible = "sophgo,sg2042-pcie-host"; >     ...... // host bride level properties >     sophgo,link-id = <0>; >     port { >         // port level properties >         vendor-id = <0x1f1c>; >         device-id = <0x2042>; >         num-lanes = <2>; >     } > }; Where does linux,pci-domain go? Can you show how link-id 0 and link-id 1 would both be used? I assume they need to be connected somehow, since IIUC there's some register shared between them? Bjorn 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 98185C0219B for ; Tue, 11 Feb 2025 23:34:41 +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: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:References: List-Owner; bh=2fOL49s6/g0szA+uBZZT+666LAfNxu2Pd7o9rvqcMxw=; b=Zzq2hnd0jiLcmk BGWBQHfuIwr/KwmuJqFiR4yTFvonMJ6D2nIKOUoDZ4TVhQ6lV8aGIrAftnBDHcqt9jj31kS5In7BX mQ8ESrLC1fhVaIqpiWIJEvi0Ircw6tvE4jr4VBPkI5P1uJMWvr2Aq7VwJWvYmQL5GOxZ3xjxpnGCo INrtqGd2pm9e+SmwedCXzHn9npVM7a/fmp+bnbwuNSzZGy5pMa4CnZEtvWgiJgXeWetB9Plu/N/SD Q2nbnP5w3bD2WNXAcF2Aw/zH7I8XwI0PR3XAxIr0tgxzOgdmKTrVqshrIZJP4nH3GIWLVm8m9WgkN v5/HLFr6MgubWxGYSVNw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1thzly-00000005ado-2K82; Tue, 11 Feb 2025 23:34:34 +0000 Received: from dfw.source.kernel.org ([139.178.84.217]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1thzlw-00000005adT-2jHU for linux-riscv@lists.infradead.org; Tue, 11 Feb 2025 23:34:33 +0000 Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by dfw.source.kernel.org (Postfix) with ESMTP id 9143D5C4670; Tue, 11 Feb 2025 23:33:52 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 943EFC4CEDD; Tue, 11 Feb 2025 23:34:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1739316871; bh=nDtnBAQ+E7kXVtn1qwbaoJMQmIELR47EumTe1bf8h8w=; h=Date:From:To:Cc:Subject:In-Reply-To:From; b=k2ICWTO9rwBqtNelUW9bhvvXeUcB0Q6JaiScS57tKkU2lEyzmcoidNcao1OWkKh7V hXkF6OH/GjwOaQm8WD4nxLZqxVfUtwk1JfLc2v7DcdV++l8vK/o+LeFuw6YB1S3oo3 qPGAP5VDEsLuC/SkVipZrsMeCyPf+c/UMGB+pS/QcSBok5xl642Hgk3yHgTq/+hnhE ilq101pYZaDwtMzO+XmFrGaCFIz8eqLOLUMI9DdsMpJnKhLiX+aYX865NEE+wruw3r gwmqOeg7To+tJ1Z6fSLJgPfA0mj/C5s6QRFulxkOfiRFTrGdD+HfnIE4/MLB9iQkHJ O+JpnRG7Z9MxA== Date: Tue, 11 Feb 2025 17:34:30 -0600 From: Bjorn Helgaas To: Chen Wang Cc: Chen Wang , kw@linux.com, u.kleine-koenig@baylibre.com, aou@eecs.berkeley.edu, arnd@arndb.de, bhelgaas@google.com, conor+dt@kernel.org, guoren@kernel.org, inochiama@outlook.com, krzk+dt@kernel.org, lee@kernel.org, lpieralisi@kernel.org, manivannan.sadhasivam@linaro.org, palmer@dabbelt.com, paul.walmsley@sifive.com, pbrobinson@gmail.com, robh@kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linux-riscv@lists.infradead.org, chao.wei@sophgo.com, xiaoguang.xing@sophgo.com, fengchun.li@sophgo.com Subject: Re: [PATCH v3 1/5] dt-bindings: pci: Add Sophgo SG2042 PCIe host Message-ID: <20250211233430.GA55431@bhelgaas> 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-20250211_153432_777083_F782931E X-CRM114-Status: GOOD ( 40.12 ) X-BeenThere: linux-riscv@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-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org T24gU3VuLCBKYW4gMjYsIDIwMjUgYXQgMTA6Mjc6MjdBTSArMDgwMCwgQ2hlbiBXYW5nIHdyb3Rl Ogo+IE9uIDIwMjUvMS8yMyA2OjIxLCBCam9ybiBIZWxnYWFzIHdyb3RlOgo+ID4gT24gV2VkLCBK YW4gMTUsIDIwMjUgYXQgMDM6MDY6MzdQTSArMDgwMCwgQ2hlbiBXYW5nIHdyb3RlOgo+ID4gPiBG cm9tOiBDaGVuIFdhbmcgPHVuaWNvcm5fd2FuZ0BvdXRsb29rLmNvbT4KPiA+ID4gCj4gPiA+IEFk ZCBiaW5kaW5nIGZvciBTb3BoZ28gU0cyMDQyIFBDSWUgaG9zdCBjb250cm9sbGVyLgo+ID4gPiAr ICBzb3BoZ28sbGluay1pZDoKPiA+ID4gKyAgICAkcmVmOiAvc2NoZW1hcy90eXBlcy55YW1sIy9k ZWZpbml0aW9ucy91aW50MzIKPiA+ID4gKyAgICBkZXNjcmlwdGlvbjogfAo+ID4gPiArICAgICAg U0cyMDQyIHVzZXMgQ2FkZW5jZSBJUCwgZXZlcnkgSVAgaXMgY29tcG9zZWQgb2YgMiBjb3JlcyAo Y2FsbGVkIGxpbmswCj4gPiA+ICsgICAgICAmIGxpbmsxIGFzIENhZGVuY2UncyB0ZXJtKS4gRWFj aCBjb3JlIGNvcnJlc3BvbmRzIHRvIGEgaG9zdCBicmlkZ2UsCj4gPiA+ICsgICAgICBhbmQgZWFj aCBob3N0IGJyaWRnZSBoYXMgb25seSBvbmUgcm9vdCBwb3J0LiBUaGVpciBjb25maWd1cmF0aW9u Cj4gPiA+ICsgICAgICByZWdpc3RlcnMgYXJlIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQuIFNHMjA0 MiBpbnRlZ3JhdGVzIHR3byBDYWRlbmNlIElQcywKPiA+ID4gKyAgICAgIHNvIHRoZXJlIGNhbiBh Y3R1YWxseSBiZSB1cCB0byBmb3VyIGhvc3QgYnJpZGdlcy4gInNvcGhnbyxsaW5rLWlkIiBpcwo+ ID4gPiArICAgICAgdXNlZCB0byBpZGVudGlmeSB3aGljaCBjb3JlL2xpbmsgdGhlIFBDSWUgaG9z dCBicmlkZ2Ugbm9kZSBjb3JyZXNwb25kcyB0by4KPiA+IElJVUMsIHRoZSByZWdpc3RlcnMgb2Yg Q2FkZW5jZSBJUCAxIGFuZCBJUCAyIGFyZSBjb21wbGV0ZWx5Cj4gPiBpbmRlcGVuZGVudCwgYW5k IGlmIHlvdSBkZXNjcmliZSBib3RoIG9mIHRoZW0sIHlvdSB3b3VsZCBoYXZlIHNlcGFyYXRlCj4g PiAicGNpZUA2MjAwMDAwMCIgc3RhbnphcyB3aXRoIHNlcGFyYXRlICdyZWcnIGFuZCAncmFuZ2Vz JyBwcm9wZXJ0aWVzLgo+IAo+IFRvIGJlIHByZWNpc2UsIGZvciB0d28gY29yZXMgb2YgYSBjYWRl bmNlIElQLCBlYWNoIGNvcmUgaGFzIGEgc2VwYXJhdGUgc2V0Cj4gb2YgY29uZmlndXJhdGlvbiBy ZWdpc3RlcnMsIHRoYXQgaXMsIHRoZSBjb25maWd1cmF0aW9uIG9mIGVhY2ggY29yZSBpcwo+IGNv bXBsZXRlbHkgaW5kZXBlbmRlbnQuIFRoaXMgaXMgYWxzbyB3aGF0IEkgbWVhbnQgaW4gdGhlIGJp bmRpbmcgYnkgIkVhY2gKPiBjb3JlIGNvcnJlc3BvbmRzIHRvIGEgaG9zdCBicmlkZ2UsIGFuZCBl YWNoIGhvc3QgYnJpZGdlIGhhcyBvbmx5IG9uZSByb290Cj4gcG9ydC4gVGhlaXIgY29uZmlndXJh dGlvbiByZWdpc3RlcnMgYXJlIGNvbXBsZXRlbHkgaW5kZXBlbmRlbnQuIi4gTWF5YmUgdGhlCj4g IlRoZWlyIiBoZXJlIGlzIGEgYml0IHVuY2xlYXIuIE15IG9yaWdpbmFsIGludGVudGlvbiB3YXMg dG8gcmVmZXIgdG8gdGhlCj4gY29yZS4gSSBjYW4gaW1wcm92ZSB0aGlzIGRlc2NyaXB0aW9uIG5l eHQgdGltZS4KPiAKPiA+ICBGcm9tIHRoZSBkcml2ZXIsIGl0IGRvZXMgbm90IGxvb2sgbGlrZSB0 aGUgcmVnaXN0ZXJzIGZvciBMaW5rMCBhbmQKPiA+IExpbmsxIGFyZSBpbmRlcGVuZGVudCwgc2lu Y2UgdGhlIGRyaXZlciBjbGFpbXMgdGhlCj4gPiAic29waGdvLHNnMjA0Mi1wY2llLWhvc3QiLCB3 aGljaCBpbmNsdWRlcyB0d28gQ29yZXMsIGFuZCBpdCB0ZXN0cwo+ID4gcGNpZS0+bGlua19pZCB0 byBzZWxlY3QgdGhlIGNvcnJlY3QgcmVnaXN0ZXIgYWRkcmVzcyBhbmQgYml0IG1hc2suCj4gSW4g dGhlIGRyaXZlciBjb2RlLCBvbmUgInNvcGhnbyxzZzIwNDItcGNpZS1ob3N0IiBjb3JyZXNwb25k cyB0byBvbmUgY29yZSwKPiBub3QgdHdvLiBTbywgeW91IGNhbiBzZWUgaW4gcGF0Y2ggNCBvZiB0 aGlzIHBhdGhzZXQgWzFdLCAzIHBjaWUgaG9zdC1icmlkZ2UKPiBub2RlcyBhcmUgZGVmaW5lZCwg cGNpZV9yYzAgfiBwY2llX3JjMiwgZWFjaCBjb3JyZXNwb25kaW5nIHRvIG9uZSBjb3JlLgo+IAo+ IFsxXTpodHRwczovL2xvcmUua2VybmVsLm9yZy9saW51eC1yaXNjdi80YTFmMjNlNTQyNmJmYjU2 Y2FkOWMwN2Y5MGQ0ZWZhYWQ1ZWFiOTc2LjE3MzY5MjMwMjUuZ2l0LnVuaWNvcm5fd2FuZ0BvdXRs b29rLmNvbS8KPiAKPiBJIGFsc28gbmVlZCB0byBleHBsYWluIHRoYXQgbGluazAgYW5kIGxpbmsx IGFyZSBhY3R1YWxseSBjb21wbGV0ZWx5Cj4gaW5kZXBlbmRlbnQgaW4gUENJRSBwcm9jZXNzaW5n LCBidXQgd2hlbiBzb3BoZ28gaW1wbGVtZW50cyB0aGUgaW50ZXJuYWwgbXNpCj4gY29udHJvbGxl ciBmb3IgUENJRSwgaXRzIGRlc2lnbiBpcyBub3QgZ29vZCBlbm91Z2gsIGFuZCB0aGUgcmVnaXN0 ZXJzIGZvcgo+IHByb2Nlc3NpbmcgbXNpIGFyZSBub3QgbWFkZSBzZXBhcmF0ZWx5IGZvciBsaW5r MCBhbmQgbGluazEsIGJ1dCBtaXhlZAo+IHRvZ2V0aGVyLCB3aGljaCBpcyB3aGF0IEkgc2FpZCBj ZG5zX3BjaWUwX2N0cmwvY2Ruc19wY2llMV9jdHJsLiBJbiB0aGVzZSB0d28KPiBuZXcgcmVnaXN0 ZXIgZmlsZXMgYWRkZWQgYnkgc29waGdvIChvbmx5IGludm9sdmluZyBNU0kgcHJvY2Vzc2luZyks IHRha2UgdGhlCj4gc2Vjb25kIGNhZGVuY2UgSVAgYXMgYW4gZXhhbXBsZSwgc29tZSByZWdpc3Rl cnMgYXJlIHVzZWQgdG8gY29udHJvbCB0aGUgbXNpCj4gY29udHJvbGxlciBvZiBwY2llX3JjMSAo Y29ycmVzcG9uZGluZyB0byBsaW5rMCksIGFuZCBzb21lIHJlZ2lzdGVycyBhcmUgdXNlZAo+IHRv IGNvbnRyb2wgdGhlIG1zaSBjb250cm9sbGVyIG9mIHBjaWVfcmMyIChjb3JyZXNwb25kaW5nIHRv IGxpbmsxKS4gSW4gYQo+IG1vcmUgY29tcGxpY2F0ZWQgc2l0dWF0aW9uLCBzb21lIGJpdHMgaW4g YSByZWdpc3RlciBhcmUgdXNlZCB0byBjb250cm9sCj4gcGNpZV9yYzEsIGFuZCBzb21lIGJpdHMg YXJlIHVzZWQgdG8gY29udHJvbCBwY2llX3JjMi4gVGhpcyBpcyB3aHkgSSBoYXZlIHRvCj4gYWRk IHRoZSBsaW5rX2lkIGF0dHJpYnV0ZSB0byBrbm93IHdoZXRoZXIgdGhlIGN1cnJlbnQgUENJZSBo b3N0IGJyaWRnZQo+IGNvcnJlc3BvbmRzIHRvIGxpbmswIG9yIGxpbmsxLCBzbyB0aGF0IHdoZW4g cHJvY2Vzc2luZyB0aGUgbXNpIGNvbnRyb2xsZXIKPiByZWxhdGVkIHRvIHRoaXMgcGNpZSBob3N0 IGJyaWRnZSwgd2UgY2FuIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXIgb3IKPiBldmVu IHRoZSBiaXQgb2YgYSByZWdpc3RlciBpbiBjZG5zX3BjaWVYX2N0cmwuCj4gCj4gPiAic29waGdv LGxpbmstaWQiIGNvcnJlc3BvbmRzIHRvIENhZGVuY2UgZG9jdW1lbnRhdGlvbiwgYnV0IEkgdGhp bmsgaXQKPiA+IGlzIHNvbWV3aGF0IG1pc2xlYWRpbmcgaW4gdGhlIGJpbmRpbmcgYmVjYXVzZSBh IFBDSWUgIkxpbmsiIHJlZmVycyB0bwo+ID4gdGhlIGRvd25zdHJlYW0gc2lkZSBvZiBhIFJvb3Qg UG9ydC4gIElmIHdlIHVzZSAibGluay1pZCIgdG8gaWRlbnRpZnkKPiA+IGVpdGhlciBDb3JlMCBv ciBDb3JlMSBvZiBhIENhZGVuY2UgSVAsIGl0IHNvcnQgb2YgYmFrZXMgaW4gdGhlCj4gPiBpZGVh IHRoYXQgdGhlcmUgY2FuIG5ldmVyIGJlIG1vcmUgdGhhbiBvbmUgUm9vdCBQb3J0IHBlciBDb3Jl Lgo+Cj4gVGhlIGZhY3QgaXMgdGhhdCBmb3IgdGhlIGNhZGVuY2UgSVAgdXNlZCBieSBzZzIwNDIs IG9ubHkgb25lIHJvb3QgcG9ydCBpcwo+IHN1cHBvcnRlZCBwZXIgY29yZS4KCjEpIFRoYXQncyB0 cnVlIHRvZGF5IGJ1dCBtYXkgbm90IGJlIHRydWUgZm9yZXZlci4KCjIpIEV2ZW4gaWYgdGhlcmUn cyBvbmx5IG9uZSByb290IHBvcnQgZm9yZXZlciwgImxpbmsiIGFscmVhZHkgbWVhbnMKc29tZXRo aW5nIHNwZWNpZmljIGluIFBDSWUsIGFuZCB0aGlzIHVzYWdlIG1lYW5zIHNvbWV0aGluZyBkaWZm ZXJlbnQsCnNvIGl0J3MgYSBsaXR0bGUgY29uZnVzaW5nLiAgTWF5YmUgYSBjb21tZW50IHRvIHNh eSB0aGF0IHRoaXMgcmVmZXJzCnRvIGEgIkNvcmUiLCBub3QgYSBQQ0llIGxpbmssIGlzIHRoZSBi ZXN0IHdlIGNhbiBkby4KCj4gLi4uCj4gQmFzZWQgb24gdGhlIGFib3ZlIGFuYWx5c2lzLCBJIHRo aW5rIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSB0aHJlZS1sYXllcgo+IHN0cnVjdHVyZSAocGNpZS1j b3JlLXBvcnQpIGxvb2tzIGEgYml0IHRvbyBjb21wbGljYXRlZCBmb3IgY2FuZGVuY2UgSVAuIElu Cj4gZmFjdCwgdGhlIHNvdXJjZSBvZiB0aGUgZGlzY3Vzc2lvbiBhdCB0aGUgYmVnaW5uaW5nIG9m IHRoaXMgaXNzdWUgd2FzCj4gd2hldGhlciBzb21lIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIHBsYWNl ZCB1bmRlciB0aGUgaG9zdCBicmlkZ2Ugb3IgdGhlIHJvb3QKPiBwb3J0LiBJIHN1Z2dlc3QgdGhh dCBhZGRpbmcgdGhlIHJvb3QgcG9ydCBsYXllciBvbiB0aGUgYmFzaXMgb2YgdGhlIGV4aXN0aW5n Cj4gcGF0Y2ggbWF5IGJlIGVub3VnaC4gV2hhdCBkbyB5b3UgdGhpbms/Cj4gCj4gZS5nLiwKPiAK PiBwY2llX3JjMDogcGNpZUA3MDYwMDAwMDAwIHsKPiDCoMKgwqAgY29tcGF0aWJsZSA9ICJzb3Bo Z28sc2cyMDQyLXBjaWUtaG9zdCI7Cj4gwqDCoMKgIC4uLi4uLiAvLyBob3N0IGJyaWRlIGxldmVs IHByb3BlcnRpZXMKPiDCoMKgwqAgc29waGdvLGxpbmstaWQgPSA8MD47Cj4gwqDCoMKgIHBvcnQg ewo+IMKgwqDCoMKgwqDCoMKgIC8vIHBvcnQgbGV2ZWwgcHJvcGVydGllcwo+IMKgwqDCoMKgwqDC oMKgIHZlbmRvci1pZCA9IDwweDFmMWM+Owo+IMKgwqDCoMKgwqDCoMKgIGRldmljZS1pZCA9IDww eDIwNDI+Owo+IMKgwqDCoMKgwqDCoMKgIG51bS1sYW5lcyA9IDw0PjsKPiDCoMKgwqAgfQo+IH07 Cj4gCj4gcGNpZV9yYzE6IHBjaWVANzA2MjAwMDAwMCB7Cj4gwqDCoMKgIGNvbXBhdGlibGUgPSAi c29waGdvLHNnMjA0Mi1wY2llLWhvc3QiOwo+IMKgwqDCoCAuLi4uLi4gLy8gaG9zdCBicmlkZSBs ZXZlbCBwcm9wZXJ0aWVzCj4gwqDCoMKgIHNvcGhnbyxsaW5rLWlkID0gPDA+Owo+IMKgwqDCoCBw b3J0IHsKPiDCoMKgwqDCoMKgwqDCoCAvLyBwb3J0IGxldmVsIHByb3BlcnRpZXMKPiDCoMKgwqDC oMKgwqDCoCB2ZW5kb3ItaWQgPSA8MHgxZjFjPjsKPiDCoMKgwqDCoMKgwqDCoCBkZXZpY2UtaWQg PSA8MHgyMDQyPjsKPiDCoMKgwqDCoMKgwqDCoCBudW0tbGFuZXMgPSA8Mj47Cj4gwqDCoMKgIH07 Cj4gfTsKPiAKPiBwY2llX3JjMjogcGNpZUA3MDYyODAwMDAwIHsKPiDCoMKgwqAgY29tcGF0aWJs ZSA9ICJzb3BoZ28sc2cyMDQyLXBjaWUtaG9zdCI7Cj4gwqDCoMKgIC4uLi4uLiAvLyBob3N0IGJy aWRlIGxldmVsIHByb3BlcnRpZXMKPiDCoMKgwqAgc29waGdvLGxpbmstaWQgPSA8MD47Cj4gwqDC oMKgIHBvcnQgewo+IMKgwqDCoMKgwqDCoMKgIC8vIHBvcnQgbGV2ZWwgcHJvcGVydGllcwo+IMKg wqDCoMKgwqDCoMKgIHZlbmRvci1pZCA9IDwweDFmMWM+Owo+IMKgwqDCoMKgwqDCoMKgIGRldmlj ZS1pZCA9IDwweDIwNDI+Owo+IMKgwqDCoMKgwqDCoMKgIG51bS1sYW5lcyA9IDwyPjsKPiDCoMKg wqAgfQo+IH07CgpXaGVyZSBkb2VzIGxpbnV4LHBjaS1kb21haW4gZ28/CgpDYW4geW91IHNob3cg aG93IGxpbmstaWQgMCBhbmQgbGluay1pZCAxIHdvdWxkIGJvdGggYmUgdXNlZD8gIEkgYXNzdW1l CnRoZXkgbmVlZCB0byBiZSBjb25uZWN0ZWQgc29tZWhvdywgc2luY2UgSUlVQyB0aGVyZSdzIHNv bWUgcmVnaXN0ZXIKc2hhcmVkIGJldHdlZW4gdGhlbT8KCkJqb3JuCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1yaXNjdiBtYWlsaW5nIGxpc3QK bGludXgtcmlzY3ZAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXJpc2N2Cg==