diff options
| author | 2021-08-20 14:36:42 +0100 | |
|---|---|---|
| committer | 2021-08-20 14:36:42 +0100 | |
| commit | f2aea90d0bf368bda6cd1c5a86fd84c7051b0e0e (patch) | |
| tree | fadea03e51f6ca0a04829f8f7371bcb926f90065 | |
| parent | Merge branch 'dpaa2-switch-phylikn-fixes' (diff) | |
| parent | net: mscc: ocelot: allow probing to continue with ports that fail to register (diff) | |
| download | linux-dev-f2aea90d0bf368bda6cd1c5a86fd84c7051b0e0e.tar.xz linux-dev-f2aea90d0bf368bda6cd1c5a86fd84c7051b0e0e.zip | |
Merge branch 'ocelot-phylink-fixes'
Vladimir Oltean says:
====================
Ocelot phylink fixes
This series addresses a regression reported by Horatiu which introduced
by the ocelot conversion to phylink: there are broken device trees in
the wild, and the driver fails to probe the entire switch when a port
fails to probe, which it previously did not do.
Continue probing even when some ports fail to initialize properly.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | drivers/net/ethernet/mscc/ocelot_net.c | 1 | ||||
| -rw-r--r-- | drivers/net/ethernet/mscc/ocelot_vsc7514.c | 7 |
2 files changed, 5 insertions, 3 deletions
diff --git a/drivers/net/ethernet/mscc/ocelot_net.c b/drivers/net/ethernet/mscc/ocelot_net.c index 5e8965be968a..9044737936d2 100644 --- a/drivers/net/ethernet/mscc/ocelot_net.c +++ b/drivers/net/ethernet/mscc/ocelot_net.c @@ -164,6 +164,7 @@ int ocelot_port_devlink_init(struct ocelot *ocelot, int port, struct devlink *dl = ocelot->devlink; struct devlink_port_attrs attrs = {}; + memset(dlp, 0, sizeof(*dlp)); memcpy(attrs.switch_id.id, &ocelot->base_mac, id_len); attrs.switch_id.id_len = id_len; attrs.phys.port_number = port; diff --git a/drivers/net/ethernet/mscc/ocelot_vsc7514.c b/drivers/net/ethernet/mscc/ocelot_vsc7514.c index 18aed504f45d..291ae6817c26 100644 --- a/drivers/net/ethernet/mscc/ocelot_vsc7514.c +++ b/drivers/net/ethernet/mscc/ocelot_vsc7514.c @@ -978,14 +978,15 @@ static int mscc_ocelot_init_ports(struct platform_device *pdev, of_node_put(portnp); goto out_teardown; } - devlink_ports_registered |= BIT(port); err = ocelot_probe_port(ocelot, port, target, portnp); if (err) { - of_node_put(portnp); - goto out_teardown; + ocelot_port_devlink_teardown(ocelot, port); + continue; } + devlink_ports_registered |= BIT(port); + ocelot_port = ocelot->ports[port]; priv = container_of(ocelot_port, struct ocelot_port_private, port); |
