Thread (4 messages) 4 messages, 2 authors, 2012-05-04
STALE5154d

[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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help