+Matthias, just so you're aware. On Fri, 2021-01-15 at 11:33 +0100, Stefan Roese wrote: > On 15.01.21 11:27, Nicolas Saenz Julienne wrote: > > On Fri, 2021-01-15 at 08:52 +0100, Stefan Roese 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 <s...@denx.de> > > > Cc: Aaron Williams <awilli...@marvell.com> > > > Cc: Chandrakala Chavva <ccha...@marvell.com> > > > Cc: Ran Wang <ran.wan...@nxp.com> > > > Cc: Nicolas Saenz Julienne <nsaenzjulie...@suse.de> > > > Cc: Marek Vasut <ma...@denx.de> > > > Cc: Bin Meng <bmeng...@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)) { > > > available_length -= > > > > > > (int)EVENT_TRB_LEN(le32_to_cpu(event->trans_event.transfer_len)); > > > xhci_acknowledge_event(ctrl); > > > > FWIW I also addressed this in my Rpi400/CM4 enablement series: > > https://lists.denx.de/pipermail/u-boot/2021-January/437150.html > > Yes, thanks. I've seen your patch and also looked into it while > debugging this issue on my MIPS platform this morning. > > Actually I would prefer my fix, as it uses virt_to_phys() and not the > other way around. Currently only virt_to_phys() is used in the USB code > and not phys_to_virt(), which does not seem to work correctly on my > platform BTW (as I discovered this morning).
Fair enough, I'll rebase my series on top of this once it's picked :). Regards, Nicolas
signature.asc
Description: This is a digitally signed message part