diff mbox

[net-next,v8,0/4] net: Add Keystone NetCP ethernet driver support

Message ID 54C9654C.8030407@ti.com
State RFC, archived
Delegated to: David Miller
Headers show

Commit Message

Murali Karicheri Jan. 28, 2015, 10:40 p.m. UTC
+ Felipe, Mugunthan for commenting on TI_CPSW, ALE.

On 01/28/2015 04:03 PM, Arnd Bergmann wrote:
> On Wednesday 28 January 2015 15:43:57 Murali Karicheri wrote:
>>> this. Hope I am on the right track.
>>
>> Reproduced this. Following errors seen when building the modules.
>>
>>     LD [M]  drivers/net/ethernet/ti/keystone_netcp.o
>> drivers/net/ethernet/ti/netcp_ethss.o: In function `init_module':
>> netcp_ethss.c:(.init.text+0x0): multiple definition of `init_module'
>> drivers/net/ethernet/ti/netcp_core.o:netcp_core.c:(.init.text+0x0):
>> first defined here
>> drivers/net/ethernet/ti/netcp_ethss.o: In function `cleanup_module':
>> netcp_ethss.c:(.exit.text+0x0): multiple definition of `cleanup_module'
>> drivers/net/ethernet/ti/netcp_core.o:netcp_core.c:(.exit.text+0x0):
>> first defined here
>> make[4]: *** [drivers/net/ethernet/ti/keystone_netcp.o] Error 1
>>
>> BTW, I had to disable cpsw_ale.c to get to build keystone NetCP. I am
>> assuming someone from TI is addressing this.
>>
>> drivers/net/ethernet/ti/cpsw_ale.c: In function ‘cpsw_ale_start’:
>> drivers/net/ethernet/ti/cpsw_ale.c:759:2: error: ‘KBUILD_MODNAME’
>> undeclared (first use in this function)
>> drivers/net/ethernet/ti/cpsw_ale.c:759:2: note: each undeclared
>> identifier is reported only once for each function it appears in
>
> I think both problems are nontrivial to fix. The first one is obviously
> that there are multiple init_module functions in one module. You have
> to either split the driver into multiple loadable modules with at most
> one init_module/cleanup_module pair each, or call one of the functions
> from the other one in the right order.
I have a version that is building now with out issues. I had to make 
several modifications.

1. export functions from drivers/soc/ti/knav* that are used by the netcp 
driver. I will be sending a patch for this soon.

2. Convert netcp_ethss.o to a module and add Kconfig for the same

  config TI_KEYSTONE_NETCP
-       tristate "TI Keystone NETCP Ethernet subsystem Support"
+       tristate "TI Keystone NETCP Core Support"
+       select TI_CPSW_ALE
         depends on OF
         depends on KEYSTONE_NAVIGATOR_DMA && KEYSTONE_NAVIGATOR_QMSS
         ---help---
-         This driver supports TI's Keystone NETCP Ethernet subsystem.
+         This driver supports TI's Keystone NETCP Core.
+
+         To compile this driver as a module, choose M here: the module
+         will be called keystone_netcp.
+
+config TI_KEYSTONE_NETCP_ETHSS
+       depends on TI_KEYSTONE_NETCP
+       tristate "TI Keystone NETCP Ethernet subsystem Support"
+       ---help---


And Makefile to change as

3. export some of the functions in netcp_core.c to support building 
keystone_netcp_ethss as module.

>
> The second problem is where I got stuck myself: cpsw_ale.c (also cpts.c)
> is getting linked into both modules, which is not allowed: It is
> impossible for the kernel to compile these if one driver is a module
> and the other one is not, and any use of KBUILD_MODNAME fails because
> it is unclear what the modname is if the file is compiled once to
> be linked into two drivers.

I am still looking into this. Both Keystone and TI CPSW driver would 
need to use cpsw_ale.o and cpts.o (currently not used, but will need 
this later). Not found a solution yet.

Murali
>
> 	Arnd

Comments

Murali Karicheri Jan. 29, 2015, 5:21 p.m. UTC | #1
On 01/28/2015 05:40 PM, Murali Karicheri wrote:
> + Felipe, Mugunthan for commenting on TI_CPSW, ALE.
>

  --- Cut ------

>
>>
>> The second problem is where I got stuck myself: cpsw_ale.c (also cpts.c)
>> is getting linked into both modules, which is not allowed: It is
>> impossible for the kernel to compile these if one driver is a module
>> and the other one is not, and any use of KBUILD_MODNAME fails because
>> it is unclear what the modname is if the file is compiled once to
>> be linked into two drivers.
Arnd,

I think the solution is to make the cpsw_ale as a module and configured 
through a Kconfig option. I am working on a fix for this now.

Similar fix is required for cpts.o. Currently we are not using this 
module for Netcp, but soon this will be re-used. I have send a patch 
that is already applied to net-next removing cpts.o for Netcp.

Murali
>
> I am still looking into this. Both Keystone and TI CPSW driver would
> need to use cpsw_ale.o and cpts.o (currently not used, but will need
> this later). Not found a solution yet.
>
> Murali
>>
>> Arnd
>
>
Arnd Bergmann Jan. 29, 2015, 10 p.m. UTC | #2
On Thursday 29 January 2015 12:21:36 Murali Karicheri wrote:
> 
> I think the solution is to make the cpsw_ale as a module and configured 
> through a Kconfig option. I am working on a fix for this now.
> 
> Similar fix is required for cpts.o. Currently we are not using this 
> module for Netcp, but soon this will be re-used. I have send a patch 
> that is already applied to net-next removing cpts.o for Netcp.
> 

Great, thanks a lot for the follow-up.

	Arnd
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Murali Karicheri Jan. 29, 2015, 11:20 p.m. UTC | #3
On 01/29/2015 05:00 PM, Arnd Bergmann wrote:
> On Thursday 29 January 2015 12:21:36 Murali Karicheri wrote:
>>
>> I think the solution is to make the cpsw_ale as a module and configured
>> through a Kconfig option. I am working on a fix for this now.
>>
>> Similar fix is required for cpts.o. Currently we are not using this
>> module for Netcp, but soon this will be re-used. I have send a patch
>> that is already applied to net-next removing cpts.o for Netcp.
>>
>
> Great, thanks a lot for the follow-up.
>
> 	Arnd
Arnd,

I have just posted a patch to nedev list to address this issue. Please 
review and let me know your comments. This also require some additional 
fixes in drivers/soc/ti/ to build them as modules as well. Santosh has 
queued them against next merge window.

Felipe, Mugunthan,

As the patch touches ti_cpsw as well, please review and provide your 
comments. It will be great if you can apply this patch on net-next 
branch and test it on ti platform using ti_cpsw driver.
Arnd Bergmann Jan. 29, 2015, 11:49 p.m. UTC | #4
On Thursday 29 January 2015 18:20:24 Murali Karicheri wrote:
> 
> I have just posted a patch to nedev list to address this issue. Please 
> review and let me know your comments. This also require some additional 
> fixes in drivers/soc/ti/ to build them as modules as well. Santosh has 
> queued them against next merge window.

Ok, thanks for addressing this! As I wrote in reply to your patch, I'll
give it some extra build testing in random configurations.

	Arnd
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/net/ethernet/ti/Makefile 
b/drivers/net/ethernet/ti/Makefile
index 0a9813b..1dbb8b5 100644
--- a/drivers/net/ethernet/ti/Makefile
+++ b/drivers/net/ethernet/ti/Makefile
@@ -8,9 +8,13 @@  obj-$(CONFIG_TI_DAVINCI_EMAC) += davinci_emac.o
  obj-$(CONFIG_TI_DAVINCI_MDIO) += davinci_mdio.o
  obj-$(CONFIG_TI_DAVINCI_CPDMA) += davinci_cpdma.o
  obj-$(CONFIG_TI_CPSW_PHY_SEL) += cpsw-phy-sel.o
  obj-$(CONFIG_TI_CPSW) += ti_cpsw.o
  ti_cpsw-y := cpsw_ale.o cpsw.o cpts.o

  obj-$(CONFIG_TI_KEYSTONE_NETCP) += keystone_netcp.o
-keystone_netcp-y := netcp_core.o netcp_ethss.o netcp_sgmii.o \
-                       netcp_xgbepcsr.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