Re: [PATCH] net: macb: fix endian code for avr32
From: Arun Chandran <hidden>
Date: 2015-03-18 13:16:41
Also in:
lkml
On Wed, Mar 18, 2015 at 4:27 PM, Ben Dooks [off-list ref] wrote:
[note this has yet to be compile tested on avr32]
The changes to run the macb driver in 29af05aeb98e ("net: macb:Yes I mistakenly thought zynq board was the first to run it in BIG endian mode.
quoted hunk ↗ jump to hunk
Add big endian CPU support") to support big endian operation on ARM may not work on AVR32 which already is naturally big endian architecture (and the driver already works here). In this case the readl/writel relaxed will do the opposite of __raw accesors which arleady work. Add an indirection of cdneth_ prefixed accesors which are changed as necessary. Also do not issue the DMA descritpor endian fetch configuration for AVR32. From discussions with Arnd Bergman, the following fix changes the use of readl_relaxed and writel_relaxed with a version that can be put back to __raw_readl/__raw_writel for the CONFIG_AVR32 case (and also remove the change to the DMA descriptor endian). Signed-off-by: Ben Dooks <redacted> Reported-by: Arnd Bergmann <arnd@arndb.de> -- CC: Linux Networking List <redacted> CC: Arun Chandran <redacted> CC: Haavard Skinnemoen <redacted> CC: Hans-Christian Egtvedt <redacted> CC: Linux Kernel List <redacted> CC: Nicolas Ferre <redacted> --- drivers/net/ethernet/cadence/macb.c | 14 +++++++------- drivers/net/ethernet/cadence/macb.h | 20 ++++++++++++++------ 2 files changed, 21 insertions(+), 13 deletions(-)diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c index b71e316..1c3f6e7 100644 --- a/drivers/net/ethernet/cadence/macb.c +++ b/drivers/net/ethernet/cadence/macb.c@@ -449,7 +449,7 @@ static void macb_update_stats(struct macb *bp) WARN_ON((unsigned long)(end - p - 1) != (MACB_TPF - MACB_PFR) / 4); for(; p < end; p++, reg++) - *p += readl_relaxed(reg); + *p += cdneth_readl(reg); } static int macb_halt_tx(struct macb *bp)@@ -1587,7 +1587,7 @@ static void macb_configure_dma(struct macb *bp) dmacfg |= GEM_BIT(TXPBMS) | GEM_BF(RXBMS, -1L); dmacfg &= ~GEM_BIT(ENDIA_PKT); /* Tell the chip to byteswap descriptors on big-endian hosts */ -#ifdef __BIG_ENDIAN
With https://kernel.googlesource.com/pub/scm/linux/kernel/git/davem/net-next/+/62f6924cb1543a10d05150d77f9a5e01e12c9ce1 in net-next I think CONFIG_AVR32 check is not required. --Arun