* [PATCH net] net: phy: micrel: Fix the KSZ9131 MDI-X status issue
@ 2024-07-12 11:16 Raju Lakkaraju
2024-07-18 8:51 ` Paolo Abeni
2024-07-18 15:04 ` Andrew Lunn
0 siblings, 2 replies; 4+ messages in thread
From: Raju Lakkaraju @ 2024-07-12 11:16 UTC (permalink / raw)
To: netdev
Cc: davem, kuba, andrew, hkallweit1, linux, edumazet, pabeni,
horatiu.vultur, linux-kernel, UNGLinuxDriver
Access information about Auto mdix completion and pair selection from the
KSZ9131's Auto/MDI/MDI-X status register
Fixes: b64e6a8794d9 ("net: phy: micrel: Add PHY Auto/MDI/MDI-X set driver for KSZ9131")
Signed-off-by: Raju Lakkaraju <Raju.Lakkaraju@microchip.com>
---
drivers/net/phy/micrel.c | 23 ++++++++++++++++++-----
1 file changed, 18 insertions(+), 5 deletions(-)
diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c
index ebafedde0ab7..fddc1b91ba7f 100644
--- a/drivers/net/phy/micrel.c
+++ b/drivers/net/phy/micrel.c
@@ -1438,6 +1438,9 @@ static int ksz9131_config_init(struct phy_device *phydev)
#define MII_KSZ9131_AUTO_MDIX 0x1C
#define MII_KSZ9131_AUTO_MDI_SET BIT(7)
#define MII_KSZ9131_AUTO_MDIX_SWAP_OFF BIT(6)
+#define MII_KSZ9131_DIG_AXAN_STS 0x14
+#define MII_KSZ9131_DIG_AXAN_STS_LINK_DET BIT(14)
+#define MII_KSZ9131_DIG_AXAN_STS_A_SELECT BIT(12)
static int ksz9131_mdix_update(struct phy_device *phydev)
{
@@ -1452,14 +1455,24 @@ static int ksz9131_mdix_update(struct phy_device *phydev)
phydev->mdix_ctrl = ETH_TP_MDI;
else
phydev->mdix_ctrl = ETH_TP_MDI_X;
+
+ phydev->mdix = phydev->mdix_ctrl;
} else {
+ ret = phy_read(phydev, MII_KSZ9131_DIG_AXAN_STS);
+ if (ret < 0)
+ return ret;
+
phydev->mdix_ctrl = ETH_TP_MDI_AUTO;
- }
- if (ret & MII_KSZ9131_AUTO_MDI_SET)
- phydev->mdix = ETH_TP_MDI;
- else
- phydev->mdix = ETH_TP_MDI_X;
+ if (ret & MII_KSZ9131_DIG_AXAN_STS_LINK_DET) {
+ if (ret & MII_KSZ9131_DIG_AXAN_STS_A_SELECT)
+ phydev->mdix = ETH_TP_MDI;
+ else
+ phydev->mdix = ETH_TP_MDI_X;
+ } else {
+ phydev->mdix = ETH_TP_MDI_INVALID;
+ }
+ }
return 0;
}
--
2.34.1
^ permalink raw reply related [flat|nested] 4+ messages in thread* Re: [PATCH net] net: phy: micrel: Fix the KSZ9131 MDI-X status issue 2024-07-12 11:16 [PATCH net] net: phy: micrel: Fix the KSZ9131 MDI-X status issue Raju Lakkaraju @ 2024-07-18 8:51 ` Paolo Abeni 2024-07-18 15:04 ` Andrew Lunn 1 sibling, 0 replies; 4+ messages in thread From: Paolo Abeni @ 2024-07-18 8:51 UTC (permalink / raw) To: Raju Lakkaraju, netdev Cc: davem, kuba, andrew, hkallweit1, linux, edumazet, horatiu.vultur, linux-kernel, UNGLinuxDriver On 7/12/24 13:16, Raju Lakkaraju wrote: > Access information about Auto mdix completion and pair selection from the > KSZ9131's Auto/MDI/MDI-X status register > > Fixes: b64e6a8794d9 ("net: phy: micrel: Add PHY Auto/MDI/MDI-X set driver for KSZ9131") > Signed-off-by: Raju Lakkaraju <Raju.Lakkaraju@microchip.com> @Andrew, @Heiner: the patch LGTM, any feedback on your side? thanks, Paolo ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH net] net: phy: micrel: Fix the KSZ9131 MDI-X status issue 2024-07-12 11:16 [PATCH net] net: phy: micrel: Fix the KSZ9131 MDI-X status issue Raju Lakkaraju 2024-07-18 8:51 ` Paolo Abeni @ 2024-07-18 15:04 ` Andrew Lunn 2024-07-25 6:59 ` Raju Lakkaraju 1 sibling, 1 reply; 4+ messages in thread From: Andrew Lunn @ 2024-07-18 15:04 UTC (permalink / raw) To: Raju Lakkaraju Cc: netdev, davem, kuba, hkallweit1, linux, edumazet, pabeni, horatiu.vultur, linux-kernel, UNGLinuxDriver On Fri, Jul 12, 2024 at 04:46:48PM +0530, Raju Lakkaraju wrote: > Access information about Auto mdix completion and pair selection from the > KSZ9131's Auto/MDI/MDI-X status register Please explain what the broken behaviour is. How would i know i need this patch? You have not included a Cc: stable tag. Does that mean this does not bother anybody and so does not need backporting? > Fixes: b64e6a8794d9 ("net: phy: micrel: Add PHY Auto/MDI/MDI-X set driver for KSZ9131") > Signed-off-by: Raju Lakkaraju <Raju.Lakkaraju@microchip.com> > --- > drivers/net/phy/micrel.c | 23 ++++++++++++++++++----- > 1 file changed, 18 insertions(+), 5 deletions(-) > > diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c > index ebafedde0ab7..fddc1b91ba7f 100644 > --- a/drivers/net/phy/micrel.c > +++ b/drivers/net/phy/micrel.c > @@ -1438,6 +1438,9 @@ static int ksz9131_config_init(struct phy_device *phydev) > #define MII_KSZ9131_AUTO_MDIX 0x1C > #define MII_KSZ9131_AUTO_MDI_SET BIT(7) > #define MII_KSZ9131_AUTO_MDIX_SWAP_OFF BIT(6) > +#define MII_KSZ9131_DIG_AXAN_STS 0x14 > +#define MII_KSZ9131_DIG_AXAN_STS_LINK_DET BIT(14) > +#define MII_KSZ9131_DIG_AXAN_STS_A_SELECT BIT(12) > > static int ksz9131_mdix_update(struct phy_device *phydev) > { > @@ -1452,14 +1455,24 @@ static int ksz9131_mdix_update(struct phy_device *phydev) > phydev->mdix_ctrl = ETH_TP_MDI; > else > phydev->mdix_ctrl = ETH_TP_MDI_X; > + > + phydev->mdix = phydev->mdix_ctrl; This seems a bit odd. phydev->mdix_ctrl is what the user wants to happen. This is generally ETH_TP_MDI_AUTO, meaning the PHY should figure it out. It can be ETH_TP_MDI_X, or ETH_TP_MDI which forces the configuration. phydev->mdix is what it has ended up using. So the code above first seems to change what the user asked for. This is likely to replace ETH_TP_MDI_AUTO with one of the fixed modes, which will then break when the user replaces a crossed cable with a straight cable, and the forced mode is then wrong. Setting mdix to mdix_ctrl then seems wrong. In most cases, you are going to get ETH_TP_MDI_AUTO, when in fact you should be returning what the PHY has decided on, ETH_TP_MDI_X, ETH_TP_MDI, or ETH_TP_MDI_INVALID because the link is down. Maybe genphy_c45_read_mdix() will help you. It simply reads a PHY status register, sets phydev->mdix and it is done. Andrew ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH net] net: phy: micrel: Fix the KSZ9131 MDI-X status issue 2024-07-18 15:04 ` Andrew Lunn @ 2024-07-25 6:59 ` Raju Lakkaraju 0 siblings, 0 replies; 4+ messages in thread From: Raju Lakkaraju @ 2024-07-25 6:59 UTC (permalink / raw) To: Andrew Lunn Cc: Raju Lakkaraju, netdev, davem, kuba, hkallweit1, linux, edumazet, pabeni, horatiu.vultur, linux-kernel, UNGLinuxDriver Hi Andrew, Thank you for review the patch. The 07/18/2024 17:04, Andrew Lunn wrote: > EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe > > On Fri, Jul 12, 2024 at 04:46:48PM +0530, Raju Lakkaraju wrote: > > Access information about Auto mdix completion and pair selection from the > > KSZ9131's Auto/MDI/MDI-X status register > > Please explain what the broken behaviour is. How would i know i need > this patch? > Ok. I will add broken behaviour details. > You have not included a Cc: stable tag. Does that mean this does not > bother anybody and so does not need backporting? > Ok. I will add "Cc: stable tag" > > Fixes: b64e6a8794d9 ("net: phy: micrel: Add PHY Auto/MDI/MDI-X set driver for KSZ9131") > > Signed-off-by: Raju Lakkaraju <Raju.Lakkaraju@microchip.com> > > --- > > drivers/net/phy/micrel.c | 23 ++++++++++++++++++----- > > 1 file changed, 18 insertions(+), 5 deletions(-) > > > > diff --git a/drivers/net/phy/micrel.c b/drivers/net/phy/micrel.c > > index ebafedde0ab7..fddc1b91ba7f 100644 > > --- a/drivers/net/phy/micrel.c > > +++ b/drivers/net/phy/micrel.c > > @@ -1438,6 +1438,9 @@ static int ksz9131_config_init(struct phy_device *phydev) > > #define MII_KSZ9131_AUTO_MDIX 0x1C > > #define MII_KSZ9131_AUTO_MDI_SET BIT(7) > > #define MII_KSZ9131_AUTO_MDIX_SWAP_OFF BIT(6) > > +#define MII_KSZ9131_DIG_AXAN_STS 0x14 > > +#define MII_KSZ9131_DIG_AXAN_STS_LINK_DET BIT(14) > > +#define MII_KSZ9131_DIG_AXAN_STS_A_SELECT BIT(12) > > > > static int ksz9131_mdix_update(struct phy_device *phydev) > > { > > @@ -1452,14 +1455,24 @@ static int ksz9131_mdix_update(struct phy_device *phydev) > > phydev->mdix_ctrl = ETH_TP_MDI; > > else > > phydev->mdix_ctrl = ETH_TP_MDI_X; > > + > > + phydev->mdix = phydev->mdix_ctrl; > > This seems a bit odd. phydev->mdix_ctrl is what the user wants to > happen. This is generally ETH_TP_MDI_AUTO, meaning the PHY should > figure it out. It can be ETH_TP_MDI_X, or ETH_TP_MDI which forces the > configuration. phydev->mdix is what it has ended up using. > I agree. I will fix it. > So the code above first seems to change what the user asked for. This > is likely to replace ETH_TP_MDI_AUTO with one of the fixed modes, > which will then break when the user replaces a crossed cable with a > straight cable, and the forced mode is then wrong. > > Setting mdix to mdix_ctrl then seems wrong. In most cases, you are > going to get ETH_TP_MDI_AUTO, when in fact you should be returning > what the PHY has decided on, ETH_TP_MDI_X, ETH_TP_MDI, or > ETH_TP_MDI_INVALID because the link is down. Yes. I agree with you. I will fix it in next version of patch. > > Maybe genphy_c45_read_mdix() will help you. It simply reads a PHY > status register, sets phydev->mdix and it is done. > Ok > Andrew -- Thanks, Raju ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2024-07-25 7:02 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-07-12 11:16 [PATCH net] net: phy: micrel: Fix the KSZ9131 MDI-X status issue Raju Lakkaraju 2024-07-18 8:51 ` Paolo Abeni 2024-07-18 15:04 ` Andrew Lunn 2024-07-25 6:59 ` Raju Lakkaraju
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox