All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Russell King (Oracle)" <linux@armlinux.org.uk>
To: Vladimir Oltean <vladimir.oltean@nxp.com>
Cc: netdev@vger.kernel.org, Jose Abreu <Jose.Abreu@synopsys.com>,
	Andrew Lunn <andrew@lunn.ch>,
	Heiner Kallweit <hkallweit1@gmail.com>,
	"David S. Miller" <davem@davemloft.net>,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
	Voon Weifeng <weifeng.voon@intel.com>,
	Michael Sit Wei Hong <michael.wei.hong.sit@intel.com>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH net 2/2] net: pcs: xpcs: actively unset DW_VR_MII_DIG_CTRL1_2G5_EN for 1G SGMII
Date: Wed, 15 Jan 2025 15:41:13 +0000	[thread overview]
Message-ID: <Z4fXGULd-6_rxgRR@shell.armlinux.org.uk> (raw)
In-Reply-To: <20250115145145.4jdajfaksyfkx5zh@skbuf>

On Wed, Jan 15, 2025 at 04:51:45PM +0200, Vladimir Oltean wrote:
> On Wed, Jan 15, 2025 at 02:44:52PM +0000, Russell King (Oracle) wrote:
> > On Tue, Jan 14, 2025 at 06:47:21PM +0200, Vladimir Oltean wrote:
> > > xpcs_config_2500basex() sets DW_VR_MII_DIG_CTRL1_2G5_EN, but
> > > xpcs_config_aneg_c37_sgmii() never unsets it. So, on a protocol change
> > > from 2500base-x to sgmii, the DW_VR_MII_DIG_CTRL1_2G5_EN bit will remain
> > > set.
> > > 
> > > Fixes: f27abde3042a ("net: pcs: add 2500BASEX support for Intel mGbE controller")
> > > Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
> > 
> > Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
> > 
> > Thanks!
> > 
> > I wonder whether, now that we have in-band capabilities, and thus
> > phylink knows whether AN should be enabled or not, whether we can
> > simplify all these different config functions and rely on the
> > neg_mode from phylink to configure in-band appropriately.
> 
> I don't understand, many sub-functions of xpcs_do_config() use neg_mode
> already.
> 
> If you're talking about replacing compat->an_mode with something derived
> partially from the neg_mode and partially from state->interface, then in
> principle yes, sure, but we will need new neg_modes for clause 73
> auto-negotiation (to replace DW_AN_C73), plus appropriate handling in phylink.

