[PATCH 1/2] cs89x0_platform : Use ioread16/iowrite16 instead of inw/outw
From: Jaccon Bastiaansen <hidden>
Date: 2012-05-03 20:55:44
Also in:
netdev
Hello Arnd, 2012/4/30 Arnd Bergmann [off-list ref]:
On Monday 30 April 2012, Jaccon Bastiaansen wrote:quoted
The use of the inw/outw functions by the cs89x0 platform driver results in NULL pointer references. Signed-off-by: Jaccon Bastiaansen <redacted> --- ?drivers/net/ethernet/cirrus/cs89x0.c | ? 12 ++++++++++++ ?1 files changed, 12 insertions(+), 0 deletions(-)It's actually broken on most platforms already, and the #ifdef is about to go away since IXP2xxx is getting removed in v3.5.quoted
diff --git a/drivers/net/ethernet/cirrus/cs89x0.c b/drivers/net/ethernet/cirrus/cs89x0.c index b9406cb..95737e9 100644 --- a/drivers/net/ethernet/cirrus/cs89x0.c +++ b/drivers/net/ethernet/cirrus/cs89x0.c@@ -369,6 +369,18 @@ writeword(unsigned long base_addr, int portno, u16 value)?{ ? ? ? ? __raw_writel(value, base_addr + (portno << 1)); ?} +#elif defined(CONFIG_CS89x0_PLATFORM) +static u16 +readword(unsigned long base_addr, int portno) +{ + ? ? ? return ioread16(base_addr + portno); +} + +static void +writeword(unsigned long base_addr, int portno, u16 value) +{ + ? ? ? iowrite16(value, base_addr + portno); +} ?#else ?static u16 ?readword(unsigned long base_addr, int portno)I think the best solution would be to always using ioread32/iowrite32 in the #else path, and change the ISA code to do an ioport_map for the base address, passing around the virtual address as an __iomem pointer. ? ? ? ?Arnd --
So if I understand you correctly you would like to have an iopart_map() call in the cs89x0_probe() function and use the return value of that iopart_map() call as ioaddr parameter of the cs89x0_probe1() function. Is this correct? This would make the cs89x0_probe() function similar to the cs89x0_platform_probe() function where the return value of the ioremap() call is used as ioaddr parameter of the cs89x0_probe1() function. But why do you want to convert the current 16 bit accesses in the #else path to 32 bit accesses? Why not using ioread16()/iowrite16()? Regards, Jaccon