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.

phy: qualcomm: Update the QMP clamp register for V6

QMP combo phy V6 and above use the clamp register from the PCS always on
(AON) address space. Update the driver accordingly.

Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Signed-off-by: Elson Roy Serrao <quic_eserrao@quicinc.com>
Signed-off-by: Wesley Cheng <wesley.cheng@oss.qualcomm.com>
Reviewed-by: Abel Vesa <abel.vesa@linaro.org>
Link: https://patch.msgid.link/20251209-linux-next-12825-v8-7-42133596bda0@oss.qualcomm.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>

authored by

Wesley Cheng and committed by
Vinod Koul
c9543cca 7dbba9fb

+57 -5
+33 -5
drivers/phy/qualcomm/phy-qcom-qmp-combo.c
··· 30 30 #include "phy-qcom-qmp-common.h" 31 31 32 32 #include "phy-qcom-qmp.h" 33 + #include "phy-qcom-qmp-pcs-aon-v6.h" 33 34 #include "phy-qcom-qmp-pcs-misc-v3.h" 35 + #include "phy-qcom-qmp-pcs-misc-v4.h" 36 + #include "phy-qcom-qmp-pcs-misc-v5.h" 34 37 #include "phy-qcom-qmp-pcs-usb-v4.h" 35 38 #include "phy-qcom-qmp-pcs-usb-v5.h" 36 39 #include "phy-qcom-qmp-pcs-usb-v6.h" ··· 82 79 QPHY_PCS_AUTONOMOUS_MODE_CTRL, 83 80 QPHY_PCS_LFPS_RXTERM_IRQ_CLEAR, 84 81 QPHY_PCS_POWER_DOWN_CONTROL, 82 + QPHY_PCS_CLAMP_ENABLE, 85 83 86 84 QPHY_COM_RESETSM_CNTRL, 87 85 QPHY_COM_C_READY_STATUS, ··· 110 106 [QPHY_PCS_AUTONOMOUS_MODE_CTRL] = QPHY_V3_PCS_AUTONOMOUS_MODE_CTRL, 111 107 [QPHY_PCS_LFPS_RXTERM_IRQ_CLEAR] = QPHY_V3_PCS_LFPS_RXTERM_IRQ_CLEAR, 112 108 109 + [QPHY_PCS_CLAMP_ENABLE] = QPHY_V3_PCS_MISC_CLAMP_ENABLE, 110 + 113 111 [QPHY_COM_RESETSM_CNTRL] = QSERDES_V3_COM_RESETSM_CNTRL, 114 112 [QPHY_COM_C_READY_STATUS] = QSERDES_V3_COM_C_READY_STATUS, 115 113 [QPHY_COM_CMN_STATUS] = QSERDES_V3_COM_CMN_STATUS, ··· 136 130 /* In PCS_USB */ 137 131 [QPHY_PCS_AUTONOMOUS_MODE_CTRL] = QPHY_V4_PCS_USB3_AUTONOMOUS_MODE_CTRL, 138 132 [QPHY_PCS_LFPS_RXTERM_IRQ_CLEAR] = QPHY_V4_PCS_USB3_LFPS_RXTERM_IRQ_CLEAR, 133 + 134 + [QPHY_PCS_CLAMP_ENABLE] = QPHY_V4_PCS_MISC_CLAMP_ENABLE, 139 135 140 136 [QPHY_COM_RESETSM_CNTRL] = QSERDES_V4_COM_RESETSM_CNTRL, 141 137 [QPHY_COM_C_READY_STATUS] = QSERDES_V4_COM_C_READY_STATUS, ··· 164 156 [QPHY_PCS_AUTONOMOUS_MODE_CTRL] = QPHY_V5_PCS_USB3_AUTONOMOUS_MODE_CTRL, 165 157 [QPHY_PCS_LFPS_RXTERM_IRQ_CLEAR] = QPHY_V5_PCS_USB3_LFPS_RXTERM_IRQ_CLEAR, 166 158 159 + [QPHY_PCS_CLAMP_ENABLE] = QPHY_V5_PCS_MISC_CLAMP_ENABLE, 160 + 167 161 [QPHY_COM_RESETSM_CNTRL] = QSERDES_V5_COM_RESETSM_CNTRL, 168 162 [QPHY_COM_C_READY_STATUS] = QSERDES_V5_COM_C_READY_STATUS, 169 163 [QPHY_COM_CMN_STATUS] = QSERDES_V5_COM_CMN_STATUS, ··· 191 181 [QPHY_PCS_AUTONOMOUS_MODE_CTRL] = QPHY_V6_PCS_USB3_AUTONOMOUS_MODE_CTRL, 192 182 [QPHY_PCS_LFPS_RXTERM_IRQ_CLEAR] = QPHY_V6_PCS_USB3_LFPS_RXTERM_IRQ_CLEAR, 193 183 184 + [QPHY_PCS_CLAMP_ENABLE] = QPHY_V6_PCS_AON_CLAMP_ENABLE, 185 + 194 186 [QPHY_COM_RESETSM_CNTRL] = QSERDES_V6_COM_RESETSM_CNTRL, 195 187 [QPHY_COM_C_READY_STATUS] = QSERDES_V6_COM_C_READY_STATUS, 196 188 [QPHY_COM_CMN_STATUS] = QSERDES_V6_COM_CMN_STATUS, ··· 217 205 /* In PCS_USB */ 218 206 [QPHY_PCS_AUTONOMOUS_MODE_CTRL] = QPHY_V6_PCS_USB3_AUTONOMOUS_MODE_CTRL, 219 207 [QPHY_PCS_LFPS_RXTERM_IRQ_CLEAR] = QPHY_V6_PCS_USB3_LFPS_RXTERM_IRQ_CLEAR, 208 + 209 + [QPHY_PCS_CLAMP_ENABLE] = QPHY_V6_PCS_AON_CLAMP_ENABLE, 220 210 221 211 [QPHY_COM_RESETSM_CNTRL] = QSERDES_V6_COM_RESETSM_CNTRL, 222 212 [QPHY_COM_C_READY_STATUS] = QSERDES_V6_COM_C_READY_STATUS, ··· 1785 1771 u16 usb3_serdes; 1786 1772 u16 usb3_pcs_misc; 1787 1773 u16 usb3_pcs; 1774 + u16 usb3_pcs_aon; 1788 1775 u16 usb3_pcs_usb; 1789 1776 u16 dp_serdes; 1790 1777 u16 dp_txa; ··· 1867 1852 void __iomem *tx2; 1868 1853 void __iomem *rx2; 1869 1854 void __iomem *pcs_misc; 1855 + void __iomem *pcs_aon; 1870 1856 void __iomem *pcs_usb; 1871 1857 1872 1858 void __iomem *dp_serdes; ··· 1992 1976 .usb3_serdes = 0x1000, 1993 1977 .usb3_pcs_misc = 0x1c00, 1994 1978 .usb3_pcs = 0x1e00, 1979 + .usb3_pcs_aon = 0x2000, 1995 1980 .usb3_pcs_usb = 0x2100, 1996 1981 .dp_serdes = 0x3000, 1997 1982 .dp_txa = 0x3400, ··· 3378 3361 const struct qmp_phy_cfg *cfg = qmp->cfg; 3379 3362 void __iomem *pcs_usb = qmp->pcs_usb ?: qmp->pcs; 3380 3363 void __iomem *pcs_misc = qmp->pcs_misc; 3364 + void __iomem *pcs_aon = qmp->pcs_aon; 3381 3365 u32 intr_mask; 3382 3366 3383 3367 if (qmp->phy_mode == PHY_MODE_USB_HOST_SS || ··· 3398 3380 /* Enable required PHY autonomous mode interrupts */ 3399 3381 qphy_setbits(pcs_usb, cfg->regs[QPHY_PCS_AUTONOMOUS_MODE_CTRL], intr_mask); 3400 3382 3401 - /* Enable i/o clamp_n for autonomous mode */ 3402 - if (pcs_misc) 3403 - qphy_clrbits(pcs_misc, QPHY_V3_PCS_MISC_CLAMP_ENABLE, CLAMP_EN); 3383 + /* 3384 + * Enable i/o clamp_n for autonomous mode 3385 + * V6 and later versions use pcs aon clamp register 3386 + */ 3387 + if (pcs_aon) 3388 + qphy_clrbits(pcs_aon, cfg->regs[QPHY_PCS_CLAMP_ENABLE], CLAMP_EN); 3389 + else if (pcs_misc) 3390 + qphy_clrbits(pcs_misc, cfg->regs[QPHY_PCS_CLAMP_ENABLE], CLAMP_EN); 3404 3391 } 3405 3392 3406 3393 static void qmp_combo_disable_autonomous_mode(struct qmp_combo *qmp) ··· 3413 3390 const struct qmp_phy_cfg *cfg = qmp->cfg; 3414 3391 void __iomem *pcs_usb = qmp->pcs_usb ?: qmp->pcs; 3415 3392 void __iomem *pcs_misc = qmp->pcs_misc; 3393 + void __iomem *pcs_aon = qmp->pcs_aon; 3416 3394 3417 3395 /* Disable i/o clamp_n on resume for normal mode */ 3418 - if (pcs_misc) 3419 - qphy_setbits(pcs_misc, QPHY_V3_PCS_MISC_CLAMP_ENABLE, CLAMP_EN); 3396 + if (pcs_aon) 3397 + qphy_setbits(pcs_aon, cfg->regs[QPHY_PCS_CLAMP_ENABLE], CLAMP_EN); 3398 + else if (pcs_misc) 3399 + qphy_setbits(pcs_misc, cfg->regs[QPHY_PCS_CLAMP_ENABLE], CLAMP_EN); 3420 3400 3421 3401 qphy_clrbits(pcs_usb, cfg->regs[QPHY_PCS_AUTONOMOUS_MODE_CTRL], 3422 3402 ARCVR_DTCT_EN | ARCVR_DTCT_EVENT_SEL | ALFPS_DTCT_EN); ··· 4084 4058 qmp->serdes = base + offs->usb3_serdes; 4085 4059 qmp->pcs_misc = base + offs->usb3_pcs_misc; 4086 4060 qmp->pcs = base + offs->usb3_pcs; 4061 + if (offs->usb3_pcs_aon) 4062 + qmp->pcs_aon = base + offs->usb3_pcs_aon; 4087 4063 qmp->pcs_usb = base + offs->usb3_pcs_usb; 4088 4064 4089 4065 qmp->dp_serdes = base + offs->dp_serdes;
+12
drivers/phy/qualcomm/phy-qcom-qmp-pcs-aon-v6.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0 */ 2 + /* 3 + * Copyright (c) 2025, Qualcomm Innovation Center, Inc. All rights reserved. 4 + */ 5 + 6 + #ifndef QCOM_PHY_QMP_PCS_AON_V6_H_ 7 + #define QCOM_PHY_QMP_PCS_AON_V6_H_ 8 + 9 + /* Only for QMP V6 PHY - PCS_AON registers */ 10 + #define QPHY_V6_PCS_AON_CLAMP_ENABLE 0x00 11 + 12 + #endif
+12
drivers/phy/qualcomm/phy-qcom-qmp-pcs-misc-v5.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0 */ 2 + /* 3 + * Copyright (c) 2025 Qualcomm Innovation Center, Inc. All rights reserved. 4 + */ 5 + 6 + #ifndef QCOM_PHY_QMP_PCS_MISC_V5_H_ 7 + #define QCOM_PHY_QMP_PCS_MISC_V5_H_ 8 + 9 + /* Only for QMP V5 PHY - PCS_MISC registers */ 10 + #define QPHY_V5_PCS_MISC_CLAMP_ENABLE 0x0c 11 + 12 + #endif