net: dsa: microchip: ksz8_r_dyn_mac_table(): return read/write error if we got any
authorOleksij Rempel <o.rempel@pengutronix.de>
Wed, 3 Apr 2024 12:50:38 +0000 (14:50 +0200)
committerJakub Kicinski <kuba@kernel.org>
Fri, 5 Apr 2024 02:08:43 +0000 (19:08 -0700)
The read/write path may fail. So, return error if we got it.

Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
Acked-by: Arun Ramadoss <arun.ramadoss@microchip.com>
Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
Link: https://lore.kernel.org/r/20240403125039.3414824-8-o.rempel@pengutronix.de
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/dsa/microchip/ksz8795.c

index eeb32df0939d18d02177dc725014840af74ab345..de3d8357da855bef6fae286cd45e89ba729b8ff8 100644 (file)
@@ -385,12 +385,16 @@ static int ksz8_valid_dyn_entry(struct ksz_device *dev, u8 *data)
        int timeout = 100;
        const u32 *masks;
        const u16 *regs;
+       int ret;
 
        masks = dev->info->masks;
        regs = dev->info->regs;
 
        do {
-               ksz_read8(dev, regs[REG_IND_DATA_CHECK], data);
+               ret = ksz_read8(dev, regs[REG_IND_DATA_CHECK], data);
+               if (ret)
+                       return ret;
+
                timeout--;
        } while ((*data & masks[DYNAMIC_MAC_TABLE_NOT_READY]) && timeout);
 
@@ -399,7 +403,9 @@ static int ksz8_valid_dyn_entry(struct ksz_device *dev, u8 *data)
                return -ETIMEDOUT;
        /* Entry is ready for accessing. */
        } else {
-               ksz_read8(dev, regs[REG_IND_DATA_8], data);
+               ret = ksz_read8(dev, regs[REG_IND_DATA_8], data);
+               if (ret)
+                       return ret;
 
                /* There is no valid entry in the table. */
                if (*data & masks[DYNAMIC_MAC_TABLE_MAC_EMPTY])
@@ -428,7 +434,9 @@ static int ksz8_r_dyn_mac_table(struct ksz_device *dev, u16 addr, u8 *mac_addr,
        ctrl_addr = IND_ACC_TABLE(TABLE_DYNAMIC_MAC | TABLE_READ) | addr;
 
        mutex_lock(&dev->alu_mutex);
-       ksz_write16(dev, regs[REG_IND_CTRL_0], ctrl_addr);
+       ret = ksz_write16(dev, regs[REG_IND_CTRL_0], ctrl_addr);
+       if (ret)
+               goto unlock_alu;
 
        ret = ksz8_valid_dyn_entry(dev, &data);
        if (ret == -ENXIO) {
@@ -439,7 +447,10 @@ static int ksz8_r_dyn_mac_table(struct ksz_device *dev, u16 addr, u8 *mac_addr,
        if (ret)
                goto unlock_alu;
 
-       ksz_read64(dev, regs[REG_IND_DATA_HI], &buf);
+       ret = ksz_read64(dev, regs[REG_IND_DATA_HI], &buf);
+       if (ret)
+               goto unlock_alu;
+
        data_hi = (u32)(buf >> 32);
        data_lo = (u32)buf;
 
@@ -462,7 +473,6 @@ static int ksz8_r_dyn_mac_table(struct ksz_device *dev, u16 addr, u8 *mac_addr,
 
        mac_addr[1] = (u8)data_hi;
        mac_addr[0] = (u8)(data_hi >> 8);
-       ret = 0;
 
 unlock_alu:
        mutex_unlock(&dev->alu_mutex);