mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-29 18:19:02 +00:00
74 lines
2.1 KiB
Diff
74 lines
2.1 KiB
Diff
|
From a5e7f7e277bd4403c45c1c7922d56d0eb08dbc7c Mon Sep 17 00:00:00 2001
|
||
|
From: Vladimir Oltean <vladimir.oltean@nxp.com>
|
||
|
Date: Tue, 29 Nov 2022 16:12:15 +0200
|
||
|
Subject: [PATCH 08/14] net: dpaa2-switch: assign port_priv->mac after
|
||
|
dpaa2_mac_connect() call
|
||
|
|
||
|
The dpaa2-switch has the exact same locking requirements when connected
|
||
|
to a DPMAC, so it needs port_priv->mac to always point either to NULL,
|
||
|
or to a DPMAC with a fully initialized phylink instance.
|
||
|
|
||
|
Make the same preparatory change in the dpaa2-switch driver as in the
|
||
|
dpaa2-eth one.
|
||
|
|
||
|
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>
|
||
|
---
|
||
|
.../ethernet/freescale/dpaa2/dpaa2-switch.c | 21 +++++++++++--------
|
||
|
1 file changed, 12 insertions(+), 9 deletions(-)
|
||
|
|
||
|
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c
|
||
|
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c
|
||
|
@@ -1450,9 +1450,8 @@ static int dpaa2_switch_port_connect_mac
|
||
|
err = dpaa2_mac_open(mac);
|
||
|
if (err)
|
||
|
goto err_free_mac;
|
||
|
- port_priv->mac = mac;
|
||
|
|
||
|
- if (dpaa2_switch_port_is_type_phy(port_priv)) {
|
||
|
+ if (dpaa2_mac_is_type_phy(mac)) {
|
||
|
err = dpaa2_mac_connect(mac);
|
||
|
if (err) {
|
||
|
netdev_err(port_priv->netdev,
|
||
|
@@ -1462,11 +1461,12 @@ static int dpaa2_switch_port_connect_mac
|
||
|
}
|
||
|
}
|
||
|
|
||
|
+ port_priv->mac = mac;
|
||
|
+
|
||
|
return 0;
|
||
|
|
||
|
err_close_mac:
|
||
|
dpaa2_mac_close(mac);
|
||
|
- port_priv->mac = NULL;
|
||
|
err_free_mac:
|
||
|
kfree(mac);
|
||
|
return err;
|
||
|
@@ -1474,15 +1474,18 @@ err_free_mac:
|
||
|
|
||
|
static void dpaa2_switch_port_disconnect_mac(struct ethsw_port_priv *port_priv)
|
||
|
{
|
||
|
- if (dpaa2_switch_port_is_type_phy(port_priv))
|
||
|
- dpaa2_mac_disconnect(port_priv->mac);
|
||
|
+ struct dpaa2_mac *mac = port_priv->mac;
|
||
|
+
|
||
|
+ port_priv->mac = NULL;
|
||
|
|
||
|
- if (!dpaa2_switch_port_has_mac(port_priv))
|
||
|
+ if (!mac)
|
||
|
return;
|
||
|
|
||
|
- dpaa2_mac_close(port_priv->mac);
|
||
|
- kfree(port_priv->mac);
|
||
|
- port_priv->mac = NULL;
|
||
|
+ if (dpaa2_mac_is_type_phy(mac))
|
||
|
+ dpaa2_mac_disconnect(mac);
|
||
|
+
|
||
|
+ dpaa2_mac_close(mac);
|
||
|
+ kfree(mac);
|
||
|
}
|
||
|
|
||
|
static irqreturn_t dpaa2_switch_irq0_handler_thread(int irq_num, void *arg)
|