All of lore.kernel.org
 help / color / mirror / Atom feed
From: Abhinav Kumar <quic_abhinavk@quicinc.com>
To: Marijn Suijten <marijn.suijten@somainline.org>,
	<phone-devel@vger.kernel.org>, Rob Clark <robdclark@gmail.com>,
	"Dmitry Baryshkov" <dmitry.baryshkov@linaro.org>,
	Vinod Koul <vkoul@kernel.org>
Cc: ~postmarketos/upstreaming@lists.sr.ht,
	"AngeloGioacchino Del Regno"
	<angelogioacchino.delregno@somainline.org>,
	"Konrad Dybcio" <konrad.dybcio@somainline.org>,
	"Martin Botka" <martin.botka@somainline.org>,
	"Jami Kettunen" <jami.kettunen@somainline.org>,
	"Sean Paul" <sean@poorly.run>, "David Airlie" <airlied@gmail.com>,
	"Daniel Vetter" <daniel@ffwll.ch>,
	"Stephen Boyd" <swboyd@chromium.org>,
	"Bjorn Andersson" <andersson@kernel.org>,
	"Jessica Zhang" <quic_jesszhan@quicinc.com>,
	"Ville Syrjälä" <ville.syrjala@linux.intel.com>,
	"Kuogee Hsieh" <quic_khsieh@quicinc.com>,
	"Jani Nikula" <jani.nikula@intel.com>,
	sunliming <sunliming@kylinos.cn>,
	"Sam Ravnborg" <sam@ravnborg.org>,
	"Haowen Bai" <baihaowen@meizu.com>,
	"Konrad Dybcio" <konrad.dybcio@linaro.org>,
	"Loic Poulain" <loic.poulain@linaro.org>,
	"Vinod Polimera" <quic_vpolimer@quicinc.com>,
	"Douglas Anderson" <dianders@chromium.org>,
	"Vladimir Lypak" <vladimir.lypak@gmail.com>,
	linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org,
	freedreno@lists.freedesktop.org, linux-kernel@vger.kernel.org
Subject: Re: [RFC PATCH 1/6] drm/msm/dpu1: Implement DSC binding to PP block for CTL V1
Date: Fri, 16 Dec 2022 12:51:52 -0800	[thread overview]
Message-ID: <1bb4e2c3-3f6f-c161-ba7b-8e96f100f926@quicinc.com> (raw)
In-Reply-To: <20221213232207.113607-2-marijn.suijten@somainline.org>



