summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Warren <swarren@nvidia.com>2014-04-24 17:52:36 -0600
committerMarek Vasut <marex@denx.de>2014-04-30 10:30:57 +0200
commitf5c03006dd1794362a2be7136fed9e664bc1775b (patch)
treef214d46fdf485d4f82b7fd1719ee5bb7f8cd000b
parent672ad18c276e6c37e2e140294ec35ee96ae47d38 (diff)
downloadu-boot-imx-f5c03006dd1794362a2be7136fed9e664bc1775b.zip
u-boot-imx-f5c03006dd1794362a2be7136fed9e664bc1775b.tar.gz
u-boot-imx-f5c03006dd1794362a2be7136fed9e664bc1775b.tar.bz2
usb: ci_udc: Support larger packets
ci_ep_queue() currently only fills in the page0/page1 fields in the queue item. If the buffer is larger than 4KiB (unaligned) or 8KiB (page-aligned), then this prevents the HW from knowing where to write the balance of the data. Fix this by initializing all 5 pageN pointers, which allows up to 16KiB (potentially non-page-aligned) buffers. Signed-off-by: Stephen Warren <swarren@nvidia.com>
-rw-r--r--drivers/usb/gadget/ci_udc.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/usb/gadget/ci_udc.c b/drivers/usb/gadget/ci_udc.c
index 14b1e9b..815ce7b 100644
--- a/drivers/usb/gadget/ci_udc.c
+++ b/drivers/usb/gadget/ci_udc.c
@@ -350,6 +350,9 @@ static int ci_ep_queue(struct usb_ep *ep,
item->info = INFO_BYTES(len) | INFO_IOC | INFO_ACTIVE;
item->page0 = (uint32_t)ci_ep->b_buf;
item->page1 = ((uint32_t)ci_ep->b_buf & 0xfffff000) + 0x1000;
+ item->page2 = ((uint32_t)ci_ep->b_buf & 0xfffff000) + 0x2000;
+ item->page3 = ((uint32_t)ci_ep->b_buf & 0xfffff000) + 0x3000;
+ item->page4 = ((uint32_t)ci_ep->b_buf & 0xfffff000) + 0x4000;
ci_flush_qtd(num);
head->next = (unsigned) item;