Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

clk: qcom: gcc-msm8909: Increase delay for USB PHY reset

The USB PHY on MSM8909 works with the driver used on MSM8916
(phy-qcom-usb-hs.c). When turning the PHY on/off it is first reset
using the standard reset controller API. On MSM8916 the reset is
provided by the USB driver (ci_hdrc_msm_por_reset() in ci_hdrc_msm.c).

While this seems to work on MSM8909 as well, the Qualcomm Linux sources
suggest that the PHY should be reset using the GCC_USB2_HS_PHY_ONLY_BCR
register instead. In general this is easy to set up in the device tree,
thanks to the standard reset controller API.

However, to conform to the specifications of the PHY the reset signal
should be asserted for at least 10 us. This is handled correctly on
MSM8916 in ci_hdrc_msm_por_reset(), but not within the GCC driver.

Fix this by making use of the new "udelay" field of qcom_reset_map
and set a delay of ~15 us between the assertion/deassertion of the
USB PHY reset signal.

Signed-off-by: Stephan Gerhold <stephan.gerhold@kernkonzept.com>
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
Link: https://lore.kernel.org/r/20220706134132.3623415-5-stephan.gerhold@kernkonzept.com

authored by

Stephan Gerhold and committed by
Bjorn Andersson
dcc6c9fb 2cb8a39b

+1 -1
+1 -1
drivers/clk/qcom/gcc-msm8909.c
··· 2670 2670 [GCC_SDCC2_BCR] = { 0x43000 }, 2671 2671 [GCC_ULT_AUDIO_BCR] = { 0x1c0b4 }, 2672 2672 [GCC_USB2A_PHY_BCR] = { 0x41028 }, 2673 - [GCC_USB2_HS_PHY_ONLY_BCR] = { 0x41034 }, 2673 + [GCC_USB2_HS_PHY_ONLY_BCR] = { .reg = 0x41034, .udelay = 15 }, 2674 2674 [GCC_USB_HS_BCR] = { 0x41000 }, 2675 2675 [GCC_VENUS0_BCR] = { 0x4c014 }, 2676 2676 /* Subsystem Restart */