summaryrefslogtreecommitdiff
path: root/drivers/usb/gadget
diff options
context:
space:
mode:
authorStephen Warren <swarren@nvidia.com>2014-07-01 17:41:13 (GMT)
committerMarek Vasut <marex@denx.de>2014-07-02 13:45:38 (GMT)
commitd7beeb9358a93e2dfd01e0ab5ff4317ce106c4d7 (patch)
treed478223bf350558b9dcc5330e8451595acc191a0 /drivers/usb/gadget
parentafb8e71caea6784e8c3ff18cab7f27c46511878a (diff)
downloadu-boot-d7beeb9358a93e2dfd01e0ab5ff4317ce106c4d7.tar.xz
usb: ci_udc: fix ci_flush_{qh,qtd} calls in ci_udc_probe()
ci_udc_probe() initializes a pair of QHs and QTDs for each EP. After each pair has been initialized, the pair is cache-flushed. The conversion from QH/QTD index [0..2*NUM_END_POINTS) to EP index [0..NUM_ENDPOINTS] is incorrect; it simply subtracts 1 (which yields the QH/QTD index of the first entry in the pair) rather than dividing by two (which scales the range). Fix this. On my system, this avoids cache debug prints due to requests to flush unaligned ranges. This is caused because the flush calls happen before the items[] array entries are initialized for all but EP0. Signed-off-by: Stephen Warren <swarren@nvidia.com>
Diffstat (limited to 'drivers/usb/gadget')
-rw-r--r--drivers/usb/gadget/ci_udc.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/usb/gadget/ci_udc.c b/drivers/usb/gadget/ci_udc.c
index a6433e8..8ba6048 100644
--- a/drivers/usb/gadget/ci_udc.c
+++ b/drivers/usb/gadget/ci_udc.c
@@ -834,8 +834,8 @@ static int ci_udc_probe(void)
controller.items[i] = (struct ept_queue_item *)imem;
if (i & 1) {
- ci_flush_qh(i - 1);
- ci_flush_qtd(i - 1);
+ ci_flush_qh(i / 2);
+ ci_flush_qtd(i / 2);
}
}