• Miquel Raynal's avatar
    usb: host: xhci-plat: Prevent an abnormally restrictive PHY init skipping · eb6c2eb6
    Miquel Raynal authored
    In the past, USB PHY handling has been moved in the HCD core. Some
    host controller drivers needing more control of the PHYs, they have
    been granted the freedom to handle themselves the PHY states and to
    prevent the HCD core to do so in commit 4e88d4c0 ("usb: add a flag
    to skip PHY initialization to struct usb_hcd"). With this change, any
    USB host controller could set the hcd->skip_phy_initialization flag so
    that the HCD core would just skip the PHY initialization sequence.
    
    However, in the USB subsystem, there are currently two entirely
    different forms of PHY: one is called 'usb_phy' and is
    USB-subsystem-wide, while there is also the generic and kernel-wide
    'phy' from the (recent) generic PHY framework.
    
    When the commit above was introduced, both type of PHYs where handled
    by the HCD core.
    
    Later, commit bc40f534 ("USB: core: hcd: drop support for legacy
    phys") removed the support for the former type of PHYs in the HCD
    core. These 'usb_phy' are still present though, but managed from the
    controller drivers only. Hence, setting the
    hcd->skip_phy_initialization flag just because a 'usb_phy' is
    initialized by a controller driver is a non-sense.
    
    For instance on Armada CP110, a 'usb_phy' is there to enable the power
    supply to the USB host, while there is also a COMPHY block providing
    SERDES lanes configuration that is referenced as a PHY from the common
    PHY framework.
    
    Right now, users of the xhci-plat.c driver either use a 'usb_phy' only
    and do not care about the attempt of generic PHY initialization within
    the HCD core (as there is none); or they use a single 'phy' and the
    code flow does not pass through the block setting
    hcd->skip_phy_initialization anyway.
    
    While there is not users of both PHY types at the same time, drop this
    limitation from the xhci-plat.c driver. Note that the tegra driver
    probably has the same limitation and could definitely benefit from a
    similar change.
    
    Cc: Johan Hovold <johan@kernel.org>
    Cc: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
    Signed-off-by: default avatarMiquel Raynal <miquel.raynal@bootlin.com>
    Acked-by: default avatarMartin Blumenstingl <martin.blumenstingl@googlemail.com>
    Link: https://lore.kernel.org/r/20190731121150.2253-1-miquel.raynal@bootlin.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    eb6c2eb6
xhci-plat.c 11.4 KB