On 12/13/2022 3:22 PM, Marijn Suijten wrote:
> All V1 CTL blocks (active CTLs) explicitly bind the pixel output from a
> DSC block to a PINGPONG block by setting the PINGPONG idx in a DSC
> hardware register.
> 
> Signed-off-by: Marijn Suijten <marijn.suijten@somainline.org>
Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
> ---
>   drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c   |  3 +++
>   .../gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h    |  9 +++++++
>   drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.c    | 27 +++++++++++++++++++
>   drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.h    |  4 +++
>   4 files changed, 43 insertions(+)
> 
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
> index 9c6817b5a194..c17ac85eb447 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
> @@ -1830,6 +1830,9 @@ static void dpu_encoder_dsc_pipe_cfg(struct dpu_hw_dsc *hw_dsc,
>   	if (hw_pp->ops.setup_dsc)
>   		hw_pp->ops.setup_dsc(hw_pp);
>   
> +	if (hw_dsc->ops.dsc_bind_pingpong_blk)
> +		hw_dsc->ops.dsc_bind_pingpong_blk(hw_dsc, true, hw_pp->idx);
> +
>   	if (hw_pp->ops.enable_dsc)
>   		hw_pp->ops.enable_dsc(hw_pp);
>   }
> 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 c160dae95a69..96f849907aa2 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> @@ -268,6 +268,15 @@ enum {
>   	DPU_VBIF_MAX
>   };
>   
> +/**
> + * DSC features
> + * @DPU_DSC_OUTPUT_CTRL       Configure which PINGPONG block gets
> + *                            the pixel output from this DSC.
> + */
> +enum {
> +	DPU_DSC_OUTPUT_CTRL = 0x1,
> +};
> +
>   /**
>    * MACRO DPU_HW_BLK_INFO - information of HW blocks inside DPU
>    * @name:              string name for debug purposes
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.c
> index 3662df698dae..619926da1441 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.c
> @@ -29,6 +29,8 @@
>   #define DSC_RANGE_MAX_QP                0x0B0
>   #define DSC_RANGE_BPG_OFFSET            0x0EC
>   
> +#define DSC_CTL(m) (0x1800 - 0x3FC * (m - DSC_0))
> +
>   static void dpu_hw_dsc_disable(struct dpu_hw_dsc *dsc)
>   {
>   	struct dpu_hw_blk_reg_map *c = &dsc->hw;
> @@ -150,6 +152,29 @@ static void dpu_hw_dsc_config_thresh(struct dpu_hw_dsc *hw_dsc,
>   	}
>   }
>   
> +static void dpu_hw_dsc_bind_pingpong_blk(
> +		struct dpu_hw_dsc *hw_dsc,
> +		bool enable,
> +		const enum dpu_pingpong pp)
> +{
> +	struct dpu_hw_blk_reg_map *c = &hw_dsc->hw;
> +	int mux_cfg = 0xF;
> +	u32 dsc_ctl_offset;
> +
> +	dsc_ctl_offset = DSC_CTL(hw_dsc->idx);
> +
> +	if (enable)
> +		mux_cfg = (pp - PINGPONG_0) & 0x7;
> +
> +	DRM_DEBUG_KMS("%s dsc:%d %s pp:%d\n",
> +			enable ? "Binding" : "Unbinding",
> +			hw_dsc->idx - DSC_0,
> +			enable ? "to" : "from",
> +			pp - PINGPONG_0);
> +
> +	DPU_REG_WRITE(c, dsc_ctl_offset, mux_cfg);
> +}
> +
>   static struct dpu_dsc_cfg *_dsc_offset(enum dpu_dsc dsc,
>   				       const struct dpu_mdss_cfg *m,
>   				       void __iomem *addr,
> @@ -174,6 +199,8 @@ static void _setup_dsc_ops(struct dpu_hw_dsc_ops *ops,
>   	ops->dsc_disable = dpu_hw_dsc_disable;
>   	ops->dsc_config = dpu_hw_dsc_config;
>   	ops->dsc_config_thresh = dpu_hw_dsc_config_thresh;
> +	if (cap & BIT(DPU_DSC_OUTPUT_CTRL))
> +		ops->dsc_bind_pingpong_blk = dpu_hw_dsc_bind_pingpong_blk;
>   };
>   
>   struct dpu_hw_dsc *dpu_hw_dsc_init(enum dpu_dsc idx, void __iomem *addr,
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.h
> index c0b77fe1a696..ae9b5db53d7f 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.h
> @@ -42,6 +42,10 @@ struct dpu_hw_dsc_ops {
>   	 */
>   	void (*dsc_config_thresh)(struct dpu_hw_dsc *hw_dsc,
>   				  struct drm_dsc_config *dsc);
> +
> +	void (*dsc_bind_pingpong_blk)(struct dpu_hw_dsc *hw_dsc,
> +				  bool enable,
> +				  enum dpu_pingpong pp);
>   };
>   
>   struct dpu_hw_dsc {

WARNING: multiple messages have this Message-ID (diff)
From: Abhinav Kumar <quic_abhinavk@quicinc.com>
To: Marijn Suijten <marijn.suijten@somainline.org>,
	<phone-devel@vger.kernel.org>, Rob Clark <robdclark@gmail.com>,
	"Dmitry Baryshkov" <dmitry.baryshkov@linaro.org>,
	Vinod Koul <vkoul@kernel.org>
Cc: Konrad Dybcio <konrad.dybcio@somainline.org>,
	dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
	AngeloGioacchino Del Regno
	<angelogioacchino.delregno@somainline.org>,
	Vinod Polimera <quic_vpolimer@quicinc.com>,
	Sam Ravnborg <sam@ravnborg.org>, Haowen Bai <baihaowen@meizu.com>,
	Kuogee Hsieh <quic_khsieh@quicinc.com>,
	Jessica Zhang <quic_jesszhan@quicinc.com>,
	Jani Nikula <jani.nikula@intel.com>,
	linux-arm-msm@vger.kernel.org, Stephen Boyd <swboyd@chromium.org>,
	Martin Botka <martin.botka@somainline.org>,
	~postmarketos/upstreaming@lists.sr.ht,
	Sean Paul <sean@poorly.run>,
	Loic Poulain <loic.poulain@linaro.org>,
	Jami Kettunen <jami.kettunen@somainline.org>,
	Bjorn Andersson <andersson@kernel.org>,
	Vladimir Lypak <vladimir.lypak@gmail.com>,
	Douglas Anderson <dianders@chromium.org>,
	Konrad Dybcio <konrad.dybcio@linaro.org>,
	sunliming <sunliming@kylinos.cn>,
	freedreno@lists.freedesktop.org
Subject: Re: [RFC PATCH 1/6] drm/msm/dpu1: Implement DSC binding to PP block for CTL V1
Date: Fri, 16 Dec 2022 12:51:52 -0800	[thread overview]
Message-ID: <1bb4e2c3-3f6f-c161-ba7b-8e96f100f926@quicinc.com> (raw)
In-Reply-To: <20221213232207.113607-2-marijn.suijten@somainline.org>



On 12/13/2022 3:22 PM, Marijn Suijten wrote:
> All V1 CTL blocks (active CTLs) explicitly bind the pixel output from a
> DSC block to a PINGPONG block by setting the PINGPONG idx in a DSC
> hardware register.
> 
> Signed-off-by: Marijn Suijten <marijn.suijten@somainline.org>
Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
> ---
>   drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c   |  3 +++
>   .../gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h    |  9 +++++++
>   drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.c    | 27 +++++++++++++++++++
>   drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.h    |  4 +++
>   4 files changed, 43 insertions(+)
> 
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
> index 9c6817b5a194..c17ac85eb447 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_encoder.c
> @@ -1830,6 +1830,9 @@ static void dpu_encoder_dsc_pipe_cfg(struct dpu_hw_dsc *hw_dsc,
>   	if (hw_pp->ops.setup_dsc)
>   		hw_pp->ops.setup_dsc(hw_pp);
>   
> +	if (hw_dsc->ops.dsc_bind_pingpong_blk)
> +		hw_dsc->ops.dsc_bind_pingpong_blk(hw_dsc, true, hw_pp->idx);
> +
>   	if (hw_pp->ops.enable_dsc)
>   		hw_pp->ops.enable_dsc(hw_pp);
>   }
> 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 c160dae95a69..96f849907aa2 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_catalog.h
> @@ -268,6 +268,15 @@ enum {
>   	DPU_VBIF_MAX
>   };
>   
> +/**
> + * DSC features
> + * @DPU_DSC_OUTPUT_CTRL       Configure which PINGPONG block gets
> + *                            the pixel output from this DSC.
> + */
> +enum {
> +	DPU_DSC_OUTPUT_CTRL = 0x1,
> +};
> +
>   /**
>    * MACRO DPU_HW_BLK_INFO - information of HW blocks inside DPU
>    * @name:              string name for debug purposes
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.c
> index 3662df698dae..619926da1441 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.c
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.c
> @@ -29,6 +29,8 @@
>   #define DSC_RANGE_MAX_QP                0x0B0
>   #define DSC_RANGE_BPG_OFFSET            0x0EC
>   
> +#define DSC_CTL(m) (0x1800 - 0x3FC * (m - DSC_0))
> +
>   static void dpu_hw_dsc_disable(struct dpu_hw_dsc *dsc)
>   {
>   	struct dpu_hw_blk_reg_map *c = &dsc->hw;
> @@ -150,6 +152,29 @@ static void dpu_hw_dsc_config_thresh(struct dpu_hw_dsc *hw_dsc,
>   	}
>   }
>   
> +static void dpu_hw_dsc_bind_pingpong_blk(
> +		struct dpu_hw_dsc *hw_dsc,
> +		bool enable,
> +		const enum dpu_pingpong pp)
> +{
> +	struct dpu_hw_blk_reg_map *c = &hw_dsc->hw;
> +	int mux_cfg = 0xF;
> +	u32 dsc_ctl_offset;
> +
> +	dsc_ctl_offset = DSC_CTL(hw_dsc->idx);
> +
> +	if (enable)
> +		mux_cfg = (pp - PINGPONG_0) & 0x7;
> +
> +	DRM_DEBUG_KMS("%s dsc:%d %s pp:%d\n",
> +			enable ? "Binding" : "Unbinding",
> +			hw_dsc->idx - DSC_0,
> +			enable ? "to" : "from",
> +			pp - PINGPONG_0);
> +
> +	DPU_REG_WRITE(c, dsc_ctl_offset, mux_cfg);
> +}
> +
>   static struct dpu_dsc_cfg *_dsc_offset(enum dpu_dsc dsc,
>   				       const struct dpu_mdss_cfg *m,
>   				       void __iomem *addr,
> @@ -174,6 +199,8 @@ static void _setup_dsc_ops(struct dpu_hw_dsc_ops *ops,
>   	ops->dsc_disable = dpu_hw_dsc_disable;
>   	ops->dsc_config = dpu_hw_dsc_config;
>   	ops->dsc_config_thresh = dpu_hw_dsc_config_thresh;
> +	if (cap & BIT(DPU_DSC_OUTPUT_CTRL))
> +		ops->dsc_bind_pingpong_blk = dpu_hw_dsc_bind_pingpong_blk;
>   };
>   
>   struct dpu_hw_dsc *dpu_hw_dsc_init(enum dpu_dsc idx, void __iomem *addr,
> diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.h b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.h
> index c0b77fe1a696..ae9b5db53d7f 100644
> --- a/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.h
> +++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_dsc.h
> @@ -42,6 +42,10 @@ struct dpu_hw_dsc_ops {
>   	 */
>   	void (*dsc_config_thresh)(struct dpu_hw_dsc *hw_dsc,
>   				  struct drm_dsc_config *dsc);
> +
> +	void (*dsc_bind_pingpong_blk)(struct dpu_hw_dsc *hw_dsc,
> +				  bool enable,
> +				  enum dpu_pingpong pp);
>   };
>   
>   struct dpu_hw_dsc {

  parent reply	other threads:[~2022-12-16 20:52 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-12-13 23:22 [RFC PATCH 0/6] drm/msm: DSC Electric Boogaloo for sm8[12]50 Marijn Suijten
2022-12-13 23:22 ` Marijn Suijten
2022-12-13 23:22 ` [RFC PATCH 1/6] drm/msm/dpu1: Implement DSC binding to PP block for CTL V1 Marijn Suijten
2022-12-13 23:22   ` Marijn Suijten
2022-12-14 18:40   ` Dmitry Baryshkov
2022-12-14 18:40     ` Dmitry Baryshkov
2022-12-16 20:51   ` Abhinav Kumar [this message]
2022-12-16 20:51     ` Abhinav Kumar
2022-12-13 23:22 ` [RFC PATCH 2/6] drm/msm/dpu1: Add DSC config for sm8150 and sm8250 Marijn Suijten
2022-12-13 23:22   ` Marijn Suijten
2022-12-14 18:42   ` Dmitry Baryshkov
2022-12-14 18:42     ` Dmitry Baryshkov
2022-12-16 20:53   ` Abhinav Kumar
2022-12-16 20:53     ` Abhinav Kumar
2022-12-13 23:22 ` [RFC PATCH 3/6] drm/msm/dpu1: Wire up DSC mask for active CTL configuration Marijn Suijten
2022-12-13 23:22   ` Marijn Suijten
2022-12-14 18:43   ` Dmitry Baryshkov
2022-12-14 18:43     ` Dmitry Baryshkov
2022-12-14 19:30     ` Marijn Suijten
2022-12-14 19:30       ` Marijn Suijten
2022-12-15  1:08       ` Dmitry Baryshkov
2022-12-16 22:20         ` Abhinav Kumar
2022-12-20 22:32           ` Marijn Suijten
2022-12-20 22:32             ` Marijn Suijten
2022-12-13 23:22 ` [RFC PATCH 4/6] drm/msm/dsi: Use DSC slice(s) packet size to compute word count Marijn Suijten
2022-12-13 23:22   ` Marijn Suijten
2022-12-14 18:52   ` Dmitry Baryshkov
2022-12-14 18:52     ` Dmitry Baryshkov
2022-12-16 23:01   ` Abhinav Kumar
2022-12-16 23:01     ` Abhinav Kumar
2022-12-13 23:22 ` [RFC PATCH 5/6] drm/msm/dsi: Flip greater-than check for slice_count and slice_per_intf Marijn Suijten
2022-12-13 23:22   ` Marijn Suijten
2022-12-14  0:02   ` Konrad Dybcio
2022-12-14  0:02     ` Konrad Dybcio
2022-12-14  8:38     ` Marijn Suijten
2022-12-14  8:38       ` Marijn Suijten
2022-12-14 18:53   ` Dmitry Baryshkov
2022-12-14 18:53     ` Dmitry Baryshkov
2022-12-17  0:31   ` Abhinav Kumar
2022-12-17  0:31     ` Abhinav Kumar
2022-12-13 23:22 ` [RFC PATCH 6/6] drm/msm/dpu: Disallow unallocated (DSC) resources to be returned Marijn Suijten
2022-12-13 23:22   ` Marijn Suijten
2022-12-14 18:56   ` Dmitry Baryshkov
2022-12-14 18:56     ` Dmitry Baryshkov
2022-12-14 19:31     ` Marijn Suijten
2022-12-14 19:31       ` Marijn Suijten
2022-12-14 18:40 ` [RFC PATCH 0/6] drm/msm: DSC Electric Boogaloo for sm8[12]50 Dmitry Baryshkov
2022-12-14 18:40   ` Dmitry Baryshkov
2022-12-14 19:23   ` Marijn Suijten
2022-12-14 19:23     ` Marijn Suijten
2022-12-15  0:52     ` Dmitry Baryshkov
2022-12-20 22:35       ` Marijn Suijten
2022-12-20 22:35         ` Marijn Suijten

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1bb4e2c3-3f6f-c161-ba7b-8e96f100f926@quicinc.com \
    --to=quic_abhinavk@quicinc.com \
    --cc=airlied@gmail.com \
    --cc=andersson@kernel.org \
    --cc=angelogioacchino.delregno@somainline.org \
    --cc=baihaowen@meizu.com \
    --cc=daniel@ffwll.ch \
    --cc=dianders@chromium.org \
    --cc=dmitry.baryshkov@linaro.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=freedreno@lists.freedesktop.org \
    --cc=jami.kettunen@somainline.org \
    --cc=jani.nikula@intel.com \
    --cc=konrad.dybcio@linaro.org \
    --cc=konrad.dybcio@somainline.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=loic.poulain@linaro.org \
    --cc=marijn.suijten@somainline.org \
    --cc=martin.botka@somainline.org \
    --cc=phone-devel@vger.kernel.org \
    --cc=quic_jesszhan@quicinc.com \
    --cc=quic_khsieh@quicinc.com \
    --cc=quic_vpolimer@quicinc.com \
    --cc=robdclark@gmail.com \
    --cc=sam@ravnborg.org \
    --cc=sean@poorly.run \
    --cc=sunliming@kylinos.cn \
    --cc=swboyd@chromium.org \
    --cc=ville.syrjala@linux.intel.com \
    --cc=vkoul@kernel.org \
    --cc=vladimir.lypak@gmail.com \
    --cc=~postmarketos/upstreaming@lists.sr.ht \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.