net: dsa: microchip: don't announce extended register support on non Gbit chips
authorOleksij Rempel <o.rempel@pengutronix.de>
Fri, 26 Aug 2022 10:56:20 +0000 (12:56 +0200)
committerDavid S. Miller <davem@davemloft.net>
Wed, 31 Aug 2022 08:41:17 +0000 (09:41 +0100)
This issue was detected after adding support of regmap_ranges for KSZ8563R
chip. This chip is reporting extended registers support without having
actual extended registers. This made PHYlib request not existing
registers.

Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/microchip/ksz9477.c

index 0f7f44358d7b3e9bc3c92291a2b644d6dfb54dc4..2b3bf1d3950c219605beeda1b4e67f21fd4a82fb 100644 (file)
@@ -264,6 +264,16 @@ void ksz9477_port_init_cnt(struct ksz_device *dev, int port)
        mutex_unlock(&mib->cnt_mutex);
 }
 
+static void ksz9477_r_phy_quirks(struct ksz_device *dev, u16 addr, u16 reg,
+                                u16 *data)
+{
+       /* KSZ8563R do not have extended registers but BMSR_ESTATEN and
+        * BMSR_ERCAP bits are set.
+        */
+       if (dev->chip_id == KSZ8563_CHIP_ID && reg == MII_BMSR)
+               *data &= ~(BMSR_ESTATEN | BMSR_ERCAP);
+}
+
 void ksz9477_r_phy(struct ksz_device *dev, u16 addr, u16 reg, u16 *data)
 {
        u16 val = 0xffff;
@@ -308,6 +318,7 @@ void ksz9477_r_phy(struct ksz_device *dev, u16 addr, u16 reg, u16 *data)
                }
        } else {
                ksz_pread16(dev, addr, 0x100 + (reg << 1), &val);
+               ksz9477_r_phy_quirks(dev, addr, reg, &val);
        }
 
        *data = val;