All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alexander Lobakin <alobakin@pm.me>
To: linux-kbuild@vger.kernel.org
Cc: Alexander Lobakin <alobakin@pm.me>,
	Masahiro Yamada <masahiroy@kernel.org>,
	Nicolas Schier <nicolas@fjasle.eu>, Jens Axboe <axboe@kernel.dk>,
	Boris Brezillon <bbrezillon@kernel.org>,
	Borislav Petkov <bp@alien8.de>, Tony Luck <tony.luck@intel.com>,
	Miquel Raynal <miquel.raynal@bootlin.com>,
	Vladimir Oltean <vladimir.oltean@nxp.com>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>,
	Derek Chickles <dchickles@marvell.com>,
	Ioana Ciornei <ioana.ciornei@nxp.com>,
	Salil Mehta <salil.mehta@huawei.com>,
	Sunil Goutham <sgoutham@marvell.com>,
	Grygorii Strashko <grygorii.strashko@ti.com>,
	Daniel Scally <djrscally@gmail.com>,
	Hans de Goede <hdegoede@redhat.com>,
	Mark Brown <broonie@kernel.org>,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	NXP Linux Team <linux-imx@nxp.com>,
	netdev@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH 18/18] net: cpsw: fix mixed module-builtin object
Date: Sat, 19 Nov 2022 23:10:52 +0000	[thread overview]
Message-ID: <20221119225650.1044591-19-alobakin@pm.me> (raw)
In-Reply-To: <20221119225650.1044591-1-alobakin@pm.me>

Apart from cpdma, there are 4 object files shared in one way or
another by 5 modules:

> scripts/Makefile.build:252: ./drivers/net/ethernet/ti/Makefile:
> cpsw_ale.o is added to multiple modules: keystone_netcp
> keystone_netcp_ethss ti_cpsw ti_cpsw_new
> scripts/Makefile.build:252: ./drivers/net/ethernet/ti/Makefile:
> cpsw_ethtool.o is added to multiple modules: ti_cpsw ti_cpsw_new
> scripts/Makefile.build:252: ./drivers/net/ethernet/ti/Makefile:
> cpsw_priv.o is added to multiple modules: ti_cpsw ti_cpsw_new
> scripts/Makefile.build:252: ./drivers/net/ethernet/ti/Makefile:
> cpsw_sl.o is added to multiple modules: ti_cpsw ti_cpsw_new

All of those five are tristate, that means with some of the
corresponding Kconfig options set to `m` and some to `y`, the same
objects are linked to a module and also to vmlinux even though the
expected CFLAGS are different between builtins and modules.
This is the same situation as fixed by
commit 637a642f5ca5 ("zstd: Fixing mixed module-builtin objects").
There's also no need to duplicate the same code 4 x 5 = roughly 20
times.

Introduce the new module, ti_cpsw_core, to provide the common
functions used by all those modules.

Fixes: 16f54164828b ("net: ethernet: ti: cpsw: drop CONFIG_TI_CPSW_ALE config option")
Fixes: a8577e131266 ("net: ethernet: ti: netcp_ethss: fix build")
Fixes: ed3525eda4c4 ("net: ethernet: ti: introduce cpsw switchdev based driver part 1 - dual-emac")
Fixes: 93a76530316a ("net: ethernet: ti: introduce am65x/j721e gigabit eth subsystem driver")
Suggested-by: Masahiro Yamada <masahiroy@kernel.org>
Signed-off-by: Alexander Lobakin <alobakin@pm.me>
---
 drivers/net/ethernet/ti/Kconfig          | 11 ++++++--
 drivers/net/ethernet/ti/Makefile         | 12 ++++----
 drivers/net/ethernet/ti/am65-cpsw-nuss.c |  2 ++
 drivers/net/ethernet/ti/cpsw.c           |  1 +
 drivers/net/ethernet/ti/cpsw_ale.c       | 20 +++++++++++++
 drivers/net/ethernet/ti/cpsw_ethtool.c   | 24 ++++++++++++++++
 drivers/net/ethernet/ti/cpsw_new.c       |  1 +
 drivers/net/ethernet/ti/cpsw_priv.c      | 36 ++++++++++++++++++++++++
 drivers/net/ethernet/ti/cpsw_sl.c        |  8 ++++++
 drivers/net/ethernet/ti/netcp_core.c     |  2 ++
 drivers/net/ethernet/ti/netcp_ethss.c    |  2 ++
 11 files changed, 112 insertions(+), 7 deletions(-)

diff --git a/drivers/net/ethernet/ti/Kconfig b/drivers/net/ethernet/ti/Kconfig
index 2ac0adf0c07d..407943735dd9 100644
--- a/drivers/net/ethernet/ti/Kconfig
+++ b/drivers/net/ethernet/ti/Kconfig
@@ -51,11 +51,15 @@ config TI_CPSW_PHY_SEL
 	  This driver supports configuring of the phy mode connected to
 	  the CPSW. DEPRECATED: use PHY_TI_GMII_SEL.

+config TI_CPSW_CORE
+	tristate
+	select TI_DAVINCI_CPDMA
+
 config TI_CPSW
 	tristate "TI CPSW Switch Support"
 	depends on ARCH_DAVINCI || ARCH_OMAP2PLUS || COMPILE_TEST
 	depends on TI_CPTS || !TI_CPTS
-	select TI_DAVINCI_CPDMA
+	select TI_CPSW_CORE
 	select TI_DAVINCI_MDIO
 	select MFD_SYSCON
 	select PAGE_POOL
@@ -73,7 +77,7 @@ config TI_CPSW_SWITCHDEV
 	depends on NET_SWITCHDEV
 	depends on TI_CPTS || !TI_CPTS
 	select PAGE_POOL
-	select TI_DAVINCI_CPDMA
+	select TI_CPSW_CORE
 	select TI_DAVINCI_MDIO
 	select MFD_SYSCON
 	select REGMAP
@@ -100,6 +104,7 @@ config TI_K3_AM65_CPSW_NUSS
 	tristate "TI K3 AM654x/J721E CPSW Ethernet driver"
 	depends on ARCH_K3 && OF && TI_K3_UDMA_GLUE_LAYER
 	select NET_DEVLINK
+	select TI_CPSW_CORE
 	select TI_DAVINCI_MDIO
 	select PHYLINK
 	imply PHY_TI_GMII_SEL
@@ -147,6 +152,7 @@ config TI_AM65_CPSW_TAS

 config TI_KEYSTONE_NETCP
 	tristate "TI Keystone NETCP Core Support"
+	select TI_CPSW_CORE
 	select TI_DAVINCI_MDIO
 	depends on OF
 	depends on KEYSTONE_NAVIGATOR_DMA && KEYSTONE_NAVIGATOR_QMSS
@@ -160,6 +166,7 @@ config TI_KEYSTONE_NETCP
 config TI_KEYSTONE_NETCP_ETHSS
 	depends on TI_KEYSTONE_NETCP
 	tristate "TI Keystone NETCP Ethernet subsystem Support"
+	select TI_CPSW_CORE
 	help

 	  To compile this driver as a module, choose M here: the module
diff --git a/drivers/net/ethernet/ti/Makefile b/drivers/net/ethernet/ti/Makefile
index 28a741ed0ac8..5cda66c4b958 100644
--- a/drivers/net/ethernet/ti/Makefile
+++ b/drivers/net/ethernet/ti/Makefile
@@ -16,17 +16,19 @@ ti_davinci_emac-y := davinci_emac.o
 obj-$(CONFIG_TI_DAVINCI_MDIO) += davinci_mdio.o
 obj-$(CONFIG_TI_CPSW_PHY_SEL) += cpsw-phy-sel.o
 obj-$(CONFIG_TI_CPTS) += cpts.o
+obj-$(CONFIG_TI_CPSW_CORE) += ti_cpsw_core.o
+ti_cpsw_core-objs := cpsw_ale.o cpsw_ethtool.o cpsw_priv.o cpsw_sl.o
 obj-$(CONFIG_TI_CPSW) += ti_cpsw.o
-ti_cpsw-y := cpsw.o cpsw_ale.o cpsw_priv.o cpsw_sl.o cpsw_ethtool.o
+ti_cpsw-y := cpsw.o
 obj-$(CONFIG_TI_CPSW_SWITCHDEV) += ti_cpsw_new.o
-ti_cpsw_new-y := cpsw_switchdev.o cpsw_new.o cpsw_ale.o cpsw_sl.o cpsw_priv.o cpsw_ethtool.o
+ti_cpsw_new-y := cpsw_switchdev.o cpsw_new.o

 obj-$(CONFIG_TI_KEYSTONE_NETCP) += keystone_netcp.o
-keystone_netcp-y := netcp_core.o cpsw_ale.o
+keystone_netcp-y := netcp_core.o
 obj-$(CONFIG_TI_KEYSTONE_NETCP_ETHSS) += keystone_netcp_ethss.o
-keystone_netcp_ethss-y := netcp_ethss.o netcp_sgmii.o netcp_xgbepcsr.o cpsw_ale.o
+keystone_netcp_ethss-y := netcp_ethss.o netcp_sgmii.o netcp_xgbepcsr.o

 obj-$(CONFIG_TI_K3_AM65_CPSW_NUSS) += ti-am65-cpsw-nuss.o
-ti-am65-cpsw-nuss-y := am65-cpsw-nuss.o cpsw_sl.o am65-cpsw-ethtool.o cpsw_ale.o k3-cppi-desc-pool.o am65-cpsw-qos.o
+ti-am65-cpsw-nuss-y := am65-cpsw-nuss.o am65-cpsw-ethtool.o k3-cppi-desc-pool.o am65-cpsw-qos.o
 ti-am65-cpsw-nuss-$(CONFIG_TI_K3_AM65_CPSW_SWITCHDEV) += am65-cpsw-switchdev.o
 obj-$(CONFIG_TI_K3_AM65_CPTS) += am65-cpts.o
diff --git a/drivers/net/ethernet/ti/am65-cpsw-nuss.c b/drivers/net/ethernet/ti/am65-cpsw-nuss.c
index c50b137f92d7..e58a9b1b6690 100644
--- a/drivers/net/ethernet/ti/am65-cpsw-nuss.c
+++ b/drivers/net/ethernet/ti/am65-cpsw-nuss.c
@@ -2850,6 +2850,8 @@ static struct platform_driver am65_cpsw_nuss_driver = {

 module_platform_driver(am65_cpsw_nuss_driver);

+MODULE_IMPORT_NS(TI_CPSW_CORE);
+
 MODULE_LICENSE("GPL v2");
 MODULE_AUTHOR("Grygorii Strashko <grygorii.strashko@ti.com>");
 MODULE_DESCRIPTION("TI AM65 CPSW Ethernet driver");
diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
index b7ac61329b20..a21648dd26fe 100644
--- a/drivers/net/ethernet/ti/cpsw.c
+++ b/drivers/net/ethernet/ti/cpsw.c
@@ -1796,6 +1796,7 @@ static struct platform_driver cpsw_driver = {

 module_platform_driver(cpsw_driver);

+MODULE_IMPORT_NS(TI_CPSW_CORE);
 MODULE_IMPORT_NS(TI_DAVINCI_CPDMA);

 MODULE_LICENSE("GPL");
diff --git a/drivers/net/ethernet/ti/cpsw_ale.c b/drivers/net/ethernet/ti/cpsw_ale.c
index 231370e9a801..75ad7649b12e 100644
--- a/drivers/net/ethernet/ti/cpsw_ale.c
+++ b/drivers/net/ethernet/ti/cpsw_ale.c
@@ -452,6 +452,7 @@ int cpsw_ale_flush_multicast(struct cpsw_ale *ale, int port_mask, int vid)
 	}
 	return 0;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_ale_flush_multicast, TI_CPSW_CORE);

 static inline void cpsw_ale_set_vlan_entry_type(u32 *ale_entry,
 						int flags, u16 vid)
@@ -489,6 +490,7 @@ int cpsw_ale_add_ucast(struct cpsw_ale *ale, const u8 *addr, int port,
 	cpsw_ale_write(ale, idx, ale_entry);
 	return 0;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_ale_add_ucast, TI_CPSW_CORE);

 int cpsw_ale_del_ucast(struct cpsw_ale *ale, const u8 *addr, int port,
 		       int flags, u16 vid)
@@ -504,6 +506,7 @@ int cpsw_ale_del_ucast(struct cpsw_ale *ale, const u8 *addr, int port,
 	cpsw_ale_write(ale, idx, ale_entry);
 	return 0;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_ale_del_ucast, TI_CPSW_CORE);

 int cpsw_ale_add_mcast(struct cpsw_ale *ale, const u8 *addr, int port_mask,
 		       int flags, u16 vid, int mcast_state)
@@ -537,6 +540,7 @@ int cpsw_ale_add_mcast(struct cpsw_ale *ale, const u8 *addr, int port_mask,
 	cpsw_ale_write(ale, idx, ale_entry);
 	return 0;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_ale_add_mcast, TI_CPSW_CORE);

 int cpsw_ale_del_mcast(struct cpsw_ale *ale, const u8 *addr, int port_mask,
 		       int flags, u16 vid)
@@ -566,6 +570,7 @@ int cpsw_ale_del_mcast(struct cpsw_ale *ale, const u8 *addr, int port_mask,
 	cpsw_ale_write(ale, idx, ale_entry);
 	return 0;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_ale_del_mcast, TI_CPSW_CORE);

 /* ALE NetCP NU switch specific vlan functions */
 static void cpsw_ale_set_vlan_mcast(struct cpsw_ale *ale, u32 *ale_entry,
@@ -635,6 +640,7 @@ int cpsw_ale_add_vlan(struct cpsw_ale *ale, u16 vid, int port_mask, int untag,
 	cpsw_ale_write(ale, idx, ale_entry);
 	return 0;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_ale_add_vlan, TI_CPSW_CORE);

 static void cpsw_ale_vlan_del_modify_int(struct cpsw_ale *ale,  u32 *ale_entry,
 					 u16 vid, int port_mask)
@@ -692,6 +698,7 @@ int cpsw_ale_vlan_del_modify(struct cpsw_ale *ale, u16 vid, int port_mask)

 	return 0;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_ale_vlan_del_modify, TI_CPSW_CORE);

 int cpsw_ale_del_vlan(struct cpsw_ale *ale, u16 vid, int port_mask)
 {
@@ -726,6 +733,7 @@ int cpsw_ale_del_vlan(struct cpsw_ale *ale, u16 vid, int port_mask)

 	return 0;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_ale_del_vlan, TI_CPSW_CORE);

 int cpsw_ale_vlan_add_modify(struct cpsw_ale *ale, u16 vid, int port_mask,
 			     int untag_mask, int reg_mask, int unreg_mask)
@@ -765,6 +773,7 @@ int cpsw_ale_vlan_add_modify(struct cpsw_ale *ale, u16 vid, int port_mask,

 	return ret;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_ale_vlan_add_modify, TI_CPSW_CORE);

 void cpsw_ale_set_unreg_mcast(struct cpsw_ale *ale, int unreg_mcast_mask,
 			      bool add)
@@ -792,6 +801,7 @@ void cpsw_ale_set_unreg_mcast(struct cpsw_ale *ale, int unreg_mcast_mask,
 		cpsw_ale_write(ale, idx, ale_entry);
 	}
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_ale_set_unreg_mcast, TI_CPSW_CORE);

 static void cpsw_ale_vlan_set_unreg_mcast(struct cpsw_ale *ale, u32 *ale_entry,
 					  int allmulti)
@@ -857,6 +867,7 @@ void cpsw_ale_set_allmulti(struct cpsw_ale *ale, int allmulti, int port)
 		cpsw_ale_write(ale, idx, ale_entry);
 	}
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_ale_set_allmulti, TI_CPSW_CORE);

 struct ale_control_info {
 	const char	*name;
@@ -1114,6 +1125,7 @@ int cpsw_ale_control_set(struct cpsw_ale *ale, int port, int control,

 	return 0;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_ale_control_set, TI_CPSW_CORE);

 int cpsw_ale_control_get(struct cpsw_ale *ale, int port, int control)
 {
@@ -1137,6 +1149,7 @@ int cpsw_ale_control_get(struct cpsw_ale *ale, int port, int control)
 	tmp = readl_relaxed(ale->params.ale_regs + offset) >> shift;
 	return tmp & BITMASK(info->bits);
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_ale_control_get, TI_CPSW_CORE);

 int cpsw_ale_rx_ratelimit_mc(struct cpsw_ale *ale, int port, unsigned int ratelimit_pps)

@@ -1159,6 +1172,7 @@ int cpsw_ale_rx_ratelimit_mc(struct cpsw_ale *ale, int port, unsigned int rateli
 		port, val * ALE_RATE_LIMIT_MIN_PPS);
 	return 0;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_ale_rx_ratelimit_mc, TI_CPSW_CORE);

 int cpsw_ale_rx_ratelimit_bc(struct cpsw_ale *ale, int port, unsigned int ratelimit_pps)

@@ -1181,6 +1195,7 @@ int cpsw_ale_rx_ratelimit_bc(struct cpsw_ale *ale, int port, unsigned int rateli
 		port, val * ALE_RATE_LIMIT_MIN_PPS);
 	return 0;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_ale_rx_ratelimit_bc, TI_CPSW_CORE);

 static void cpsw_ale_timer(struct timer_list *t)
 {
@@ -1270,6 +1285,7 @@ void cpsw_ale_start(struct cpsw_ale *ale)

 	cpsw_ale_aging_start(ale);
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_ale_start, TI_CPSW_CORE);

 void cpsw_ale_stop(struct cpsw_ale *ale)
 {
@@ -1277,6 +1293,7 @@ void cpsw_ale_stop(struct cpsw_ale *ale)
 	cpsw_ale_control_set(ale, 0, ALE_CLEAR, 1);
 	cpsw_ale_control_set(ale, 0, ALE_ENABLE, 0);
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_ale_stop, TI_CPSW_CORE);

 static const struct cpsw_ale_dev_id cpsw_ale_id_match[] = {
 	{
@@ -1441,6 +1458,7 @@ struct cpsw_ale *cpsw_ale_create(struct cpsw_ale_params *params)
 	cpsw_ale_control_set(ale, 0, ALE_CLEAR, 1);
 	return ale;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_ale_create, TI_CPSW_CORE);

 void cpsw_ale_dump(struct cpsw_ale *ale, u32 *data)
 {
@@ -1451,8 +1469,10 @@ void cpsw_ale_dump(struct cpsw_ale *ale, u32 *data)
 		data += ALE_ENTRY_WORDS;
 	}
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_ale_dump, TI_CPSW_CORE);

 u32 cpsw_ale_get_num_entries(struct cpsw_ale *ale)
 {
 	return ale ? ale->params.ale_entries : 0;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_ale_get_num_entries, TI_CPSW_CORE);
diff --git a/drivers/net/ethernet/ti/cpsw_ethtool.c b/drivers/net/ethernet/ti/cpsw_ethtool.c
index a557a477d039..78396f84e42d 100644
--- a/drivers/net/ethernet/ti/cpsw_ethtool.c
+++ b/drivers/net/ethernet/ti/cpsw_ethtool.c
@@ -144,6 +144,7 @@ u32 cpsw_get_msglevel(struct net_device *ndev)

 	return priv->msg_enable;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_get_msglevel, TI_CPSW_CORE);

 void cpsw_set_msglevel(struct net_device *ndev, u32 value)
 {
@@ -151,6 +152,7 @@ void cpsw_set_msglevel(struct net_device *ndev, u32 value)

 	priv->msg_enable = value;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_set_msglevel, TI_CPSW_CORE);

 int cpsw_get_coalesce(struct net_device *ndev, struct ethtool_coalesce *coal,
 		      struct kernel_ethtool_coalesce *kernel_coal,
@@ -161,6 +163,7 @@ int cpsw_get_coalesce(struct net_device *ndev, struct ethtool_coalesce *coal,
 	coal->rx_coalesce_usecs = cpsw->coal_intvl;
 	return 0;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_get_coalesce, TI_CPSW_CORE);

 int cpsw_set_coalesce(struct net_device *ndev, struct ethtool_coalesce *coal,
 		      struct kernel_ethtool_coalesce *kernel_coal,
@@ -220,6 +223,7 @@ int cpsw_set_coalesce(struct net_device *ndev, struct ethtool_coalesce *coal,

 	return 0;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_set_coalesce, TI_CPSW_CORE);

 int cpsw_get_sset_count(struct net_device *ndev, int sset)
 {
@@ -234,6 +238,7 @@ int cpsw_get_sset_count(struct net_device *ndev, int sset)
 		return -EOPNOTSUPP;
 	}
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_get_sset_count, TI_CPSW_CORE);

 static void cpsw_add_ch_strings(u8 **p, int ch_num, int rx_dir)
 {
@@ -271,6 +276,7 @@ void cpsw_get_strings(struct net_device *ndev, u32 stringset, u8 *data)
 		break;
 	}
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_get_strings, TI_CPSW_CORE);

 void cpsw_get_ethtool_stats(struct net_device *ndev,
 			    struct ethtool_stats *stats, u64 *data)
@@ -303,6 +309,7 @@ void cpsw_get_ethtool_stats(struct net_device *ndev,
 		}
 	}
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_get_ethtool_stats, TI_CPSW_CORE);

 void cpsw_get_pauseparam(struct net_device *ndev,
 			 struct ethtool_pauseparam *pause)
@@ -313,6 +320,7 @@ void cpsw_get_pauseparam(struct net_device *ndev,
 	pause->rx_pause = priv->rx_pause ? true : false;
 	pause->tx_pause = priv->tx_pause ? true : false;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_get_pauseparam, TI_CPSW_CORE);

 void cpsw_get_wol(struct net_device *ndev, struct ethtool_wolinfo *wol)
 {
@@ -326,6 +334,7 @@ void cpsw_get_wol(struct net_device *ndev, struct ethtool_wolinfo *wol)
 	if (cpsw->slaves[slave_no].phy)
 		phy_ethtool_get_wol(cpsw->slaves[slave_no].phy, wol);
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_get_wol, TI_CPSW_CORE);

 int cpsw_set_wol(struct net_device *ndev, struct ethtool_wolinfo *wol)
 {
@@ -338,6 +347,7 @@ int cpsw_set_wol(struct net_device *ndev, struct ethtool_wolinfo *wol)
 	else
 		return -EOPNOTSUPP;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_set_wol, TI_CPSW_CORE);

 int cpsw_get_regs_len(struct net_device *ndev)
 {
@@ -346,6 +356,7 @@ int cpsw_get_regs_len(struct net_device *ndev)
 	return cpsw_ale_get_num_entries(cpsw->ale) *
 	       ALE_ENTRY_WORDS * sizeof(u32);
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_get_regs_len, TI_CPSW_CORE);

 void cpsw_get_regs(struct net_device *ndev, struct ethtool_regs *regs, void *p)
 {
@@ -357,6 +368,7 @@ void cpsw_get_regs(struct net_device *ndev, struct ethtool_regs *regs, void *p)

 	cpsw_ale_dump(cpsw->ale, reg);
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_get_regs, TI_CPSW_CORE);

 int cpsw_ethtool_op_begin(struct net_device *ndev)
 {
@@ -370,6 +382,7 @@ int cpsw_ethtool_op_begin(struct net_device *ndev)

 	return ret;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_ethtool_op_begin, TI_CPSW_CORE);

 void cpsw_ethtool_op_complete(struct net_device *ndev)
 {
@@ -380,6 +393,7 @@ void cpsw_ethtool_op_complete(struct net_device *ndev)
 	if (ret < 0)
 		cpsw_err(priv, drv, "ethtool complete failed %d\n", ret);
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_ethtool_op_complete, TI_CPSW_CORE);

 void cpsw_get_channels(struct net_device *ndev, struct ethtool_channels *ch)
 {
@@ -394,6 +408,7 @@ void cpsw_get_channels(struct net_device *ndev, struct ethtool_channels *ch)
 	ch->tx_count = cpsw->tx_ch_num;
 	ch->combined_count = 0;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_get_channels, TI_CPSW_CORE);

 int cpsw_get_link_ksettings(struct net_device *ndev,
 			    struct ethtool_link_ksettings *ecmd)
@@ -408,6 +423,7 @@ int cpsw_get_link_ksettings(struct net_device *ndev,
 	phy_ethtool_ksettings_get(cpsw->slaves[slave_no].phy, ecmd);
 	return 0;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_get_link_ksettings, TI_CPSW_CORE);

 int cpsw_set_link_ksettings(struct net_device *ndev,
 			    const struct ethtool_link_ksettings *ecmd)
@@ -421,6 +437,7 @@ int cpsw_set_link_ksettings(struct net_device *ndev,

 	return phy_ethtool_ksettings_set(cpsw->slaves[slave_no].phy, ecmd);
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_set_link_ksettings, TI_CPSW_CORE);

 int cpsw_get_eee(struct net_device *ndev, struct ethtool_eee *edata)
 {
@@ -433,6 +450,7 @@ int cpsw_get_eee(struct net_device *ndev, struct ethtool_eee *edata)
 	else
 		return -EOPNOTSUPP;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_get_eee, TI_CPSW_CORE);

 int cpsw_set_eee(struct net_device *ndev, struct ethtool_eee *edata)
 {
@@ -445,6 +463,7 @@ int cpsw_set_eee(struct net_device *ndev, struct ethtool_eee *edata)
 	else
 		return -EOPNOTSUPP;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_set_eee, TI_CPSW_CORE);

 int cpsw_nway_reset(struct net_device *ndev)
 {
@@ -457,6 +476,7 @@ int cpsw_nway_reset(struct net_device *ndev)
 	else
 		return -EOPNOTSUPP;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_nway_reset, TI_CPSW_CORE);

 static void cpsw_suspend_data_pass(struct net_device *ndev)
 {
@@ -654,6 +674,7 @@ int cpsw_set_channels_common(struct net_device *ndev,
 	cpsw_fail(cpsw);
 	return ret;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_set_channels_common, TI_CPSW_CORE);

 void cpsw_get_ringparam(struct net_device *ndev,
 			struct ethtool_ringparam *ering,
@@ -669,6 +690,7 @@ void cpsw_get_ringparam(struct net_device *ndev,
 	ering->rx_max_pending = cpsw->descs_pool_size - CPSW_MAX_QUEUES;
 	ering->rx_pending = cpdma_get_num_rx_descs(cpsw->dma);
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_get_ringparam, TI_CPSW_CORE);

 int cpsw_set_ringparam(struct net_device *ndev,
 		       struct ethtool_ringparam *ering,
@@ -715,6 +737,7 @@ int cpsw_set_ringparam(struct net_device *ndev,
 	cpsw_fail(cpsw);
 	return ret;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_set_ringparam, TI_CPSW_CORE);

 #if IS_ENABLED(CONFIG_TI_CPTS)
 int cpsw_get_ts_info(struct net_device *ndev, struct ethtool_ts_info *info)
@@ -750,3 +773,4 @@ int cpsw_get_ts_info(struct net_device *ndev, struct ethtool_ts_info *info)
 	return 0;
 }
 #endif
+EXPORT_SYMBOL_NS_GPL(cpsw_get_ts_info, TI_CPSW_CORE);
diff --git a/drivers/net/ethernet/ti/cpsw_new.c b/drivers/net/ethernet/ti/cpsw_new.c
index 9ed398c04c04..d56b6c995252 100644
--- a/drivers/net/ethernet/ti/cpsw_new.c
+++ b/drivers/net/ethernet/ti/cpsw_new.c
@@ -2116,6 +2116,7 @@ static struct platform_driver cpsw_driver = {

 module_platform_driver(cpsw_driver);

+MODULE_IMPORT_NS(TI_CPSW_CORE);
 MODULE_IMPORT_NS(TI_DAVINCI_CPDMA);

 MODULE_LICENSE("GPL");
diff --git a/drivers/net/ethernet/ti/cpsw_priv.c b/drivers/net/ethernet/ti/cpsw_priv.c
index 758295c898ac..fb2c7785a71e 100644
--- a/drivers/net/ethernet/ti/cpsw_priv.c
+++ b/drivers/net/ethernet/ti/cpsw_priv.c
@@ -31,6 +31,7 @@
 #define CPTS_N_ETX_TS 4

 int (*cpsw_slave_index)(struct cpsw_common *cpsw, struct cpsw_priv *priv);
+EXPORT_SYMBOL_NS_GPL(cpsw_slave_index, TI_CPSW_CORE);

 void cpsw_intr_enable(struct cpsw_common *cpsw)
 {
@@ -39,6 +40,7 @@ void cpsw_intr_enable(struct cpsw_common *cpsw)

 	cpdma_ctlr_int_ctrl(cpsw->dma, true);
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_intr_enable, TI_CPSW_CORE);

 void cpsw_intr_disable(struct cpsw_common *cpsw)
 {
@@ -47,6 +49,7 @@ void cpsw_intr_disable(struct cpsw_common *cpsw)

 	cpdma_ctlr_int_ctrl(cpsw->dma, false);
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_intr_disable, TI_CPSW_CORE);

 void cpsw_tx_handler(void *token, int len, int status)
 {
@@ -81,6 +84,7 @@ void cpsw_tx_handler(void *token, int len, int status)
 	ndev->stats.tx_packets++;
 	ndev->stats.tx_bytes += len;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_tx_handler, TI_CPSW_CORE);

 irqreturn_t cpsw_tx_interrupt(int irq, void *dev_id)
 {
@@ -97,6 +101,7 @@ irqreturn_t cpsw_tx_interrupt(int irq, void *dev_id)
 	napi_schedule(&cpsw->napi_tx);
 	return IRQ_HANDLED;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_tx_interrupt, TI_CPSW_CORE);

 irqreturn_t cpsw_rx_interrupt(int irq, void *dev_id)
 {
@@ -113,6 +118,7 @@ irqreturn_t cpsw_rx_interrupt(int irq, void *dev_id)
 	napi_schedule(&cpsw->napi_rx);
 	return IRQ_HANDLED;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_rx_interrupt, TI_CPSW_CORE);

 irqreturn_t cpsw_misc_interrupt(int irq, void *dev_id)
 {
@@ -125,6 +131,7 @@ irqreturn_t cpsw_misc_interrupt(int irq, void *dev_id)

 	return IRQ_HANDLED;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_misc_interrupt, TI_CPSW_CORE);

 int cpsw_tx_mq_poll(struct napi_struct *napi_tx, int budget)
 {
@@ -157,6 +164,7 @@ int cpsw_tx_mq_poll(struct napi_struct *napi_tx, int budget)

 	return num_tx;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_tx_mq_poll, TI_CPSW_CORE);

 int cpsw_tx_poll(struct napi_struct *napi_tx, int budget)
 {
@@ -175,6 +183,7 @@ int cpsw_tx_poll(struct napi_struct *napi_tx, int budget)

 	return num_tx;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_tx_poll, TI_CPSW_CORE);

 int cpsw_rx_mq_poll(struct napi_struct *napi_rx, int budget)
 {
@@ -207,6 +216,7 @@ int cpsw_rx_mq_poll(struct napi_struct *napi_rx, int budget)

 	return num_rx;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_rx_mq_poll, TI_CPSW_CORE);

 int cpsw_rx_poll(struct napi_struct *napi_rx, int budget)
 {
@@ -225,6 +235,7 @@ int cpsw_rx_poll(struct napi_struct *napi_rx, int budget)

 	return num_rx;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_rx_poll, TI_CPSW_CORE);

 void cpsw_rx_vlan_encap(struct sk_buff *skb)
 {
@@ -267,12 +278,14 @@ void cpsw_rx_vlan_encap(struct sk_buff *skb)
 		skb_pull(skb, VLAN_HLEN);
 	}
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_rx_vlan_encap, TI_CPSW_CORE);

 void cpsw_set_slave_mac(struct cpsw_slave *slave, struct cpsw_priv *priv)
 {
 	slave_write(slave, mac_hi(priv->mac_addr), SA_HI);
 	slave_write(slave, mac_lo(priv->mac_addr), SA_LO);
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_set_slave_mac, TI_CPSW_CORE);

 void soft_reset(const char *module, void __iomem *reg)
 {
@@ -285,6 +298,7 @@ void soft_reset(const char *module, void __iomem *reg)

 	WARN(readl_relaxed(reg) & 1, "failed to soft-reset %s\n", module);
 }
+EXPORT_SYMBOL_NS_GPL(soft_reset, TI_CPSW_CORE);

 void cpsw_ndo_tx_timeout(struct net_device *ndev, unsigned int txqueue)
 {
@@ -304,6 +318,7 @@ void cpsw_ndo_tx_timeout(struct net_device *ndev, unsigned int txqueue)
 	netif_trans_update(ndev);
 	netif_tx_wake_all_queues(ndev);
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_ndo_tx_timeout, TI_CPSW_CORE);

 static int cpsw_get_common_speed(struct cpsw_common *cpsw)
 {
@@ -342,6 +357,7 @@ int cpsw_need_resplit(struct cpsw_common *cpsw)

 	return 1;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_need_resplit, TI_CPSW_CORE);

 void cpsw_split_res(struct cpsw_common *cpsw)
 {
@@ -427,6 +443,7 @@ void cpsw_split_res(struct cpsw_common *cpsw)
 	if (budget)
 		cpsw->rxv[0].budget += budget;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_split_res, TI_CPSW_CORE);

 int cpsw_init_common(struct cpsw_common *cpsw, void __iomem *ss_regs,
 		     int ale_ageout, phys_addr_t desc_mem_phys,
@@ -547,6 +564,7 @@ int cpsw_init_common(struct cpsw_common *cpsw, void __iomem *ss_regs,

 	return ret;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_init_common, TI_CPSW_CORE);

 #if IS_ENABLED(CONFIG_TI_CPTS)

@@ -728,6 +746,7 @@ int cpsw_ndo_ioctl(struct net_device *dev, struct ifreq *req, int cmd)

 	return -EOPNOTSUPP;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_ndo_ioctl, TI_CPSW_CORE);

 int cpsw_ndo_set_tx_maxrate(struct net_device *ndev, int queue, u32 rate)
 {
@@ -777,6 +796,7 @@ int cpsw_ndo_set_tx_maxrate(struct net_device *ndev, int queue, u32 rate)
 	cpsw_split_res(cpsw);
 	return ret;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_ndo_set_tx_maxrate, TI_CPSW_CORE);

 static int cpsw_tc_to_fifo(int tc, int num_tc)
 {
@@ -801,6 +821,7 @@ bool cpsw_shp_is_off(struct cpsw_priv *priv)

 	return !val;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_shp_is_off, TI_CPSW_CORE);

 static void cpsw_fifo_shp_on(struct cpsw_priv *priv, int fifo, int on)
 {
@@ -1062,6 +1083,7 @@ int cpsw_ndo_setup_tc(struct net_device *ndev, enum tc_setup_type type,
 		return -EOPNOTSUPP;
 	}
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_ndo_setup_tc, TI_CPSW_CORE);

 void cpsw_cbs_resume(struct cpsw_slave *slave, struct cpsw_priv *priv)
 {
@@ -1075,6 +1097,7 @@ void cpsw_cbs_resume(struct cpsw_slave *slave, struct cpsw_priv *priv)
 		cpsw_set_fifo_rlimit(priv, fifo, bw);
 	}
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_cbs_resume, TI_CPSW_CORE);

 void cpsw_mqprio_resume(struct cpsw_slave *slave, struct cpsw_priv *priv)
 {
@@ -1097,6 +1120,7 @@ void cpsw_mqprio_resume(struct cpsw_slave *slave, struct cpsw_priv *priv)

 	slave_write(slave, tx_prio_map, tx_prio_rg);
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_mqprio_resume, TI_CPSW_CORE);

 int cpsw_fill_rx_channels(struct cpsw_priv *priv)
 {
@@ -1142,6 +1166,7 @@ int cpsw_fill_rx_channels(struct cpsw_priv *priv)

 	return 0;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_fill_rx_channels, TI_CPSW_CORE);

 static struct page_pool *cpsw_create_page_pool(struct cpsw_common *cpsw,
 					       int size)
@@ -1227,6 +1252,7 @@ void cpsw_destroy_xdp_rxqs(struct cpsw_common *cpsw)
 		cpsw->page_pool[ch] = NULL;
 	}
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_destroy_xdp_rxqs, TI_CPSW_CORE);

 int cpsw_create_xdp_rxqs(struct cpsw_common *cpsw)
 {
@@ -1259,6 +1285,7 @@ int cpsw_create_xdp_rxqs(struct cpsw_common *cpsw)

 	return ret;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_create_xdp_rxqs, TI_CPSW_CORE);

 static int cpsw_xdp_prog_setup(struct cpsw_priv *priv, struct netdev_bpf *bpf)
 {
@@ -1286,6 +1313,7 @@ int cpsw_ndo_bpf(struct net_device *ndev, struct netdev_bpf *bpf)
 		return -EINVAL;
 	}
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_ndo_bpf, TI_CPSW_CORE);

 int cpsw_xdp_tx_frame(struct cpsw_priv *priv, struct xdp_frame *xdpf,
 		      struct page *page, int port)
@@ -1319,6 +1347,7 @@ int cpsw_xdp_tx_frame(struct cpsw_priv *priv, struct xdp_frame *xdpf,

 	return ret;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_xdp_tx_frame, TI_CPSW_CORE);

 int cpsw_run_xdp(struct cpsw_priv *priv, int ch, struct xdp_buff *xdp,
 		 struct page *page, int port, int *len)
@@ -1381,6 +1410,7 @@ int cpsw_run_xdp(struct cpsw_priv *priv, int ch, struct xdp_buff *xdp,
 	page_pool_recycle_direct(cpsw->page_pool[ch], page);
 	return ret;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_run_xdp, TI_CPSW_CORE);

 static int cpsw_qos_clsflower_add_policer(struct cpsw_priv *priv,
 					  struct netlink_ext_ack *extack,
@@ -1580,3 +1610,9 @@ void cpsw_qos_clsflower_resume(struct cpsw_priv *priv)
 		cpsw_ale_rx_ratelimit_mc(priv->cpsw->ale, port_id,
 					 priv->ale_mc_ratelimit.rate_packet_ps);
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_qos_clsflower_resume, TI_CPSW_CORE);
+
+MODULE_IMPORT_NS(TI_DAVINCI_CPDMA);
+
+MODULE_DESCRIPTION("TI CPSW Core Module");
+MODULE_LICENSE("GPL");
diff --git a/drivers/net/ethernet/ti/cpsw_sl.c b/drivers/net/ethernet/ti/cpsw_sl.c
index 0c7531cb0f39..893e29d72213 100644
--- a/drivers/net/ethernet/ti/cpsw_sl.c
+++ b/drivers/net/ethernet/ti/cpsw_sl.c
@@ -200,6 +200,7 @@ u32 cpsw_sl_reg_read(struct cpsw_sl *sl, enum cpsw_sl_regs reg)
 	dev_dbg(sl->dev, "cpsw_sl: reg: %04X r 0x%08X\n", sl->regs[reg], val);
 	return val;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_sl_reg_read, TI_CPSW_CORE);

 void cpsw_sl_reg_write(struct cpsw_sl *sl, enum cpsw_sl_regs reg, u32 val)
 {
@@ -212,6 +213,7 @@ void cpsw_sl_reg_write(struct cpsw_sl *sl, enum cpsw_sl_regs reg, u32 val)
 	dev_dbg(sl->dev, "cpsw_sl: reg: %04X w 0x%08X\n", sl->regs[reg], val);
 	writel(val, sl->sl_base + sl->regs[reg]);
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_sl_reg_write, TI_CPSW_CORE);

 static const struct cpsw_sl_dev_id *cpsw_sl_match_id(
 		const struct cpsw_sl_dev_id *id,
@@ -252,6 +254,7 @@ struct cpsw_sl *cpsw_sl_get(const char *device_id, struct device *dev,

 	return sl;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_sl_get, TI_CPSW_CORE);

 void cpsw_sl_reset(struct cpsw_sl *sl, unsigned long tmo)
 {
@@ -270,6 +273,7 @@ void cpsw_sl_reset(struct cpsw_sl *sl, unsigned long tmo)
 	if (cpsw_sl_reg_read(sl, CPSW_SL_SOFT_RESET) & CPSW_SL_SOFT_RESET_BIT)
 		dev_err(sl->dev, "cpsw_sl failed to soft-reset.\n");
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_sl_reset, TI_CPSW_CORE);

 u32 cpsw_sl_ctl_set(struct cpsw_sl *sl, u32 ctl_funcs)
 {
@@ -287,6 +291,7 @@ u32 cpsw_sl_ctl_set(struct cpsw_sl *sl, u32 ctl_funcs)

 	return 0;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_sl_ctl_set, TI_CPSW_CORE);

 u32 cpsw_sl_ctl_clr(struct cpsw_sl *sl, u32 ctl_funcs)
 {
@@ -304,11 +309,13 @@ u32 cpsw_sl_ctl_clr(struct cpsw_sl *sl, u32 ctl_funcs)

 	return 0;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_sl_ctl_clr, TI_CPSW_CORE);

 void cpsw_sl_ctl_reset(struct cpsw_sl *sl)
 {
 	cpsw_sl_reg_write(sl, CPSW_SL_MACCONTROL, 0);
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_sl_ctl_reset, TI_CPSW_CORE);

 int cpsw_sl_wait_for_idle(struct cpsw_sl *sl, unsigned long tmo)
 {
@@ -326,3 +333,4 @@ int cpsw_sl_wait_for_idle(struct cpsw_sl *sl, unsigned long tmo)

 	return 0;
 }
+EXPORT_SYMBOL_NS_GPL(cpsw_sl_wait_for_idle, TI_CPSW_CORE);
diff --git a/drivers/net/ethernet/ti/netcp_core.c b/drivers/net/ethernet/ti/netcp_core.c
index aba70bef4894..7fe79626aa19 100644
--- a/drivers/net/ethernet/ti/netcp_core.c
+++ b/drivers/net/ethernet/ti/netcp_core.c
@@ -2275,6 +2275,8 @@ static struct platform_driver netcp_driver = {
 };
 module_platform_driver(netcp_driver);

+MODULE_IMPORT_NS(TI_CPSW_CORE);
+
 MODULE_LICENSE("GPL v2");
 MODULE_DESCRIPTION("TI NETCP driver for Keystone SOCs");
 MODULE_AUTHOR("Sandeep Nair <sandeep_n@ti.com");
diff --git a/drivers/net/ethernet/ti/netcp_ethss.c b/drivers/net/ethernet/ti/netcp_ethss.c
index 751fb0bc65c5..2bb3a5ab1df2 100644
--- a/drivers/net/ethernet/ti/netcp_ethss.c
+++ b/drivers/net/ethernet/ti/netcp_ethss.c
@@ -3873,6 +3873,8 @@ static void __exit keystone_gbe_exit(void)
 }
 module_exit(keystone_gbe_exit);

