* [PATCH v2 0/3] phy: qcom: edp: Add support for Glymur platform
@ 2025-09-09 10:07 Abel Vesa
2025-09-09 10:07 ` [PATCH v2 1/3] dt-bindings: phy: Add DP PHY compatible for Glymur Abel Vesa
` (2 more replies)
0 siblings, 3 replies; 13+ messages in thread
From: Abel Vesa @ 2025-09-09 10:07 UTC (permalink / raw)
To: Vinod Koul, Kishon Vijay Abraham I, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson,
Dmitry Baryshkov, Konrad Dybcio, Neil Armstrong
Cc: Johan Hovold, linux-arm-msm, linux-phy, devicetree, linux-kernel,
Abel Vesa
The Glymur platform implements the eDP/DP PHY version 8.
Add the necessary registers, rework the driver to accommodate
this new version and add the Glymur specific configuration data.
This patchset depends on:
https://lore.kernel.org/all/20250903-phy-qcom-edp-add-missing-refclk-v2-0-d88c1b0cdc1b@linaro.org/
Signed-off-by: Abel Vesa <abel.vesa@linaro.org>
---
Changes in v2:
- Sorted alphabetically the both the compatible and v8 specific
configuration.
- Prefixed the new offsets with DP in order differentiate from PCIe ones
- Link to v1: https://lore.kernel.org/r/20250904-phy-qcom-edp-add-glymur-support-v1-0-e83c6b9a145b@linaro.org
---
Abel Vesa (3):
dt-bindings: phy: Add DP PHY compatible for Glymur
phy: qcom-qmp: qserdes-com: Add v8 DP-specific qserdes register offsets
phy: qcom: edp: Add Glymur platform support
.../devicetree/bindings/phy/qcom,edp-phy.yaml | 2 +
drivers/phy/qualcomm/phy-qcom-edp.c | 242 ++++++++++++++++++++-
.../phy/qualcomm/phy-qcom-qmp-dp-qserdes-com-v8.h | 52 +++++
3 files changed, 289 insertions(+), 7 deletions(-)
---
base-commit: 8128ba77e80a40f545381f1b31267f2f204380fe
change-id: 20250903-phy-qcom-edp-add-glymur-support-2a8117d92b89
Best regards,
--
Abel Vesa <abel.vesa@linaro.org>
--
linux-phy mailing list
linux-phy@lists.infradead.org
https://lists.infradead.org/mailman/listinfo/linux-phy
^ permalink raw reply [flat|nested] 13+ messages in thread* [PATCH v2 1/3] dt-bindings: phy: Add DP PHY compatible for Glymur 2025-09-09 10:07 [PATCH v2 0/3] phy: qcom: edp: Add support for Glymur platform Abel Vesa @ 2025-09-09 10:07 ` Abel Vesa 2025-09-10 11:32 ` Krzysztof Kozlowski 2025-09-09 10:07 ` [PATCH v2 2/3] phy: qcom-qmp: qserdes-com: Add v8 DP-specific qserdes register offsets Abel Vesa 2025-09-09 10:07 ` [PATCH v2 3/3] phy: qcom: edp: Add Glymur platform support Abel Vesa 2 siblings, 1 reply; 13+ messages in thread From: Abel Vesa @ 2025-09-09 10:07 UTC (permalink / raw) To: Vinod Koul, Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Dmitry Baryshkov, Konrad Dybcio, Neil Armstrong Cc: Johan Hovold, linux-arm-msm, linux-phy, devicetree, linux-kernel, Abel Vesa Document the compatible for the Glymur platform. Signed-off-by: Abel Vesa <abel.vesa@linaro.org> --- Documentation/devicetree/bindings/phy/qcom,edp-phy.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Documentation/devicetree/bindings/phy/qcom,edp-phy.yaml b/Documentation/devicetree/bindings/phy/qcom,edp-phy.yaml index bfc4d75f50ff9e31981fe602478f28320545e52b..4a1daae3d8d47ca5f08d97a1864cfd615dcf108d 100644 --- a/Documentation/devicetree/bindings/phy/qcom,edp-phy.yaml +++ b/Documentation/devicetree/bindings/phy/qcom,edp-phy.yaml @@ -18,6 +18,7 @@ properties: compatible: oneOf: - enum: + - qcom,glymur-dp-phy - qcom,sa8775p-edp-phy - qcom,sc7280-edp-phy - qcom,sc8180x-edp-phy @@ -72,6 +73,7 @@ allOf: properties: compatible: enum: + - qcom,glymur-dp-phy - qcom,x1e80100-dp-phy then: properties: -- 2.45.2 -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH v2 1/3] dt-bindings: phy: Add DP PHY compatible for Glymur 2025-09-09 10:07 ` [PATCH v2 1/3] dt-bindings: phy: Add DP PHY compatible for Glymur Abel Vesa @ 2025-09-10 11:32 ` Krzysztof Kozlowski 2025-09-11 9:02 ` Abel Vesa 0 siblings, 1 reply; 13+ messages in thread From: Krzysztof Kozlowski @ 2025-09-10 11:32 UTC (permalink / raw) To: Abel Vesa Cc: Vinod Koul, Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Dmitry Baryshkov, Konrad Dybcio, Neil Armstrong, Johan Hovold, linux-arm-msm, linux-phy, devicetree, linux-kernel On Tue, Sep 09, 2025 at 01:07:26PM +0300, Abel Vesa wrote: > Document the compatible for the Glymur platform. And it is not compatible with X1E? Say something useful in the commit msg, instead of what we see from the patch contents. > > Signed-off-by: Abel Vesa <abel.vesa@linaro.org> > --- > Documentation/devicetree/bindings/phy/qcom,edp-phy.yaml | 2 ++ > 1 file changed, 2 insertions(+) Best regards, Krzysztof -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2 1/3] dt-bindings: phy: Add DP PHY compatible for Glymur 2025-09-10 11:32 ` Krzysztof Kozlowski @ 2025-09-11 9:02 ` Abel Vesa 0 siblings, 0 replies; 13+ messages in thread From: Abel Vesa @ 2025-09-11 9:02 UTC (permalink / raw) To: Krzysztof Kozlowski Cc: Vinod Koul, Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Dmitry Baryshkov, Konrad Dybcio, Neil Armstrong, Johan Hovold, linux-arm-msm, linux-phy, devicetree, linux-kernel On 25-09-10 13:32:04, Krzysztof Kozlowski wrote: > On Tue, Sep 09, 2025 at 01:07:26PM +0300, Abel Vesa wrote: > > Document the compatible for the Glymur platform. > > And it is not compatible with X1E? Say something useful in the commit > msg, instead of what we see from the patch contents. > It's definitely not compatible with X1E since there is a new version (v8 compared to v6). Will update the commit message and mention the new version. Thanks for reviewing. -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 2/3] phy: qcom-qmp: qserdes-com: Add v8 DP-specific qserdes register offsets 2025-09-09 10:07 [PATCH v2 0/3] phy: qcom: edp: Add support for Glymur platform Abel Vesa 2025-09-09 10:07 ` [PATCH v2 1/3] dt-bindings: phy: Add DP PHY compatible for Glymur Abel Vesa @ 2025-09-09 10:07 ` Abel Vesa 2025-09-09 11:19 ` Dmitry Baryshkov 2025-09-09 10:07 ` [PATCH v2 3/3] phy: qcom: edp: Add Glymur platform support Abel Vesa 2 siblings, 1 reply; 13+ messages in thread From: Abel Vesa @ 2025-09-09 10:07 UTC (permalink / raw) To: Vinod Koul, Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Dmitry Baryshkov, Konrad Dybcio, Neil Armstrong Cc: Johan Hovold, linux-arm-msm, linux-phy, devicetree, linux-kernel, Abel Vesa Starting with Glymur, the PCIe and DP PHYs qserdes register offsets differ for the same version number. So in order to be able to differentiate between them, add these ones with DP prefix. Signed-off-by: Abel Vesa <abel.vesa@linaro.org> --- .../phy/qualcomm/phy-qcom-qmp-dp-qserdes-com-v8.h | 52 ++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-dp-qserdes-com-v8.h b/drivers/phy/qualcomm/phy-qcom-qmp-dp-qserdes-com-v8.h new file mode 100644 index 0000000000000000000000000000000000000000..2bef1eecdc56a75e954ebdbcd168ab7306be1302 --- /dev/null +++ b/drivers/phy/qualcomm/phy-qcom-qmp-dp-qserdes-com-v8.h @@ -0,0 +1,52 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (C) 2025 Linaro Ltd. + */ + +#ifndef QCOM_PHY_QMP_DP_QSERDES_COM_V8_H_ +#define QCOM_PHY_QMP_DP_QSERDES_COM_V8_H_ + +/* Only for DP QMP V8 PHY - QSERDES COM registers */ +#define DP_QSERDES_V8_COM_HSCLK_SEL_1 0x03c +#define DP_QSERDES_V8_COM_BIN_VCOCAL_CMP_CODE1_MODE0 0x058 +#define DP_QSERDES_V8_COM_BIN_VCOCAL_CMP_CODE2_MODE0 0x05c +#define DP_QSERDES_V8_COM_SSC_STEP_SIZE1_MODE0 0x060 +#define DP_QSERDES_V8_COM_SSC_STEP_SIZE2_MODE0 0x064 +#define DP_QSERDES_V8_COM_CP_CTRL_MODE0 0x070 +#define DP_QSERDES_V8_COM_PLL_RCTRL_MODE0 0x074 +#define DP_QSERDES_V8_COM_PLL_CCTRL_MODE0 0x078 +#define DP_QSERDES_V8_COM_CORECLK_DIV_MODE0 0x07c +#define DP_QSERDES_V8_COM_LOCK_CMP1_MODE0 0x080 +#define DP_QSERDES_V8_COM_LOCK_CMP2_MODE0 0x084 +#define DP_QSERDES_V8_COM_DEC_START_MODE0 0x088 +#define DP_QSERDES_V8_COM_DIV_FRAC_START1_MODE0 0x090 +#define DP_QSERDES_V8_COM_DIV_FRAC_START2_MODE0 0x094 +#define DP_QSERDES_V8_COM_DIV_FRAC_START3_MODE0 0x098 +#define DP_QSERDES_V8_COM_INTEGLOOP_GAIN0_MODE0 0x0a0 +#define DP_QSERDES_V8_COM_VCO_TUNE1_MODE0 0x0a8 +#define DP_QSERDES_V8_COM_INTEGLOOP_GAIN1_MODE0 0x0a4 +#define DP_QSERDES_V8_COM_VCO_TUNE2_MODE0 0x0ac +#define DP_QSERDES_V8_COM_BG_TIMER 0x0bc +#define DP_QSERDES_V8_COM_SSC_EN_CENTER 0x0c0 +#define DP_QSERDES_V8_COM_SSC_ADJ_PER1 0x0c4 +#define DP_QSERDES_V8_COM_SSC_PER1 0x0cc +#define DP_QSERDES_V8_COM_SSC_PER2 0x0d0 +#define DP_QSERDES_V8_COM_BIAS_EN_CLKBUFLR_EN 0x0dc +#define DP_QSERDES_V8_COM_CLK_ENABLE1 0x0e0 +#define DP_QSERDES_V8_COM_SYS_CLK_CTRL 0x0e4 +#define DP_QSERDES_V8_COM_SYSCLK_BUF_ENABLE 0x0e8 +#define DP_QSERDES_V8_COM_PLL_IVCO 0x0f4 +#define DP_QSERDES_V8_COM_SYSCLK_EN_SEL 0x110 +#define DP_QSERDES_V8_COM_RESETSM_CNTRL 0x118 +#define DP_QSERDES_V8_COM_LOCK_CMP_EN 0x120 +#define DP_QSERDES_V8_COM_VCO_TUNE_CTRL 0x13c +#define DP_QSERDES_V8_COM_VCO_TUNE_MAP 0x140 +#define DP_QSERDES_V8_COM_CLK_SELECT 0x164 +#define DP_QSERDES_V8_COM_CORE_CLK_EN 0x170 +#define DP_QSERDES_V8_COM_CMN_CONFIG_1 0x174 +#define DP_QSERDES_V8_COM_SVS_MODE_CLK_SEL 0x180 +#define DP_QSERDES_V8_COM_CLK_FWD_CONFIG_1 0x2f4 +#define DP_QSERDES_V8_COM_CMN_STATUS 0x314 +#define DP_QSERDES_V8_COM_C_READY_STATUS 0x33c + +#endif -- 2.45.2 -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH v2 2/3] phy: qcom-qmp: qserdes-com: Add v8 DP-specific qserdes register offsets 2025-09-09 10:07 ` [PATCH v2 2/3] phy: qcom-qmp: qserdes-com: Add v8 DP-specific qserdes register offsets Abel Vesa @ 2025-09-09 11:19 ` Dmitry Baryshkov 2025-09-09 11:24 ` Konrad Dybcio 0 siblings, 1 reply; 13+ messages in thread From: Dmitry Baryshkov @ 2025-09-09 11:19 UTC (permalink / raw) To: Abel Vesa Cc: Vinod Koul, Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Dmitry Baryshkov, Konrad Dybcio, Neil Armstrong, Johan Hovold, linux-arm-msm, linux-phy, devicetree, linux-kernel On Tue, Sep 09, 2025 at 01:07:27PM +0300, Abel Vesa wrote: > Starting with Glymur, the PCIe and DP PHYs qserdes register offsets differ > for the same version number. So in order to be able to differentiate > between them, add these ones with DP prefix. > > Signed-off-by: Abel Vesa <abel.vesa@linaro.org> > --- > .../phy/qualcomm/phy-qcom-qmp-dp-qserdes-com-v8.h | 52 ++++++++++++++++++++++ > 1 file changed, 52 insertions(+) > > diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-dp-qserdes-com-v8.h b/drivers/phy/qualcomm/phy-qcom-qmp-dp-qserdes-com-v8.h > new file mode 100644 > index 0000000000000000000000000000000000000000..2bef1eecdc56a75e954ebdbcd168ab7306be1302 > --- /dev/null > +++ b/drivers/phy/qualcomm/phy-qcom-qmp-dp-qserdes-com-v8.h > @@ -0,0 +1,52 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ > +/* > + * Copyright (C) 2025 Linaro Ltd. > + */ > + > +#ifndef QCOM_PHY_QMP_DP_QSERDES_COM_V8_H_ > +#define QCOM_PHY_QMP_DP_QSERDES_COM_V8_H_ > + > +/* Only for DP QMP V8 PHY - QSERDES COM registers */ > +#define DP_QSERDES_V8_COM_HSCLK_SEL_1 0x03c > +#define DP_QSERDES_V8_COM_BIN_VCOCAL_CMP_CODE1_MODE0 0x058 > +#define DP_QSERDES_V8_COM_BIN_VCOCAL_CMP_CODE2_MODE0 0x05c > +#define DP_QSERDES_V8_COM_SSC_STEP_SIZE1_MODE0 0x060 > +#define DP_QSERDES_V8_COM_SSC_STEP_SIZE2_MODE0 0x064 > +#define DP_QSERDES_V8_COM_CP_CTRL_MODE0 0x070 > +#define DP_QSERDES_V8_COM_PLL_RCTRL_MODE0 0x074 > +#define DP_QSERDES_V8_COM_PLL_CCTRL_MODE0 0x078 > +#define DP_QSERDES_V8_COM_CORECLK_DIV_MODE0 0x07c > +#define DP_QSERDES_V8_COM_LOCK_CMP1_MODE0 0x080 > +#define DP_QSERDES_V8_COM_LOCK_CMP2_MODE0 0x084 > +#define DP_QSERDES_V8_COM_DEC_START_MODE0 0x088 > +#define DP_QSERDES_V8_COM_DIV_FRAC_START1_MODE0 0x090 > +#define DP_QSERDES_V8_COM_DIV_FRAC_START2_MODE0 0x094 > +#define DP_QSERDES_V8_COM_DIV_FRAC_START3_MODE0 0x098 > +#define DP_QSERDES_V8_COM_INTEGLOOP_GAIN0_MODE0 0x0a0 > +#define DP_QSERDES_V8_COM_VCO_TUNE1_MODE0 0x0a8 > +#define DP_QSERDES_V8_COM_INTEGLOOP_GAIN1_MODE0 0x0a4 > +#define DP_QSERDES_V8_COM_VCO_TUNE2_MODE0 0x0ac > +#define DP_QSERDES_V8_COM_BG_TIMER 0x0bc > +#define DP_QSERDES_V8_COM_SSC_EN_CENTER 0x0c0 > +#define DP_QSERDES_V8_COM_SSC_ADJ_PER1 0x0c4 > +#define DP_QSERDES_V8_COM_SSC_PER1 0x0cc > +#define DP_QSERDES_V8_COM_SSC_PER2 0x0d0 > +#define DP_QSERDES_V8_COM_BIAS_EN_CLKBUFLR_EN 0x0dc > +#define DP_QSERDES_V8_COM_CLK_ENABLE1 0x0e0 > +#define DP_QSERDES_V8_COM_SYS_CLK_CTRL 0x0e4 > +#define DP_QSERDES_V8_COM_SYSCLK_BUF_ENABLE 0x0e8 > +#define DP_QSERDES_V8_COM_PLL_IVCO 0x0f4 > +#define DP_QSERDES_V8_COM_SYSCLK_EN_SEL 0x110 > +#define DP_QSERDES_V8_COM_RESETSM_CNTRL 0x118 > +#define DP_QSERDES_V8_COM_LOCK_CMP_EN 0x120 > +#define DP_QSERDES_V8_COM_VCO_TUNE_CTRL 0x13c > +#define DP_QSERDES_V8_COM_VCO_TUNE_MAP 0x140 > +#define DP_QSERDES_V8_COM_CLK_SELECT 0x164 > +#define DP_QSERDES_V8_COM_CORE_CLK_EN 0x170 > +#define DP_QSERDES_V8_COM_CMN_CONFIG_1 0x174 The registers are the same at least up to this point. Would it make sense to keep common part in the same header and define only those bits that actually differ between DP and PCIe parts? (Is it really about PCIe or is it eDP vs everything else?) > +#define DP_QSERDES_V8_COM_SVS_MODE_CLK_SEL 0x180 > +#define DP_QSERDES_V8_COM_CLK_FWD_CONFIG_1 0x2f4 > +#define DP_QSERDES_V8_COM_CMN_STATUS 0x314 > +#define DP_QSERDES_V8_COM_C_READY_STATUS 0x33c > + > +#endif > > -- > 2.45.2 > -- With best wishes Dmitry -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2 2/3] phy: qcom-qmp: qserdes-com: Add v8 DP-specific qserdes register offsets 2025-09-09 11:19 ` Dmitry Baryshkov @ 2025-09-09 11:24 ` Konrad Dybcio 2025-09-09 11:40 ` Dmitry Baryshkov 0 siblings, 1 reply; 13+ messages in thread From: Konrad Dybcio @ 2025-09-09 11:24 UTC (permalink / raw) To: Dmitry Baryshkov, Abel Vesa Cc: Vinod Koul, Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Dmitry Baryshkov, Konrad Dybcio, Neil Armstrong, Johan Hovold, linux-arm-msm, linux-phy, devicetree, linux-kernel On 9/9/25 1:19 PM, Dmitry Baryshkov wrote: > On Tue, Sep 09, 2025 at 01:07:27PM +0300, Abel Vesa wrote: >> Starting with Glymur, the PCIe and DP PHYs qserdes register offsets differ >> for the same version number. So in order to be able to differentiate >> between them, add these ones with DP prefix. >> >> Signed-off-by: Abel Vesa <abel.vesa@linaro.org> >> --- >> .../phy/qualcomm/phy-qcom-qmp-dp-qserdes-com-v8.h | 52 ++++++++++++++++++++++ >> 1 file changed, 52 insertions(+) >> >> diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-dp-qserdes-com-v8.h b/drivers/phy/qualcomm/phy-qcom-qmp-dp-qserdes-com-v8.h >> new file mode 100644 >> index 0000000000000000000000000000000000000000..2bef1eecdc56a75e954ebdbcd168ab7306be1302 >> --- /dev/null >> +++ b/drivers/phy/qualcomm/phy-qcom-qmp-dp-qserdes-com-v8.h >> @@ -0,0 +1,52 @@ >> +/* SPDX-License-Identifier: GPL-2.0 */ >> +/* >> + * Copyright (C) 2025 Linaro Ltd. >> + */ >> + >> +#ifndef QCOM_PHY_QMP_DP_QSERDES_COM_V8_H_ >> +#define QCOM_PHY_QMP_DP_QSERDES_COM_V8_H_ >> + >> +/* Only for DP QMP V8 PHY - QSERDES COM registers */ >> +#define DP_QSERDES_V8_COM_HSCLK_SEL_1 0x03c >> +#define DP_QSERDES_V8_COM_BIN_VCOCAL_CMP_CODE1_MODE0 0x058 >> +#define DP_QSERDES_V8_COM_BIN_VCOCAL_CMP_CODE2_MODE0 0x05c >> +#define DP_QSERDES_V8_COM_SSC_STEP_SIZE1_MODE0 0x060 >> +#define DP_QSERDES_V8_COM_SSC_STEP_SIZE2_MODE0 0x064 >> +#define DP_QSERDES_V8_COM_CP_CTRL_MODE0 0x070 >> +#define DP_QSERDES_V8_COM_PLL_RCTRL_MODE0 0x074 >> +#define DP_QSERDES_V8_COM_PLL_CCTRL_MODE0 0x078 >> +#define DP_QSERDES_V8_COM_CORECLK_DIV_MODE0 0x07c >> +#define DP_QSERDES_V8_COM_LOCK_CMP1_MODE0 0x080 >> +#define DP_QSERDES_V8_COM_LOCK_CMP2_MODE0 0x084 >> +#define DP_QSERDES_V8_COM_DEC_START_MODE0 0x088 >> +#define DP_QSERDES_V8_COM_DIV_FRAC_START1_MODE0 0x090 >> +#define DP_QSERDES_V8_COM_DIV_FRAC_START2_MODE0 0x094 >> +#define DP_QSERDES_V8_COM_DIV_FRAC_START3_MODE0 0x098 >> +#define DP_QSERDES_V8_COM_INTEGLOOP_GAIN0_MODE0 0x0a0 >> +#define DP_QSERDES_V8_COM_VCO_TUNE1_MODE0 0x0a8 >> +#define DP_QSERDES_V8_COM_INTEGLOOP_GAIN1_MODE0 0x0a4 >> +#define DP_QSERDES_V8_COM_VCO_TUNE2_MODE0 0x0ac >> +#define DP_QSERDES_V8_COM_BG_TIMER 0x0bc >> +#define DP_QSERDES_V8_COM_SSC_EN_CENTER 0x0c0 >> +#define DP_QSERDES_V8_COM_SSC_ADJ_PER1 0x0c4 >> +#define DP_QSERDES_V8_COM_SSC_PER1 0x0cc >> +#define DP_QSERDES_V8_COM_SSC_PER2 0x0d0 >> +#define DP_QSERDES_V8_COM_BIAS_EN_CLKBUFLR_EN 0x0dc >> +#define DP_QSERDES_V8_COM_CLK_ENABLE1 0x0e0 >> +#define DP_QSERDES_V8_COM_SYS_CLK_CTRL 0x0e4 >> +#define DP_QSERDES_V8_COM_SYSCLK_BUF_ENABLE 0x0e8 >> +#define DP_QSERDES_V8_COM_PLL_IVCO 0x0f4 >> +#define DP_QSERDES_V8_COM_SYSCLK_EN_SEL 0x110 >> +#define DP_QSERDES_V8_COM_RESETSM_CNTRL 0x118 >> +#define DP_QSERDES_V8_COM_LOCK_CMP_EN 0x120 >> +#define DP_QSERDES_V8_COM_VCO_TUNE_CTRL 0x13c >> +#define DP_QSERDES_V8_COM_VCO_TUNE_MAP 0x140 >> +#define DP_QSERDES_V8_COM_CLK_SELECT 0x164 >> +#define DP_QSERDES_V8_COM_CORE_CLK_EN 0x170 >> +#define DP_QSERDES_V8_COM_CMN_CONFIG_1 0x174 > > The registers are the same at least up to this point. Would it make > sense to keep common part in the same header and define only those bits > that actually differ between DP and PCIe parts? (Is it really about PCIe > or is it eDP vs everything else?) No, there's a wild amount of variation between various "v8" PHYs and this is impossible to catch by eye Konrad -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2 2/3] phy: qcom-qmp: qserdes-com: Add v8 DP-specific qserdes register offsets 2025-09-09 11:24 ` Konrad Dybcio @ 2025-09-09 11:40 ` Dmitry Baryshkov 0 siblings, 0 replies; 13+ messages in thread From: Dmitry Baryshkov @ 2025-09-09 11:40 UTC (permalink / raw) To: Konrad Dybcio Cc: Abel Vesa, Vinod Koul, Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Dmitry Baryshkov, Konrad Dybcio, Neil Armstrong, Johan Hovold, linux-arm-msm, linux-phy, devicetree, linux-kernel On Tue, Sep 09, 2025 at 01:24:02PM +0200, Konrad Dybcio wrote: > On 9/9/25 1:19 PM, Dmitry Baryshkov wrote: > > On Tue, Sep 09, 2025 at 01:07:27PM +0300, Abel Vesa wrote: > >> Starting with Glymur, the PCIe and DP PHYs qserdes register offsets differ > >> for the same version number. So in order to be able to differentiate > >> between them, add these ones with DP prefix. > >> > >> Signed-off-by: Abel Vesa <abel.vesa@linaro.org> > >> --- > >> .../phy/qualcomm/phy-qcom-qmp-dp-qserdes-com-v8.h | 52 ++++++++++++++++++++++ > >> 1 file changed, 52 insertions(+) > >> > >> diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-dp-qserdes-com-v8.h b/drivers/phy/qualcomm/phy-qcom-qmp-dp-qserdes-com-v8.h > >> new file mode 100644 > >> index 0000000000000000000000000000000000000000..2bef1eecdc56a75e954ebdbcd168ab7306be1302 > >> --- /dev/null > >> +++ b/drivers/phy/qualcomm/phy-qcom-qmp-dp-qserdes-com-v8.h > >> @@ -0,0 +1,52 @@ > >> +/* SPDX-License-Identifier: GPL-2.0 */ > >> +/* > >> + * Copyright (C) 2025 Linaro Ltd. > >> + */ > >> + > >> +#ifndef QCOM_PHY_QMP_DP_QSERDES_COM_V8_H_ > >> +#define QCOM_PHY_QMP_DP_QSERDES_COM_V8_H_ > >> + > >> +/* Only for DP QMP V8 PHY - QSERDES COM registers */ > >> +#define DP_QSERDES_V8_COM_HSCLK_SEL_1 0x03c > >> +#define DP_QSERDES_V8_COM_BIN_VCOCAL_CMP_CODE1_MODE0 0x058 > >> +#define DP_QSERDES_V8_COM_BIN_VCOCAL_CMP_CODE2_MODE0 0x05c > >> +#define DP_QSERDES_V8_COM_SSC_STEP_SIZE1_MODE0 0x060 > >> +#define DP_QSERDES_V8_COM_SSC_STEP_SIZE2_MODE0 0x064 > >> +#define DP_QSERDES_V8_COM_CP_CTRL_MODE0 0x070 > >> +#define DP_QSERDES_V8_COM_PLL_RCTRL_MODE0 0x074 > >> +#define DP_QSERDES_V8_COM_PLL_CCTRL_MODE0 0x078 > >> +#define DP_QSERDES_V8_COM_CORECLK_DIV_MODE0 0x07c > >> +#define DP_QSERDES_V8_COM_LOCK_CMP1_MODE0 0x080 > >> +#define DP_QSERDES_V8_COM_LOCK_CMP2_MODE0 0x084 > >> +#define DP_QSERDES_V8_COM_DEC_START_MODE0 0x088 > >> +#define DP_QSERDES_V8_COM_DIV_FRAC_START1_MODE0 0x090 > >> +#define DP_QSERDES_V8_COM_DIV_FRAC_START2_MODE0 0x094 > >> +#define DP_QSERDES_V8_COM_DIV_FRAC_START3_MODE0 0x098 > >> +#define DP_QSERDES_V8_COM_INTEGLOOP_GAIN0_MODE0 0x0a0 > >> +#define DP_QSERDES_V8_COM_VCO_TUNE1_MODE0 0x0a8 > >> +#define DP_QSERDES_V8_COM_INTEGLOOP_GAIN1_MODE0 0x0a4 > >> +#define DP_QSERDES_V8_COM_VCO_TUNE2_MODE0 0x0ac > >> +#define DP_QSERDES_V8_COM_BG_TIMER 0x0bc > >> +#define DP_QSERDES_V8_COM_SSC_EN_CENTER 0x0c0 > >> +#define DP_QSERDES_V8_COM_SSC_ADJ_PER1 0x0c4 > >> +#define DP_QSERDES_V8_COM_SSC_PER1 0x0cc > >> +#define DP_QSERDES_V8_COM_SSC_PER2 0x0d0 > >> +#define DP_QSERDES_V8_COM_BIAS_EN_CLKBUFLR_EN 0x0dc > >> +#define DP_QSERDES_V8_COM_CLK_ENABLE1 0x0e0 > >> +#define DP_QSERDES_V8_COM_SYS_CLK_CTRL 0x0e4 > >> +#define DP_QSERDES_V8_COM_SYSCLK_BUF_ENABLE 0x0e8 > >> +#define DP_QSERDES_V8_COM_PLL_IVCO 0x0f4 > >> +#define DP_QSERDES_V8_COM_SYSCLK_EN_SEL 0x110 > >> +#define DP_QSERDES_V8_COM_RESETSM_CNTRL 0x118 > >> +#define DP_QSERDES_V8_COM_LOCK_CMP_EN 0x120 > >> +#define DP_QSERDES_V8_COM_VCO_TUNE_CTRL 0x13c > >> +#define DP_QSERDES_V8_COM_VCO_TUNE_MAP 0x140 > >> +#define DP_QSERDES_V8_COM_CLK_SELECT 0x164 > >> +#define DP_QSERDES_V8_COM_CORE_CLK_EN 0x170 > >> +#define DP_QSERDES_V8_COM_CMN_CONFIG_1 0x174 > > > > The registers are the same at least up to this point. Would it make > > sense to keep common part in the same header and define only those bits > > that actually differ between DP and PCIe parts? (Is it really about PCIe > > or is it eDP vs everything else?) > > No, there's a wild amount of variation between various "v8" PHYs and this > is impossible to catch by eye I see. Let's see how it will surface later. For now: Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> -- With best wishes Dmitry -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v2 3/3] phy: qcom: edp: Add Glymur platform support 2025-09-09 10:07 [PATCH v2 0/3] phy: qcom: edp: Add support for Glymur platform Abel Vesa 2025-09-09 10:07 ` [PATCH v2 1/3] dt-bindings: phy: Add DP PHY compatible for Glymur Abel Vesa 2025-09-09 10:07 ` [PATCH v2 2/3] phy: qcom-qmp: qserdes-com: Add v8 DP-specific qserdes register offsets Abel Vesa @ 2025-09-09 10:07 ` Abel Vesa 2025-09-09 11:12 ` Dmitry Baryshkov 2 siblings, 1 reply; 13+ messages in thread From: Abel Vesa @ 2025-09-09 10:07 UTC (permalink / raw) To: Vinod Koul, Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Dmitry Baryshkov, Konrad Dybcio, Neil Armstrong Cc: Johan Hovold, linux-arm-msm, linux-phy, devicetree, linux-kernel, Abel Vesa The Qualcomm Glymur platform has the new v8 version of the eDP/DP PHY. So rework the driver to support this new version and add the platform specific configuration data. Signed-off-by: Abel Vesa <abel.vesa@linaro.org> --- drivers/phy/qualcomm/phy-qcom-edp.c | 242 ++++++++++++++++++++++++++++++++++-- 1 file changed, 235 insertions(+), 7 deletions(-) diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c index ca9bb9d70e29e1a132bd499fb9f74b5837acf45b..b670cda0fa066d3ff45c66b73cc67e165e55b79a 100644 --- a/drivers/phy/qualcomm/phy-qcom-edp.c +++ b/drivers/phy/qualcomm/phy-qcom-edp.c @@ -26,13 +26,15 @@ #include "phy-qcom-qmp-qserdes-com-v4.h" #include "phy-qcom-qmp-qserdes-com-v6.h" +#include "phy-qcom-qmp-dp-qserdes-com-v8.h" + /* EDP_PHY registers */ #define DP_PHY_CFG 0x0010 #define DP_PHY_CFG_1 0x0014 #define DP_PHY_PD_CTL 0x001c #define DP_PHY_MODE 0x0020 -#define DP_AUX_CFG_SIZE 10 +#define DP_AUX_CFG_SIZE 13 #define DP_PHY_AUX_CFG(n) (0x24 + (0x04 * (n))) #define DP_PHY_AUX_INTERRUPT_MASK 0x0058 @@ -76,6 +78,7 @@ struct phy_ver_ops { int (*com_power_on)(const struct qcom_edp *edp); int (*com_resetsm_cntrl)(const struct qcom_edp *edp); int (*com_bias_en_clkbuflr)(const struct qcom_edp *edp); + int (*com_clk_fwd_cfg)(const struct qcom_edp *edp); int (*com_configure_pll)(const struct qcom_edp *edp); int (*com_configure_ssc)(const struct qcom_edp *edp); }; @@ -83,6 +86,8 @@ struct phy_ver_ops { struct qcom_edp_phy_cfg { bool is_edp; const u8 *aux_cfg; + int aux_cfg_size; + const u8 *vco_div_cfg; const struct qcom_edp_swing_pre_emph_cfg *swing_pre_emph_cfg; const struct phy_ver_ops *ver_ops; }; @@ -185,6 +190,10 @@ static const u8 edp_phy_aux_cfg_v4[10] = { 0x00, 0x13, 0x24, 0x00, 0x0a, 0x26, 0x0a, 0x03, 0x37, 0x03 }; +static const u8 edp_phy_vco_div_cfg_v4[4] = { + 0x1, 0x1, 0x2, 0x0, +}; + static const u8 edp_pre_emp_hbr_rbr_v5[4][4] = { { 0x05, 0x11, 0x17, 0x1d }, { 0x05, 0x11, 0x18, 0xff }, @@ -210,6 +219,14 @@ static const u8 edp_phy_aux_cfg_v5[10] = { 0x00, 0x13, 0xa4, 0x00, 0x0a, 0x26, 0x0a, 0x03, 0x37, 0x03 }; +static const u8 edp_phy_aux_cfg_v8[13] = { + 0x00, 0x00, 0xa0, 0x00, 0x0a, 0x26, 0x0a, 0x03, 0x37, 0x03, 0x02, 0x02, 0x4, +}; + +static const u8 edp_phy_vco_div_cfg_v8[4] = { + 0x1, 0x1, 0x1, 0x1, +}; + static int qcom_edp_phy_init(struct phy *phy) { struct qcom_edp *edp = phy_get_drvdata(phy); @@ -224,7 +241,11 @@ static int qcom_edp_phy_init(struct phy *phy) if (ret) goto out_disable_supplies; - memcpy(aux_cfg, edp->cfg->aux_cfg, sizeof(aux_cfg)); + memcpy(aux_cfg, edp->cfg->aux_cfg, edp->cfg->aux_cfg_size); + + ret = edp->cfg->ver_ops->com_clk_fwd_cfg(edp); + if (ret) + return ret; writel(DP_PHY_PD_CTL_PWRDN | DP_PHY_PD_CTL_AUX_PWRDN | DP_PHY_PD_CTL_PLL_PWRDN | DP_PHY_PD_CTL_DP_CLAMP_EN, @@ -252,7 +273,7 @@ static int qcom_edp_phy_init(struct phy *phy) writel(0xfc, edp->edp + DP_PHY_MODE); - for (int i = 0; i < DP_AUX_CFG_SIZE; i++) + for (int i = 0; i < edp->cfg->aux_cfg_size; i++) writel(aux_cfg[i], edp->edp + DP_PHY_AUX_CFG(i)); writel(PHY_AUX_STOP_ERR_MASK | PHY_AUX_DEC_ERR_MASK | @@ -345,22 +366,22 @@ static int qcom_edp_set_vco_div(const struct qcom_edp *edp, unsigned long *pixel switch (dp_opts->link_rate) { case 1620: - vco_div = 0x1; + vco_div = edp->cfg->vco_div_cfg[0]; *pixel_freq = 1620000000UL / 2; break; case 2700: - vco_div = 0x1; + vco_div = edp->cfg->vco_div_cfg[1]; *pixel_freq = 2700000000UL / 2; break; case 5400: - vco_div = 0x2; + vco_div = edp->cfg->vco_div_cfg[2]; *pixel_freq = 5400000000UL / 4; break; case 8100: - vco_div = 0x0; + vco_div = edp->cfg->vco_div_cfg[3]; *pixel_freq = 8100000000UL / 6; break; @@ -398,6 +419,11 @@ static int qcom_edp_phy_com_resetsm_cntrl_v4(const struct qcom_edp *edp) val, val & BIT(0), 500, 10000); } +static int qcom_edp_com_clk_fwd_cfg_v4(const struct qcom_edp *edp) +{ + return 0; +} + static int qcom_edp_com_bias_en_clkbuflr_v4(const struct qcom_edp *edp) { /* Turn on BIAS current for PHY/PLL */ @@ -530,6 +556,7 @@ static const struct phy_ver_ops qcom_edp_phy_ops_v4 = { .com_power_on = qcom_edp_phy_power_on_v4, .com_resetsm_cntrl = qcom_edp_phy_com_resetsm_cntrl_v4, .com_bias_en_clkbuflr = qcom_edp_com_bias_en_clkbuflr_v4, + .com_clk_fwd_cfg = qcom_edp_com_clk_fwd_cfg_v4, .com_configure_pll = qcom_edp_com_configure_pll_v4, .com_configure_ssc = qcom_edp_com_configure_ssc_v4, }; @@ -537,17 +564,23 @@ static const struct phy_ver_ops qcom_edp_phy_ops_v4 = { static const struct qcom_edp_phy_cfg sa8775p_dp_phy_cfg = { .is_edp = false, .aux_cfg = edp_phy_aux_cfg_v5, + .aux_cfg_size = ARRAY_SIZE(edp_phy_aux_cfg_v5), + .vco_div_cfg = edp_phy_vco_div_cfg_v4, .swing_pre_emph_cfg = &edp_phy_swing_pre_emph_cfg_v5, .ver_ops = &qcom_edp_phy_ops_v4, }; static const struct qcom_edp_phy_cfg sc7280_dp_phy_cfg = { .aux_cfg = edp_phy_aux_cfg_v4, + .aux_cfg_size = ARRAY_SIZE(edp_phy_aux_cfg_v4), + .vco_div_cfg = edp_phy_vco_div_cfg_v4, .ver_ops = &qcom_edp_phy_ops_v4, }; static const struct qcom_edp_phy_cfg sc8280xp_dp_phy_cfg = { .aux_cfg = edp_phy_aux_cfg_v4, + .aux_cfg_size = ARRAY_SIZE(edp_phy_aux_cfg_v4), + .vco_div_cfg = edp_phy_vco_div_cfg_v4, .swing_pre_emph_cfg = &dp_phy_swing_pre_emph_cfg, .ver_ops = &qcom_edp_phy_ops_v4, }; @@ -555,6 +588,8 @@ static const struct qcom_edp_phy_cfg sc8280xp_dp_phy_cfg = { static const struct qcom_edp_phy_cfg sc8280xp_edp_phy_cfg = { .is_edp = true, .aux_cfg = edp_phy_aux_cfg_v4, + .aux_cfg_size = ARRAY_SIZE(edp_phy_aux_cfg_v4), + .vco_div_cfg = edp_phy_vco_div_cfg_v4, .swing_pre_emph_cfg = &edp_phy_swing_pre_emph_cfg, .ver_ops = &qcom_edp_phy_ops_v4, }; @@ -734,10 +769,202 @@ static const struct phy_ver_ops qcom_edp_phy_ops_v6 = { static struct qcom_edp_phy_cfg x1e80100_phy_cfg = { .aux_cfg = edp_phy_aux_cfg_v4, + .aux_cfg_size = ARRAY_SIZE(edp_phy_aux_cfg_v4), + .vco_div_cfg = edp_phy_vco_div_cfg_v4, .swing_pre_emph_cfg = &dp_phy_swing_pre_emph_cfg, .ver_ops = &qcom_edp_phy_ops_v6, }; +static int qcom_edp_com_configure_ssc_v8(const struct qcom_edp *edp) +{ + const struct phy_configure_opts_dp *dp_opts = &edp->dp_opts; + u32 step1; + u32 step2; + + switch (dp_opts->link_rate) { + case 1620: + case 2700: + case 8100: + step1 = 0x5b; + step2 = 0x02; + break; + + case 5400: + step1 = 0x5b; + step2 = 0x02; + break; + + default: + /* Other link rates aren't supported */ + return -EINVAL; + } + + writel(0x01, edp->pll + DP_QSERDES_V8_COM_SSC_EN_CENTER); + writel(0x00, edp->pll + DP_QSERDES_V8_COM_SSC_ADJ_PER1); + writel(0x6b, edp->pll + DP_QSERDES_V8_COM_SSC_PER1); + writel(0x02, edp->pll + DP_QSERDES_V8_COM_SSC_PER2); + writel(step1, edp->pll + DP_QSERDES_V8_COM_SSC_STEP_SIZE1_MODE0); + writel(step2, edp->pll + DP_QSERDES_V8_COM_SSC_STEP_SIZE2_MODE0); + + return 0; +} + +static int qcom_edp_com_configure_pll_v8(const struct qcom_edp *edp) +{ + const struct phy_configure_opts_dp *dp_opts = &edp->dp_opts; + u32 div_frac_start2_mode0; + u32 div_frac_start3_mode0; + u32 dec_start_mode0; + u32 lock_cmp1_mode0; + u32 lock_cmp2_mode0; + u32 code1_mode0; + u32 code2_mode0; + u32 hsclk_sel; + + switch (dp_opts->link_rate) { + case 1620: + hsclk_sel = 0x5; + dec_start_mode0 = 0x34; + div_frac_start2_mode0 = 0xc0; + div_frac_start3_mode0 = 0x0b; + lock_cmp1_mode0 = 0x37; + lock_cmp2_mode0 = 0x04; + code1_mode0 = 0x71; + code2_mode0 = 0x0c; + break; + + case 2700: + hsclk_sel = 0x3; + dec_start_mode0 = 0x34; + div_frac_start2_mode0 = 0xc0; + div_frac_start3_mode0 = 0x0b; + lock_cmp1_mode0 = 0x07; + lock_cmp2_mode0 = 0x07; + code1_mode0 = 0x71; + code2_mode0 = 0x0c; + break; + + case 5400: + hsclk_sel = 0x2; + dec_start_mode0 = 0x4f; + div_frac_start2_mode0 = 0xa0; + div_frac_start3_mode0 = 0x01; + lock_cmp1_mode0 = 0x18; + lock_cmp2_mode0 = 0x15; + code1_mode0 = 0x14; + code2_mode0 = 0x25; + break; + + case 8100: + hsclk_sel = 0x2; + dec_start_mode0 = 0x4f; + div_frac_start2_mode0 = 0xa0; + div_frac_start3_mode0 = 0x01; + lock_cmp1_mode0 = 0x18; + lock_cmp2_mode0 = 0x15; + code1_mode0 = 0x14; + code2_mode0 = 0x25; + break; + + default: + /* Other link rates aren't supported */ + return -EINVAL; + } + + writel(0x01, edp->pll + DP_QSERDES_V8_COM_SVS_MODE_CLK_SEL); + writel(0x3b, edp->pll + DP_QSERDES_V8_COM_SYSCLK_EN_SEL); + writel(0x02, edp->pll + DP_QSERDES_V8_COM_SYS_CLK_CTRL); + writel(0x0c, edp->pll + DP_QSERDES_V8_COM_CLK_ENABLE1); + writel(0x06, edp->pll + DP_QSERDES_V8_COM_SYSCLK_BUF_ENABLE); + writel(0x30, edp->pll + DP_QSERDES_V8_COM_CLK_SELECT); + writel(hsclk_sel, edp->pll + DP_QSERDES_V8_COM_HSCLK_SEL_1); + writel(0x07, edp->pll + DP_QSERDES_V8_COM_PLL_IVCO); + writel(0x00, edp->pll + DP_QSERDES_V8_COM_LOCK_CMP_EN); + writel(0x36, edp->pll + DP_QSERDES_V8_COM_PLL_CCTRL_MODE0); + writel(0x16, edp->pll + DP_QSERDES_V8_COM_PLL_RCTRL_MODE0); + writel(0x06, edp->pll + DP_QSERDES_V8_COM_CP_CTRL_MODE0); + writel(dec_start_mode0, edp->pll + DP_QSERDES_V8_COM_DEC_START_MODE0); + writel(0x00, edp->pll + DP_QSERDES_V8_COM_DIV_FRAC_START1_MODE0); + writel(div_frac_start2_mode0, edp->pll + DP_QSERDES_V8_COM_DIV_FRAC_START2_MODE0); + writel(div_frac_start3_mode0, edp->pll + DP_QSERDES_V8_COM_DIV_FRAC_START3_MODE0); + writel(0x96, edp->pll + DP_QSERDES_V8_COM_CMN_CONFIG_1); + writel(0x3f, edp->pll + DP_QSERDES_V8_COM_INTEGLOOP_GAIN0_MODE0); + writel(0x00, edp->pll + DP_QSERDES_V8_COM_INTEGLOOP_GAIN1_MODE0); + writel(0x00, edp->pll + DP_QSERDES_V8_COM_VCO_TUNE_MAP); + writel(lock_cmp1_mode0, edp->pll + DP_QSERDES_V8_COM_LOCK_CMP1_MODE0); + writel(lock_cmp2_mode0, edp->pll + DP_QSERDES_V8_COM_LOCK_CMP2_MODE0); + + writel(0x0a, edp->pll + DP_QSERDES_V8_COM_BG_TIMER); + writel(0x0a, edp->pll + DP_QSERDES_V8_COM_CORECLK_DIV_MODE0); + writel(0x00, edp->pll + DP_QSERDES_V8_COM_VCO_TUNE_CTRL); + writel(0x1f, edp->pll + DP_QSERDES_V8_COM_BIAS_EN_CLKBUFLR_EN); + writel(0x00, edp->pll + DP_QSERDES_V8_COM_CORE_CLK_EN); + writel(0xa0, edp->pll + DP_QSERDES_V8_COM_VCO_TUNE1_MODE0); + writel(0x01, edp->pll + DP_QSERDES_V8_COM_VCO_TUNE2_MODE0); + + writel(code1_mode0, edp->pll + DP_QSERDES_V8_COM_BIN_VCOCAL_CMP_CODE1_MODE0); + writel(code2_mode0, edp->pll + DP_QSERDES_V8_COM_BIN_VCOCAL_CMP_CODE2_MODE0); + + return 0; +} + + +static int qcom_edp_phy_com_resetsm_cntrl_v8(const struct qcom_edp *edp) +{ + u32 val; + + writel(0x20, edp->pll + DP_QSERDES_V8_COM_RESETSM_CNTRL); + + return readl_poll_timeout(edp->pll + DP_QSERDES_V8_COM_C_READY_STATUS, + val, val & BIT(0), 500, 10000); +} + +static int qcom_edp_com_clk_fwd_cfg_v8(const struct qcom_edp *edp) +{ + writel(0x3f, edp->pll + DP_QSERDES_V8_COM_CLK_FWD_CONFIG_1); + + return 0; +} + +static int qcom_edp_com_bias_en_clkbuflr_v8(const struct qcom_edp *edp) +{ + /* Turn on BIAS current for PHY/PLL */ + writel(0x1f, edp->pll + DP_QSERDES_V8_COM_BIAS_EN_CLKBUFLR_EN); + + return 0; +} + +static int qcom_edp_phy_power_on_v8(const struct qcom_edp *edp) +{ + u32 val; + + writel(DP_PHY_PD_CTL_PWRDN | DP_PHY_PD_CTL_AUX_PWRDN | + DP_PHY_PD_CTL_LANE_0_1_PWRDN | DP_PHY_PD_CTL_LANE_2_3_PWRDN | + DP_PHY_PD_CTL_PLL_PWRDN | DP_PHY_PD_CTL_DP_CLAMP_EN, + edp->edp + DP_PHY_PD_CTL); + writel(0xfc, edp->edp + DP_PHY_MODE); + + return readl_poll_timeout(edp->pll + DP_QSERDES_V8_COM_CMN_STATUS, + val, val & BIT(7), 5, 200); +} + +static const struct phy_ver_ops qcom_edp_phy_ops_v8 = { + .com_power_on = qcom_edp_phy_power_on_v8, + .com_resetsm_cntrl = qcom_edp_phy_com_resetsm_cntrl_v8, + .com_bias_en_clkbuflr = qcom_edp_com_bias_en_clkbuflr_v8, + .com_clk_fwd_cfg = qcom_edp_com_clk_fwd_cfg_v8, + .com_configure_pll = qcom_edp_com_configure_pll_v8, + .com_configure_ssc = qcom_edp_com_configure_ssc_v8, +}; + +static struct qcom_edp_phy_cfg glymur_phy_cfg = { + .aux_cfg = edp_phy_aux_cfg_v8, + .aux_cfg_size = ARRAY_SIZE(edp_phy_aux_cfg_v8), + .vco_div_cfg = edp_phy_vco_div_cfg_v8, + .swing_pre_emph_cfg = &edp_phy_swing_pre_emph_cfg_v5, + .ver_ops = &qcom_edp_phy_ops_v8, +}; + static int qcom_edp_phy_power_on(struct phy *phy) { const struct qcom_edp *edp = phy_get_drvdata(phy); @@ -1133,6 +1360,7 @@ static int qcom_edp_phy_probe(struct platform_device *pdev) } static const struct of_device_id qcom_edp_phy_match_table[] = { + { .compatible = "qcom,glymur-dp-phy", .data = &glymur_phy_cfg, }, { .compatible = "qcom,sa8775p-edp-phy", .data = &sa8775p_dp_phy_cfg, }, { .compatible = "qcom,sc7280-edp-phy", .data = &sc7280_dp_phy_cfg, }, { .compatible = "qcom,sc8180x-edp-phy", .data = &sc7280_dp_phy_cfg, }, -- 2.45.2 -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH v2 3/3] phy: qcom: edp: Add Glymur platform support 2025-09-09 10:07 ` [PATCH v2 3/3] phy: qcom: edp: Add Glymur platform support Abel Vesa @ 2025-09-09 11:12 ` Dmitry Baryshkov 2025-09-11 8:52 ` Abel Vesa 0 siblings, 1 reply; 13+ messages in thread From: Dmitry Baryshkov @ 2025-09-09 11:12 UTC (permalink / raw) To: Abel Vesa Cc: Vinod Koul, Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Dmitry Baryshkov, Konrad Dybcio, Neil Armstrong, Johan Hovold, linux-arm-msm, linux-phy, devicetree, linux-kernel On Tue, Sep 09, 2025 at 01:07:28PM +0300, Abel Vesa wrote: > The Qualcomm Glymur platform has the new v8 version > of the eDP/DP PHY. So rework the driver to support this > new version and add the platform specific configuration data. > > Signed-off-by: Abel Vesa <abel.vesa@linaro.org> > --- > drivers/phy/qualcomm/phy-qcom-edp.c | 242 ++++++++++++++++++++++++++++++++++-- > 1 file changed, 235 insertions(+), 7 deletions(-) > > diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c > index ca9bb9d70e29e1a132bd499fb9f74b5837acf45b..b670cda0fa066d3ff45c66b73cc67e165e55b79a 100644 > --- a/drivers/phy/qualcomm/phy-qcom-edp.c > +++ b/drivers/phy/qualcomm/phy-qcom-edp.c > @@ -26,13 +26,15 @@ > #include "phy-qcom-qmp-qserdes-com-v4.h" > #include "phy-qcom-qmp-qserdes-com-v6.h" > > +#include "phy-qcom-qmp-dp-qserdes-com-v8.h" > + > /* EDP_PHY registers */ > #define DP_PHY_CFG 0x0010 > #define DP_PHY_CFG_1 0x0014 > #define DP_PHY_PD_CTL 0x001c > #define DP_PHY_MODE 0x0020 > > -#define DP_AUX_CFG_SIZE 10 > +#define DP_AUX_CFG_SIZE 13 If it differs from platform to platform, do we need to continue defining it? Also, if the AUX CFG size has increased, didn't it cause other registers to shift too? > #define DP_PHY_AUX_CFG(n) (0x24 + (0x04 * (n))) > > #define DP_PHY_AUX_INTERRUPT_MASK 0x0058 > @@ -76,6 +78,7 @@ struct phy_ver_ops { > int (*com_power_on)(const struct qcom_edp *edp); > int (*com_resetsm_cntrl)(const struct qcom_edp *edp); > int (*com_bias_en_clkbuflr)(const struct qcom_edp *edp); > + int (*com_clk_fwd_cfg)(const struct qcom_edp *edp); > int (*com_configure_pll)(const struct qcom_edp *edp); > int (*com_configure_ssc)(const struct qcom_edp *edp); > }; -- With best wishes Dmitry -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2 3/3] phy: qcom: edp: Add Glymur platform support 2025-09-09 11:12 ` Dmitry Baryshkov @ 2025-09-11 8:52 ` Abel Vesa 2025-09-11 9:18 ` Konrad Dybcio 0 siblings, 1 reply; 13+ messages in thread From: Abel Vesa @ 2025-09-11 8:52 UTC (permalink / raw) To: Dmitry Baryshkov Cc: Vinod Koul, Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Dmitry Baryshkov, Konrad Dybcio, Neil Armstrong, Johan Hovold, linux-arm-msm, linux-phy, devicetree, linux-kernel On 25-09-09 14:12:46, Dmitry Baryshkov wrote: > On Tue, Sep 09, 2025 at 01:07:28PM +0300, Abel Vesa wrote: > > The Qualcomm Glymur platform has the new v8 version > > of the eDP/DP PHY. So rework the driver to support this > > new version and add the platform specific configuration data. > > > > Signed-off-by: Abel Vesa <abel.vesa@linaro.org> > > --- > > drivers/phy/qualcomm/phy-qcom-edp.c | 242 ++++++++++++++++++++++++++++++++++-- > > 1 file changed, 235 insertions(+), 7 deletions(-) > > > > diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c > > index ca9bb9d70e29e1a132bd499fb9f74b5837acf45b..b670cda0fa066d3ff45c66b73cc67e165e55b79a 100644 > > --- a/drivers/phy/qualcomm/phy-qcom-edp.c > > +++ b/drivers/phy/qualcomm/phy-qcom-edp.c > > @@ -26,13 +26,15 @@ > > #include "phy-qcom-qmp-qserdes-com-v4.h" > > #include "phy-qcom-qmp-qserdes-com-v6.h" > > > > +#include "phy-qcom-qmp-dp-qserdes-com-v8.h" > > + > > /* EDP_PHY registers */ > > #define DP_PHY_CFG 0x0010 > > #define DP_PHY_CFG_1 0x0014 > > #define DP_PHY_PD_CTL 0x001c > > #define DP_PHY_MODE 0x0020 > > > > -#define DP_AUX_CFG_SIZE 10 > > +#define DP_AUX_CFG_SIZE 13 > > If it differs from platform to platform, do we need to continue defining > it? > > Also, if the AUX CFG size has increased, didn't it cause other registers > to shift too? AFAICT, all platforms have AUX_CFG0 through AUX_CFG12, we just didn't need to write anything to the last two so far. -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2 3/3] phy: qcom: edp: Add Glymur platform support 2025-09-11 8:52 ` Abel Vesa @ 2025-09-11 9:18 ` Konrad Dybcio 2025-09-11 12:33 ` Abel Vesa 0 siblings, 1 reply; 13+ messages in thread From: Konrad Dybcio @ 2025-09-11 9:18 UTC (permalink / raw) To: Abel Vesa, Dmitry Baryshkov Cc: Vinod Koul, Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Dmitry Baryshkov, Konrad Dybcio, Neil Armstrong, Johan Hovold, linux-arm-msm, linux-phy, devicetree, linux-kernel On 9/11/25 10:52 AM, Abel Vesa wrote: > On 25-09-09 14:12:46, Dmitry Baryshkov wrote: >> On Tue, Sep 09, 2025 at 01:07:28PM +0300, Abel Vesa wrote: >>> The Qualcomm Glymur platform has the new v8 version >>> of the eDP/DP PHY. So rework the driver to support this >>> new version and add the platform specific configuration data. >>> >>> Signed-off-by: Abel Vesa <abel.vesa@linaro.org> >>> --- >>> drivers/phy/qualcomm/phy-qcom-edp.c | 242 ++++++++++++++++++++++++++++++++++-- >>> 1 file changed, 235 insertions(+), 7 deletions(-) >>> >>> diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c >>> index ca9bb9d70e29e1a132bd499fb9f74b5837acf45b..b670cda0fa066d3ff45c66b73cc67e165e55b79a 100644 >>> --- a/drivers/phy/qualcomm/phy-qcom-edp.c >>> +++ b/drivers/phy/qualcomm/phy-qcom-edp.c >>> @@ -26,13 +26,15 @@ >>> #include "phy-qcom-qmp-qserdes-com-v4.h" >>> #include "phy-qcom-qmp-qserdes-com-v6.h" >>> >>> +#include "phy-qcom-qmp-dp-qserdes-com-v8.h" >>> + >>> /* EDP_PHY registers */ >>> #define DP_PHY_CFG 0x0010 >>> #define DP_PHY_CFG_1 0x0014 >>> #define DP_PHY_PD_CTL 0x001c >>> #define DP_PHY_MODE 0x0020 >>> >>> -#define DP_AUX_CFG_SIZE 10 >>> +#define DP_AUX_CFG_SIZE 13 >> >> If it differs from platform to platform, do we need to continue defining >> it? >> >> Also, if the AUX CFG size has increased, didn't it cause other registers >> to shift too? > > AFAICT, all platforms have AUX_CFG0 through AUX_CFG12, we just didn't > need to write anything to the last two so far. I checked 7180/7280/8180/8280/x1e/Glymur and they all do It would make sense to perhaps spell this out explicitly in a separate patch Konrad -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [PATCH v2 3/3] phy: qcom: edp: Add Glymur platform support 2025-09-11 9:18 ` Konrad Dybcio @ 2025-09-11 12:33 ` Abel Vesa 0 siblings, 0 replies; 13+ messages in thread From: Abel Vesa @ 2025-09-11 12:33 UTC (permalink / raw) To: Konrad Dybcio Cc: Dmitry Baryshkov, Vinod Koul, Kishon Vijay Abraham I, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson, Dmitry Baryshkov, Konrad Dybcio, Neil Armstrong, Johan Hovold, linux-arm-msm, linux-phy, devicetree, linux-kernel On 25-09-11 11:18:53, Konrad Dybcio wrote: > On 9/11/25 10:52 AM, Abel Vesa wrote: > > On 25-09-09 14:12:46, Dmitry Baryshkov wrote: > >> On Tue, Sep 09, 2025 at 01:07:28PM +0300, Abel Vesa wrote: > >>> The Qualcomm Glymur platform has the new v8 version > >>> of the eDP/DP PHY. So rework the driver to support this > >>> new version and add the platform specific configuration data. > >>> > >>> Signed-off-by: Abel Vesa <abel.vesa@linaro.org> > >>> --- > >>> drivers/phy/qualcomm/phy-qcom-edp.c | 242 ++++++++++++++++++++++++++++++++++-- > >>> 1 file changed, 235 insertions(+), 7 deletions(-) > >>> > >>> diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c > >>> index ca9bb9d70e29e1a132bd499fb9f74b5837acf45b..b670cda0fa066d3ff45c66b73cc67e165e55b79a 100644 > >>> --- a/drivers/phy/qualcomm/phy-qcom-edp.c > >>> +++ b/drivers/phy/qualcomm/phy-qcom-edp.c > >>> @@ -26,13 +26,15 @@ > >>> #include "phy-qcom-qmp-qserdes-com-v4.h" > >>> #include "phy-qcom-qmp-qserdes-com-v6.h" > >>> > >>> +#include "phy-qcom-qmp-dp-qserdes-com-v8.h" > >>> + > >>> /* EDP_PHY registers */ > >>> #define DP_PHY_CFG 0x0010 > >>> #define DP_PHY_CFG_1 0x0014 > >>> #define DP_PHY_PD_CTL 0x001c > >>> #define DP_PHY_MODE 0x0020 > >>> > >>> -#define DP_AUX_CFG_SIZE 10 > >>> +#define DP_AUX_CFG_SIZE 13 > >> > >> If it differs from platform to platform, do we need to continue defining > >> it? > >> > >> Also, if the AUX CFG size has increased, didn't it cause other registers > >> to shift too? > > > > AFAICT, all platforms have AUX_CFG0 through AUX_CFG12, we just didn't > > need to write anything to the last two so far. > > I checked 7180/7280/8180/8280/x1e/Glymur and they all do > > It would make sense to perhaps spell this out explicitly in a separate > patch Makes sense. Will do. Thanks. -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2025-09-11 12:33 UTC | newest] Thread overview: 13+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-09-09 10:07 [PATCH v2 0/3] phy: qcom: edp: Add support for Glymur platform Abel Vesa 2025-09-09 10:07 ` [PATCH v2 1/3] dt-bindings: phy: Add DP PHY compatible for Glymur Abel Vesa 2025-09-10 11:32 ` Krzysztof Kozlowski 2025-09-11 9:02 ` Abel Vesa 2025-09-09 10:07 ` [PATCH v2 2/3] phy: qcom-qmp: qserdes-com: Add v8 DP-specific qserdes register offsets Abel Vesa 2025-09-09 11:19 ` Dmitry Baryshkov 2025-09-09 11:24 ` Konrad Dybcio 2025-09-09 11:40 ` Dmitry Baryshkov 2025-09-09 10:07 ` [PATCH v2 3/3] phy: qcom: edp: Add Glymur platform support Abel Vesa 2025-09-09 11:12 ` Dmitry Baryshkov 2025-09-11 8:52 ` Abel Vesa 2025-09-11 9:18 ` Konrad Dybcio 2025-09-11 12:33 ` Abel Vesa
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox