Commit 7caed786 authored by Oleksij Rempel's avatar Oleksij Rempel Committed by Jakub Kicinski

net: dsa: microchip: ksz8_r_dyn_mac_table(): return read/write error if we got any

The read/write path may fail. So, return error if we got it.
Reviewed-by: default avatarVladimir Oltean <olteanv@gmail.com>
Acked-by: default avatarArun Ramadoss <arun.ramadoss@microchip.com>
Signed-off-by: default avatarOleksij Rempel <o.rempel@pengutronix.de>
Reviewed-by: default avatarFlorian Fainelli <florian.fainelli@broadcom.com>
Link: https://lore.kernel.org/r/20240403125039.3414824-8-o.rempel@pengutronix.deSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 081e84f2
...@@ -385,12 +385,16 @@ static int ksz8_valid_dyn_entry(struct ksz_device *dev, u8 *data) ...@@ -385,12 +385,16 @@ static int ksz8_valid_dyn_entry(struct ksz_device *dev, u8 *data)
int timeout = 100; int timeout = 100;
const u32 *masks; const u32 *masks;
const u16 *regs; const u16 *regs;
int ret;
masks = dev->info->masks; masks = dev->info->masks;
regs = dev->info->regs; regs = dev->info->regs;
do { 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--; timeout--;
} while ((*data & masks[DYNAMIC_MAC_TABLE_NOT_READY]) && 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) ...@@ -399,7 +403,9 @@ static int ksz8_valid_dyn_entry(struct ksz_device *dev, u8 *data)
return -ETIMEDOUT; return -ETIMEDOUT;
/* Entry is ready for accessing. */ /* Entry is ready for accessing. */
} else { } 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. */ /* There is no valid entry in the table. */
if (*data & masks[DYNAMIC_MAC_TABLE_MAC_EMPTY]) 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, ...@@ -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; ctrl_addr = IND_ACC_TABLE(TABLE_DYNAMIC_MAC | TABLE_READ) | addr;
mutex_lock(&dev->alu_mutex); 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); ret = ksz8_valid_dyn_entry(dev, &data);
if (ret == -ENXIO) { if (ret == -ENXIO) {
...@@ -439,7 +447,10 @@ static int ksz8_r_dyn_mac_table(struct ksz_device *dev, u16 addr, u8 *mac_addr, ...@@ -439,7 +447,10 @@ static int ksz8_r_dyn_mac_table(struct ksz_device *dev, u16 addr, u8 *mac_addr,
if (ret) if (ret)
goto unlock_alu; 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_hi = (u32)(buf >> 32);
data_lo = (u32)buf; data_lo = (u32)buf;
...@@ -462,7 +473,6 @@ static int ksz8_r_dyn_mac_table(struct ksz_device *dev, u16 addr, u8 *mac_addr, ...@@ -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[1] = (u8)data_hi;
mac_addr[0] = (u8)(data_hi >> 8); mac_addr[0] = (u8)(data_hi >> 8);
ret = 0;
unlock_alu: unlock_alu:
mutex_unlock(&dev->alu_mutex); mutex_unlock(&dev->alu_mutex);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment