Patch "net: dsa: sja1105: disallow C45 transactions on the BASE-TX MDIO bus" has been added to the 6.0-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    net: dsa: sja1105: disallow C45 transactions on the BASE-TX MDIO bus

to the 6.0-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     net-dsa-sja1105-disallow-c45-transactions-on-the-bas.patch
and it can be found in the queue-6.0 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 0158b4b7b23ff257e9687497fff9a10567cc0118
Author: Vladimir Oltean <vladimir.oltean@xxxxxxx>
Date:   Wed Nov 16 12:06:53 2022 +0200

    net: dsa: sja1105: disallow C45 transactions on the BASE-TX MDIO bus
    
    [ Upstream commit 24deec6b9e4a051635f75777844ffc184644fec9 ]
    
    You'd think people know that the internal 100BASE-TX PHY on the SJA1110
    responds only to clause 22 MDIO transactions, but they don't :)
    
    When a clause 45 transaction is attempted, sja1105_base_tx_mdio_read()
    and sja1105_base_tx_mdio_write() don't expect "reg" to contain bit 30
    set (MII_ADDR_C45) and pack this value into the SPI transaction buffer.
    
    But the field in the SPI buffer has a width smaller than 30 bits, so we
    see this confusing message from the packing() API rather than a proper
    rejection of C45 transactions:
    
    Call trace:
     dump_stack+0x1c/0x38
     sja1105_pack+0xbc/0xc0 [sja1105]
     sja1105_xfer+0x114/0x2b0 [sja1105]
     sja1105_xfer_u32+0x44/0xf4 [sja1105]
     sja1105_base_tx_mdio_read+0x44/0x7c [sja1105]
     mdiobus_read+0x44/0x80
     get_phy_c45_ids+0x70/0x234
     get_phy_device+0x68/0x15c
     fwnode_mdiobus_register_phy+0x74/0x240
     of_mdiobus_register+0x13c/0x380
     sja1105_mdiobus_register+0x368/0x490 [sja1105]
     sja1105_setup+0x94/0x119c [sja1105]
    Cannot store 401d2405 inside bits 24-4 (would truncate)
    
    Fixes: 5a8f09748ee7 ("net: dsa: sja1105: register the MDIO buses for 100base-T1 and 100base-TX")
    Signed-off-by: Vladimir Oltean <vladimir.oltean@xxxxxxx>
    Reviewed-by: Andrew Lunn <andrew@xxxxxxx>
    Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/dsa/sja1105/sja1105_mdio.c b/drivers/net/dsa/sja1105/sja1105_mdio.c
index 215dd17ca790..4059fcc8c832 100644
--- a/drivers/net/dsa/sja1105/sja1105_mdio.c
+++ b/drivers/net/dsa/sja1105/sja1105_mdio.c
@@ -256,6 +256,9 @@ static int sja1105_base_tx_mdio_read(struct mii_bus *bus, int phy, int reg)
 	u32 tmp;
 	int rc;
 
+	if (reg & MII_ADDR_C45)
+		return -EOPNOTSUPP;
+
 	rc = sja1105_xfer_u32(priv, SPI_READ, regs->mdio_100base_tx + reg,
 			      &tmp, NULL);
 	if (rc < 0)
@@ -272,6 +275,9 @@ static int sja1105_base_tx_mdio_write(struct mii_bus *bus, int phy, int reg,
 	const struct sja1105_regs *regs = priv->info->regs;
 	u32 tmp = val;
 
+	if (reg & MII_ADDR_C45)
+		return -EOPNOTSUPP;
+
 	return sja1105_xfer_u32(priv, SPI_WRITE, regs->mdio_100base_tx + reg,
 				&tmp, NULL);
 }



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux