linux/drivers/phy
Devarsh Thakkar 4d1422bfef phy: cadence: cdns-dphy: Fix PLL lock and O_CMN_READY polling
[ Upstream commit 284fb19a3f ]

PLL lockup and O_CMN_READY assertion can only happen after common state
machine gets enabled by programming DPHY_CMN_SSM register, but driver was
polling them before the common state machine was enabled which is
incorrect.  This is as per the DPHY initialization sequence as mentioned in
J721E TRM [1] at section "12.7.2.4.1.2.1 Start-up Sequence Timing Diagram".
It shows O_CMN_READY polling at the end after common configuration pin
setup where the common configuration pin setup step enables state machine
as referenced in "Table 12-1533. Common Configuration-Related Setup
mentions state machine"

To fix this :
- Add new function callbacks for polling on PLL lock and O_CMN_READY
  assertion.
- As state machine and clocks get enabled in power_on callback only, move
  the clock related programming part from configure callback to power_on
callback and poll for the PLL lockup and O_CMN_READY assertion after state
machine gets enabled.
- The configure callback only saves the PLL configuration received from the
  client driver which will be applied later on in power_on callback.
- Add checks to ensure configure is called before power_on and state
  machine is in disabled state before power_on callback is called.
- Disable state machine in power_off so that client driver can re-configure
  the PLL by following up a power_off, configure, power_on sequence.

[1]: https://www.ti.com/lit/zip/spruil1

Cc: stable@vger.kernel.org
Fixes: 7a343c8bf4 ("phy: Add Cadence D-PHY support")
Signed-off-by: Devarsh Thakkar <devarsht@ti.com>
Tested-by: Harikrishna Shenoy <h-shenoy@ti.com>
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Link: https://lore.kernel.org/r/20250704125915.1224738-2-devarsht@ti.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2025-10-23 16:20:39 +02:00
..
allwinner phy: constify of_phandle_args in xlate 2024-02-23 17:43:14 +05:30
amlogic phy: constify of_phandle_args in xlate 2024-02-23 17:43:14 +05:30
broadcom phy: usb: Toggle the PHY power during init 2025-01-02 10:34:13 +01:00
cadence phy: cadence: cdns-dphy: Fix PLL lock and O_CMN_READY polling 2025-10-23 16:20:39 +02:00
freescale phy: fsl-imx8mq-usb: fix phy_tx_vboost_level_from_property() 2025-06-27 11:11:23 +01:00
hisilicon phy: hisilicon: usb2: Simplify with scoped for each OF child loop 2024-08-30 13:26:37 +05:30
ingenic phy: Explicitly include correct DT includes 2023-07-17 11:52:56 +05:30
intel phy: constify of_phandle_args in xlate 2024-02-23 17:43:14 +05:30
lantiq phy: constify of_phandle_args in xlate 2024-02-23 17:43:14 +05:30
marvell phy: marvell: phy-mvebu-cp110-comphy: improve eth_port1 on comphy4 2024-08-04 22:52:11 +05:30
mediatek phy: mediatek: xsphy: Simplify with scoped for each OF child loop 2024-08-30 13:26:37 +05:30
microchip phy-for-6.9 2024-03-16 11:24:51 -07:00
motorola phy: Drop unnecessary of_match_device() calls 2023-10-13 15:47:53 +05:30
mscc phy: constify of_phandle_args in xlate 2024-02-23 17:43:14 +05:30
nuvoton phy: nuvoton: add new driver for the Nuvoton MA35 SoC USB 2.0 PHY 2024-08-29 23:52:37 +05:30
qualcomm phy: qualcomm: phy-qcom-eusb2-repeater: fix override properties 2025-09-19 16:35:50 +02:00
ralink phy: constify of_phandle_args in xlate 2024-02-23 17:43:14 +05:30
realtek phy: realtek: usb: fix NULL deref in rtk_usb3phy_probe 2024-12-05 14:02:38 +01:00
renesas phy: renesas: rcar-gen3-usb2: Assert PLL reset on PHY power off 2025-05-29 11:01:57 +02:00
rockchip phy: rockchip: naneng-combphy: Enable U3 OTG port for RK3568 2025-10-15 12:00:04 +02:00
samsung phy: exynos5-usbdrd: fix EDS distribution tuning (gs101) 2025-05-29 11:02:51 +02:00
socionext phy: constify of_phandle_args in xlate 2024-02-23 17:43:14 +05:30
st phy: miphy28lp: remove unused struct 'miphy_initval' 2024-06-03 19:29:44 +05:30
starfive phy: starfive: jh7110-usb: Fix USB 2.0 host occasional detection failure 2025-06-04 14:43:53 +02:00
sunplus phy: sunplus: return negative error code in sp_usb_phy_probe 2023-11-27 18:39:18 +05:30
tegra phy: tegra: xusb: fix device and OF node leak at probe 2025-09-19 16:35:51 +02:00
ti phy: ti-pipe3: fix device leak at unbind 2025-09-19 16:35:51 +02:00
xilinx phy: xilinx: phy-zynqmp: Fix SGMII linkup failure on resume 2024-08-05 21:46:58 +05:30
Kconfig phy: nuvoton: add new driver for the Nuvoton MA35 SoC USB 2.0 PHY 2024-08-29 23:52:37 +05:30
Makefile phy: nuvoton: add new driver for the Nuvoton MA35 SoC USB 2.0 PHY 2024-08-29 23:52:37 +05:30
phy-airoha-pcie-regs.h phy: airoha: Fix REG_CSR_2L_RX{0,1}_REV0 definitions 2024-12-05 14:02:28 +01:00
phy-airoha-pcie.c phy: airoha: Fix REG_CSR_2L_JCPLL_SDM_HREN config in airoha_pcie_phy_init_ssc_jcpll() 2024-12-05 14:02:28 +01:00
phy-can-transceiver.c phy: phy-can-transceiver: insert space after include 2023-12-21 22:39:59 +05:30
phy-core-mipi-dphy.c phy: dphy: add support to calculate the timing based on hs_clk_rate 2022-10-27 14:38:04 +03:00
phy-core.c phy: core: don't require set_mode() callback for phy_get_mode() to work 2025-05-29 11:02:51 +02:00
phy-lgm-usb.c phy: phy-lgm-usb: Convert to platform remove callback returning void 2023-03-20 18:14:56 +05:30
phy-lpc18xx-usb-otg.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
phy-pistachio-usb.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 422 2019-06-05 17:37:15 +02:00
phy-xgene.c phy: constify of_phandle_args in xlate 2024-02-23 17:43:14 +05:30