mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-10 04:48:04 +09:00
net: smc91x: dont't use SMC_outw for fixing up halfword-aligned data
SMC_outw invokes an endian-aware I/O accessor, which may change the data
endianness before writing to the device. This is not suitable for data
transfers where the memory buffer is simply a string of bytes that does
not require any byte-swapping.
This patches fixes the smc91x SMC_PUSH_DATA macro so that it uses the
string I/O accessor for outputting the leading or trailing halfwords on
halfword-aligned buffers.
Cc: <netdev@vger.kernel.org>
Cc: Nicolas Pitre <nico@fluxnic.net>
Cc: David S. Miller <davem@davemloft.net>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Acked-by: Nicolas Pitre <nico@linaro.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit e9e4ea74f0)
Signed-off-by: Victor Kamensky <victor.kamensky@linaro.org>
This commit is contained in:
committed by
Victor Kamensky
parent
1c3fe1f0b3
commit
00767d21ba
@@ -1110,8 +1110,7 @@ static const char * chip_ids[ 16 ] = {
|
||||
void __iomem *__ioaddr = ioaddr; \
|
||||
if (__len >= 2 && (unsigned long)__ptr & 2) { \
|
||||
__len -= 2; \
|
||||
SMC_outw(*(u16 *)__ptr, ioaddr, \
|
||||
DATA_REG(lp)); \
|
||||
SMC_outsw(ioaddr, DATA_REG(lp), __ptr, 1); \
|
||||
__ptr += 2; \
|
||||
} \
|
||||
if (SMC_CAN_USE_DATACS && lp->datacs) \
|
||||
@@ -1119,8 +1118,7 @@ static const char * chip_ids[ 16 ] = {
|
||||
SMC_outsl(__ioaddr, DATA_REG(lp), __ptr, __len>>2); \
|
||||
if (__len & 2) { \
|
||||
__ptr += (__len & ~3); \
|
||||
SMC_outw(*((u16 *)__ptr), ioaddr, \
|
||||
DATA_REG(lp)); \
|
||||
SMC_outsw(ioaddr, DATA_REG(lp), __ptr, 1); \
|
||||
} \
|
||||
} else if (SMC_16BIT(lp)) \
|
||||
SMC_outsw(ioaddr, DATA_REG(lp), p, (l) >> 1); \
|
||||
|
||||
Reference in New Issue
Block a user