ldpaa_eth_bind() returned -EINVAL for a DPMAC node without
phy-connection-type.

That is not "skip this device", it is "the tree is broken":
the DM core propagates it out of lists_bind_fdt() and
dm_scan_fdt(), initr_dm() fails, and U-Boot stops before the prompt with

  ldpaa_eth ethernet@1: incorrect phy mode
  initcall_run_r(): initcall initr_dm() failed
  ### ERROR ### Please RESET the board ###

for a MAC nobody asked U-Boot to drive.

Why it matters: device trees imported from Linux enable
every DPMAC and leave the phy description to the board file, because the
kernel's dpaa2 driver does not need one for an MC-managed MAC. U-Boot's
own Layerscape .dtsi instead ships all eighteen disabled for the board to
opt into. So the moment a board takes its SoC description from
dts/upstream, every DPMAC it does not configure in U-Boot is enabled and
unconfigured, and one of them is enough to stop the boot.

Signed-off-by: Vincent Jardin <[email protected]>

---

 drivers/net/ldpaa_eth/ldpaa_eth.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ldpaa_eth/ldpaa_eth.c 
b/drivers/net/ldpaa_eth/ldpaa_eth.c
index 94e62748239..27ae6747464 100644
--- a/drivers/net/ldpaa_eth/ldpaa_eth.c
+++ b/drivers/net/ldpaa_eth/ldpaa_eth.c
@@ -970,8 +970,8 @@ static int ldpaa_eth_bind(struct udevice *dev)
 
        phy_mode = dev_read_phy_mode(dev);
        if (phy_mode == PHY_INTERFACE_MODE_NA) {
-               dev_err(dev, "incorrect phy mode\n");
-               return -EINVAL;
+               dev_dbg(dev, "no phy mode, not binding\n");
+               return -ENODEV;
        }
 
        dpmac_id = ldpaa_eth_get_dpmac_id(dev);
---
base-commit: 6073c36b2c8d39afe3ecc789b281667a3ddebc70
branch: for-upstream/net-ldpaa-eth-decline-dpmac-v1

-- 
2.43.0

Reply via email to