[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <Y3yvd0uyG2tNeED3@shell.armlinux.org.uk>
Date: Tue, 22 Nov 2022 11:16:07 +0000
From: "Russell King (Oracle)" <linux@...linux.org.uk>
To: Vladimir Oltean <vladimir.oltean@....com>
Cc: netdev@...r.kernel.org, "David S. Miller" <davem@...emloft.net>,
Eric Dumazet <edumazet@...gle.com>,
Jakub Kicinski <kuba@...nel.org>,
Paolo Abeni <pabeni@...hat.com>,
Heiner Kallweit <hkallweit1@...il.com>,
Andrew Lunn <andrew@...n.ch>,
Florian Fainelli <f.fainelli@...il.com>,
UNGLinuxDriver@...rochip.com,
bcm-kernel-feedback-list@...adcom.com,
Madalin Bucur <madalin.bucur@....nxp.com>,
Camelia Groza <camelia.groza@....com>,
Claudiu Manoil <claudiu.manoil@....com>,
Ioana Ciornei <ioana.ciornei@....com>,
Maxim Kochetkov <fido_max@...ox.ru>,
Sean Anderson <sean.anderson@...o.com>,
Antoine Tenart <atenart@...nel.org>,
Michael Walle <michael@...le.cc>,
Raag Jadav <raagjadav@...il.com>,
Siddharth Vadapalli <s-vadapalli@...com>,
Ong Boon Leong <boon.leong.ong@...el.com>,
Colin Foster <colin.foster@...advantage.com>,
Marek Behun <marek.behun@....cz>
Subject: Re: [PATCH v4 net-next 3/8] net: phy: bcm84881: move the in-band
capability check where it belongs
On Tue, Nov 22, 2022 at 09:38:43AM +0000, Russell King (Oracle) wrote:
> Also, if we get the Marvell driver implementing validate_an_inband()
> then I believe we can get rid of other parts of this patch - 88E1111 is
> the commonly used accessible PHY on gigabit SFPs, as this PHY implements
> I2C access natively. As I mentioned, Marvell PHYs can be set to no
> inband, requiring inband, or inband with bypass mode enabled. So we
> need to decide how we deal with that - especially if we're going to be
> changing the mode from 1000base-X to SGMII (which we do on some SFP
> modules so they work at 10/100/1000.)
For the Marvell 88E1111:
- If switching into 1000base-X mode, then bypass mode is enabled by
m88e1111_config_init_1000basex(). However, if AN is disabled in the
fibre page BMCR (e.g. by firmware), then AN won't be used.
- If switching into SGMII mode, then bypass mode is left however it was
originally set by m88e1111_config_init_sgmii() - so it may be allowed
or it may be disallowed, which means it's whatever the hardware
defaulted to or firmware set it as.
For the 88e151x (x=0,2,8) it looks like bypass mode defaults to being
allowed on hardware reset, but firmware may change that.
I don't think we make much of an effort to configure other Marvell
PHYs, relying on their hardware reset defaults or firmware to set
them appropriately.
So, I think for 88e151x, we should implement something like:
int mode, bmcr, fscr2;
/* RGMII too? I believe RGMII can signal inband as well, so we
* may need to handle that as well.
*/
if (interface != PHY_INTERFACE_MODE_SGMII &&
interface != PHY_INTERFACE_MODE_1000BASE_X)
return PHY_AN_INBAND_UNKNOWN;
bmcr = phy_read_paged(phydev, MII_MARVELL_FIBER_PAGE, MII_BMCR);
if (bmcr < 0)
return SOME_ERROR?
mode = PHY_AN_INBAND_OFF;
if (bmcr & BMCR_ANENABLE) {
mode = PHY_AN_INBAND_ON;
fscr2 = phy_read_paged(phydev, MII_MARVELL_FIBER_PAGE,
0x1a);
if (fscr2 & BIT(6))
mode |= PHY_AN_INBAND_TIMEOUT;
}
return mode;
Obviously adding register definitions for BIT(6) and 01a.
For the 88E1111:
int mode, hwcfg;
/* If operating in 1000base-X mode, we always turn on inband
* and allow bypass.
*/
if (interface == PHY_INTERFACE_MODE_1000BASEX)
return PHY_AN_INBAND_ON | PHY_AN_INBAND_TIMEOUT;
if (interface == PHY_INTERFACE_MODE_SGMII) {
hwcfg = phy_read(phydev, MII_M1111_PHY_EXT_SR);
if (hwcfg < 0)
return SOME_ERROR?
mode = PHY_AN_INBAND_ON;
if (hwcfg & MII_M1111_HWCFG_SERIAL_AN_BYPASS)
mode |= PHY_AN_INBAND_TIMEOUT;
return mode;
}
return PHY_AN_INBAND_UNKNOWN;
Maybe?
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!
Powered by blists - more mailing lists