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 3D82CC25B74 for ; Thu, 30 May 2024 16:55:52 +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=E4Et8IsTqKEjB0VKgfn0i10/CIt14tSmicrHni37u2I=; b=d3jm5cu7Aok9MeVCtSXxwsEsYZ QlRsSmCgTVjaa+pj06QELx/DItAbkza7kHJ09ePeXH9+Kk/dlCSK4L5u9H32odd8lu9SgrCE2DzC+ 1XlwJIfGoHXz988nxe33+j3OuhrLwyf+p/A67Mofxyo1xSVo5BrJUcKjSH2IeZNX3v4gDRdM3oUt+ 92cJdl09X08xI+6gpCD0GKw+8+P0C7H7RQfdClXJcSYCymFkwQhHO6Tjk774bbWhegishDKCpAteR WgLAH2UW7jh2xDz4KT13HSo6zDr7Ayv6sOa5AVMYQFnyoX+mIkfllUsXx1GV0GAfhLwcRtlwFR9rZ tOwYheXQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sCj4B-00000007uWF-0osI; Thu, 30 May 2024 16:55:51 +0000 Received: from pandora.armlinux.org.uk ([2001:4d48:ad52:32c8:5054:ff:fe00:142]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sCj48-00000007uQz-2HtW; Thu, 30 May 2024 16:55:50 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=armlinux.org.uk; s=pandora-2019; h=Sender: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-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=E4Et8IsTqKEjB0VKgfn0i10/CIt14tSmicrHni37u2I=; b=vt1b5BwQEsBhb0MJSh/BT73Kob pGD5KZ7UtoJRwdt9gjlUj8jztY4K4pGKr5EvDoixdrgvaw7CbpFKyCZ+rdiQ9PTOz7HfZuOrmtQCN zIV1i5dNDY1ulh+YoaqNoKW8divQ2hc1oIA7joKQA1OsldI3mGB+02GgHb06FPdEbsloO4k9VzjyJ KFF9QGtLFp5kevCXlqIjr9lyr/3Opds0tBqYB+wfUvTnCwvwHSFE9rT19y2zyG+gTWlXJSP13BHkz VPO/55MX0M3JWR+4qGRtA0jF3xfay8wCJ9BlhRw4jXablECkDkVe21W6l9XiwkB09apvqUL+LfIFi JkDS50ew==; Received: from shell.armlinux.org.uk ([fd8f:7570:feb6:1:5054:ff:fe00:4ec]:34142) by pandora.armlinux.org.uk with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1sCj3p-0007dO-0b; Thu, 30 May 2024 17:55:29 +0100 Received: from linux by shell.armlinux.org.uk with local (Exim 4.94.2) (envelope-from ) id 1sCj3p-0005IQ-7e; Thu, 30 May 2024 17:55:29 +0100 Date: Thu, 30 May 2024 17:55:29 +0100 From: "Russell King (Oracle)" To: SkyLake Huang =?utf-8?B?KOm7g+WVn+a+pCk=?= Cc: "andrew@lunn.ch" , "linux-kernel@vger.kernel.org" , "linux-mediatek@lists.infradead.org" , "linux-arm-kernel@lists.infradead.org" , "kuba@kernel.org" , "pabeni@redhat.com" , "edumazet@google.com" , "netdev@vger.kernel.org" , "dqfext@gmail.com" , Steven Liu =?utf-8?B?KOWKieS6uuixqik=?= , "matthias.bgg@gmail.com" , "davem@davemloft.net" , "hkallweit1@gmail.com" , "daniel@makrotopia.org" , "angelogioacchino.delregno@collabora.com" Subject: Re: [PATCH net-next v5 5/5] net: phy: add driver for built-in 2.5G ethernet PHY on MT7988 Message-ID: References: <20240530034844.11176-1-SkyLake.Huang@mediatek.com> <20240530034844.11176-6-SkyLake.Huang@mediatek.com> <0707897b44cfbc479cd08a092829a8bfc480281b.camel@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <0707897b44cfbc479cd08a092829a8bfc480281b.camel@mediatek.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240530_095548_682099_1BABD93E X-CRM114-Status: GOOD ( 40.78 ) 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 On Thu, May 30, 2024 at 04:25:56PM +0000, SkyLake Huang (黃啟澤) wrote: > On Thu, 2024-05-30 at 11:35 +0100, Russell King (Oracle) wrote: > > > > External email : Please do not click links or open attachments until > > you have verified the sender or the content. > > On Thu, May 30, 2024 at 11:48:44AM +0800, Sky Huang wrote: > > > +static int mt798x_2p5ge_phy_config_aneg(struct phy_device *phydev) > > > +{ > > > +bool changed = false; > > > +u32 adv; > > > +int ret; > > > + > > > +/* In fact, if we disable autoneg, we can't link up correctly: > > > + * 2.5G/1G: Need AN to exchange master/slave information. > > > + * 100M: Without AN, link starts at half duplex(According to IEEE > > 802.3-2018), > > > + * which this phy doesn't support. > > > + * 10M: Deprecated in this ethernet phy. > > > + */ > > > +if (phydev->autoneg == AUTONEG_DISABLE) > > > +return -EOPNOTSUPP; > > > > We have another driver (stmmac) where a platform driver is wanting to > > put a hack in the ksettings_set() ethtool path to error out on > > disabling AN for 1G speeds. This sounds like something that is > > applicable to more than one hardware (and I've been wondering whether > > it is universally true that 1G copper links and faster all require > > AN to function.) > > > > Thus, I'm wondering whether this is something that the core code > > should > > be doing. > > > Yeah..As far as I know, 1G/2.5G/5G/10G speed require AN to decide > master/slave role. Actually I can use force mode by calling > genphy_c45_pma_set_forced, which will set correspoding C45 registers. > However, after that, this 2.5G PHY can't still link up with partners. > > I'll leave EOPNOTSUPP here temporarily. Hope phylib can be patched > someday. Please no. "someday" tends to never happen, and you're basically throwing the problem over the wall to other people to solve who then have to spot your hack and eventually remove it. We need this solved properly, not by people hacking drivers. This is open source, you can propose a patch to phylib to fix this for everyone. > > > +/* This phy can't handle collision, and neither can (XFI)MAC it's > > connected to. > > > + * Although it can do HDX handshake, it doesn't support CSMA/CD > > that HDX requires. > > > + */ > > > > What the MAC can and can't do really has little bearing on what link > > modes the PHY driver should be providing. It is the responsibility of > > the MAC driver to appropriately change what is supported when > > attaching > > to the PHY. If using phylink, this is done by phylink via the MAC > > driver > > telling phylink what it is capable of via mac_capabilities. > > > > > +static int mt798x_2p5ge_phy_get_rate_matching(struct phy_device > > *phydev, > > > + phy_interface_t iface) > > > +{ > > > +if (iface == PHY_INTERFACE_MODE_XGMII) > > > +return RATE_MATCH_PAUSE; > > > > You mention above XFI... > > > > XFI is 10GBASE-R protocol to XFP module electrical standards. > > SFI is 10GBASE-R protocol to SFP+ module electrical standards. > > > > phy_interface_t is interested in the protocol. So, given that you > > mention XFI, why doesn't this test for PHY_INTERFACE_MODE_10GBASER? > > > We have 2 XFI-MAC on mt7988 platform. One is connected to internal > 2.5Gphy(SoC built-in), as we discussed here (We don't test this phy for > 10G speed.) Another one is connected to external 10G phy. I can't parse your response in a meaningful way, to me it doesn't address my point. > > > > +static int mt798x_2p5ge_phy_probe(struct phy_device *phydev) > > > +{ > > > +struct mtk_i2p5ge_phy_priv *priv; > > > + > > > +priv = devm_kzalloc(&phydev->mdio.dev, > > > + sizeof(struct mtk_i2p5ge_phy_priv), GFP_KERNEL); > > > +if (!priv) > > > +return -ENOMEM; > > > + > > > +switch (phydev->drv->phy_id) { > > > +case MTK_2P5GPHY_ID_MT7988: > > > +/* The original hardware only sets MDIO_DEVS_PMAPMD */ > > > +phydev->c45_ids.mmds_present |= (MDIO_DEVS_PCS | MDIO_DEVS_AN | > > > + MDIO_DEVS_VEND1 | MDIO_DEVS_VEND2); > > > > No need for parens on the RHS. The RHS is an expression in its own > > right, and there's no point in putting parens around the expression > > to turn it into another expression! > > > > -- > > RMK's Patch system: https://www.armlinux.org.uk/developer/patches/ > > FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last! > > Do you mean these two line? > +phydev->c45_ids.mmds_present |= (MDIO_DEVS_PCS | MDIO_DEVS_AN | > + MDIO_DEVS_VEND1 | MDIO_DEVS_VEND2); > > What do you mean by "RHS is an expression in its own right"? > I put parens here to enhance readability so we don't need check > operator precedence again. |= one of the assignment operators, all of which have one of the lowest precedence. Only the , operator has a lower precedence. Therefore, everything except , has higher precedence. Therefore, the parens on the right hand side of |= make no difference. -- RMK's Patch system: https://www.armlinux.org.uk/developer/patches/ FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last! 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 B741DC27C44 for ; Thu, 30 May 2024 16:56:04 +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=wSRJk/TehLK2VcEd3b6KWT9/Aof9cfXPUa/FCXHKppc=; b=Gc2jWb4ddEUfJ0 mGi2i0KRxCLxFk9zytqD8jig+bYz8dicFKHwop92pGfw3Wg8ClQWkx+Q5tFATzKxRolaa0cYD7dj9 BLi9cZfPE4tzQq6RyHPlZcP8lkHogfVydbr4TzDvKBNn4OnWdV0z7qqjDouUELhiMMCVNNBKGhOGL hAcB97uBgIUEfiJcGCzE7vYD6/rrpkqD/UQB3Fh36Z5c+pwxaZgGAdAUa6NbqYDSUaP2R8aU6B6Eq zeB1cJmL45HvumHEgkZ4bAoo78AkzjQI57y0DcEP3M6PIDfSib4fegqAo6tcDWFBwoEjjr88xcZ0P bLxXYNmF4BGSBGG4rEFw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sCj4B-00000007uWM-2NL2; Thu, 30 May 2024 16:55:51 +0000 Received: from pandora.armlinux.org.uk ([2001:4d48:ad52:32c8:5054:ff:fe00:142]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sCj48-00000007uQz-2HtW; Thu, 30 May 2024 16:55:50 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=armlinux.org.uk; s=pandora-2019; h=Sender: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-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=E4Et8IsTqKEjB0VKgfn0i10/CIt14tSmicrHni37u2I=; b=vt1b5BwQEsBhb0MJSh/BT73Kob pGD5KZ7UtoJRwdt9gjlUj8jztY4K4pGKr5EvDoixdrgvaw7CbpFKyCZ+rdiQ9PTOz7HfZuOrmtQCN zIV1i5dNDY1ulh+YoaqNoKW8divQ2hc1oIA7joKQA1OsldI3mGB+02GgHb06FPdEbsloO4k9VzjyJ KFF9QGtLFp5kevCXlqIjr9lyr/3Opds0tBqYB+wfUvTnCwvwHSFE9rT19y2zyG+gTWlXJSP13BHkz VPO/55MX0M3JWR+4qGRtA0jF3xfay8wCJ9BlhRw4jXablECkDkVe21W6l9XiwkB09apvqUL+LfIFi JkDS50ew==; Received: from shell.armlinux.org.uk ([fd8f:7570:feb6:1:5054:ff:fe00:4ec]:34142) by pandora.armlinux.org.uk with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1sCj3p-0007dO-0b; Thu, 30 May 2024 17:55:29 +0100 Received: from linux by shell.armlinux.org.uk with local (Exim 4.94.2) (envelope-from ) id 1sCj3p-0005IQ-7e; Thu, 30 May 2024 17:55:29 +0100 Date: Thu, 30 May 2024 17:55:29 +0100 From: "Russell King (Oracle)" To: SkyLake Huang =?utf-8?B?KOm7g+WVn+a+pCk=?= Cc: "andrew@lunn.ch" , "linux-kernel@vger.kernel.org" , "linux-mediatek@lists.infradead.org" , "linux-arm-kernel@lists.infradead.org" , "kuba@kernel.org" , "pabeni@redhat.com" , "edumazet@google.com" , "netdev@vger.kernel.org" , "dqfext@gmail.com" , Steven Liu =?utf-8?B?KOWKieS6uuixqik=?= , "matthias.bgg@gmail.com" , "davem@davemloft.net" , "hkallweit1@gmail.com" , "daniel@makrotopia.org" , "angelogioacchino.delregno@collabora.com" Subject: Re: [PATCH net-next v5 5/5] net: phy: add driver for built-in 2.5G ethernet PHY on MT7988 Message-ID: References: <20240530034844.11176-1-SkyLake.Huang@mediatek.com> <20240530034844.11176-6-SkyLake.Huang@mediatek.com> <0707897b44cfbc479cd08a092829a8bfc480281b.camel@mediatek.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <0707897b44cfbc479cd08a092829a8bfc480281b.camel@mediatek.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240530_095548_682099_1BABD93E X-CRM114-Status: GOOD ( 40.78 ) 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 T24gVGh1LCBNYXkgMzAsIDIwMjQgYXQgMDQ6MjU6NTZQTSArMDAwMCwgU2t5TGFrZSBIdWFuZyAo 6buD5ZWf5r6kKSB3cm90ZToKPiBPbiBUaHUsIDIwMjQtMDUtMzAgYXQgMTE6MzUgKzAxMDAsIFJ1 c3NlbGwgS2luZyAoT3JhY2xlKSB3cm90ZToKPiA+ICAJIAo+ID4gRXh0ZXJuYWwgZW1haWwgOiBQ bGVhc2UgZG8gbm90IGNsaWNrIGxpbmtzIG9yIG9wZW4gYXR0YWNobWVudHMgdW50aWwKPiA+IHlv dSBoYXZlIHZlcmlmaWVkIHRoZSBzZW5kZXIgb3IgdGhlIGNvbnRlbnQuCj4gPiAgT24gVGh1LCBN YXkgMzAsIDIwMjQgYXQgMTE6NDg6NDRBTSArMDgwMCwgU2t5IEh1YW5nIHdyb3RlOgo+ID4gPiAr c3RhdGljIGludCBtdDc5OHhfMnA1Z2VfcGh5X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNl ICpwaHlkZXYpCj4gPiA+ICt7Cj4gPiA+ICtib29sIGNoYW5nZWQgPSBmYWxzZTsKPiA+ID4gK3Uz MiBhZHY7Cj4gPiA+ICtpbnQgcmV0Owo+ID4gPiArCj4gPiA+ICsvKiBJbiBmYWN0LCBpZiB3ZSBk aXNhYmxlIGF1dG9uZWcsIHdlIGNhbid0IGxpbmsgdXAgY29ycmVjdGx5Ogo+ID4gPiArICogIDIu NUcvMUc6IE5lZWQgQU4gdG8gZXhjaGFuZ2UgbWFzdGVyL3NsYXZlIGluZm9ybWF0aW9uLgo+ID4g PiArICogIDEwME06IFdpdGhvdXQgQU4sIGxpbmsgc3RhcnRzIGF0IGhhbGYgZHVwbGV4KEFjY29y ZGluZyB0byBJRUVFCj4gPiA4MDIuMy0yMDE4KSwKPiA+ID4gKyAqICAgICAgICB3aGljaCB0aGlz IHBoeSBkb2Vzbid0IHN1cHBvcnQuCj4gPiA+ICsgKiAgIDEwTTogRGVwcmVjYXRlZCBpbiB0aGlz IGV0aGVybmV0IHBoeS4KPiA+ID4gKyAqLwo+ID4gPiAraWYgKHBoeWRldi0+YXV0b25lZyA9PSBB VVRPTkVHX0RJU0FCTEUpCj4gPiA+ICtyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gPiAKPiA+IFdlIGhh dmUgYW5vdGhlciBkcml2ZXIgKHN0bW1hYykgd2hlcmUgYSBwbGF0Zm9ybSBkcml2ZXIgaXMgd2Fu dGluZyB0bwo+ID4gcHV0IGEgaGFjayBpbiB0aGUga3NldHRpbmdzX3NldCgpIGV0aHRvb2wgcGF0 aCB0byBlcnJvciBvdXQgb24KPiA+IGRpc2FibGluZyBBTiBmb3IgMUcgc3BlZWRzLiBUaGlzIHNv dW5kcyBsaWtlIHNvbWV0aGluZyB0aGF0IGlzCj4gPiBhcHBsaWNhYmxlIHRvIG1vcmUgdGhhbiBv bmUgaGFyZHdhcmUgKGFuZCBJJ3ZlIGJlZW4gd29uZGVyaW5nIHdoZXRoZXIKPiA+IGl0IGlzIHVu aXZlcnNhbGx5IHRydWUgdGhhdCAxRyBjb3BwZXIgbGlua3MgYW5kIGZhc3RlciBhbGwgcmVxdWly ZQo+ID4gQU4gdG8gZnVuY3Rpb24uKQo+ID4gCj4gPiBUaHVzLCBJJ20gd29uZGVyaW5nIHdoZXRo ZXIgdGhpcyBpcyBzb21ldGhpbmcgdGhhdCB0aGUgY29yZSBjb2RlCj4gPiBzaG91bGQKPiA+IGJl IGRvaW5nLgo+ID4gCj4gWWVhaC4uQXMgZmFyIGFzIEkga25vdywgMUcvMi41Ry81Ry8xMEcgc3Bl ZWQgcmVxdWlyZSBBTiB0byBkZWNpZGUKPiBtYXN0ZXIvc2xhdmUgcm9sZS4gQWN0dWFsbHkgSSBj YW4gdXNlIGZvcmNlIG1vZGUgYnkgY2FsbGluZwo+IGdlbnBoeV9jNDVfcG1hX3NldF9mb3JjZWQs IHdoaWNoIHdpbGwgc2V0IGNvcnJlc3BvZGluZyBDNDUgcmVnaXN0ZXJzLgo+IEhvd2V2ZXIsIGFm dGVyIHRoYXQsIHRoaXMgMi41RyBQSFkgY2FuJ3Qgc3RpbGwgbGluayB1cCB3aXRoIHBhcnRuZXJz Lgo+IAo+IEknbGwgbGVhdmUgRU9QTk9UU1VQUCBoZXJlIHRlbXBvcmFyaWx5LiBIb3BlIHBoeWxp YiBjYW4gYmUgcGF0Y2hlZAo+IHNvbWVkYXkuCgpQbGVhc2Ugbm8uICJzb21lZGF5IiB0ZW5kcyB0 byBuZXZlciBoYXBwZW4sIGFuZCB5b3UncmUgYmFzaWNhbGx5CnRocm93aW5nIHRoZSBwcm9ibGVt IG92ZXIgdGhlIHdhbGwgdG8gb3RoZXIgcGVvcGxlIHRvIHNvbHZlIHdobwp0aGVuIGhhdmUgdG8g c3BvdCB5b3VyIGhhY2sgYW5kIGV2ZW50dWFsbHkgcmVtb3ZlIGl0LgoKV2UgbmVlZCB0aGlzIHNv bHZlZCBwcm9wZXJseSwgbm90IGJ5IHBlb3BsZSBoYWNraW5nIGRyaXZlcnMuIFRoaXMKaXMgb3Bl biBzb3VyY2UsIHlvdSBjYW4gcHJvcG9zZSBhIHBhdGNoIHRvIHBoeWxpYiB0byBmaXggdGhpcyBm b3IKZXZlcnlvbmUuCgo+ID4gPiArLyogVGhpcyBwaHkgY2FuJ3QgaGFuZGxlIGNvbGxpc2lvbiwg YW5kIG5laXRoZXIgY2FuIChYRkkpTUFDIGl0J3MKPiA+IGNvbm5lY3RlZCB0by4KPiA+ID4gKyAq IEFsdGhvdWdoIGl0IGNhbiBkbyBIRFggaGFuZHNoYWtlLCBpdCBkb2Vzbid0IHN1cHBvcnQgQ1NN QS9DRAo+ID4gdGhhdCBIRFggcmVxdWlyZXMuCj4gPiA+ICsgKi8KPiA+IAo+ID4gV2hhdCB0aGUg TUFDIGNhbiBhbmQgY2FuJ3QgZG8gcmVhbGx5IGhhcyBsaXR0bGUgYmVhcmluZyBvbiB3aGF0IGxp bmsKPiA+IG1vZGVzIHRoZSBQSFkgZHJpdmVyIHNob3VsZCBiZSBwcm92aWRpbmcuIEl0IGlzIHRo ZSByZXNwb25zaWJpbGl0eSBvZgo+ID4gdGhlIE1BQyBkcml2ZXIgdG8gYXBwcm9wcmlhdGVseSBj aGFuZ2Ugd2hhdCBpcyBzdXBwb3J0ZWQgd2hlbgo+ID4gYXR0YWNoaW5nCj4gPiB0byB0aGUgUEhZ LiBJZiB1c2luZyBwaHlsaW5rLCB0aGlzIGlzIGRvbmUgYnkgcGh5bGluayB2aWEgdGhlIE1BQwo+ ID4gZHJpdmVyCj4gPiB0ZWxsaW5nIHBoeWxpbmsgd2hhdCBpdCBpcyBjYXBhYmxlIG9mIHZpYSBt YWNfY2FwYWJpbGl0aWVzLgo+ID4gCj4gPiA+ICtzdGF0aWMgaW50IG10Nzk4eF8ycDVnZV9waHlf Z2V0X3JhdGVfbWF0Y2hpbmcoc3RydWN0IHBoeV9kZXZpY2UKPiA+ICpwaHlkZXYsCj4gPiA+ICsg ICAgICBwaHlfaW50ZXJmYWNlX3QgaWZhY2UpCj4gPiA+ICt7Cj4gPiA+ICtpZiAoaWZhY2UgPT0g UEhZX0lOVEVSRkFDRV9NT0RFX1hHTUlJKQo+ID4gPiArcmV0dXJuIFJBVEVfTUFUQ0hfUEFVU0U7 Cj4gPiAKPiA+IFlvdSBtZW50aW9uIGFib3ZlIFhGSS4uLgo+ID4gCj4gPiBYRkkgaXMgMTBHQkFT RS1SIHByb3RvY29sIHRvIFhGUCBtb2R1bGUgZWxlY3RyaWNhbCBzdGFuZGFyZHMuCj4gPiBTRkkg aXMgMTBHQkFTRS1SIHByb3RvY29sIHRvIFNGUCsgbW9kdWxlIGVsZWN0cmljYWwgc3RhbmRhcmRz Lgo+ID4gCj4gPiBwaHlfaW50ZXJmYWNlX3QgaXMgaW50ZXJlc3RlZCBpbiB0aGUgcHJvdG9jb2wu IFNvLCBnaXZlbiB0aGF0IHlvdQo+ID4gbWVudGlvbiBYRkksIHdoeSBkb2Vzbid0IHRoaXMgdGVz dCBmb3IgUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSPwo+ID4gCj4gV2UgaGF2ZSAyIFhGSS1N QUMgb24gbXQ3OTg4IHBsYXRmb3JtLiBPbmUgaXMgY29ubmVjdGVkIHRvIGludGVybmFsCj4gMi41 R3BoeShTb0MgYnVpbHQtaW4pLCBhcyB3ZSBkaXNjdXNzZWQgaGVyZSAoV2UgZG9uJ3QgdGVzdCB0 aGlzIHBoeSBmb3IKPiAxMEcgc3BlZWQuKSBBbm90aGVyIG9uZSBpcyBjb25uZWN0ZWQgdG8gZXh0 ZXJuYWwgMTBHIHBoeS4KCkkgY2FuJ3QgcGFyc2UgeW91ciByZXNwb25zZSBpbiBhIG1lYW5pbmdm dWwgd2F5LCB0byBtZSBpdCBkb2Vzbid0CmFkZHJlc3MgbXkgcG9pbnQuCgo+IAo+ID4gPiArc3Rh dGljIGludCBtdDc5OHhfMnA1Z2VfcGh5X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYp Cj4gPiA+ICt7Cj4gPiA+ICtzdHJ1Y3QgbXRrX2kycDVnZV9waHlfcHJpdiAqcHJpdjsKPiA+ID4g Kwo+ID4gPiArcHJpdiA9IGRldm1fa3phbGxvYygmcGh5ZGV2LT5tZGlvLmRldiwKPiA+ID4gKyAg ICBzaXplb2Yoc3RydWN0IG10a19pMnA1Z2VfcGh5X3ByaXYpLCBHRlBfS0VSTkVMKTsKPiA+ID4g K2lmICghcHJpdikKPiA+ID4gK3JldHVybiAtRU5PTUVNOwo+ID4gPiArCj4gPiA+ICtzd2l0Y2gg KHBoeWRldi0+ZHJ2LT5waHlfaWQpIHsKPiA+ID4gK2Nhc2UgTVRLXzJQNUdQSFlfSURfTVQ3OTg4 Ogo+ID4gPiArLyogVGhlIG9yaWdpbmFsIGhhcmR3YXJlIG9ubHkgc2V0cyBNRElPX0RFVlNfUE1B UE1EICovCj4gPiA+ICtwaHlkZXYtPmM0NV9pZHMubW1kc19wcmVzZW50IHw9IChNRElPX0RFVlNf UENTIHwgTURJT19ERVZTX0FOIHwKPiA+ID4gKyBNRElPX0RFVlNfVkVORDEgfCBNRElPX0RFVlNf VkVORDIpOwo+ID4gCj4gPiBObyBuZWVkIGZvciBwYXJlbnMgb24gdGhlIFJIUy4gVGhlIFJIUyBp cyBhbiBleHByZXNzaW9uIGluIGl0cyBvd24KPiA+IHJpZ2h0LCBhbmQgdGhlcmUncyBubyBwb2lu dCBpbiBwdXR0aW5nIHBhcmVucyBhcm91bmQgdGhlIGV4cHJlc3Npb24KPiA+IHRvIHR1cm4gaXQg aW50byBhbm90aGVyIGV4cHJlc3Npb24hCj4gPiAKPiA+IC0tIAo+ID4gUk1LJ3MgUGF0Y2ggc3lz dGVtOiBodHRwczovL3d3dy5hcm1saW51eC5vcmcudWsvZGV2ZWxvcGVyL3BhdGNoZXMvCj4gPiBG VFRQIGlzIGhlcmUhIDgwTWJwcyBkb3duIDEwTWJwcyB1cC4gRGVjZW50IGNvbm5lY3Rpdml0eSBh dCBsYXN0IQo+IAo+IERvIHlvdSBtZWFuIHRoZXNlIHR3byBsaW5lPwo+ICtwaHlkZXYtPmM0NV9p ZHMubW1kc19wcmVzZW50IHw9IChNRElPX0RFVlNfUENTIHwgTURJT19ERVZTX0FOIHwKPiArIE1E SU9fREVWU19WRU5EMSB8IE1ESU9fREVWU19WRU5EMik7Cj4gCj4gV2hhdCBkbyB5b3UgbWVhbiBi eSAiUkhTIGlzIGFuIGV4cHJlc3Npb24gaW4gaXRzIG93biByaWdodCI/Cj4gSSBwdXQgcGFyZW5z IGhlcmUgdG8gZW5oYW5jZSByZWFkYWJpbGl0eSBzbyB3ZSBkb24ndCBuZWVkIGNoZWNrCj4gb3Bl cmF0b3IgcHJlY2VkZW5jZSBhZ2Fpbi4KCnw9IG9uZSBvZiB0aGUgYXNzaWdubWVudCBvcGVyYXRv cnMsIGFsbCBvZiB3aGljaCBoYXZlIG9uZSBvZiB0aGUKbG93ZXN0IHByZWNlZGVuY2UuIE9ubHkg dGhlICwgb3BlcmF0b3IgaGFzIGEgbG93ZXIgcHJlY2VkZW5jZS4KVGhlcmVmb3JlLCBldmVyeXRo aW5nIGV4Y2VwdCAsIGhhcyBoaWdoZXIgcHJlY2VkZW5jZS4gVGhlcmVmb3JlLAp0aGUgcGFyZW5z IG9uIHRoZSByaWdodCBoYW5kIHNpZGUgb2YgfD0gbWFrZSBubyBkaWZmZXJlbmNlLgoKLS0gClJN SydzIFBhdGNoIHN5c3RlbTogaHR0cHM6Ly93d3cuYXJtbGludXgub3JnLnVrL2RldmVsb3Blci9w YXRjaGVzLwpGVFRQIGlzIGhlcmUhIDgwTWJwcyBkb3duIDEwTWJwcyB1cC4gRGVjZW50IGNvbm5l Y3Rpdml0eSBhdCBsYXN0IQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBs aXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlz dGluZm8vbGludXgtYXJtLWtlcm5lbAo=