usb: xhci: Fix compare to use physical addresses in xhci_bulk_tx() 74/267874/2
authorStefan Roese <sr@denx.de>
Fri, 15 Jan 2021 07:52:56 +0000 (08:52 +0100)
committerSeung-Woo Kim <sw0312.kim@samsung.com>
Mon, 13 Dec 2021 01:44:05 +0000 (01:44 +0000)
Testing with v2021.01 on MIPS Octeon has shown, that the latest patch
for the "short packet event trb handling" did introduce a bug on
platforms with virtual address != physical address. This patch fixes
this issue by using the correct address types in the compare (both
physical in this case).

Signed-off-by: Stefan Roese <sr@denx.de>
Cc: Aaron Williams <awilliams@marvell.com>
Cc: Chandrakala Chavva <cchavva@marvell.com>
Cc: Ran Wang <ran.wang_1@nxp.com>
Cc: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
Cc: Marek Vasut <marex@denx.de>
Cc: Bin Meng <bmeng.cn@gmail.com>
[backport of mainline commit cec804251d4b4765bbcaa207f4c931fef350585e]
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Change-Id: Ia5cd6ce705e4b5f330a2bdae70efa0546562df51

drivers/usb/host/xhci-ring.c

index d0308f9..ee7f58e 100644 (file)
@@ -727,8 +727,8 @@ again:
                return -ETIMEDOUT;
        }
 
-       if ((uintptr_t)(le64_to_cpu(event->trans_event.buffer))
-                       != (uintptr_t)last_transfer_trb_addr) {
+       if ((uintptr_t)(le64_to_cpu(event->trans_event.buffer)) !=
+           (uintptr_t)virt_to_phys(last_transfer_trb_addr)) {
                available_length -=
                        (int)EVENT_TRB_LEN(le32_to_cpu(event->trans_event.transfer_len));
                xhci_acknowledge_event(ctrl);