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 AD637C4345F for ; Sat, 27 Apr 2024 02:24:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:In-Reply-To: Content-Transfer-Encoding:Content-Type: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=LR/N8sOjphbjY7ylgbYn/+iB6DYtb+qs9Q0b8OwvBnQ=; b=BnxHHLVaTddwNQ5CXE1GDCI9ML RRwpm3bMlevYz7b5HuLA0ZGvJ+BTX97akPpQhCUwpn4wQOmjSIITBFSSdBUCb+8nk41mWChG3MgMc cAvsqW90oSNdp38rcKTm8jYFuDXt98HDte2w3ES73PSRT+fkgxGM8j67EcF1hBQlgAO3xqlUOdq3s MA/idKE9xLP5tCaDuMul5sDPSDVRDh9d9oVgjFoj1Ug/2HRNBq2rMBjGK9bwrrFdRuRHa9vs/7DvA e/7nT4QcZdqT/9RHsgLVbnF/D5rUwwgNM0UFolMA3+28R8vex4CqqaRsFKzTBhtChe96f5T7KKeHg XNnOQflQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1s0Xk1-0000000EeQU-39MJ; Sat, 27 Apr 2024 02:24:41 +0000 Received: from pidgin.makrotopia.org ([2a07:2ec0:3002::65]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1s0Xjy-0000000EePk-38Lf; Sat, 27 Apr 2024 02:24:40 +0000 Received: from local by pidgin.makrotopia.org with esmtpsa (TLS1.3:TLS_AES_256_GCM_SHA384:256) (Exim 4.97.1) (envelope-from ) id 1s0Xjl-000000006AF-2noj; Sat, 27 Apr 2024 02:24:25 +0000 Date: Sat, 27 Apr 2024 03:24:18 +0100 From: Daniel Golle To: arinc.unal@arinc9.com Cc: DENG Qingfang , Sean Wang , Andrew Lunn , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Matthias Brugger , AngeloGioacchino Del Regno , Russell King , Bartel Eerdekens , mithat.guner@xeront.com, erkin.bozoglu@xeront.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org Subject: Re: [PATCH net-next v2 07/15] net: dsa: mt7530: move MT753X_MTRAP operations for MT7530 Message-ID: References: <20240422-for-netnext-mt7530-improvements-4-v2-0-a75157ba76ad@arinc9.com> <20240422-for-netnext-mt7530-improvements-4-v2-7-a75157ba76ad@arinc9.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20240422-for-netnext-mt7530-improvements-4-v2-7-a75157ba76ad@arinc9.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240426_192438_851283_6655B8E2 X-CRM114-Status: GOOD ( 32.08 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org Hi Arınç, On Mon, Apr 22, 2024 at 10:15:14AM +0300, Arınç ÜNAL via B4 Relay wrote: > From: Arınç ÜNAL > > On MT7530, the media-independent interfaces of port 5 and 6 are controlled > by the MT7530_P5_DIS and MT7530_P6_DIS bits of the hardware trap. Deal with > these bits only when the relevant port is being enabled or disabled. This > ensures that these ports will be disabled when they are not in use. > > Do not set MT7530_CHG_TRAP on mt7530_setup_port5() as that's already being > done on mt7530_setup(). Multiple users reported ([1], [2]) that after I've imported the series to OpenWrt they noticed that WAN connection on MT7621 boards using PHY-muxing to hook up either port 0 or port 4 to GMAC1 no longer works. The link still seems to come up, but no data flows. I went ahead and confirmed the bug, then started bisecting the patches of this series, and ended up identifying this very patch being the culprit. I can't exclude that what ever the issue may be is caused by other downstream patches we have, but can confirm that removing this patch of your series [3] in OpenWrt fixes the issue. Please take a look and as the cover letter states you have tested this on some MT7621 board, please make sure traffic actually flows on the PHY-muxed port on that board after this patch is applied, and if not, please figure out why and repost a fixed version of this patch. Cheers Daniel [1]: https://github.com/openwrt/openwrt/issues/15273 [2]: https://github.com/openwrt/openwrt/issues/15279 [3]: https://git.openwrt.org/?p=openwrt/openwrt.git;a=commit;h=a8dde7e5bd6d289db6485cf57d3512ea62eaa827 > > Instead of globally setting MT7530_P5_MAC_SEL, clear it, then set it only > on the appropriate case. > > If PHY muxing is detected, clear MT7530_P5_DIS before calling > mt7530_setup_port5(). > > Signed-off-by: Arınç ÜNAL > --- > drivers/net/dsa/mt7530.c | 38 +++++++++++++++++++++++++++----------- > 1 file changed, 27 insertions(+), 11 deletions(-) > > diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c > index 606516206fb9..83436723cb16 100644 > --- a/drivers/net/dsa/mt7530.c > +++ b/drivers/net/dsa/mt7530.c > @@ -880,8 +880,7 @@ static void mt7530_setup_port5(struct dsa_switch *ds, phy_interface_t interface) > > val = mt7530_read(priv, MT753X_MTRAP); > > - val |= MT7530_CHG_TRAP | MT7530_P5_MAC_SEL | MT7530_P5_DIS; > - val &= ~MT7530_P5_RGMII_MODE & ~MT7530_P5_PHY0_SEL; > + val &= ~MT7530_P5_PHY0_SEL & ~MT7530_P5_MAC_SEL & ~MT7530_P5_RGMII_MODE; > > switch (priv->p5_mode) { > /* MUX_PHY_P0: P0 -> P5 -> SoC MAC */ > @@ -891,15 +890,13 @@ static void mt7530_setup_port5(struct dsa_switch *ds, phy_interface_t interface) > > /* MUX_PHY_P4: P4 -> P5 -> SoC MAC */ > case MUX_PHY_P4: > - val &= ~MT7530_P5_MAC_SEL & ~MT7530_P5_DIS; > - > /* Setup the MAC by default for the cpu port */ > mt7530_write(priv, MT753X_PMCR_P(5), 0x56300); > break; > > /* GMAC5: P5 -> SoC MAC or external PHY */ > default: > - val &= ~MT7530_P5_DIS; > + val |= MT7530_P5_MAC_SEL; > break; > } > > @@ -1193,6 +1190,14 @@ mt7530_port_enable(struct dsa_switch *ds, int port, > > mutex_unlock(&priv->reg_mutex); > > + if (priv->id != ID_MT7530 && priv->id != ID_MT7621) > + return 0; > + > + if (port == 5) > + mt7530_clear(priv, MT753X_MTRAP, MT7530_P5_DIS); > + else if (port == 6) > + mt7530_clear(priv, MT753X_MTRAP, MT7530_P6_DIS); > + > return 0; > } > > @@ -1211,6 +1216,14 @@ mt7530_port_disable(struct dsa_switch *ds, int port) > PCR_MATRIX_CLR); > > mutex_unlock(&priv->reg_mutex); > + > + if (priv->id != ID_MT7530 && priv->id != ID_MT7621) > + return; > + > + if (port == 5) > + mt7530_set(priv, MT753X_MTRAP, MT7530_P5_DIS); > + else if (port == 6) > + mt7530_set(priv, MT753X_MTRAP, MT7530_P6_DIS); > } > > static int > @@ -2401,11 +2414,11 @@ mt7530_setup(struct dsa_switch *ds) > mt7530_rmw(priv, MT7530_TRGMII_RD(i), > RD_TAP_MASK, RD_TAP(16)); > > - /* Enable port 6 */ > - val = mt7530_read(priv, MT753X_MTRAP); > - val &= ~MT7530_P6_DIS & ~MT7530_PHY_INDIRECT_ACCESS; > - val |= MT7530_CHG_TRAP; > - mt7530_write(priv, MT753X_MTRAP, val); > + /* Allow modifying the trap and directly access PHY registers via the > + * MDIO bus the switch is on. > + */ > + mt7530_rmw(priv, MT753X_MTRAP, MT7530_CHG_TRAP | > + MT7530_PHY_INDIRECT_ACCESS, MT7530_CHG_TRAP); > > if ((val & MT7530_XTAL_MASK) == MT7530_XTAL_40MHZ) > mt7530_pll_setup(priv); > @@ -2488,8 +2501,11 @@ mt7530_setup(struct dsa_switch *ds) > break; > } > > - if (priv->p5_mode == MUX_PHY_P0 || priv->p5_mode == MUX_PHY_P4) > + if (priv->p5_mode == MUX_PHY_P0 || > + priv->p5_mode == MUX_PHY_P4) { > + mt7530_clear(priv, MT753X_MTRAP, MT7530_P5_DIS); > mt7530_setup_port5(ds, interface); > + } > } > > #ifdef CONFIG_GPIOLIB > > -- > 2.40.1 > > 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 8F4DAC4345F for ; Sat, 27 Apr 2024 02:24:59 +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=0BEz1CY2w4v18s1eCh3EunSvNEEdIWZ+80OVWBJ/oOQ=; b=bx0ga13ZrgrqIZ 4qsHCtCrHJpLaBc4Ft+vZaIVebShom1g5o8eF6WIEk3JPc35bDJkMe8T7DQDwBiavLayMDGFeyVmG Y205q7nTYUuv96wpaWt5lLAq+cDap9zmO/XNkNE52+Yx0R8QC3cAJQnLYsceynZFRCsiszCFdKbr4 JYIYWafIiSpNTdPoE0xXjLd68BU56U3JdnWbekZJ/HqVlYcKw5OO8x1yzdoAjvldIppmlRUoId6VW uhhl/AFWtZrJHlNyPbMq8Enr/a+nvdsIKBi9bBLckKii8bo7Qyv83Ff+k9p3GAcyhqPrT8232bSVE In0v0uphORpRsbSwj/+Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1s0Xk0-0000000EeQQ-3upA; Sat, 27 Apr 2024 02:24:40 +0000 Received: from pidgin.makrotopia.org ([2a07:2ec0:3002::65]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1s0Xjy-0000000EePk-38Lf; Sat, 27 Apr 2024 02:24:40 +0000 Received: from local by pidgin.makrotopia.org with esmtpsa (TLS1.3:TLS_AES_256_GCM_SHA384:256) (Exim 4.97.1) (envelope-from ) id 1s0Xjl-000000006AF-2noj; Sat, 27 Apr 2024 02:24:25 +0000 Date: Sat, 27 Apr 2024 03:24:18 +0100 From: Daniel Golle To: arinc.unal@arinc9.com Cc: DENG Qingfang , Sean Wang , Andrew Lunn , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Matthias Brugger , AngeloGioacchino Del Regno , Russell King , Bartel Eerdekens , mithat.guner@xeront.com, erkin.bozoglu@xeront.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org Subject: Re: [PATCH net-next v2 07/15] net: dsa: mt7530: move MT753X_MTRAP operations for MT7530 Message-ID: References: <20240422-for-netnext-mt7530-improvements-4-v2-0-a75157ba76ad@arinc9.com> <20240422-for-netnext-mt7530-improvements-4-v2-7-a75157ba76ad@arinc9.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20240422-for-netnext-mt7530-improvements-4-v2-7-a75157ba76ad@arinc9.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240426_192438_851283_6655B8E2 X-CRM114-Status: GOOD ( 32.08 ) 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 SGkgQXLEsW7DpywKCk9uIE1vbiwgQXByIDIyLCAyMDI0IGF0IDEwOjE1OjE0QU0gKzAzMDAsIEFy xLFuw6cgw5xOQUwgdmlhIEI0IFJlbGF5IHdyb3RlOgo+IEZyb206IEFyxLFuw6cgw5xOQUwgPGFy aW5jLnVuYWxAYXJpbmM5LmNvbT4KPiAKPiBPbiBNVDc1MzAsIHRoZSBtZWRpYS1pbmRlcGVuZGVu dCBpbnRlcmZhY2VzIG9mIHBvcnQgNSBhbmQgNiBhcmUgY29udHJvbGxlZAo+IGJ5IHRoZSBNVDc1 MzBfUDVfRElTIGFuZCBNVDc1MzBfUDZfRElTIGJpdHMgb2YgdGhlIGhhcmR3YXJlIHRyYXAuIERl YWwgd2l0aAo+IHRoZXNlIGJpdHMgb25seSB3aGVuIHRoZSByZWxldmFudCBwb3J0IGlzIGJlaW5n IGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMKPiBlbnN1cmVzIHRoYXQgdGhlc2UgcG9ydHMgd2ls bCBiZSBkaXNhYmxlZCB3aGVuIHRoZXkgYXJlIG5vdCBpbiB1c2UuCj4gCj4gRG8gbm90IHNldCBN VDc1MzBfQ0hHX1RSQVAgb24gbXQ3NTMwX3NldHVwX3BvcnQ1KCkgYXMgdGhhdCdzIGFscmVhZHkg YmVpbmcKPiBkb25lIG9uIG10NzUzMF9zZXR1cCgpLgoKTXVsdGlwbGUgdXNlcnMgcmVwb3J0ZWQg KFsxXSwgWzJdKSB0aGF0IGFmdGVyIEkndmUgaW1wb3J0ZWQgdGhlIHNlcmllcwp0byBPcGVuV3J0 IHRoZXkgbm90aWNlZCB0aGF0IFdBTiBjb25uZWN0aW9uIG9uIE1UNzYyMSBib2FyZHMgdXNpbmcK UEhZLW11eGluZyB0byBob29rIHVwIGVpdGhlciBwb3J0IDAgb3IgcG9ydCA0IHRvIEdNQUMxIG5v IGxvbmdlciB3b3Jrcy4KClRoZSBsaW5rIHN0aWxsIHNlZW1zIHRvIGNvbWUgdXAsIGJ1dCBubyBk YXRhIGZsb3dzLiBJIHdlbnQgYWhlYWQgYW5kCmNvbmZpcm1lZCB0aGUgYnVnLCB0aGVuIHN0YXJ0 ZWQgYmlzZWN0aW5nIHRoZSBwYXRjaGVzIG9mIHRoaXMgc2VyaWVzLAphbmQgZW5kZWQgdXAgaWRl bnRpZnlpbmcgdGhpcyB2ZXJ5IHBhdGNoIGJlaW5nIHRoZSBjdWxwcml0LgoKSSBjYW4ndCBleGNs dWRlIHRoYXQgd2hhdCBldmVyIHRoZSBpc3N1ZSBtYXkgYmUgaXMgY2F1c2VkIGJ5IG90aGVyCmRv d25zdHJlYW0gcGF0Y2hlcyB3ZSBoYXZlLCBidXQgY2FuIGNvbmZpcm0gdGhhdCByZW1vdmluZyB0 aGlzIHBhdGNoIG9mCnlvdXIgc2VyaWVzIFszXSBpbiBPcGVuV3J0IGZpeGVzIHRoZSBpc3N1ZS4g UGxlYXNlIHRha2UgYSBsb29rIGFuZCBhcwp0aGUgY292ZXIgbGV0dGVyIHN0YXRlcyB5b3UgaGF2 ZSB0ZXN0ZWQgdGhpcyBvbiBzb21lIE1UNzYyMSBib2FyZCwKcGxlYXNlIG1ha2Ugc3VyZSB0cmFm ZmljIGFjdHVhbGx5IGZsb3dzIG9uIHRoZSBQSFktbXV4ZWQgcG9ydCBvbiB0aGF0CmJvYXJkIGFm dGVyIHRoaXMgcGF0Y2ggaXMgYXBwbGllZCwgYW5kIGlmIG5vdCwgcGxlYXNlIGZpZ3VyZSBvdXQg d2h5IGFuZApyZXBvc3QgYSBmaXhlZCB2ZXJzaW9uIG9mIHRoaXMgcGF0Y2guCgoKQ2hlZXJzCgoK RGFuaWVsCgpbMV06IGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVud3J0L29wZW53cnQvaXNzdWVzLzE1 MjczClsyXTogaHR0cHM6Ly9naXRodWIuY29tL29wZW53cnQvb3BlbndydC9pc3N1ZXMvMTUyNzkK WzNdOiBodHRwczovL2dpdC5vcGVud3J0Lm9yZy8/cD1vcGVud3J0L29wZW53cnQuZ2l0O2E9Y29t bWl0O2g9YThkZGU3ZTViZDZkMjg5ZGI2NDg1Y2Y1N2QzNTEyZWE2MmVhYTgyNwoKPiAKPiBJbnN0 ZWFkIG9mIGdsb2JhbGx5IHNldHRpbmcgTVQ3NTMwX1A1X01BQ19TRUwsIGNsZWFyIGl0LCB0aGVu IHNldCBpdCBvbmx5Cj4gb24gdGhlIGFwcHJvcHJpYXRlIGNhc2UuCj4gCj4gSWYgUEhZIG11eGlu ZyBpcyBkZXRlY3RlZCwgY2xlYXIgTVQ3NTMwX1A1X0RJUyBiZWZvcmUgY2FsbGluZwo+IG10NzUz MF9zZXR1cF9wb3J0NSgpLgo+IAo+IFNpZ25lZC1vZmYtYnk6IEFyxLFuw6cgw5xOQUwgPGFyaW5j LnVuYWxAYXJpbmM5LmNvbT4KPiAtLS0KPiAgZHJpdmVycy9uZXQvZHNhL210NzUzMC5jIHwgMzgg KysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KPiAgMSBmaWxlIGNoYW5nZWQs IDI3IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL25ldC9kc2EvbXQ3NTMwLmMgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMKPiBpbmRleCA2 MDY1MTYyMDZmYjkuLjgzNDM2NzIzY2IxNiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL25ldC9kc2Ev bXQ3NTMwLmMKPiArKysgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMKPiBAQCAtODgwLDggKzg4 MCw3IEBAIHN0YXRpYyB2b2lkIG10NzUzMF9zZXR1cF9wb3J0NShzdHJ1Y3QgZHNhX3N3aXRjaCAq ZHMsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpCj4gIAo+ICAJdmFsID0gbXQ3NTMwX3JlYWQo cHJpdiwgTVQ3NTNYX01UUkFQKTsKPiAgCj4gLQl2YWwgfD0gTVQ3NTMwX0NIR19UUkFQIHwgTVQ3 NTMwX1A1X01BQ19TRUwgfCBNVDc1MzBfUDVfRElTOwo+IC0JdmFsICY9IH5NVDc1MzBfUDVfUkdN SUlfTU9ERSAmIH5NVDc1MzBfUDVfUEhZMF9TRUw7Cj4gKwl2YWwgJj0gfk1UNzUzMF9QNV9QSFkw X1NFTCAmIH5NVDc1MzBfUDVfTUFDX1NFTCAmIH5NVDc1MzBfUDVfUkdNSUlfTU9ERTsKPiAgCj4g IAlzd2l0Y2ggKHByaXYtPnA1X21vZGUpIHsKPiAgCS8qIE1VWF9QSFlfUDA6IFAwIC0+IFA1IC0+ IFNvQyBNQUMgKi8KPiBAQCAtODkxLDE1ICs4OTAsMTMgQEAgc3RhdGljIHZvaWQgbXQ3NTMwX3Nl dHVwX3BvcnQ1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgcGh5X2ludGVyZmFjZV90IGludGVyZmFj ZSkKPiAgCj4gIAkvKiBNVVhfUEhZX1A0OiBQNCAtPiBQNSAtPiBTb0MgTUFDICovCj4gIAljYXNl IE1VWF9QSFlfUDQ6Cj4gLQkJdmFsICY9IH5NVDc1MzBfUDVfTUFDX1NFTCAmIH5NVDc1MzBfUDVf RElTOwo+IC0KPiAgCQkvKiBTZXR1cCB0aGUgTUFDIGJ5IGRlZmF1bHQgZm9yIHRoZSBjcHUgcG9y dCAqLwo+ICAJCW10NzUzMF93cml0ZShwcml2LCBNVDc1M1hfUE1DUl9QKDUpLCAweDU2MzAwKTsK PiAgCQlicmVhazsKPiAgCj4gIAkvKiBHTUFDNTogUDUgLT4gU29DIE1BQyBvciBleHRlcm5hbCBQ SFkgKi8KPiAgCWRlZmF1bHQ6Cj4gLQkJdmFsICY9IH5NVDc1MzBfUDVfRElTOwo+ICsJCXZhbCB8 PSBNVDc1MzBfUDVfTUFDX1NFTDsKPiAgCQlicmVhazsKPiAgCX0KPiAgCj4gQEAgLTExOTMsNiAr MTE5MCwxNCBAQCBtdDc1MzBfcG9ydF9lbmFibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQg cG9ydCwKPiAgCj4gIAltdXRleF91bmxvY2soJnByaXYtPnJlZ19tdXRleCk7Cj4gIAo+ICsJaWYg KHByaXYtPmlkICE9IElEX01UNzUzMCAmJiBwcml2LT5pZCAhPSBJRF9NVDc2MjEpCj4gKwkJcmV0 dXJuIDA7Cj4gKwo+ICsJaWYgKHBvcnQgPT0gNSkKPiArCQltdDc1MzBfY2xlYXIocHJpdiwgTVQ3 NTNYX01UUkFQLCBNVDc1MzBfUDVfRElTKTsKPiArCWVsc2UgaWYgKHBvcnQgPT0gNikKPiArCQlt dDc1MzBfY2xlYXIocHJpdiwgTVQ3NTNYX01UUkFQLCBNVDc1MzBfUDZfRElTKTsKPiArCj4gIAly ZXR1cm4gMDsKPiAgfQo+ICAKPiBAQCAtMTIxMSw2ICsxMjE2LDE0IEBAIG10NzUzMF9wb3J0X2Rp c2FibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCkKPiAgCQkgICBQQ1JfTUFUUklY X0NMUik7Cj4gIAo+ICAJbXV0ZXhfdW5sb2NrKCZwcml2LT5yZWdfbXV0ZXgpOwo+ICsKPiArCWlm IChwcml2LT5pZCAhPSBJRF9NVDc1MzAgJiYgcHJpdi0+aWQgIT0gSURfTVQ3NjIxKQo+ICsJCXJl dHVybjsKPiArCj4gKwlpZiAocG9ydCA9PSA1KQo+ICsJCW10NzUzMF9zZXQocHJpdiwgTVQ3NTNY X01UUkFQLCBNVDc1MzBfUDVfRElTKTsKPiArCWVsc2UgaWYgKHBvcnQgPT0gNikKPiArCQltdDc1 MzBfc2V0KHByaXYsIE1UNzUzWF9NVFJBUCwgTVQ3NTMwX1A2X0RJUyk7Cj4gIH0KPiAgCj4gIHN0 YXRpYyBpbnQKPiBAQCAtMjQwMSwxMSArMjQxNCwxMSBAQCBtdDc1MzBfc2V0dXAoc3RydWN0IGRz YV9zd2l0Y2ggKmRzKQo+ICAJCW10NzUzMF9ybXcocHJpdiwgTVQ3NTMwX1RSR01JSV9SRChpKSwK PiAgCQkJICAgUkRfVEFQX01BU0ssIFJEX1RBUCgxNikpOwo+ICAKPiAtCS8qIEVuYWJsZSBwb3J0 IDYgKi8KPiAtCXZhbCA9IG10NzUzMF9yZWFkKHByaXYsIE1UNzUzWF9NVFJBUCk7Cj4gLQl2YWwg Jj0gfk1UNzUzMF9QNl9ESVMgJiB+TVQ3NTMwX1BIWV9JTkRJUkVDVF9BQ0NFU1M7Cj4gLQl2YWwg fD0gTVQ3NTMwX0NIR19UUkFQOwo+IC0JbXQ3NTMwX3dyaXRlKHByaXYsIE1UNzUzWF9NVFJBUCwg dmFsKTsKPiArCS8qIEFsbG93IG1vZGlmeWluZyB0aGUgdHJhcCBhbmQgZGlyZWN0bHkgYWNjZXNz IFBIWSByZWdpc3RlcnMgdmlhIHRoZQo+ICsJICogTURJTyBidXMgdGhlIHN3aXRjaCBpcyBvbi4K PiArCSAqLwo+ICsJbXQ3NTMwX3Jtdyhwcml2LCBNVDc1M1hfTVRSQVAsIE1UNzUzMF9DSEdfVFJB UCB8Cj4gKwkJICAgTVQ3NTMwX1BIWV9JTkRJUkVDVF9BQ0NFU1MsIE1UNzUzMF9DSEdfVFJBUCk7 Cj4gIAo+ICAJaWYgKCh2YWwgJiBNVDc1MzBfWFRBTF9NQVNLKSA9PSBNVDc1MzBfWFRBTF80ME1I WikKPiAgCQltdDc1MzBfcGxsX3NldHVwKHByaXYpOwo+IEBAIC0yNDg4LDggKzI1MDEsMTEgQEAg bXQ3NTMwX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKPiAgCQkJYnJlYWs7Cj4gIAkJfQo+ ICAKPiAtCQlpZiAocHJpdi0+cDVfbW9kZSA9PSBNVVhfUEhZX1AwIHx8IHByaXYtPnA1X21vZGUg PT0gTVVYX1BIWV9QNCkKPiArCQlpZiAocHJpdi0+cDVfbW9kZSA9PSBNVVhfUEhZX1AwIHx8Cj4g KwkJICAgIHByaXYtPnA1X21vZGUgPT0gTVVYX1BIWV9QNCkgewo+ICsJCQltdDc1MzBfY2xlYXIo cHJpdiwgTVQ3NTNYX01UUkFQLCBNVDc1MzBfUDVfRElTKTsKPiAgCQkJbXQ3NTMwX3NldHVwX3Bv cnQ1KGRzLCBpbnRlcmZhY2UpOwo+ICsJCX0KPiAgCX0KPiAgCj4gICNpZmRlZiBDT05GSUdfR1BJ T0xJQgo+IAo+IC0tIAo+IDIuNDAuMQo+IAo+IAoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgt YXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3Jn L21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=