]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
phy: exynos5-usbdrd: fix USB 2.0 HS PHY tuning values for Exynos7870
authorŁukasz Lebiedziński <kernel@lvkasz.us>
Mon, 6 Apr 2026 13:56:27 +0000 (15:56 +0200)
committerVinod Koul <vkoul@kernel.org>
Sun, 10 May 2026 11:44:31 +0000 (17:14 +0530)
The existing PHYPARAM0 tuning values for Exynos7870 are incorrect,
causing the USB 2.0 PHY to fail high-speed negotiation and fall back
to full-speed (12Mbps) operation.

Fix TXVREFTUNE (transmitter voltage reference) from 14 to 3,
TXRESTUNE (transmitter impedance) from 3 to 2, and SQRXTUNE
(squelch threshold) from 6 to 5. Also explicitly set
TXPREEMPPULSETUNE to 0, which was previously missing from the
tuning table despite being included in the register mask.

All values are derived from the vendor kernel for the Samsung
Galaxy A6 (SM-A600FN), as no public hardware documentation is
available for the Exynos7870 USB DRD PHY. With these corrections,
the PHY successfully negotiates high-speed (480Mbps) operation.

Fixes: 588d5d20ca8d ("phy: exynos5-usbdrd: add exynos7870 USBDRD support")
Cc: stable@vger.kernel.org
Tested-by: Kaustabh Chakraborty <kauschluss@disroot.org>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Signed-off-by: Łukasz Lebiedziński <kernel@lvkasz.us>
Link: https://patch.msgid.link/20260406135627.234835-1-kernel@lvkasz.us
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/phy/samsung/phy-exynos5-usbdrd.c

index 5a181cb4597e9c4072e05ae7a218166226276b2b..8711a3b62c8e14462813370b0e51905196625995 100644 (file)
@@ -1958,13 +1958,14 @@ const struct exynos5_usbdrd_phy_tuning exynos7870_tunes_utmi_postinit[] = {
                              PHYPARAM0_TXPREEMPAMPTUNE | PHYPARAM0_TXHSXVTUNE |
                              PHYPARAM0_TXFSLSTUNE | PHYPARAM0_SQRXTUNE |
                              PHYPARAM0_OTGTUNE | PHYPARAM0_COMPDISTUNE),
-                            (FIELD_PREP_CONST(PHYPARAM0_TXVREFTUNE, 14) |
+                            (FIELD_PREP_CONST(PHYPARAM0_TXVREFTUNE, 3) |
                              FIELD_PREP_CONST(PHYPARAM0_TXRISETUNE, 1) |
-                             FIELD_PREP_CONST(PHYPARAM0_TXRESTUNE, 3) |
+                             FIELD_PREP_CONST(PHYPARAM0_TXRESTUNE, 2) |
+                             FIELD_PREP_CONST(PHYPARAM0_TXPREEMPPULSETUNE, 0) |
                              FIELD_PREP_CONST(PHYPARAM0_TXPREEMPAMPTUNE, 0) |
                              FIELD_PREP_CONST(PHYPARAM0_TXHSXVTUNE, 0) |
                              FIELD_PREP_CONST(PHYPARAM0_TXFSLSTUNE, 3) |
-                             FIELD_PREP_CONST(PHYPARAM0_SQRXTUNE, 6) |
+                             FIELD_PREP_CONST(PHYPARAM0_SQRXTUNE, 5) |
                              FIELD_PREP_CONST(PHYPARAM0_OTGTUNE, 2) |
                              FIELD_PREP_CONST(PHYPARAM0_COMPDISTUNE, 3))),
        PHY_TUNING_ENTRY_LAST