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

Nicolas Saenz Julienne nsaenzjulienne at suse.de
Fri Jan 15 12:01:12 CET 2021


+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 <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)) {
> > >   		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

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: This is a digitally signed message part
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20210115/651a7a00/attachment.sig>


More information about the U-Boot mailing list