mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-29 18:19:02 +00:00
40b02a2301
Now that the armvirt target supports real hardware, not just VMs, thanks to the addition of EFI, rename it to something more appropriate. 'armsr' (Arm SystemReady) was chosen after the name of the Arm standards program. The 32 and 64 bit targets have also been renamed armv7 and armv8 respectively, to allow future profiles where required (such as armv9). See https://developer.arm.com/documentation/102858/0100/Introduction for more information. Signed-off-by: Mathew McBride <matt@traverse.com.au>
94 lines
2.9 KiB
Diff
94 lines
2.9 KiB
Diff
From e0ea63162cb5f1ca7f844d6ef5fc4079448ee2d5 Mon Sep 17 00:00:00 2001
|
|
From: Vladimir Oltean <vladimir.oltean@nxp.com>
|
|
Date: Tue, 29 Nov 2022 16:12:18 +0200
|
|
Subject: [PATCH 11/14] net: dpaa2-eth: connect to MAC before requesting the
|
|
"endpoint changed" IRQ
|
|
|
|
dpaa2_eth_connect_mac() is called both from dpaa2_eth_probe() and from
|
|
dpni_irq0_handler_thread().
|
|
|
|
It could happen that the DPNI gets connected to a DPMAC on the fsl-mc
|
|
bus exactly during probe, as soon as the "endpoint change" interrupt is
|
|
requested in dpaa2_eth_setup_irqs(). This will cause the
|
|
dpni_irq0_handler_thread() to register a phylink instance for that DPMAC.
|
|
|
|
Then, the probing function will also try to register a phylink instance
|
|
for the same DPMAC, operation which should fail (and this will fail the
|
|
probing of the driver).
|
|
|
|
Reorder dpaa2_eth_setup_irqs() and dpaa2_eth_connect_mac(), such that
|
|
dpni_irq0_handler_thread() never races with the DPMAC-related portion of
|
|
the probing path.
|
|
|
|
Also reorder dpaa2_eth_disconnect_mac() to be in the mirror position of
|
|
dpaa2_eth_connect_mac() in the teardown path.
|
|
|
|
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
|
|
Reviewed-by: Ioana Ciornei <ioana.ciornei@nxp.com>
|
|
Tested-by: Ioana Ciornei <ioana.ciornei@nxp.com>
|
|
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
|
|
---
|
|
.../net/ethernet/freescale/dpaa2/dpaa2-eth.c | 18 +++++++++---------
|
|
1 file changed, 9 insertions(+), 9 deletions(-)
|
|
|
|
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
|
|
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
|
|
@@ -4710,6 +4710,10 @@ static int dpaa2_eth_probe(struct fsl_mc
|
|
}
|
|
#endif
|
|
|
|
+ err = dpaa2_eth_connect_mac(priv);
|
|
+ if (err)
|
|
+ goto err_connect_mac;
|
|
+
|
|
err = dpaa2_eth_setup_irqs(dpni_dev);
|
|
if (err) {
|
|
netdev_warn(net_dev, "Failed to set link interrupt, fall back to polling\n");
|
|
@@ -4722,10 +4726,6 @@ static int dpaa2_eth_probe(struct fsl_mc
|
|
priv->do_link_poll = true;
|
|
}
|
|
|
|
- err = dpaa2_eth_connect_mac(priv);
|
|
- if (err)
|
|
- goto err_connect_mac;
|
|
-
|
|
err = dpaa2_eth_dl_alloc(priv);
|
|
if (err)
|
|
goto err_dl_register;
|
|
@@ -4759,13 +4759,13 @@ err_dl_port_add:
|
|
err_dl_trap_register:
|
|
dpaa2_eth_dl_free(priv);
|
|
err_dl_register:
|
|
- dpaa2_eth_disconnect_mac(priv);
|
|
-err_connect_mac:
|
|
if (priv->do_link_poll)
|
|
kthread_stop(priv->poll_thread);
|
|
else
|
|
fsl_mc_free_irqs(dpni_dev);
|
|
err_poll_thread:
|
|
+ dpaa2_eth_disconnect_mac(priv);
|
|
+err_connect_mac:
|
|
dpaa2_eth_free_rings(priv);
|
|
err_alloc_rings:
|
|
err_csum:
|
|
@@ -4813,9 +4813,6 @@ static int dpaa2_eth_remove(struct fsl_m
|
|
#endif
|
|
|
|
unregister_netdev(net_dev);
|
|
- rtnl_lock();
|
|
- dpaa2_eth_disconnect_mac(priv);
|
|
- rtnl_unlock();
|
|
|
|
dpaa2_eth_dl_port_del(priv);
|
|
dpaa2_eth_dl_traps_unregister(priv);
|
|
@@ -4826,6 +4823,9 @@ static int dpaa2_eth_remove(struct fsl_m
|
|
else
|
|
fsl_mc_free_irqs(ls_dev);
|
|
|
|
+ rtnl_lock();
|
|
+ dpaa2_eth_disconnect_mac(priv);
|
|
+ rtnl_unlock();
|
|
dpaa2_eth_free_rings(priv);
|
|
free_percpu(priv->fd);
|
|
free_percpu(priv->sgt_cache);
|