[PATCH] usb: xhci: Fix compare to use physical addresses in xhci_bulk_tx()

Stefan Roese sr at denx.de
Fri Jan 15 11:22:03 CET 2021


Hi Bin,

On 15.01.21 09:16, Bin Meng wrote:
> Hi Stefan,
> 
> On Fri, Jan 15, 2021 at 3:53 PM Stefan Roese <sr at denx.de> wrote:
>>
>> 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 at denx.de>
>> Cc: Aaron Williams <awilliams at marvell.com>
>> Cc: Chandrakala Chavva <cchavva at marvell.com>
>> Cc: Ran Wang <ran.wang_1 at nxp.com>
>> Cc: Nicolas Saenz Julienne <nsaenzjulienne at suse.de>
>> Cc: Marek Vasut <marex at denx.de>
>> Cc: Bin Meng <bmeng.cn at gmail.com>
>> ---
>>   drivers/usb/host/xhci-ring.c | 4 ++--
>>   1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
>> index d708fc928b..d6c47d579b 100644
>> --- a/drivers/usb/host/xhci-ring.c
>> +++ b/drivers/usb/host/xhci-ring.c
>> @@ -723,8 +723,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)) {
> 
> Is last_transfer_trb_addr virtual address? I thought queue_trb()
> returns physical address?

No, queue_trb() returns a virtual address accessible from the CPU.

Thanks,
Stefan


More information about the U-Boot mailing list