mirror of https://gitee.com/openkylin/linux.git
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>
This commit is contained in:
parent
8ae45a535b
commit
9f2c94928a
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue