usb: xhci: Add missing cache flush in the scratchpad array initialization 18/231518/7
authorSylwester Nawrocki <s.nawrocki@samsung.com>
Fri, 24 Apr 2020 16:50:03 +0000 (18:50 +0200)
committerSeung-Woo Kim <sw0312.kim@samsung.com>
Sat, 23 May 2020 05:38:32 +0000 (14:38 +0900)
In current code there is no cache flush after initializing the scratchpad
buffer array with the scratchpad buffer pointers. This leads to a failure
of the "slot enable" command on the rpi4 board (Broadcom STB PCIe
controller + VL805 USB hub) - the very first TRB transfer on the command
ring fails and there is a timeout while waiting for the command completion
event. After adding the missing cache flush everything seems to be working
as expected.

Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Change-Id: I0a8a482bf452230edd754509b2f1bcdb6b1ea090

drivers/usb/host/xhci-mem.c

index 84c2c33..7baad5d 100644 (file)
@@ -392,6 +392,9 @@ static int xhci_scratchpad_alloc(struct xhci_ctrl *ctrl)
                scratchpad->sp_array[i] = cpu_to_le64(ptr);
        }
 
+       xhci_flush_cache((uintptr_t)scratchpad->sp_array,
+                        sizeof(u64) * num_sp);
+
        return 0;
 
 fail_sp3: