* [PATCH 0/3] phy: qcom: edp: Add support for Glymur platform
@ 2025-09-04 6:55 Abel Vesa
2025-09-04 6:55 ` [PATCH 1/3] dt-bindings: phy: Add DP PHY compatible for Glymur Abel Vesa
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Abel Vesa @ 2025-09-04 6:55 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>
---
Abel Vesa (3):
dt-bindings: phy: Add DP PHY compatible for Glymur
phy: qcom-qmp: qserdes-com: Add some more v8 register offsets
phy: qcom: edp: Add Glymur platform support
.../devicetree/bindings/phy/qcom,edp-phy.yaml | 2 +
drivers/phy/qualcomm/phy-qcom-edp.c | 239 ++++++++++++++++++++-
drivers/phy/qualcomm/phy-qcom-qmp-qserdes-com-v8.h | 12 ++
3 files changed, 246 insertions(+), 7 deletions(-)
---
base-commit: ab918b506f0121423beef123577d5071eebf9218
change-id: 20250903-phy-qcom-edp-add-glymur-support-2a8117d92b89
Best regards,
--
Abel Vesa <abel.vesa@linaro.org>
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 1/3] dt-bindings: phy: Add DP PHY compatible for Glymur
2025-09-04 6:55 [PATCH 0/3] phy: qcom: edp: Add support for Glymur platform Abel Vesa
@ 2025-09-04 6:55 ` Abel Vesa
2025-09-05 8:22 ` Krzysztof Kozlowski
2025-09-04 6:55 ` [PATCH 2/3] phy: qcom-qmp: qserdes-com: Add some more v8 register offsets Abel Vesa
2025-09-04 6:55 ` [PATCH 3/3] phy: qcom: edp: Add Glymur platform support Abel Vesa
2 siblings, 1 reply; 9+ messages in thread
From: Abel Vesa @ 2025-09-04 6:55 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 a8ba0aa9ff9d83f317bd897a7d564f7e13f6a1e2..e572f6ea3523a483f701aedab383a63af7abe0e5 100644
--- a/Documentation/devicetree/bindings/phy/qcom,edp-phy.yaml
+++ b/Documentation/devicetree/bindings/phy/qcom,edp-phy.yaml
@@ -24,6 +24,7 @@ properties:
- qcom,sc8280xp-dp-phy
- qcom,sc8280xp-edp-phy
- qcom,x1e80100-dp-phy
+ - qcom,glymur-dp-phy
- items:
- enum:
- qcom,qcs8300-edp-phy
@@ -73,6 +74,7 @@ allOf:
compatible:
enum:
- qcom,x1e80100-dp-phy
+ - qcom,glymur-dp-phy
then:
properties:
clocks:
--
2.45.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 2/3] phy: qcom-qmp: qserdes-com: Add some more v8 register offsets
2025-09-04 6:55 [PATCH 0/3] phy: qcom: edp: Add support for Glymur platform Abel Vesa
2025-09-04 6:55 ` [PATCH 1/3] dt-bindings: phy: Add DP PHY compatible for Glymur Abel Vesa
@ 2025-09-04 6:55 ` Abel Vesa
2025-09-04 10:47 ` Konrad Dybcio
2025-09-04 6:55 ` [PATCH 3/3] phy: qcom: edp: Add Glymur platform support Abel Vesa
2 siblings, 1 reply; 9+ messages in thread
From: Abel Vesa @ 2025-09-04 6:55 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
Add the missing v8 register offsets needed by the eDP/DP PHY driver.
Signed-off-by: Abel Vesa <abel.vesa@linaro.org>
---
drivers/phy/qualcomm/phy-qcom-qmp-qserdes-com-v8.h | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-qserdes-com-v8.h b/drivers/phy/qualcomm/phy-qcom-qmp-qserdes-com-v8.h
index d3b2292257bc521cb66562a5b6bfae8dc8c92cc1..7143925fbeecd9586d27ffef98ed3e8a232f39e7 100644
--- a/drivers/phy/qualcomm/phy-qcom-qmp-qserdes-com-v8.h
+++ b/drivers/phy/qualcomm/phy-qcom-qmp-qserdes-com-v8.h
@@ -33,6 +33,7 @@
#define QSERDES_V8_COM_CP_CTRL_MODE0 0x070
#define QSERDES_V8_COM_PLL_RCTRL_MODE0 0x074
#define QSERDES_V8_COM_PLL_CCTRL_MODE0 0x078
+#define QSERDES_V8_COM_CORECLK_DIV_MODE0 0x07c
#define QSERDES_V8_COM_LOCK_CMP1_MODE0 0x080
#define QSERDES_V8_COM_LOCK_CMP2_MODE0 0x084
#define QSERDES_V8_COM_DEC_START_MODE0 0x088
@@ -40,25 +41,36 @@
#define QSERDES_V8_COM_DIV_FRAC_START1_MODE0 0x090
#define QSERDES_V8_COM_DIV_FRAC_START2_MODE0 0x094
#define QSERDES_V8_COM_DIV_FRAC_START3_MODE0 0x098
+#define QSERDES_V8_COM_INTEGLOOP_GAIN0_MODE0 0x0a0
#define QSERDES_V8_COM_VCO_TUNE1_MODE0 0x0a8
+#define QSERDES_V8_COM_INTEGLOOP_GAIN1_MODE0 0x0a4
#define QSERDES_V8_COM_VCO_TUNE2_MODE0 0x0ac
#define QSERDES_V8_COM_BG_TIMER 0x0bc
#define QSERDES_V8_COM_SSC_EN_CENTER 0x0c0
+#define QSERDES_V8_COM_SSC_ADJ_PER1 0x0c4
#define QSERDES_V8_COM_SSC_PER1 0x0cc
#define QSERDES_V8_COM_SSC_PER2 0x0d0
#define QSERDES_V8_COM_BIAS_EN_CLKBUFLR_EN 0x0dc
+#define QSERDES_V8_COM_CLK_ENABLE1 0x0e0
+#define QSERDES_V8_COM_SYS_CLK_CTRL 0x0e4
#define QSERDES_V8_COM_SYSCLK_BUF_ENABLE 0x0e8
+#define QSERDES_V8_COM_PLL_IVCO 0x0f4
#define QSERDES_V8_COM_SYSCLK_EN_SEL 0x110
#define QSERDES_V8_COM_RESETSM_CNTRL 0x118
+#define QSERDES_V8_COM_LOCK_CMP_EN 0x120
#define QSERDES_V8_COM_LOCK_CMP_CFG 0x124
+#define QSERDES_V8_COM_VCO_TUNE_CTRL 0x13c
#define QSERDES_V8_COM_VCO_TUNE_MAP 0x140
+#define QSERDES_V8_COM_CLK_SELECT 0x164
#define QSERDES_V8_COM_CORE_CLK_EN 0x170
#define QSERDES_V8_COM_CMN_CONFIG_1 0x174
+#define QSERDES_V8_COM_SVS_MODE_CLK_SEL 0x180
#define QSERDES_V8_COM_AUTO_GAIN_ADJ_CTRL_1 0x1a4
#define QSERDES_V8_COM_AUTO_GAIN_ADJ_CTRL_2 0x1a8
#define QSERDES_V8_COM_AUTO_GAIN_ADJ_CTRL_3 0x1ac
#define QSERDES_V8_COM_ADDITIONAL_MISC 0x1b4
#define QSERDES_V8_COM_CMN_STATUS 0x2c8
#define QSERDES_V8_COM_C_READY_STATUS 0x2f0
+#define QSERDES_V8_COM_CLK_FWD_CONFIG_1 0x2f4
#endif
--
2.45.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 3/3] phy: qcom: edp: Add Glymur platform support
2025-09-04 6:55 [PATCH 0/3] phy: qcom: edp: Add support for Glymur platform Abel Vesa
2025-09-04 6:55 ` [PATCH 1/3] dt-bindings: phy: Add DP PHY compatible for Glymur Abel Vesa
2025-09-04 6:55 ` [PATCH 2/3] phy: qcom-qmp: qserdes-com: Add some more v8 register offsets Abel Vesa
@ 2025-09-04 6:55 ` Abel Vesa
2025-09-05 8:23 ` Krzysztof Kozlowski
2 siblings, 1 reply; 9+ messages in thread
From: Abel Vesa @ 2025-09-04 6:55 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 | 239 ++++++++++++++++++++++++++++++++++--
1 file changed, 232 insertions(+), 7 deletions(-)
diff --git a/drivers/phy/qualcomm/phy-qcom-edp.c b/drivers/phy/qualcomm/phy-qcom-edp.c
index 116b7f7b4f8be93e5128c3cc6f382ce7576accbc..26af8d8db4d765ce35132a0fd092f8c8634e43d6 100644
--- a/drivers/phy/qualcomm/phy-qcom-edp.c
+++ b/drivers/phy/qualcomm/phy-qcom-edp.c
@@ -25,6 +25,7 @@
#include "phy-qcom-qmp-dp-phy.h"
#include "phy-qcom-qmp-qserdes-com-v4.h"
#include "phy-qcom-qmp-qserdes-com-v6.h"
+#include "phy-qcom-qmp-qserdes-com-v8.h"
/* EDP_PHY registers */
#define DP_PHY_CFG 0x0010
@@ -32,7 +33,7 @@
#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 +77,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 +85,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 +189,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 },
@@ -199,6 +207,14 @@ static const u8 edp_pre_emp_hbr2_hbr3_v5[4][4] = {
{ 0x0d, 0xff, 0xff, 0xff }
};
+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 const struct qcom_edp_swing_pre_emph_cfg edp_phy_swing_pre_emph_cfg_v5 = {
.swing_hbr_rbr = &edp_swing_hbr_rbr,
.swing_hbr3_hbr2 = &edp_swing_hbr2_hbr3,
@@ -224,7 +240,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 +272,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 +365,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 +418,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 +555,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,
};
@@ -538,16 +564,21 @@ static const struct qcom_edp_phy_cfg sa8775p_dp_phy_cfg = {
.is_edp = false,
.aux_cfg = edp_phy_aux_cfg_v5,
.swing_pre_emph_cfg = &edp_phy_swing_pre_emph_cfg_v5,
+ .vco_div_cfg = edp_phy_vco_div_cfg_v4,
.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,10 +586,37 @@ 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,
};
+static int qcom_edp_phy_com_resetsm_cntrl_v8(const struct qcom_edp *edp)
+{
+ u32 val;
+
+ writel(0x20, edp->pll + QSERDES_V8_COM_RESETSM_CNTRL);
+
+ return readl_poll_timeout(edp->pll + 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 + 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 + QSERDES_V8_COM_BIAS_EN_CLKBUFLR_EN);
+
+ return 0;
+}
+
static int qcom_edp_phy_power_on_v6(const struct qcom_edp *edp)
{
u32 val;
@@ -724,6 +782,139 @@ static int qcom_edp_com_configure_pll_v6(const struct qcom_edp *edp)
return 0;
}
+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 + QSERDES_V8_COM_SSC_EN_CENTER);
+ writel(0x00, edp->pll + QSERDES_V8_COM_SSC_ADJ_PER1);
+ writel(0x6b, edp->pll + QSERDES_V8_COM_SSC_PER1);
+ writel(0x02, edp->pll + QSERDES_V8_COM_SSC_PER2);
+ writel(step1, edp->pll + QSERDES_V8_COM_SSC_STEP_SIZE1_MODE0);
+ writel(step2, edp->pll + 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 + QSERDES_V8_COM_SVS_MODE_CLK_SEL);
+ writel(0x3b, edp->pll + QSERDES_V8_COM_SYSCLK_EN_SEL);
+ writel(0x02, edp->pll + QSERDES_V8_COM_SYS_CLK_CTRL);
+ writel(0x0c, edp->pll + QSERDES_V8_COM_CLK_ENABLE1);
+ writel(0x06, edp->pll + QSERDES_V8_COM_SYSCLK_BUF_ENABLE);
+ writel(0x30, edp->pll + QSERDES_V8_COM_CLK_SELECT);
+ writel(hsclk_sel, edp->pll + QSERDES_V8_COM_HSCLK_SEL_1);
+ writel(0x07, edp->pll + QSERDES_V8_COM_PLL_IVCO);
+ writel(0x00, edp->pll + QSERDES_V8_COM_LOCK_CMP_EN);
+ writel(0x36, edp->pll + QSERDES_V8_COM_PLL_CCTRL_MODE0);
+ writel(0x16, edp->pll + QSERDES_V8_COM_PLL_RCTRL_MODE0);
+ writel(0x06, edp->pll + QSERDES_V8_COM_CP_CTRL_MODE0);
+ writel(dec_start_mode0, edp->pll + QSERDES_V8_COM_DEC_START_MODE0);
+ writel(0x00, edp->pll + QSERDES_V8_COM_DIV_FRAC_START1_MODE0);
+ writel(div_frac_start2_mode0, edp->pll + QSERDES_V8_COM_DIV_FRAC_START2_MODE0);
+ writel(div_frac_start3_mode0, edp->pll + QSERDES_V8_COM_DIV_FRAC_START3_MODE0);
+ writel(0x96, edp->pll + QSERDES_V8_COM_CMN_CONFIG_1);
+ writel(0x3f, edp->pll + QSERDES_V8_COM_INTEGLOOP_GAIN0_MODE0);
+ writel(0x00, edp->pll + QSERDES_V8_COM_INTEGLOOP_GAIN1_MODE0);
+ writel(0x00, edp->pll + QSERDES_V8_COM_VCO_TUNE_MAP);
+ writel(lock_cmp1_mode0, edp->pll + QSERDES_V8_COM_LOCK_CMP1_MODE0);
+ writel(lock_cmp2_mode0, edp->pll + QSERDES_V8_COM_LOCK_CMP2_MODE0);
+
+ writel(0x0a, edp->pll + QSERDES_V8_COM_BG_TIMER);
+ writel(0x0a, edp->pll + QSERDES_V8_COM_CORECLK_DIV_MODE0);
+ writel(0x00, edp->pll + QSERDES_V8_COM_VCO_TUNE_CTRL);
+ writel(0x1f, edp->pll + QSERDES_V8_COM_BIAS_EN_CLKBUFLR_EN);
+ writel(0x00, edp->pll + QSERDES_V8_COM_CORE_CLK_EN);
+ writel(0xa0, edp->pll + QSERDES_V8_COM_VCO_TUNE1_MODE0);
+ writel(0x01, edp->pll + QSERDES_V8_COM_VCO_TUNE2_MODE0);
+
+ writel(code1_mode0, edp->pll + QSERDES_V8_COM_BIN_VCOCAL_CMP_CODE1_MODE0);
+ writel(code2_mode0, edp->pll + QSERDES_V8_COM_BIN_VCOCAL_CMP_CODE2_MODE0);
+
+ return 0;
+}
+
static const struct phy_ver_ops qcom_edp_phy_ops_v6 = {
.com_power_on = qcom_edp_phy_power_on_v6,
.com_resetsm_cntrl = qcom_edp_phy_com_resetsm_cntrl_v6,
@@ -732,12 +923,45 @@ static const struct phy_ver_ops qcom_edp_phy_ops_v6 = {
.com_configure_ssc = qcom_edp_com_configure_ssc_v6,
};
+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 + 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 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 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);
@@ -1141,6 +1365,7 @@ static const struct of_device_id qcom_edp_phy_match_table[] = {
{ .compatible = "qcom,sc8280xp-dp-phy", .data = &sc8280xp_dp_phy_cfg, },
{ .compatible = "qcom,sc8280xp-edp-phy", .data = &sc8280xp_edp_phy_cfg, },
{ .compatible = "qcom,x1e80100-dp-phy", .data = &x1e80100_phy_cfg, },
+ { .compatible = "qcom,glymur-dp-phy", .data = &glymur_phy_cfg, },
{ }
};
MODULE_DEVICE_TABLE(of, qcom_edp_phy_match_table);
--
2.45.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] phy: qcom-qmp: qserdes-com: Add some more v8 register offsets
2025-09-04 6:55 ` [PATCH 2/3] phy: qcom-qmp: qserdes-com: Add some more v8 register offsets Abel Vesa
@ 2025-09-04 10:47 ` Konrad Dybcio
2025-09-04 11:13 ` Dmitry Baryshkov
0 siblings, 1 reply; 9+ messages in thread
From: Konrad Dybcio @ 2025-09-04 10:47 UTC (permalink / raw)
To: Abel Vesa, Vinod Koul, Kishon Vijay Abraham I, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson,
Dmitry Baryshkov, Konrad Dybcio, Neil Armstrong, Wenbin Yao,
Qiang Yu
Cc: Johan Hovold, linux-arm-msm, linux-phy, devicetree, linux-kernel
On 9/4/25 8:55 AM, Abel Vesa wrote:
> Add the missing v8 register offsets needed by the eDP/DP PHY driver.
>
> Signed-off-by: Abel Vesa <abel.vesa@linaro.org>
> ---
+ a couple folks that I talked to about this lately
Please create a separate header for this, Glymur contains multiple
"v8"/"v8.x" PHYs that are not identical to one another (or vs ones
present on different SoCs), even if advertising that revision
It may be a partial match, but there are also stark differences
Konrad
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] phy: qcom-qmp: qserdes-com: Add some more v8 register offsets
2025-09-04 10:47 ` Konrad Dybcio
@ 2025-09-04 11:13 ` Dmitry Baryshkov
2025-09-04 11:15 ` Konrad Dybcio
0 siblings, 1 reply; 9+ messages in thread
From: Dmitry Baryshkov @ 2025-09-04 11:13 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, Wenbin Yao,
Qiang Yu, Johan Hovold, linux-arm-msm, linux-phy, devicetree,
linux-kernel
On Thu, Sep 04, 2025 at 12:47:43PM +0200, Konrad Dybcio wrote:
> On 9/4/25 8:55 AM, Abel Vesa wrote:
> > Add the missing v8 register offsets needed by the eDP/DP PHY driver.
> >
> > Signed-off-by: Abel Vesa <abel.vesa@linaro.org>
> > ---
>
> + a couple folks that I talked to about this lately
>
> Please create a separate header for this, Glymur contains multiple
> "v8"/"v8.x" PHYs that are not identical to one another (or vs ones
> present on different SoCs), even if advertising that revision
Is it about v8 vs v8.xx ?
>
> It may be a partial match, but there are also stark differences
>
> Konrad
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] phy: qcom-qmp: qserdes-com: Add some more v8 register offsets
2025-09-04 11:13 ` Dmitry Baryshkov
@ 2025-09-04 11:15 ` Konrad Dybcio
0 siblings, 0 replies; 9+ messages in thread
From: Konrad Dybcio @ 2025-09-04 11:15 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: Abel Vesa, Vinod Koul, Kishon Vijay Abraham I, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Bjorn Andersson,
Dmitry Baryshkov, Konrad Dybcio, Neil Armstrong, Wenbin Yao,
Qiang Yu, Johan Hovold, linux-arm-msm, linux-phy, devicetree,
linux-kernel
On 9/4/25 1:13 PM, Dmitry Baryshkov wrote:
> On Thu, Sep 04, 2025 at 12:47:43PM +0200, Konrad Dybcio wrote:
>> On 9/4/25 8:55 AM, Abel Vesa wrote:
>>> Add the missing v8 register offsets needed by the eDP/DP PHY driver.
>>>
>>> Signed-off-by: Abel Vesa <abel.vesa@linaro.org>
>>> ---
>>
>> + a couple folks that I talked to about this lately
>>
>> Please create a separate header for this, Glymur contains multiple
>> "v8"/"v8.x" PHYs that are not identical to one another (or vs ones
>> present on different SoCs), even if advertising that revision
>
> Is it about v8 vs v8.xx ?
No
Two (different protocol) PHYs with the same revision data (rev_id
register) may have completely different register maps (even in the
COM region), both across SoCs and in (at least) Glymur's case, on
the same die
Two instances of the same PHY (e.g. 2 usb combo PHYs) will not have
such differences, just to make it clear
Konrad
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/3] dt-bindings: phy: Add DP PHY compatible for Glymur
2025-09-04 6:55 ` [PATCH 1/3] dt-bindings: phy: Add DP PHY compatible for Glymur Abel Vesa
@ 2025-09-05 8:22 ` Krzysztof Kozlowski
0 siblings, 0 replies; 9+ messages in thread
From: Krzysztof Kozlowski @ 2025-09-05 8:22 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 Thu, Sep 04, 2025 at 09:55:51AM +0300, Abel Vesa wrote:
> 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 a8ba0aa9ff9d83f317bd897a7d564f7e13f6a1e2..e572f6ea3523a483f701aedab383a63af7abe0e5 100644
> --- a/Documentation/devicetree/bindings/phy/qcom,edp-phy.yaml
> +++ b/Documentation/devicetree/bindings/phy/qcom,edp-phy.yaml
> @@ -24,6 +24,7 @@ properties:
> - qcom,sc8280xp-dp-phy
> - qcom,sc8280xp-edp-phy
> - qcom,x1e80100-dp-phy
> + - qcom,glymur-dp-phy
Please keep alphabetical order. We never add things to the end of lists.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 3/3] phy: qcom: edp: Add Glymur platform support
2025-09-04 6:55 ` [PATCH 3/3] phy: qcom: edp: Add Glymur platform support Abel Vesa
@ 2025-09-05 8:23 ` Krzysztof Kozlowski
0 siblings, 0 replies; 9+ messages in thread
From: Krzysztof Kozlowski @ 2025-09-05 8:23 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 Thu, Sep 04, 2025 at 09:55:53AM +0300, Abel Vesa wrote:
> 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 struct qcom_edp_phy_cfg glymur_phy_cfg = {
g<x
> + .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);
> @@ -1141,6 +1365,7 @@ static const struct of_device_id qcom_edp_phy_match_table[] = {
> { .compatible = "qcom,sc8280xp-dp-phy", .data = &sc8280xp_dp_phy_cfg, },
> { .compatible = "qcom,sc8280xp-edp-phy", .data = &sc8280xp_edp_phy_cfg, },
> { .compatible = "qcom,x1e80100-dp-phy", .data = &x1e80100_phy_cfg, },
> + { .compatible = "qcom,glymur-dp-phy", .data = &glymur_phy_cfg, },
Don't stuff things to the end of lists.
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2025-09-05 8:23 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-09-04 6:55 [PATCH 0/3] phy: qcom: edp: Add support for Glymur platform Abel Vesa
2025-09-04 6:55 ` [PATCH 1/3] dt-bindings: phy: Add DP PHY compatible for Glymur Abel Vesa
2025-09-05 8:22 ` Krzysztof Kozlowski
2025-09-04 6:55 ` [PATCH 2/3] phy: qcom-qmp: qserdes-com: Add some more v8 register offsets Abel Vesa
2025-09-04 10:47 ` Konrad Dybcio
2025-09-04 11:13 ` Dmitry Baryshkov
2025-09-04 11:15 ` Konrad Dybcio
2025-09-04 6:55 ` [PATCH 3/3] phy: qcom: edp: Add Glymur platform support Abel Vesa
2025-09-05 8:23 ` Krzysztof Kozlowski
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).