net: dsa: microchip: Add error handling for ksz_switch_macaddr_get()
Enhance the ksz_switch_macaddr_get() function to handle errors that may occur during the call to ksz_write8(). Specifically, this update checks the return value of ksz_write8(), which may fail if regmap ranges validation is not passed and returns the error code. Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com> Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com> Link: https://lore.kernel.org/r/20231026051051.2316937-4-o.rempel@pengutronix.de Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
78c21fca0b
commit
818cdb0f4b
@@ -3640,7 +3640,7 @@ int ksz_switch_macaddr_get(struct dsa_switch *ds, int port,
|
||||
struct ksz_switch_macaddr *switch_macaddr;
|
||||
struct ksz_device *dev = ds->priv;
|
||||
const u16 *regs = dev->info->regs;
|
||||
int i;
|
||||
int i, ret;
|
||||
|
||||
/* Make sure concurrent MAC address changes are blocked */
|
||||
ASSERT_RTNL();
|
||||
@@ -3667,10 +3667,20 @@ int ksz_switch_macaddr_get(struct dsa_switch *ds, int port,
|
||||
dev->switch_macaddr = switch_macaddr;
|
||||
|
||||
/* Program the switch MAC address to hardware */
|
||||
for (i = 0; i < ETH_ALEN; i++)
|
||||
ksz_write8(dev, regs[REG_SW_MAC_ADDR] + i, addr[i]);
|
||||
for (i = 0; i < ETH_ALEN; i++) {
|
||||
ret = ksz_write8(dev, regs[REG_SW_MAC_ADDR] + i, addr[i]);
|
||||
if (ret)
|
||||
goto macaddr_drop;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
macaddr_drop:
|
||||
dev->switch_macaddr = NULL;
|
||||
refcount_set(&switch_macaddr->refcount, 0);
|
||||
kfree(switch_macaddr);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void ksz_switch_macaddr_put(struct dsa_switch *ds)
|
||||
|
||||
Reference in New Issue
Block a user