[coreboot-gerrit] Patch merged into coreboot/master: d13e2c4 libpayload: usb: Refactor USB enumeration to fix SuperSpeed devices

gerrit at coreboot.org gerrit at coreboot.org
Thu Sep 4 01:59:18 CEST 2014


the following patch was just integrated into master:
commit d13e2c4ab769e526e6b2c0ae568bd84b34688c58
Author: Julius Werner <jwerner at chromium.org>
Date:   Tue Sep 17 22:16:04 2013 -0700

    libpayload: usb: Refactor USB enumeration to fix SuperSpeed devices
    
    This patch represents a major overhaul of the USB enumeration code in
    order to make it cleaner and much more robust to weird or malicious
    devices. The main improvement is that it correctly parses the USB
    descriptors even if there are unknown descriptors interspersed within,
    which is perfectly legal and in particular present on all SuperSpeed
    devices (due to the SuperSpeed Endpoint Companion Descriptor).
    
    In addition, it gets rid of the really whacky and special cased
    get_descriptor() function, which would read every descriptor twice
    whether it made sense or not. The new code makes the callers allocate
    descriptor memory and only read stuff twice when it's really necessary
    (i.e. the device and configuration descriptors).
    
    Finally, it also moves some more responsibilities into the
    controller-specific set_address() function in order to make sure things
    are initialized at the same stage for all controllers. In the new model
    it initializes the device entry (which zeroes the endpoint array), sets
    up endpoint 0 (including MPS), sets the device address and finally
    returns the whole usbdev_t structure with that address correctly set.
    
    Note that this should make SuperSpeed devices work, but SuperSpeed hubs
    are a wholly different story and would require a custom hub driver
    (since the hub descriptor and port status formats are different for USB
    3.0 ports, and the whole issue about the same hub showing up as two
    different devices on two different ports might present additional
    challenges). The stack currently just issues a warning and refuses to
    initialize this part of the hub, which means that 3.0 devices connected
    through a 3.0 hub may not work correctly.
    
    Change-Id: Ie0b82dca23b7a750658ccc1a85f9daae5fbc20e1
    Signed-off-by: Julius Werner <jwerner at chromium.org>
    Reviewed-on: https://chromium-review.googlesource.com/170666
    Reviewed-by: Kees Cook <keescook at chromium.org>
    (cherry picked from commit ecec80e062f7efe32a9a17479dcf8cb678a4a98b)
    Signed-off-by: Isaac Christensen <isaac.christensen at se-eng.com>
    Reviewed-on: http://review.coreboot.org/6780
    Tested-by: build bot (Jenkins)


See http://review.coreboot.org/6780 for details.

-gerrit



More information about the coreboot-gerrit mailing list