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 7F482C77B73 for ; Sun, 4 Jun 2023 16:00:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Cc: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: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=FW0PNrpZQSnc0V/qoSieuydyaAZiDC60qUhOzf/ID5I=; b=SiMoz9QOgBksC0wky9vzMnemm0 Royo/dUzJfwIv4iJZGEpdQIchdmXISrSIOSG870kmu3rTIVZmnY+/BhghEAFCA4b6Vye340Wg7gOJ +qlbJv/ztGWJLVTud19z4onR199Lu6pzS+oXHIYXr6bZ+R65u88JOesWDv12ciqjesu5W0fQp7nIu 6WwOxrewe9VA2Al/umu4pNqZUwxTQ7tk4sBdN+4TiMb2SEgp2YIwtmHdWlPz4jrlnlOYg1qL5Er8U mTZn4m9l2AuHpYpQ02HLmmHjHvpMFDOd9LLABIwytP6jpLaFQmfp8D0BYj0mWhqtGYkPx6dftZu9o gFkMK8xw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1q5q9q-00CPxH-0I; Sun, 04 Jun 2023 16:00:42 +0000 Received: from pandora.armlinux.org.uk ([2001:4d48:ad52:32c8:5054:ff:fe00:142]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1q5q9m-00CPwP-0u; Sun, 04 Jun 2023 16:00:40 +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=FW0PNrpZQSnc0V/qoSieuydyaAZiDC60qUhOzf/ID5I=; b=Mid5KCuEBlMUlRpRlOR3tdZP3l nJv/UCtVBlZz7NDrr9QfEo1yis+07rntRNE4qS2qwDgvSffgn04435A4+dCNAG+2cXkCruwq+flDK HDHMY0g6mzlOjbhi+M7qFWKEun3vikEcuRVPXcjfmO3n4xIhuwyFyJPNswYYhaZh1N59VpZWzwhl9 Mlxygn6J5SMA5l/SEKnZBMcQ1ggwtsLc+9DZ1rkmrQMKrVrgNX5K7E9YduLyao8DBAU8Kf7VzAZH6 ETjsIwOJGqdqBogXLve+tiY7JeE7L2tpjAN7GNyPkwfdLI3BM8Axa/W5pfAcUyVBcHPDKXdHdyP5d KZkK2uUA==; Received: from shell.armlinux.org.uk ([fd8f:7570:feb6:1:5054:ff:fe00:4ec]:46044) by pandora.armlinux.org.uk with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1q5q9R-0002lR-T1; Sun, 04 Jun 2023 17:00:17 +0100 Received: from linux by shell.armlinux.org.uk with local (Exim 4.94.2) (envelope-from ) id 1q5q9L-0005Bb-QY; Sun, 04 Jun 2023 17:00:11 +0100 Date: Sun, 4 Jun 2023 17:00:11 +0100 From: "Russell King (Oracle)" To: =?utf-8?B?QXLEsW7DpyDDnE5BTA==?= Subject: Re: [PATCH net-next 08/30] net: dsa: mt7530: change p{5,6}_interface to p{5,6}_configured Message-ID: References: <576f92b0-1900-f6ff-e92d-4b82e3436ea1@arinc9.com> <20230526130145.7wg75yoe6ut4na7g@skbuf> <7117531f-a9f2-63eb-f69d-23267e5745d0@arinc9.com> <826fd2fc-fbf8-dab7-9c90-b726d15e2983@arinc9.com> <20230604125517.fwqh2uxzvsa7n5hu@skbuf> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230604_090038_465945_6E67339B X-CRM114-Status: GOOD ( 44.38 ) 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: , Cc: Andrew Lunn , linux-kernel@vger.kernel.org, Eric Dumazet , mithat.guner@xeront.com, Florian Fainelli , erkin.bozoglu@xeront.com, Richard van Schagen , Jakub Kicinski , Paolo Abeni , Landen Chao , Richard van Schagen , Sean Wang , DENG Qingfang , linux-mediatek@lists.infradead.org, Bartel Eerdekens , Matthias Brugger , linux-arm-kernel@lists.infradead.org, AngeloGioacchino Del Regno , netdev@vger.kernel.org, Daniel Golle , Vladimir Oltean , "David S. Miller" Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org On Sun, Jun 04, 2023 at 04:13:39PM +0100, Russell King (Oracle) wrote: > On Sun, Jun 04, 2023 at 04:14:31PM +0300, Arınç ÜNAL wrote: > > On 4.06.2023 16:07, Russell King (Oracle) wrote: > > > On Sun, Jun 04, 2023 at 03:55:17PM +0300, Vladimir Oltean wrote: > > > > On Sun, Jun 04, 2023 at 01:18:04PM +0100, Russell King (Oracle) wrote: > > > > > I don't remember whether Vladimir's firmware validator will fail for > > > > > mt753x if CPU ports are not fully described, but that would be well > > > > > worth checking. If it does, then we can be confident that phylink > > > > > will always be used, and those bypassing calls should not be necessary. > > > > > > > > It does, I've just retested this: > > > > > > > > [ 8.469152] mscc_felix 0000:00:00.5: OF node /soc/pcie@1f0000000/ethernet-switch@0,5/ports/port@4 of CPU port 4 lacks the required "phy-handle", "fixed-link" or "managed" properties > > > > [ 8.494571] mscc_felix 0000:00:00.5: error -EINVAL: Failed to register DSA switch > > > > [ 8.502151] mscc_felix: probe of 0000:00:00.5 failed with error -22 > > > > > > ... which isn't listed in dsa_switches_apply_workarounds[], and > > > neither is mt753x. Thanks. > > > > > > So, that should be sufficient to know that the CPU port will always > > > properly described, and thus bypassing phylink in mt753x for the CPU > > > port should not be necessary. > > > > Perfect! If I understand correctly, there's this code - specific to MT7531 > > and MT7988 ports being used as CPU ports - which runs in addition to what's > > in mt753x_phylink_mac_config(): > > > > mt7530_write(priv, MT7530_PMCR_P(port), > > PMCR_CPU_PORT_SETTING(priv->id)); > > > > This should be put on mt753x_phylink_mac_config(), under priv->id == > > ID_MT7531, priv->id == ID_MT7988, and dsa_is_cpu_port(ds, port) checks? > > Please remember that I have very little knowledge of MT753x, so in > order to answer this question, I've read through the mt7530 driver > code. > > Looking at mt7530.h: > > #define PMCR_CPU_PORT_SETTING(id) (PMCR_FORCE_MODE_ID((id)) | \ > PMCR_IFG_XMIT(1) | PMCR_MAC_MODE | \ > PMCR_BACKOFF_EN | PMCR_BACKPR_EN | \ > PMCR_TX_EN | PMCR_RX_EN | \ > PMCR_TX_FC_EN | PMCR_RX_FC_EN | \ > PMCR_FORCE_SPEED_1000 | \ > PMCR_FORCE_FDX | PMCR_FORCE_LNK) > > This seems to be some kind of port control register that sets amongst > other things parameters such as whether flow control is enabled, the > port speed, the duplex setting, whether link is forced up, etc. > > Looking at what mt753x_phylink_mac_link_up() does: > > 1. it sets PMCR_RX_EN | PMCR_TX_EN | PMCR_FORCE_LNK. > 2. it sets PMCR_FORCE_SPEED_1000 if speed was 1000Mbps, or if using > an internal, TRGMII, 1000base-X or 2500base-X phy interface mode. > 3. it sets PMCR_FORCE_FDX if full duplex was requested. > 4. it sets PMCR_TX_FC_EN if full duplex was requested with tx pause. > 5. it sets PMCR_RX_FC_EN if full duplex was requested with rx pause. > > So, provided this is called with the appropriate parameters, for a > fixed link, that will leave the following: > > PMCR_FORCE_MODE_ID(id) > PMCR_IFG_XMIT(1) > PMCR_MAC_MODE > PMCR_BACKOFF_EN > PMCR_BACKPR_EN > > If we now look at mt753x_phylink_mac_config(), this sets > PMCR_IFG_XMIT(1), PMCR_MAC_MODE, PMCR_BACKOFF_EN, PMCR_BACKPR_EN, > and PMCR_FORCE_MODE_ID(priv->id), which I believe is everything that > PMCR_CPU_PORT_SETTING(priv->id) is doing. > > So, Wouldn't a fixed-link description indicating 1Gbps, full duplex > with pause cause phylink to call both mt753x_phylink_mac_config() and > mt753x_phylink_mac_link_up() with appropriate arguments to set all > of these parameters in PMCR? > > Now, I'm going to analyse something else. mt7531_cpu_port_config() > is called from mt753x_cpu_port_enable(), which is itself called from > mt7531_setup_common(). That is ultimately called from the DSA switch > ops .setup() method. > > This method is called from dsa_switch_setup() for each switch in the > DSA tree. dsa_tree_setup_switches() calls this, and is called from > dsa_tree_setup(). Once dsa_tree_setup_switches() finishes > successfully, dsa_tree_setup_ports() will be called. This will then > setup DSA and CPU ports, which will then setup a phylink instance > for these ports. phylink will parse the firmware description for > the port. DSA will then call dsa_port_enable(). > > dsa_port_enable() will then call any port_enable() method in the > mt7530.c driver, which will be mt7530_port_enable(). This then... > > mt7530_clear(priv, MT7530_PMCR_P(port), PMCR_LINK_SETTINGS_MASK); > > which is: > > #define PMCR_LINK_SETTINGS_MASK (PMCR_TX_EN | PMCR_FORCE_SPEED_1000 | \ > PMCR_RX_EN | PMCR_FORCE_SPEED_100 | \ > PMCR_TX_FC_EN | PMCR_RX_FC_EN | \ > PMCR_FORCE_FDX | PMCR_FORCE_LNK | \ > PMCR_FORCE_EEE1G | PMCR_FORCE_EEE100) > > So it wipes out all the PMCR settings that mt7531_cpu_port_config() > performed - undoing *everything* below that switch() statement in > mt7531_cpu_port_config()! > > Once the port_enable() method returns, DSA will then call > phylink_start(), which will trigger phylink to bring up the link > according to the settings it has, which will mean phylink calls > the mac_config(), pcs_config(), pcs_link_up() and mac_link_up() > with the appropriate parameters for the firmware described link. > > So I think I have the answer to my initial thought: do the calls in > mt7531_cpu_port_config() to the phylink methods have any use what so > ever? The answer is no, they are entirely useless. The same goes for > the other cpu_port_config() methods that do something similar. The > same goes for the PMCR register write that's changing any bits > included in PMCR_LINK_SETTINGS_MASK. > > What that means is that mt7988_cpu_port_config() can be entirely > removed, it serves no useful purpose what so ever. For > mt7531_cpu_port_config(), it only needs to set priv->p[56]_interface > which, as far as I can see, probably only avoids mac_config() doing > any pad setup (that's a guess.) > > At least that's what I gather from reading through the driver and > DSA code. It may be I've missed something, but currently, I think > that these cpu_port_config() functions aren't doing too much that > is actually useful work. Essentially, I think this change will have no effect at all on the driver, because any effect this code has is totally undone when the driver's port_enable() method is called: diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c index 9bc54e1348cb..447e63d74e0c 100644 --- a/drivers/net/dsa/mt7530.c +++ b/drivers/net/dsa/mt7530.c @@ -2859,8 +2859,6 @@ mt7531_cpu_port_config(struct dsa_switch *ds, int port) { struct mt7530_priv *priv = ds->priv; phy_interface_t interface; - int speed; - int ret; switch (port) { case 5: @@ -2880,36 +2878,6 @@ mt7531_cpu_port_config(struct dsa_switch *ds, int port) return -EINVAL; } - if (interface == PHY_INTERFACE_MODE_2500BASEX) - speed = SPEED_2500; - else - speed = SPEED_1000; - - ret = mt7531_mac_config(ds, port, MLO_AN_FIXED, interface); - if (ret) - return ret; - mt7530_write(priv, MT7530_PMCR_P(port), - PMCR_CPU_PORT_SETTING(priv->id)); - mt753x_phylink_pcs_link_up(&priv->pcs[port].pcs, MLO_AN_FIXED, - interface, speed, DUPLEX_FULL); - mt753x_phylink_mac_link_up(ds, port, MLO_AN_FIXED, interface, NULL, - speed, DUPLEX_FULL, true, true); - - return 0; -} - -static int -mt7988_cpu_port_config(struct dsa_switch *ds, int port) -{ - struct mt7530_priv *priv = ds->priv; - - mt7530_write(priv, MT7530_PMCR_P(port), - PMCR_CPU_PORT_SETTING(priv->id)); - - mt753x_phylink_mac_link_up(ds, port, MLO_AN_FIXED, - PHY_INTERFACE_MODE_INTERNAL, NULL, - SPEED_10000, DUPLEX_FULL, true, true); - return 0; } @@ -3165,7 +3133,6 @@ const struct mt753x_info mt753x_table[] = { .phy_read_c45 = mt7531_ind_c45_phy_read, .phy_write_c45 = mt7531_ind_c45_phy_write, .pad_setup = mt7988_pad_setup, - .cpu_port_config = mt7988_cpu_port_config, .mac_port_get_caps = mt7988_mac_port_get_caps, .mac_port_config = mt7988_mac_config, }, -- 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 D25D7C77B73 for ; Sun, 4 Jun 2023 16:01:09 +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=fHlzakMTtO4M4WtCz78fHiL2cOZhzEFUFfX6Bdv+OxE=; b=nLrQgsFjEqiKK5 5B3j+78Bka6QMBiR2+1FjadKncj94J7Gij6szeymjtfdBolsbAKCkImNv8RSX49zV51SVod48Ppg3 83FK2yEVTtOmQAzYzP9Q42rob2f3X9+VBOgK1DlUcpYarJkyZ21bcwhCrMOoHVppCsEV1S8oIt1pX /sueK6wbZkWX/F5J6MMFfILOdrNUEjudaDkEEQkXUYIy+3Mpdj8QN+Fq0JZboI79hIoatMZGMKl+7 Aq3A9UhjYSOFhMeECaBvFl5kCOAW3LKrQmXq+9vuIbHJrHiA6NtkiWKbFeO5RVddRERwcNNRzGKVz kaiiROV/FCNl4zKRPm0Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1q5q9p-00CPwy-20; Sun, 04 Jun 2023 16:00:41 +0000 Received: from pandora.armlinux.org.uk ([2001:4d48:ad52:32c8:5054:ff:fe00:142]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1q5q9m-00CPwP-0u; Sun, 04 Jun 2023 16:00:40 +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=FW0PNrpZQSnc0V/qoSieuydyaAZiDC60qUhOzf/ID5I=; b=Mid5KCuEBlMUlRpRlOR3tdZP3l nJv/UCtVBlZz7NDrr9QfEo1yis+07rntRNE4qS2qwDgvSffgn04435A4+dCNAG+2cXkCruwq+flDK HDHMY0g6mzlOjbhi+M7qFWKEun3vikEcuRVPXcjfmO3n4xIhuwyFyJPNswYYhaZh1N59VpZWzwhl9 Mlxygn6J5SMA5l/SEKnZBMcQ1ggwtsLc+9DZ1rkmrQMKrVrgNX5K7E9YduLyao8DBAU8Kf7VzAZH6 ETjsIwOJGqdqBogXLve+tiY7JeE7L2tpjAN7GNyPkwfdLI3BM8Axa/W5pfAcUyVBcHPDKXdHdyP5d KZkK2uUA==; Received: from shell.armlinux.org.uk ([fd8f:7570:feb6:1:5054:ff:fe00:4ec]:46044) by pandora.armlinux.org.uk with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1q5q9R-0002lR-T1; Sun, 04 Jun 2023 17:00:17 +0100 Received: from linux by shell.armlinux.org.uk with local (Exim 4.94.2) (envelope-from ) id 1q5q9L-0005Bb-QY; Sun, 04 Jun 2023 17:00:11 +0100 Date: Sun, 4 Jun 2023 17:00:11 +0100 From: "Russell King (Oracle)" To: =?utf-8?B?QXLEsW7DpyDDnE5BTA==?= Cc: Vladimir Oltean , Sean Wang , Landen Chao , DENG Qingfang , Daniel Golle , Andrew Lunn , Florian Fainelli , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Matthias Brugger , AngeloGioacchino Del Regno , Richard van Schagen , Richard van Schagen , Frank Wunderlich , Bartel Eerdekens , erkin.bozoglu@xeront.com, mithat.guner@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 08/30] net: dsa: mt7530: change p{5,6}_interface to p{5,6}_configured Message-ID: References: <576f92b0-1900-f6ff-e92d-4b82e3436ea1@arinc9.com> <20230526130145.7wg75yoe6ut4na7g@skbuf> <7117531f-a9f2-63eb-f69d-23267e5745d0@arinc9.com> <826fd2fc-fbf8-dab7-9c90-b726d15e2983@arinc9.com> <20230604125517.fwqh2uxzvsa7n5hu@skbuf> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230604_090038_465945_6E67339B X-CRM114-Status: GOOD ( 44.38 ) 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 T24gU3VuLCBKdW4gMDQsIDIwMjMgYXQgMDQ6MTM6MzlQTSArMDEwMCwgUnVzc2VsbCBLaW5nIChP cmFjbGUpIHdyb3RlOgo+IE9uIFN1biwgSnVuIDA0LCAyMDIzIGF0IDA0OjE0OjMxUE0gKzAzMDAs IEFyxLFuw6cgw5xOQUwgd3JvdGU6Cj4gPiBPbiA0LjA2LjIwMjMgMTY6MDcsIFJ1c3NlbGwgS2lu ZyAoT3JhY2xlKSB3cm90ZToKPiA+ID4gT24gU3VuLCBKdW4gMDQsIDIwMjMgYXQgMDM6NTU6MTdQ TSArMDMwMCwgVmxhZGltaXIgT2x0ZWFuIHdyb3RlOgo+ID4gPiA+IE9uIFN1biwgSnVuIDA0LCAy MDIzIGF0IDAxOjE4OjA0UE0gKzAxMDAsIFJ1c3NlbGwgS2luZyAoT3JhY2xlKSB3cm90ZToKPiA+ ID4gPiA+IEkgZG9uJ3QgcmVtZW1iZXIgd2hldGhlciBWbGFkaW1pcidzIGZpcm13YXJlIHZhbGlk YXRvciB3aWxsIGZhaWwgZm9yCj4gPiA+ID4gPiBtdDc1M3ggaWYgQ1BVIHBvcnRzIGFyZSBub3Qg ZnVsbHkgZGVzY3JpYmVkLCBidXQgdGhhdCB3b3VsZCBiZSB3ZWxsCj4gPiA+ID4gPiB3b3J0aCBj aGVja2luZy4gSWYgaXQgZG9lcywgdGhlbiB3ZSBjYW4gYmUgY29uZmlkZW50IHRoYXQgcGh5bGlu awo+ID4gPiA+ID4gd2lsbCBhbHdheXMgYmUgdXNlZCwgYW5kIHRob3NlIGJ5cGFzc2luZyBjYWxs cyBzaG91bGQgbm90IGJlIG5lY2Vzc2FyeS4KPiA+ID4gPiAKPiA+ID4gPiBJdCBkb2VzLCBJJ3Zl IGp1c3QgcmV0ZXN0ZWQgdGhpczoKPiA+ID4gPiAKPiA+ID4gPiBbICAgIDguNDY5MTUyXSBtc2Nj X2ZlbGl4IDAwMDA6MDA6MDAuNTogT0Ygbm9kZSAvc29jL3BjaWVAMWYwMDAwMDAwL2V0aGVybmV0 LXN3aXRjaEAwLDUvcG9ydHMvcG9ydEA0IG9mIENQVSBwb3J0IDQgbGFja3MgdGhlIHJlcXVpcmVk ICJwaHktaGFuZGxlIiwgImZpeGVkLWxpbmsiIG9yICJtYW5hZ2VkIiBwcm9wZXJ0aWVzCj4gPiA+ ID4gWyAgICA4LjQ5NDU3MV0gbXNjY19mZWxpeCAwMDAwOjAwOjAwLjU6IGVycm9yIC1FSU5WQUw6 IEZhaWxlZCB0byByZWdpc3RlciBEU0Egc3dpdGNoCj4gPiA+ID4gWyAgICA4LjUwMjE1MV0gbXNj Y19mZWxpeDogcHJvYmUgb2YgMDAwMDowMDowMC41IGZhaWxlZCB3aXRoIGVycm9yIC0yMgo+ID4g PiAKPiA+ID4gLi4uIHdoaWNoIGlzbid0IGxpc3RlZCBpbiBkc2Ffc3dpdGNoZXNfYXBwbHlfd29y a2Fyb3VuZHNbXSwgYW5kCj4gPiA+IG5laXRoZXIgaXMgbXQ3NTN4LiBUaGFua3MuCj4gPiA+IAo+ ID4gPiBTbywgdGhhdCBzaG91bGQgYmUgc3VmZmljaWVudCB0byBrbm93IHRoYXQgdGhlIENQVSBw b3J0IHdpbGwgYWx3YXlzCj4gPiA+IHByb3Blcmx5IGRlc2NyaWJlZCwgYW5kIHRodXMgYnlwYXNz aW5nIHBoeWxpbmsgaW4gbXQ3NTN4IGZvciB0aGUgQ1BVCj4gPiA+IHBvcnQgc2hvdWxkIG5vdCBi ZSBuZWNlc3NhcnkuCj4gPiAKPiA+IFBlcmZlY3QhIElmIEkgdW5kZXJzdGFuZCBjb3JyZWN0bHks IHRoZXJlJ3MgdGhpcyBjb2RlIC0gc3BlY2lmaWMgdG8gTVQ3NTMxCj4gPiBhbmQgTVQ3OTg4IHBv cnRzIGJlaW5nIHVzZWQgYXMgQ1BVIHBvcnRzIC0gd2hpY2ggcnVucyBpbiBhZGRpdGlvbiB0byB3 aGF0J3MKPiA+IGluIG10NzUzeF9waHlsaW5rX21hY19jb25maWcoKToKPiA+IAo+ID4gCW10NzUz MF93cml0ZShwcml2LCBNVDc1MzBfUE1DUl9QKHBvcnQpLAo+ID4gCQkgICAgIFBNQ1JfQ1BVX1BP UlRfU0VUVElORyhwcml2LT5pZCkpOwo+ID4gCj4gPiBUaGlzIHNob3VsZCBiZSBwdXQgb24gbXQ3 NTN4X3BoeWxpbmtfbWFjX2NvbmZpZygpLCB1bmRlciBwcml2LT5pZCA9PQo+ID4gSURfTVQ3NTMx LCBwcml2LT5pZCA9PSBJRF9NVDc5ODgsIGFuZCBkc2FfaXNfY3B1X3BvcnQoZHMsIHBvcnQpIGNo ZWNrcz8KPiAKPiBQbGVhc2UgcmVtZW1iZXIgdGhhdCBJIGhhdmUgdmVyeSBsaXR0bGUga25vd2xl ZGdlIG9mIE1UNzUzeCwgc28gaW4KPiBvcmRlciB0byBhbnN3ZXIgdGhpcyBxdWVzdGlvbiwgSSd2 ZSByZWFkIHRocm91Z2ggdGhlIG10NzUzMCBkcml2ZXIKPiBjb2RlLgo+IAo+IExvb2tpbmcgYXQg bXQ3NTMwLmg6Cj4gCj4gI2RlZmluZSAgUE1DUl9DUFVfUE9SVF9TRVRUSU5HKGlkKSAgICAgIChQ TUNSX0ZPUkNFX01PREVfSUQoKGlkKSkgfCBcCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQTUNSX0lGR19YTUlUKDEpIHwgUE1DUl9NQUNfTU9ERSB8IFwKPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBNQ1JfQkFDS09GRl9FTiB8IFBN Q1JfQkFDS1BSX0VOIHwgXAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUE1DUl9UWF9FTiB8IFBNQ1JfUlhfRU4gfCBcCj4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQTUNSX1RYX0ZDX0VOIHwgUE1DUl9SWF9GQ19FTiB8IFwKPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBNQ1JfRk9SQ0VfU1BFRURfMTAw MCB8IFwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBNQ1JfRk9S Q0VfRkRYIHwgUE1DUl9GT1JDRV9MTkspCj4gCj4gVGhpcyBzZWVtcyB0byBiZSBzb21lIGtpbmQg b2YgcG9ydCBjb250cm9sIHJlZ2lzdGVyIHRoYXQgc2V0cyBhbW9uZ3N0Cj4gb3RoZXIgdGhpbmdz IHBhcmFtZXRlcnMgc3VjaCBhcyB3aGV0aGVyIGZsb3cgY29udHJvbCBpcyBlbmFibGVkLCB0aGUK PiBwb3J0IHNwZWVkLCB0aGUgZHVwbGV4IHNldHRpbmcsIHdoZXRoZXIgbGluayBpcyBmb3JjZWQg dXAsIGV0Yy4KPiAKPiBMb29raW5nIGF0IHdoYXQgbXQ3NTN4X3BoeWxpbmtfbWFjX2xpbmtfdXAo KSBkb2VzOgo+IAo+IDEuIGl0IHNldHMgUE1DUl9SWF9FTiB8IFBNQ1JfVFhfRU4gfCBQTUNSX0ZP UkNFX0xOSy4KPiAyLiBpdCBzZXRzIFBNQ1JfRk9SQ0VfU1BFRURfMTAwMCBpZiBzcGVlZCB3YXMg MTAwME1icHMsIG9yIGlmIHVzaW5nCj4gICAgYW4gaW50ZXJuYWwsIFRSR01JSSwgMTAwMGJhc2Ut WCBvciAyNTAwYmFzZS1YIHBoeSBpbnRlcmZhY2UgbW9kZS4KPiAzLiBpdCBzZXRzIFBNQ1JfRk9S Q0VfRkRYIGlmIGZ1bGwgZHVwbGV4IHdhcyByZXF1ZXN0ZWQuCj4gNC4gaXQgc2V0cyBQTUNSX1RY X0ZDX0VOIGlmIGZ1bGwgZHVwbGV4IHdhcyByZXF1ZXN0ZWQgd2l0aCB0eCBwYXVzZS4KPiA1LiBp dCBzZXRzIFBNQ1JfUlhfRkNfRU4gaWYgZnVsbCBkdXBsZXggd2FzIHJlcXVlc3RlZCB3aXRoIHJ4 IHBhdXNlLgo+IAo+IFNvLCBwcm92aWRlZCB0aGlzIGlzIGNhbGxlZCB3aXRoIHRoZSBhcHByb3By aWF0ZSBwYXJhbWV0ZXJzLCBmb3IgYQo+IGZpeGVkIGxpbmssIHRoYXQgd2lsbCBsZWF2ZSB0aGUg Zm9sbG93aW5nOgo+IAo+IAlQTUNSX0ZPUkNFX01PREVfSUQoaWQpCj4gCVBNQ1JfSUZHX1hNSVQo MSkKPiAJUE1DUl9NQUNfTU9ERQo+IAlQTUNSX0JBQ0tPRkZfRU4KPiAJUE1DUl9CQUNLUFJfRU4K PiAKPiBJZiB3ZSBub3cgbG9vayBhdCBtdDc1M3hfcGh5bGlua19tYWNfY29uZmlnKCksIHRoaXMg c2V0cwo+IFBNQ1JfSUZHX1hNSVQoMSksIFBNQ1JfTUFDX01PREUsIFBNQ1JfQkFDS09GRl9FTiwg UE1DUl9CQUNLUFJfRU4sCj4gYW5kIFBNQ1JfRk9SQ0VfTU9ERV9JRChwcml2LT5pZCksIHdoaWNo IEkgYmVsaWV2ZSBpcyBldmVyeXRoaW5nIHRoYXQKPiBQTUNSX0NQVV9QT1JUX1NFVFRJTkcocHJp di0+aWQpIGlzIGRvaW5nLgo+IAo+IFNvLCBXb3VsZG4ndCBhIGZpeGVkLWxpbmsgZGVzY3JpcHRp b24gaW5kaWNhdGluZyAxR2JwcywgZnVsbCBkdXBsZXgKPiB3aXRoIHBhdXNlIGNhdXNlIHBoeWxp bmsgdG8gY2FsbCBib3RoIG10NzUzeF9waHlsaW5rX21hY19jb25maWcoKSBhbmQKPiBtdDc1M3hf cGh5bGlua19tYWNfbGlua191cCgpIHdpdGggYXBwcm9wcmlhdGUgYXJndW1lbnRzIHRvIHNldCBh bGwKPiBvZiB0aGVzZSBwYXJhbWV0ZXJzIGluIFBNQ1I/Cj4gCj4gTm93LCBJJ20gZ29pbmcgdG8g YW5hbHlzZSBzb21ldGhpbmcgZWxzZS4gbXQ3NTMxX2NwdV9wb3J0X2NvbmZpZygpCj4gaXMgY2Fs bGVkIGZyb20gbXQ3NTN4X2NwdV9wb3J0X2VuYWJsZSgpLCB3aGljaCBpcyBpdHNlbGYgY2FsbGVk IGZyb20KPiBtdDc1MzFfc2V0dXBfY29tbW9uKCkuIFRoYXQgaXMgdWx0aW1hdGVseSBjYWxsZWQg ZnJvbSB0aGUgRFNBIHN3aXRjaAo+IG9wcyAuc2V0dXAoKSBtZXRob2QuCj4gCj4gVGhpcyBtZXRo b2QgaXMgY2FsbGVkIGZyb20gZHNhX3N3aXRjaF9zZXR1cCgpIGZvciBlYWNoIHN3aXRjaCBpbiB0 aGUKPiBEU0EgdHJlZS4gZHNhX3RyZWVfc2V0dXBfc3dpdGNoZXMoKSBjYWxscyB0aGlzLCBhbmQg aXMgY2FsbGVkIGZyb20KPiBkc2FfdHJlZV9zZXR1cCgpLiAgT25jZSBkc2FfdHJlZV9zZXR1cF9z d2l0Y2hlcygpIGZpbmlzaGVzCj4gc3VjY2Vzc2Z1bGx5LCBkc2FfdHJlZV9zZXR1cF9wb3J0cygp IHdpbGwgYmUgY2FsbGVkLiBUaGlzIHdpbGwgdGhlbgo+IHNldHVwIERTQSBhbmQgQ1BVIHBvcnRz LCB3aGljaCB3aWxsIHRoZW4gc2V0dXAgYSBwaHlsaW5rIGluc3RhbmNlCj4gZm9yIHRoZXNlIHBv cnRzLiBwaHlsaW5rIHdpbGwgcGFyc2UgdGhlIGZpcm13YXJlIGRlc2NyaXB0aW9uIGZvcgo+IHRo ZSBwb3J0LiBEU0Egd2lsbCB0aGVuIGNhbGwgZHNhX3BvcnRfZW5hYmxlKCkuCj4gCj4gZHNhX3Bv cnRfZW5hYmxlKCkgd2lsbCB0aGVuIGNhbGwgYW55IHBvcnRfZW5hYmxlKCkgbWV0aG9kIGluIHRo ZQo+IG10NzUzMC5jIGRyaXZlciwgd2hpY2ggd2lsbCBiZSBtdDc1MzBfcG9ydF9lbmFibGUoKS4g VGhpcyB0aGVuLi4uCj4gCj4gICAgICAgICBtdDc1MzBfY2xlYXIocHJpdiwgTVQ3NTMwX1BNQ1Jf UChwb3J0KSwgUE1DUl9MSU5LX1NFVFRJTkdTX01BU0spOwo+IAo+IHdoaWNoIGlzOgo+IAo+ICNk ZWZpbmUgIFBNQ1JfTElOS19TRVRUSU5HU19NQVNLICAgICAgICAoUE1DUl9UWF9FTiB8IFBNQ1Jf Rk9SQ0VfU1BFRURfMTAwMCB8IFwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFBNQ1JfUlhfRU4gfCBQTUNSX0ZPUkNFX1NQRUVEXzEwMCB8IFwKPiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBNQ1JfVFhfRkNfRU4gfCBQTUNSX1JYX0ZD X0VOIHwgXAo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUE1DUl9G T1JDRV9GRFggfCBQTUNSX0ZPUkNFX0xOSyB8IFwKPiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFBNQ1JfRk9SQ0VfRUVFMUcgfCBQTUNSX0ZPUkNFX0VFRTEwMCkKPiAK PiBTbyBpdCB3aXBlcyBvdXQgYWxsIHRoZSBQTUNSIHNldHRpbmdzIHRoYXQgbXQ3NTMxX2NwdV9w b3J0X2NvbmZpZygpCj4gcGVyZm9ybWVkIC0gdW5kb2luZyAqZXZlcnl0aGluZyogYmVsb3cgdGhh dCBzd2l0Y2goKSBzdGF0ZW1lbnQgaW4KPiBtdDc1MzFfY3B1X3BvcnRfY29uZmlnKCkhCj4gCj4g T25jZSB0aGUgcG9ydF9lbmFibGUoKSBtZXRob2QgcmV0dXJucywgRFNBIHdpbGwgdGhlbiBjYWxs Cj4gcGh5bGlua19zdGFydCgpLCB3aGljaCB3aWxsIHRyaWdnZXIgcGh5bGluayB0byBicmluZyB1 cCB0aGUgbGluawo+IGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MgaXQgaGFzLCB3aGljaCB3aWxs IG1lYW4gcGh5bGluayBjYWxscwo+IHRoZSBtYWNfY29uZmlnKCksIHBjc19jb25maWcoKSwgcGNz X2xpbmtfdXAoKSBhbmQgbWFjX2xpbmtfdXAoKQo+IHdpdGggdGhlIGFwcHJvcHJpYXRlIHBhcmFt ZXRlcnMgZm9yIHRoZSBmaXJtd2FyZSBkZXNjcmliZWQgbGluay4KPiAKPiBTbyBJIHRoaW5rIEkg aGF2ZSB0aGUgYW5zd2VyIHRvIG15IGluaXRpYWwgdGhvdWdodDogZG8gdGhlIGNhbGxzIGluCj4g bXQ3NTMxX2NwdV9wb3J0X2NvbmZpZygpIHRvIHRoZSBwaHlsaW5rIG1ldGhvZHMgaGF2ZSBhbnkg dXNlIHdoYXQgc28KPiBldmVyPyBUaGUgYW5zd2VyIGlzIG5vLCB0aGV5IGFyZSBlbnRpcmVseSB1 c2VsZXNzLiBUaGUgc2FtZSBnb2VzIGZvcgo+IHRoZSBvdGhlciBjcHVfcG9ydF9jb25maWcoKSBt ZXRob2RzIHRoYXQgZG8gc29tZXRoaW5nIHNpbWlsYXIuIFRoZQo+IHNhbWUgZ29lcyBmb3IgdGhl IFBNQ1IgcmVnaXN0ZXIgd3JpdGUgdGhhdCdzIGNoYW5naW5nIGFueSBiaXRzCj4gaW5jbHVkZWQg aW4gUE1DUl9MSU5LX1NFVFRJTkdTX01BU0suCj4gCj4gV2hhdCB0aGF0IG1lYW5zIGlzIHRoYXQg bXQ3OTg4X2NwdV9wb3J0X2NvbmZpZygpIGNhbiBiZSBlbnRpcmVseQo+IHJlbW92ZWQsIGl0IHNl cnZlcyBubyB1c2VmdWwgcHVycG9zZSB3aGF0IHNvIGV2ZXIuIEZvcgo+IG10NzUzMV9jcHVfcG9y dF9jb25maWcoKSwgaXQgb25seSBuZWVkcyB0byBzZXQgcHJpdi0+cFs1Nl1faW50ZXJmYWNlCj4g d2hpY2gsIGFzIGZhciBhcyBJIGNhbiBzZWUsIHByb2JhYmx5IG9ubHkgYXZvaWRzIG1hY19jb25m aWcoKSBkb2luZwo+IGFueSBwYWQgc2V0dXAgKHRoYXQncyBhIGd1ZXNzLikKPiAKPiBBdCBsZWFz dCB0aGF0J3Mgd2hhdCBJIGdhdGhlciBmcm9tIHJlYWRpbmcgdGhyb3VnaCB0aGUgZHJpdmVyIGFu ZAo+IERTQSBjb2RlLiBJdCBtYXkgYmUgSSd2ZSBtaXNzZWQgc29tZXRoaW5nLCBidXQgY3VycmVu dGx5LCBJIHRoaW5rCj4gdGhhdCB0aGVzZSBjcHVfcG9ydF9jb25maWcoKSBmdW5jdGlvbnMgYXJl bid0IGRvaW5nIHRvbyBtdWNoIHRoYXQKPiBpcyBhY3R1YWxseSB1c2VmdWwgd29yay4KCkVzc2Vu dGlhbGx5LCBJIHRoaW5rIHRoaXMgY2hhbmdlIHdpbGwgaGF2ZSBubyBlZmZlY3QgYXQgYWxsIG9u IHRoZQpkcml2ZXIsIGJlY2F1c2UgYW55IGVmZmVjdCB0aGlzIGNvZGUgaGFzIGlzIHRvdGFsbHkg dW5kb25lIHdoZW4gdGhlCmRyaXZlcidzIHBvcnRfZW5hYmxlKCkgbWV0aG9kIGlzIGNhbGxlZDoK CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMgYi9kcml2ZXJzL25ldC9kc2Ev bXQ3NTMwLmMKaW5kZXggOWJjNTRlMTM0OGNiLi40NDdlNjNkNzRlMGMgMTAwNjQ0Ci0tLSBhL2Ry aXZlcnMvbmV0L2RzYS9tdDc1MzAuYworKysgYi9kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMKQEAg LTI4NTksOCArMjg1OSw2IEBAIG10NzUzMV9jcHVfcG9ydF9jb25maWcoc3RydWN0IGRzYV9zd2l0 Y2ggKmRzLCBpbnQgcG9ydCkKIHsKIAlzdHJ1Y3QgbXQ3NTMwX3ByaXYgKnByaXYgPSBkcy0+cHJp djsKIAlwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlOwotCWludCBzcGVlZDsKLQlpbnQgcmV0Owog CiAJc3dpdGNoIChwb3J0KSB7CiAJY2FzZSA1OgpAQCAtMjg4MCwzNiArMjg3OCw2IEBAIG10NzUz MV9jcHVfcG9ydF9jb25maWcoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCkKIAkJcmV0 dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVf MjUwMEJBU0VYKQotCQlzcGVlZCA9IFNQRUVEXzI1MDA7Ci0JZWxzZQotCQlzcGVlZCA9IFNQRUVE XzEwMDA7Ci0KLQlyZXQgPSBtdDc1MzFfbWFjX2NvbmZpZyhkcywgcG9ydCwgTUxPX0FOX0ZJWEVE LCBpbnRlcmZhY2UpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0JbXQ3NTMwX3dyaXRlKHBy aXYsIE1UNzUzMF9QTUNSX1AocG9ydCksCi0JCSAgICAgUE1DUl9DUFVfUE9SVF9TRVRUSU5HKHBy aXYtPmlkKSk7Ci0JbXQ3NTN4X3BoeWxpbmtfcGNzX2xpbmtfdXAoJnByaXYtPnBjc1twb3J0XS5w Y3MsIE1MT19BTl9GSVhFRCwKLQkJCQkgICBpbnRlcmZhY2UsIHNwZWVkLCBEVVBMRVhfRlVMTCk7 Ci0JbXQ3NTN4X3BoeWxpbmtfbWFjX2xpbmtfdXAoZHMsIHBvcnQsIE1MT19BTl9GSVhFRCwgaW50 ZXJmYWNlLCBOVUxMLAotCQkJCSAgIHNwZWVkLCBEVVBMRVhfRlVMTCwgdHJ1ZSwgdHJ1ZSk7Ci0K LQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotbXQ3OTg4X2NwdV9wb3J0X2NvbmZpZyhzdHJ1 Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KQotewotCXN0cnVjdCBtdDc1MzBfcHJpdiAqcHJp diA9IGRzLT5wcml2OwotCi0JbXQ3NTMwX3dyaXRlKHByaXYsIE1UNzUzMF9QTUNSX1AocG9ydCks Ci0JCSAgICAgUE1DUl9DUFVfUE9SVF9TRVRUSU5HKHByaXYtPmlkKSk7Ci0KLQltdDc1M3hfcGh5 bGlua19tYWNfbGlua191cChkcywgcG9ydCwgTUxPX0FOX0ZJWEVELAotCQkJCSAgIFBIWV9JTlRF UkZBQ0VfTU9ERV9JTlRFUk5BTCwgTlVMTCwKLQkJCQkgICBTUEVFRF8xMDAwMCwgRFVQTEVYX0ZV TEwsIHRydWUsIHRydWUpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMxNjUsNyArMzEzMyw2IEBA IGNvbnN0IHN0cnVjdCBtdDc1M3hfaW5mbyBtdDc1M3hfdGFibGVbXSA9IHsKIAkJLnBoeV9yZWFk X2M0NSA9IG10NzUzMV9pbmRfYzQ1X3BoeV9yZWFkLAogCQkucGh5X3dyaXRlX2M0NSA9IG10NzUz MV9pbmRfYzQ1X3BoeV93cml0ZSwKIAkJLnBhZF9zZXR1cCA9IG10Nzk4OF9wYWRfc2V0dXAsCi0J CS5jcHVfcG9ydF9jb25maWcgPSBtdDc5ODhfY3B1X3BvcnRfY29uZmlnLAogCQkubWFjX3BvcnRf Z2V0X2NhcHMgPSBtdDc5ODhfbWFjX3BvcnRfZ2V0X2NhcHMsCiAJCS5tYWNfcG9ydF9jb25maWcg PSBtdDc5ODhfbWFjX2NvbmZpZywKIAl9LAoKLS0gClJNSydzIFBhdGNoIHN5c3RlbTogaHR0cHM6 Ly93d3cuYXJtbGludXgub3JnLnVrL2RldmVsb3Blci9wYXRjaGVzLwpGVFRQIGlzIGhlcmUhIDgw TWJwcyBkb3duIDEwTWJwcyB1cC4gRGVjZW50IGNvbm5lY3Rpdml0eSBhdCBsYXN0IQoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtlcm5l bCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6 Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo= 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0FADEC77B73 for ; Sun, 4 Jun 2023 16:00:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231881AbjFDQAk (ORCPT ); Sun, 4 Jun 2023 12:00:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45268 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229578AbjFDQAi (ORCPT ); Sun, 4 Jun 2023 12:00:38 -0400 Received: from pandora.armlinux.org.uk (pandora.armlinux.org.uk [IPv6:2001:4d48:ad52:32c8:5054:ff:fe00:142]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 12FC7BB; Sun, 4 Jun 2023 09:00:37 -0700 (PDT) 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=FW0PNrpZQSnc0V/qoSieuydyaAZiDC60qUhOzf/ID5I=; b=Mid5KCuEBlMUlRpRlOR3tdZP3l nJv/UCtVBlZz7NDrr9QfEo1yis+07rntRNE4qS2qwDgvSffgn04435A4+dCNAG+2cXkCruwq+flDK HDHMY0g6mzlOjbhi+M7qFWKEun3vikEcuRVPXcjfmO3n4xIhuwyFyJPNswYYhaZh1N59VpZWzwhl9 Mlxygn6J5SMA5l/SEKnZBMcQ1ggwtsLc+9DZ1rkmrQMKrVrgNX5K7E9YduLyao8DBAU8Kf7VzAZH6 ETjsIwOJGqdqBogXLve+tiY7JeE7L2tpjAN7GNyPkwfdLI3BM8Axa/W5pfAcUyVBcHPDKXdHdyP5d KZkK2uUA==; Received: from shell.armlinux.org.uk ([fd8f:7570:feb6:1:5054:ff:fe00:4ec]:46044) by pandora.armlinux.org.uk with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1q5q9R-0002lR-T1; Sun, 04 Jun 2023 17:00:17 +0100 Received: from linux by shell.armlinux.org.uk with local (Exim 4.94.2) (envelope-from ) id 1q5q9L-0005Bb-QY; Sun, 04 Jun 2023 17:00:11 +0100 Date: Sun, 4 Jun 2023 17:00:11 +0100 From: "Russell King (Oracle)" To: =?utf-8?B?QXLEsW7DpyDDnE5BTA==?= Cc: Vladimir Oltean , Sean Wang , Landen Chao , DENG Qingfang , Daniel Golle , Andrew Lunn , Florian Fainelli , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Matthias Brugger , AngeloGioacchino Del Regno , Richard van Schagen , Richard van Schagen , Frank Wunderlich , Bartel Eerdekens , erkin.bozoglu@xeront.com, mithat.guner@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 08/30] net: dsa: mt7530: change p{5,6}_interface to p{5,6}_configured Message-ID: References: <576f92b0-1900-f6ff-e92d-4b82e3436ea1@arinc9.com> <20230526130145.7wg75yoe6ut4na7g@skbuf> <7117531f-a9f2-63eb-f69d-23267e5745d0@arinc9.com> <826fd2fc-fbf8-dab7-9c90-b726d15e2983@arinc9.com> <20230604125517.fwqh2uxzvsa7n5hu@skbuf> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Sender: Russell King (Oracle) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sun, Jun 04, 2023 at 04:13:39PM +0100, Russell King (Oracle) wrote: > On Sun, Jun 04, 2023 at 04:14:31PM +0300, Arınç ÜNAL wrote: > > On 4.06.2023 16:07, Russell King (Oracle) wrote: > > > On Sun, Jun 04, 2023 at 03:55:17PM +0300, Vladimir Oltean wrote: > > > > On Sun, Jun 04, 2023 at 01:18:04PM +0100, Russell King (Oracle) wrote: > > > > > I don't remember whether Vladimir's firmware validator will fail for > > > > > mt753x if CPU ports are not fully described, but that would be well > > > > > worth checking. If it does, then we can be confident that phylink > > > > > will always be used, and those bypassing calls should not be necessary. > > > > > > > > It does, I've just retested this: > > > > > > > > [ 8.469152] mscc_felix 0000:00:00.5: OF node /soc/pcie@1f0000000/ethernet-switch@0,5/ports/port@4 of CPU port 4 lacks the required "phy-handle", "fixed-link" or "managed" properties > > > > [ 8.494571] mscc_felix 0000:00:00.5: error -EINVAL: Failed to register DSA switch > > > > [ 8.502151] mscc_felix: probe of 0000:00:00.5 failed with error -22 > > > > > > ... which isn't listed in dsa_switches_apply_workarounds[], and > > > neither is mt753x. Thanks. > > > > > > So, that should be sufficient to know that the CPU port will always > > > properly described, and thus bypassing phylink in mt753x for the CPU > > > port should not be necessary. > > > > Perfect! If I understand correctly, there's this code - specific to MT7531 > > and MT7988 ports being used as CPU ports - which runs in addition to what's > > in mt753x_phylink_mac_config(): > > > > mt7530_write(priv, MT7530_PMCR_P(port), > > PMCR_CPU_PORT_SETTING(priv->id)); > > > > This should be put on mt753x_phylink_mac_config(), under priv->id == > > ID_MT7531, priv->id == ID_MT7988, and dsa_is_cpu_port(ds, port) checks? > > Please remember that I have very little knowledge of MT753x, so in > order to answer this question, I've read through the mt7530 driver > code. > > Looking at mt7530.h: > > #define PMCR_CPU_PORT_SETTING(id) (PMCR_FORCE_MODE_ID((id)) | \ > PMCR_IFG_XMIT(1) | PMCR_MAC_MODE | \ > PMCR_BACKOFF_EN | PMCR_BACKPR_EN | \ > PMCR_TX_EN | PMCR_RX_EN | \ > PMCR_TX_FC_EN | PMCR_RX_FC_EN | \ > PMCR_FORCE_SPEED_1000 | \ > PMCR_FORCE_FDX | PMCR_FORCE_LNK) > > This seems to be some kind of port control register that sets amongst > other things parameters such as whether flow control is enabled, the > port speed, the duplex setting, whether link is forced up, etc. > > Looking at what mt753x_phylink_mac_link_up() does: > > 1. it sets PMCR_RX_EN | PMCR_TX_EN | PMCR_FORCE_LNK. > 2. it sets PMCR_FORCE_SPEED_1000 if speed was 1000Mbps, or if using > an internal, TRGMII, 1000base-X or 2500base-X phy interface mode. > 3. it sets PMCR_FORCE_FDX if full duplex was requested. > 4. it sets PMCR_TX_FC_EN if full duplex was requested with tx pause. > 5. it sets PMCR_RX_FC_EN if full duplex was requested with rx pause. > > So, provided this is called with the appropriate parameters, for a > fixed link, that will leave the following: > > PMCR_FORCE_MODE_ID(id) > PMCR_IFG_XMIT(1) > PMCR_MAC_MODE > PMCR_BACKOFF_EN > PMCR_BACKPR_EN > > If we now look at mt753x_phylink_mac_config(), this sets > PMCR_IFG_XMIT(1), PMCR_MAC_MODE, PMCR_BACKOFF_EN, PMCR_BACKPR_EN, > and PMCR_FORCE_MODE_ID(priv->id), which I believe is everything that > PMCR_CPU_PORT_SETTING(priv->id) is doing. > > So, Wouldn't a fixed-link description indicating 1Gbps, full duplex > with pause cause phylink to call both mt753x_phylink_mac_config() and > mt753x_phylink_mac_link_up() with appropriate arguments to set all > of these parameters in PMCR? > > Now, I'm going to analyse something else. mt7531_cpu_port_config() > is called from mt753x_cpu_port_enable(), which is itself called from > mt7531_setup_common(). That is ultimately called from the DSA switch > ops .setup() method. > > This method is called from dsa_switch_setup() for each switch in the > DSA tree. dsa_tree_setup_switches() calls this, and is called from > dsa_tree_setup(). Once dsa_tree_setup_switches() finishes > successfully, dsa_tree_setup_ports() will be called. This will then > setup DSA and CPU ports, which will then setup a phylink instance > for these ports. phylink will parse the firmware description for > the port. DSA will then call dsa_port_enable(). > > dsa_port_enable() will then call any port_enable() method in the > mt7530.c driver, which will be mt7530_port_enable(). This then... > > mt7530_clear(priv, MT7530_PMCR_P(port), PMCR_LINK_SETTINGS_MASK); > > which is: > > #define PMCR_LINK_SETTINGS_MASK (PMCR_TX_EN | PMCR_FORCE_SPEED_1000 | \ > PMCR_RX_EN | PMCR_FORCE_SPEED_100 | \ > PMCR_TX_FC_EN | PMCR_RX_FC_EN | \ > PMCR_FORCE_FDX | PMCR_FORCE_LNK | \ > PMCR_FORCE_EEE1G | PMCR_FORCE_EEE100) > > So it wipes out all the PMCR settings that mt7531_cpu_port_config() > performed - undoing *everything* below that switch() statement in > mt7531_cpu_port_config()! > > Once the port_enable() method returns, DSA will then call > phylink_start(), which will trigger phylink to bring up the link > according to the settings it has, which will mean phylink calls > the mac_config(), pcs_config(), pcs_link_up() and mac_link_up() > with the appropriate parameters for the firmware described link. > > So I think I have the answer to my initial thought: do the calls in > mt7531_cpu_port_config() to the phylink methods have any use what so > ever? The answer is no, they are entirely useless. The same goes for > the other cpu_port_config() methods that do something similar. The > same goes for the PMCR register write that's changing any bits > included in PMCR_LINK_SETTINGS_MASK. > > What that means is that mt7988_cpu_port_config() can be entirely > removed, it serves no useful purpose what so ever. For > mt7531_cpu_port_config(), it only needs to set priv->p[56]_interface > which, as far as I can see, probably only avoids mac_config() doing > any pad setup (that's a guess.) > > At least that's what I gather from reading through the driver and > DSA code. It may be I've missed something, but currently, I think > that these cpu_port_config() functions aren't doing too much that > is actually useful work. Essentially, I think this change will have no effect at all on the driver, because any effect this code has is totally undone when the driver's port_enable() method is called: diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c index 9bc54e1348cb..447e63d74e0c 100644 --- a/drivers/net/dsa/mt7530.c +++ b/drivers/net/dsa/mt7530.c @@ -2859,8 +2859,6 @@ mt7531_cpu_port_config(struct dsa_switch *ds, int port) { struct mt7530_priv *priv = ds->priv; phy_interface_t interface; - int speed; - int ret; switch (port) { case 5: @@ -2880,36 +2878,6 @@ mt7531_cpu_port_config(struct dsa_switch *ds, int port) return -EINVAL; } - if (interface == PHY_INTERFACE_MODE_2500BASEX) - speed = SPEED_2500; - else - speed = SPEED_1000; - - ret = mt7531_mac_config(ds, port, MLO_AN_FIXED, interface); - if (ret) - return ret; - mt7530_write(priv, MT7530_PMCR_P(port), - PMCR_CPU_PORT_SETTING(priv->id)); - mt753x_phylink_pcs_link_up(&priv->pcs[port].pcs, MLO_AN_FIXED, - interface, speed, DUPLEX_FULL); - mt753x_phylink_mac_link_up(ds, port, MLO_AN_FIXED, interface, NULL, - speed, DUPLEX_FULL, true, true); - - return 0; -} - -static int -mt7988_cpu_port_config(struct dsa_switch *ds, int port) -{ - struct mt7530_priv *priv = ds->priv; - - mt7530_write(priv, MT7530_PMCR_P(port), - PMCR_CPU_PORT_SETTING(priv->id)); - - mt753x_phylink_mac_link_up(ds, port, MLO_AN_FIXED, - PHY_INTERFACE_MODE_INTERNAL, NULL, - SPEED_10000, DUPLEX_FULL, true, true); - return 0; } @@ -3165,7 +3133,6 @@ const struct mt753x_info mt753x_table[] = { .phy_read_c45 = mt7531_ind_c45_phy_read, .phy_write_c45 = mt7531_ind_c45_phy_write, .pad_setup = mt7988_pad_setup, - .cpu_port_config = mt7988_cpu_port_config, .mac_port_get_caps = mt7988_mac_port_get_caps, .mac_port_config = mt7988_mac_config, }, -- RMK's Patch system: https://www.armlinux.org.uk/developer/patches/ FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!