net: ethernet: ti: am65-cpsw: handle -EPROBE_DEFER
[ Upstream commit 09737cb80b8686ffca4ed1805fee745d5c85604d ] of_get_mac_address() might fetch the MAC address from NVMEM and that driver might not have been loaded. In that case, -EPROBE_DEFER is returned. Right now, this will trigger an immediate fallback to am65_cpsw_am654_get_efuse_macid() possibly resulting in a random MAC address although the MAC address is stored in the referenced NVMEM. Fix it by handling the -EPROBE_DEFER return code correctly. This also means that the creation of the MDIO device has to be moved to a later stage as -EPROBE_DEFER must not be returned after child devices are created. Signed-off-by: Michael Walle <mwalle@kernel.org> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Link: https://patch.msgid.link/20250414084336.4017237-3-mwalle@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
c0d8c14d9b
commit
03545901ec
@@ -2089,7 +2089,9 @@ static int am65_cpsw_nuss_init_slave_ports(struct am65_cpsw_common *common)
|
||||
goto of_node_put;
|
||||
|
||||
ret = of_get_mac_address(port_np, port->slave.mac_addr);
|
||||
if (ret) {
|
||||
if (ret == -EPROBE_DEFER) {
|
||||
goto of_node_put;
|
||||
} else if (ret) {
|
||||
am65_cpsw_am654_get_efuse_macid(port_np,
|
||||
port->port_id,
|
||||
port->slave.mac_addr);
|
||||
@@ -2949,6 +2951,16 @@ static int am65_cpsw_nuss_probe(struct platform_device *pdev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
am65_cpsw_nuss_get_ver(common);
|
||||
|
||||
ret = am65_cpsw_nuss_init_host_p(common);
|
||||
if (ret)
|
||||
goto err_pm_clear;
|
||||
|
||||
ret = am65_cpsw_nuss_init_slave_ports(common);
|
||||
if (ret)
|
||||
goto err_pm_clear;
|
||||
|
||||
node = of_get_child_by_name(dev->of_node, "mdio");
|
||||
if (!node) {
|
||||
dev_warn(dev, "MDIO node not found\n");
|
||||
@@ -2965,16 +2977,6 @@ static int am65_cpsw_nuss_probe(struct platform_device *pdev)
|
||||
}
|
||||
of_node_put(node);
|
||||
|
||||
am65_cpsw_nuss_get_ver(common);
|
||||
|
||||
ret = am65_cpsw_nuss_init_host_p(common);
|
||||
if (ret)
|
||||
goto err_of_clear;
|
||||
|
||||
ret = am65_cpsw_nuss_init_slave_ports(common);
|
||||
if (ret)
|
||||
goto err_of_clear;
|
||||
|
||||
/* init common data */
|
||||
ale_params.dev = dev;
|
||||
ale_params.ale_ageout = AM65_CPSW_ALE_AGEOUT_DEFAULT;
|
||||
|
Reference in New Issue
Block a user