From: Choong Yong Liang <yong.liang.choong@linux.intel.com>
To: "Russell King (Oracle)" <linux@armlinux.org.uk>
Cc: "Simon Horman" <horms@kernel.org>,
"Jose Abreu" <joabreu@synopsys.com>,
"Jose Abreu" <Jose.Abreu@synopsys.com>,
"David E Box" <david.e.box@linux.intel.com>,
"Thomas Gleixner" <tglx@linutronix.de>,
"Ingo Molnar" <mingo@redhat.com>,
"Borislav Petkov" <bp@alien8.de>,
"Dave Hansen" <dave.hansen@linux.intel.com>,
"H . Peter Anvin" <hpa@zytor.com>,
"Rajneesh Bhardwaj" <irenic.rajneesh@gmail.com>,
"David E Box" <david.e.box@intel.com>,
"Andrew Lunn" <andrew+netdev@lunn.ch>,
"David S . Miller" <davem@davemloft.net>,
"Eric Dumazet" <edumazet@google.com>,
"Jakub Kicinski" <kuba@kernel.org>,
"Paolo Abeni" <pabeni@redhat.com>,
"Maxime Coquelin" <mcoquelin.stm32@gmail.com>,
"Alexandre Torgue" <alexandre.torgue@foss.st.com>,
"Jiawen Wu" <jiawenwu@trustnetic.com>,
"Mengyuan Lou" <mengyuanlou@net-swift.com>,
"Heiner Kallweit" <hkallweit1@gmail.com>,
"Hans de Goede" <hdegoede@redhat.com>,
"Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>,
"Richard Cochran" <richardcochran@gmail.com>,
"Serge Semin" <fancer.lancer@gmail.com>,
x86@kernel.org, linux-kernel@vger.kernel.org,
netdev@vger.kernel.org, platform-driver-x86@vger.kernel.org,
linux-stm32@st-md-mailman.stormreply.com,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH net-next v7 2/7] net: pcs: xpcs: re-initiate clause 37 Auto-negotiation
Date: Fri, 7 Feb 2025 17:20:29 +0800 [thread overview]
Message-ID: <564ede5d-9f53-40be-9305-63f63b384e15@linux.intel.com> (raw)
In-Reply-To: <Z6TVmdCZeWerAZKP@shell.armlinux.org.uk>
On 6/2/2025 11:30 pm, Russell King (Oracle) wrote:
> On Thu, Feb 06, 2025 at 09:18:54PM +0800, Choong Yong Liang wrote:
>> The xpcs_switch_interface_mode function was introduced to handle
>> interface switching.
>>
>> According to the XPCS datasheet, a soft reset is required to initiate
>> Clause 37 auto-negotiation when the XPCS switches interface modes.
>
> Hmm. Given that description, taking it literally, claus 37
> auto-negotiation is 1000BASE-X, not Cisco SGMII (which isn't an IEEE
> 802.3 standard.) Are you absolutely sure that this applies to Cisco
> SGMII?
>
Hi Russell,
Yes, you are correct that Clause 37 auto-negotiation is for 1000BASE-X.
However, I do not believe it applies to Cisco SGMII. The XPCS implements
Clause 37 auto-negotiation for both 1000BASE-X and SGMII.
> If the reset is required when switching to SGMII, should it be done
> before or after configuring the XPCS for SGMII?
>
A soft reset is required before configuring the XPCS for SGMII. Based on
the existing XPCS handling in the initial state, the xpcs_create() function
will be called, and then xpcs->need_reset will be set to true. Later on,
phylink_major_config() will call xpcs_pre_config() to perform the
xpcs_soft_reset(), and then it will continue with xpcs_config().
I apologize for missing this patch:
https://patchwork.kernel.org/project/netdevbpf/patch/E1svfMA-005ZI3-Va@rmk-PC.armlinux.org.uk/
I think I should move xpcs_switch_interface_mode() to xpcs_pre_config() and
just update xpcs->need_reset instead of implementing my own method for
calling xpcs_soft_reset().
> Also, if the reset is required, what happens if we're already using
> SGMII, but AN has been disabled temporarily and is then re-enabled?
> Is a reset required?
>
Good point. I cannot find this scenario in the datasheet. Please allow me
some time to test this scenario. I will update you with the results.
> What about 1000BASE-X when AN is enabled or disabled and then switching
> to SGMII?
>
According to the datasheet, a soft reset is required.
>> +static int xpcs_switch_to_aneg_c37_sgmii(const struct dw_xpcs_compat *compat,
>> + struct dw_xpcs *xpcs,
>> + unsigned int neg_mode)
>> +{
>> + bool an_c37_enabled;
>> + int ret, mdio_ctrl;
>> +
>> + if (neg_mode == PHYLINK_PCS_NEG_INBAND_ENABLED) {
>> + mdio_ctrl = xpcs_read(xpcs, MDIO_MMD_VEND2, MII_BMCR);
>> + if (mdio_ctrl < 0)
>> + return mdio_ctrl;
>> +
>> + an_c37_enabled = mdio_ctrl & BMCR_ANENABLE;
>> + if (!an_c37_enabled) {
>
> I don't think that we need "an_c37_enabled" here, I think simply:
>
> if (!(mdio_ctrl & BMCR_ANENABLE)) {
>
> would be sufficient.
>
>> + //Perform soft reset to initiate C37 auto-negotiation
>> + ret = xpcs_soft_reset(xpcs, compat);
>> + if (ret)
>> + return ret;
>> + }
>> + }
>> + return 0;
>
> I'm also wondering (as above) whether this soft reset needs to happen
> _after_ xpcs_config_aneg_c37_sgmii() has done its work - this function
> temporarily disables AN while it's doing its work.
>
Based on the programming sequence in the datasheet, it is not necessary to
perform a soft reset after xpcs_config_aneg_c37_sgmii() has completed its work.
> I'm also wondering whether AN being disabled is really a deciding
> factor (e.g. when switching from 1000BASE-X AN-enabled to SGMII, is a
> reset required?)
>
Thank you for pointing this out. The datasheet only mentions performing a
soft reset when switching to the 1000BASE-X and SGMII interfaces, and it
does not specify whether AN needs to be enabled or disabled. I thought
adding a check would reduce the calls to the soft reset. However, I did not
consider the scenario of switching from 1000BASE-X with AN enabled to SGMII
with AN enabled. This scenario might cause regression. I will remove all
the checks and just perform a soft reset when switching to the SGMII interface.
next prev parent reply other threads:[~2025-02-07 9:23 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-06 13:18 [PATCH net-next v7 0/7] Enable SGMII and 2500BASEX interface mode switching for Intel platforms Choong Yong Liang
2025-02-06 13:18 ` [PATCH net-next v7 1/7] net: phylink: use pl->link_interface in phylink_expects_phy() Choong Yong Liang
2025-02-06 13:18 ` [PATCH net-next v7 2/7] net: pcs: xpcs: re-initiate clause 37 Auto-negotiation Choong Yong Liang
2025-02-06 15:30 ` Russell King (Oracle)
2025-02-07 9:20 ` Choong Yong Liang [this message]
2025-02-07 13:32 ` Andrew Lunn
2025-02-08 3:33 ` Choong Yong Liang
2025-02-20 2:12 ` Choong Yong Liang
2025-02-06 13:18 ` [PATCH net-next v7 3/7] arch: x86: add IPC mailbox accessor function and add SoC register access Choong Yong Liang
2025-02-06 16:46 ` Dave Hansen
2025-02-06 22:48 ` Andrew Lunn
2025-02-19 17:01 ` David E. Box
2025-02-20 2:29 ` Choong Yong Liang
2025-02-06 13:18 ` [PATCH net-next v7 4/7] stmmac: intel: configure SerDes according to the interface mode Choong Yong Liang
2025-02-06 13:31 ` Ilpo Järvinen
2025-02-07 9:53 ` Choong Yong Liang
2025-02-06 13:18 ` [PATCH net-next v7 5/7] net: stmmac: configure SerDes on mac_finish Choong Yong Liang
2025-02-06 13:18 ` [PATCH net-next v7 6/7] stmmac: intel: interface switching support for EHL platform Choong Yong Liang
2025-02-06 13:18 ` [PATCH net-next v7 7/7] stmmac: intel: interface switching support for ADL-N platform Choong Yong Liang
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=564ede5d-9f53-40be-9305-63f63b384e15@linux.intel.com \
--to=yong.liang.choong@linux.intel.com \
--cc=Jose.Abreu@synopsys.com \
--cc=alexandre.torgue@foss.st.com \
--cc=andrew+netdev@lunn.ch \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=davem@davemloft.net \
--cc=david.e.box@intel.com \
--cc=david.e.box@linux.intel.com \
--cc=edumazet@google.com \
--cc=fancer.lancer@gmail.com \
--cc=hdegoede@redhat.com \
--cc=hkallweit1@gmail.com \
--cc=horms@kernel.org \
--cc=hpa@zytor.com \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=irenic.rajneesh@gmail.com \
--cc=jiawenwu@trustnetic.com \
--cc=joabreu@synopsys.com \
--cc=kuba@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-stm32@st-md-mailman.stormreply.com \
--cc=linux@armlinux.org.uk \
--cc=mcoquelin.stm32@gmail.com \
--cc=mengyuanlou@net-swift.com \
--cc=mingo@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=platform-driver-x86@vger.kernel.org \
--cc=richardcochran@gmail.com \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
/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.