• Tuomas Tynkkynen's avatar
    USB: EHCI: tegra: Fix probe order issue leading to broken USB · a47cc24c
    Tuomas Tynkkynen authored
    
    
    The Tegra USB complex has a particularly annoying misdesign: some of the
    UTMI pad configuration registers are global for all the 3 USB controllers
    on the chip, but those registers are located in the first controller's
    register space and will be cleared when the reset to the first
    controller is asserted. Currently, this means that if the 1st controller
    were to finish probing after the 2nd or 3rd controller, USB would not
    work at all.
    
    Fix this situation by always resetting the 1st controller before doing
    any other setup to any of the controllers, and then never ever reset the
    first controller again. As the UTMI registers are related to the PHY,
    the PHY driver should probably reset the Tegra controllers instead,
    but since old device trees only have reset phandles in the EHCI nodes,
    do it here, which means a bit of device tree groveling. Those old DTs
    also won't get the reset fix from this commit, so we'll dev_warn() them,
    but the driver will still keep probing successfully.
    Signed-off-by: default avatarTuomas Tynkkynen <ttynkkynen@nvidia.com>
    Acked-by: default avatarAlan Stern <stern@rowland.harvard.edu>
    Acked-by: default avatarMark Rutland <mark.rutland@arm.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    a47cc24c
ehci-tegra.c 16.4 KB