25 Jan, 2013

1 commit


20 May, 2011

3 commits

  • This patch adds support for universal host controllers that use
    big endian descriptors. Support for BE descriptors requires a non-PCI
    host controller. For kernels with PCI-only UHCI there should be no
    change in behaviour.

    This patch tries to replicate the technique used to support BE descriptors
    in the EHCI HCD. Parts added to uhci-hcd.h are basically copy'n'paste from
    ehci.h.

    Signed-off-by: Jan Andersson
    Acked-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Jan Andersson
     
  • This patch (as1462) updates the special accessor functions defined in
    uhci-hcd.h. Rather than using a full compiler barrier, all we really
    need is the ACCESS_ONCE() mechanism, because the idea is to force the
    compiler to store a fixed copy of a possibly changing value.

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     
  • This patch adds support for big endian mmio to the UHCI HCD. Big endian
    mmio is supported by adding a flag bit to the UHCI HCD replicating the
    solution used in the EHCI HCD.

    When adding big endian support this patch also adds a check to see if we
    need to support HCs with PCI I/O registers when we support HCs with MMIO.

    This patch also adds 'const' to the register access functions' uhci_hcd
    argument.

    Signed-off-by: Jan Andersson
    Acked-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Jan Andersson
     

07 May, 2011

4 commits

  • This patch is part of a series that extend the UHCI HCD to support
    non-PCI host controllers.

    This patch also extends the uhci_{read,write}* functions to allow accesses
    to registers not mapped into PCI I/O space. This extension also includes
    the addition of a void __iomem pointer to the uhci structure.

    A new Kconfig option is added to signal that the system has a non-PCI HC.
    If this Kconfig option is set, uhci-hcd.c will include generic reset functions
    for systems that do not make use of keyboard and mouse legacy support. PCI
    controllers will still always use the reset functions from pci-quirks

    This patch is followed by a patch that adds bus glue for the first non-PCI
    UHCI HC.

    Signed-off-by: Jan Andersson
    Acked-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Jan Andersson
     
  • This patch is part of a series that extend the UHCI HCD to support
    non-PCI controllers.

    This patch replaces in{b,w,l} and out{b,wl} with calls to local inline
    functions. This is done so that the register access functions can be
    extended to support register areas not mapped in PCI I/O space.

    Signed-off-by: Jan Andersson
    Acked-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Jan Andersson
     
  • This patch is part of a series that extend the UHCI HCD to support
    non-PCI controllers.

    This patch changes calls to uhci_reset_hc, uhci_check_and_reset_hc,
    configure_hc, resume_detect_interrupts_are_broken and
    global_suspend_mode_is_broken so that they are made through pointers
    in the uhci hcd struct. This will allow these functions to be replaced
    with bus/arch specific functions.

    Signed-off-by: Jan Andersson
    Acked-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Jan Andersson
     
  • This patch is part of a series that extend the UHCI HCD to support
    non-PCI host controllers.

    uhci-hub.c contained two PCI vendor checks for silicon quirks. Move
    these checks into uhci-hcd.c and use bits in uhci_hcd structure to
    mark that we need to use the quirks.

    This patch is followed by other patches that will remove PCI
    dependencies from uhci-hcd.c as well.

    Signed-off-by: Jan Andersson
    Acked-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Jan Andersson
     

11 Aug, 2010

1 commit

  • This patch (as1396) adds code to uhci-hcd to support the
    vendor-specific wakeup settings found in Intel's ICHx hardware. A
    couple of unnecessary memory barriers are removed. And the root hub
    isn't put back into the "suspended" state if power was lost during a
    system sleep -- there's not much point in doing so because the root hub
    will be resumed shortly.

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     

25 Mar, 2009

1 commit


03 May, 2008

1 commit

  • This patch (as1084b) fixes the way uhci-hcd handles polling and
    remote wakeups for its root hubs. When remote wakeup is disabled,
    neither interrupts nor polling should be enabled during a root-hub
    suspend. Likewise, if interrupts are enabled during suspend then
    polling isn't needed.

    Furthermore the EGSM (Enter Global Suspend Mode) bit shouldn't be set
    in the Command register unless remote wakeup is enabled. Apparently
    some controllers will issue a remote-wakeup interrupt whenever EGSM
    is on, even if Resume-Detect interrupts are supposedly disabled.

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     

13 Oct, 2007

2 commits

  • This patch (as979) removes the last vestiges of urb->status from the
    host controller drivers and the root-hub emulator. Now the field
    doesn't get set until just before the URB's completion routine is
    called.

    Signed-off-by: Alan Stern
    CC: David Brownell
    CC: Olav Kongas
    CC: Yoshihiro Shimoda
    CC: Tony Olech
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     
  • This patch (968) changes the way uhci-hcd reports status for
    Isochronous URBs. Until now urb->status has been set to the last
    detected error code. But other HCDs don't do this; they leave the
    status set to 0 and report errors only in the individual iso packet
    descriptors. So this patch removes the extra computation and makes
    uhci-hcd behave like the others.

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     

24 Feb, 2007

2 commits

  • This patch (as856) attempts to improve the performance of uhci-hcd by
    removing the asynchronous skeleton Queue Headers. They don't contain
    any useful information but the controller has to read through them at
    least once every millisecond, incurring a non-zero DMA overhead.

    Now all the asynchronous queues are combined, along with the period-1
    interrupt queue, into a single list with a single skeleton QH. The
    start of the low-speed control, full-speed control, and bulk sublists
    is determined by linear search. Since there should rarely be more
    than a couple of QHs in the list, the searches should incur a much
    smaller total load than keeping the skeleton QHs.

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     
  • This patch (as855) adds some convenience macros to uhci-hcd, to help
    simplify the code for computing hardware DMA pointers.

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     

08 Feb, 2007

1 commit


22 Jun, 2006

9 commits

  • This patch (as707) improves the FSBR operation in uhci-hcd by turning it
    off more quickly when it isn't needed. FSBR puts a noticeable load on a
    computer's PCI bus, so it should be disabled as soon as possible when it
    isn't in use. The patch leaves it running for only 10 ms after the last
    URB stops using it, on the theory that this should be long enough for a
    driver to submit another URB if it wants keep FSBR going.

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     
  • This patch (as706) removes the private hc_inaccessible flag from
    uhci-hcd. It's not needed because it conveys exactly the same
    information as the generic HCD_FLAG_HW_ACCESSIBLE bit.

    In its place goes a new flag recording whether the controller is dead.
    The new code allows a complete device reset to resurrect a dead
    controller (although usbcore doesn't yet implement such a facility).

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     
  • This patch (as690) does the same thing for ISO TDs as as680 did for
    non-ISO TDs: free them as they are used rather than all at once when an
    URB is complete. At the same time it fixes a minor buglet (I'm not
    aware of it ever affecting anyone): An ISO TD should be retired when its
    frame is over, regardless of whether or not the hardware has marked it
    inactive.

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     
  • This patch (as689) stores the period for periodic transfers (interrupt
    and ISO) in the queue header. This is necessary for proper bandwidth
    tracking (not yet implemented). It also makes the scheduling of ISO
    transfers a bit more rigorous, with checks for out-of-bounds frame
    numbers.

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     
  • This patch (as687) changes uhci-hcd to keep track of frame numbers as
    full-sized integers rather than 11-bit values. This makes them a lot
    easier to handle and makes it possible to schedule beyond a 2-second
    window, should anyone ever want to do so.

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     
  • This patch (as683) re-implements Full-Speed Bandwidth Reclamation (FSBR)
    properly. It keeps track of which endpoint queues have advanced, and
    when none have advanced for a sufficiently long time, FSBR is turned
    off. The next TD on each of the non-moving queues is modified to
    generate an interrupt on completion, so that FSBR can be re-enabled as
    soon as the hardware starts to make some progress.

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     
  • This patch (as682) gets rid of the TD-removal list in uhci-hcd. It is
    no longer needed because now TDs are not freed until we know the
    hardware isn't using them. It also simplifies the code for adding and
    removing TDs to/from URBs.

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     
  • This patch (as680) frees non-isochronous TDs as they are used, rather
    than all at once when an URB is complete. Although not a terribly
    important change in itself, it opens the door to a later enhancement
    that will reduce storage requirements by allocating only a limited
    number of TDs at any time for each endpoint queue.

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     
  • This patch (as675) simplifies uhci-hcd slightly by storing each endpoint's
    type in the corresponding Queue Header structure.

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     

15 Apr, 2006

1 commit

  • Someone recently posted a bug report where it turned out that uhci-hcd
    was disagreeing with the UHCI controller over whether or not a port was
    suspended: The driver thought it wasn't and the hardware thought it was.
    This patch (as665) fixes the problem and simplifies the driver by
    removing the internal state-tracking completely. Now the driver just
    asks the hardware whether a port is suspended.

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     

21 Mar, 2006

4 commits

  • This patch (as626) makes some improvements to the debugging code in
    uhci-hcd. The main change is that now the code won't get compiled if
    CONFIG_USB_DEBUG isn't set. But there are other changes too, like
    adding a missing .owner field and printing a debugging dump if the
    controller dies.

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     
  • As part of reorienting uhci-hcd away from URBs and toward endpoint
    queues, this patch (as625) eliminates the driver's main list of URBs.
    The list wsa used mainly in checking for URB completions; now the driver
    goes through the list of active endpoints and checks the members of the
    queues.

    As a side effect, I had to remove the code that looks for FSBR timeouts.
    For now, FSBR will remain on so long as any URBs on a full-speed control
    or bulk queue request it, even if the queue isn't advancing. A later
    patch can add more intelligent handling. This isn't a huge drawback;
    it's pretty rare for an URB to get stuck for more than a fraction of a
    second. (And it will help the people trying to use those insane HP USB
    devices.)

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     
  • This patch (as624) fixes a hardware race in uhci-hcd by adding a dummy
    TD to the end of each endpoint's queue. Without the dummy the host
    controller will effectively turn off the queue when it reaches the end,
    which happens asynchronously. This leads to a potential problem when
    new transfer descriptors are added to the end of the queue; they may
    never get used.

    With a dummy TD present the controller never turns off the queue;
    instead it just stops at the dummy and leaves the queue on but inactive.
    When new TDs are added to the end of the queue, the first new one gets
    written over the dummy. Thus there's never any question about whether
    the queue is running or needs to be restarted.

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     
  • This patch (as623) changes the uhci-hcd driver to make it use one QH per
    device endpoint, instead of a QH per URB as it does now. Numerous areas
    of the code are affected by this. For example, the distinction between
    "queued" URBs and non-"queued" URBs no longer exists; all URBs belong to
    a queue and some just happen to be at the queue's head.

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     

05 Jan, 2006

2 commits

  • This patch (as615b) edits a large number of comments in the uhci-hcd code,
    mainly removing excess apostrophes.

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     
  • This patch (as616) changed the uhci_explen macro in uhci-hcd.h so that
    it now accepts the desired length, rather than length - 1 with special
    handling for 0. This also fixes a minor bug that would show up only
    when a driver submits a 0-length bulk URB.

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     

29 Oct, 2005

3 commits

  • This patch (as570) changes some comments in the uhci-hcd header file and
    removes an unused declaration (something I forgot to erase in an earlier
    patch).

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    drivers/usb/host/uhci-hcd.h | 91 +++++++++++++++++++++++---------------------
    1 file changed, 49 insertions(+), 42 deletions(-)

    Alan Stern
     
  • This patch (as563) splits the physical and logical framelist arrays in
    uhci-hcd into two separate pieces. This will allow slightly better memory
    utilization, since each piece is no larger than a single page whereas
    before the whole thing was a little bigger than two pages. It also allows
    the logical array to be allocated in non-DMA-coherent memory.

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     
  • This patch (as562) removes from the uhci-hcd driver a few unused fields
    and some unnecessary tests against NULL and assignments to NULL. In fact
    it wasn't until fairly recently that the tests became unnecessary.
    Before last winter it was possible that the driver's stop() routine would
    get called even if the start() routine returned an error, but now that
    can't happen. Hence there's no longer any need to check for partial
    initialization.

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     

13 Sep, 2005

1 commit

  • This patch (as558) removes from the UHCI driver a kernel timer used for
    checking Full Speed Bandwidth Reclamation (FSBR). The checking can be
    done during normal root-hub polling; it doesn't need a separate timer.

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     

28 Jun, 2005

4 commits

  • This patch simplifies the uhci-hcd driver by removing the device pointer
    currently stored in the QH and TD structures. Those pointers weren't
    being used for anything other than to increment the device's reference
    count, which is unnecessary since the device is used only when an URB
    completes, and outstanding URBs take their own reference to the device.
    As a useful side effect, this change means that uhci-hcd no longer needs
    to have the root-hub device available in the start routine.

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     
  • This patch, which has as478b as a prerequisite, enables the uhci-hcd
    driver to take advantage of root-hub IRQs rather than polling during the
    time it is suspended. (Unfortunately the hardware doesn't support
    port-change interrupts while the controller is running.) It also turns
    off the driver's private timer while the controller is suspended, as it
    isn't needed then. The combined elimination of polling interrupts and
    timer interrupts ought to be enough to allow some systems to save a
    noticeable amount of power while they are otherwise idle.

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     
  • This patch implements (finally!) separate suspend and resume routines
    for the root hub and the controller in the UHCI driver. It also
    changes the sequence used to reset the controller during initial
    probing, so as to preserve the existing state during a Resume-From-Disk.
    (This new sequence is what should be used in the PCI Quirks code for
    early USB handoffs, incidentally.) Lastly it adds a notion of the
    controller being "inaccessible" while in a PCI low-power state, when
    normal I/O operations shouldn't be allowed.

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     
  • This patch starts making some serious changes to the UHCI driver.
    There's a set of private states for the root hub, and the internal
    routines for suspending and resuming work completely differently, with
    transitions based on the new states. Now the driver distinguishes
    between a privately auto-stopped state and a publicly suspended state,
    and it will properly suspend controllers with broken resume-detect
    interrupts instead of resetting them.

    Signed-off-by: Alan Stern
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern