cs89x0: add support for i.MX31ADS ARM board
Subsystems (2)
PATCH 1/1 cs89x0: add support for i.MX31ADS ARM board
---
drivers/net/cs89x0.c +10 -2
@@ -194,6 +194,12 @@ static unsigned int cs8900_irq_map[] = {IRQ_IXDP2X01_CS8900, 0, 0, 0};#define CIRRUS_DEFAULT_IRQ VH_INTC_INT_NUM_CASCADED_INTERRUPT_1/* Event inputs bank 1 - ID 35/bit 3 */ static unsigned int netcard_portlist[]__used __initdata = {CIRRUS_DEFAULT_BASE ,0 };static unsigned int cs8900_irq_map[] = {CIRRUS_DEFAULT_IRQ ,0 ,0 ,0 }; +#elif defined(CONFIG_MACH_MX31ADS ) +#include <mach/board-mx31ads.h> +static unsigned int netcard_portlist[]__used __initdata = { +PBC_BASE_ADDRESS +PBC_CS8900A_IOBASE +0x300 ,0 +}; +static unsigned cs8900_irq_map[] = {EXPIO_INT_ENET_INT ,0 ,0 ,0 };#else static unsigned int netcard_portlist[]__used __initdata = {0x300 ,0x320 ,0x340 ,0x360 ,0x200 ,0x220 ,0x240 ,0x260 ,0x280 ,0x2a0 ,0x2c0 ,0x2e0 ,0 };
@@ -802,7 +808,7 @@ cs89x0_probe1(struct net_device *dev, int ioaddr, int modular) }else { i = lp->isa_config &INT_NO_MASK ;if (lp->chip_type ==CS8900 ) { -#if defined(CONFIG_MACH_IXDP2351 ) || defined(CONFIG_ARCH_IXDP2X01 ) || defined(CONFIG_ARCH_PNX010X ) +#if defined(CONFIG_MACH_IXDP2351 ) || defined(CONFIG_ARCH_IXDP2X01 ) || defined(CONFIG_ARCH_PNX010X ) || defined(CONFIG_MACH_MX31ADS ) i = cs8900_irq_map[0 ];#else /* Translate the IRQ using the IRQ mapping table. */
@@ -1029,6 +1035,7 @@ skip_this_frame:void __init reset_chip (struct net_device *dev) { +#if !defined(CONFIG_MACH_MX31ADS )#if !defined(CONFIG_MACH_IXDP2351 ) && !defined(CONFIG_ARCH_IXDP2X01 )struct net_local *lp =netdev_priv (dev);int ioaddr = dev->base_addr;
@@ -1057,6 +1064,7 @@ void __init reset_chip(struct net_device *dev) reset_start_time = jiffies;while ( (readreg (dev, PP_SelfST) &INIT_DONE ) ==0 && jiffies - reset_start_time <2 ) ; +#endif /* !CONFIG_MACH_MX31ADS */ }
@@ -1304,7 +1312,7 @@ net_open(struct net_device *dev) else#endif { -#if !defined(CONFIG_MACH_IXDP2351 ) && !defined(CONFIG_ARCH_IXDP2X01 ) && !defined(CONFIG_ARCH_PNX010X ) +#if !defined(CONFIG_MACH_IXDP2351 ) && !defined(CONFIG_ARCH_IXDP2X01 ) && !defined(CONFIG_ARCH_PNX010X ) && !defined(CONFIG_MACH_MX31ADS )if (((1 << dev->irq) & lp->irq_map) ==0 ) {printk (KERN_ERR "%s: IRQ %d is not in our map of allowable IRQs, which is %x\n" , dev->name, dev->irq, lp->irq_map);
Quoted 45 lines · Gilles Chanteperdrix
Signed-off-by Gilles Chanteperdrix <[email protected]>---
drivers/net/cs89x0.c +9
-1@@ -194,6 +194,12 @@ static unsigned int cs8900_irq_map[] = {IRQ_IXDP2X01_CS8900, 0, 0, 0};#define CIRRUS_DEFAULT_IRQ VH_INTC_INT_NUM_CASCADED_INTERRUPT_1/* Event inputs bank 1 - ID 35/bit 3 */ static unsigned int netcard_portlist[]__used __initdata = {CIRRUS_DEFAULT_BASE ,0 };static unsigned int cs8900_irq_map[] = {CIRRUS_DEFAULT_IRQ ,0 ,0 ,0 }; +#elif defined(CONFIG_MACH_MX31ADS ) +#include <mach/board-mx31ads.h> +static unsigned int netcard_portlist[]__used __initdata = { +PBC_BASE_ADDRESS +PBC_CS8900A_IOBASE +0x300 ,0 +}; +static unsigned cs8900_irq_map[] = {EXPIO_INT_ENET_INT ,0 ,0 ,0 };#else static unsigned int netcard_portlist[]__used __initdata = {0x300 ,0x320 ,0x340 ,0x360 ,0x200 ,0x220 ,0x240 ,0x260 ,0x280 ,0x2a0 ,0x2c0 ,0x2e0 ,0 };@@ -802,7 +808,7 @@ cs89x0_probe1(struct net_device *dev, int ioaddr, int modular) }else { i = lp->isa_config &INT_NO_MASK ;if (lp->chip_type ==CS8900 ) { -#if defined(CONFIG_MACH_IXDP2351 ) || defined(CONFIG_ARCH_IXDP2X01 ) || defined(CONFIG_ARCH_PNX010X ) +#if defined(CONFIG_MACH_IXDP2351 ) || defined(CONFIG_ARCH_IXDP2X01 ) || defined(CONFIG_ARCH_PNX010X ) || defined(CONFIG_MACH_MX31ADS ) i = cs8900_irq_map[0 ];#else /* Translate the IRQ using the IRQ mapping table. */ @@ -1029,6 +1035,7 @@ skip_this_frame:void __init reset_chip (struct net_device *dev) { +#if !defined(CONFIG_MACH_MX31ADS )#if !defined(CONFIG_MACH_IXDP2351 ) && !defined(CONFIG_ARCH_IXDP2X01 )struct net_local *lp =netdev_priv (dev);int ioaddr = dev->base_addr;@@ -1057,6 +1064,7 @@ void __init reset_chip(struct net_device *dev) reset_start_time = jiffies;while ( (readreg (dev, PP_SelfST) &INIT_DONE ) ==0 && jiffies - reset_start_time <2 ) ; +#endif /* !CONFIG_MACH_MX31ADS */ }
drivers/net/cs89x0.c net_open(struct net_device *dev) · line 1317
Quoted 7 lines
drivers/net/cs89x0.c +1
-1@@ -1304,7 +1312,7 @@ net_open(struct net_device *dev) else#endif { -#if !defined(CONFIG_MACH_IXDP2351) && !defined(CONFIG_ARCH_IXDP2X01) && !defined(CONFIG_ARCH_PNX010X) +#if !defined(CONFIG_MACH_IXDP2351) && !defined(CONFIG_ARCH_IXDP2X01) && !defined(CONFIG_ARCH_PNX010X) && !defined(CONFIG_MACH_MX31ADS) if (((1 << dev->irq) & lp->irq_map) == 0) { printk(KERN_ERR "%s: IRQ %d is not in our map of allowable IRQs, which is %x\n",
I don't know enough about the arch to be able to ACK or NAK... pass this through the appropriate arch maintainer tree please?
Quoted 52 lines · Jeff Garzik
Quoted 52 lines
Signed-off-by Gilles Chanteperdrix <[email protected]>---
drivers/net/cs89x0.c +0
-0@@ -194,6 +194,12 @@ static unsigned int cs8900_irq_map[] = {IRQ_IXDP2X01_CS8900, 0, 0, 0};#define CIRRUS_DEFAULT_IRQ VH_INTC_INT_NUM_CASCADED_INTERRUPT_1/* Event inputs bank 1 - ID 35/bit 3 */
static unsigned int netcard_portlist[]__used__initdata= {CIRRUS_DEFAULT_BASE, 0};
static unsigned int cs8900_irq_map[] = {CIRRUS_DEFAULT_IRQ, 0, 0, 0};drivers/net/cs89x0.c +6
-0+#elif defined(CONFIG_MACH_MX31ADS ) +#include <mach/board-mx31ads.h> +static unsigned int netcard_portlist[]__used __initdata = { +PBC_BASE_ADDRESS +PBC_CS8900A_IOBASE +0x300 ,0 +}; +static unsigned cs8900_irq_map[] = {EXPIO_INT_ENET_INT ,0 ,0 ,0 };#else
static unsigned int netcard_portlist[]__used__initdata=
{0x300,0x320,0x340,0x360,0x200,0x220,0x240,0x260,0x280,0x2a0,0x2c0,0x2e0, 0};drivers/net/cs89x0.c +1
-1@@ -802,7 +808,7 @@ cs89x0_probe1(struct net_device *dev, int ioaddr, int modular) }else { i = lp->isa_config &INT_NO_MASK ;if (lp->chip_type ==CS8900 ) { -#if defined(CONFIG_MACH_IXDP2351 ) || defined(CONFIG_ARCH_IXDP2X01 ) || defined(CONFIG_ARCH_PNX010X) +#if defined(CONFIG_MACH_IXDP2351 ) || defined(CONFIG_ARCH_IXDP2X01 ) || defined(CONFIG_ARCH_PNX010X ) || defined(CONFIG_MACH_MX31ADS )i = cs8900_irq_map[0]; #else /* Translate the IRQ using the IRQ mapping table. */drivers/net/cs89x0.c +2
-0@@ -1029,6 +1035,7 @@ skip_this_frame:void __init reset_chip (struct net_device *dev) { +#if !defined(CONFIG_MACH_MX31ADS )#if !defined(CONFIG_MACH_IXDP2351 ) && !defined(CONFIG_ARCH_IXDP2X01 )struct net_local *lp =netdev_priv (dev);int ioaddr = dev->base_addr;@@ -1057,6 +1064,7 @@ void __init reset_chip(struct net_device *dev) reset_start_time = jiffies;while ( (readreg (dev, PP_SelfST) &INIT_DONE ) ==0 && jiffies - reset_start_time <2 ) ; +#endif /* !CONFIG_MACH_MX31ADS */ }
Quoted 14 lines
Quoted 11 lines
drivers/net/cs89x0.c +1
-1@@ -1304,7 +1312,7 @@ net_open(struct net_device *dev) else#endif { -#if !defined(CONFIG_MACH_IXDP2351 ) && !defined(CONFIG_ARCH_IXDP2X01 ) && !defined(CONFIG_ARCH_PNX010X) +#if !defined(CONFIG_MACH_IXDP2351 ) && !defined(CONFIG_ARCH_IXDP2X01 ) && !defined(CONFIG_ARCH_PNX010X ) && !defined(CONFIG_MACH_MX31ADS )if (((1 << dev->irq) & lp->irq_map) ==0 ) {printk(KERN_ERR "%s: IRQ %d is not in our map of allowable IRQs, which is %x\n",
I don't know enough about the arch to be able to ACK or NAK... pass this through the appropriate arch maintainer tree please?
I don't have the original patch in my netdev box anymore, but what seems to me should be done is to add a platform driver interface to the cs89x0 driver, like how most other non-PCI non-other-autoconf- supporting-bus net drivers do it. (There aren't too many -- grep for platform_driver_register in drivers/net/*)
Then the knowledge about I/O addresses and IRQ lines can live in the platform code (where it belongs) instead of having it all in the driver (where it doesn't belong). And all the IXDP2351 and IXDP2X01 ifdefs can disappear as well. And the ->readword()/->writeword() hacks that need to be done for IXDP2351 and IXDP2X01 and PNX can then just be an (optional) set of platform data methods, with a fallback to the default one if they aren't passed in.
The question is whether someone wants to step up and do that work. cs89x0 has seen a lot of drive-by patching by people looking to satisfy their needs, but noone has stepped up to give it the proper love and care that it deserves.
Gilles, are you willing to do the platform driver conversion? If not, then I guess we should just merge this patch as-is (after you explain why you need to stub out reset_chip() on your board, as no other board seems to need this?).
Quoted 19 lines · Lennert Buytenhek
I don't have the original patch in my netdev box anymore, but what seems to me should be done is to add a platform driver interface to the cs89x0 driver, like how most other non-PCI non-other-autoconf- supporting-bus net drivers do it. (There aren't too many -- grep for
platform_driver_registerindrivers/net/*)Then the knowledge about I/O addresses and IRQ lines can live in the platform code (where it belongs) instead of having it all in the driver (where it doesn't belong). And all the IXDP2351 and IXDP2X01 ifdefs can disappear as well. And the ->readword()/->writeword() hacks that need to be done for IXDP2351 and IXDP2X01 and PNX can then just be an (optional) set of platform data methods, with a fallback to the default one if they aren't passed in.
The question is whether someone wants to step up and do that work. cs89x0 has seen a lot of drive-by patching by people looking to satisfy their needs, but noone has stepped up to give it the proper love and care that it deserves.
Quoted 4 lines
Gilles, are you willing to do the platform driver conversion? If not, then I guess we should just merge this patch as-is (after you explain why you need to stub out
reset_chip()on your board, as no other board seems to need this?).
Hi Lennert,
When I published this patch, I had access to an i.MX31ADS board, and getting Linux to work on this board was just a necessity to get my job done. I did this by copying the parts I needed working (the serial console and ethernet driver) from the Freescale tree.
Now, I am no longer working on this, so I can not test any modification. And I do not even know why people at Freescale did what they did.
All I can tell you is that an i.MX31ADS board works when using this patch.
Regards.
Signature · 1 line
Gilles.
Quoted 26 lines · Gilles Chanteperdrix
Quoted 19 lines
I don't have the original patch in my netdev box anymore, but what seems to me should be done is to add a platform driver interface to the cs89x0 driver, like how most other non-PCI non-other-autoconf- supporting-bus net drivers do it. (There aren't too many -- grep for
platform_driver_registerindrivers/net/*)Then the knowledge about I/O addresses and IRQ lines can live in the platform code (where it belongs) instead of having it all in the driver (where it doesn't belong). And all the IXDP2351 and IXDP2X01 ifdefs can disappear as well. And the ->readword()/->writeword() hacks that need to be done for IXDP2351 and IXDP2X01 and PNX can then just be an (optional) set of platform data methods, with a fallback to the default one if they aren't passed in.
The question is whether someone wants to step up and do that work. cs89x0 has seen a lot of drive-by patching by people looking to satisfy their needs, but noone has stepped up to give it the proper love and care that it deserves.
Quoted 4 lines
Gilles, are you willing to do the platform driver conversion? If not, then I guess we should just merge this patch as-is (after you explain why you need to stub out
reset_chip()on your board, as no other board seems to need this?).Hi Lennert,
Quoted 7 lines
When I published this patch, I had access to an i.MX31ADS board, and getting Linux to work on this board was just a necessity to get my job done. I did this by copying the parts I needed working (the serial console and ethernet driver) from the Freescale tree.
Now, I am no longer working on this, so I can not test any modification. And I do not even know why people at Freescale did what they did.
I guess then we should just wait until the Freescale people submit it.
Quoted 32 lines · Lennert Buytenhek
Quoted 30 lines · Gilles Chanteperdrix
Quoted 19 lines
I don't have the original patch in my netdev box anymore, but what seems to me should be done is to add a platform driver interface to the cs89x0 driver, like how most other non-PCI non-other-autoconf- supporting-bus net drivers do it. (There aren't too many -- grep for
platform_driver_registerindrivers/net/*)Then the knowledge about I/O addresses and IRQ lines can live in the platform code (where it belongs) instead of having it all in the driver (where it doesn't belong). And all the IXDP2351 and IXDP2X01 ifdefs can disappear as well. And the ->readword()/->writeword() hacks that need to be done for IXDP2351 and IXDP2X01 and PNX can then just be an (optional) set of platform data methods, with a fallback to the default one if they aren't passed in.
The question is whether someone wants to step up and do that work. cs89x0 has seen a lot of drive-by patching by people looking to satisfy their needs, but noone has stepped up to give it the proper love and care that it deserves.
Quoted 4 lines
Gilles, are you willing to do the platform driver conversion? If not, then I guess we should just merge this patch as-is (after you explain why you need to stub out
reset_chip()on your board, as no other board seems to need this?).Hi Lennert,
When I published this patch, I had access to an i.MX31ADS board, and getting Linux to work on this board was just a necessity to get my job done. I did this by copying the parts I needed working (the serial console and ethernet driver) from the Freescale tree.
Quoted 4 lines
Quoted 2 lines
Now, I am no longer working on this, so I can not test any modification. And I do not even know why people at Freescale did what they did.
I guess then we should just wait until the Freescale people submit it.
I will be able to test the modification soon. I will repost the patch on linux-arm-kernel after this test.
Signature · 1 line
Gilles.
Quoted 30 lines · Gilles Chanteperdrix
Quoted 30 lines
Quoted 30 lines
Quoted 19 lines
I don't have the original patch in my netdev box anymore, but what seems to me should be done is to add a platform driver interface to the cs89x0 driver, like how most other non-PCI non-other-autoconf- supporting-bus net drivers do it. (There aren't too many -- grep for
platform_driver_registerindrivers/net/*)Then the knowledge about I/O addresses and IRQ lines can live in the platform code (where it belongs) instead of having it all in the driver (where it doesn't belong). And all the IXDP2351 and IXDP2X01 ifdefs can disappear as well. And the ->readword()/->writeword() hacks that need to be done for IXDP2351 and IXDP2X01 and PNX can then just be an (optional) set of platform data methods, with a fallback to the default one if they aren't passed in.
The question is whether someone wants to step up and do that work. cs89x0 has seen a lot of drive-by patching by people looking to satisfy their needs, but noone has stepped up to give it the proper love and care that it deserves.
Quoted 4 lines
Gilles, are you willing to do the platform driver conversion? If not, then I guess we should just merge this patch as-is (after you explain why you need to stub out
reset_chip()on your board, as no other board seems to need this?).Hi Lennert,
When I published this patch, I had access to an i.MX31ADS board, and getting Linux to work on this board was just a necessity to get my job done. I did this by copying the parts I needed working (the serial console and ethernet driver) from the Freescale tree.
Quoted 7 lines
Quoted 4 lines
Quoted 2 lines
Now, I am no longer working on this, so I can not test any modification. And I do not even know why people at Freescale did what they did.
I guess then we should just wait until the Freescale people submit it.
I will be able to test the modification soon. I will repost the patch on linux-arm-kernel after this test.
OK. Please also try leaving reset_chip() as it is and see if it still works like that -- I suspect that that part of the patch might have been a debug leftover.
Quoted 9 lines · Lennert Buytenhek
Quoted 9 lines
Quoted 9 lines
Quoted 9 lines
Hi Lennert,
When I published this patch, I had access to an i.MX31ADS board, and getting Linux to work on this board was just a necessity to get my job done. I did this by copying the parts I needed working (the serial console and ethernet driver) from the Freescale tree.
Now, I am no longer working on this, so I can not test any modification. And I do not even know why people at Freescale did what they did.
Quoted 7 lines
Quoted 3 lines
Quoted 1 line
I guess then we should just wait until the Freescale people submit it.
I will be able to test the modification soon. I will repost the patch on linux-arm-kernel after this test.
OK. Please also try leaving
reset_chip()as it is and see if it still works like that -- I suspect that that part of the patch might have been a debug leftover.
Yes, that is precisely the part I want to test.
Signature · 1 line
Gilles.