When running kexec feature, it needs to release dpaa ethernet
driver and fman resource so that the second kernel can bootup
normally. So, create shutdown callback functions to improve ethernet
driver.

Signed-off-by: Meng Li <[email protected]>
---
 .../ethernet/freescale/sdk_dpaa/dpaa_eth.c    |  3 +++
 .../freescale/sdk_dpaa/dpaa_eth_common.c      | 20 +++++++++++++++++++
 .../freescale/sdk_dpaa/dpaa_eth_common.h      |  3 +++
 .../sdk_fman/src/wrapper/lnxwrp_fm.c          | 18 +++++++++++++++++
 4 files changed, 44 insertions(+)

diff --git a/drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth.c 
b/drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth.c
index e20a4351afb1..7f309229b5f1 100644
--- a/drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth.c
+++ b/drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth.c
@@ -1161,6 +1161,9 @@ static struct platform_driver dpa_driver = {
                .pm             = DPAA_PM_OPS,
        },
        .probe          = dpaa_eth_priv_probe,
+#if defined(CONFIG_KEXEC)
+       .shutdown       = dpa_shutdown,
+#endif
        .remove         = dpa_remove
 };
 
diff --git a/drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth_common.c 
b/drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth_common.c
index 13a31b59036a..42776555d1f5 100644
--- a/drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth_common.c
+++ b/drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth_common.c
@@ -510,6 +510,26 @@ int __cold dpa_remove(struct platform_device *of_dev)
 }
 EXPORT_SYMBOL(dpa_remove);
 
+#if defined(CONFIG_KEXEC)
+void __cold dpa_shutdown(struct platform_device *of_dev)
+{
+       struct device           *dev;
+       struct net_device       *net_dev;
+       struct dpa_priv_s       *priv;
+
+       dev = &of_dev->dev;
+       net_dev = dev_get_drvdata(dev);
+
+       priv = netdev_priv(net_dev);
+
+       dpa_fq_free(dev, &priv->dpa_fq_list);
+
+       dpa_bp_free(priv);
+
+       return;
+}
+#endif
+
 struct mac_device * __cold __must_check
 __attribute__((nonnull))
 dpa_mac_probe(struct platform_device *_of_dev)
diff --git a/drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth_common.h 
b/drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth_common.h
index c686d04f1c05..a6df8bf97ab6 100644
--- a/drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth_common.h
+++ b/drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth_common.h
@@ -158,6 +158,9 @@ int dpa_get_ts(const struct dpa_priv_s *priv, enum 
port_type rx_tx,
 #endif /* CONFIG_FSL_DPAA_TS */
 int dpa_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
 int __cold dpa_remove(struct platform_device *of_dev);
+#if defined(CONFIG_KEXEC)
+void __cold dpa_shutdown(struct platform_device *of_dev);
+#endif
 struct mac_device * __cold __must_check
 __attribute__((nonnull)) dpa_mac_probe(struct platform_device *_of_dev);
 int dpa_set_mac_address(struct net_device *net_dev, void *addr);
diff --git a/drivers/net/ethernet/freescale/sdk_fman/src/wrapper/lnxwrp_fm.c 
b/drivers/net/ethernet/freescale/sdk_fman/src/wrapper/lnxwrp_fm.c
index 3fa99df195ac..da327b6accfb 100755
--- a/drivers/net/ethernet/freescale/sdk_fman/src/wrapper/lnxwrp_fm.c
+++ b/drivers/net/ethernet/freescale/sdk_fman/src/wrapper/lnxwrp_fm.c
@@ -1337,6 +1337,21 @@ static int fm_remove(struct platform_device *of_dev)
     return 0;
 }
 
+#if defined(CONFIG_KEXEC)
+static void fm_shutdown(struct platform_device *of_dev)
+{
+       t_LnxWrpFmDev   *p_LnxWrpFmDev;
+       struct device   *dev;
+
+       dev = &of_dev->dev;
+       p_LnxWrpFmDev = dev_get_drvdata(dev);
+       if (!p_LnxWrpFmDev->active)
+               return;
+
+       FreeFmPcdDev(p_LnxWrpFmDev);
+}
+#endif
+
 static const struct of_device_id fm_match[] = {
     {
         .compatible    = "fsl,fman"
@@ -1414,6 +1429,9 @@ static struct platform_driver fm_driver = {
        .pm             = FM_PM_OPS,
     },
     .probe          = fm_probe,
+#if defined(CONFIG_KEXEC)
+    .shutdown       = fm_shutdown,
+#endif
     .remove         = fm_remove
 };
 
-- 
2.35.3

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#11270): 
https://lists.yoctoproject.org/g/linux-yocto/message/11270
Mute This Topic: https://lists.yoctoproject.org/mt/90772519/21656
Group Owner: [email protected]
Unsubscribe: https://lists.yoctoproject.org/g/linux-yocto/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to