• J
    usb: phy: tegra: Fix phy suspend for UDC · 203f44c4
    Jon Hunter 提交于
    Commit dfebb5f4 ("usb: chipidea: Add support for Tegra20/30/114/124")
    added UDC support for Tegra but with UDC support enabled, is was found
    that Tegra30, Tegra114 and Tegra124 would hang on entry to suspend.
    
    The hang occurred during the suspend of the USB PHY when the Tegra PHY
    driver attempted to disable the PHY clock. The problem is that before
    the Tegra PHY driver is suspended, the chipidea driver already disabled
    the PHY clock and when the Tegra PHY driver suspended, it could not read
    DEVLC register and caused the device to hang.
    
    The Tegra USB PHY driver is used by both the Tegra EHCI driver and now
    the chipidea UDC driver and so simply removing the disabling of the PHY
    clock from the USB PHY driver would not work for the Tegra EHCI driver.
    Fortunately, the status of the USB PHY clock can be read from the
    USB_SUSP_CTRL register and therefore, to workaround this issue, simply
    poll the register prior to disabling the clock in USB PHY driver to see
    if clock gating has already been initiated. Please note that it can take
    a few uS for the clock to disable and so simply reading this status
    register once on entry is not sufficient.
    
    Similarly when turning on the PHY clock, it is possible that the clock
    is already enabled or in the process of being enabled, and so check for
    this when enabling the PHY.
    
    Please note that no issues are seen with Tegra20 because it has a slightly
    different PHY to Tegra30/114/124.
    
    Fixes: dfebb5f4 ("usb: chipidea: Add support for Tegra20/30/114/124")
    Reviewed-by: NDmitry Osipenko <digetx@gmail.com>
    Tested-by: NDmitry Osipenko <digetx@gmail.com>
    Acked-by: NThierry Reding <treding@nvidia.com>
    Signed-off-by: NJon Hunter <jonathanh@nvidia.com>
    Signed-off-by: NFelipe Balbi <felipe.balbi@linux.intel.com>
    203f44c4
phy-tegra-usb.c 28.5 KB