[PATCH] drm/msm/dpu: make error messages at dpu_core_irq_register_callback() more sensible

2024-03-29 Thread Dmitry Baryshkov
There is little point in using %ps to print a value known to be NULL. On
the other hand it makes sense to print the callback symbol in the
'invalid IRQ' message. Correct those two error messages to make more
sense.

Fixes: 6893199183f8 ("drm/msm/dpu: stop using raw IRQ indices in the kernel 
output")
Signed-off-by: Dmitry Baryshkov 
---
 drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c | 8 
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c 
b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c
index 946dd0135dff..6a0a74832fb6 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_interrupts.c
@@ -525,14 +525,14 @@ int dpu_core_irq_register_callback(struct dpu_kms 
*dpu_kms,
int ret;
 
if (!irq_cb) {
-   DPU_ERROR("invalid IRQ=[%d, %d] irq_cb:%ps\n",
- DPU_IRQ_REG(irq_idx), DPU_IRQ_BIT(irq_idx), irq_cb);
+   DPU_ERROR("IRQ=[%d, %d] NULL callback\n",
+ DPU_IRQ_REG(irq_idx), DPU_IRQ_BIT(irq_idx));
return -EINVAL;
}
 
if (!dpu_core_irq_is_valid(irq_idx)) {
-   DPU_ERROR("invalid IRQ=[%d, %d]\n",
- DPU_IRQ_REG(irq_idx), DPU_IRQ_BIT(irq_idx));
+   DPU_ERROR("invalid IRQ=[%d, %d] irq_cb:%ps\n",
+ DPU_IRQ_REG(irq_idx), DPU_IRQ_BIT(irq_idx), irq_cb);
return -EINVAL;
}
 

---
base-commit: 13ee4a7161b6fd938aef6688ff43b163f6d83e37
change-id: 20240330-dpu-irq-messages-5cf13fd7568c

Best regards,
-- 
Dmitry Baryshkov 



[PATCH] drm/msm/dpu: fix vblank IRQ handling for command panels

2024-03-29 Thread Dmitry Baryshkov
In case of CMD DSI panels, the vblank IRQ can be used outside of
irq_enable/irq_disable pair. This results in the following kind of
messages. Move assignment of IRQ indices to atomic_enable /
atomic_disable callbacks.

[dpu error]invalid IRQ=[134217727, 31]
[drm:dpu_encoder_phys_cmd_control_vblank_irq] *ERROR* vblank irq err id:31 pp:0 
ret:-22, enable true/0
[drm:dpu_encoder_phys_cmd_control_vblank_irq] *ERROR* vblank irq err id:31 pp:0 
ret:-22, enable false/0

Fixes: d13f638c9b88 ("drm/msm/dpu: drop dpu_encoder_phys_ops.atomic_mode_set")
Signed-off-by: Dmitry Baryshkov 
---
 .../gpu/drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c   | 24 +++---
 1 file changed, 12 insertions(+), 12 deletions(-)

diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c 
b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c
index fc1d5736d7fc..2a2b607bd1ab 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder_phys_cmd.c
@@ -280,14 +280,6 @@ static void dpu_encoder_phys_cmd_irq_enable(struct 
dpu_encoder_phys *phys_enc)
  phys_enc->hw_pp->idx - PINGPONG_0,
  phys_enc->vblank_refcount);
 
-   phys_enc->irq[INTR_IDX_CTL_START] = phys_enc->hw_ctl->caps->intr_start;
-   phys_enc->irq[INTR_IDX_PINGPONG] = phys_enc->hw_pp->caps->intr_done;
-
-   if (phys_enc->has_intf_te)
-   phys_enc->irq[INTR_IDX_RDPTR] = 
phys_enc->hw_intf->cap->intr_tear_rd_ptr;
-   else
-   phys_enc->irq[INTR_IDX_RDPTR] = 
phys_enc->hw_pp->caps->intr_rdptr;
-
dpu_core_irq_register_callback(phys_enc->dpu_kms,
   phys_enc->irq[INTR_IDX_PINGPONG],
   dpu_encoder_phys_cmd_pp_tx_done_irq,
@@ -318,10 +310,6 @@ static void dpu_encoder_phys_cmd_irq_disable(struct 
dpu_encoder_phys *phys_enc)
dpu_core_irq_unregister_callback(phys_enc->dpu_kms, 
phys_enc->irq[INTR_IDX_UNDERRUN]);
dpu_encoder_phys_cmd_control_vblank_irq(phys_enc, false);
dpu_core_irq_unregister_callback(phys_enc->dpu_kms, 
phys_enc->irq[INTR_IDX_PINGPONG]);
-
-   phys_enc->irq[INTR_IDX_CTL_START] = 0;
-   phys_enc->irq[INTR_IDX_PINGPONG] = 0;
-   phys_enc->irq[INTR_IDX_RDPTR] = 0;
 }
 
 static void dpu_encoder_phys_cmd_tearcheck_config(
@@ -472,6 +460,14 @@ static void dpu_encoder_phys_cmd_enable(struct 
dpu_encoder_phys *phys_enc)
return;
}
 
+   phys_enc->irq[INTR_IDX_CTL_START] = phys_enc->hw_ctl->caps->intr_start;
+   phys_enc->irq[INTR_IDX_PINGPONG] = phys_enc->hw_pp->caps->intr_done;
+
+   if (phys_enc->has_intf_te)
+   phys_enc->irq[INTR_IDX_RDPTR] = 
phys_enc->hw_intf->cap->intr_tear_rd_ptr;
+   else
+   phys_enc->irq[INTR_IDX_RDPTR] = 
phys_enc->hw_pp->caps->intr_rdptr;
+
dpu_encoder_phys_cmd_enable_helper(phys_enc);
phys_enc->enable_state = DPU_ENC_ENABLED;
 }
