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 X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A32AEC433E0 for ; Mon, 15 Mar 2021 19:58:49 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 664A164EF3 for ; Mon, 15 Mar 2021 19:58:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231331AbhCOT6R (ORCPT ); Mon, 15 Mar 2021 15:58:17 -0400 Received: from mail.kernel.org ([198.145.29.99]:44348 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233828AbhCOT6K (ORCPT ); Mon, 15 Mar 2021 15:58:10 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 7271E64EB9; Mon, 15 Mar 2021 19:58:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1615838289; bh=5zzvi1tBQA3+VE5Dazrz3QA09vEWmVFXyrYB+PNEe+o=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=cjKN2G1tuATT2qCgstRDpDM6BDVUnFN+VzbpTSRlqf7MdoknP7Yg4mycU+iGDu+AA 6u/1HxpD/gHCCxGwNYCFwCD16JKrAcxyAkETJtjS7gxo0YGGQSi7mNBaONQJNz0Fow iwGtyJW0it+fLpxaG70j+Lsu04uxJaq2/Gb70TZSVpFBfWqgclbMV3T2nd37VVGxPH 8uV2+tiR3MJHXL3q4qXieqDql6dOQjT7sRLx95HA1oiTIh1wN94UFFfr8s5c7B6YfG rFOOBDrJbmKYl8lUEanP1JRvy+bV2l9N1/xP7ymSBNdRyBDXdoSu8NgZR7U0sWnc4s 3qcPoNJdrlpiw== Received: by pali.im (Postfix) id BA09E82E; Mon, 15 Mar 2021 20:58:06 +0100 (CET) Date: Mon, 15 Mar 2021 20:58:06 +0100 From: Pali =?utf-8?B?Um9ow6Fy?= To: Toke =?utf-8?Q?H=C3=B8iland-J=C3=B8rgensen?= Cc: vtolkm@gmail.com, Bjorn Helgaas , linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Rob Herring , Ilias Apalodimas , Marek =?utf-8?B?QmVow7pu?= , Thomas Petazzoni , Jason Cooper Subject: Re: PCI trouble on mvebu (Turris Omnia) Message-ID: <20210315195806.iqdt5wvvkvpmnep7@pali> References: <2fb69e2a-4423-2b04-cd0f-ca819092bc5f@gmail.com> <20201028231626.GA344207@bjorn-Precision-5520> <20201030112331.meqg6lvultyn6v54@pali> <87k0v7n9y9.fsf@toke.dk> <20201030142337.yushrdcuecycfhcu@pali> <87zh42lfv6.fsf@toke.dk> <20201102152403.4jlmcaqkqeivuypm@pali> <877dr3lpok.fsf@toke.dk> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <877dr3lpok.fsf@toke.dk> User-Agent: NeoMutt/20180716 Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org On Monday 02 November 2020 16:54:35 Toke Høiland-Jørgensen wrote: > Pali Rohár writes: > > > On Saturday 31 October 2020 13:49:49 Toke Høiland-Jørgensen wrote: > >> "™֟☻̭҇ Ѽ ҉ ®" writes: > >> > >> > On 30/10/2020 15:23, Pali Rohár wrote: > >> >> On Friday 30 October 2020 14:02:22 Toke Høiland-Jørgensen wrote: > >> >>> Pali Rohár writes: > >> >>>> My experience with that WLE900VX card, aardvark driver and aspm code: > >> >>>> > >> >>>> Link training in GEN2 mode for this card succeed only once after reset. > >> >>>> Repeated link retraining fails and it fails even when aardvark is > >> >>>> reconfigured to GEN1 mode. Reset via PERST# signal is required to have > >> >>>> working link training. > >> >>>> > >> >>>> What I did in aardvark driver: Set mode to GEN2, do link training. If > >> >>>> success read "negotiated link speed" from "Link Control Status Register" > >> >>>> (for WLE900VX it is 0x1 - GEN1) and set it into aardvark. And then > >> >>>> retrain link again (for WLE900VX now it would be at GEN1). After that > >> >>>> card is stable and all future retraining (e.g. from aspm.c) also passes. > >> >>>> > >> >>>> If I do not change aardvark mode from GEN2 to GEN1 the second link > >> >>>> training fails. And if I change mode to GEN1 after this failed link > >> >>>> training then nothing happen, link training do not success. > >> >>>> > >> >>>> So just speculation now... In current setup initialization of card does > >> >>>> one link training at GEN2. Then aspm.c is called which is doing second > >> >>>> link retraining at GEN2. And if it fails then below patch issue third > >> >>>> link retraining at GEN1. If A38x/pci-mvebu has same problem as aardvark > >> >>>> then second link retraining must be at GEN1 (not GEN2) to workaround > >> >>>> this issue. > >> >>>> > >> >>>> Bjorn, Toke: what about trying to hack aspm.c code to never do link > >> >>>> retraining at GEN2 speed? And always force GEN1 speed prior link > >> >>>> training? > >> >>> Sounds like a plan. I poked around in aspm.c and must confess to being a > >> >>> bit lost in the soup of registers ;) > >> >>> > >> >>> So if one of you can cook up a patch, that would be most helpful! > >> >> I modified Bjorn's patch, explicitly set tls to 1 and added debug info > >> >> about cls (current link speed, that what is used by aardvark). It is > >> >> untested, I just tried to compile it. > >> >> > >> >> Can try it? > >> >> > >> >> diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c > >> >> index 253c30cc1967..f934c0b52f41 100644 > >> >> --- a/drivers/pci/pcie/aspm.c > >> >> +++ b/drivers/pci/pcie/aspm.c > >> >> @@ -206,6 +206,27 @@ static bool pcie_retrain_link(struct pcie_link_state *link) > >> >> unsigned long end_jiffies; > >> >> u16 reg16; > >> >> > >> >> + u32 lnkcap2; > >> >> + u16 lnksta, lnkctl2, cls, tls; > >> >> + > >> >> + pcie_capability_read_dword(parent, PCI_EXP_LNKCAP2, &lnkcap2); > >> >> + pcie_capability_read_word(parent, PCI_EXP_LNKSTA, &lnksta); > >> >> + pcie_capability_read_word(parent, PCI_EXP_LNKCTL2, &lnkctl2); > >> >> + cls = lnksta & PCI_EXP_LNKSTA_CLS; > >> >> + tls = lnkctl2 & PCI_EXP_LNKCTL2_TLS; > >> >> + > >> >> + pci_info(parent, "lnkcap2 %#010x sls %#04x lnksta %#06x cls %#03x lnkctl2 %#06x tls %#03x\n", > >> >> + lnkcap2, (lnkcap2 & 0x3F) >> 1, > >> >> + lnksta, cls, > >> >> + lnkctl2, tls); > >> >> + > >> >> + tls = 1; > >> >> + pcie_capability_clear_and_set_word(parent, PCI_EXP_LNKCTL2, > >> >> + PCI_EXP_LNKCTL2_TLS, tls); > >> >> + pcie_capability_read_word(parent, PCI_EXP_LNKCTL2, &lnkctl2); > >> >> + pci_info(parent, "lnkctl2 %#010x new tls %#03x\n", > >> >> + lnkctl2, tls); > >> >> + > >> >> pcie_capability_read_word(parent, PCI_EXP_LNKCTL, ®16); > >> >> reg16 |= PCI_EXP_LNKCTL_RL; > >> >> pcie_capability_write_word(parent, PCI_EXP_LNKCTL, reg16); > >> >> @@ -227,6 +248,8 @@ static bool pcie_retrain_link(struct pcie_link_state *link) > >> >> break; > >> >> msleep(1); > >> >> } while (time_before(jiffies, end_jiffies)); > >> >> + pci_info(parent, "lnksta %#06x new cls %#03x\n", > >> >> + lnksta, (cls & PCI_EXP_LNKSTA_CLS)); > >> >> return !(reg16 & PCI_EXP_LNKSTA_LT); > >> >> } > >> >> > >> > > >> > Still exhibiting the BAR update error, run tested with next--20201030 > >> > >> Yup, same for me :( I'm answering my own question. This code does not work on Omnia because A38x pci-mvebu.c driver is using emulator for PCIe root bridge and it does not implement PCI_EXP_LNKCTL2 and PCI_EXP_LNKCTL2 registers. So code for forcing link speed has no effect on Omnia... > > So then it is different issue and not similar to aardvark one. ... and therefore it can be still same issue which I have debugged on aardvark. > > Anyway, was ASPM working on some previous kernel version? Or was it > > always broken on Turris Omnia? > > I tried bisecting and couldn't find a commit that worked. And OpenWrt by > default builds with ASPM off, so my best guess is that it was always > broken. I see and it makes sense that it does not work in any version. > However, the two other PCI slots *do* work with ASPM on, as long as > they're both occupied when booting. If I only have one card installed > apart from the dodge WLE900, both of them fail... > > > And has somebody other Armada 385 device with mPCIe slots to test if > > ASPM is working? Or any other 32bit Marvell Armada SOC? > > > > I would like to know if this is issue only on Turris Omnia or also on > > other Armada 385 SOC device or even on any other device which uses > > pci-mvebu.c driver. > > See above: It does partly work on my Omnia. Is it possible to define a > quirk to just disable it on a per-slot basis for the WLE900 card? Maybe > just doing that and calling it a day would be enough... > > -Toke > Toke, can you try to put this WLE900 card into some x86 computer and check if this card works? With ASPM enabled and also with ASPM disabled? Or into any other device which does not have Marvell PCIe controller? I need to know if problem is with this WLE900 card or with Marvell's PCIe controllers. And based on it I can prepare quirk / hook for either WLE900 card or for Marvell PCIe drivers (or both, based on how it is broken). PS for all: Please do not put fancy unicode characters into email From: header as such email would be marked as spam and automatically filtered. 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 X-Spam-Level: X-Spam-Status: No, score=-10.7 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 57BC1C433E0 for ; Mon, 15 Mar 2021 19:59:48 +0000 (UTC) Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) (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 8F2DE64E83 for ; Mon, 15 Mar 2021 19:59:47 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8F2DE64E83 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=kernel.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=desiato.20200630; 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=oWUDq5QMAwB94wiZM1C6l6VdgIkxQ6puiHzFdMZQotI=; b=Nko0DkQuAg1Z0FCnPAc1lNpfo wviqJ1elPzCOf8BhfMuvKx9xSfwn5ei37TxBZ4WGPcGmBRVd8xFEVuxbTKQP4plvcRkg4di36SwR0 VOCYosy5EsfDkhsOxeV/JxRsOWVrJXJ2bTHdj6V3xCxD+iGCM/ROAROf1+OPIy0+Ne/psPjpqY5ZO ALe6n59hn0F3EVC/990LpU0MSoqiArw0lQvDj8ZxklFLAKxQ9jzFoABW2nwi6HBeIShiHmRlc/1uu FCANOorWpHOL0gh/4kRLlzpZZiTLcWIbqh01PR10Eof49mNh+15TkzrhTuVRVayBjMily/XiF4HTP TlZEnE/fQ==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lLtLz-00GoPP-Rb; Mon, 15 Mar 2021 19:58:15 +0000 Received: from mail.kernel.org ([198.145.29.99]) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lLtLv-00GoOq-8p for linux-arm-kernel@lists.infradead.org; Mon, 15 Mar 2021 19:58:13 +0000 Received: by mail.kernel.org (Postfix) with ESMTPSA id 7271E64EB9; Mon, 15 Mar 2021 19:58:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1615838289; bh=5zzvi1tBQA3+VE5Dazrz3QA09vEWmVFXyrYB+PNEe+o=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=cjKN2G1tuATT2qCgstRDpDM6BDVUnFN+VzbpTSRlqf7MdoknP7Yg4mycU+iGDu+AA 6u/1HxpD/gHCCxGwNYCFwCD16JKrAcxyAkETJtjS7gxo0YGGQSi7mNBaONQJNz0Fow iwGtyJW0it+fLpxaG70j+Lsu04uxJaq2/Gb70TZSVpFBfWqgclbMV3T2nd37VVGxPH 8uV2+tiR3MJHXL3q4qXieqDql6dOQjT7sRLx95HA1oiTIh1wN94UFFfr8s5c7B6YfG rFOOBDrJbmKYl8lUEanP1JRvy+bV2l9N1/xP7ymSBNdRyBDXdoSu8NgZR7U0sWnc4s 3qcPoNJdrlpiw== Received: by pali.im (Postfix) id BA09E82E; Mon, 15 Mar 2021 20:58:06 +0100 (CET) Date: Mon, 15 Mar 2021 20:58:06 +0100 From: Pali =?utf-8?B?Um9ow6Fy?= To: Toke =?utf-8?Q?H=C3=B8iland-J=C3=B8rgensen?= Cc: vtolkm@gmail.com, Bjorn Helgaas , linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Rob Herring , Ilias Apalodimas , Marek =?utf-8?B?QmVow7pu?= , Thomas Petazzoni , Jason Cooper Subject: Re: PCI trouble on mvebu (Turris Omnia) Message-ID: <20210315195806.iqdt5wvvkvpmnep7@pali> References: <2fb69e2a-4423-2b04-cd0f-ca819092bc5f@gmail.com> <20201028231626.GA344207@bjorn-Precision-5520> <20201030112331.meqg6lvultyn6v54@pali> <87k0v7n9y9.fsf@toke.dk> <20201030142337.yushrdcuecycfhcu@pali> <87zh42lfv6.fsf@toke.dk> <20201102152403.4jlmcaqkqeivuypm@pali> <877dr3lpok.fsf@toke.dk> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <877dr3lpok.fsf@toke.dk> User-Agent: NeoMutt/20180716 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210315_195811_727402_4A584D10 X-CRM114-Status: GOOD ( 44.39 ) 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 T24gTW9uZGF5IDAyIE5vdmVtYmVyIDIwMjAgMTY6NTQ6MzUgVG9rZSBIw7hpbGFuZC1Kw7hyZ2Vu c2VuIHdyb3RlOgo+IFBhbGkgUm9ow6FyIDxwYWxpQGtlcm5lbC5vcmc+IHdyaXRlczoKPiAKPiA+ IE9uIFNhdHVyZGF5IDMxIE9jdG9iZXIgMjAyMCAxMzo0OTo0OSBUb2tlIEjDuGlsYW5kLUrDuHJn ZW5zZW4gd3JvdGU6Cj4gPj4gIuKEotaf4pi70ofMrSDRvCDSiSDCriIgPHZ0b2xrbUBnb29nbGVt YWlsLmNvbT4gd3JpdGVzOgo+ID4+IAo+ID4+ID4gT24gMzAvMTAvMjAyMCAxNToyMywgUGFsaSBS b2jDoXIgd3JvdGU6Cj4gPj4gPj4gT24gRnJpZGF5IDMwIE9jdG9iZXIgMjAyMCAxNDowMjoyMiBU b2tlIEjDuGlsYW5kLUrDuHJnZW5zZW4gd3JvdGU6Cj4gPj4gPj4+IFBhbGkgUm9ow6FyIDxwYWxp QGtlcm5lbC5vcmc+IHdyaXRlczoKPiA+PiA+Pj4+IE15IGV4cGVyaWVuY2Ugd2l0aCB0aGF0IFdM RTkwMFZYIGNhcmQsIGFhcmR2YXJrIGRyaXZlciBhbmQgYXNwbSBjb2RlOgo+ID4+ID4+Pj4KPiA+ PiA+Pj4+IExpbmsgdHJhaW5pbmcgaW4gR0VOMiBtb2RlIGZvciB0aGlzIGNhcmQgc3VjY2VlZCBv bmx5IG9uY2UgYWZ0ZXIgcmVzZXQuCj4gPj4gPj4+PiBSZXBlYXRlZCBsaW5rIHJldHJhaW5pbmcg ZmFpbHMgYW5kIGl0IGZhaWxzIGV2ZW4gd2hlbiBhYXJkdmFyayBpcwo+ID4+ID4+Pj4gcmVjb25m aWd1cmVkIHRvIEdFTjEgbW9kZS4gUmVzZXQgdmlhIFBFUlNUIyBzaWduYWwgaXMgcmVxdWlyZWQg dG8gaGF2ZQo+ID4+ID4+Pj4gd29ya2luZyBsaW5rIHRyYWluaW5nLgo+ID4+ID4+Pj4KPiA+PiA+ Pj4+IFdoYXQgSSBkaWQgaW4gYWFyZHZhcmsgZHJpdmVyOiBTZXQgbW9kZSB0byBHRU4yLCBkbyBs aW5rIHRyYWluaW5nLiBJZgo+ID4+ID4+Pj4gc3VjY2VzcyByZWFkICJuZWdvdGlhdGVkIGxpbmsg c3BlZWQiIGZyb20gIkxpbmsgQ29udHJvbCBTdGF0dXMgUmVnaXN0ZXIiCj4gPj4gPj4+PiAoZm9y IFdMRTkwMFZYIGl0IGlzIDB4MSAtIEdFTjEpIGFuZCBzZXQgaXQgaW50byBhYXJkdmFyay4gQW5k IHRoZW4KPiA+PiA+Pj4+IHJldHJhaW4gbGluayBhZ2FpbiAoZm9yIFdMRTkwMFZYIG5vdyBpdCB3 b3VsZCBiZSBhdCBHRU4xKS4gQWZ0ZXIgdGhhdAo+ID4+ID4+Pj4gY2FyZCBpcyBzdGFibGUgYW5k IGFsbCBmdXR1cmUgcmV0cmFpbmluZyAoZS5nLiBmcm9tIGFzcG0uYykgYWxzbyBwYXNzZXMuCj4g Pj4gPj4+Pgo+ID4+ID4+Pj4gSWYgSSBkbyBub3QgY2hhbmdlIGFhcmR2YXJrIG1vZGUgZnJvbSBH RU4yIHRvIEdFTjEgdGhlIHNlY29uZCBsaW5rCj4gPj4gPj4+PiB0cmFpbmluZyBmYWlscy4gQW5k IGlmIEkgY2hhbmdlIG1vZGUgdG8gR0VOMSBhZnRlciB0aGlzIGZhaWxlZCBsaW5rCj4gPj4gPj4+ PiB0cmFpbmluZyB0aGVuIG5vdGhpbmcgaGFwcGVuLCBsaW5rIHRyYWluaW5nIGRvIG5vdCBzdWNj ZXNzLgo+ID4+ID4+Pj4KPiA+PiA+Pj4+IFNvIGp1c3Qgc3BlY3VsYXRpb24gbm93Li4uIEluIGN1 cnJlbnQgc2V0dXAgaW5pdGlhbGl6YXRpb24gb2YgY2FyZCBkb2VzCj4gPj4gPj4+PiBvbmUgbGlu ayB0cmFpbmluZyBhdCBHRU4yLiBUaGVuIGFzcG0uYyBpcyBjYWxsZWQgd2hpY2ggaXMgZG9pbmcg c2Vjb25kCj4gPj4gPj4+PiBsaW5rIHJldHJhaW5pbmcgYXQgR0VOMi4gQW5kIGlmIGl0IGZhaWxz IHRoZW4gYmVsb3cgcGF0Y2ggaXNzdWUgdGhpcmQKPiA+PiA+Pj4+IGxpbmsgcmV0cmFpbmluZyBh dCBHRU4xLiBJZiBBMzh4L3BjaS1tdmVidSBoYXMgc2FtZSBwcm9ibGVtIGFzIGFhcmR2YXJrCj4g Pj4gPj4+PiB0aGVuIHNlY29uZCBsaW5rIHJldHJhaW5pbmcgbXVzdCBiZSBhdCBHRU4xIChub3Qg R0VOMikgdG8gd29ya2Fyb3VuZAo+ID4+ID4+Pj4gdGhpcyBpc3N1ZS4KPiA+PiA+Pj4+Cj4gPj4g Pj4+PiBCam9ybiwgVG9rZTogd2hhdCBhYm91dCB0cnlpbmcgdG8gaGFjayBhc3BtLmMgY29kZSB0 byBuZXZlciBkbyBsaW5rCj4gPj4gPj4+PiByZXRyYWluaW5nIGF0IEdFTjIgc3BlZWQ/IEFuZCBh bHdheXMgZm9yY2UgR0VOMSBzcGVlZCBwcmlvciBsaW5rCj4gPj4gPj4+PiB0cmFpbmluZz8KPiA+ PiA+Pj4gU291bmRzIGxpa2UgYSBwbGFuLiBJIHBva2VkIGFyb3VuZCBpbiBhc3BtLmMgYW5kIG11 c3QgY29uZmVzcyB0byBiZWluZyBhCj4gPj4gPj4+IGJpdCBsb3N0IGluIHRoZSBzb3VwIG9mIHJl Z2lzdGVycyA7KQo+ID4+ID4+Pgo+ID4+ID4+PiBTbyBpZiBvbmUgb2YgeW91IGNhbiBjb29rIHVw IGEgcGF0Y2gsIHRoYXQgd291bGQgYmUgbW9zdCBoZWxwZnVsIQo+ID4+ID4+IEkgbW9kaWZpZWQg Qmpvcm4ncyBwYXRjaCwgZXhwbGljaXRseSBzZXQgdGxzIHRvIDEgYW5kIGFkZGVkIGRlYnVnIGlu Zm8KPiA+PiA+PiBhYm91dCBjbHMgKGN1cnJlbnQgbGluayBzcGVlZCwgdGhhdCB3aGF0IGlzIHVz ZWQgYnkgYWFyZHZhcmspLiBJdCBpcwo+ID4+ID4+IHVudGVzdGVkLCBJIGp1c3QgdHJpZWQgdG8g Y29tcGlsZSBpdC4KPiA+PiA+Pgo+ID4+ID4+IENhbiB0cnkgaXQ/Cj4gPj4gPj4KPiA+PiA+PiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9hc3BtLmMgYi9kcml2ZXJzL3BjaS9wY2llL2Fz cG0uYwo+ID4+ID4+IGluZGV4IDI1M2MzMGNjMTk2Ny4uZjkzNGMwYjUyZjQxIDEwMDY0NAo+ID4+ ID4+IC0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvYXNwbS5jCj4gPj4gPj4gKysrIGIvZHJpdmVycy9w Y2kvcGNpZS9hc3BtLmMKPiA+PiA+PiBAQCAtMjA2LDYgKzIwNiwyNyBAQCBzdGF0aWMgYm9vbCBw Y2llX3JldHJhaW5fbGluayhzdHJ1Y3QgcGNpZV9saW5rX3N0YXRlICpsaW5rKQo+ID4+ID4+ICAg CXVuc2lnbmVkIGxvbmcgZW5kX2ppZmZpZXM7Cj4gPj4gPj4gICAJdTE2IHJlZzE2Owo+ID4+ID4+ ICAgCj4gPj4gPj4gKwl1MzIgbG5rY2FwMjsKPiA+PiA+PiArCXUxNiBsbmtzdGEsIGxua2N0bDIs IGNscywgdGxzOwo+ID4+ID4+ICsKPiA+PiA+PiArCXBjaWVfY2FwYWJpbGl0eV9yZWFkX2R3b3Jk KHBhcmVudCwgUENJX0VYUF9MTktDQVAyLCAmbG5rY2FwMik7Cj4gPj4gPj4gKwlwY2llX2NhcGFi aWxpdHlfcmVhZF93b3JkKHBhcmVudCwgUENJX0VYUF9MTktTVEEsICZsbmtzdGEpOwo+ID4+ID4+ ICsJcGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChwYXJlbnQsIFBDSV9FWFBfTE5LQ1RMMiwgJmxu a2N0bDIpOwo+ID4+ID4+ICsJY2xzID0gbG5rc3RhICYgUENJX0VYUF9MTktTVEFfQ0xTOwo+ID4+ ID4+ICsJdGxzID0gbG5rY3RsMiAmIFBDSV9FWFBfTE5LQ1RMMl9UTFM7Cj4gPj4gPj4gKwo+ID4+ ID4+ICsJcGNpX2luZm8ocGFyZW50LCAibG5rY2FwMiAlIzAxMHggc2xzICUjMDR4IGxua3N0YSAl IzA2eCBjbHMgJSMwM3ggbG5rY3RsMiAlIzA2eCB0bHMgJSMwM3hcbiIsCj4gPj4gPj4gKwkJbG5r Y2FwMiwgKGxua2NhcDIgJiAweDNGKSA+PiAxLAo+ID4+ID4+ICsJCWxua3N0YSwgY2xzLAo+ID4+ ID4+ICsJCWxua2N0bDIsIHRscyk7Cj4gPj4gPj4gKwo+ID4+ID4+ICsJdGxzID0gMTsKPiA+PiA+ PiArCXBjaWVfY2FwYWJpbGl0eV9jbGVhcl9hbmRfc2V0X3dvcmQocGFyZW50LCBQQ0lfRVhQX0xO S0NUTDIsCj4gPj4gPj4gKwkJCQkJUENJX0VYUF9MTktDVEwyX1RMUywgdGxzKTsKPiA+PiA+PiAr CXBjaWVfY2FwYWJpbGl0eV9yZWFkX3dvcmQocGFyZW50LCBQQ0lfRVhQX0xOS0NUTDIsICZsbmtj dGwyKTsKPiA+PiA+PiArCXBjaV9pbmZvKHBhcmVudCwgImxua2N0bDIgJSMwMTB4IG5ldyB0bHMg JSMwM3hcbiIsCj4gPj4gPj4gKwkJbG5rY3RsMiwgdGxzKTsKPiA+PiA+PiArCj4gPj4gPj4gICAJ cGNpZV9jYXBhYmlsaXR5X3JlYWRfd29yZChwYXJlbnQsIFBDSV9FWFBfTE5LQ1RMLCAmcmVnMTYp Owo+ID4+ID4+ICAgCXJlZzE2IHw9IFBDSV9FWFBfTE5LQ1RMX1JMOwo+ID4+ID4+ICAgCXBjaWVf Y2FwYWJpbGl0eV93cml0ZV93b3JkKHBhcmVudCwgUENJX0VYUF9MTktDVEwsIHJlZzE2KTsKPiA+ PiA+PiBAQCAtMjI3LDYgKzI0OCw4IEBAIHN0YXRpYyBib29sIHBjaWVfcmV0cmFpbl9saW5rKHN0 cnVjdCBwY2llX2xpbmtfc3RhdGUgKmxpbmspCj4gPj4gPj4gICAJCQlicmVhazsKPiA+PiA+PiAg IAkJbXNsZWVwKDEpOwo+ID4+ID4+ICAgCX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGVu ZF9qaWZmaWVzKSk7Cj4gPj4gPj4gKwlwY2lfaW5mbyhwYXJlbnQsICJsbmtzdGEgJSMwNnggbmV3 IGNscyAlIzAzeFxuIiwKPiA+PiA+PiArCQlsbmtzdGEsIChjbHMgJiBQQ0lfRVhQX0xOS1NUQV9D TFMpKTsKPiA+PiA+PiAgIAlyZXR1cm4gIShyZWcxNiAmIFBDSV9FWFBfTE5LU1RBX0xUKTsKPiA+ PiA+PiAgIH0KPiA+PiA+PiAgIAo+ID4+ID4KPiA+PiA+IFN0aWxsIGV4aGliaXRpbmcgdGhlIEJB UiB1cGRhdGUgZXJyb3IsIHJ1biB0ZXN0ZWQgd2l0aCBuZXh0LS0yMDIwMTAzMAo+ID4+IAo+ID4+ IFl1cCwgc2FtZSBmb3IgbWUgOigKCkknbSBhbnN3ZXJpbmcgbXkgb3duIHF1ZXN0aW9uLiBUaGlz IGNvZGUgZG9lcyBub3Qgd29yayBvbiBPbW5pYSBiZWNhdXNlCkEzOHggcGNpLW12ZWJ1LmMgZHJp dmVyIGlzIHVzaW5nIGVtdWxhdG9yIGZvciBQQ0llIHJvb3QgYnJpZGdlIGFuZCBpdApkb2VzIG5v dCBpbXBsZW1lbnQgUENJX0VYUF9MTktDVEwyIGFuZCBQQ0lfRVhQX0xOS0NUTDIgcmVnaXN0ZXJz LiBTbwpjb2RlIGZvciBmb3JjaW5nIGxpbmsgc3BlZWQgaGFzIG5vIGVmZmVjdCBvbiBPbW5pYS4u LgoKPiA+IFNvIHRoZW4gaXQgaXMgZGlmZmVyZW50IGlzc3VlIGFuZCBub3Qgc2ltaWxhciB0byBh YXJkdmFyayBvbmUuCgouLi4gYW5kIHRoZXJlZm9yZSBpdCBjYW4gYmUgc3RpbGwgc2FtZSBpc3N1 ZSB3aGljaCBJIGhhdmUgZGVidWdnZWQgb24KYWFyZHZhcmsuCgo+ID4gQW55d2F5LCB3YXMgQVNQ TSB3b3JraW5nIG9uIHNvbWUgcHJldmlvdXMga2VybmVsIHZlcnNpb24/IE9yIHdhcyBpdAo+ID4g YWx3YXlzIGJyb2tlbiBvbiBUdXJyaXMgT21uaWE/Cj4gCj4gSSB0cmllZCBiaXNlY3RpbmcgYW5k IGNvdWxkbid0IGZpbmQgYSBjb21taXQgdGhhdCB3b3JrZWQuIEFuZCBPcGVuV3J0IGJ5Cj4gZGVm YXVsdCBidWlsZHMgd2l0aCBBU1BNIG9mZiwgc28gbXkgYmVzdCBndWVzcyBpcyB0aGF0IGl0IHdh cyBhbHdheXMKPiBicm9rZW4uCgpJIHNlZSBhbmQgaXQgbWFrZXMgc2Vuc2UgdGhhdCBpdCBkb2Vz IG5vdCB3b3JrIGluIGFueSB2ZXJzaW9uLgoKPiBIb3dldmVyLCB0aGUgdHdvIG90aGVyIFBDSSBz bG90cyAqZG8qIHdvcmsgd2l0aCBBU1BNIG9uLCBhcyBsb25nIGFzCj4gdGhleSdyZSBib3RoIG9j Y3VwaWVkIHdoZW4gYm9vdGluZy4gSWYgSSBvbmx5IGhhdmUgb25lIGNhcmQgaW5zdGFsbGVkCj4g YXBhcnQgZnJvbSB0aGUgZG9kZ2UgV0xFOTAwLCBib3RoIG9mIHRoZW0gZmFpbC4uLgo+IAo+ID4g QW5kIGhhcyBzb21lYm9keSBvdGhlciBBcm1hZGEgMzg1IGRldmljZSB3aXRoIG1QQ0llIHNsb3Rz IHRvIHRlc3QgaWYKPiA+IEFTUE0gaXMgd29ya2luZz8gT3IgYW55IG90aGVyIDMyYml0IE1hcnZl bGwgQXJtYWRhIFNPQz8KPiA+Cj4gPiBJIHdvdWxkIGxpa2UgdG8ga25vdyBpZiB0aGlzIGlzIGlz c3VlIG9ubHkgb24gVHVycmlzIE9tbmlhIG9yIGFsc28gb24KPiA+IG90aGVyIEFybWFkYSAzODUg U09DIGRldmljZSBvciBldmVuIG9uIGFueSBvdGhlciBkZXZpY2Ugd2hpY2ggdXNlcwo+ID4gcGNp LW12ZWJ1LmMgZHJpdmVyLgo+IAo+IFNlZSBhYm92ZTogSXQgZG9lcyBwYXJ0bHkgd29yayBvbiBt eSBPbW5pYS4gSXMgaXQgcG9zc2libGUgdG8gZGVmaW5lIGEKPiBxdWlyayB0byBqdXN0IGRpc2Fi bGUgaXQgb24gYSBwZXItc2xvdCBiYXNpcyBmb3IgdGhlIFdMRTkwMCBjYXJkPyBNYXliZQo+IGp1 c3QgZG9pbmcgdGhhdCBhbmQgY2FsbGluZyBpdCBhIGRheSB3b3VsZCBiZSBlbm91Z2guLi4KPiAK PiAtVG9rZQo+IAoKVG9rZSwgY2FuIHlvdSB0cnkgdG8gcHV0IHRoaXMgV0xFOTAwIGNhcmQgaW50 byBzb21lIHg4NiBjb21wdXRlciBhbmQKY2hlY2sgaWYgdGhpcyBjYXJkIHdvcmtzPyBXaXRoIEFT UE0gZW5hYmxlZCBhbmQgYWxzbyB3aXRoIEFTUE0gZGlzYWJsZWQ/Ck9yIGludG8gYW55IG90aGVy IGRldmljZSB3aGljaCBkb2VzIG5vdCBoYXZlIE1hcnZlbGwgUENJZSBjb250cm9sbGVyPwoKSSBu ZWVkIHRvIGtub3cgaWYgcHJvYmxlbSBpcyB3aXRoIHRoaXMgV0xFOTAwIGNhcmQgb3Igd2l0aCBN YXJ2ZWxsJ3MKUENJZSBjb250cm9sbGVycy4gQW5kIGJhc2VkIG9uIGl0IEkgY2FuIHByZXBhcmUg cXVpcmsgLyBob29rIGZvciBlaXRoZXIKV0xFOTAwIGNhcmQgb3IgZm9yIE1hcnZlbGwgUENJZSBk cml2ZXJzIChvciBib3RoLCBiYXNlZCBvbiBob3cgaXQgaXMKYnJva2VuKS4KCgpQUyBmb3IgYWxs OiBQbGVhc2UgZG8gbm90IHB1dCBmYW5jeSB1bmljb2RlIGNoYXJhY3RlcnMgaW50byBlbWFpbCBG cm9tOgpoZWFkZXIgYXMgc3VjaCBlbWFpbCB3b3VsZCBiZSBtYXJrZWQgYXMgc3BhbSBhbmQgYXV0 b21hdGljYWxseSBmaWx0ZXJlZC4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJu ZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK