diff options
| author | Ben Dooks <ben.dooks@codethink.co.uk> | 2015-03-18 11:53:09 -0400 |
|---|---|---|
| committer | Felipe Balbi <balbi@ti.com> | 2015-03-19 12:28:16 -0400 |
| commit | a3dd3befd7cb7d445fcb7c51cd922bf89afe0762 (patch) | |
| tree | a8b9bb36f55d07c9451e69891762f7a23b2a6fec | |
| parent | b48cb02de37976ad2ebef201ad40aa40156f6daa (diff) | |
usb: gadget: atmel_usba: use endian agnostic IO on ARM
Change from using the __raw IO accesors to the endian agnostic versions
of readl/writel_relaxed when not on AVR32. This fixes issues with running
big endian on ARMv7.
Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
--
CC: Nicolas Ferre <nicolas.ferre@atmel.com>
CC: Felipe Balbi <balbi@ti.com>
CC: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
CC: linux-usb@vger.kernel.org
Signed-off-by: Felipe Balbi <balbi@ti.com>
| -rw-r--r-- | drivers/usb/gadget/udc/atmel_usba_udc.c | 4 | ||||
| -rw-r--r-- | drivers/usb/gadget/udc/atmel_usba_udc.h | 22 |
2 files changed, 18 insertions, 8 deletions
diff --git a/drivers/usb/gadget/udc/atmel_usba_udc.c b/drivers/usb/gadget/udc/atmel_usba_udc.c index d019b6c9d74d..4c01953a0869 100644 --- a/drivers/usb/gadget/udc/atmel_usba_udc.c +++ b/drivers/usb/gadget/udc/atmel_usba_udc.c | |||
| @@ -152,7 +152,7 @@ static int regs_dbg_open(struct inode *inode, struct file *file) | |||
| 152 | 152 | ||
| 153 | spin_lock_irq(&udc->lock); | 153 | spin_lock_irq(&udc->lock); |
| 154 | for (i = 0; i < inode->i_size / 4; i++) | 154 | for (i = 0; i < inode->i_size / 4; i++) |
| 155 | data[i] = __raw_readl(udc->regs + i * 4); | 155 | data[i] = usba_io_readl(udc->regs + i * 4); |
| 156 | spin_unlock_irq(&udc->lock); | 156 | spin_unlock_irq(&udc->lock); |
| 157 | 157 | ||
| 158 | file->private_data = data; | 158 | file->private_data = data; |
| @@ -1249,7 +1249,7 @@ static int handle_ep0_setup(struct usba_udc *udc, struct usba_ep *ep, | |||
| 1249 | if (crq->wLength != cpu_to_le16(sizeof(status))) | 1249 | if (crq->wLength != cpu_to_le16(sizeof(status))) |
| 1250 | goto stall; | 1250 | goto stall; |
| 1251 | ep->state = DATA_STAGE_IN; | 1251 | ep->state = DATA_STAGE_IN; |
| 1252 | __raw_writew(status, ep->fifo); | 1252 | usba_io_writew(status, ep->fifo); |
| 1253 | usba_ep_writel(ep, SET_STA, USBA_TX_PK_RDY); | 1253 | usba_ep_writel(ep, SET_STA, USBA_TX_PK_RDY); |
| 1254 | break; | 1254 | break; |
| 1255 | } | 1255 | } |
diff --git a/drivers/usb/gadget/udc/atmel_usba_udc.h b/drivers/usb/gadget/udc/atmel_usba_udc.h index 085749a649e1..ea448a344767 100644 --- a/drivers/usb/gadget/udc/atmel_usba_udc.h +++ b/drivers/usb/gadget/udc/atmel_usba_udc.h | |||
| @@ -191,18 +191,28 @@ | |||
| 191 | | USBA_BF(name, value)) | 191 | | USBA_BF(name, value)) |
| 192 | 192 | ||
| 193 | /* Register access macros */ | 193 | /* Register access macros */ |
| 194 | #ifdef CONFIG_AVR32 | ||
| 195 | #define usba_io_readl __raw_readl | ||
| 196 | #define usba_io_writel __raw_writel | ||
| 197 | #define usba_io_writew __raw_writew | ||
| 198 | #else | ||
| 199 | #define usba_io_readl readl_relaxed | ||
| 200 | #define usba_io_writel writel_relaxed | ||
| 201 | #define usba_io_writew writew_relaxed | ||
| 202 | #endif | ||
| 203 | |||
| 194 | #define usba_readl(udc, reg) \ | 204 | #define usba_readl(udc, reg) \ |
| 195 | __raw_readl((udc)->regs + USBA_##reg) | 205 | usba_io_readl((udc)->regs + USBA_##reg) |
| 196 | #define usba_writel(udc, reg, value) \ | 206 | #define usba_writel(udc, reg, value) \ |
| 197 | __raw_writel((value), (udc)->regs + USBA_##reg) | 207 | usba_io_writel((value), (udc)->regs + USBA_##reg) |
| 198 | #define usba_ep_readl(ep, reg) \ | 208 | #define usba_ep_readl(ep, reg) \ |
| 199 | __raw_readl((ep)->ep_regs + USBA_EPT_##reg) | 209 | usba_io_readl((ep)->ep_regs + USBA_EPT_##reg) |
| 200 | #define usba_ep_writel(ep, reg, value) \ | 210 | #define usba_ep_writel(ep, reg, value) \ |
| 201 | __raw_writel((value), (ep)->ep_regs + USBA_EPT_##reg) | 211 | usba_io_writel((value), (ep)->ep_regs + USBA_EPT_##reg) |
| 202 | #define usba_dma_readl(ep, reg) \ | 212 | #define usba_dma_readl(ep, reg) \ |
| 203 | __raw_readl((ep)->dma_regs + USBA_DMA_##reg) | 213 | usba_io_readl((ep)->dma_regs + USBA_DMA_##reg) |
| 204 | #define usba_dma_writel(ep, reg, value) \ | 214 | #define usba_dma_writel(ep, reg, value) \ |
| 205 | __raw_writel((value), (ep)->dma_regs + USBA_DMA_##reg) | 215 | usba_io_writel((value), (ep)->dma_regs + USBA_DMA_##reg) |
| 206 | 216 | ||
| 207 | /* Calculate base address for a given endpoint or DMA controller */ | 217 | /* Calculate base address for a given endpoint or DMA controller */ |
| 208 | #define USBA_EPT_BASE(x) (0x100 + (x) * 0x20) | 218 | #define USBA_EPT_BASE(x) (0x100 + (x) * 0x20) |
