diff options
author | Krzysztof Hałasa <khc@pm.waw.pl> | 2009-11-10 18:21:48 -0500 |
---|---|---|
committer | Krzysztof Hałasa <khc@pm.waw.pl> | 2009-12-05 10:58:38 -0500 |
commit | 9f2c94928a0d713d223b53909734877fe4f340ab (patch) | |
tree | b032519da6e3ec23c4f57e133be42481ff822bab | |
parent | 8ae45a535b172d350759eec2fcecf4368d4c13d1 (diff) |
ARM: fix insl() and outsl() endianness on IXP4xx architecture.
The repetitive in/out functions must preserve order, not value.
Signed-off-by: Krzysztof Hałasa <khc@pm.waw.pl>
-rw-r--r-- | arch/arm/mach-ixp4xx/include/mach/io.h | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/arch/arm/mach-ixp4xx/include/mach/io.h b/arch/arm/mach-ixp4xx/include/mach/io.h index 8a947d42a6f1..eb9c7489a999 100644 --- a/arch/arm/mach-ixp4xx/include/mach/io.h +++ b/arch/arm/mach-ixp4xx/include/mach/io.h | |||
@@ -311,7 +311,7 @@ static inline void | |||
311 | __ixp4xx_outsl(u32 io_addr, const u32 *vaddr, u32 count) | 311 | __ixp4xx_outsl(u32 io_addr, const u32 *vaddr, u32 count) |
312 | { | 312 | { |
313 | while (count--) | 313 | while (count--) |
314 | outl(*vaddr++, io_addr); | 314 | outl(cpu_to_le32(*vaddr++), io_addr); |
315 | } | 315 | } |
316 | 316 | ||
317 | static inline u8 | 317 | static inline u8 |
@@ -366,7 +366,7 @@ static inline void | |||
366 | __ixp4xx_insl(u32 io_addr, u32 *vaddr, u32 count) | 366 | __ixp4xx_insl(u32 io_addr, u32 *vaddr, u32 count) |
367 | { | 367 | { |
368 | while (count--) | 368 | while (count--) |
369 | *vaddr++ = inl(io_addr); | 369 | *vaddr++ = le32_to_cpu(inl(io_addr)); |
370 | } | 370 | } |
371 | 371 | ||
372 | #define PIO_OFFSET 0x10000UL | 372 | #define PIO_OFFSET 0x10000UL |
@@ -374,12 +374,13 @@ __ixp4xx_insl(u32 io_addr, u32 *vaddr, u32 count) | |||
374 | 374 | ||
375 | #define __is_io_address(p) (((unsigned long)p >= PIO_OFFSET) && \ | 375 | #define __is_io_address(p) (((unsigned long)p >= PIO_OFFSET) && \ |
376 | ((unsigned long)p <= (PIO_MASK + PIO_OFFSET))) | 376 | ((unsigned long)p <= (PIO_MASK + PIO_OFFSET))) |
377 | |||
377 | static inline unsigned int | 378 | static inline unsigned int |
378 | __ixp4xx_ioread8(const void __iomem *addr) | 379 | __ixp4xx_ioread8(const void __iomem *addr) |
379 | { | 380 | { |
380 | unsigned long port = (unsigned long __force)addr; | 381 | unsigned long port = (unsigned long __force)addr; |
381 | if (__is_io_address(port)) | 382 | if (__is_io_address(port)) |
382 | return (unsigned int)__ixp4xx_inb(port & PIO_MASK); | 383 | return (unsigned int)__ixp4xx_inb(port & PIO_MASK); |
383 | else | 384 | else |
384 | #ifndef CONFIG_IXP4XX_INDIRECT_PCI | 385 | #ifndef CONFIG_IXP4XX_INDIRECT_PCI |
385 | return (unsigned int)__raw_readb(port); | 386 | return (unsigned int)__raw_readb(port); |