Skip to content
  • Roger Quadros's avatar
    usb: dwc3: core: Fix ULPI PHYs and prevent phy_get/ulpi_init during suspend/resume · 685a452c
    Roger Quadros authored
    commit 98112041 upstream.
    
    In order for ULPI PHYs to work, dwc3_phy_setup() and dwc3_ulpi_init()
    must be doene before dwc3_core_get_phy().
    
    commit 541768b0 ("usb: dwc3: core: Call dwc3_core_get_phy() before initializing phys")
    broke this.
    
    The other issue is that dwc3_core_get_phy() and dwc3_ulpi_init() should
    be called only once during the life cycle of the driver. However,
    as dwc3_core_init() is called during system suspend/resume it will
    result in multiple calls to dwc3_core_get_phy() and dwc3_ulpi_init()
    which is wrong.
    
    Fix this by moving dwc3_ulpi_init() out of dwc3_phy_setup()
    into dwc3_core_ulpi_init(). Use a flag 'ulpi_ready' to ensure that
    dwc3_core_ulpi_init() is called only once from dwc3_core_init().
    
    Use another flag 'phys_ready' to call dwc3_core_get_phy() only once from
    dwc3_core_init().
    
    Fixes: 541768b0 ("usb: dwc3: core: Call dwc3_core_get_phy() before initializing phys")
    Fixes: f54edb53
    
     ("usb: dwc3: core: initialize ULPI before trying to get the PHY")
    Cc: linux-stable <stable@vger.kernel.org> # >= v4.13
    Signed-off-by: default avatarRoger Quadros <rogerq@ti.com>
    Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
    Signed-off-by: default avatarSudip Mukherjee <sudipm.mukherjee@gmail.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    685a452c