Re: [RFC 1/1] usb: host: xhci-plat: add enable XHCI-AVOID-BEI quirk by dts

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Mathias

Do you have a better idea about this question?

Thanks,

Jos Wang

On Wed, Jun 12, 2024 at 10:23 PM joswang <joswang1221@xxxxxxxxx> wrote:
>
> On Tue, Jun 11, 2024 at 11:00 PM Mathias Nyman
> <mathias.nyman@xxxxxxxxxxxxxxx> wrote:
> >
> > On 11.6.2024 17.45, joswang wrote:
> > > On Tue, Jun 11, 2024 at 6:01 PM Mathias Nyman
> > > <mathias.nyman@xxxxxxxxxxxxxxx> wrote:
> > >>
> > >> On 6.6.2024 17.08, joswang wrote:
> > >>> On Wed, Jun 5, 2024 at 6:31 PM Mathias Nyman
> > >>> <mathias.nyman@xxxxxxxxxxxxxxx> wrote:
> > >> ...
> > >>>>
> > >>>> I was thinking of turning XHCI_AVOID_BEI behavior into the new default, so no
> > >>>> quirk flag would be needed:
> > >>>>
> > >>>> Currently without the quirk flag:
> > >>>>
> > >>>> - ISOC TRBs trigger interrupt if TRB is the last in the TD
> > >>>>
> > >>>> Currently with XHCI_AVOID_BEI quirk flag:
> > >>>>
> > >>>> - ISOC TRBs trigger interrupt if TRB is the last in the TD
> > >>>> - Interrupt is additionally triggered every 32 isoc TRB (initially).
> > >>>> - if more than 128 events are processed in one interrupt then the
> > >>>>      32 is halved, and we trigger an interrupts every 16th isoc TRB, and so
> > >>>>      on, 16 -> 8...
> > >>>>
> > >>>> I would remove the quirk flag, and make all controllers interrupt
> > >>>> behave as if it was set. i.e. interrupt at least every 32 isoc TRB
> > >>>
> > >>> Thank you for your detailed analysis.
> > >>> Excuse me, I have a question, do you mean to set "Currently with
> > >>> XHCI_AVOID_BEI quirk flag" as the default behavior?
> > >>
> > >> Yes, unless it causes some issues or there are strong objections
> > >>
> > >>>>
> > >>>> Is there an actual real world case where interrupting every 32nd ISOC TRB is
> > >>>> too often?
> > >>>
> > >>> I mean that if the XHCI_AVOID_BEI quirk flag is set, an interrupt will
> > >>> be triggered every 8 TRBs, which makes the interrupts seem to be quite
> > >>> frequent.
> > >>> Thanks
> > >>> Jos
> > >>>
> > >>
> > >> It should start with interrupting every 32nd isoc TD, not 8th
> > >>
> > >> #define AVOID_BEI_INTERVAL_MAX   32
> > >>
> > >> ir->isoc_bei_interval = AVOID_BEI_INTERVAL_MAX;
> > >>
> > >> Thanks
> > >> Mathias
> > >
> > > As you mentioned,if more than 128 events are processed in one
> > > interrupt then the 32 is halved, and we trigger an interrupts every
> > > 16th isoc TRB, and so on, 16 -> 8...
> > > xhci_handle_events()
> > >      ......
> > >      if (event_loop++ > TRBS_PER_SEGMENT / 2) {
> > >           if (ir->isoc_bei_interval > AVOID_BEI_INTERVAL_MIN)
> > >                ir->isoc_bei_interval = ir->isoc_bei_interval / 2;
> > >      }
> > >      .......
> >
> > Yes, and to me this seems reasonable .
> > If there are over 128 events per interrupt then we should interrupt more often.
> >
> > Would this work as the default for the Synopsys hosts you are working with?
> >
> > Thanks
> > Mathias
>
> Without enabling XHCI_AVOID_BEI quirk, that is, triggering an
> interrupt once for every 32TRB:
> For some USB cameras (such as high-resolution cameras, etc.), the data
> volume of one frame is relatively large, and the host controller will
> frequently trigger interrupts during data transmission. For some SOC
> platforms (such as rockchip platforms, which also use Synopsys USB IP)
> with poor performance, it is possible that the CPU cannot respond to
> interrupts in time, resulting in frame loss.
> Therefore, I think that using XHCI_AVOID_BEI quirk by default may
> aggravate the above problem. Please help evaluate, thank you.
>
> Thanks,
> Jos Wang





[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux