[netnext,8/8] net: dsa: mt7530: simplify link operations and force link down on all ports
Message ID | 20240208-for-netnext-mt7530-improvements-3-v1-8-d7c1cfd502ca@arinc9.com |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel+bounces-57484-ouuuleilei=gmail.com@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7301:168b:b0:106:860b:bbdd with SMTP id ma11csp2709966dyb; Wed, 7 Feb 2024 21:55:59 -0800 (PST) X-Google-Smtp-Source: AGHT+IF9Vw0/o5Y/pC4jhTYAyYC9mGn0Xhy0j9VjJU26cngdVDJ4v0c4Za1OaSZlbi7aBznNpwQr X-Received: by 2002:a05:6902:1003:b0:dc2:45af:aa5b with SMTP id w3-20020a056902100300b00dc245afaa5bmr8746803ybt.59.1707371759400; Wed, 07 Feb 2024 21:55:59 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707371759; cv=pass; d=google.com; s=arc-20160816; b=sYaFCv1hxWz33VibbIABak6oSS9u4uOq+EMTGMyhNtiMT3TBHLpj3J5T7stsPDHRcl 3kvI0K8CLPyR4zN0mb0WmMTzddi6g1PUzW00UR2RkDhu24iQdNZTNB23TF3JY/Y/QCyi ME/rSStT9zEtj5GKaMDcMNFYqS/lo83dm52jBOgTlH9NdxKnW3skGQoY3mPOxS7aEn0K av/x0jdbos4svWwHvlLKwd/FhCpdGpObRPGzirHcvXX3/Ehe+1q6DM9ePbzSgq8qY7Yi NSAVb+ETf9Q4OZth2OGF5h+IfZxolJZiBNfVeIU+QKf400HPyLjvJCfyZ49KcnwiU5r4 +36A== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=reply-to:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:subject:date:from:dkim-signature; bh=LIiWlXRIU3G0zmIYQTSXX23iLh3cPetDENmkq2H1crM=; fh=CELQY6YOm0kFOOF8D1OzSwUzYppeNR17BtiCv1TmMXU=; b=gPAGj8Ym5vaRskS2pXO1/ZveOGIrIKI2NowR9xUVBIEyneDP3aMEUsCiyJpQbhTeUs 3tttJhz+sYSc+IdCjyKgDxvkf1nImeiIkQrr0+WARuONcE7hMndzlUrmeySFyzBSzXE7 OvmxUStRIZFO38sJ+cKhiIrLc1pkQWwSb2wd4qn487wptrHIm0Omdrg6DP/AL0rTcsYk /8Sgl74+X0zfhy3azZKKzG8w+hJw+MTQVlnLMIdGXr71neIOScVXE8jvIkHa2hOqccqB ejO+9aWyeqxSdDQI2IZyJEu6maL4nPr/oAJmGoMqBI0XzCvNwr7oaKhuqiv8Gw8dxRYM jItw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=ap5avz30; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-57484-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-57484-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org X-Forwarded-Encrypted: i=2; AJvYcCWqWt7HKQmbVsafa+ga9jnjnhZEdwLid++QArOKLHjsEW1CtAzkSkFYuJABlSQ633t7jJXhyI0hmc0fFQuWCOxXIafbTg== Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [2604:1380:40f1:3f00::1]) by mx.google.com with ESMTPS id t17-20020a63b251000000b0058986c61bb6si3320088pgo.706.2024.02.07.21.55.58 for <ouuuleilei@gmail.com> (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Feb 2024 21:55:59 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-57484-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) client-ip=2604:1380:40f1:3f00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=ap5avz30; arc=pass (i=1 dkim=pass dkdomain=kernel.org); spf=pass (google.com: domain of linux-kernel+bounces-57484-ouuuleilei=gmail.com@vger.kernel.org designates 2604:1380:40f1:3f00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-57484-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sy.mirrors.kernel.org (Postfix) with ESMTPS id 36CC7B238BA for <ouuuleilei@gmail.com>; Thu, 8 Feb 2024 05:54:43 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 843106BB43; Thu, 8 Feb 2024 05:51:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ap5avz30" Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DE35467C74; Thu, 8 Feb 2024 05:51:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707371494; cv=none; b=E6M0wPnYZvv1J8g3S0W8LcnF1kHKmtcaO+ALvFFh90FHU5HuAW9XQrS1URtp6enQzxIVIajrVUSLhIFtnYt42zp16qahlGeeSyQzwe44YlqQszLwOfPIANjYu3x1Mya6ZoRndOuNdZy1QE0DeB571h6y6A9dnbvSMeH4DdcmQZw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707371494; c=relaxed/simple; bh=33itorBWyf5M6/pJLSa2Fmgkw5O7iOIvVpDVlFfasoM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KtpvjAqWN6SlKHkQviVtpreaWiL335PrE59BEK/NA7tetBDOBh6iCVTuKwBUgJiUND56otMrssgH0unj0Q531MJBXSNTRNDzIv6dtP7AfMiKG/62tH6RspXBIgUPS4LEYbdW53FMFaVHQBRS88mW8PYahyt+OB0Ft/VoDmBNqhc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ap5avz30; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPS id 96F57C4166A; Thu, 8 Feb 2024 05:51:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1707371493; bh=33itorBWyf5M6/pJLSa2Fmgkw5O7iOIvVpDVlFfasoM=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=ap5avz30RCJeSf1NT2fQRNBhyxv3IKpCXyTh3To1NGuebppqw9BjfWajTU1XsKIcg 6C7YsK/uh+6dSuOzTe3p9Qjhh1lPVaQxBwd+Dd3vVyFoT6SPdBw45fKGvn5s/ZraFS wjMCz+FOu0oUmhCsbOYtNovKf2wR7HdF5rAKCPFQatIQiwcyOjVfldpGukfel1ksQt k86sckECQg5LEo4pT3gMxiJ2qNfnbvEVESsOZ23T0pDvuBoLAVSgEem1idPjLHuCQd N48S8dYn9krgw+hcf7baBsYxqKzUhY6YrdwG9++v1kv8r5Zz+n8fsU3xkGh7FXBH42 4/j3h4WQHMswg== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 84F56C48260; Thu, 8 Feb 2024 05:51:33 +0000 (UTC) From: =?utf-8?b?QXLEsW7DpyDDnE5BTA==?= via B4 Relay <devnull+arinc.unal.arinc9.com@kernel.org> Date: Thu, 08 Feb 2024 08:51:36 +0300 Subject: [PATCH netnext 8/8] net: dsa: mt7530: simplify link operations and force link down on all ports Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: <linux-kernel.vger.kernel.org> List-Subscribe: <mailto:linux-kernel+subscribe@vger.kernel.org> List-Unsubscribe: <mailto:linux-kernel+unsubscribe@vger.kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Message-Id: <20240208-for-netnext-mt7530-improvements-3-v1-8-d7c1cfd502ca@arinc9.com> References: <20240208-for-netnext-mt7530-improvements-3-v1-0-d7c1cfd502ca@arinc9.com> In-Reply-To: <20240208-for-netnext-mt7530-improvements-3-v1-0-d7c1cfd502ca@arinc9.com> To: Daniel Golle <daniel@makrotopia.org>, DENG Qingfang <dqfext@gmail.com>, Sean Wang <sean.wang@mediatek.com>, Andrew Lunn <andrew@lunn.ch>, Florian Fainelli <f.fainelli@gmail.com>, Vladimir Oltean <olteanv@gmail.com>, "David S. Miller" <davem@davemloft.net>, Eric Dumazet <edumazet@google.com>, Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>, Matthias Brugger <matthias.bgg@gmail.com>, AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>, Russell King <linux@armlinux.org.uk> Cc: mithat.guner@xeront.com, erkin.bozoglu@xeront.com, Bartel Eerdekens <bartel.eerdekens@constell8.be>, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org, =?utf-8?b?QXLEsW7DpyDDnE5BTA==?= <arinc.unal@arinc9.com> X-Mailer: b4 0.12.4 X-Developer-Signature: v=1; a=ed25519-sha256; t=1707371489; l=5224; i=arinc.unal@arinc9.com; s=arinc9-patatt; h=from:subject:message-id; bh=F8DQ0JkjBlyf4L4PkazDniJyaWulKX69bCZGZtD69sU=; b=tN8yIL5E+3fr+kuSvqN6xhIMheBGlRzbAcOb1knVHpcxMUz41gKRyXYb3IF8uzqOwLaMz3I/W jwgaXMr0qavBMBQyzJ/6ne8Wg/50fdI0Q33D1D5o7INE3qL+ZIORL+l X-Developer-Key: i=arinc.unal@arinc9.com; a=ed25519; pk=VmvgMWwm73yVIrlyJYvGtnXkQJy9CvbaeEqPQO9Z4kA= X-Endpoint-Received: by B4 Relay for arinc.unal@arinc9.com/arinc9-patatt with auth_id=115 X-Original-From: =?utf-8?b?QXLEsW7DpyDDnE5BTA==?= <arinc.unal@arinc9.com> Reply-To: <arinc.unal@arinc9.com> X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790309049862648097 X-GMAIL-MSGID: 1790309049862648097 |
Series |
MT7530 DSA Subdriver Improvements Act III
|
|
Commit Message
Arınç ÜNAL via B4 Relay
Feb. 8, 2024, 5:51 a.m. UTC
From: Arınç ÜNAL <arinc.unal@arinc9.com> Currently, the link operations for switch MACs are scattered across port_enable, port_disable, phylink_mac_config, phylink_mac_link_up, and phylink_mac_link_down. port_enable and port_disable clears the link settings. Move that to mt7530_setup() and mt7531_setup_common() which set up the switches. This way, the link settings are cleared on all ports at setup, and then only once with phylink_mac_link_down() when a link goes down. Enable force mode at setup to apply the force part of the link settings. This ensures that only active ports will have their link up. Now that the bit for setting the port on force mode is done on mt7530_setup() and mt7531_setup_common(), get rid of PMCR_FORCE_MODE_ID() which helped determine which bit to use for the switch model. The "MT7621 Giga Switch Programming Guide v0.3", "MT7531 Reference Manual for Development Board v1.0", and "MT7988A Wi-Fi 7 Generation Router Platform: Datasheet (Open Version) v0.1" documents show that these bits are enabled at reset: PMCR_IFG_XMIT(1) (not part of PMCR_LINK_SETTINGS_MASK) PMCR_MAC_MODE (not part of PMCR_LINK_SETTINGS_MASK) PMCR_TX_EN PMCR_RX_EN PMCR_BACKOFF_EN (not part of PMCR_LINK_SETTINGS_MASK) PMCR_BACKPR_EN (not part of PMCR_LINK_SETTINGS_MASK) PMCR_TX_FC_EN PMCR_RX_FC_EN These bits also don't exist on the MT7530_PMCR_P(6) register of the switch on the MT7988 SoC: PMCR_IFG_XMIT() PMCR_MAC_MODE PMCR_BACKOFF_EN PMCR_BACKPR_EN Remove the setting of the bits not part of PMCR_LINK_SETTINGS_MASK on phylink_mac_config as they're already set. Suggested-by: Vladimir Oltean <olteanv@gmail.com> Signed-off-by: Arınç ÜNAL <arinc.unal@arinc9.com> --- drivers/net/dsa/mt7530.c | 26 +++++++++++++------------- drivers/net/dsa/mt7530.h | 2 -- 2 files changed, 13 insertions(+), 15 deletions(-)
Comments
On Thu, Feb 08, 2024 at 08:51:36AM +0300, Arınç ÜNAL via B4 Relay wrote: > From: Arınç ÜNAL <arinc.unal@arinc9.com> > > Currently, the link operations for switch MACs are scattered across > port_enable, port_disable, phylink_mac_config, phylink_mac_link_up, and > phylink_mac_link_down. > > port_enable and port_disable clears the link settings. Move that to > mt7530_setup() and mt7531_setup_common() which set up the switches. This > way, the link settings are cleared on all ports at setup, and then only > once with phylink_mac_link_down() when a link goes down. > > Enable force mode at setup to apply the force part of the link settings. > This ensures that only active ports will have their link up. > > Now that the bit for setting the port on force mode is done on > mt7530_setup() and mt7531_setup_common(), get rid of PMCR_FORCE_MODE_ID() > which helped determine which bit to use for the switch model. > > The "MT7621 Giga Switch Programming Guide v0.3", "MT7531 Reference Manual > for Development Board v1.0", and "MT7988A Wi-Fi 7 Generation Router > Platform: Datasheet (Open Version) v0.1" documents show that these bits are > enabled at reset: > > PMCR_IFG_XMIT(1) (not part of PMCR_LINK_SETTINGS_MASK) > PMCR_MAC_MODE (not part of PMCR_LINK_SETTINGS_MASK) > PMCR_TX_EN > PMCR_RX_EN > PMCR_BACKOFF_EN (not part of PMCR_LINK_SETTINGS_MASK) > PMCR_BACKPR_EN (not part of PMCR_LINK_SETTINGS_MASK) > PMCR_TX_FC_EN > PMCR_RX_FC_EN > > These bits also don't exist on the MT7530_PMCR_P(6) register of the switch > on the MT7988 SoC: > > PMCR_IFG_XMIT() > PMCR_MAC_MODE > PMCR_BACKOFF_EN > PMCR_BACKPR_EN > > Remove the setting of the bits not part of PMCR_LINK_SETTINGS_MASK on > phylink_mac_config as they're already set. > > Suggested-by: Vladimir Oltean <olteanv@gmail.com> > Signed-off-by: Arınç ÜNAL <arinc.unal@arinc9.com> > --- > drivers/net/dsa/mt7530.c | 26 +++++++++++++------------- > drivers/net/dsa/mt7530.h | 2 -- > 2 files changed, 13 insertions(+), 15 deletions(-) > > diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c > index 5c8ad41ce8cd..f67db577d1c0 100644 > --- a/drivers/net/dsa/mt7530.c > +++ b/drivers/net/dsa/mt7530.c > @@ -1018,7 +1018,6 @@ mt7530_port_enable(struct dsa_switch *ds, int port, > priv->ports[port].enable = true; > mt7530_rmw(priv, MT7530_PCR_P(port), PCR_MATRIX_MASK, > priv->ports[port].pm); > - mt7530_clear(priv, MT7530_PMCR_P(port), PMCR_LINK_SETTINGS_MASK); > > mutex_unlock(&priv->reg_mutex); > > @@ -1038,7 +1037,6 @@ mt7530_port_disable(struct dsa_switch *ds, int port) > priv->ports[port].enable = false; > mt7530_rmw(priv, MT7530_PCR_P(port), PCR_MATRIX_MASK, > PCR_MATRIX_CLR); > - mt7530_clear(priv, MT7530_PMCR_P(port), PMCR_LINK_SETTINGS_MASK); > > mutex_unlock(&priv->reg_mutex); > } > @@ -2257,6 +2255,12 @@ mt7530_setup(struct dsa_switch *ds) > mt7530_mib_reset(ds); > > for (i = 0; i < MT7530_NUM_PORTS; i++) { > + /* Clear link settings and enable force mode to force link down > + * on all ports until they're enabled later. > + */ > + mt7530_clear(priv, MT7530_PMCR_P(i), PMCR_LINK_SETTINGS_MASK); > + mt7530_set(priv, MT7530_PMCR_P(i), PMCR_FORCE_MODE); Any reason to not combine the two lines above into a single call: mt7530_rmw(priv, MT7530_PMCR_P(i), PMCR_LINK_SETTINGS_MASK | PMCR_FORCE_MODE, PMCR_FORCE_MODE); > + > /* Disable forwarding by default on all ports */ > mt7530_rmw(priv, MT7530_PCR_P(i), PCR_MATRIX_MASK, > PCR_MATRIX_CLR); > @@ -2359,6 +2363,12 @@ mt7531_setup_common(struct dsa_switch *ds) > UNU_FFP_MASK); > > for (i = 0; i < MT7530_NUM_PORTS; i++) { > + /* Clear link settings and enable force mode to force link down > + * on all ports until they're enabled later. > + */ > + mt7530_clear(priv, MT7530_PMCR_P(i), PMCR_LINK_SETTINGS_MASK); > + mt7530_set(priv, MT7530_PMCR_P(i), MT7531_FORCE_MODE); > + Same here obviously. > /* Disable forwarding by default on all ports */ > mt7530_rmw(priv, MT7530_PCR_P(i), PCR_MATRIX_MASK, > PCR_MATRIX_CLR); > @@ -2657,23 +2667,13 @@ mt753x_phylink_mac_config(struct dsa_switch *ds, int port, unsigned int mode, > const struct phylink_link_state *state) > { > struct mt7530_priv *priv = ds->priv; > - u32 mcr_cur, mcr_new; > > if ((port == 5 || port == 6) && priv->info->mac_port_config) > priv->info->mac_port_config(ds, port, mode, state->interface); > > - mcr_cur = mt7530_read(priv, MT7530_PMCR_P(port)); > - mcr_new = mcr_cur; > - mcr_new &= ~PMCR_LINK_SETTINGS_MASK; > - mcr_new |= PMCR_IFG_XMIT(1) | PMCR_MAC_MODE | PMCR_BACKOFF_EN | > - PMCR_BACKPR_EN | PMCR_FORCE_MODE_ID(priv->id); > - > /* Are we connected to external phy */ > if (port == 5 && dsa_is_user_port(ds, 5)) > - mcr_new |= PMCR_EXT_PHY; > - > - if (mcr_new != mcr_cur) > - mt7530_write(priv, MT7530_PMCR_P(port), mcr_new); > + mt7530_set(priv, MT7530_PMCR_P(port), PMCR_EXT_PHY); > } > > static void mt753x_phylink_mac_link_down(struct dsa_switch *ds, int port, > diff --git a/drivers/net/dsa/mt7530.h b/drivers/net/dsa/mt7530.h > index 8a8144868eaa..a71166e0a7fc 100644 > --- a/drivers/net/dsa/mt7530.h > +++ b/drivers/net/dsa/mt7530.h > @@ -304,8 +304,6 @@ enum mt7530_vlan_port_acc_frm { > MT7531_FORCE_DPX | \ > MT7531_FORCE_RX_FC | \ > MT7531_FORCE_TX_FC) > -#define PMCR_FORCE_MODE_ID(id) ((((id) == ID_MT7531) || ((id) == ID_MT7988)) ? \ > - MT7531_FORCE_MODE : PMCR_FORCE_MODE) > #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 | \ > > -- > 2.40.1 >
On 8.02.2024 19:22, Daniel Golle wrote: > On Thu, Feb 08, 2024 at 08:51:36AM +0300, Arınç ÜNAL via B4 Relay wrote: >> From: Arınç ÜNAL <arinc.unal@arinc9.com> >> >> Currently, the link operations for switch MACs are scattered across >> port_enable, port_disable, phylink_mac_config, phylink_mac_link_up, and >> phylink_mac_link_down. >> >> port_enable and port_disable clears the link settings. Move that to >> mt7530_setup() and mt7531_setup_common() which set up the switches. This >> way, the link settings are cleared on all ports at setup, and then only >> once with phylink_mac_link_down() when a link goes down. >> >> Enable force mode at setup to apply the force part of the link settings. >> This ensures that only active ports will have their link up. >> >> Now that the bit for setting the port on force mode is done on >> mt7530_setup() and mt7531_setup_common(), get rid of PMCR_FORCE_MODE_ID() >> which helped determine which bit to use for the switch model. >> >> The "MT7621 Giga Switch Programming Guide v0.3", "MT7531 Reference Manual >> for Development Board v1.0", and "MT7988A Wi-Fi 7 Generation Router >> Platform: Datasheet (Open Version) v0.1" documents show that these bits are >> enabled at reset: >> >> PMCR_IFG_XMIT(1) (not part of PMCR_LINK_SETTINGS_MASK) >> PMCR_MAC_MODE (not part of PMCR_LINK_SETTINGS_MASK) >> PMCR_TX_EN >> PMCR_RX_EN >> PMCR_BACKOFF_EN (not part of PMCR_LINK_SETTINGS_MASK) >> PMCR_BACKPR_EN (not part of PMCR_LINK_SETTINGS_MASK) >> PMCR_TX_FC_EN >> PMCR_RX_FC_EN >> >> These bits also don't exist on the MT7530_PMCR_P(6) register of the switch >> on the MT7988 SoC: >> >> PMCR_IFG_XMIT() >> PMCR_MAC_MODE >> PMCR_BACKOFF_EN >> PMCR_BACKPR_EN >> >> Remove the setting of the bits not part of PMCR_LINK_SETTINGS_MASK on >> phylink_mac_config as they're already set. >> >> Suggested-by: Vladimir Oltean <olteanv@gmail.com> >> Signed-off-by: Arınç ÜNAL <arinc.unal@arinc9.com> >> --- >> drivers/net/dsa/mt7530.c | 26 +++++++++++++------------- >> drivers/net/dsa/mt7530.h | 2 -- >> 2 files changed, 13 insertions(+), 15 deletions(-) >> >> diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c >> index 5c8ad41ce8cd..f67db577d1c0 100644 >> --- a/drivers/net/dsa/mt7530.c >> +++ b/drivers/net/dsa/mt7530.c >> @@ -1018,7 +1018,6 @@ mt7530_port_enable(struct dsa_switch *ds, int port, >> priv->ports[port].enable = true; >> mt7530_rmw(priv, MT7530_PCR_P(port), PCR_MATRIX_MASK, >> priv->ports[port].pm); >> - mt7530_clear(priv, MT7530_PMCR_P(port), PMCR_LINK_SETTINGS_MASK); >> >> mutex_unlock(&priv->reg_mutex); >> >> @@ -1038,7 +1037,6 @@ mt7530_port_disable(struct dsa_switch *ds, int port) >> priv->ports[port].enable = false; >> mt7530_rmw(priv, MT7530_PCR_P(port), PCR_MATRIX_MASK, >> PCR_MATRIX_CLR); >> - mt7530_clear(priv, MT7530_PMCR_P(port), PMCR_LINK_SETTINGS_MASK); >> >> mutex_unlock(&priv->reg_mutex); >> } >> @@ -2257,6 +2255,12 @@ mt7530_setup(struct dsa_switch *ds) >> mt7530_mib_reset(ds); >> >> for (i = 0; i < MT7530_NUM_PORTS; i++) { >> + /* Clear link settings and enable force mode to force link down >> + * on all ports until they're enabled later. >> + */ >> + mt7530_clear(priv, MT7530_PMCR_P(i), PMCR_LINK_SETTINGS_MASK); >> + mt7530_set(priv, MT7530_PMCR_P(i), PMCR_FORCE_MODE); > > Any reason to not combine the two lines above into a single call: > > mt7530_rmw(priv, MT7530_PMCR_P(i), > PMCR_LINK_SETTINGS_MASK | PMCR_FORCE_MODE, > PMCR_FORCE_MODE); No reason whatsoever, I'll do this. Thanks! Arınç
On Thu, Feb 08, 2024 at 08:51:36AM +0300, Arınç ÜNAL via B4 Relay wrote: > From: Arınç ÜNAL <arinc.unal@arinc9.com> > > Currently, the link operations for switch MACs are scattered across > port_enable, port_disable, phylink_mac_config, phylink_mac_link_up, and > phylink_mac_link_down. > > port_enable and port_disable clears the link settings. Move that to > mt7530_setup() and mt7531_setup_common() which set up the switches. This > way, the link settings are cleared on all ports at setup, and then only > once with phylink_mac_link_down() when a link goes down. > > Enable force mode at setup to apply the force part of the link settings. > This ensures that only active ports will have their link up. I think we may have a different interpretation of what phylink's mac_link_down() and mac_link_up() are supposed to be doing here. Of course, you have read the documentation of these methods so are fully aware of what they're supposed to do. So you are aware that when inband mode is being used, forcing the link down may be counter-productive depending on how the hardware works.
On 16.02.2024 18:43, Russell King (Oracle) wrote: > On Thu, Feb 08, 2024 at 08:51:36AM +0300, Arınç ÜNAL via B4 Relay wrote: >> From: Arınç ÜNAL <arinc.unal@arinc9.com> >> >> Currently, the link operations for switch MACs are scattered across >> port_enable, port_disable, phylink_mac_config, phylink_mac_link_up, and >> phylink_mac_link_down. >> >> port_enable and port_disable clears the link settings. Move that to >> mt7530_setup() and mt7531_setup_common() which set up the switches. This >> way, the link settings are cleared on all ports at setup, and then only >> once with phylink_mac_link_down() when a link goes down. >> >> Enable force mode at setup to apply the force part of the link settings. >> This ensures that only active ports will have their link up. > > I think we may have a different interpretation of what phylink's > mac_link_down() and mac_link_up() are supposed to be doing here. > Of course, you have read the documentation of these methods so are > fully aware of what they're supposed to do. So you are aware that > when inband mode is being used, forcing the link down may be > counter-productive depending on how the hardware works. No, I haven't read the documentation [1] until your response here. My patch here doesn't touch mt753x_phylink_mac_link_down(), it is already the case with the driver that falls short of not forcing link down when inband mode is being used. That said, what I explain on the patch log does not properly describe the driver behaviour. This should explain it correctly: Enable force mode at setup to apply the force part of the link settings. This ensures that the ports that were never active will have their link down. I could, in the future, study this thoroughly to make the driver fully conform to the documentation. [1] https://docs.kernel.org/networking/kapi.html#phylink Arınç
diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c index 5c8ad41ce8cd..f67db577d1c0 100644 --- a/drivers/net/dsa/mt7530.c +++ b/drivers/net/dsa/mt7530.c @@ -1018,7 +1018,6 @@ mt7530_port_enable(struct dsa_switch *ds, int port, priv->ports[port].enable = true; mt7530_rmw(priv, MT7530_PCR_P(port), PCR_MATRIX_MASK, priv->ports[port].pm); - mt7530_clear(priv, MT7530_PMCR_P(port), PMCR_LINK_SETTINGS_MASK); mutex_unlock(&priv->reg_mutex); @@ -1038,7 +1037,6 @@ mt7530_port_disable(struct dsa_switch *ds, int port) priv->ports[port].enable = false; mt7530_rmw(priv, MT7530_PCR_P(port), PCR_MATRIX_MASK, PCR_MATRIX_CLR); - mt7530_clear(priv, MT7530_PMCR_P(port), PMCR_LINK_SETTINGS_MASK); mutex_unlock(&priv->reg_mutex); } @@ -2257,6 +2255,12 @@ mt7530_setup(struct dsa_switch *ds) mt7530_mib_reset(ds); for (i = 0; i < MT7530_NUM_PORTS; i++) { + /* Clear link settings and enable force mode to force link down + * on all ports until they're enabled later. + */ + mt7530_clear(priv, MT7530_PMCR_P(i), PMCR_LINK_SETTINGS_MASK); + mt7530_set(priv, MT7530_PMCR_P(i), PMCR_FORCE_MODE); + /* Disable forwarding by default on all ports */ mt7530_rmw(priv, MT7530_PCR_P(i), PCR_MATRIX_MASK, PCR_MATRIX_CLR); @@ -2359,6 +2363,12 @@ mt7531_setup_common(struct dsa_switch *ds) UNU_FFP_MASK); for (i = 0; i < MT7530_NUM_PORTS; i++) { + /* Clear link settings and enable force mode to force link down + * on all ports until they're enabled later. + */ + mt7530_clear(priv, MT7530_PMCR_P(i), PMCR_LINK_SETTINGS_MASK); + mt7530_set(priv, MT7530_PMCR_P(i), MT7531_FORCE_MODE); + /* Disable forwarding by default on all ports */ mt7530_rmw(priv, MT7530_PCR_P(i), PCR_MATRIX_MASK, PCR_MATRIX_CLR); @@ -2657,23 +2667,13 @@ mt753x_phylink_mac_config(struct dsa_switch *ds, int port, unsigned int mode, const struct phylink_link_state *state) { struct mt7530_priv *priv = ds->priv; - u32 mcr_cur, mcr_new; if ((port == 5 || port == 6) && priv->info->mac_port_config) priv->info->mac_port_config(ds, port, mode, state->interface); - mcr_cur = mt7530_read(priv, MT7530_PMCR_P(port)); - mcr_new = mcr_cur; - mcr_new &= ~PMCR_LINK_SETTINGS_MASK; - mcr_new |= PMCR_IFG_XMIT(1) | PMCR_MAC_MODE | PMCR_BACKOFF_EN | - PMCR_BACKPR_EN | PMCR_FORCE_MODE_ID(priv->id); - /* Are we connected to external phy */ if (port == 5 && dsa_is_user_port(ds, 5)) - mcr_new |= PMCR_EXT_PHY; - - if (mcr_new != mcr_cur) - mt7530_write(priv, MT7530_PMCR_P(port), mcr_new); + mt7530_set(priv, MT7530_PMCR_P(port), PMCR_EXT_PHY); } static void mt753x_phylink_mac_link_down(struct dsa_switch *ds, int port, diff --git a/drivers/net/dsa/mt7530.h b/drivers/net/dsa/mt7530.h index 8a8144868eaa..a71166e0a7fc 100644 --- a/drivers/net/dsa/mt7530.h +++ b/drivers/net/dsa/mt7530.h @@ -304,8 +304,6 @@ enum mt7530_vlan_port_acc_frm { MT7531_FORCE_DPX | \ MT7531_FORCE_RX_FC | \ MT7531_FORCE_TX_FC) -#define PMCR_FORCE_MODE_ID(id) ((((id) == ID_MT7531) || ((id) == ID_MT7988)) ? \ - MT7531_FORCE_MODE : PMCR_FORCE_MODE) #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 | \