aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/layerscape/patches-5.4/701-net-0397-sdk_dpaa-ceetm-fix-recursive-dependencies.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/layerscape/patches-5.4/701-net-0397-sdk_dpaa-ceetm-fix-recursive-dependencies.patch')
-rw-r--r--target/linux/layerscape/patches-5.4/701-net-0397-sdk_dpaa-ceetm-fix-recursive-dependencies.patch132
1 files changed, 132 insertions, 0 deletions
diff --git a/target/linux/layerscape/patches-5.4/701-net-0397-sdk_dpaa-ceetm-fix-recursive-dependencies.patch b/target/linux/layerscape/patches-5.4/701-net-0397-sdk_dpaa-ceetm-fix-recursive-dependencies.patch
new file mode 100644
index 0000000000..dff27a4d35
--- /dev/null
+++ b/target/linux/layerscape/patches-5.4/701-net-0397-sdk_dpaa-ceetm-fix-recursive-dependencies.patch
@@ -0,0 +1,132 @@
+From 03117a1e7db4cd3d745c663c697e446695ebb8e1 Mon Sep 17 00:00:00 2001
+From: Camelia Groza <camelia.groza@nxp.com>
+Date: Wed, 8 Jan 2020 18:41:33 +0200
+Subject: [PATCH] sdk_dpaa: ceetm: fix recursive dependencies
+
+Due to dependencies between the fsl_ceetm and fsl_dpa modules, remove
+the module support for the ceetm driver and integrate it into the main
+DPAA Ethernet driver.
+
+The registration of the CEETM Qdisc was the only operation done at
+module init. Pass the management of the Qdisc register and unregister
+operations to the loading and unloading of the DPAA driver.
+
+Signed-off-by: Camelia Groza <camelia.groza@nxp.com>
+---
+ drivers/net/ethernet/freescale/sdk_dpaa/Makefile | 3 +-
+ drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth.c | 19 +++++++++++++
+ .../ethernet/freescale/sdk_dpaa/dpaa_eth_ceetm.c | 32 +---------------------
+ 3 files changed, 21 insertions(+), 33 deletions(-)
+
+--- a/drivers/net/ethernet/freescale/sdk_dpaa/Makefile
++++ b/drivers/net/ethernet/freescale/sdk_dpaa/Makefile
+@@ -20,8 +20,7 @@ endif
+
+ ifeq ($(CONFIG_FSL_DPAA_CEETM),y)
+ ccflags-y += -I$(srctree)/drivers/net/ethernet/freescale/sdk_fman/src/wrapper
+-obj-$(CONFIG_FSL_SDK_DPAA_ETH) += fsl_ceetm.o
+-fsl_ceetm-objs += dpaa_eth_ceetm.o
++fsl_dpa-objs += dpaa_eth_ceetm.o
+ endif
+
+ fsl_mac-objs += mac.o mac-api.o
+--- a/drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth.c
++++ b/drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth.c
+@@ -72,6 +72,9 @@
+ #ifdef CONFIG_FSL_DPAA_DBG_LOOP
+ #include "dpaa_debugfs.h"
+ #endif /* CONFIG_FSL_DPAA_DBG_LOOP */
++#ifdef CONFIG_FSL_DPAA_CEETM
++#include "dpaa_eth_ceetm.h"
++#endif
+
+ /* CREATE_TRACE_POINTS only needs to be defined once. Other dpa files
+ * using trace events only need to #include <trace/events/sched.h>
+@@ -116,6 +119,10 @@ static uint8_t dpa_priv_common_bpid;
+ struct net_device *dpa_loop_netdevs[20];
+ #endif
+
++#ifdef CONFIG_FSL_DPAA_CEETM
++extern struct Qdisc_ops ceetm_qdisc_ops;
++#endif
++
+ #ifdef CONFIG_PM
+
+ static int dpaa_suspend(struct device *dev)
+@@ -1158,6 +1165,14 @@ static int __init __cold dpa_load(void)
+ pr_debug(KBUILD_MODNAME ": %s:%s() ->\n",
+ KBUILD_BASENAME".c", __func__);
+
++#ifdef CONFIG_FSL_DPAA_CEETM
++ _errno = register_qdisc(&ceetm_qdisc_ops);
++ if (unlikely(_errno))
++ pr_err(KBUILD_MODNAME
++ ": %s:%hu:%s(): register_qdisc() = %d\n",
++ KBUILD_BASENAME ".c", __LINE__, __func__, _errno);
++#endif
++
+ return _errno;
+ }
+ module_init(dpa_load);
+@@ -1167,6 +1182,10 @@ static void __exit __cold dpa_unload(voi
+ pr_debug(KBUILD_MODNAME ": -> %s:%s()\n",
+ KBUILD_BASENAME".c", __func__);
+
++#ifdef CONFIG_FSL_DPAA_CEETM
++ unregister_qdisc(&ceetm_qdisc_ops);
++#endif
++
+ platform_driver_unregister(&dpa_driver);
+
+ #ifdef CONFIG_FSL_DPAA_DBG_LOOP
+--- a/drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth_ceetm.c
++++ b/drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth_ceetm.c
+@@ -33,16 +33,13 @@
+ #include <linux/init.h>
+ #include "dpaa_eth_ceetm.h"
+
+-#define DPA_CEETM_DESCRIPTION "FSL DPAA CEETM qdisc"
+-MODULE_LICENSE("Dual BSD/GPL");
+-MODULE_DESCRIPTION(DPA_CEETM_DESCRIPTION);
+-
+ const struct nla_policy ceetm_policy[TCA_CEETM_MAX + 1] = {
+ [TCA_CEETM_COPT] = { .len = sizeof(struct tc_ceetm_copt) },
+ [TCA_CEETM_QOPS] = { .len = sizeof(struct tc_ceetm_qopt) },
+ };
+
+ struct Qdisc_ops ceetm_qdisc_ops;
++EXPORT_SYMBOL(ceetm_qdisc_ops);
+
+ /* Obtain the DCP and the SP ids from the FMan port */
+ static void get_dcp_and_sp(struct net_device *dev, enum qm_dc_portal *dcp_id,
+@@ -2086,30 +2083,3 @@ drop:
+ dev_kfree_skb_any(skb);
+ return NET_XMIT_SUCCESS;
+ }
+-EXPORT_SYMBOL(ceetm_tx);
+-
+-static int __init ceetm_register(void)
+-{
+- int _errno = 0;
+-
+- pr_info(KBUILD_MODNAME ": " DPA_CEETM_DESCRIPTION "\n");
+-
+- _errno = register_qdisc(&ceetm_qdisc_ops);
+- if (unlikely(_errno))
+- pr_err(KBUILD_MODNAME
+- ": %s:%hu:%s(): register_qdisc() = %d\n",
+- KBUILD_BASENAME ".c", __LINE__, __func__, _errno);
+-
+- return _errno;
+-}
+-
+-static void __exit ceetm_unregister(void)
+-{
+- pr_debug(KBUILD_MODNAME ": %s:%s() ->\n",
+- KBUILD_BASENAME ".c", __func__);
+-
+- unregister_qdisc(&ceetm_qdisc_ops);
+-}
+-
+-module_init(ceetm_register);
+-module_exit(ceetm_unregister);