* [PATCH] drm/msm: populate intf_audio_select() base on hardware capability
@ 2022-02-11 23:23 ` Kuogee Hsieh
0 siblings, 0 replies; 15+ messages in thread
From: Kuogee Hsieh @ 2022-02-11 23:23 UTC (permalink / raw)
To: robdclark, sean, swboyd, vkoul, daniel, airlied, agross,
dmitry.baryshkov, bjorn.andersson
Cc: quic_abhinavk, quic_aravindh, quic_khsieh, freedreno, dri-devel,
linux-arm-msm, linux-kernel
intf_audio_select() callback function use to configure
HDMI_DP_CORE_SELECT to decide audio output routes to HDMI or DP
interface. HDMI is obsoleted at newer chipset. To keep supporting
legacy hdmi application, intf_audio_select call back function have
to be populated base on hardware chip capability where legacy
chipsets have has_audio_select flag set to true.
Signed-off-by: Kuogee Hsieh <quic_khsieh@quicinc.com>
---
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 2 ++
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 1 +
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c | 9 ++++++---
3 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
index 272b14b..23680e7 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
@@ -201,6 +201,7 @@ static const struct dpu_caps sdm845_dpu_caps = {
.has_dim_layer = true,
.has_idle_pc = true,
.has_3d_merge = true,
+ .has_audio_select = true,
.max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
.max_hdeci_exp = MAX_HORZ_DECIMATION,
@@ -229,6 +230,7 @@ static const struct dpu_caps sm8150_dpu_caps = {
.has_dim_layer = true,
.has_idle_pc = true,
.has_3d_merge = true,
+ .has_audio_select = true,
.max_linewidth = 4096,
.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
.max_hdeci_exp = MAX_HORZ_DECIMATION,
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
index e5a96d6..b33f91b 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
@@ -357,6 +357,7 @@ struct dpu_caps {
bool has_dim_layer;
bool has_idle_pc;
bool has_3d_merge;
+ bool has_audio_select;
/* SSPP limits */
u32 max_linewidth;
u32 pixel_ram_size;
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
index 282e3c6..e608f4d 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
@@ -261,14 +261,17 @@ static void dpu_hw_intf_audio_select(struct dpu_hw_mdp *mdp)
}
static void _setup_mdp_ops(struct dpu_hw_mdp_ops *ops,
- unsigned long cap)
+ unsigned long cap,
+ const struct dpu_mdss_cfg *m)
{
ops->setup_split_pipe = dpu_hw_setup_split_pipe;
ops->setup_clk_force_ctrl = dpu_hw_setup_clk_force_ctrl;
ops->get_danger_status = dpu_hw_get_danger_status;
ops->setup_vsync_source = dpu_hw_setup_vsync_source;
ops->get_safe_status = dpu_hw_get_safe_status;
- ops->intf_audio_select = dpu_hw_intf_audio_select;
+
+ if (m->caps->has_audio_select)
+ ops->intf_audio_select = dpu_hw_intf_audio_select;
}
static const struct dpu_mdp_cfg *_top_offset(enum dpu_mdp mdp,
@@ -320,7 +323,7 @@ struct dpu_hw_mdp *dpu_hw_mdptop_init(enum dpu_mdp idx,
*/
mdp->idx = idx;
mdp->caps = cfg;
- _setup_mdp_ops(&mdp->ops, mdp->caps->features);
+ _setup_mdp_ops(&mdp->ops, mdp->caps->features, m);
return mdp;
}
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH] drm/msm: populate intf_audio_select() base on hardware capability
@ 2022-02-11 23:23 ` Kuogee Hsieh
0 siblings, 0 replies; 15+ messages in thread
From: Kuogee Hsieh @ 2022-02-11 23:23 UTC (permalink / raw)
To: robdclark, sean, swboyd, vkoul, daniel, airlied, agross,
dmitry.baryshkov, bjorn.andersson
Cc: linux-arm-msm, quic_abhinavk, dri-devel, quic_khsieh,
quic_aravindh, freedreno, linux-kernel
intf_audio_select() callback function use to configure
HDMI_DP_CORE_SELECT to decide audio output routes to HDMI or DP
interface. HDMI is obsoleted at newer chipset. To keep supporting
legacy hdmi application, intf_audio_select call back function have
to be populated base on hardware chip capability where legacy
chipsets have has_audio_select flag set to true.
Signed-off-by: Kuogee Hsieh <quic_khsieh@quicinc.com>
---
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 2 ++
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 1 +
drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c | 9 ++++++---
3 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
index 272b14b..23680e7 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
@@ -201,6 +201,7 @@ static const struct dpu_caps sdm845_dpu_caps = {
.has_dim_layer = true,
.has_idle_pc = true,
.has_3d_merge = true,
+ .has_audio_select = true,
.max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
.max_hdeci_exp = MAX_HORZ_DECIMATION,
@@ -229,6 +230,7 @@ static const struct dpu_caps sm8150_dpu_caps = {
.has_dim_layer = true,
.has_idle_pc = true,
.has_3d_merge = true,
+ .has_audio_select = true,
.max_linewidth = 4096,
.pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
.max_hdeci_exp = MAX_HORZ_DECIMATION,
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
index e5a96d6..b33f91b 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
@@ -357,6 +357,7 @@ struct dpu_caps {
bool has_dim_layer;
bool has_idle_pc;
bool has_3d_merge;
+ bool has_audio_select;
/* SSPP limits */
u32 max_linewidth;
u32 pixel_ram_size;
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
index 282e3c6..e608f4d 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
@@ -261,14 +261,17 @@ static void dpu_hw_intf_audio_select(struct dpu_hw_mdp *mdp)
}
static void _setup_mdp_ops(struct dpu_hw_mdp_ops *ops,
- unsigned long cap)
+ unsigned long cap,
+ const struct dpu_mdss_cfg *m)
{
ops->setup_split_pipe = dpu_hw_setup_split_pipe;
ops->setup_clk_force_ctrl = dpu_hw_setup_clk_force_ctrl;
ops->get_danger_status = dpu_hw_get_danger_status;
ops->setup_vsync_source = dpu_hw_setup_vsync_source;
ops->get_safe_status = dpu_hw_get_safe_status;
- ops->intf_audio_select = dpu_hw_intf_audio_select;
+
+ if (m->caps->has_audio_select)
+ ops->intf_audio_select = dpu_hw_intf_audio_select;
}
static const struct dpu_mdp_cfg *_top_offset(enum dpu_mdp mdp,
@@ -320,7 +323,7 @@ struct dpu_hw_mdp *dpu_hw_mdptop_init(enum dpu_mdp idx,
*/
mdp->idx = idx;
mdp->caps = cfg;
- _setup_mdp_ops(&mdp->ops, mdp->caps->features);
+ _setup_mdp_ops(&mdp->ops, mdp->caps->features, m);
return mdp;
}
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH] drm/msm: populate intf_audio_select() base on hardware capability
2022-02-11 23:23 ` Kuogee Hsieh
@ 2022-02-11 23:36 ` Dmitry Baryshkov
-1 siblings, 0 replies; 15+ messages in thread
From: Dmitry Baryshkov @ 2022-02-11 23:36 UTC (permalink / raw)
To: Kuogee Hsieh
Cc: robdclark, sean, swboyd, vkoul, daniel, airlied, agross,
bjorn.andersson, quic_abhinavk, quic_aravindh, freedreno,
dri-devel, linux-arm-msm, linux-kernel
On Sat, 12 Feb 2022 at 02:23, Kuogee Hsieh <quic_khsieh@quicinc.com> wrote:
>
> intf_audio_select() callback function use to configure
> HDMI_DP_CORE_SELECT to decide audio output routes to HDMI or DP
> interface. HDMI is obsoleted at newer chipset. To keep supporting
> legacy hdmi application, intf_audio_select call back function have
> to be populated base on hardware chip capability where legacy
> chipsets have has_audio_select flag set to true.
>
> Signed-off-by: Kuogee Hsieh <quic_khsieh@quicinc.com>
> ---
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 2 ++
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 1 +
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c | 9 ++++++---
> 3 files changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> index 272b14b..23680e7 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> @@ -201,6 +201,7 @@ static const struct dpu_caps sdm845_dpu_caps = {
> .has_dim_layer = true,
> .has_idle_pc = true,
> .has_3d_merge = true,
> + .has_audio_select = true,
> .max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
> .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
> .max_hdeci_exp = MAX_HORZ_DECIMATION,
> @@ -229,6 +230,7 @@ static const struct dpu_caps sm8150_dpu_caps = {
> .has_dim_layer = true,
> .has_idle_pc = true,
> .has_3d_merge = true,
> + .has_audio_select = true,
> .max_linewidth = 4096,
> .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
> .max_hdeci_exp = MAX_HORZ_DECIMATION,
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> index e5a96d6..b33f91b 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> @@ -357,6 +357,7 @@ struct dpu_caps {
> bool has_dim_layer;
> bool has_idle_pc;
> bool has_3d_merge;
> + bool has_audio_select;
I'd suggest adding a bit to dpu_mdp_cfg's features instead, following
the example of other hardware blocks.
> /* SSPP limits */
> u32 max_linewidth;
> u32 pixel_ram_size;
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
> index 282e3c6..e608f4d 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
> @@ -261,14 +261,17 @@ static void dpu_hw_intf_audio_select(struct dpu_hw_mdp *mdp)
> }
>
> static void _setup_mdp_ops(struct dpu_hw_mdp_ops *ops,
> - unsigned long cap)
> + unsigned long cap,
> + const struct dpu_mdss_cfg *m)
> {
> ops->setup_split_pipe = dpu_hw_setup_split_pipe;
> ops->setup_clk_force_ctrl = dpu_hw_setup_clk_force_ctrl;
> ops->get_danger_status = dpu_hw_get_danger_status;
> ops->setup_vsync_source = dpu_hw_setup_vsync_source;
> ops->get_safe_status = dpu_hw_get_safe_status;
> - ops->intf_audio_select = dpu_hw_intf_audio_select;
> +
> + if (m->caps->has_audio_select)
> + ops->intf_audio_select = dpu_hw_intf_audio_select;
> }
>
> static const struct dpu_mdp_cfg *_top_offset(enum dpu_mdp mdp,
> @@ -320,7 +323,7 @@ struct dpu_hw_mdp *dpu_hw_mdptop_init(enum dpu_mdp idx,
> */
> mdp->idx = idx;
> mdp->caps = cfg;
> - _setup_mdp_ops(&mdp->ops, mdp->caps->features);
> + _setup_mdp_ops(&mdp->ops, mdp->caps->features, m);
>
> return mdp;
> }
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH] drm/msm: populate intf_audio_select() base on hardware capability
@ 2022-02-11 23:36 ` Dmitry Baryshkov
0 siblings, 0 replies; 15+ messages in thread
From: Dmitry Baryshkov @ 2022-02-11 23:36 UTC (permalink / raw)
To: Kuogee Hsieh
Cc: quic_abhinavk, airlied, freedreno, vkoul, dri-devel, swboyd,
agross, linux-arm-msm, quic_aravindh, bjorn.andersson, sean,
linux-kernel
On Sat, 12 Feb 2022 at 02:23, Kuogee Hsieh <quic_khsieh@quicinc.com> wrote:
>
> intf_audio_select() callback function use to configure
> HDMI_DP_CORE_SELECT to decide audio output routes to HDMI or DP
> interface. HDMI is obsoleted at newer chipset. To keep supporting
> legacy hdmi application, intf_audio_select call back function have
> to be populated base on hardware chip capability where legacy
> chipsets have has_audio_select flag set to true.
>
> Signed-off-by: Kuogee Hsieh <quic_khsieh@quicinc.com>
> ---
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 2 ++
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 1 +
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c | 9 ++++++---
> 3 files changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> index 272b14b..23680e7 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> @@ -201,6 +201,7 @@ static const struct dpu_caps sdm845_dpu_caps = {
> .has_dim_layer = true,
> .has_idle_pc = true,
> .has_3d_merge = true,
> + .has_audio_select = true,
> .max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
> .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
> .max_hdeci_exp = MAX_HORZ_DECIMATION,
> @@ -229,6 +230,7 @@ static const struct dpu_caps sm8150_dpu_caps = {
> .has_dim_layer = true,
> .has_idle_pc = true,
> .has_3d_merge = true,
> + .has_audio_select = true,
> .max_linewidth = 4096,
> .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
> .max_hdeci_exp = MAX_HORZ_DECIMATION,
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> index e5a96d6..b33f91b 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> @@ -357,6 +357,7 @@ struct dpu_caps {
> bool has_dim_layer;
> bool has_idle_pc;
> bool has_3d_merge;
> + bool has_audio_select;
I'd suggest adding a bit to dpu_mdp_cfg's features instead, following
the example of other hardware blocks.
> /* SSPP limits */
> u32 max_linewidth;
> u32 pixel_ram_size;
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
> index 282e3c6..e608f4d 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
> @@ -261,14 +261,17 @@ static void dpu_hw_intf_audio_select(struct dpu_hw_mdp *mdp)
> }
>
> static void _setup_mdp_ops(struct dpu_hw_mdp_ops *ops,
> - unsigned long cap)
> + unsigned long cap,
> + const struct dpu_mdss_cfg *m)
> {
> ops->setup_split_pipe = dpu_hw_setup_split_pipe;
> ops->setup_clk_force_ctrl = dpu_hw_setup_clk_force_ctrl;
> ops->get_danger_status = dpu_hw_get_danger_status;
> ops->setup_vsync_source = dpu_hw_setup_vsync_source;
> ops->get_safe_status = dpu_hw_get_safe_status;
> - ops->intf_audio_select = dpu_hw_intf_audio_select;
> +
> + if (m->caps->has_audio_select)
> + ops->intf_audio_select = dpu_hw_intf_audio_select;
> }
>
> static const struct dpu_mdp_cfg *_top_offset(enum dpu_mdp mdp,
> @@ -320,7 +323,7 @@ struct dpu_hw_mdp *dpu_hw_mdptop_init(enum dpu_mdp idx,
> */
> mdp->idx = idx;
> mdp->caps = cfg;
> - _setup_mdp_ops(&mdp->ops, mdp->caps->features);
> + _setup_mdp_ops(&mdp->ops, mdp->caps->features, m);
>
> return mdp;
> }
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH] drm/msm: populate intf_audio_select() base on hardware capability
2022-02-11 23:23 ` Kuogee Hsieh
@ 2022-02-12 0:08 ` Dmitry Baryshkov
-1 siblings, 0 replies; 15+ messages in thread
From: Dmitry Baryshkov @ 2022-02-12 0:08 UTC (permalink / raw)
To: Kuogee Hsieh, robdclark, sean, swboyd, vkoul, daniel, airlied,
agross, bjorn.andersson
Cc: quic_abhinavk, quic_aravindh, freedreno, dri-devel,
linux-arm-msm, linux-kernel
On 12/02/2022 02:23, Kuogee Hsieh wrote:
> intf_audio_select() callback function use to configure
> HDMI_DP_CORE_SELECT to decide audio output routes to HDMI or DP
> interface. HDMI is obsoleted at newer chipset. To keep supporting
> legacy hdmi application, intf_audio_select call back function have
> to be populated base on hardware chip capability where legacy
> chipsets have has_audio_select flag set to true.
So, after thinking more about the patch, I have a bunch of questions:
You are enabling this callback only for sdm845 and sm8150.
Does this register exist on other (newer) platforms (but just defaults
to DP)?
Neither sdm845 nor sm8150 support INTF_HDMI. What's the purpose of the
register on these platforms?
Does that mean that we should program the register for HDMI (e.g. on 8998)?
And, as you are touching this piece of code, how do we control audio
routing on newer platforms which have several hardware DP interfaces?
>
> Signed-off-by: Kuogee Hsieh <quic_khsieh@quicinc.com>
> ---
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 2 ++
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 1 +
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c | 9 ++++++---
> 3 files changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> index 272b14b..23680e7 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> @@ -201,6 +201,7 @@ static const struct dpu_caps sdm845_dpu_caps = {
> .has_dim_layer = true,
> .has_idle_pc = true,
> .has_3d_merge = true,
> + .has_audio_select = true,
> .max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
> .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
> .max_hdeci_exp = MAX_HORZ_DECIMATION,
> @@ -229,6 +230,7 @@ static const struct dpu_caps sm8150_dpu_caps = {
> .has_dim_layer = true,
> .has_idle_pc = true,
> .has_3d_merge = true,
> + .has_audio_select = true,
> .max_linewidth = 4096,
> .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
> .max_hdeci_exp = MAX_HORZ_DECIMATION,
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> index e5a96d6..b33f91b 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> @@ -357,6 +357,7 @@ struct dpu_caps {
> bool has_dim_layer;
> bool has_idle_pc;
> bool has_3d_merge;
> + bool has_audio_select;
> /* SSPP limits */
> u32 max_linewidth;
> u32 pixel_ram_size;
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
> index 282e3c6..e608f4d 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
> @@ -261,14 +261,17 @@ static void dpu_hw_intf_audio_select(struct dpu_hw_mdp *mdp)
> }
>
> static void _setup_mdp_ops(struct dpu_hw_mdp_ops *ops,
> - unsigned long cap)
> + unsigned long cap,
> + const struct dpu_mdss_cfg *m)
> {
> ops->setup_split_pipe = dpu_hw_setup_split_pipe;
> ops->setup_clk_force_ctrl = dpu_hw_setup_clk_force_ctrl;
> ops->get_danger_status = dpu_hw_get_danger_status;
> ops->setup_vsync_source = dpu_hw_setup_vsync_source;
> ops->get_safe_status = dpu_hw_get_safe_status;
> - ops->intf_audio_select = dpu_hw_intf_audio_select;
> +
> + if (m->caps->has_audio_select)
> + ops->intf_audio_select = dpu_hw_intf_audio_select;
> }
>
> static const struct dpu_mdp_cfg *_top_offset(enum dpu_mdp mdp,
> @@ -320,7 +323,7 @@ struct dpu_hw_mdp *dpu_hw_mdptop_init(enum dpu_mdp idx,
> */
> mdp->idx = idx;
> mdp->caps = cfg;
> - _setup_mdp_ops(&mdp->ops, mdp->caps->features);
> + _setup_mdp_ops(&mdp->ops, mdp->caps->features, m);
>
> return mdp;
> }
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH] drm/msm: populate intf_audio_select() base on hardware capability
@ 2022-02-12 0:08 ` Dmitry Baryshkov
0 siblings, 0 replies; 15+ messages in thread
From: Dmitry Baryshkov @ 2022-02-12 0:08 UTC (permalink / raw)
To: Kuogee Hsieh, robdclark, sean, swboyd, vkoul, daniel, airlied,
agross, bjorn.andersson
Cc: linux-arm-msm, quic_abhinavk, dri-devel, linux-kernel,
quic_aravindh, freedreno
On 12/02/2022 02:23, Kuogee Hsieh wrote:
> intf_audio_select() callback function use to configure
> HDMI_DP_CORE_SELECT to decide audio output routes to HDMI or DP
> interface. HDMI is obsoleted at newer chipset. To keep supporting
> legacy hdmi application, intf_audio_select call back function have
> to be populated base on hardware chip capability where legacy
> chipsets have has_audio_select flag set to true.
So, after thinking more about the patch, I have a bunch of questions:
You are enabling this callback only for sdm845 and sm8150.
Does this register exist on other (newer) platforms (but just defaults
to DP)?
Neither sdm845 nor sm8150 support INTF_HDMI. What's the purpose of the
register on these platforms?
Does that mean that we should program the register for HDMI (e.g. on 8998)?
And, as you are touching this piece of code, how do we control audio
routing on newer platforms which have several hardware DP interfaces?
>
> Signed-off-by: Kuogee Hsieh <quic_khsieh@quicinc.com>
> ---
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 2 ++
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 1 +
> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c | 9 ++++++---
> 3 files changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> index 272b14b..23680e7 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> @@ -201,6 +201,7 @@ static const struct dpu_caps sdm845_dpu_caps = {
> .has_dim_layer = true,
> .has_idle_pc = true,
> .has_3d_merge = true,
> + .has_audio_select = true,
> .max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
> .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
> .max_hdeci_exp = MAX_HORZ_DECIMATION,
> @@ -229,6 +230,7 @@ static const struct dpu_caps sm8150_dpu_caps = {
> .has_dim_layer = true,
> .has_idle_pc = true,
> .has_3d_merge = true,
> + .has_audio_select = true,
> .max_linewidth = 4096,
> .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
> .max_hdeci_exp = MAX_HORZ_DECIMATION,
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> index e5a96d6..b33f91b 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> @@ -357,6 +357,7 @@ struct dpu_caps {
> bool has_dim_layer;
> bool has_idle_pc;
> bool has_3d_merge;
> + bool has_audio_select;
> /* SSPP limits */
> u32 max_linewidth;
> u32 pixel_ram_size;
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
> index 282e3c6..e608f4d 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
> @@ -261,14 +261,17 @@ static void dpu_hw_intf_audio_select(struct dpu_hw_mdp *mdp)
> }
>
> static void _setup_mdp_ops(struct dpu_hw_mdp_ops *ops,
> - unsigned long cap)
> + unsigned long cap,
> + const struct dpu_mdss_cfg *m)
> {
> ops->setup_split_pipe = dpu_hw_setup_split_pipe;
> ops->setup_clk_force_ctrl = dpu_hw_setup_clk_force_ctrl;
> ops->get_danger_status = dpu_hw_get_danger_status;
> ops->setup_vsync_source = dpu_hw_setup_vsync_source;
> ops->get_safe_status = dpu_hw_get_safe_status;
> - ops->intf_audio_select = dpu_hw_intf_audio_select;
> +
> + if (m->caps->has_audio_select)
> + ops->intf_audio_select = dpu_hw_intf_audio_select;
> }
>
> static const struct dpu_mdp_cfg *_top_offset(enum dpu_mdp mdp,
> @@ -320,7 +323,7 @@ struct dpu_hw_mdp *dpu_hw_mdptop_init(enum dpu_mdp idx,
> */
> mdp->idx = idx;
> mdp->caps = cfg;
> - _setup_mdp_ops(&mdp->ops, mdp->caps->features);
> + _setup_mdp_ops(&mdp->ops, mdp->caps->features, m);
>
> return mdp;
> }
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH] drm/msm: populate intf_audio_select() base on hardware capability
2022-02-12 0:08 ` Dmitry Baryshkov
@ 2022-02-12 0:59 ` Abhinav Kumar
-1 siblings, 0 replies; 15+ messages in thread
From: Abhinav Kumar @ 2022-02-12 0:59 UTC (permalink / raw)
To: Dmitry Baryshkov, Kuogee Hsieh, robdclark, sean, swboyd, vkoul,
daniel, airlied, agross, bjorn.andersson
Cc: quic_aravindh, freedreno, dri-devel, linux-arm-msm, linux-kernel
On 2/11/2022 4:08 PM, Dmitry Baryshkov wrote:
> On 12/02/2022 02:23, Kuogee Hsieh wrote:
>> intf_audio_select() callback function use to configure
>> HDMI_DP_CORE_SELECT to decide audio output routes to HDMI or DP
>> interface. HDMI is obsoleted at newer chipset. To keep supporting
>> legacy hdmi application, intf_audio_select call back function have
>> to be populated base on hardware chip capability where legacy
>> chipsets have has_audio_select flag set to true.
>
> So, after thinking more about the patch, I have a bunch of questions:
>
> You are enabling this callback only for sdm845 and sm8150.
>
> Does this register exist on other (newer) platforms (but just defaults
> to DP)?
The register itself exists but there is no logic associated with it. Its
a no-op.
>
> Neither sdm845 nor sm8150 support INTF_HDMI. What's the purpose of the
> register on these platforms?
Yes we also had a similar thought earlier that this register has meaning
only on chipsets which have HDMI and DP but our hardware team suggested
sm8250 and its derivatives should be the cut-off point to stop using
this register. So we are just following that.
>
> Does that mean that we should program the register for HDMI (e.g. on 8998)?
>
Yes, we should program this for HDMI 8998 ( although the default value
of the register is 0 for HDMI ).
> And, as you are touching this piece of code, how do we control audio
> routing on newer platforms which have several hardware DP interfaces?
>
Thats unrelated to this register because on newer chipsets which have
two DPs there is no HDMI and hence this register remains a no-op.
But coming to the overall question on multi-DP audio.
This is not a new question. I had first asked about this to Bjorn for
sc8180x. The current hdmi-codec interface which is used for single DP
audio will have to be extended to support this to support which stream
to pass the audio on. This is an open item which was left to be done
later on because the only chipset which has multi-DP in upstream is
sc8180x. We dont have that hardware with us for development. When we
start working on that, we will have to implement what I just mentioned.
Thanks
Abhinav
>
>>
>> Signed-off-by: Kuogee Hsieh <quic_khsieh@quicinc.com>
>> ---
>> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 2 ++
>> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 1 +
>> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c | 9 ++++++---
>> 3 files changed, 9 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
>> b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
>> index 272b14b..23680e7 100644
>> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
>> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
>> @@ -201,6 +201,7 @@ static const struct dpu_caps sdm845_dpu_caps = {
>> .has_dim_layer = true,
>> .has_idle_pc = true,
>> .has_3d_merge = true,
>> + .has_audio_select = true,
>> .max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
>> .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
>> .max_hdeci_exp = MAX_HORZ_DECIMATION,
>> @@ -229,6 +230,7 @@ static const struct dpu_caps sm8150_dpu_caps = {
>> .has_dim_layer = true,
>> .has_idle_pc = true,
>> .has_3d_merge = true,
>> + .has_audio_select = true,
>> .max_linewidth = 4096,
>> .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
>> .max_hdeci_exp = MAX_HORZ_DECIMATION,
>> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
>> b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
>> index e5a96d6..b33f91b 100644
>> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
>> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
>> @@ -357,6 +357,7 @@ struct dpu_caps {
>> bool has_dim_layer;
>> bool has_idle_pc;
>> bool has_3d_merge;
>> + bool has_audio_select;
>> /* SSPP limits */
>> u32 max_linewidth;
>> u32 pixel_ram_size;
>> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
>> b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
>> index 282e3c6..e608f4d 100644
>> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
>> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
>> @@ -261,14 +261,17 @@ static void dpu_hw_intf_audio_select(struct
>> dpu_hw_mdp *mdp)
>> }
>> static void _setup_mdp_ops(struct dpu_hw_mdp_ops *ops,
>> - unsigned long cap)
>> + unsigned long cap,
>> + const struct dpu_mdss_cfg *m)
>> {
>> ops->setup_split_pipe = dpu_hw_setup_split_pipe;
>> ops->setup_clk_force_ctrl = dpu_hw_setup_clk_force_ctrl;
>> ops->get_danger_status = dpu_hw_get_danger_status;
>> ops->setup_vsync_source = dpu_hw_setup_vsync_source;
>> ops->get_safe_status = dpu_hw_get_safe_status;
>> - ops->intf_audio_select = dpu_hw_intf_audio_select;
>> +
>> + if (m->caps->has_audio_select)
>> + ops->intf_audio_select = dpu_hw_intf_audio_select;
>> }
>> static const struct dpu_mdp_cfg *_top_offset(enum dpu_mdp mdp,
>> @@ -320,7 +323,7 @@ struct dpu_hw_mdp *dpu_hw_mdptop_init(enum dpu_mdp
>> idx,
>> */
>> mdp->idx = idx;
>> mdp->caps = cfg;
>> - _setup_mdp_ops(&mdp->ops, mdp->caps->features);
>> + _setup_mdp_ops(&mdp->ops, mdp->caps->features, m);
>> return mdp;
>> }
>
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH] drm/msm: populate intf_audio_select() base on hardware capability
@ 2022-02-12 0:59 ` Abhinav Kumar
0 siblings, 0 replies; 15+ messages in thread
From: Abhinav Kumar @ 2022-02-12 0:59 UTC (permalink / raw)
To: Dmitry Baryshkov, Kuogee Hsieh, robdclark, sean, swboyd, vkoul,
daniel, airlied, agross, bjorn.andersson
Cc: linux-arm-msm, quic_aravindh, freedreno, linux-kernel, dri-devel
On 2/11/2022 4:08 PM, Dmitry Baryshkov wrote:
> On 12/02/2022 02:23, Kuogee Hsieh wrote:
>> intf_audio_select() callback function use to configure
>> HDMI_DP_CORE_SELECT to decide audio output routes to HDMI or DP
>> interface. HDMI is obsoleted at newer chipset. To keep supporting
>> legacy hdmi application, intf_audio_select call back function have
>> to be populated base on hardware chip capability where legacy
>> chipsets have has_audio_select flag set to true.
>
> So, after thinking more about the patch, I have a bunch of questions:
>
> You are enabling this callback only for sdm845 and sm8150.
>
> Does this register exist on other (newer) platforms (but just defaults
> to DP)?
The register itself exists but there is no logic associated with it. Its
a no-op.
>
> Neither sdm845 nor sm8150 support INTF_HDMI. What's the purpose of the
> register on these platforms?
Yes we also had a similar thought earlier that this register has meaning
only on chipsets which have HDMI and DP but our hardware team suggested
sm8250 and its derivatives should be the cut-off point to stop using
this register. So we are just following that.
>
> Does that mean that we should program the register for HDMI (e.g. on 8998)?
>
Yes, we should program this for HDMI 8998 ( although the default value
of the register is 0 for HDMI ).
> And, as you are touching this piece of code, how do we control audio
> routing on newer platforms which have several hardware DP interfaces?
>
Thats unrelated to this register because on newer chipsets which have
two DPs there is no HDMI and hence this register remains a no-op.
But coming to the overall question on multi-DP audio.
This is not a new question. I had first asked about this to Bjorn for
sc8180x. The current hdmi-codec interface which is used for single DP
audio will have to be extended to support this to support which stream
to pass the audio on. This is an open item which was left to be done
later on because the only chipset which has multi-DP in upstream is
sc8180x. We dont have that hardware with us for development. When we
start working on that, we will have to implement what I just mentioned.
Thanks
Abhinav
>
>>
>> Signed-off-by: Kuogee Hsieh <quic_khsieh@quicinc.com>
>> ---
>> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 2 ++
>> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 1 +
>> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c | 9 ++++++---
>> 3 files changed, 9 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
>> b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
>> index 272b14b..23680e7 100644
>> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
>> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
>> @@ -201,6 +201,7 @@ static const struct dpu_caps sdm845_dpu_caps = {
>> .has_dim_layer = true,
>> .has_idle_pc = true,
>> .has_3d_merge = true,
>> + .has_audio_select = true,
>> .max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
>> .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
>> .max_hdeci_exp = MAX_HORZ_DECIMATION,
>> @@ -229,6 +230,7 @@ static const struct dpu_caps sm8150_dpu_caps = {
>> .has_dim_layer = true,
>> .has_idle_pc = true,
>> .has_3d_merge = true,
>> + .has_audio_select = true,
>> .max_linewidth = 4096,
>> .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
>> .max_hdeci_exp = MAX_HORZ_DECIMATION,
>> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
>> b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
>> index e5a96d6..b33f91b 100644
>> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
>> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
>> @@ -357,6 +357,7 @@ struct dpu_caps {
>> bool has_dim_layer;
>> bool has_idle_pc;
>> bool has_3d_merge;
>> + bool has_audio_select;
>> /* SSPP limits */
>> u32 max_linewidth;
>> u32 pixel_ram_size;
>> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
>> b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
>> index 282e3c6..e608f4d 100644
>> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
>> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
>> @@ -261,14 +261,17 @@ static void dpu_hw_intf_audio_select(struct
>> dpu_hw_mdp *mdp)
>> }
>> static void _setup_mdp_ops(struct dpu_hw_mdp_ops *ops,
>> - unsigned long cap)
>> + unsigned long cap,
>> + const struct dpu_mdss_cfg *m)
>> {
>> ops->setup_split_pipe = dpu_hw_setup_split_pipe;
>> ops->setup_clk_force_ctrl = dpu_hw_setup_clk_force_ctrl;
>> ops->get_danger_status = dpu_hw_get_danger_status;
>> ops->setup_vsync_source = dpu_hw_setup_vsync_source;
>> ops->get_safe_status = dpu_hw_get_safe_status;
>> - ops->intf_audio_select = dpu_hw_intf_audio_select;
>> +
>> + if (m->caps->has_audio_select)
>> + ops->intf_audio_select = dpu_hw_intf_audio_select;
>> }
>> static const struct dpu_mdp_cfg *_top_offset(enum dpu_mdp mdp,
>> @@ -320,7 +323,7 @@ struct dpu_hw_mdp *dpu_hw_mdptop_init(enum dpu_mdp
>> idx,
>> */
>> mdp->idx = idx;
>> mdp->caps = cfg;
>> - _setup_mdp_ops(&mdp->ops, mdp->caps->features);
>> + _setup_mdp_ops(&mdp->ops, mdp->caps->features, m);
>> return mdp;
>> }
>
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH] drm/msm: populate intf_audio_select() base on hardware capability
2022-02-12 0:59 ` Abhinav Kumar
@ 2022-02-12 16:16 ` Dmitry Baryshkov
-1 siblings, 0 replies; 15+ messages in thread
From: Dmitry Baryshkov @ 2022-02-12 16:16 UTC (permalink / raw)
To: Abhinav Kumar
Cc: Kuogee Hsieh, robdclark, sean, swboyd, vkoul, daniel, airlied,
agross, bjorn.andersson, quic_aravindh, freedreno, dri-devel,
linux-arm-msm, linux-kernel
On Sat, 12 Feb 2022 at 03:59, Abhinav Kumar <quic_abhinavk@quicinc.com> wrote:
> On 2/11/2022 4:08 PM, Dmitry Baryshkov wrote:
> > On 12/02/2022 02:23, Kuogee Hsieh wrote:
> >> intf_audio_select() callback function use to configure
> >> HDMI_DP_CORE_SELECT to decide audio output routes to HDMI or DP
> >> interface. HDMI is obsoleted at newer chipset. To keep supporting
> >> legacy hdmi application, intf_audio_select call back function have
> >> to be populated base on hardware chip capability where legacy
> >> chipsets have has_audio_select flag set to true.
> >
> > So, after thinking more about the patch, I have a bunch of questions:
> >
> > You are enabling this callback only for sdm845 and sm8150.
> >
> > Does this register exist on other (newer) platforms (but just defaults
> > to DP)?
>
> The register itself exists but there is no logic associated with it. Its
> a no-op.
Ack, thanks
>
> >
> > Neither sdm845 nor sm8150 support INTF_HDMI. What's the purpose of the
> > register on these platforms?
>
> Yes we also had a similar thought earlier that this register has meaning
> only on chipsets which have HDMI and DP but our hardware team suggested
> sm8250 and its derivatives should be the cut-off point to stop using
> this register. So we are just following that.
Ack
>
> >
> > Does that mean that we should program the register for HDMI (e.g. on 8998)?
> >
> Yes, we should program this for HDMI 8998 ( although the default value
> of the register is 0 for HDMI ).
ok, so ideally we should add an argument switching between HDMI and DP audio.
This can be done in a separate patch.
>
> > And, as you are touching this piece of code, how do we control audio
> > routing on newer platforms which have several hardware DP interfaces?
> >
> Thats unrelated to this register because on newer chipsets which have
> two DPs there is no HDMI and hence this register remains a no-op.
Yep. I just wondered whether this register would be reused to switch
between DPs.
It doesn't.
>
> But coming to the overall question on multi-DP audio.
>
> This is not a new question. I had first asked about this to Bjorn for
> sc8180x. The current hdmi-codec interface which is used for single DP
> audio will have to be extended to support this to support which stream
> to pass the audio on. This is an open item which was left to be done
> later on because the only chipset which has multi-DP in upstream is
> sc8180x. We dont have that hardware with us for development. When we
> start working on that, we will have to implement what I just mentioned.
The implementation depends on the question whether the SoC can output
several DP audio streams in parallel,
but as the register in question is not used, it's definitely a
separate question.
>
> Thanks
>
> Abhinav
>
> >
> >>
> >> Signed-off-by: Kuogee Hsieh <quic_khsieh@quicinc.com>
> >> ---
> >> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 2 ++
> >> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 1 +
> >> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c | 9 ++++++---
> >> 3 files changed, 9 insertions(+), 3 deletions(-)
> >>
> >> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> >> b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> >> index 272b14b..23680e7 100644
> >> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> >> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> >> @@ -201,6 +201,7 @@ static const struct dpu_caps sdm845_dpu_caps = {
> >> .has_dim_layer = true,
> >> .has_idle_pc = true,
> >> .has_3d_merge = true,
> >> + .has_audio_select = true,
> >> .max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
> >> .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
> >> .max_hdeci_exp = MAX_HORZ_DECIMATION,
> >> @@ -229,6 +230,7 @@ static const struct dpu_caps sm8150_dpu_caps = {
> >> .has_dim_layer = true,
> >> .has_idle_pc = true,
> >> .has_3d_merge = true,
> >> + .has_audio_select = true,
> >> .max_linewidth = 4096,
> >> .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
> >> .max_hdeci_exp = MAX_HORZ_DECIMATION,
> >> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> >> b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> >> index e5a96d6..b33f91b 100644
> >> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> >> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> >> @@ -357,6 +357,7 @@ struct dpu_caps {
> >> bool has_dim_layer;
> >> bool has_idle_pc;
> >> bool has_3d_merge;
> >> + bool has_audio_select;
> >> /* SSPP limits */
> >> u32 max_linewidth;
> >> u32 pixel_ram_size;
> >> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
> >> b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
> >> index 282e3c6..e608f4d 100644
> >> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
> >> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
> >> @@ -261,14 +261,17 @@ static void dpu_hw_intf_audio_select(struct
> >> dpu_hw_mdp *mdp)
> >> }
> >> static void _setup_mdp_ops(struct dpu_hw_mdp_ops *ops,
> >> - unsigned long cap)
> >> + unsigned long cap,
> >> + const struct dpu_mdss_cfg *m)
> >> {
> >> ops->setup_split_pipe = dpu_hw_setup_split_pipe;
> >> ops->setup_clk_force_ctrl = dpu_hw_setup_clk_force_ctrl;
> >> ops->get_danger_status = dpu_hw_get_danger_status;
> >> ops->setup_vsync_source = dpu_hw_setup_vsync_source;
> >> ops->get_safe_status = dpu_hw_get_safe_status;
> >> - ops->intf_audio_select = dpu_hw_intf_audio_select;
> >> +
> >> + if (m->caps->has_audio_select)
> >> + ops->intf_audio_select = dpu_hw_intf_audio_select;
> >> }
> >> static const struct dpu_mdp_cfg *_top_offset(enum dpu_mdp mdp,
> >> @@ -320,7 +323,7 @@ struct dpu_hw_mdp *dpu_hw_mdptop_init(enum dpu_mdp
> >> idx,
> >> */
> >> mdp->idx = idx;
> >> mdp->caps = cfg;
> >> - _setup_mdp_ops(&mdp->ops, mdp->caps->features);
> >> + _setup_mdp_ops(&mdp->ops, mdp->caps->features, m);
> >> return mdp;
> >> }
> >
> >
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH] drm/msm: populate intf_audio_select() base on hardware capability
@ 2022-02-12 16:16 ` Dmitry Baryshkov
0 siblings, 0 replies; 15+ messages in thread
From: Dmitry Baryshkov @ 2022-02-12 16:16 UTC (permalink / raw)
To: Abhinav Kumar
Cc: airlied, freedreno, vkoul, dri-devel, swboyd, agross,
bjorn.andersson, linux-arm-msm, quic_aravindh, Kuogee Hsieh,
sean, linux-kernel
On Sat, 12 Feb 2022 at 03:59, Abhinav Kumar <quic_abhinavk@quicinc.com> wrote:
> On 2/11/2022 4:08 PM, Dmitry Baryshkov wrote:
> > On 12/02/2022 02:23, Kuogee Hsieh wrote:
> >> intf_audio_select() callback function use to configure
> >> HDMI_DP_CORE_SELECT to decide audio output routes to HDMI or DP
> >> interface. HDMI is obsoleted at newer chipset. To keep supporting
> >> legacy hdmi application, intf_audio_select call back function have
> >> to be populated base on hardware chip capability where legacy
> >> chipsets have has_audio_select flag set to true.
> >
> > So, after thinking more about the patch, I have a bunch of questions:
> >
> > You are enabling this callback only for sdm845 and sm8150.
> >
> > Does this register exist on other (newer) platforms (but just defaults
> > to DP)?
>
> The register itself exists but there is no logic associated with it. Its
> a no-op.
Ack, thanks
>
> >
> > Neither sdm845 nor sm8150 support INTF_HDMI. What's the purpose of the
> > register on these platforms?
>
> Yes we also had a similar thought earlier that this register has meaning
> only on chipsets which have HDMI and DP but our hardware team suggested
> sm8250 and its derivatives should be the cut-off point to stop using
> this register. So we are just following that.
Ack
>
> >
> > Does that mean that we should program the register for HDMI (e.g. on 8998)?
> >
> Yes, we should program this for HDMI 8998 ( although the default value
> of the register is 0 for HDMI ).
ok, so ideally we should add an argument switching between HDMI and DP audio.
This can be done in a separate patch.
>
> > And, as you are touching this piece of code, how do we control audio
> > routing on newer platforms which have several hardware DP interfaces?
> >
> Thats unrelated to this register because on newer chipsets which have
> two DPs there is no HDMI and hence this register remains a no-op.
Yep. I just wondered whether this register would be reused to switch
between DPs.
It doesn't.
>
> But coming to the overall question on multi-DP audio.
>
> This is not a new question. I had first asked about this to Bjorn for
> sc8180x. The current hdmi-codec interface which is used for single DP
> audio will have to be extended to support this to support which stream
> to pass the audio on. This is an open item which was left to be done
> later on because the only chipset which has multi-DP in upstream is
> sc8180x. We dont have that hardware with us for development. When we
> start working on that, we will have to implement what I just mentioned.
The implementation depends on the question whether the SoC can output
several DP audio streams in parallel,
but as the register in question is not used, it's definitely a
separate question.
>
> Thanks
>
> Abhinav
>
> >
> >>
> >> Signed-off-by: Kuogee Hsieh <quic_khsieh@quicinc.com>
> >> ---
> >> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 2 ++
> >> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 1 +
> >> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c | 9 ++++++---
> >> 3 files changed, 9 insertions(+), 3 deletions(-)
> >>
> >> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> >> b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> >> index 272b14b..23680e7 100644
> >> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> >> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
> >> @@ -201,6 +201,7 @@ static const struct dpu_caps sdm845_dpu_caps = {
> >> .has_dim_layer = true,
> >> .has_idle_pc = true,
> >> .has_3d_merge = true,
> >> + .has_audio_select = true,
> >> .max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
> >> .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
> >> .max_hdeci_exp = MAX_HORZ_DECIMATION,
> >> @@ -229,6 +230,7 @@ static const struct dpu_caps sm8150_dpu_caps = {
> >> .has_dim_layer = true,
> >> .has_idle_pc = true,
> >> .has_3d_merge = true,
> >> + .has_audio_select = true,
> >> .max_linewidth = 4096,
> >> .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
> >> .max_hdeci_exp = MAX_HORZ_DECIMATION,
> >> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> >> b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> >> index e5a96d6..b33f91b 100644
> >> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> >> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> >> @@ -357,6 +357,7 @@ struct dpu_caps {
> >> bool has_dim_layer;
> >> bool has_idle_pc;
> >> bool has_3d_merge;
> >> + bool has_audio_select;
> >> /* SSPP limits */
> >> u32 max_linewidth;
> >> u32 pixel_ram_size;
> >> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
> >> b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
> >> index 282e3c6..e608f4d 100644
> >> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
> >> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
> >> @@ -261,14 +261,17 @@ static void dpu_hw_intf_audio_select(struct
> >> dpu_hw_mdp *mdp)
> >> }
> >> static void _setup_mdp_ops(struct dpu_hw_mdp_ops *ops,
> >> - unsigned long cap)
> >> + unsigned long cap,
> >> + const struct dpu_mdss_cfg *m)
> >> {
> >> ops->setup_split_pipe = dpu_hw_setup_split_pipe;
> >> ops->setup_clk_force_ctrl = dpu_hw_setup_clk_force_ctrl;
> >> ops->get_danger_status = dpu_hw_get_danger_status;
> >> ops->setup_vsync_source = dpu_hw_setup_vsync_source;
> >> ops->get_safe_status = dpu_hw_get_safe_status;
> >> - ops->intf_audio_select = dpu_hw_intf_audio_select;
> >> +
> >> + if (m->caps->has_audio_select)
> >> + ops->intf_audio_select = dpu_hw_intf_audio_select;
> >> }
> >> static const struct dpu_mdp_cfg *_top_offset(enum dpu_mdp mdp,
> >> @@ -320,7 +323,7 @@ struct dpu_hw_mdp *dpu_hw_mdptop_init(enum dpu_mdp
> >> idx,
> >> */
> >> mdp->idx = idx;
> >> mdp->caps = cfg;
> >> - _setup_mdp_ops(&mdp->ops, mdp->caps->features);
> >> + _setup_mdp_ops(&mdp->ops, mdp->caps->features, m);
> >> return mdp;
> >> }
> >
> >
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH] drm/msm: populate intf_audio_select() base on hardware capability
2022-02-11 23:36 ` Dmitry Baryshkov
(?)
@ 2022-02-14 17:55 ` Kuogee Hsieh
2022-02-14 21:00 ` Dmitry Baryshkov
-1 siblings, 1 reply; 15+ messages in thread
From: Kuogee Hsieh @ 2022-02-14 17:55 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: quic_abhinavk, airlied, freedreno, vkoul, dri-devel, swboyd,
agross, linux-arm-msm, quic_aravindh, bjorn.andersson, sean,
linux-kernel
[-- Attachment #1: Type: text/plain, Size: 4120 bytes --]
On 2/11/2022 3:36 PM, Dmitry Baryshkov wrote:
> On Sat, 12 Feb 2022 at 02:23, Kuogee Hsieh<quic_khsieh@quicinc.com> wrote:
>> intf_audio_select() callback function use to configure
>> HDMI_DP_CORE_SELECT to decide audio output routes to HDMI or DP
>> interface. HDMI is obsoleted at newer chipset. To keep supporting
>> legacy hdmi application, intf_audio_select call back function have
>> to be populated base on hardware chip capability where legacy
>> chipsets have has_audio_select flag set to true.
>>
>> Signed-off-by: Kuogee Hsieh<quic_khsieh@quicinc.com>
>> ---
>> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 2 ++
>> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 1 +
>> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c | 9 ++++++---
>> 3 files changed, 9 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
>> index 272b14b..23680e7 100644
>> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
>> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
>> @@ -201,6 +201,7 @@ static const struct dpu_caps sdm845_dpu_caps = {
>> .has_dim_layer = true,
>> .has_idle_pc = true,
>> .has_3d_merge = true,
>> + .has_audio_select = true,
>> .max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
>> .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
>> .max_hdeci_exp = MAX_HORZ_DECIMATION,
>> @@ -229,6 +230,7 @@ static const struct dpu_caps sm8150_dpu_caps = {
>> .has_dim_layer = true,
>> .has_idle_pc = true,
>> .has_3d_merge = true,
>> + .has_audio_select = true,
>> .max_linewidth = 4096,
>> .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
>> .max_hdeci_exp = MAX_HORZ_DECIMATION,
>> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
>> index e5a96d6..b33f91b 100644
>> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
>> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
>> @@ -357,6 +357,7 @@ struct dpu_caps {
>> bool has_dim_layer;
>> bool has_idle_pc;
>> bool has_3d_merge;
>> + bool has_audio_select;
> I'd suggest adding a bit to dpu_mdp_cfg's features instead, following
> the example of other hardware blocks.
it may cause mis leading if we put this in hardware level since
MDP_HDMI_DP_SELECT bit has not be connected
to logic for a while even it still present at ipcat. Also this bit but
will be removed at next release.
Is dpu_caps level more proper than in hardware feature level?
>
>> /* SSPP limits */
>> u32 max_linewidth;
>> u32 pixel_ram_size;
>> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
>> index 282e3c6..e608f4d 100644
>> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
>> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
>> @@ -261,14 +261,17 @@ static void dpu_hw_intf_audio_select(struct dpu_hw_mdp *mdp)
>> }
>>
>> static void _setup_mdp_ops(struct dpu_hw_mdp_ops *ops,
>> - unsigned long cap)
>> + unsigned long cap,
>> + const struct dpu_mdss_cfg *m)
>> {
>> ops->setup_split_pipe = dpu_hw_setup_split_pipe;
>> ops->setup_clk_force_ctrl = dpu_hw_setup_clk_force_ctrl;
>> ops->get_danger_status = dpu_hw_get_danger_status;
>> ops->setup_vsync_source = dpu_hw_setup_vsync_source;
>> ops->get_safe_status = dpu_hw_get_safe_status;
>> - ops->intf_audio_select = dpu_hw_intf_audio_select;
>> +
>> + if (m->caps->has_audio_select)
>> + ops->intf_audio_select = dpu_hw_intf_audio_select;
>> }
>>
>> static const struct dpu_mdp_cfg *_top_offset(enum dpu_mdp mdp,
>> @@ -320,7 +323,7 @@ struct dpu_hw_mdp *dpu_hw_mdptop_init(enum dpu_mdp idx,
>> */
>> mdp->idx = idx;
>> mdp->caps = cfg;
>> - _setup_mdp_ops(&mdp->ops, mdp->caps->features);
>> + _setup_mdp_ops(&mdp->ops, mdp->caps->features, m);
>>
>> return mdp;
>> }
[-- Attachment #2: Type: text/html, Size: 5893 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH] drm/msm: populate intf_audio_select() base on hardware capability
2022-02-14 17:55 ` Kuogee Hsieh
@ 2022-02-14 21:00 ` Dmitry Baryshkov
0 siblings, 0 replies; 15+ messages in thread
From: Dmitry Baryshkov @ 2022-02-14 21:00 UTC (permalink / raw)
To: Kuogee Hsieh
Cc: robdclark, sean, swboyd, vkoul, daniel, airlied, agross,
bjorn.andersson, quic_abhinavk, quic_aravindh, freedreno,
dri-devel, linux-arm-msm, linux-kernel
On 14/02/2022 20:55, Kuogee Hsieh wrote:
>
> On 2/11/2022 3:36 PM, Dmitry Baryshkov wrote:
>> On Sat, 12 Feb 2022 at 02:23, Kuogee Hsieh<quic_khsieh@quicinc.com> wrote:
>>> intf_audio_select() callback function use to configure
>>> HDMI_DP_CORE_SELECT to decide audio output routes to HDMI or DP
>>> interface. HDMI is obsoleted at newer chipset. To keep supporting
>>> legacy hdmi application, intf_audio_select call back function have
>>> to be populated base on hardware chip capability where legacy
>>> chipsets have has_audio_select flag set to true.
>>>
>>> Signed-off-by: Kuogee Hsieh<quic_khsieh@quicinc.com>
>>> ---
>>> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 2 ++
>>> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 1 +
>>> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c | 9 ++++++---
>>> 3 files changed, 9 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
>>> index 272b14b..23680e7 100644
>>> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
>>> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
>>> @@ -201,6 +201,7 @@ static const struct dpu_caps sdm845_dpu_caps = {
>>> .has_dim_layer = true,
>>> .has_idle_pc = true,
>>> .has_3d_merge = true,
>>> + .has_audio_select = true,
>>> .max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
>>> .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
>>> .max_hdeci_exp = MAX_HORZ_DECIMATION,
>>> @@ -229,6 +230,7 @@ static const struct dpu_caps sm8150_dpu_caps = {
>>> .has_dim_layer = true,
>>> .has_idle_pc = true,
>>> .has_3d_merge = true,
>>> + .has_audio_select = true,
>>> .max_linewidth = 4096,
>>> .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
>>> .max_hdeci_exp = MAX_HORZ_DECIMATION,
>>> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
>>> index e5a96d6..b33f91b 100644
>>> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
>>> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
>>> @@ -357,6 +357,7 @@ struct dpu_caps {
>>> bool has_dim_layer;
>>> bool has_idle_pc;
>>> bool has_3d_merge;
>>> + bool has_audio_select;
>> I'd suggest adding a bit to dpu_mdp_cfg's features instead, following
>> the example of other hardware blocks.
>
> it may cause mis leading if we put this in hardware level since
> MDP_HDMI_DP_SELECT bit has not be connected
>
> to logic for a while even it still present at ipcat. Also this bit but
> will be removed at next release.
I'm sorry, I can't quite catch you. Why would you like to remove this
bit at the next release?
>
> Is dpu_caps level more proper than in hardware feature level?
A priciple of the least surprise. In other hardware-dependent virtual
functions selection we use block's caps->features rather than boolean flags.
>
>
>>> /* SSPP limits */
>>> u32 max_linewidth;
>>> u32 pixel_ram_size;
>>> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
>>> index 282e3c6..e608f4d 100644
>>> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
>>> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
>>> @@ -261,14 +261,17 @@ static void dpu_hw_intf_audio_select(struct dpu_hw_mdp *mdp)
>>> }
>>>
>>> static void _setup_mdp_ops(struct dpu_hw_mdp_ops *ops,
>>> - unsigned long cap)
>>> + unsigned long cap,
>>> + const struct dpu_mdss_cfg *m)
>>> {
>>> ops->setup_split_pipe = dpu_hw_setup_split_pipe;
>>> ops->setup_clk_force_ctrl = dpu_hw_setup_clk_force_ctrl;
>>> ops->get_danger_status = dpu_hw_get_danger_status;
>>> ops->setup_vsync_source = dpu_hw_setup_vsync_source;
>>> ops->get_safe_status = dpu_hw_get_safe_status;
>>> - ops->intf_audio_select = dpu_hw_intf_audio_select;
>>> +
>>> + if (m->caps->has_audio_select)
>>> + ops->intf_audio_select = dpu_hw_intf_audio_select;
>>> }
>>>
>>> static const struct dpu_mdp_cfg *_top_offset(enum dpu_mdp mdp,
>>> @@ -320,7 +323,7 @@ struct dpu_hw_mdp *dpu_hw_mdptop_init(enum dpu_mdp idx,
>>> */
>>> mdp->idx = idx;
>>> mdp->caps = cfg;
>>> - _setup_mdp_ops(&mdp->ops, mdp->caps->features);
>>> + _setup_mdp_ops(&mdp->ops, mdp->caps->features, m);
>>>
>>> return mdp;
>>> }
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH] drm/msm: populate intf_audio_select() base on hardware capability
@ 2022-02-14 21:00 ` Dmitry Baryshkov
0 siblings, 0 replies; 15+ messages in thread
From: Dmitry Baryshkov @ 2022-02-14 21:00 UTC (permalink / raw)
To: Kuogee Hsieh
Cc: quic_abhinavk, airlied, freedreno, vkoul, dri-devel, swboyd,
agross, linux-arm-msm, quic_aravindh, bjorn.andersson, sean,
linux-kernel
On 14/02/2022 20:55, Kuogee Hsieh wrote:
>
> On 2/11/2022 3:36 PM, Dmitry Baryshkov wrote:
>> On Sat, 12 Feb 2022 at 02:23, Kuogee Hsieh<quic_khsieh@quicinc.com> wrote:
>>> intf_audio_select() callback function use to configure
>>> HDMI_DP_CORE_SELECT to decide audio output routes to HDMI or DP
>>> interface. HDMI is obsoleted at newer chipset. To keep supporting
>>> legacy hdmi application, intf_audio_select call back function have
>>> to be populated base on hardware chip capability where legacy
>>> chipsets have has_audio_select flag set to true.
>>>
>>> Signed-off-by: Kuogee Hsieh<quic_khsieh@quicinc.com>
>>> ---
>>> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c | 2 ++
>>> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h | 1 +
>>> drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c | 9 ++++++---
>>> 3 files changed, 9 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
>>> index 272b14b..23680e7 100644
>>> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
>>> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.c
>>> @@ -201,6 +201,7 @@ static const struct dpu_caps sdm845_dpu_caps = {
>>> .has_dim_layer = true,
>>> .has_idle_pc = true,
>>> .has_3d_merge = true,
>>> + .has_audio_select = true,
>>> .max_linewidth = DEFAULT_DPU_OUTPUT_LINE_WIDTH,
>>> .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
>>> .max_hdeci_exp = MAX_HORZ_DECIMATION,
>>> @@ -229,6 +230,7 @@ static const struct dpu_caps sm8150_dpu_caps = {
>>> .has_dim_layer = true,
>>> .has_idle_pc = true,
>>> .has_3d_merge = true,
>>> + .has_audio_select = true,
>>> .max_linewidth = 4096,
>>> .pixel_ram_size = DEFAULT_PIXEL_RAM_SIZE,
>>> .max_hdeci_exp = MAX_HORZ_DECIMATION,
>>> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
>>> index e5a96d6..b33f91b 100644
>>> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
>>> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
>>> @@ -357,6 +357,7 @@ struct dpu_caps {
>>> bool has_dim_layer;
>>> bool has_idle_pc;
>>> bool has_3d_merge;
>>> + bool has_audio_select;
>> I'd suggest adding a bit to dpu_mdp_cfg's features instead, following
>> the example of other hardware blocks.
>
> it may cause mis leading if we put this in hardware level since
> MDP_HDMI_DP_SELECT bit has not be connected
>
> to logic for a while even it still present at ipcat. Also this bit but
> will be removed at next release.
I'm sorry, I can't quite catch you. Why would you like to remove this
bit at the next release?
>
> Is dpu_caps level more proper than in hardware feature level?
A priciple of the least surprise. In other hardware-dependent virtual
functions selection we use block's caps->features rather than boolean flags.
>
>
>>> /* SSPP limits */
>>> u32 max_linewidth;
>>> u32 pixel_ram_size;
>>> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
>>> index 282e3c6..e608f4d 100644
>>> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
>>> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_top.c
>>> @@ -261,14 +261,17 @@ static void dpu_hw_intf_audio_select(struct dpu_hw_mdp *mdp)
>>> }
>>>
>>> static void _setup_mdp_ops(struct dpu_hw_mdp_ops *ops,
>>> - unsigned long cap)
>>> + unsigned long cap,
>>> + const struct dpu_mdss_cfg *m)
>>> {
>>> ops->setup_split_pipe = dpu_hw_setup_split_pipe;
>>> ops->setup_clk_force_ctrl = dpu_hw_setup_clk_force_ctrl;
>>> ops->get_danger_status = dpu_hw_get_danger_status;
>>> ops->setup_vsync_source = dpu_hw_setup_vsync_source;
>>> ops->get_safe_status = dpu_hw_get_safe_status;
>>> - ops->intf_audio_select = dpu_hw_intf_audio_select;
>>> +
>>> + if (m->caps->has_audio_select)
>>> + ops->intf_audio_select = dpu_hw_intf_audio_select;
>>> }
>>>
>>> static const struct dpu_mdp_cfg *_top_offset(enum dpu_mdp mdp,
>>> @@ -320,7 +323,7 @@ struct dpu_hw_mdp *dpu_hw_mdptop_init(enum dpu_mdp idx,
>>> */
>>> mdp->idx = idx;
>>> mdp->caps = cfg;
>>> - _setup_mdp_ops(&mdp->ops, mdp->caps->features);
>>> + _setup_mdp_ops(&mdp->ops, mdp->caps->features, m);
>>>
>>> return mdp;
>>> }
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH] drm/msm: populate intf_audio_select() base on hardware capability
2022-02-11 23:23 ` Kuogee Hsieh
@ 2022-02-16 2:26 ` Stephen Boyd
-1 siblings, 0 replies; 15+ messages in thread
From: Stephen Boyd @ 2022-02-16 2:26 UTC (permalink / raw)
To: Kuogee Hsieh, agross, airlied, bjorn.andersson, daniel,
dmitry.baryshkov, robdclark, sean, vkoul
Cc: quic_abhinavk, quic_aravindh, freedreno, dri-devel,
linux-arm-msm, linux-kernel
Quoting Kuogee Hsieh (2022-02-11 15:23:42)
> intf_audio_select() callback function use to configure
> HDMI_DP_CORE_SELECT to decide audio output routes to HDMI or DP
> interface. HDMI is obsoleted at newer chipset. To keep supporting
> legacy hdmi application, intf_audio_select call back function have
> to be populated base on hardware chip capability where legacy
> chipsets have has_audio_select flag set to true.
>
> Signed-off-by: Kuogee Hsieh <quic_khsieh@quicinc.com>
> ---
Reviewed-by: Stephen Boyd <swboyd@chromium.org>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH] drm/msm: populate intf_audio_select() base on hardware capability
@ 2022-02-16 2:26 ` Stephen Boyd
0 siblings, 0 replies; 15+ messages in thread
From: Stephen Boyd @ 2022-02-16 2:26 UTC (permalink / raw)
To: Kuogee Hsieh, agross, airlied, bjorn.andersson, daniel,
dmitry.baryshkov, robdclark, sean, vkoul
Cc: linux-arm-msm, quic_abhinavk, dri-devel, linux-kernel,
quic_aravindh, freedreno
Quoting Kuogee Hsieh (2022-02-11 15:23:42)
> intf_audio_select() callback function use to configure
> HDMI_DP_CORE_SELECT to decide audio output routes to HDMI or DP
> interface. HDMI is obsoleted at newer chipset. To keep supporting
> legacy hdmi application, intf_audio_select call back function have
> to be populated base on hardware chip capability where legacy
> chipsets have has_audio_select flag set to true.
>
> Signed-off-by: Kuogee Hsieh <quic_khsieh@quicinc.com>
> ---
Reviewed-by: Stephen Boyd <swboyd@chromium.org>
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2022-02-16 2:26 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-11 23:23 [PATCH] drm/msm: populate intf_audio_select() base on hardware capability Kuogee Hsieh
2022-02-11 23:23 ` Kuogee Hsieh
2022-02-11 23:36 ` Dmitry Baryshkov
2022-02-11 23:36 ` Dmitry Baryshkov
2022-02-14 17:55 ` Kuogee Hsieh
2022-02-14 21:00 ` Dmitry Baryshkov
2022-02-14 21:00 ` Dmitry Baryshkov
2022-02-12 0:08 ` Dmitry Baryshkov
2022-02-12 0:08 ` Dmitry Baryshkov
2022-02-12 0:59 ` Abhinav Kumar
2022-02-12 0:59 ` Abhinav Kumar
2022-02-12 16:16 ` Dmitry Baryshkov
2022-02-12 16:16 ` Dmitry Baryshkov
2022-02-16 2:26 ` Stephen Boyd
2022-02-16 2:26 ` Stephen Boyd
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.