AX88180: use standard I/O accessors
PATCH 1/1 AX88180: use standard I/O accessors
The current dm9000x driver accesses its memory mapped registers directly instead of using the standard I/O accessors. This can cause problems on Blackfin systems as the accesses can get out of order. So convert the direct volatile dereferences to use the normal in/out macros.
--- drivers/net/ax88180.h | 15 ++++++++------- 1 files changed, 8 insertions(+), 7 deletions(-)
drivers/net/ax88180.h +8 -7
@@ -19,6 +19,7 @@#ifndef _AX88180_H_#define _AX88180_H_ +#include <asm/io.h> #include <asm/types.h> #include <config.h>
@@ -354,7 +355,7 @@ struct ax88180_private {static inline unsigned short INW (struct eth_device *dev,unsigned long addr) { -return le16_to_cpu (*(volatile unsigned short *) (addr + dev->iobase)); +return le16_to_cpu (inw (addr + dev->iobase)); }/*
@@ -363,32 +364,32 @@ static inline unsigned short INW (struct eth_device *dev, unsigned long addr)#if defined (CONFIG_DRIVER_AX88180_16BIT )static inline void OUTW (struct eth_device *dev,unsigned short command,unsigned long addr) { - *(volatile unsigned short *) ((addr + dev->iobase)) =cpu_to_le16 (command); +outw (cpu_to_le16 (command), addr + dev->iobase); }static inline unsigned short READ_RXBUF (struct eth_device *dev) { -return le16_to_cpu (*(volatile unsigned short *) (RXBUFFER_START + dev->iobase)); +return le16_to_cpu (inw (RXBUFFER_START + dev->iobase)); }static inline void WRITE_TXBUF (struct eth_device *dev,unsigned short data) { - *(volatile unsigned short *) ((TXBUFFER_START + dev->iobase)) =cpu_to_le16 (data); +outw (cpu_to_le16 (data), dev->iobase +TXBUFFER_START ); }#else static inline void OUTW (struct eth_device *dev,unsigned short command,unsigned long addr) { - *(volatile unsigned long *) ((addr + dev->iobase)) =cpu_to_le32 (command); +outl (cpu_to_le32 (command), addr + dev->iobase); }static inline unsigned long READ_RXBUF (struct eth_device *dev) { -return le32_to_cpu (*(volatile unsigned long *) (RXBUFFER_START + dev->iobase)); +return le32_to_cpu (inl (RXBUFFER_START + dev->iobase)); }static inline void WRITE_TXBUF (struct eth_device *dev,unsigned long data) { - *(volatile unsigned long *) ((TXBUFFER_START + dev->iobase)) =cpu_to_le32 (data); +outl (cpu_to_le32 (data), dev->iobase +TXBUFFER_START ); }#endif
Signature · 1 line
1.7.1
PATCH v2 1/1 AX88180: use standard I/O accessors
The current dm9000x driver accesses its memory mapped registers directly instead of using the standard I/O accessors. This can cause problems on Blackfin systems as the accesses can get out of order. So convert the direct volatile dereferences to use the normal in/out macros.
---
v2
- use read/write rather than in/out per recent discussions (see dm9000)
drivers/net/ax88180.h | 15 ++++++++------- 1 files changed, 8 insertions(+), 7 deletions(-)
drivers/net/ax88180.h +8 -7
@@ -19,6 +19,7 @@#ifndef _AX88180_H_#define _AX88180_H_ +#include <asm/io.h> #include <asm/types.h> #include <config.h>
@@ -354,7 +355,7 @@ struct ax88180_private {static inline unsigned short INW (struct eth_device *dev,unsigned long addr) { -return le16_to_cpu (*(volatile unsigned short *) (addr + dev->iobase)); +return le16_to_cpu (readw (addr + (void *)dev->iobase)); }/*
@@ -363,32 +364,32 @@ static inline unsigned short INW (struct eth_device *dev, unsigned long addr)#if defined (CONFIG_DRIVER_AX88180_16BIT )static inline void OUTW (struct eth_device *dev,unsigned short command,unsigned long addr) { - *(volatile unsigned short *) ((addr + dev->iobase)) =cpu_to_le16 (command); +writew (cpu_to_le16 (command), addr + (void *)dev->iobase); }static inline unsigned short READ_RXBUF (struct eth_device *dev) { -return le16_to_cpu (*(volatile unsigned short *) (RXBUFFER_START + dev->iobase)); +return le16_to_cpu (readw (RXBUFFER_START + (void *)dev->iobase)); }static inline void WRITE_TXBUF (struct eth_device *dev,unsigned short data) { - *(volatile unsigned short *) ((TXBUFFER_START + dev->iobase)) =cpu_to_le16 (data); +writew (cpu_to_le16 (data),TXBUFFER_START + (void *)dev->iobase); }#else static inline void OUTW (struct eth_device *dev,unsigned short command,unsigned long addr) { - *(volatile unsigned long *) ((addr + dev->iobase)) =cpu_to_le32 (command); +writel (cpu_to_le32 (command), addr + (void *)dev->iobase); }static inline unsigned long READ_RXBUF (struct eth_device *dev) { -return le32_to_cpu (*(volatile unsigned long *) (RXBUFFER_START + dev->iobase)); +return le32_to_cpu (readl (RXBUFFER_START + (void *)dev->iobase)); }static inline void WRITE_TXBUF (struct eth_device *dev,unsigned long data) { - *(volatile unsigned long *) ((TXBUFFER_START + dev->iobase)) =cpu_to_le32 (data); +writel (cpu_to_le32 (data),TXBUFFER_START + (void *)dev->iobase); }#endif
Signature · 1 line
1.7.1
PATCH v2 1/1 AX88180: use standard I/O accessors
Mike,
Quoted 9 lines · Mike Frysinger
The current dm9000x driver accesses its memory mapped registers directly instead of using the standard I/O accessors. This can cause problems on Blackfin systems as the accesses can get out of order. So convert the direct volatile dereferences to use the normal in/out macros.
Signed-off-by Mike Frysinger<[email protected]>Tested-by Hoan Hoang<[email protected]>---
I can't get this to apply. Please rebase against TOT.
regards,
Ben
PATCH v2 1/1 AX88180: use standard I/O accessors
Quoted 11 lines · On Monday, June 21, 2010 01:41:54 Ben Warren wrote:
Quoted 8 lines · Mike Frysinger
The current dm9000x driver accesses its memory mapped registers directly instead of using the standard I/O accessors. This can cause problems on Blackfin systems as the accesses can get out of order. So convert the direct volatile dereferences to use the normal in/out macros.
Signed-off-by Mike Frysinger<[email protected]>Tested-by Hoan Hoang<[email protected]>---
I can't get this to apply. Please rebase against TOT.
you need the first two in the series:
Applying: AX88180: add support for the Marvell 88E1118 phy
Applying: AX88180: make OUTW handle 32bit/16bit defines too
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
Url : http://lists.denx.de/pipermail/u-boot/attachments/20100621/d1d87a54/attachment.pgp
PATCH v2 1/1 AX88180: use standard I/O accessors
Hi Mike,
Quoted 13 lines · Mike Frysinger
Quoted 11 lines · On Monday, June 21, 2010 01:41:54 Ben Warren wrote:
Quoted 9 lines · Mike Frysinger
The current dm9000x driver accesses its memory mapped registers directly instead of using the standard I/O accessors. This can cause problems on Blackfin systems as the accesses can get out of order. So convert the direct volatile dereferences to use the normal in/out macros.
Signed-off-by Mike Frysinger<[email protected]>Tested-by Hoan Hoang<[email protected]>---
Quoted 7 lines
Quoted 2 lines
I can't get this to apply. Please rebase against TOT.
you need the first two in the series:
Applying: AX88180: add support for the Marvell 88E1118 phy
Applying: AX88180: make OUTW handle 32bit/16bit defines too -mike
Sorry I missed those. All three are now in net/text.
regards,
Ben