ARM: fix insl() and outsl() endianness on IXP4xx architecture.
authorKrzysztof Hałasa <khc@pm.waw.pl>
Tue, 10 Nov 2009 23:21:48 +0000 (00:21 +0100)
committerKrzysztof Hałasa <khc@pm.waw.pl>
Sat, 5 Dec 2009 15:58:38 +0000 (16:58 +0100)
The repetitive in/out functions must preserve order, not value.

Signed-off-by: Krzysztof Hałasa <khc@pm.waw.pl>
arch/arm/mach-ixp4xx/include/mach/io.h

index 8a947d4..eb9c748 100644 (file)
@@ -311,7 +311,7 @@ static inline void
 __ixp4xx_outsl(u32 io_addr, const u32 *vaddr, u32 count)
 {
        while (count--)
-               outl(*vaddr++, io_addr);
+               outl(cpu_to_le32(*vaddr++), io_addr);
 }
 
 static inline u8 
@@ -366,7 +366,7 @@ static inline void
 __ixp4xx_insl(u32 io_addr, u32 *vaddr, u32 count)
 {
        while (count--)
-               *vaddr++ = inl(io_addr);
+               *vaddr++ = le32_to_cpu(inl(io_addr));
 }
 
 #define PIO_OFFSET      0x10000UL
@@ -374,12 +374,13 @@ __ixp4xx_insl(u32 io_addr, u32 *vaddr, u32 count)
 
 #define        __is_io_address(p)      (((unsigned long)p >= PIO_OFFSET) && \
                                        ((unsigned long)p <= (PIO_MASK + PIO_OFFSET)))
+
 static inline unsigned int
 __ixp4xx_ioread8(const void __iomem *addr)
 {
        unsigned long port = (unsigned long __force)addr;
        if (__is_io_address(port))
-               return  (unsigned int)__ixp4xx_inb(port & PIO_MASK);
+               return (unsigned int)__ixp4xx_inb(port & PIO_MASK);
        else
 #ifndef CONFIG_IXP4XX_INDIRECT_PCI
                return (unsigned int)__raw_readb(port);