+MODULE_IMPORT_NS(TI_CPSW_CORE);
+
 MODULE_LICENSE("GPL v2");
 MODULE_DESCRIPTION("TI NETCP ETHSS driver for Keystone SOCs");
 MODULE_AUTHOR("Sandeep Nair <sandeep_n@ti.com");
--
2.38.1



  parent reply	other threads:[~2022-11-19 23:12 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-19 23:03 [PATCH 00/18] treewide: fix object files shared between several modules Alexander Lobakin
2022-11-19 23:04 ` [PATCH 01/18] block/rnbd: fix mixed module-builtin object Alexander Lobakin
2022-11-21 21:17   ` Andrew Davis
2022-11-22  5:59     ` Masahiro Yamada
2022-11-29 18:24       ` Andrew Davis
2022-11-19 23:04 ` [PATCH 02/18] drm/bridge: imx: " Alexander Lobakin
2022-11-19 23:05 ` [PATCH 03/18] drm/bridge: imx: turn imx8{qm,qxp}-ldb into single-object modules Alexander Lobakin
2022-11-19 23:05 ` [PATCH 04/18] sound: fix mixed module-builtin object Alexander Lobakin
2022-11-19 23:05 ` [PATCH 05/18] mfd: rsmu: " Alexander Lobakin
2022-11-19 23:06 ` [PATCH 06/18] mfd: rsmu: turn rsmu-{core,i2c,spi} into single-object modules Alexander Lobakin
2022-11-19 23:06 ` [PATCH 07/18] net: liquidio: fix mixed module-builtin object Alexander Lobakin
2022-11-19 23:06 ` [PATCH 08/18] net: enetc: " Alexander Lobakin
2022-11-23 13:03   ` Masahiro Yamada
2022-11-19 23:07 ` [PATCH 09/18] net: emac, cpsw: fix mixed module-builtin object (davinci_cpdma) Alexander Lobakin
2022-11-23 16:04   ` Masahiro Yamada
2022-11-19 23:07 ` [PATCH 10/18] EDAC: i10nm, skx: fix mixed module-builtin object Alexander Lobakin
2022-11-23 16:12   ` Masahiro Yamada
2022-11-19 23:08 ` [PATCH 11/18] platform/x86: int3472: fix object shared between several modules Alexander Lobakin
2022-11-20 13:55   ` Andy Shevchenko
2022-11-20 20:54     ` Hans de Goede
2022-11-20 23:45       ` Masahiro Yamada
2022-11-21  8:12         ` Hans de Goede
2022-11-21  9:06           ` Masahiro Yamada
2022-11-21  9:34             ` Hans de Goede
2022-11-23 21:19               ` Alexander Lobakin
2022-11-23 21:10           ` Alexander Lobakin
2022-11-23  0:01     ` Alexander Lobakin
2022-11-19 23:08 ` [PATCH 12/18] mtd: tests: " Alexander Lobakin
2022-11-23 13:11   ` Masahiro Yamada
2022-11-23 16:59     ` Miquel Raynal
2022-11-24 11:31       ` Miquel Raynal
2022-11-19 23:09 ` [PATCH 13/18] crypto: octeontx2: fix objects " Alexander Lobakin
2022-11-23 16:26   ` Masahiro Yamada
2023-02-06  5:18   ` [PATCH] crypto: octeontx2 - Fix " Herbert Xu
2022-11-19 23:09 ` [PATCH 14/18] dsa: ocelot: fix mixed module-builtin object Alexander Lobakin
2022-11-21 17:55   ` Vladimir Oltean
2022-11-21 18:12     ` Colin Foster
2022-11-21 21:02       ` Vladimir Oltean
2022-11-23 21:31       ` Alexander Lobakin
2022-11-23 21:47       ` Alexander Lobakin
2022-11-23 22:18         ` Colin Foster
2022-11-23 22:36           ` Vladimir Oltean
2022-11-21 18:59     ` Andy Shevchenko
2022-11-19 23:09 ` [PATCH 15/18] net: dpaa2: " Alexander Lobakin
2022-11-23 21:02   ` Masahiro Yamada
2022-11-19 23:10 ` [PATCH 16/18] net: hns3: " Alexander Lobakin
2022-11-22 12:39   ` Salil Mehta
2022-11-23 22:07     ` Alexander Lobakin
2022-11-24  9:58       ` Salil Mehta
2022-11-19 23:10 ` [PATCH 17/18] net: octeontx2: " Alexander Lobakin
2022-11-23 20:54   ` Masahiro Yamada
2022-11-19 23:10 ` Alexander Lobakin [this message]
2022-11-23 20:37   ` [PATCH 18/18] net: cpsw: " Masahiro Yamada
2022-11-20 11:58 ` [PATCH 00/18] treewide: fix object files shared between several modules Mark Brown
2022-11-20 12:26   ` Conor Dooley
2022-11-22 11:28     ` Mark Brown
2022-11-22 21:37   ` Alexander Lobakin
2022-11-23 11:51     ` Mark Brown
2022-11-21 19:50 ` Jakub Kicinski
2022-11-23 21:40   ` Alexander Lobakin
2022-11-23 21:39 ` Masahiro Yamada
2023-02-10 17:31 ` Alexander Lobakin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20221119225650.1044591-19-alobakin@pm.me \
    --to=alobakin@pm.me \
    --cc=alexandre.belloni@bootlin.com \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=axboe@kernel.dk \
    --cc=bbrezillon@kernel.org \
    --cc=bp@alien8.de \
    --cc=broonie@kernel.org \
    --cc=dchickles@marvell.com \
    --cc=djrscally@gmail.com \
    --cc=grygorii.strashko@ti.com \
    --cc=hdegoede@redhat.com \
    --cc=ioana.ciornei@nxp.com \
    --cc=linux-imx@nxp.com \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=masahiroy@kernel.org \
    --cc=miquel.raynal@bootlin.com \
    --cc=netdev@vger.kernel.org \
    --cc=nicolas@fjasle.eu \
    --cc=salil.mehta@huawei.com \
    --cc=sgoutham@marvell.com \
    --cc=tony.luck@intel.com \
    --cc=vladimir.oltean@nxp.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.