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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 94428C433EF for ; Tue, 2 Nov 2021 15:48:36 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 7CD0C61051 for ; Tue, 2 Nov 2021 15:48:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234343AbhKBPvK (ORCPT ); Tue, 2 Nov 2021 11:51:10 -0400 Received: from mail.kernel.org ([198.145.29.99]:58884 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234309AbhKBPvK (ORCPT ); Tue, 2 Nov 2021 11:51:10 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 8FC9F60EDF; Tue, 2 Nov 2021 15:48:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1635868113; bh=BHm+QTa4p5+sFBXS+kVc0X588xMrOSvDZH+YSNCv6v4=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=iRy+tNKqnvjdg56I8GVD8WM/MoVIYqZmf3V1GJken0L0oCB2MYmJsh0f9Nqjo7Rub 3M8xNd2+X8dNHgcQA58Q+3aEE2jy/OQAiC97BBp0UqUqeU7aM9KkivXc9dafkFdKf6 7QyUzpX2E0WYGAvCU0/v2GSTDm/hZVVNiJBhWZ1GN9QgdwAHtIm9u/rdSyzaJ2WxwN 5D9XfpNgxl8NkAx94nJ9iPRiKNtrvZxgE34OT0gbfUfGI8AfEhPxTAATJT2BWtaobd GBPHndCgdS1GgdxLtAyd1y/9WfkpElTdm++QYO6EkwjY4LqNIwxROaPtmJQlzgJAFW EfjZm1Q4kR0Pg== Received: by pali.im (Postfix) id 4BEE0A41; Tue, 2 Nov 2021 16:48:31 +0100 (CET) Date: Tue, 2 Nov 2021 16:48:31 +0100 From: Pali =?utf-8?B?Um9ow6Fy?= To: "Maciej W. Rozycki" Cc: Thomas Bogendoerfer , Russell King , Andrew Lunn , Sebastian Hesselbarth , Gregory Clement , Jason Gunthorpe , Marek =?utf-8?B?QmVow7pu?= , linux-arm-kernel@lists.infradead.org, linux-mips@vger.kernel.org, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] PCI: Marvell: Update PCIe fixup Message-ID: <20211102154831.xtrlgrmrizl5eidl@pali> References: <20211101150405.14618-1-pali@kernel.org> <20211102084241.GA6134@alpha.franken.de> <20211102090246.unmbruykfdjabfga@pali> <20211102094700.GA7376@alpha.franken.de> <20211102100034.rhcb3k2jvr6alm6y@pali> <20211102125843.sqsusis4krnmhorq@pali> <20211102144929.c5wt5pbl42ocrxly@pali> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20211102144929.c5wt5pbl42ocrxly@pali> User-Agent: NeoMutt/20180716 Precedence: bulk List-ID: X-Mailing-List: linux-mips@vger.kernel.org On Tuesday 02 November 2021 15:49:29 Pali Rohár wrote: > On Tuesday 02 November 2021 14:01:41 Maciej W. Rozycki wrote: > > On Tue, 2 Nov 2021, Pali Rohár wrote: > > > > > > None of the Galileo system controllers I came across had the class code > > > > set incorrectly. > > > > > > In kernel there is quirk only for one device with id: > > > PCI_VENDOR_ID_MARVELL (0x11ab) PCI_DEVICE_ID_MARVELL_GT64111 (0x4146) > > > > > > So for some reasons quirk is needed... Anyway, patch for this quirk just > > > adds comment as there is no explanation for it. It does not modify quirk > > > code. > > > > > > So it is possible that Marvell (or rather Galileo at that time) included > > > some config space fixup in some products and 0x4146 did not have it. > > > Just guessing... We can really only guess what could happen at that time > > > 20 years ago... > > > > Ah, there you go! -- sadly I don't seem to have a copy of the datasheet > > for the GT-64111, but the GT-64115 has it[1]: > > > > Table 158: PCI Class Code and Revision ID, Offset: 0x008 > > Bits Field name Function Initial Value > > 7:0 RevID Indicates the GT-64115 PCI Revision 0x01 > > number. > > 15:8 Reserved Read only. 0x0 > > 23:16 SubClass Indicates the GT-64115 Subclass - Mem- 0x80 > > ory controller. > > 31:24 BaseClass Indicates the GT-64115 Base Class - 0x05 > > memory controller. > > > > and then: > > > > "Device and Vendor ID (0x000), Class Code and Revision ID (0x008), and > > Header Type (0x00e) fields are read only from the PCI bus. These fields > > can be modified and read via the CPU bus." > > > > Likewise with the GT-64120[2]: > > > > Table 208: PCI_0 Class Code and Revision ID, Offset: 0x008 from PCI_0 or CPU; 0x088 from > > PCI_1 > > Bits Field name Function Initial Value > > 7:0 RevID Indicates the GT-64120 PCI_0 revision number. 0x02 > > 15:8 Reserved Read Only 0. 0x0 > > 23:16 SubClass Indicates the GT-64120 Subclass Depends on value > > 0x00 - Host Bridge Device. sampled at reset > > 0x80 - Memory Device. on BankSel[0]. See > > Table 44 on page > > 11-1. > > 31:24 BaseClass Indicates the GT-64120 Base Class Depends on value > > 0x06 - Bridge Device. sampled at reset > > 0x05 - Memory Device. on BankSel[0]. See > > Table 44 on page > > 11-1. > > > > Table 209: PCI_1 Class Code and Revision ID, Offset: 0x088 from PCI_0 or CPU; 0x008 from > > PCI_1 > > Bits Field name Function Initial Value > > 31:0 Various Same as for PCI_0 Class Code and Revision ID. > > > > and then also: > > > > "Device and Vendor ID (0x000), Class Code and Revision ID (0x008), and > > Header Type (0x00e) fields are read only from the PCI bus. These fields > > can be modified and read via the CPU bus." > > > > -- so this is system-specific and an intended chip feature rather than an > > erratum (or rather it is a system erratum if the reset strap or the boot > > firmware has got it wrong). > > > > The memory device class code is IIUC meant to be typically chosen when > > the Galileo/Marvell device is used without the CPU interface, i.e. as a > > PCI memory controller device only[3]. I have found on internet some copy of GT64111 datasheet ("GT-64111 System Controller for RC4640, RM523X and VR4300 CPUs", Galileo Technology, Product Preview Revision 1.1, FEB 4, 1999) and in section "17.15 PCI Configuration Registers" there is subsection "Class Code and Revision ID, Offset: 0x008" with content: Bits Field name Function Initial Value 7:0 RevID Indicates the GT-64111 Revision number. 0x10 GT-64111-P-0 = 0x10 15:8 Reserved 0x0 23:16 SubClass Indicates the GT-64111 Subclass (0x80 - other mem- 0x80 ory controller) 31:24 BaseClass Indicates the GT-64111 Base Class (0x5 - memory 0x05 controller). And in section "6.5.3 PCI Autoconfiguration at RESET" is following interesting information: Eight PCI registers can be automatically loaded after Rst*. Autoconfiguration mode is enabled by asserting the DMAReq[3]* LOW on Rst*. Any PCI transactions targeted for the GT-64111 will be retried while the loading of the PCI configuration registers is in process. It is highly recommended that all PC applications utilize the PCI Autoconfiguration at RESET feature. The autoload feature can be easily implemented with a very low cost EPLD. Galileo provides sample EPLD equations upon request. (You can always pull the EPLD off your final product if you find there are no issues during testing.) NOTE: The GT-64111’s default Class Code is 0x0580 (Memory Controller) which is a change from the GT-64011. The GT-64011 used the Class Code 0x0600 which denotes Host Bridge. Some PCs refuse to configure host bridges if they are found plugged into a PCI slot (ask the BIOS vendors why...). The “Memory Controller” Class Code does not cause a problem for these non-compliant BIOSes, so we used this as the default in the GT-64111. The Class Code can be reporgrammed in both devices via autoload or CPU register writes. The PCI register values are loaded from the ROM controlled by BootCS* are shown in Table 21, below. TABLE 21. PCI Registers Loaded at RESET Register Offset Boot Device Address Device and Vendor ID 0x000 0x1fffffe0 Class Code and Revision ID 0x008 0x1fffffe4 Subsystem Device and Vendor ID 0x02c 0x1fffffe8 Interrupt Pin and Line 0x03c 0x1fffffec RAS[1:0]* Bank Size 0xc08 0x1ffffff0 RAS[3:2]* Bank Size 0xc0c 0x1ffffff4 CS[2:0]* Bank Size 0xc10 0x1ffffff8 CS[3]* & Boot CS* Bank Size 0xc14 0x1ffffffc === So the conclusion is that there is also some RESET configuration via BootCS (I have no idea what it is or was). And default value (when RESET configuration is not used) is always "Memory controller" due to existence of "broken PC BIOSes" (probably x86). Hence the quirk for GT64111 in kernel is always needed. And Thomas already confirmed in his pci hexdump that PCI Class code is set to Memory Controller. I hope that now this mystery of this GT64111 quirk is solved :-) I will update patch with correct comment, why quirk is needed. So due to the fact that 20 years ago there were broken x86 BIOSes which did not like PCI devices with PCI Class code of Host Bridge, Marvell changed default PCI Class code to Memory Controller and let it in this state also for future PCIe-based ARM and AR64 SoCs for next 20 years. Which generally leaded to broken PCIe support in mvebu SoCs. I have no more comments about it... :-( > > > > The lack of a quirk with a platform does not mean it cannot have a certain > > > > PCI/e device. > > > > > > This is 11ab:4620 device an there is no PCIe capability in its config > > > space (you can inspect it via 'lspci -F dump.txt -nn -vv' but there is > > > nothing interesting). > > > > Of course, just as Thomas told you about the GT-64111 too. But you were > > right in that the memory controller feature seems shared across all the > > chip line, whether PCI or PCIe. > > > > References: > > > > [1] "GT-64115 System Controller for RC4640, RM523X, and VR4300 CPUs", > > Galileo Technology, Datasheet Revision 1.11, APR 04, 2000, Section > > 18.16 "PCI Configuration", p. 161 > > > > [2] "GT-64120 System Controller For RC4650/4700/5000 and RM526X/527X/7000 > > CPUs", Galileo Technology, Datasheet Revision 1.4, SEP 14, 1999, > > Section 17.16 "PCI Configuration", p. 17-59 > > > > [3] same, Chapter 14. "Using the GT-64120 Without the CPU Interface", p. > > 14-1 > > > > Maciej > > Hello Maciej! Thank you very much for the explanation! > > Now it makes sense and looks like that for GT-64111 it is "system > erratum" that strapping pins are incorrectly set which leads to wrong > PCI class code. > > I will update comment for GT-64111 quirk in v2. > > I'm surprised that Marvell copied this 20 years old MIPS Galileo PCI > logic into followup ARM SoC PCIe IPs (and later also into recent ARM64 > A3720 SoC PCIe IP), removed configuration of PCI class code via > strapping pins and let default PCI class code value to Memory device, > even also when PCIe controller is running in Root Complex mode. And so > correction can be done only from "CPU bus". > > Just Marvell forgot to include chapter about usage without CPU interface > in new ARM and ARM64 SoCs and origin/usage of that Memory Controller > Device was lost in history, even Marvell people was not able to figure > out what was wrong with PCIe IP in their ARM SoCs... > https://lore.kernel.org/linux-pci/20211003120944.3lmwxylnhlp2kfj7@pali/ > > Maciej, if I had known that you have this kind of information I would > have written you year ago :-) 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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 18D35C433F5 for ; Tue, 2 Nov 2021 15:49:53 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id DB37F60EDF for ; Tue, 2 Nov 2021 15:49:52 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org DB37F60EDF Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org 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:References: 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: List-Owner; bh=Wj2bSESHo0wjyCfDwG89VdTxBDyIgE3AaTroWsHIX2w=; b=MXU+q+vtT6u2nU Oy5t/FCKypmoEKtbcbMf7X6kVSZ0uTz0ffIUL1WWuiry6Pl8oUCBkEpMkMECplyRSNSpuUxHLWHPM mYoJUhz9Ri5vlAMZn0g3lIn0UalzYAL+p0oaYSIeDwpusC2PK9epzHwmNl4eh33GbbhSpLq3oy2t2 b9VHHOPLvRMWakt8W/GkuJXraWsB2hWMtFV/+9tFUKWO9iprtoTkHaBfzVCqU7clY8WCL70Z6X4Qb 4UDByKgy8ZWjuolVlN9KOhRqUETD8o6YdsT75z7eRsZHJoQPmaxOvTdZtB34mzGDns3ms31O8Zvtf AxespvO+jzbIX8qIb/tQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mhw1f-002BSd-JC; Tue, 02 Nov 2021 15:48:39 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mhw1a-002BR4-7a for linux-arm-kernel@lists.infradead.org; Tue, 02 Nov 2021 15:48:36 +0000 Received: by mail.kernel.org (Postfix) with ESMTPSA id 8FC9F60EDF; Tue, 2 Nov 2021 15:48:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1635868113; bh=BHm+QTa4p5+sFBXS+kVc0X588xMrOSvDZH+YSNCv6v4=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=iRy+tNKqnvjdg56I8GVD8WM/MoVIYqZmf3V1GJken0L0oCB2MYmJsh0f9Nqjo7Rub 3M8xNd2+X8dNHgcQA58Q+3aEE2jy/OQAiC97BBp0UqUqeU7aM9KkivXc9dafkFdKf6 7QyUzpX2E0WYGAvCU0/v2GSTDm/hZVVNiJBhWZ1GN9QgdwAHtIm9u/rdSyzaJ2WxwN 5D9XfpNgxl8NkAx94nJ9iPRiKNtrvZxgE34OT0gbfUfGI8AfEhPxTAATJT2BWtaobd GBPHndCgdS1GgdxLtAyd1y/9WfkpElTdm++QYO6EkwjY4LqNIwxROaPtmJQlzgJAFW EfjZm1Q4kR0Pg== Received: by pali.im (Postfix) id 4BEE0A41; Tue, 2 Nov 2021 16:48:31 +0100 (CET) Date: Tue, 2 Nov 2021 16:48:31 +0100 From: Pali =?utf-8?B?Um9ow6Fy?= To: "Maciej W. Rozycki" Cc: Thomas Bogendoerfer , Russell King , Andrew Lunn , Sebastian Hesselbarth , Gregory Clement , Jason Gunthorpe , Marek =?utf-8?B?QmVow7pu?= , linux-arm-kernel@lists.infradead.org, linux-mips@vger.kernel.org, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] PCI: Marvell: Update PCIe fixup Message-ID: <20211102154831.xtrlgrmrizl5eidl@pali> References: <20211101150405.14618-1-pali@kernel.org> <20211102084241.GA6134@alpha.franken.de> <20211102090246.unmbruykfdjabfga@pali> <20211102094700.GA7376@alpha.franken.de> <20211102100034.rhcb3k2jvr6alm6y@pali> <20211102125843.sqsusis4krnmhorq@pali> <20211102144929.c5wt5pbl42ocrxly@pali> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20211102144929.c5wt5pbl42ocrxly@pali> User-Agent: NeoMutt/20180716 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211102_084834_352123_A532871E X-CRM114-Status: GOOD ( 47.37 ) 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 T24gVHVlc2RheSAwMiBOb3ZlbWJlciAyMDIxIDE1OjQ5OjI5IFBhbGkgUm9ow6FyIHdyb3RlOgo+ IE9uIFR1ZXNkYXkgMDIgTm92ZW1iZXIgMjAyMSAxNDowMTo0MSBNYWNpZWogVy4gUm96eWNraSB3 cm90ZToKPiA+IE9uIFR1ZSwgMiBOb3YgMjAyMSwgUGFsaSBSb2jDoXIgd3JvdGU6Cj4gPiAKPiA+ ID4gPiAgTm9uZSBvZiB0aGUgR2FsaWxlbyBzeXN0ZW0gY29udHJvbGxlcnMgSSBjYW1lIGFjcm9z cyBoYWQgdGhlIGNsYXNzIGNvZGUgCj4gPiA+ID4gc2V0IGluY29ycmVjdGx5Lgo+ID4gPiAKPiA+ ID4gSW4ga2VybmVsIHRoZXJlIGlzIHF1aXJrIG9ubHkgZm9yIG9uZSBkZXZpY2Ugd2l0aCBpZDoK PiA+ID4gUENJX1ZFTkRPUl9JRF9NQVJWRUxMICgweDExYWIpIFBDSV9ERVZJQ0VfSURfTUFSVkVM TF9HVDY0MTExICgweDQxNDYpCj4gPiA+IAo+ID4gPiBTbyBmb3Igc29tZSByZWFzb25zIHF1aXJr IGlzIG5lZWRlZC4uLiBBbnl3YXksIHBhdGNoIGZvciB0aGlzIHF1aXJrIGp1c3QKPiA+ID4gYWRk cyBjb21tZW50IGFzIHRoZXJlIGlzIG5vIGV4cGxhbmF0aW9uIGZvciBpdC4gSXQgZG9lcyBub3Qg bW9kaWZ5IHF1aXJrCj4gPiA+IGNvZGUuCj4gPiA+IAo+ID4gPiBTbyBpdCBpcyBwb3NzaWJsZSB0 aGF0IE1hcnZlbGwgKG9yIHJhdGhlciBHYWxpbGVvIGF0IHRoYXQgdGltZSkgaW5jbHVkZWQKPiA+ ID4gc29tZSBjb25maWcgc3BhY2UgZml4dXAgaW4gc29tZSBwcm9kdWN0cyBhbmQgMHg0MTQ2IGRp ZCBub3QgaGF2ZSBpdC4KPiA+ID4gSnVzdCBndWVzc2luZy4uLiBXZSBjYW4gcmVhbGx5IG9ubHkg Z3Vlc3Mgd2hhdCBjb3VsZCBoYXBwZW4gYXQgdGhhdCB0aW1lCj4gPiA+IDIwIHllYXJzIGFnby4u Lgo+ID4gCj4gPiAgQWgsIHRoZXJlIHlvdSBnbyEgLS0gc2FkbHkgSSBkb24ndCBzZWVtIHRvIGhh dmUgYSBjb3B5IG9mIHRoZSBkYXRhc2hlZXQgCj4gPiBmb3IgdGhlIEdULTY0MTExLCBidXQgdGhl IEdULTY0MTE1IGhhcyBpdFsxXToKPiA+IAo+ID4gVGFibGUgMTU4OiBQQ0kgQ2xhc3MgQ29kZSBh bmQgUmV2aXNpb24gSUQsIE9mZnNldDogMHgwMDgKPiA+ICBCaXRzICBGaWVsZCBuYW1lIEZ1bmN0 aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluaXRpYWwgVmFsdWUKPiA+ ICA3OjAgICBSZXZJRCAgICAgIEluZGljYXRlcyB0aGUgR1QtNjQxMTUgUENJIFJldmlzaW9uICAg ICAgICAgIDB4MDEKPiA+ICAgICAgICAgICAgICAgICAgIG51bWJlci4KPiA+ICAxNTo4ICBSZXNl cnZlZCAgIFJlYWQgb25seS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MAo+ ID4gIDIzOjE2IFN1YkNsYXNzICAgSW5kaWNhdGVzIHRoZSBHVC02NDExNSBTdWJjbGFzcyAtIE1l bS0gICAgICAgMHg4MAo+ID4gICAgICAgICAgICAgICAgICAgb3J5IGNvbnRyb2xsZXIuCj4gPiAg MzE6MjQgQmFzZUNsYXNzICBJbmRpY2F0ZXMgdGhlIEdULTY0MTE1IEJhc2UgQ2xhc3MgLSAgICAg ICAgICAweDA1Cj4gPiAgICAgICAgICAgICAgICAgICBtZW1vcnkgY29udHJvbGxlci4KPiA+IAo+ ID4gYW5kIHRoZW46Cj4gPiAKPiA+ICJEZXZpY2UgYW5kIFZlbmRvciBJRCAoMHgwMDApLCBDbGFz cyBDb2RlIGFuZCBSZXZpc2lvbiBJRCAoMHgwMDgpLCBhbmQgCj4gPiBIZWFkZXIgVHlwZSAoMHgw MGUpIGZpZWxkcyBhcmUgcmVhZCBvbmx5IGZyb20gdGhlIFBDSSBidXMuICBUaGVzZSBmaWVsZHMg Cj4gPiBjYW4gYmUgbW9kaWZpZWQgYW5kIHJlYWQgdmlhIHRoZSBDUFUgYnVzLiIKPiA+IAo+ID4g TGlrZXdpc2Ugd2l0aCB0aGUgR1QtNjQxMjBbMl06Cj4gPiAKPiA+IFRhYmxlIDIwODogUENJXzAg Q2xhc3MgQ29kZSBhbmQgUmV2aXNpb24gSUQsIE9mZnNldDogMHgwMDggZnJvbSBQQ0lfMCBvciBD UFU7IDB4MDg4IGZyb20KPiA+ICAgICAgICAgICAgUENJXzEKPiA+ICBCaXRzICBGaWVsZCBuYW1l IEZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbml0aWFsIFZh bHVlCj4gPiAgNzowICAgUmV2SUQgICAgICBJbmRpY2F0ZXMgdGhlIEdULTY0MTIwIFBDSV8wIHJl dmlzaW9uIG51bWJlci4gMHgwMgo+ID4gIDE1OjggIFJlc2VydmVkICAgUmVhZCBPbmx5IDAuICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MAo+ID4gIDIzOjE2IFN1YkNsYXNzICAg SW5kaWNhdGVzIHRoZSBHVC02NDEyMCBTdWJjbGFzcyAgICAgICAgICAgICAgIERlcGVuZHMgb24g dmFsdWUKPiA+ICAgICAgICAgICAgICAgICAgIDB4MDAgLSBIb3N0IEJyaWRnZSBEZXZpY2UuICAg ICAgICAgICAgICAgICAgICBzYW1wbGVkIGF0IHJlc2V0Cj4gPiAgICAgICAgICAgICAgICAgICAw eDgwIC0gTWVtb3J5IERldmljZS4gICAgICAgICAgICAgICAgICAgICAgICAgb24gQmFua1NlbFsw XS4gU2VlCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVGFibGUgNDQgb24gcGFnZQo+ID4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDExLTEuCj4gPiAg MzE6MjQgQmFzZUNsYXNzICBJbmRpY2F0ZXMgdGhlIEdULTY0MTIwIEJhc2UgQ2xhc3MgICAgICAg ICAgICAgRGVwZW5kcyBvbiB2YWx1ZQo+ID4gICAgICAgICAgICAgICAgICAgMHgwNiAtIEJyaWRn ZSBEZXZpY2UuICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZWQgYXQgcmVzZXQKPiA+ICAg ICAgICAgICAgICAgICAgIDB4MDUgLSBNZW1vcnkgRGV2aWNlLiAgICAgICAgICAgICAgICAgICAg ICAgICBvbiBCYW5rU2VsWzBdLiBTZWUKPiA+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWJsZSA0NCBvbiBwYWdlCj4gPiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMTEtMS4KPiA+IAo+ID4gVGFibGUgMjA5OiBQQ0lfMSBDbGFzcyBDb2RlIGFuZCBSZXZp c2lvbiBJRCwgT2Zmc2V0OiAweDA4OCBmcm9tIFBDSV8wIG9yIENQVTsgMHgwMDggZnJvbQo+ID4g ICAgICAgICAgICBQQ0lfMQo+ID4gIEJpdHMgIEZpZWxkIG5hbWUgRnVuY3Rpb24gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluaXRpYWwgVmFsdWUKPiA+ICAzMTowICBWYXJp b3VzICAgIFNhbWUgYXMgZm9yIFBDSV8wIENsYXNzIENvZGUgYW5kIFJldmlzaW9uIElELgo+ID4g Cj4gPiBhbmQgdGhlbiBhbHNvOgo+ID4gCj4gPiAiRGV2aWNlIGFuZCBWZW5kb3IgSUQgKDB4MDAw KSwgQ2xhc3MgQ29kZSBhbmQgUmV2aXNpb24gSUQgKDB4MDA4KSwgYW5kIAo+ID4gSGVhZGVyIFR5 cGUgKDB4MDBlKSBmaWVsZHMgYXJlIHJlYWQgb25seSBmcm9tIHRoZSBQQ0kgYnVzLiAgVGhlc2Ug ZmllbGRzIAo+ID4gY2FuIGJlIG1vZGlmaWVkIGFuZCByZWFkIHZpYSB0aGUgQ1BVIGJ1cy4iCj4g PiAKPiA+IC0tIHNvIHRoaXMgaXMgc3lzdGVtLXNwZWNpZmljIGFuZCBhbiBpbnRlbmRlZCBjaGlw IGZlYXR1cmUgcmF0aGVyIHRoYW4gYW4gCj4gPiBlcnJhdHVtIChvciByYXRoZXIgaXQgaXMgYSBz eXN0ZW0gZXJyYXR1bSBpZiB0aGUgcmVzZXQgc3RyYXAgb3IgdGhlIGJvb3QgCj4gPiBmaXJtd2Fy ZSBoYXMgZ290IGl0IHdyb25nKS4KPiA+IAo+ID4gIFRoZSBtZW1vcnkgZGV2aWNlIGNsYXNzIGNv ZGUgaXMgSUlVQyBtZWFudCB0byBiZSB0eXBpY2FsbHkgY2hvc2VuIHdoZW4gCj4gPiB0aGUgR2Fs aWxlby9NYXJ2ZWxsIGRldmljZSBpcyB1c2VkIHdpdGhvdXQgdGhlIENQVSBpbnRlcmZhY2UsIGku ZS4gYXMgYSAKPiA+IFBDSSBtZW1vcnkgY29udHJvbGxlciBkZXZpY2Ugb25seVszXS4KCkkgaGF2 ZSBmb3VuZCBvbiBpbnRlcm5ldCBzb21lIGNvcHkgb2YgR1Q2NDExMSBkYXRhc2hlZXQgKCJHVC02 NDExMQpTeXN0ZW0gQ29udHJvbGxlciBmb3IgUkM0NjQwLCBSTTUyM1ggYW5kIFZSNDMwMCBDUFVz IiwgR2FsaWxlbwpUZWNobm9sb2d5LCBQcm9kdWN0IFByZXZpZXcgUmV2aXNpb24gMS4xLCBGRUIg NCwgMTk5OSkgYW5kIGluIHNlY3Rpb24KIjE3LjE1IFBDSSBDb25maWd1cmF0aW9uIFJlZ2lzdGVy cyIgdGhlcmUgaXMgc3Vic2VjdGlvbiAiQ2xhc3MgQ29kZSBhbmQKUmV2aXNpb24gSUQsIE9mZnNl dDogMHgwMDgiIHdpdGggY29udGVudDoKCkJpdHMgIEZpZWxkIG5hbWUgRnVuY3Rpb24gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5pdGlhbCBWYWx1ZQo3OjAgICBS ZXZJRCAgICAgIEluZGljYXRlcyB0aGUgR1QtNjQxMTEgUmV2aXNpb24gbnVtYmVyLiAgICAgICAg ICAgIDB4MTAKICAgICAgICAgICAgICAgICBHVC02NDExMS1QLTAgPSAweDEwCjE1OjggIFJlc2Vy dmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MHgwCjIzOjE2IFN1YkNsYXNzICAgSW5kaWNhdGVzIHRoZSBHVC02NDExMSBTdWJjbGFzcyAoMHg4 MCAtIG90aGVyIG1lbS0gMHg4MAogICAgICAgICAgICAgICAgIG9yeSBjb250cm9sbGVyKQozMToy NCBCYXNlQ2xhc3MgIEluZGljYXRlcyB0aGUgR1QtNjQxMTEgQmFzZSBDbGFzcyAoMHg1IC0gbWVt b3J5ICAgIDB4MDUKICAgICAgICAgICAgICAgICBjb250cm9sbGVyKS4KCkFuZCBpbiBzZWN0aW9u ICI2LjUuMyBQQ0kgQXV0b2NvbmZpZ3VyYXRpb24gYXQgUkVTRVQiIGlzIGZvbGxvd2luZwppbnRl cmVzdGluZyBpbmZvcm1hdGlvbjoKCkVpZ2h0IFBDSSByZWdpc3RlcnMgY2FuIGJlIGF1dG9tYXRp Y2FsbHkgbG9hZGVkIGFmdGVyIFJzdCouCkF1dG9jb25maWd1cmF0aW9uIG1vZGUgaXMgZW5hYmxl ZCBieSBhc3NlcnRpbmcgdGhlIERNQVJlcVszXSogTE9XIG9uClJzdCouIEFueSBQQ0kgdHJhbnNh Y3Rpb25zIHRhcmdldGVkIGZvciB0aGUgR1QtNjQxMTEgd2lsbCBiZSByZXRyaWVkCndoaWxlIHRo ZSBsb2FkaW5nIG9mIHRoZSBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgaXMgaW4gcHJvY2Vz cy4KCkl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0aGF0IGFsbCBQQyBhcHBsaWNhdGlvbnMgdXRp bGl6ZSB0aGUgUENJCkF1dG9jb25maWd1cmF0aW9uIGF0IFJFU0VUIGZlYXR1cmUuIFRoZSBhdXRv bG9hZCBmZWF0dXJlIGNhbiBiZSBlYXNpbHkKaW1wbGVtZW50ZWQgd2l0aCBhIHZlcnkgbG93IGNv c3QgRVBMRC4gR2FsaWxlbyBwcm92aWRlcyBzYW1wbGUgRVBMRAplcXVhdGlvbnMgdXBvbiByZXF1 ZXN0LiAoWW91IGNhbiBhbHdheXMgcHVsbCB0aGUgRVBMRCBvZmYgeW91ciBmaW5hbApwcm9kdWN0 IGlmIHlvdSBmaW5kIHRoZXJlIGFyZSBubyBpc3N1ZXMgZHVyaW5nIHRlc3RpbmcuKQoKTk9URTog VGhlIEdULTY0MTEx4oCZcyBkZWZhdWx0IENsYXNzIENvZGUgaXMgMHgwNTgwIChNZW1vcnkgQ29u dHJvbGxlcikKd2hpY2ggaXMgYSBjaGFuZ2UgZnJvbSB0aGUgR1QtNjQwMTEuCgpUaGUgR1QtNjQw MTEgdXNlZCB0aGUgQ2xhc3MgQ29kZSAweDA2MDAgd2hpY2ggZGVub3RlcyBIb3N0IEJyaWRnZS4g U29tZQpQQ3MgcmVmdXNlIHRvIGNvbmZpZ3VyZSBob3N0IGJyaWRnZXMgaWYgdGhleSBhcmUgZm91 bmQgcGx1Z2dlZCBpbnRvIGEKUENJIHNsb3QgKGFzayB0aGUgQklPUyB2ZW5kb3JzIHdoeS4uLiku IFRoZSDigJxNZW1vcnkgQ29udHJvbGxlcuKAnSBDbGFzcwpDb2RlIGRvZXMgbm90IGNhdXNlIGEg cHJvYmxlbSBmb3IgdGhlc2Ugbm9uLWNvbXBsaWFudCBCSU9TZXMsIHNvIHdlIHVzZWQKdGhpcyBh cyB0aGUgZGVmYXVsdCBpbiB0aGUgR1QtNjQxMTEuIFRoZSBDbGFzcyBDb2RlIGNhbiBiZSByZXBv cmdyYW1tZWQKaW4gYm90aCBkZXZpY2VzIHZpYSBhdXRvbG9hZCBvciBDUFUgcmVnaXN0ZXIgd3Jp dGVzLgoKVGhlIFBDSSByZWdpc3RlciB2YWx1ZXMgYXJlIGxvYWRlZCBmcm9tIHRoZSBST00gY29u dHJvbGxlZCBieSBCb290Q1MqCmFyZSBzaG93biBpbiBUYWJsZSAyMSwgYmVsb3cuCgpUQUJMRSAy MS4gUENJIFJlZ2lzdGVycyBMb2FkZWQgYXQgUkVTRVQKUmVnaXN0ZXIgICAgICAgICAgICAgICAg ICAgICAgICBPZmZzZXQgQm9vdCBEZXZpY2UgQWRkcmVzcwpEZXZpY2UgYW5kIFZlbmRvciBJRCAg ICAgICAgICAgIDB4MDAwICAweDFmZmZmZmUwCkNsYXNzIENvZGUgYW5kIFJldmlzaW9uIElEICAg ICAgMHgwMDggIDB4MWZmZmZmZTQKU3Vic3lzdGVtIERldmljZSBhbmQgVmVuZG9yIElEICAweDAy YyAgMHgxZmZmZmZlOApJbnRlcnJ1cHQgUGluIGFuZCBMaW5lICAgICAgICAgIDB4MDNjICAweDFm ZmZmZmVjClJBU1sxOjBdKiBCYW5rIFNpemUgICAgICAgICAgICAgMHhjMDggIDB4MWZmZmZmZjAK UkFTWzM6Ml0qIEJhbmsgU2l6ZSAgICAgICAgICAgICAweGMwYyAgMHgxZmZmZmZmNApDU1syOjBd KiBCYW5rIFNpemUgICAgICAgICAgICAgIDB4YzEwICAweDFmZmZmZmY4CkNTWzNdKiAmIEJvb3Qg Q1MqIEJhbmsgU2l6ZSAgICAgMHhjMTQgIDB4MWZmZmZmZmMKCj09PQoKU28gdGhlIGNvbmNsdXNp b24gaXMgdGhhdCB0aGVyZSBpcyBhbHNvIHNvbWUgUkVTRVQgY29uZmlndXJhdGlvbiB2aWEKQm9v dENTIChJIGhhdmUgbm8gaWRlYSB3aGF0IGl0IGlzIG9yIHdhcykuIEFuZCBkZWZhdWx0IHZhbHVl ICh3aGVuIFJFU0VUCmNvbmZpZ3VyYXRpb24gaXMgbm90IHVzZWQpIGlzIGFsd2F5cyAiTWVtb3J5 IGNvbnRyb2xsZXIiIGR1ZSB0bwpleGlzdGVuY2Ugb2YgImJyb2tlbiBQQyBCSU9TZXMiIChwcm9i YWJseSB4ODYpLgoKSGVuY2UgdGhlIHF1aXJrIGZvciBHVDY0MTExIGluIGtlcm5lbCBpcyBhbHdh eXMgbmVlZGVkLiBBbmQgVGhvbWFzCmFscmVhZHkgY29uZmlybWVkIGluIGhpcyBwY2kgaGV4ZHVt cCB0aGF0IFBDSSBDbGFzcyBjb2RlIGlzIHNldCB0bwpNZW1vcnkgQ29udHJvbGxlci4KCkkgaG9w ZSB0aGF0IG5vdyB0aGlzIG15c3Rlcnkgb2YgdGhpcyBHVDY0MTExIHF1aXJrIGlzIHNvbHZlZCA6 LSkgSSB3aWxsCnVwZGF0ZSBwYXRjaCB3aXRoIGNvcnJlY3QgY29tbWVudCwgd2h5IHF1aXJrIGlz IG5lZWRlZC4KClNvIGR1ZSB0byB0aGUgZmFjdCB0aGF0IDIwIHllYXJzIGFnbyB0aGVyZSB3ZXJl IGJyb2tlbiB4ODYgQklPU2VzIHdoaWNoCmRpZCBub3QgbGlrZSBQQ0kgZGV2aWNlcyB3aXRoIFBD SSBDbGFzcyBjb2RlIG9mIEhvc3QgQnJpZGdlLCBNYXJ2ZWxsCmNoYW5nZWQgZGVmYXVsdCBQQ0kg Q2xhc3MgY29kZSB0byBNZW1vcnkgQ29udHJvbGxlciBhbmQgbGV0IGl0IGluIHRoaXMKc3RhdGUg YWxzbyBmb3IgZnV0dXJlIFBDSWUtYmFzZWQgQVJNIGFuZCBBUjY0IFNvQ3MgZm9yIG5leHQgMjAg eWVhcnMuCldoaWNoIGdlbmVyYWxseSBsZWFkZWQgdG8gYnJva2VuIFBDSWUgc3VwcG9ydCBpbiBt dmVidSBTb0NzLiBJIGhhdmUgbm8KbW9yZSBjb21tZW50cyBhYm91dCBpdC4uLiA6LSgKCj4gPiA+ ID4gVGhlIGxhY2sgb2YgYSBxdWlyayB3aXRoIGEgcGxhdGZvcm0gZG9lcyBub3QgbWVhbiBpdCBj YW5ub3QgaGF2ZSBhIGNlcnRhaW4gCj4gPiA+ID4gUENJL2UgZGV2aWNlLgo+ID4gPiAKPiA+ID4g VGhpcyBpcyAxMWFiOjQ2MjAgZGV2aWNlIGFuIHRoZXJlIGlzIG5vIFBDSWUgY2FwYWJpbGl0eSBp biBpdHMgY29uZmlnCj4gPiA+IHNwYWNlICh5b3UgY2FuIGluc3BlY3QgaXQgdmlhICdsc3BjaSAt RiBkdW1wLnR4dCAtbm4gLXZ2JyBidXQgdGhlcmUgaXMKPiA+ID4gbm90aGluZyBpbnRlcmVzdGlu ZykuCj4gPiAKPiA+ICBPZiBjb3Vyc2UsIGp1c3QgYXMgVGhvbWFzIHRvbGQgeW91IGFib3V0IHRo ZSBHVC02NDExMSB0b28uICBCdXQgeW91IHdlcmUgCj4gPiByaWdodCBpbiB0aGF0IHRoZSBtZW1v cnkgY29udHJvbGxlciBmZWF0dXJlIHNlZW1zIHNoYXJlZCBhY3Jvc3MgYWxsIHRoZSAKPiA+IGNo aXAgbGluZSwgd2hldGhlciBQQ0kgb3IgUENJZS4KPiA+IAo+ID4gUmVmZXJlbmNlczoKPiA+IAo+ ID4gWzFdICJHVC02NDExNSBTeXN0ZW0gQ29udHJvbGxlciBmb3IgUkM0NjQwLCBSTTUyM1gsIGFu ZCBWUjQzMDAgQ1BVcyIsIAo+ID4gICAgIEdhbGlsZW8gVGVjaG5vbG9neSwgRGF0YXNoZWV0IFJl dmlzaW9uIDEuMTEsIEFQUiAwNCwgMjAwMCwgU2VjdGlvbiAKPiA+ICAgICAxOC4xNiAiUENJIENv bmZpZ3VyYXRpb24iLCBwLiAxNjEKPiA+IAo+ID4gWzJdICJHVC02NDEyMCBTeXN0ZW0gQ29udHJv bGxlciBGb3IgUkM0NjUwLzQ3MDAvNTAwMCBhbmQgUk01MjZYLzUyN1gvNzAwMCAKPiA+ICAgICBD UFVzIiwgR2FsaWxlbyBUZWNobm9sb2d5LCBEYXRhc2hlZXQgUmV2aXNpb24gMS40LCBTRVAgMTQs IDE5OTksIAo+ID4gICAgIFNlY3Rpb24gMTcuMTYgIlBDSSBDb25maWd1cmF0aW9uIiwgcC4gMTct NTkKPiA+IAo+ID4gWzNdIHNhbWUsIENoYXB0ZXIgMTQuICJVc2luZyB0aGUgR1QtNjQxMjAgV2l0 aG91dCB0aGUgQ1BVIEludGVyZmFjZSIsIHAuIAo+ID4gICAgIDE0LTEKPiA+IAo+ID4gICBNYWNp ZWoKPiAKPiBIZWxsbyBNYWNpZWohIFRoYW5rIHlvdSB2ZXJ5IG11Y2ggZm9yIHRoZSBleHBsYW5h dGlvbiEKPiAKPiBOb3cgaXQgbWFrZXMgc2Vuc2UgYW5kIGxvb2tzIGxpa2UgdGhhdCBmb3IgR1Qt NjQxMTEgaXQgaXMgInN5c3RlbQo+IGVycmF0dW0iIHRoYXQgc3RyYXBwaW5nIHBpbnMgYXJlIGlu Y29ycmVjdGx5IHNldCB3aGljaCBsZWFkcyB0byB3cm9uZwo+IFBDSSBjbGFzcyBjb2RlLgo+IAo+ IEkgd2lsbCB1cGRhdGUgY29tbWVudCBmb3IgR1QtNjQxMTEgcXVpcmsgaW4gdjIuCj4gCj4gSSdt IHN1cnByaXNlZCB0aGF0IE1hcnZlbGwgY29waWVkIHRoaXMgMjAgeWVhcnMgb2xkIE1JUFMgR2Fs aWxlbyBQQ0kKPiBsb2dpYyBpbnRvIGZvbGxvd3VwIEFSTSBTb0MgUENJZSBJUHMgKGFuZCBsYXRl ciBhbHNvIGludG8gcmVjZW50IEFSTTY0Cj4gQTM3MjAgU29DIFBDSWUgSVApLCByZW1vdmVkIGNv bmZpZ3VyYXRpb24gb2YgUENJIGNsYXNzIGNvZGUgdmlhCj4gc3RyYXBwaW5nIHBpbnMgYW5kIGxl dCBkZWZhdWx0IFBDSSBjbGFzcyBjb2RlIHZhbHVlIHRvIE1lbW9yeSBkZXZpY2UsCj4gZXZlbiBh bHNvIHdoZW4gUENJZSBjb250cm9sbGVyIGlzIHJ1bm5pbmcgaW4gUm9vdCBDb21wbGV4IG1vZGUu IEFuZCBzbwo+IGNvcnJlY3Rpb24gY2FuIGJlIGRvbmUgb25seSBmcm9tICJDUFUgYnVzIi4KPiAK PiBKdXN0IE1hcnZlbGwgZm9yZ290IHRvIGluY2x1ZGUgY2hhcHRlciBhYm91dCB1c2FnZSB3aXRo b3V0IENQVSBpbnRlcmZhY2UKPiBpbiBuZXcgQVJNIGFuZCBBUk02NCBTb0NzIGFuZCBvcmlnaW4v dXNhZ2Ugb2YgdGhhdCBNZW1vcnkgQ29udHJvbGxlcgo+IERldmljZSB3YXMgbG9zdCBpbiBoaXN0 b3J5LCBldmVuIE1hcnZlbGwgcGVvcGxlIHdhcyBub3QgYWJsZSB0byBmaWd1cmUKPiBvdXQgd2hh dCB3YXMgd3Jvbmcgd2l0aCBQQ0llIElQIGluIHRoZWlyIEFSTSBTb0NzLi4uCj4gaHR0cHM6Ly9s b3JlLmtlcm5lbC5vcmcvbGludXgtcGNpLzIwMjExMDAzMTIwOTQ0LjNsbXd4eWxuaGxwMmtmajdA cGFsaS8KPiAKPiBNYWNpZWosIGlmIEkgaGFkIGtub3duIHRoYXQgeW91IGhhdmUgdGhpcyBraW5k IG9mIGluZm9ybWF0aW9uIEkgd291bGQKPiBoYXZlIHdyaXR0ZW4geW91IHllYXIgYWdvIDotKQoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJt LWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3Jn Cmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtl cm5lbAo=