@@ -563,6 +559,10 @@ static void dpu_encoder_phys_cmd_disable(struct 
dpu_encoder_phys *phys_enc)
ctl->ops.update_pending_flush_intf(ctl, phys_enc->hw_intf->idx);
}
 
+   phys_enc->irq[INTR_IDX_CTL_START] = 0;
+   phys_enc->irq[INTR_IDX_PINGPONG] = 0;
+   phys_enc->irq[INTR_IDX_RDPTR] = 0;
+
phys_enc->enable_state = DPU_ENC_DISABLED;
 }
 

---
base-commit: 13ee4a7161b6fd938aef6688ff43b163f6d83e37
change-id: 20240330-dpu-fix-irqs-56eb08fcb9d4

Best regards,
-- 
Dmitry Baryshkov 



Re: [PATCH] drm/msm/dp: allow voltage swing / pre emphasis of 3

2024-03-29 Thread Abhinav Kumar

Hi Doug

On 3/29/2024 4:07 PM, Doug Anderson wrote:

Hi,

On Sat, Feb 3, 2024 at 5:47 AM Dmitry Baryshkov
 wrote:


Both dp_link_adjust_levels() and dp_ctrl_update_vx_px() limit swing and
pre-emphasis to 2, while the real maximum value for the sum of the
voltage swing and pre-emphasis is 3. Fix the DP code to remove this
limitation.

Fixes: c943b4948b58 ("drm/msm/dp: add displayPort driver support")
Signed-off-by: Dmitry Baryshkov 
---
  drivers/gpu/drm/msm/dp/dp_ctrl.c |  6 +++---
  drivers/gpu/drm/msm/dp/dp_link.c | 22 +++---
  drivers/gpu/drm/msm/dp/dp_link.h | 14 +-
  3 files changed, 15 insertions(+), 27 deletions(-)


What ever happened with this patch? It seemed important so I've been
trying to check back on it, but it seems to still be in limbo. I was
assuming that (maybe?) Abhinav would check things against the hardware
documentation and give it a Reviewed-by and then it would land...

-Doug


The issue for which this patch was originally made (DP link training 
issue on x1e80100) was not getting fixed by this patch.


That one turned out as actually a PLL locking issue. So this kind of 
went off the radar as it was not immediately needed to fix anything.


I will wait for Kuogee's response on this patch. He was OOO entire Feb 
so this got missed.


Re: [PATCH] drm/msm/dp: allow voltage swing / pre emphasis of 3

2024-03-29 Thread Doug Anderson
Hi,

On Sat, Feb 3, 2024 at 5:47 AM Dmitry Baryshkov
 wrote:
>
> Both dp_link_adjust_levels() and dp_ctrl_update_vx_px() limit swing and
> pre-emphasis to 2, while the real maximum value for the sum of the
> voltage swing and pre-emphasis is 3. Fix the DP code to remove this
> limitation.
>
> Fixes: c943b4948b58 ("drm/msm/dp: add displayPort driver support")
> Signed-off-by: Dmitry Baryshkov 
> ---
>  drivers/gpu/drm/msm/dp/dp_ctrl.c |  6 +++---
>  drivers/gpu/drm/msm/dp/dp_link.c | 22 +++---
>  drivers/gpu/drm/msm/dp/dp_link.h | 14 +-
>  3 files changed, 15 insertions(+), 27 deletions(-)

What ever happened with this patch? It seemed important so I've been
trying to check back on it, but it seems to still be in limbo. I was
assuming that (maybe?) Abhinav would check things against the hardware
documentation and give it a Reviewed-by and then it would land...

-Doug


[PATCH v3] phy/qcom-qmp-combo: propagate correct return value at phy_power_on()

2024-03-29 Thread Kuogee Hsieh
Currently qmp_combo_dp_power_on() always return 0 in regardless of
return value of cfg->configure_dp_phy(). This patch propagate
return value of cfg->configure_dp_phy() all the way back to caller.

Changes in V3:
-- add v2 changes log

Changes in V2:
-- add Fixes tag
-- add dev_err() to qmp_v3_configure_dp_phy()
-- add dev_err() to qmp_v4_configure_dp_phy()

Fixes: 52e013d0bffa ("phy: qcom-qmp: Add support for DP in USB3+DP combo phy")
Signed-off-by: Kuogee Hsieh 
Reviewed-by: Abhinav Kumar 
---
 drivers/phy/qualcomm/phy-qcom-qmp-combo.c | 13 +
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-combo.c 
b/drivers/phy/qualcomm/phy-qcom-qmp-combo.c
index 36632fa..513d99d 100644
--- a/drivers/phy/qualcomm/phy-qcom-qmp-combo.c
+++ b/drivers/phy/qualcomm/phy-qcom-qmp-combo.c
@@ -2343,8 +2343,10 @@ static int qmp_v3_configure_dp_phy(struct qmp_combo *qmp)
writel(0x05, qmp->dp_dp_phy + QSERDES_V3_DP_PHY_TX2_TX3_LANE_CTL);
 
ret = qmp_combo_configure_dp_clocks(qmp);
-   if (ret)
+   if (ret) {
+   dev_err(qmp->dev, "dp phy configure failed, err=%d\n", ret);
return ret;
+   }
 
writel(0x04, qmp->dp_dp_phy + QSERDES_DP_PHY_AUX_CFG2);
writel(0x01, qmp->dp_dp_phy + QSERDES_DP_PHY_CFG);
@@ -2519,8 +2521,10 @@ static int qmp_v4_configure_dp_phy(struct qmp_combo *qmp)
int ret;
 
ret = qmp_v456_configure_dp_phy(qmp);
-   if (ret < 0)
+   if (ret < 0) {
+   dev_err(qmp->dev, "dp phy configure failed, err=%d\n", ret);
return ret;
+   }
 
/*
 * At least for 7nm DP PHY this has to be done after enabling link
@@ -2754,6 +2758,7 @@ static int qmp_combo_dp_power_on(struct phy *phy)
const struct qmp_phy_cfg *cfg = qmp->cfg;
void __iomem *tx = qmp->dp_tx;
void __iomem *tx2 = qmp->dp_tx2;
+   int ret;
 
mutex_lock(>phy_mutex);
 
@@ -2766,11 +2771,11 @@ static int qmp_combo_dp_power_on(struct phy *phy)
cfg->configure_dp_tx(qmp);
 
/* Configure link rate, swing, etc. */
-   cfg->configure_dp_phy(qmp);
+   ret = cfg->configure_dp_phy(qmp);
 
mutex_unlock(>phy_mutex);
 
-   return 0;
+   return ret;
 }
 
 static int qmp_combo_dp_power_off(struct phy *phy)
-- 
2.7.4



[PATCH v3] drm/msm/dp: assign correct DP controller ID to x1e80100 interface table

2024-03-29 Thread Kuogee Hsieh
At current x1e80100 interface table, interface #3 is wrongly
connected to DP controller #0 and interface #4 wrongly connected
to DP controller #2. Fix this problem by connect Interface #3 to
DP controller #0 and interface #4 connect to DP controller #1.
Also add interface #6, #7 and #8 connections to DP controller to
complete x1e80100 interface table.

Changs in V3:
-- add v2 changes log

Changs in V2:
-- add x1e80100 to subject
-- add Fixes

Fixes: e3b1f369db5a ("drm/msm/dpu: Add X1E80100 support")
Signed-off-by: Kuogee Hsieh 
Reviewed-by: Abhinav Kumar 
Reviewed-by: Abel Vesa 
---
 .../drm/msm/disp/dpu1/catalog/dpu_9_2_x1e80100.h   | 34 --
 1 file changed, 31 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_9_2_x1e80100.h 
b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_9_2_x1e80100.h
index 9a9f709..a3e60ac 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_9_2_x1e80100.h
+++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_9_2_x1e80100.h
@@ -324,6 +324,7 @@ static const struct dpu_wb_cfg x1e80100_wb[] = {
},
 };
 
