android_kernel_xiaomi_sm8450/drivers/phy
Adrien Thierry ffebc22bdd phy: qcom-snps-femto-v2: keep cfg_ahb_clk enabled during runtime suspend
[ Upstream commit 45d89a344eb46db9dce851c28e14f5e3c635c251 ]

In the dwc3 core, both system and runtime suspend end up calling
dwc3_suspend_common(). From there, what happens for the PHYs depends on
the USB mode and whether the controller is entering system or runtime
suspend.

HOST mode:
  (1) system suspend on a non-wakeup-capable controller

  The [1] if branch is taken. dwc3_core_exit() is called, which ends up
  calling phy_power_off() and phy_exit(). Those two functions decrease the
  PM runtime count at some point, so they will trigger the PHY runtime
  sleep (assuming the count is right).

  (2) runtime suspend / system suspend on a wakeup-capable controller

  The [1] branch is not taken. dwc3_suspend_common() calls
  phy_pm_runtime_put_sync(). Assuming the ref count is right, the PHY
  runtime suspend op is called.

DEVICE mode:
  dwc3_core_exit() is called on both runtime and system sleep
  unless the controller is already runtime suspended.

OTG mode:
  (1) system suspend : dwc3_core_exit() is called

  (2) runtime suspend : do nothing

In host mode, the code seems to make a distinction between 1) runtime
sleep / system sleep for wakeup-capable controller, and 2) system sleep
for non-wakeup-capable controller, where phy_power_off() and phy_exit()
are only called for the latter. This suggests the PHY is not supposed to
be in a fully powered-off state for runtime sleep and system sleep for
wakeup-capable controller.

Moreover, downstream, cfg_ahb_clk only gets disabled for system suspend.
The clocks are disabled by phy->set_suspend() [2] which is only called
in the system sleep path through dwc3_core_exit() [3].

With that in mind, don't disable the clocks during the femto PHY runtime
suspend callback. The clocks will only be disabled during system suspend
for non-wakeup-capable controllers, through dwc3_core_exit().

[1] https://elixir.bootlin.com/linux/v6.4/source/drivers/usb/dwc3/core.c#L1988
[2] https://git.codelinaro.org/clo/la/kernel/msm-5.4/-/blob/LV.AU.1.2.1.r2-05300-gen3meta.0/drivers/usb/phy/phy-msm-snps-hs.c#L524
[3] https://git.codelinaro.org/clo/la/kernel/msm-5.4/-/blob/LV.AU.1.2.1.r2-05300-gen3meta.0/drivers/usb/dwc3/core.c#L1915

Signed-off-by: Adrien Thierry <athierry@redhat.com>
Link: https://lore.kernel.org/r/20230629144542.14906-2-athierry@redhat.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
Stable-dep-of: 8a0eb8f9b9a0 ("phy: qcom-snps-femto-v2: properly enable ref clock")
Signed-off-by: Sasha Levin <sashal@kernel.org>
2023-08-11 11:57:34 +02:00
..
allwinner
amlogic phy: amlogic: meson8b-usb2: Use dev_err_probe() 2022-04-13 21:01:01 +02:00
broadcom phy: usb: s2 WoL wakeup_count not incremented for USB->Eth devices 2023-01-14 10:16:03 +01:00
cadence phy: cadence: Sierra: Fix error return code in cdns_sierra_phy_probe() 2021-06-16 12:01:45 +02:00
freescale
hisilicon
intel phy: intel: Fix for warnings due to EMMC clock 175Mhz change in FIP 2021-07-20 16:05:46 +02:00
lantiq phy: lantiq: rcu-usb2: wait after clock enable 2021-03-04 11:38:24 +01:00
marvell phy: marvell: ARMADA375_USBCLUSTER_PHY should not default to y, unconditionally 2021-05-14 09:50:13 +02:00
mediatek phy: phy-mtk-tphy: Fix some resource leaks in mtk_phy_init() 2021-06-23 14:42:48 +02:00
motorola phy: mapphone-mdm6600: Fix PM error handling in phy_mdm6600_probe 2022-05-09 09:05:01 +02:00
mscc
qualcomm phy: qcom-snps-femto-v2: keep cfg_ahb_clk enabled during runtime suspend 2023-08-11 11:57:34 +02:00
ralink
renesas phy: renesas: rcar-gen3-usb2: disable runtime pm in case of failure 2020-12-30 11:53:36 +01:00
rockchip phy: rockchip-typec: Fix unsigned comparison with less than zero 2023-03-11 16:40:18 +01:00
samsung phy: samsung: exynos5250-sata: fix missing device put in probe error paths 2022-05-09 09:05:01 +02:00
socionext phy: uniphier-usb3ss: fix unintended writing zeros to PHY register 2022-01-27 10:54:08 +01:00
st phy: st: miphy28lp: use _poll_timeout functions for waits 2023-05-30 12:57:51 +01:00
tegra phy: tegra: xusb: check return value of devm_kzalloc() 2023-07-27 08:44:07 +02:00
ti phy: ti: fix Kconfig warning and operator precedence 2023-02-01 08:23:11 +01:00
xilinx phy: xilinx: zynqmp: Fix bus width setting for SGMII 2022-02-16 12:54:23 +01:00
Kconfig phy: USB_LGM_PHY should depend on X86 2021-03-04 11:38:13 +01:00
Makefile
phy-core-mipi-dphy.c phy: dphy: Correct lpx parameter and its derivatives(ta_{get,go,sure}) 2022-04-08 14:40:24 +02:00
phy-core.c
phy-lgm-usb.c
phy-lpc18xx-usb-otg.c
phy-pistachio-usb.c
phy-xgene.c