From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from Atcsqr.andestech.com (60-248-80-70.hinet-ip.hinet.net [60.248.80.70]) (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 E131A2FB97B; Tue, 30 Sep 2025 12:32:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=60.248.80.70 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759235598; cv=none; b=DPtvYwNduLBO7oD9BwDgWsZTLjJhv1tkME8tEuedxKnzjrwikS75g3SjkhbgY3Ci6OYTF8Vo2CN48D+FQupyt0c3LSJH96rvG+gDBKuoX7WrCofLeEmYKYLxwtgYMOddqMzAGdEJbMJNik5jwTUFHlb4M2JqZANmWV1Yzu8RdWY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759235598; c=relaxed/simple; bh=o5WgECBb3XEdUTamZl7EY74JCh4ZAHhDYaBuiP0jtpY=; h=Date:From:To:CC:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=OYK21S3GmeKj0H4p0x7LDN9zMg6YQqUYBpmDlk2DADpI6oiMgHjKOE2KMPNtlJtTBldvkj76LfPaSt+PrwLKlMm0SxvsjCb+t47gv2Bo4zBLD5WmXrxxZsPw4nrpgRhz68xPbezDDanECwI0HQSWBUBfizZqcpEuW6pLELjNovc= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=permerror header.from=andestech.com; spf=pass smtp.mailfrom=andestech.com; arc=none smtp.client-ip=60.248.80.70 Authentication-Results: smtp.subspace.kernel.org; dmarc=permerror header.from=andestech.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=andestech.com Received: from Atcsqr.andestech.com (localhost [127.0.0.2] (may be forged)) by Atcsqr.andestech.com with ESMTP id 58UC8wsW090414; Tue, 30 Sep 2025 20:08:58 +0800 (+08) (envelope-from randolph@andestech.com) Received: from mail.andestech.com (ATCPCS31.andestech.com [10.0.1.89]) by Atcsqr.andestech.com with ESMTPS id 58UC5hY5088638 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 30 Sep 2025 20:05:43 +0800 (+08) (envelope-from randolph@andestech.com) Received: from swlinux02 (10.0.15.183) by ATCPCS31.andestech.com (10.0.1.89) with Microsoft SMTP Server id 14.3.498.0; Tue, 30 Sep 2025 20:05:43 +0800 Date: Tue, 30 Sep 2025 20:05:37 +0800 From: Randolph Lin To: Rob Herring CC: Bjorn Helgaas , , , , , , , , , , , , , , , , , , , , , , Subject: Re: [PATCH v3 1/5] PCI: dwc: Skip failed outbound iATU and continue Message-ID: References: <20250926211023.GA2128495@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: User-Agent: Mutt/2.2.12 (2023-09-09) X-DKIM-Results: atcpcs31.andestech.com; dkim=none; X-DNSRBL: X-SPAM-SOURCE-CHECK: pass X-MAIL:Atcsqr.andestech.com 58UC8wsW090414 Hi Rob, On Mon, Sep 29, 2025 at 09:03:59AM -0500, Rob Herring wrote: > [EXTERNAL MAIL] > > On Fri, Sep 26, 2025 at 4:10 PM Bjorn Helgaas wrote: > > > > On Wed, Sep 24, 2025 at 08:58:11PM +0800, Randolph Lin wrote: > > > On Tue, Sep 23, 2025 at 09:42:23AM -0500, Bjorn Helgaas wrote: > > > > On Tue, Sep 23, 2025 at 07:36:43PM +0800, Randolph Lin wrote: > > > > > Previously, outbound iATU programming included range checks > > > > > based on hardware limitations. If a configuration did not meet > > > > > these constraints, the loop would stop immediately. > > > > > > > > > > This patch updates the behavior to enhance flexibility. Instead > > > > > of stopping at the first issue, it now logs a warning with > > > > > details of the affected window and proceeds to program the > > > > > remaining iATU entries. > > > > > > > > > > This enables partial configuration to complete in cases where > > > > > some iATU windows may not meet requirements, improving overall > > > > > compatibility. > > > > > > > > It's not really clear why this is needed. I assume it's related > > > > to dropping qilai_pcie_outbound_atu_addr_valid(). > > > > > > Yes, I want to drop the previous atu_addr_valid function. > > > > > > > I guess dw_pcie_prog_outbound_atu() must return an error for one > > > > of the QiLai ranges? Which one, and what exactly is the problem? > > > > I still suspect something wrong in the devicetree description. > > > > > > The main issue is not the returned error; just need to avoid > > > terminating the process when the configuration exceeds the > > > hardware’s expected limits. > > > > > > There are two methods to fix the issue on the Qilai SoC: > > > > > > 1. Simply skip the entries that do not match the designware hardware > > > iATU limitations. An error will be returned, but it can be ignored. > > > On the Qilai SoC, the iATU limitation is the 4GB boundary. Qilai SoC > > > only need to configure iATU support to translate addresses below the > > > "32-bits" address range. Although 64-bits addresses do not match the > > > designware hardware iATU limitations, there is no need to configure > > > 64-bits addresses, since the connection is hard-wired. > > > > > > 2. Set the devicetree only 2 viewport for iATU and force using > > > devicetree value. This is a workaround in the devicetree, but the > > > fix logic is not easy to document. Instead, we should enforce the > > > use of the viewport defined in the devicetree and modify the > > > designware generic code accordingly — using the viewport values from > > > the devicetree instead of reading them from the designware > > > registers. Since only two viewports are available for iATU, we > > > should reserve one for the configuration registers and the other for > > > 32-bit address access. Therefore, reverse logic still needs to be > > > added to the designware generic code. > > > > > > Method 2 adds excessive complexity to the designware generic code. > > > Instead, directly configuring the iATU and reporting an error when > > > the configuration exceeds the hardware iATU limitations is a simpler > > > and more effective approach to applying the fix. > > > > I don't know the DesignWare iATU design very well, so I don't know if > > this issue is something unique to Qilai or if it's something that > > could be handled via devicetree. > > I believe it should probably be handled in the DT. The iATU is > programmed based on the bridge window resources which are in turn > based on DT ranges and dma-ranges. If there's a failure, then > ranges/dma-ranges is wrong. Or the driver could adjust the bridge > window resources before programming the iATU. > Thank you very much. That’s a great hint for me. My driver can handle most of the logic within the .init callback of the dw_pcie_host_ops structure. This includes parsing the Device Tree data and performing the required pre-initialization steps, such as counting how many bridge window resources comply with the iATU limitations and verifying the 32-bit address mappings within those bridge window resources. The following additional logic is still required to ensure pci->num_ob_windows correctly reflects the driver’s pre-initialization value, with the current approach remaining more generic and purposeful. --- a/drivers/pci/controller/dwc/pcie-designware.c +++ b/drivers/pci/controller/dwc/pcie-designware.c @@ -907,8 +907,10 @@ void dw_pcie_iatu_detect(struct dw_pcie *pci) max = 0; } - pci->num_ob_windows = ob; - pci->num_ib_windows = ib; + if (!pci->num_ob_windows) + pci->num_ob_windows = ob; + if (!pci->num_ib_windows) + pci->num_ib_windows = ib; pci->region_align = 1 << fls(min); pci->region_limit = (max << 32) | (SZ_4G - 1); > Please provide what the DT looks like (for ranges/dma-ranges) and > where problem entry is. > bus@80000000 { compatible = "simple-bus"; #address-cells = <2>; #size-cells = <2>; dma-ranges = <0x44 0x00000000 0x04 0x00000000 0x04 0x00000000>; ranges = <0x00 0x80000000 0x00 0x80000000 0x00 0x20000000>, <0x00 0x04000000 0x00 0x04000000 0x00 0x00001000>, <0x00 0x00000000 0x20 0x00000000 0x20 0x00000000>; pci@80000000 { compatible = "andestech,qilai-pcie"; device_type = "pci"; reg = <0x00 0x80000000 0x00 0x20000000>, /* DBI registers */ <0x00 0x04000000 0x00 0x00001000>, /* APB registers */ <0x00 0x00000000 0x00 0x00010000>; /* Configuration registers */ reg-names = "dbi", "apb", "config"; linux,pci-domain = <0>; bus-range = <0x0 0xff>; num-viewport = <4>; #address-cells = <3>; #size-cells = <2>; ranges = <0x02000000 0x00 0x10000000 0x00 0x10000000 0x00 0xf0000000>, <0x43000000 0x01 0x00000000 0x01 0x00000000 0x1f 0x00000000>; Just look at the last "ranges" property — the first line is the only one we want to program into the iATU, as its size is below SZ_4G (the iATU region limitation for this SoC). The next line exceeds the iATU region limitation; therefore, we do not want to program it into the iATU. It is natively wire-connected by design and does not need to pass through the iATU. > Rob Sincerely, Randolph 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 314F1CCA470 for ; Tue, 30 Sep 2025 12:08:43 +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: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=7c9qYNWvDMWyq4wDnoloB3gfjJUKNbgp9DrSf+KWi2o=; b=netEgfoMYgdA7q S3S/0Zv/aBWs0Pkc4pewlg8WVEx1A6MYOQZ6/NAN2KhbGCm4W4agC4uHexuWITpdEjHUllrQH7yo5 4/7anupJJR4dRnt7xKx+3I3jI8Ev4w6lC+TvVVUk4lvBnkw1NZ+xj2Pcz0MkyzLP8a0KcWCrqjq88 zcQzdaL7InSS/uGYJS2u1h5Imp84ntv3nzaxoCR2qOvZXhOdr9JrawCStfJqrzoffC0eh33cnz8I5 tdWFt0mrVASx6AI5pSQ6hHmksyU0H31mc4/tRM3ILGsWQ18whDpmi1ph8EqIo/RFhX/5/yHhCkcX+ ZbnMzpdNUPlYLET3aWtw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1v3Z9j-00000005D8r-1UBN; Tue, 30 Sep 2025 12:08:31 +0000 Received: from 60-248-80-70.hinet-ip.hinet.net ([60.248.80.70] helo=Atcsqr.andestech.com) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1v3Z9c-00000005D83-3Cps for linux-riscv@lists.infradead.org; Tue, 30 Sep 2025 12:08:30 +0000 Received: from mail.andestech.com (ATCPCS31.andestech.com [10.0.1.89]) by Atcsqr.andestech.com with ESMTPS id 58UC5hY5088638 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 30 Sep 2025 20:05:43 +0800 (+08) (envelope-from randolph@andestech.com) Received: from swlinux02 (10.0.15.183) by ATCPCS31.andestech.com (10.0.1.89) with Microsoft SMTP Server id 14.3.498.0; Tue, 30 Sep 2025 20:05:43 +0800 Date: Tue, 30 Sep 2025 20:05:37 +0800 From: Randolph Lin To: Rob Herring CC: Bjorn Helgaas , , , , , , , , , , , , , , , , , , , , , , Subject: Re: [PATCH v3 1/5] PCI: dwc: Skip failed outbound iATU and continue Message-ID: References: <20250926211023.GA2128495@bhelgaas> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/2.2.12 (2023-09-09) X-Originating-IP: [10.0.15.183] X-DKIM-Results: atcpcs31.andestech.com; dkim=none; X-DNSRBL: X-MAIL: Atcsqr.andestech.com 58UC5hY5088638 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250930_050825_153596_55B63172 X-CRM114-Status: GOOD ( 46.84 ) 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 SGkgUm9iLAoKT24gTW9uLCBTZXAgMjksIDIwMjUgYXQgMDk6MDM6NTlBTSAtMDUwMCwgUm9iIEhl cnJpbmcgd3JvdGU6Cj4gW0VYVEVSTkFMIE1BSUxdCj4gCj4gT24gRnJpLCBTZXAgMjYsIDIwMjUg YXQgNDoxMOKAr1BNIEJqb3JuIEhlbGdhYXMgPGhlbGdhYXNAa2VybmVsLm9yZz4gd3JvdGU6Cj4g Pgo+ID4gT24gV2VkLCBTZXAgMjQsIDIwMjUgYXQgMDg6NTg6MTFQTSArMDgwMCwgUmFuZG9scGgg TGluIHdyb3RlOgo+ID4gPiBPbiBUdWUsIFNlcCAyMywgMjAyNSBhdCAwOTo0MjoyM0FNIC0wNTAw LCBCam9ybiBIZWxnYWFzIHdyb3RlOgo+ID4gPiA+IE9uIFR1ZSwgU2VwIDIzLCAyMDI1IGF0IDA3 OjM2OjQzUE0gKzA4MDAsIFJhbmRvbHBoIExpbiB3cm90ZToKPiA+ID4gPiA+IFByZXZpb3VzbHks IG91dGJvdW5kIGlBVFUgcHJvZ3JhbW1pbmcgaW5jbHVkZWQgcmFuZ2UgY2hlY2tzCj4gPiA+ID4g PiBiYXNlZCBvbiBoYXJkd2FyZSBsaW1pdGF0aW9ucy4gSWYgYSBjb25maWd1cmF0aW9uIGRpZCBu b3QgbWVldAo+ID4gPiA+ID4gdGhlc2UgY29uc3RyYWludHMsIHRoZSBsb29wIHdvdWxkIHN0b3Ag aW1tZWRpYXRlbHkuCj4gPiA+ID4gPgo+ID4gPiA+ID4gVGhpcyBwYXRjaCB1cGRhdGVzIHRoZSBi ZWhhdmlvciB0byBlbmhhbmNlIGZsZXhpYmlsaXR5LiBJbnN0ZWFkCj4gPiA+ID4gPiBvZiBzdG9w cGluZyBhdCB0aGUgZmlyc3QgaXNzdWUsIGl0IG5vdyBsb2dzIGEgd2FybmluZyB3aXRoCj4gPiA+ ID4gPiBkZXRhaWxzIG9mIHRoZSBhZmZlY3RlZCB3aW5kb3cgYW5kIHByb2NlZWRzIHRvIHByb2dy YW0gdGhlCj4gPiA+ID4gPiByZW1haW5pbmcgaUFUVSBlbnRyaWVzLgo+ID4gPiA+ID4KPiA+ID4g PiA+IFRoaXMgZW5hYmxlcyBwYXJ0aWFsIGNvbmZpZ3VyYXRpb24gdG8gY29tcGxldGUgaW4gY2Fz ZXMgd2hlcmUKPiA+ID4gPiA+IHNvbWUgaUFUVSB3aW5kb3dzIG1heSBub3QgbWVldCByZXF1aXJl bWVudHMsIGltcHJvdmluZyBvdmVyYWxsCj4gPiA+ID4gPiBjb21wYXRpYmlsaXR5Lgo+ID4gPiA+ Cj4gPiA+ID4gSXQncyBub3QgcmVhbGx5IGNsZWFyIHdoeSB0aGlzIGlzIG5lZWRlZC4gIEkgYXNz dW1lIGl0J3MgcmVsYXRlZAo+ID4gPiA+IHRvIGRyb3BwaW5nIHFpbGFpX3BjaWVfb3V0Ym91bmRf YXR1X2FkZHJfdmFsaWQoKS4KPiA+ID4KPiA+ID4gWWVzLCBJIHdhbnQgdG8gZHJvcCB0aGUgcHJl dmlvdXMgYXR1X2FkZHJfdmFsaWQgZnVuY3Rpb24uCj4gPiA+Cj4gPiA+ID4gSSBndWVzcyBkd19w Y2llX3Byb2dfb3V0Ym91bmRfYXR1KCkgbXVzdCByZXR1cm4gYW4gZXJyb3IgZm9yIG9uZQo+ID4g PiA+IG9mIHRoZSBRaUxhaSByYW5nZXM/ICBXaGljaCBvbmUsIGFuZCB3aGF0IGV4YWN0bHkgaXMg dGhlIHByb2JsZW0/Cj4gPiA+ID4gSSBzdGlsbCBzdXNwZWN0IHNvbWV0aGluZyB3cm9uZyBpbiB0 aGUgZGV2aWNldHJlZSBkZXNjcmlwdGlvbi4KPiA+ID4KPiA+ID4gVGhlIG1haW4gaXNzdWUgaXMg bm90IHRoZSByZXR1cm5lZCBlcnJvcjsganVzdCBuZWVkIHRvIGF2b2lkCj4gPiA+IHRlcm1pbmF0 aW5nIHRoZSBwcm9jZXNzIHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gZXhjZWVkcyB0aGUKPiA+ID4g aGFyZHdhcmXigJlzIGV4cGVjdGVkIGxpbWl0cy4KPiA+ID4KPiA+ID4gVGhlcmUgYXJlIHR3byBt ZXRob2RzIHRvIGZpeCB0aGUgaXNzdWUgb24gdGhlIFFpbGFpIFNvQzoKPiA+ID4KPiA+ID4gMS4g U2ltcGx5IHNraXAgdGhlIGVudHJpZXMgdGhhdCBkbyBub3QgbWF0Y2ggdGhlIGRlc2lnbndhcmUg aGFyZHdhcmUKPiA+ID4gaUFUVSBsaW1pdGF0aW9ucy4gIEFuIGVycm9yIHdpbGwgYmUgcmV0dXJu ZWQsIGJ1dCBpdCBjYW4gYmUgaWdub3JlZC4KPiA+ID4gT24gdGhlIFFpbGFpIFNvQywgdGhlIGlB VFUgbGltaXRhdGlvbiBpcyB0aGUgNEdCIGJvdW5kYXJ5LiBRaWxhaSBTb0MKPiA+ID4gb25seSBu ZWVkIHRvIGNvbmZpZ3VyZSBpQVRVIHN1cHBvcnQgdG8gdHJhbnNsYXRlIGFkZHJlc3NlcyBiZWxv dyB0aGUKPiA+ID4gIjMyLWJpdHMiIGFkZHJlc3MgcmFuZ2UuIEFsdGhvdWdoIDY0LWJpdHMgYWRk cmVzc2VzIGRvIG5vdCBtYXRjaCB0aGUKPiA+ID4gZGVzaWdud2FyZSBoYXJkd2FyZSBpQVRVIGxp bWl0YXRpb25zLCB0aGVyZSBpcyBubyBuZWVkIHRvIGNvbmZpZ3VyZQo+ID4gPiA2NC1iaXRzIGFk ZHJlc3Nlcywgc2luY2UgdGhlIGNvbm5lY3Rpb24gaXMgaGFyZC13aXJlZC4KPiA+ID4KPiA+ID4g Mi4gU2V0IHRoZSBkZXZpY2V0cmVlIG9ubHkgMiB2aWV3cG9ydCBmb3IgaUFUVSBhbmQgZm9yY2Ug dXNpbmcKPiA+ID4gZGV2aWNldHJlZSB2YWx1ZS4gIFRoaXMgaXMgYSB3b3JrYXJvdW5kIGluIHRo ZSBkZXZpY2V0cmVlLCBidXQgdGhlCj4gPiA+IGZpeCBsb2dpYyBpcyBub3QgZWFzeSB0byBkb2N1 bWVudC4gIEluc3RlYWQsIHdlIHNob3VsZCBlbmZvcmNlIHRoZQo+ID4gPiB1c2Ugb2YgdGhlIHZp ZXdwb3J0IGRlZmluZWQgaW4gdGhlIGRldmljZXRyZWUgYW5kIG1vZGlmeSB0aGUKPiA+ID4gZGVz aWdud2FyZSBnZW5lcmljIGNvZGUgYWNjb3JkaW5nbHkg4oCUIHVzaW5nIHRoZSB2aWV3cG9ydCB2 YWx1ZXMgZnJvbQo+ID4gPiB0aGUgZGV2aWNldHJlZSBpbnN0ZWFkIG9mIHJlYWRpbmcgdGhlbSBm cm9tIHRoZSBkZXNpZ253YXJlCj4gPiA+IHJlZ2lzdGVycy4gIFNpbmNlIG9ubHkgdHdvIHZpZXdw b3J0cyBhcmUgYXZhaWxhYmxlIGZvciBpQVRVLCB3ZQo+ID4gPiBzaG91bGQgcmVzZXJ2ZSBvbmUg Zm9yIHRoZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyBhbmQgdGhlIG90aGVyIGZvcgo+ID4gPiAz Mi1iaXQgYWRkcmVzcyBhY2Nlc3MuICBUaGVyZWZvcmUsIHJldmVyc2UgbG9naWMgc3RpbGwgbmVl ZHMgdG8gYmUKPiA+ID4gYWRkZWQgdG8gdGhlIGRlc2lnbndhcmUgZ2VuZXJpYyBjb2RlLgo+ID4g Pgo+ID4gPiBNZXRob2QgMiBhZGRzIGV4Y2Vzc2l2ZSBjb21wbGV4aXR5IHRvIHRoZSBkZXNpZ253 YXJlIGdlbmVyaWMgY29kZS4KPiA+ID4gSW5zdGVhZCwgZGlyZWN0bHkgY29uZmlndXJpbmcgdGhl IGlBVFUgYW5kIHJlcG9ydGluZyBhbiBlcnJvciB3aGVuCj4gPiA+IHRoZSBjb25maWd1cmF0aW9u IGV4Y2VlZHMgdGhlIGhhcmR3YXJlIGlBVFUgbGltaXRhdGlvbnMgaXMgYSBzaW1wbGVyCj4gPiA+ IGFuZCBtb3JlIGVmZmVjdGl2ZSBhcHByb2FjaCB0byBhcHBseWluZyB0aGUgZml4Lgo+ID4KPiA+ IEkgZG9uJ3Qga25vdyB0aGUgRGVzaWduV2FyZSBpQVRVIGRlc2lnbiB2ZXJ5IHdlbGwsIHNvIEkg ZG9uJ3Qga25vdyBpZgo+ID4gdGhpcyBpc3N1ZSBpcyBzb21ldGhpbmcgdW5pcXVlIHRvIFFpbGFp IG9yIGlmIGl0J3Mgc29tZXRoaW5nIHRoYXQKPiA+IGNvdWxkIGJlIGhhbmRsZWQgdmlhIGRldmlj ZXRyZWUuCj4gCj4gSSBiZWxpZXZlIGl0IHNob3VsZCBwcm9iYWJseSBiZSBoYW5kbGVkIGluIHRo ZSBEVC4gVGhlIGlBVFUgaXMKPiBwcm9ncmFtbWVkIGJhc2VkIG9uIHRoZSBicmlkZ2Ugd2luZG93 IHJlc291cmNlcyB3aGljaCBhcmUgaW4gdHVybgo+IGJhc2VkIG9uIERUIHJhbmdlcyBhbmQgZG1h LXJhbmdlcy4gSWYgdGhlcmUncyBhIGZhaWx1cmUsIHRoZW4KPiByYW5nZXMvZG1hLXJhbmdlcyBp cyB3cm9uZy4gT3IgdGhlIGRyaXZlciBjb3VsZCBhZGp1c3QgdGhlIGJyaWRnZQo+IHdpbmRvdyBy ZXNvdXJjZXMgYmVmb3JlIHByb2dyYW1taW5nIHRoZSBpQVRVLgo+IAoKVGhhbmsgeW91IHZlcnkg bXVjaC4gVGhhdOKAmXMgYSBncmVhdCBoaW50IGZvciBtZS4KCk15IGRyaXZlciBjYW4gaGFuZGxl IG1vc3Qgb2YgdGhlIGxvZ2ljIHdpdGhpbiB0aGUgLmluaXQgY2FsbGJhY2sgb2YgdGhlCmR3X3Bj aWVfaG9zdF9vcHMgc3RydWN0dXJlLiBUaGlzIGluY2x1ZGVzIHBhcnNpbmcgdGhlIERldmljZSBU cmVlIGRhdGEKYW5kIHBlcmZvcm1pbmcgdGhlIHJlcXVpcmVkIHByZS1pbml0aWFsaXphdGlvbiBz dGVwcywgc3VjaCBhcyBjb3VudGluZwpob3cgbWFueSBicmlkZ2Ugd2luZG93IHJlc291cmNlcyBj b21wbHkgd2l0aCB0aGUgaUFUVSBsaW1pdGF0aW9ucyBhbmQKdmVyaWZ5aW5nIHRoZSAzMi1iaXQg YWRkcmVzcyBtYXBwaW5ncyB3aXRoaW4gdGhvc2UgYnJpZGdlIHdpbmRvdwpyZXNvdXJjZXMuCgpU aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgbG9naWMgaXMgc3RpbGwgcmVxdWlyZWQgdG8gZW5zdXJl CnBjaS0+bnVtX29iX3dpbmRvd3MgY29ycmVjdGx5IHJlZmxlY3RzIHRoZSBkcml2ZXLigJlzIHBy ZS1pbml0aWFsaXphdGlvbgp2YWx1ZSwgd2l0aCB0aGUgY3VycmVudCBhcHByb2FjaCByZW1haW5p bmcgbW9yZSBnZW5lcmljIGFuZCBwdXJwb3NlZnVsLgoKLS0tIGEvZHJpdmVycy9wY2kvY29udHJv bGxlci9kd2MvcGNpZS1kZXNpZ253YXJlLmMKKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9k d2MvcGNpZS1kZXNpZ253YXJlLmMKQEAgLTkwNyw4ICs5MDcsMTAgQEAgdm9pZCBkd19wY2llX2lh dHVfZGV0ZWN0KHN0cnVjdCBkd19wY2llICpwY2kpCiAgICAgICAgICAgICAgICBtYXggPSAwOwog ICAgICAgIH0KCi0gICAgICAgcGNpLT5udW1fb2Jfd2luZG93cyA9IG9iOwotICAgICAgIHBjaS0+ bnVtX2liX3dpbmRvd3MgPSBpYjsKKyAgICAgICBpZiAoIXBjaS0+bnVtX29iX3dpbmRvd3MpCisg ICAgICAgICAgICAgICBwY2ktPm51bV9vYl93aW5kb3dzID0gb2I7CisgICAgICAgaWYgKCFwY2kt Pm51bV9pYl93aW5kb3dzKQorICAgICAgICAgICAgICAgcGNpLT5udW1faWJfd2luZG93cyA9IGli OwogICAgICAgIHBjaS0+cmVnaW9uX2FsaWduID0gMSA8PCBmbHMobWluKTsKICAgICAgICBwY2kt PnJlZ2lvbl9saW1pdCA9IChtYXggPDwgMzIpIHwgKFNaXzRHIC0gMSk7Cgo+IFBsZWFzZSBwcm92 aWRlIHdoYXQgdGhlIERUIGxvb2tzIGxpa2UgKGZvciByYW5nZXMvZG1hLXJhbmdlcykgYW5kCj4g d2hlcmUgcHJvYmxlbSBlbnRyeSBpcy4KPiAKCmJ1c0A4MDAwMDAwMCB7Cgljb21wYXRpYmxlID0g InNpbXBsZS1idXMiOwoJI2FkZHJlc3MtY2VsbHMgPSA8Mj47Cgkjc2l6ZS1jZWxscyA9IDwyPjsK CWRtYS1yYW5nZXMgPSA8MHg0NCAweDAwMDAwMDAwIDB4MDQgMHgwMDAwMDAwMCAweDA0IDB4MDAw MDAwMDA+OwoJcmFuZ2VzID0gPDB4MDAgMHg4MDAwMDAwMCAweDAwIDB4ODAwMDAwMDAgMHgwMCAw eDIwMDAwMDAwPiwKCQkgPDB4MDAgMHgwNDAwMDAwMCAweDAwIDB4MDQwMDAwMDAgMHgwMCAweDAw MDAxMDAwPiwKCQkgPDB4MDAgMHgwMDAwMDAwMCAweDIwIDB4MDAwMDAwMDAgMHgyMCAweDAwMDAw MDAwPjsKCglwY2lAODAwMDAwMDAgewoJCWNvbXBhdGlibGUgPSAiYW5kZXN0ZWNoLHFpbGFpLXBj aWUiOwoJCWRldmljZV90eXBlID0gInBjaSI7CgkJcmVnID0gPDB4MDAgMHg4MDAwMDAwMCAweDAw IDB4MjAwMDAwMDA+LCAvKiBEQkkgcmVnaXN0ZXJzICovCgkJICAgICAgPDB4MDAgMHgwNDAwMDAw MCAweDAwIDB4MDAwMDEwMDA+LCAvKiBBUEIgcmVnaXN0ZXJzICovCgkJICAgICAgPDB4MDAgMHgw MDAwMDAwMCAweDAwIDB4MDAwMTAwMDA+OyAvKiBDb25maWd1cmF0aW9uIHJlZ2lzdGVycyAqLwoJ CXJlZy1uYW1lcyA9ICJkYmkiLCAiYXBiIiwgImNvbmZpZyI7CgoJCWxpbnV4LHBjaS1kb21haW4g PSA8MD47CgkJYnVzLXJhbmdlID0gPDB4MCAweGZmPjsKCQludW0tdmlld3BvcnQgPSA8ND47CgkJ I2FkZHJlc3MtY2VsbHMgPSA8Mz47CgkJI3NpemUtY2VsbHMgPSA8Mj47CgkJcmFuZ2VzID0gPDB4 MDIwMDAwMDAgMHgwMCAweDEwMDAwMDAwIDB4MDAgMHgxMDAwMDAwMCAweDAwIDB4ZjAwMDAwMDA+ LAoJCQkgPDB4NDMwMDAwMDAgMHgwMSAweDAwMDAwMDAwIDB4MDEgMHgwMDAwMDAwMCAweDFmIDB4 MDAwMDAwMDA+OwoKSnVzdCBsb29rIGF0IHRoZSBsYXN0ICJyYW5nZXMiIHByb3BlcnR5IOKAlCB0 aGUgZmlyc3QgbGluZSBpcyB0aGUgb25seSBvbmUKd2Ugd2FudCB0byBwcm9ncmFtIGludG8gdGhl IGlBVFUsIGFzIGl0cyBzaXplIGlzIGJlbG93IFNaXzRHCih0aGUgaUFUVSByZWdpb24gbGltaXRh dGlvbiBmb3IgdGhpcyBTb0MpLgoKVGhlIG5leHQgbGluZSBleGNlZWRzIHRoZSBpQVRVIHJlZ2lv biBsaW1pdGF0aW9uOyB0aGVyZWZvcmUsIHdlIGRvIG5vdAp3YW50IHRvIHByb2dyYW0gaXQgaW50 byB0aGUgaUFUVS4gSXQgaXMgbmF0aXZlbHkgd2lyZS1jb25uZWN0ZWQgYnkKZGVzaWduIGFuZCBk b2VzIG5vdCBuZWVkIHRvIHBhc3MgdGhyb3VnaCB0aGUgaUFUVS4KCj4gUm9iCgpTaW5jZXJlbHks ClJhbmRvbHBoCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpsaW51eC1yaXNjdiBtYWlsaW5nIGxpc3QKbGludXgtcmlzY3ZAbGlzdHMuaW5mcmFkZWFkLm9y ZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXJpc2N2 Cg==