No, I'm thinking that xpcs_config_aneg_c37_sgmii(),
xpcs_config_aneg_c37_1000basex() and xpcs_config_2500basex() can
be rolled into a single function.


	SGMII
	modify vendor 2 MII_BMCR
	- clear BMCR_ANENABLE
	modify vendor 2 DW_VR_MII_AN_CTRL
	- set DW_VR_MII_PCS_MODE_MASK to 
	  DW_VR_MII_PCS_MODE_C37_SGMII
	- configure  DW_VR_MII_TX_CONFIG_MASK for MAC or if txgbe, PHY side
	- set DW_VR_MII_AN_CTRL_8BIT (if txgbe)
	modify vendor 2 DW_VR_MII_DIG_CTRL1
	- set DW_VR_MII_DIG_CTRL1_MAC_AUTO_SW if
	    PHYLINK_PCS_NEG_INBAND_ENABLED
	- set DW_VR_MII_DIG_CTRL1_PHY_MODE_CTRL if txgbe
	write vendor 2 DW_VR_MII_DIG_CTRL1
	set BMCR_ANENABLE in vendor 2 MII_BMCR if
	  PHYLINK_PCS_NEG_INBAND_ENABLED

	1000BASE-X
	modify vendor 2 MII_BMCR
	- clear BMCR_ANENABLE
	modify DW_VR_MII_AN_CTRL
	- set DW_VR_MII_PCS_MODE_MASK to
	  DW_VR_MII_PCS_MODE_C37_1000BASEX
	- set DW_VR_MII_AN_INTR_EN if using interrupts (shouldn't SGMII
	  also do this?)
	encode advertisement and write to vendor 2 MII_ADVERTISE
	clear vendor 2 DW_VR_MII_AN_INTR_STS register (if using
	interrupts shouldn't this also apply to SGMII?)
	set BMCR_ANENABLE in vendor 2 MII_BMCR if
	  PHYLINK_PCS_NEG_INBAND_ENABLED

	2500BASE-X
	modify vendor 2 DW_VR_MII_DIG_CTRL1:
	- set DW_VR_MII_DIG_CTRL1_2G5_EN
	- clear DW_VR_MII_DIG_CTRL1_MAC_AUTO_SW
	modify vendor 2 MII_BMCR:
	- clear BMCR_ANENABLE, BMCR_SPEED100
	- set BMCR_SPEED1000
	(shouldn't this clear BMCR_ANENABLE first, like the other two
	 configurations above?)

So, sticking this altogether, making some assumptions on the above
questions, it becomes:

	modify vendor 2 MII_BMCR
	- clear BMCR_ANENABLE
	modify DW_VR_MII_AN_CTRL
	- set DW_VR_MII_PCS_MODE_MASK to 
	  - DW_VR_MII_PCS_MODE_C37_SGMII if using SGMII
	  - DW_VR_MII_PCS_MODE_C37_1000BASEX if using 1000BASE-X or
	    2500BASE-X
	- configure  DW_VR_MII_TX_CONFIG_MASK for MAC or if txgbe, PHY
	  side
	- set DW_VR_MII_AN_CTRL_8BIT (if txgbe)
	- set DW_VR_MII_AN_INTR_EN if using interrupts (shouldn't SGMII
	  also do this?)
	modify vendor 2 DW_VR_MII_DIG_CTRL1
	- set DW_VR_MII_DIG_CTRL1_MAC_AUTO_SW if
	    PHYLINK_PCS_NEG_INBAND_ENABLED
	- set DW_VR_MII_DIG_CTRL1_PHY_MODE_CTRL if txgbe
	encode advertisement and write to vendor 2 MII_ADVERTISE
	clear vendor 2 DW_VR_MII_AN_INTR_STS register
	set BMCR_ANENABLE in vendor 2 MII_BMCR if
	  PHYLINK_PCS_NEG_INBAND_ENABLED

Which would avoid variability in register values when phylink
transitions the PCS between SGMII, 1000base-X and 2500base-X that
will occur today - e.g., when switching from either SGMII or
1000base-X to 2500base-X, then the following register fields do
not get written and are left how they were last configured:

	DW_VR_MII_AN_CTRL at all
	DW_VR_MII_PCS_MODE_MASK
	DW_VR_MII_TX_CONFIG_MASK
	DW_VR_MII_AN_CTRL_8BIT
	DW_VR_MII_DIG_CTRL1_PHY_MODE_CTRL

For example, switching from SGMII to 2500base-X, the
DW_VR_MII_PCS_MODE_MASK field will be left as
DW_VR_MII_PCS_MODE_C37_SGMII, but if switching from 1000base-X to
2500base-X, it will be DW_VR_MII_PCS_MODE_C37_1000BASEX.

Maybe it doesn't matter, because maybe setting
DW_VR_MII_DIG_CTRL1_2G5_EN overrides a whole host of register
configuration?

-- 
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 80Mbps down 10Mbps up. Decent connectivity at last!

  reply	other threads:[~2025-01-15 15:41 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-01-14 16:47 [PATCH net 1/2] net: pcs: xpcs: fix DW_VR_MII_DIG_CTRL1_2G5_EN bit being set for 1G SGMII w/o inband Vladimir Oltean
2025-01-14 16:47 ` [PATCH net 2/2] net: pcs: xpcs: actively unset DW_VR_MII_DIG_CTRL1_2G5_EN for 1G SGMII Vladimir Oltean
2025-01-15 14:39   ` Maxime Chevallier
2025-01-15 14:44   ` Russell King (Oracle)
2025-01-15 14:51     ` Vladimir Oltean
2025-01-15 15:41       ` Russell King (Oracle) [this message]
2025-01-15 14:37 ` [PATCH net 1/2] net: pcs: xpcs: fix DW_VR_MII_DIG_CTRL1_2G5_EN bit being set for 1G SGMII w/o inband Maxime Chevallier
2025-01-15 14:43 ` Russell King (Oracle)
2025-01-15 21:30 ` patchwork-bot+netdevbpf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Z4fXGULd-6_rxgRR@shell.armlinux.org.uk \
    --to=linux@armlinux.org.uk \
    --cc=Jose.Abreu@synopsys.com \
    --cc=andrew@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=hkallweit1@gmail.com \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=michael.wei.hong.sit@intel.com \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=vladimir.oltean@nxp.com \
    --cc=weifeng.voon@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.