lkml.org 
[lkml]   [2019]   [Dec]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v4 2/2] usb: overridable hub bInterval by device node
    On Fri, Dec 06, 2019 at 11:57:30AM +0800, Ikjoon Jang wrote:
    > On Thu, Dec 5, 2019 at 10:26 PM Johan Hovold <johan@kernel.org> wrote:
    > >
    > > On Thu, Dec 05, 2019 at 03:32:38PM +0800, Ikjoon Jang wrote:
    > > > On Wed, Dec 4, 2019 at 3:55 PM Johan Hovold <johan@kernel.org> wrote:
    > >
    > > > > But related to my question above, why do you need to do this during
    > > > > enumeration? Why not just set the lower interval value in the hub
    > > > > driver?
    > > >
    > > > Because I want device tree's bInterval to be checked against the same rules
    > > > defined in usb_parse_endpoint(). e.g. although hardware says its maximum
    > > > is 255, but the practical limit is still 0 to 16, so the code can
    > > > print warnings when bInterval from device node is too weird.
    > >
    > > But that could be handled refactoring the code in question or similar.
    >
    > Yes, that should be worked. I can't exactly figure out how to refactor
    > the code for now, but maybe parsed endpoint descriptors are being
    > checked with default hard wired bInterval value and after that
    > an overridden value should be checked again.
    >
    > Actually I don't care about the details of software policies. I just want
    > all devices to be handled in the same manner without any further
    > special treatments.

    I'd say you're indeed trying to give a specific device special
    treatment. ;)

    > > The fundamental problem here is that you're using devicetree, which is
    > > supposed to only describe the hardware, to encode policy which should be
    > > deferred to user space.
    >
    > The hub hardware has a default bInterval inside which is actually
    > adjustable. So I can think setting bInterval is to describe the hardware
    > rather than policy.

    No, the USB spec says bInterval is a maximum requested value and that
    the host is free to poll more often. And that's policy.

    > > So I think you need to figure out an interface that allows user space to
    > > set the polling interval for any hub at runtime instead.
    >
    > Changing the interval at runtime is an another way to solve the
    > power consumption problem, but it's not so easy. At least xhci needs
    > to restart an endpoint and no devices are changing the interval after
    > enumeration stage.

    The usb-hid driver actually supports configuring the polling rate
    for devices like mice and keyboards after enumeration (through a module
    parameter, but still).

    Unfortunately, the xhci driver does not yet support this and always uses
    the device maximum bInterval. A bug report for this was filed many years
    ago, perhaps it's time to address that (adding Mathias on CC):

    https://bugzilla.kernel.org/show_bug.cgi?id=82571

    Johan

    \
     
     \ /
      Last update: 2019-12-06 16:27    [W:2.963 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site