]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
phy: usb: Toggle the PHY power during init
authorJustin Chen <justin.chen@broadcom.com>
Thu, 24 Oct 2024 21:35:40 +0000 (14:35 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 1 Feb 2025 17:22:24 +0000 (18:22 +0100)
[ Upstream commit 0a92ea87bdd6f77ca4e17fe19649882cf5209edd ]

When bringing up the PHY, it might be in a bad state if left powered.
One case is we lose the PLL lock if the PLL is gated while the PHY
is powered. Toggle the PHY power so we can start from a known state.

Fixes: 4e5b9c9a73b3 ("phy: usb: Add support for new Synopsys USB controller on the 7216")
Signed-off-by: Justin Chen <justin.chen@broadcom.com>
Acked-by: Florian Fainelli <florian.fainelli@broadcom.com>
Link: https://lore.kernel.org/r/20241024213540.1059412-1-justin.chen@broadcom.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/phy/broadcom/phy-brcm-usb-init-synopsys.c

index d2524b70ea16101cf9463153b48226896922230e..fa54da35719f70905ff29d037c54052c7d1e202f 100644 (file)
@@ -309,6 +309,12 @@ static void usb_init_common_7216(struct brcm_usb_init_params *params)
        void __iomem *ctrl = params->regs[BRCM_REGS_CTRL];
 
        USB_CTRL_UNSET(ctrl, USB_PM, XHC_S2_CLK_SWITCH_EN);
+
+       /*
+        * The PHY might be in a bad state if it is already powered
+        * up. Toggle the power just in case.
+        */
+       USB_CTRL_SET(ctrl, USB_PM, USB_PWRDN);
        USB_CTRL_UNSET(ctrl, USB_PM, USB_PWRDN);
 
        /* 1 millisecond - for USB clocks to settle down */