+/* TODO: INTF 3, 8 and 7 are used for MST, marked as INTF_NONE for now */
 static const struct dpu_intf_cfg x1e80100_intf[] = {
{
.name = "intf_0", .id = INTF_0,
@@ -358,8 +359,8 @@ static const struct dpu_intf_cfg x1e80100_intf[] = {
.name = "intf_3", .id = INTF_3,
.base = 0x37000, .len = 0x280,
.features = INTF_SC7280_MASK,
-   .type = INTF_DP,
-   .controller_id = MSM_DP_CONTROLLER_1,
+   .type = INTF_NONE,
+   .controller_id = MSM_DP_CONTROLLER_0,   /* pair with intf_0 for 
DP MST */
.prog_fetch_lines_worst_case = 24,
.intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 30),
.intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 31),
@@ -368,7 +369,7 @@ static const struct dpu_intf_cfg x1e80100_intf[] = {
.base = 0x38000, .len = 0x280,
.features = INTF_SC7280_MASK,
.type = INTF_DP,
-   .controller_id = MSM_DP_CONTROLLER_2,
+   .controller_id = MSM_DP_CONTROLLER_1,
.prog_fetch_lines_worst_case = 24,
.intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 20),
.intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 21),
@@ -381,6 +382,33 @@ static const struct dpu_intf_cfg x1e80100_intf[] = {
.prog_fetch_lines_worst_case = 24,
.intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 22),
.intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 23),
+   }, {
+   .name = "intf_6", .id = INTF_6,
+   .base = 0x3A000, .len = 0x280,
+   .features = INTF_SC7280_MASK,
+   .type = INTF_DP,
+   .controller_id = MSM_DP_CONTROLLER_2,
+   .prog_fetch_lines_worst_case = 24,
+   .intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 17),
+   .intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 16),
+   }, {
+   .name = "intf_7", .id = INTF_7,
+   .base = 0x3b000, .len = 0x280,
+   .features = INTF_SC7280_MASK,
+   .type = INTF_NONE,
+   .controller_id = MSM_DP_CONTROLLER_2,   /* pair with intf_6 for 
DP MST */
+   .prog_fetch_lines_worst_case = 24,
+   .intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 18),
+   .intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 19),
+   }, {
+   .name = "intf_8", .id = INTF_8,
+   .base = 0x3c000, .len = 0x280,
+   .features = INTF_SC7280_MASK,
+   .type = INTF_NONE,
+   .controller_id = MSM_DP_CONTROLLER_1,   /* pair with intf_4 for 
DP MST */
+   .prog_fetch_lines_worst_case = 24,
+   .intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12),
+   .intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 13),
},
 };
 
-- 
2.7.4



Re: [PATCH] drm/msm: fix the `CRASHDUMP_READ` target of `a6xx_get_shader_block()`

2024-03-29 Thread Abhinav Kumar




On 3/26/2024 2:23 PM, Miguel Ojeda wrote:

Clang 14 in an (essentially) defconfig arm64 build for next-20240326
reports [1]:

 drivers/gpu/drm/msm/adreno/a6xx_gpu_state.c:843:6: error:
 variable 'out' set but not used [-Werror,-Wunused-but-set-variable]

The variable `out` in these functions is meant to compute the `target` of
`CRASHDUMP_READ()`, but in this case only the initial value (`dumper->iova
+ A6XX_CD_DATA_OFFSET`) was being passed.

Thus use `out` as it was intended by Connor [2].

There was an alternative patch at [3] that removed the variable
altogether, but that would only use the initial value.

Fixes: 64d6255650d4 ("drm/msm: More fully implement devcoredump for a7xx")
Closes: 
https://lore.kernel.org/lkml/caniq72mjc5t4n25sqvysroehxxpxypz4ppznesjhenc3qap...@mail.gmail.com/
 [1]
Link: 
https://lore.kernel.org/lkml/cacu1e7hhckmjd6fixzspinaz6ekoznkmthtclfvmbz-9vol...@mail.gmail.com/
 [2]
Link: 
https://lore.kernel.org/lkml/20240307093727.1978126-1-colin.i.k...@gmail.com/ 
[3]
Signed-off-by: Miguel Ojeda 
---



LGTM,

Reviewed-by: Abhinav Kumar 


Re: [PATCH v2] drm/msm/dp: assign correct DP controller ID to x1e80100 interface table

2024-03-29 Thread Dmitry Baryshkov
On Fri, 29 Mar 2024 at 18:48, Kuogee Hsieh  wrote:
>
> At current x1e80100 interface table, interface #3 is wrongly
> connected to DP controller #0 and interface #4 wrongly connected
> to DP controller #2. Fix this problem by connect Interface #3 to
> DP controller #0 and interface #4 connect to DP controller #1.
> Also add interface #6, #7 and #8 connections to DP controller to
> complete x1e80100 interface table.
>
> Fixes: e3b1f369db5a ("drm/msm/dpu: Add X1E80100 support")
> Signed-off-by: Kuogee Hsieh 
> Reviewed-by: Abhinav Kumar 
> Reviewed-by: Abel Vesa 

Changelog?

> ---
>  .../drm/msm/disp/dpu1/catalog/dpu_9_2_x1e80100.h   | 34 
> --
>  1 file changed, 31 insertions(+), 3 deletions(-)
>


-- 
With best wishes
Dmitry


Re: [PATCH v2] phy/qcom-qmp-combo: propagate correct return value at phy_power_on()

2024-03-29 Thread Abhinav Kumar




On 3/29/2024 9:41 AM, Kuogee Hsieh wrote:

Currently qmp_combo_dp_power_on() always return 0 in regardless of
return value of cfg->configure_dp_phy(). This patch propagate
return value of cfg->configure_dp_phy() all the way back to caller.

Fixes: 52e013d0bffa ("phy: qcom-qmp: Add support for DP in USB3+DP combo phy")
Signed-off-by: Kuogee Hsieh 
---
  drivers/phy/qualcomm/phy-qcom-qmp-combo.c | 13 +
  1 file changed, 9 insertions(+), 4 deletions(-)



Thanks for the cleanup!

Reviewed-by: Abhinav Kumar 


[PATCH v2] drm/msm/dp: assign correct DP controller ID to x1e80100 interface table

2024-03-29 Thread Kuogee Hsieh
At current x1e80100 interface table, interface #3 is wrongly
connected to DP controller #0 and interface #4 wrongly connected
to DP controller #2. Fix this problem by connect Interface #3 to
DP controller #0 and interface #4 connect to DP controller #1.
Also add interface #6, #7 and #8 connections to DP controller to
complete x1e80100 interface table.

Fixes: e3b1f369db5a ("drm/msm/dpu: Add X1E80100 support")
Signed-off-by: Kuogee Hsieh 
Reviewed-by: Abhinav Kumar 
Reviewed-by: Abel Vesa 
---
 .../drm/msm/disp/dpu1/catalog/dpu_9_2_x1e80100.h   | 34 --
 1 file changed, 31 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_9_2_x1e80100.h 
b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_9_2_x1e80100.h
index 9a9f709..a3e60ac 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_9_2_x1e80100.h
+++ b/drivers/gpu/drm/msm/disp/dpu1/catalog/dpu_9_2_x1e80100.h
@@ -324,6 +324,7 @@ static const struct dpu_wb_cfg x1e80100_wb[] = {
},
 };
 
+/* TODO: INTF 3, 8 and 7 are used for MST, marked as INTF_NONE for now */
 static const struct dpu_intf_cfg x1e80100_intf[] = {
{
.name = "intf_0", .id = INTF_0,
@@ -358,8 +359,8 @@ static const struct dpu_intf_cfg x1e80100_intf[] = {
.name = "intf_3", .id = INTF_3,
.base = 0x37000, .len = 0x280,
.features = INTF_SC7280_MASK,
-   .type = INTF_DP,
-   .controller_id = MSM_DP_CONTROLLER_1,
+   .type = INTF_NONE,
+   .controller_id = MSM_DP_CONTROLLER_0,   /* pair with intf_0 for 
DP MST */
.prog_fetch_lines_worst_case = 24,
.intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 30),
.intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 31),
@@ -368,7 +369,7 @@ static const struct dpu_intf_cfg x1e80100_intf[] = {
.base = 0x38000, .len = 0x280,
.features = INTF_SC7280_MASK,
.type = INTF_DP,
-   .controller_id = MSM_DP_CONTROLLER_2,
+   .controller_id = MSM_DP_CONTROLLER_1,
.prog_fetch_lines_worst_case = 24,
.intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 20),
.intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 21),
@@ -381,6 +382,33 @@ static const struct dpu_intf_cfg x1e80100_intf[] = {
.prog_fetch_lines_worst_case = 24,
.intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 22),
.intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 23),
+   }, {
+   .name = "intf_6", .id = INTF_6,
+   .base = 0x3A000, .len = 0x280,
+   .features = INTF_SC7280_MASK,
+   .type = INTF_DP,
+   .controller_id = MSM_DP_CONTROLLER_2,
+   .prog_fetch_lines_worst_case = 24,
+   .intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 17),
+   .intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 16),
+   }, {
+   .name = "intf_7", .id = INTF_7,
+   .base = 0x3b000, .len = 0x280,
+   .features = INTF_SC7280_MASK,
+   .type = INTF_NONE,
+   .controller_id = MSM_DP_CONTROLLER_2,   /* pair with intf_6 for 
DP MST */
+   .prog_fetch_lines_worst_case = 24,
+   .intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 18),
+   .intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 19),
+   }, {
+   .name = "intf_8", .id = INTF_8,
+   .base = 0x3c000, .len = 0x280,
+   .features = INTF_SC7280_MASK,
+   .type = INTF_NONE,
+   .controller_id = MSM_DP_CONTROLLER_1,   /* pair with intf_4 for 
DP MST */
+   .prog_fetch_lines_worst_case = 24,
+   .intr_underrun = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 12),
+   .intr_vsync = DPU_IRQ_IDX(MDP_SSPP_TOP0_INTR, 13),
},
 };
 
-- 
2.7.4



[PATCH v2] phy/qcom-qmp-combo: propagate correct return value at phy_power_on()

2024-03-29 Thread Kuogee Hsieh
Currently qmp_combo_dp_power_on() always return 0 in regardless of
return value of cfg->configure_dp_phy(). This patch propagate
return value of cfg->configure_dp_phy() all the way back to caller.

Fixes: 52e013d0bffa ("phy: qcom-qmp: Add support for DP in USB3+DP combo phy")
Signed-off-by: Kuogee Hsieh 
---
 drivers/phy/qualcomm/phy-qcom-qmp-combo.c | 13 +
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/drivers/phy/qualcomm/phy-qcom-qmp-combo.c 
b/drivers/phy/qualcomm/phy-qcom-qmp-combo.c
index 36632fa..513d99d 100644
--- a/drivers/phy/qualcomm/phy-qcom-qmp-combo.c
+++ b/drivers/phy/qualcomm/phy-qcom-qmp-combo.c
@@ -2343,8 +2343,10 @@ static int qmp_v3_configure_dp_phy(struct qmp_combo *qmp)
writel(0x05, qmp->dp_dp_phy + QSERDES_V3_DP_PHY_TX2_TX3_LANE_CTL);
 
ret = qmp_combo_configure_dp_clocks(qmp);
-   if (ret)
+   if (ret) {
+   dev_err(qmp->dev, "dp phy configure failed, err=%d\n", ret);
return ret;
+   }
 
writel(0x04, qmp->dp_dp_phy + QSERDES_DP_PHY_AUX_CFG2);
writel(0x01, qmp->dp_dp_phy + QSERDES_DP_PHY_CFG);
@@ -2519,8 +2521,10 @@ static int qmp_v4_configure_dp_phy(struct qmp_combo *qmp)
int ret;
 
ret = qmp_v456_configure_dp_phy(qmp);
-   if (ret < 0)
+   if (ret < 0) {
+   dev_err(qmp->dev, "dp phy configure failed, err=%d\n", ret);
return ret;
+   }
 
/*
 * At least for 7nm DP PHY this has to be done after enabling link
@@ -2754,6 +2758,7 @@ static int qmp_combo_dp_power_on(struct phy *phy)
const struct qmp_phy_cfg *cfg = qmp->cfg;
void __iomem *tx = qmp->dp_tx;
void __iomem *tx2 = qmp->dp_tx2;
+   int ret;
 
mutex_lock(>phy_mutex);
 
@@ -2766,11 +2771,11 @@ static int qmp_combo_dp_power_on(struct phy *phy)
cfg->configure_dp_tx(qmp);
 
/* Configure link rate, swing, etc. */
-   cfg->configure_dp_phy(qmp);
+   ret = cfg->configure_dp_phy(qmp);
 
mutex_unlock(>phy_mutex);
 
-   return 0;
+   return ret;
 }
 
 static int qmp_combo_dp_power_off(struct phy *phy)
-- 
2.7.4



Re: [PATCH] drm/msm/dp: Remove now unused connector_type from desc

2024-03-29 Thread Bjorn Andersson
On Fri, Mar 29, 2024 at 07:23:07AM +0200, Dmitry Baryshkov wrote:
> On Fri, 29 Mar 2024 at 06:02, Bjorn Andersson  
> wrote:
> > diff --git a/drivers/gpu/drm/msm/dp/dp_display.c 
> > b/drivers/gpu/drm/msm/dp/dp_display.c
[..]
> >  static const struct msm_dp_desc sc8280xp_edp_descs[] = {
> 
> This can now be merged with sc8280xp_dp_descs
> 

You're right, only saw the first level of cleanup. Will repsin this.

Thanks,
Bjorn


Re: [PATCH 2/3] dt-bindings: display: panel: visionox, vtdr6130: Add mode property

2024-03-29 Thread Krzysztof Kozlowski
On 28/03/2024 12:11, Jun Nie wrote:
> Add DSI mode property and compression mode property
> 
> Signed-off-by: Jun Nie 
> ---
>  .../bindings/display/panel/visionox,vtdr6130.yaml | 8 
>  1 file changed, 8 insertions(+)
> 

Please use scripts/get_maintainers.pl to get a list of necessary people
and lists to CC. It might happen, that command when run on an older
kernel, gives you outdated entries. Therefore please be sure you base
your patches on recent Linux kernel.

Tools like b4 or scripts/get_maintainer.pl provide you proper list of
people, so fix your workflow. Tools might also fail if you work on some
ancient tree (don't, instead use mainline), work on fork of kernel
(don't, instead use mainline) or you ignore some maintainers (really
don't). Just use b4 and everything should be fine, although remember
about `b4 prep --auto-to-cc` if you added new patches to the patchset.

You missed at least devicetree list (maybe more), so this won't be
tested by automated tooling. Performing review on untested code might be
a waste of time, thus I will skip this patch entirely till you follow
the process allowing the patch to be tested.

Please kindly resend and include all necessary To/Cc entries.


Best regards,
Krzysztof



Re: [PATCH v2 3/3] arm64: dts: qcom: sm6350: Add DisplayPort controller

2024-03-29 Thread Konrad Dybcio
On 29.03.2024 8:45 AM, Luca Weiss wrote:
> Add the node for the DisplayPort controller found on the SM6350 SoC.
> 
> Reviewed-by: Dmitry Baryshkov 
> Signed-off-by: Luca Weiss 
> ---

Reviewed-by: Konrad Dybcio 

Konrad


[PATCH v2 1/3] dt-bindings: display: msm: dp-controller: document SM6350 compatible

2024-03-29 Thread Luca Weiss
Add the compatible string for the DisplayPort controller on SM6350 which
is compatible with the one on SM8350.

Acked-by: Rob Herring 
Signed-off-by: Luca Weiss 
---
 Documentation/devicetree/bindings/display/msm/dp-controller.yaml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/display/msm/dp-controller.yaml 
b/Documentation/devicetree/bindings/display/msm/dp-controller.yaml
index ae53cbfb2193..97993feda193 100644
--- a/Documentation/devicetree/bindings/display/msm/dp-controller.yaml
+++ b/Documentation/devicetree/bindings/display/msm/dp-controller.yaml
@@ -29,6 +29,7 @@ properties:
   - qcom,sm8650-dp
   - items:
   - enum:
+  - qcom,sm6350-dp
   - qcom,sm8150-dp
   - qcom,sm8250-dp
   - qcom,sm8450-dp

-- 
2.44.0



[PATCH v2 2/3] dt-bindings: display: msm: sm6350-mdss: document DP controller subnode

2024-03-29 Thread Luca Weiss
Document the displayport controller subnode of the SM6350 MDSS.

Signed-off-by: Luca Weiss 
---
 .../devicetree/bindings/display/msm/qcom,sm6350-mdss.yaml| 9 +
 1 file changed, 9 insertions(+)

diff --git 
a/Documentation/devicetree/bindings/display/msm/qcom,sm6350-mdss.yaml 
b/Documentation/devicetree/bindings/display/msm/qcom,sm6350-mdss.yaml
index c9ba1fae8042..bba666bdffe5 100644
--- a/Documentation/devicetree/bindings/display/msm/qcom,sm6350-mdss.yaml
+++ b/Documentation/devicetree/bindings/display/msm/qcom,sm6350-mdss.yaml
@@ -53,6 +53,15 @@ patternProperties:
   compatible:
 const: qcom,sm6350-dpu
 
+  "^displayport-controller@[0-9a-f]+$":
+type: object
+additionalProperties: true
+
+properties:
+  compatible:
+contains:
+  const: qcom,sm6350-dp
+
   "^dsi@[0-9a-f]+$":
 type: object
 additionalProperties: true

-- 
2.44.0



[PATCH v2 3/3] arm64: dts: qcom: sm6350: Add DisplayPort controller

2024-03-29 Thread Luca Weiss
Add the node for the DisplayPort controller found on the SM6350 SoC.

Reviewed-by: Dmitry Baryshkov 
Signed-off-by: Luca Weiss 
---
 arch/arm64/boot/dts/qcom/sm6350.dtsi | 88 
 1 file changed, 88 insertions(+)

diff --git a/arch/arm64/boot/dts/qcom/sm6350.dtsi 
b/arch/arm64/boot/dts/qcom/sm6350.dtsi
index 24bcec3366ef..d7cf4b5ceea6 100644
--- a/arch/arm64/boot/dts/qcom/sm6350.dtsi
+++ b/arch/arm64/boot/dts/qcom/sm6350.dtsi
@@ -2033,6 +2033,14 @@ dpu_intf1_out: endpoint {
remote-endpoint = 
<_dsi0_in>;
};
};
+
+   port@2 {
+   reg = <2>;
+
+   dpu_intf0_out: endpoint {
+   remote-endpoint = 
<_dp_in>;
+   };
+   };
};
 
mdp_opp_table: opp-table {
@@ -2070,6 +2078,86 @@ opp-56000 {
};
};
 
+   mdss_dp: displayport-controller@ae9 {
+   compatible = "qcom,sm6350-dp", "qcom,sm8350-dp";
+   reg = <0 0xae9 0 0x200>,
+ <0 0xae90200 0 0x200>,
+ <0 0xae90400 0 0x600>,
+ <0 0xae91000 0 0x400>,
+ <0 0xae91400 0 0x400>;
+   interrupt-parent = <>;
+   interrupts = <12>;
+   clocks = < DISP_CC_MDSS_AHB_CLK>,
+< DISP_CC_MDSS_DP_AUX_CLK>,
+< DISP_CC_MDSS_DP_LINK_CLK>,
+< 
DISP_CC_MDSS_DP_LINK_INTF_CLK>,
+< DISP_CC_MDSS_DP_PIXEL_CLK>;
+   clock-names = "core_iface",
+ "core_aux",
+ "ctrl_link",
+ "ctrl_link_iface",
+ "stream_pixel";
+
+   assigned-clocks = < 
DISP_CC_MDSS_DP_LINK_CLK_SRC>,
+ < 
DISP_CC_MDSS_DP_PIXEL_CLK_SRC>;
+   assigned-clock-parents = <_1_qmpphy 
QMP_USB43DP_DP_LINK_CLK>,
+<_1_qmpphy 
QMP_USB43DP_DP_VCO_DIV_CLK>;
+
+   phys = <_1_qmpphy QMP_USB43DP_DP_PHY>;
+   phy-names = "dp";
+
+   #sound-dai-cells = <0>;
+
+   operating-points-v2 = <_opp_table>;
+   power-domains = < SM6350_CX>;
+
+   status = "disabled";
+
+   ports {
+   #address-cells = <1>;
+   #size-cells = <0>;
+
+   port@0 {
+   reg = <0>;
+
+   mdss_dp_in: endpoint {
+   remote-endpoint = 
<_intf0_out>;
+   };
+   };
+
+   port@1 {
+   reg = <1>;
+
+   mdss_dp_out: endpoint {
+   };
+   };
+   };
+
+   dp_opp_table: opp-table {
+   compatible = "operating-points-v2";
+
+   opp-16000 {
+   opp-hz = /bits/ 64 <16000>;
+   required-opps = 
<_opp_low_svs>;
+   };
+
+   opp-27000 {
+   opp-hz = /bits/ 64 <27000>;
+   required-opps = 
<_opp_svs>;
+   };
+
+   opp-54000 {
+   opp-hz = /bits/ 64 <54000>;
+   required-opps = 
<_opp_svs_l1>;
+   };
+
+  

[PATCH v2 0/3] DisplayPort support for SM6350/SM7225

2024-03-29 Thread Luca Weiss
Add the required changes to support DisplayPort (normally(?) available
via the USB-C connector) on the SM6350/SM7225 SoC.

This has been tested on a Fairphone 4 smartphone with additional changes
not included in this series (mostly just wiring up TCPM and the SBU
mux).

Signed-off-by: Luca Weiss 
---
Changes in v2:
- Fix typo in dp-controller patch subject
- Use 'contains' for subnode in mdss schema
- Pick up tags
- Link to v1: 
https://lore.kernel.org/r/20240328-sm6350-dp-v1-0-215ca2b81...@fairphone.com

---
Luca Weiss (3):
  dt-bindings: display: msm: dp-controller: document SM6350 compatible
  dt-bindings: display: msm: sm6350-mdss: document DP controller subnode
  arm64: dts: qcom: sm6350: Add DisplayPort controller

 .../bindings/display/msm/dp-controller.yaml|  1 +
 .../bindings/display/msm/qcom,sm6350-mdss.yaml |  9 +++
 arch/arm64/boot/dts/qcom/sm6350.dtsi   | 88 ++
 3 files changed, 98 insertions(+)
---
base-commit: 871760455183dc66b3e185f8d3ed2184cc9fac25
change-id: 20240328-sm6350-dp-41238153b448

Best regards,
-- 
Luca Weiss