All of lore.kernel.org
 help / color / mirror / Atom feed
From: CK Hu <ck.hu@mediatek.com>
To: Nancy.Lin <nancy.lin@mediatek.com>,
	Rob Herring <robh+dt@kernel.org>,
	Matthias Brugger <matthias.bgg@gmail.com>,
	Chun-Kuang Hu <chunkuang.hu@kernel.org>,
	Philipp Zabel <p.zabel@pengutronix.de>, <wim@linux-watchdog.org>,
	AngeloGioacchino Del Regno
	<angelogioacchino.delregno@collabora.com>, <linux@roeck-us.net>
Cc: <devicetree@vger.kernel.org>,
	<Project_Global_Chrome_Upstream_Group@mediatek.com>,
	Yongqiang Niu <yongqiang.niu@mediatek.com>,
	David Airlie <airlied@linux.ie>,
	"jason-jh . lin" <jason-jh.lin@mediatek.com>,
	<singo.chang@mediatek.com>, <llvm@lists.linux.dev>,
	Nick Desaulniers <ndesaulniers@google.com>,
	<linux-kernel@vger.kernel.org>, <dri-devel@lists.freedesktop.org>,
	"Nathan Chancellor" <nathan@kernel.org>,
	<linux-mediatek@lists.infradead.org>,
	<linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH v23 04/14] drm/mediatek: add display merge advance config API for MT8195
Date: Tue, 28 Jun 2022 09:32:21 +0800	[thread overview]
Message-ID: <eb096460b04fed32d29db9f6b66c839e964d2a74.camel@mediatek.com> (raw)
In-Reply-To: <20220620091930.27797-5-nancy.lin@mediatek.com>

Hi, Nancy:

On Mon, 2022-06-20 at 17:19 +0800, Nancy.Lin wrote:
> Add merge new advance config API. The original merge API is
> mtk_ddp_comp_funcs function prototype. The API interface parameters
> cannot be modified, so add a new config API for extension. This is
> the preparation for ovl_adaptor merge control.

Applied to mediatek-drm-next [1], thanks.

[1] 
https://git.kernel.org/pub/scm/linux/kernel/git/chunkuang.hu/linux.git/log/?h=mediatek-drm-next

Regards,
CK

> 
> Signed-off-by: Nancy.Lin <nancy.lin@mediatek.com>
> Reviewed-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
> Reviewed-by: AngeloGioacchino Del Regno <
> angelogioacchino.delregno@collabora.com>
> Tested-by: AngeloGioacchino Del Regno <
> angelogioacchino.delregno@collabora.com>
> Tested-by: Bo-Chen Chen <rex-bc.chen@mediatek.com>
> ---
>  drivers/gpu/drm/mediatek/mtk_disp_drv.h   |  3 ++
>  drivers/gpu/drm/mediatek/mtk_disp_merge.c | 52 ++++++++++++++++++++-
> --
>  2 files changed, 48 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/gpu/drm/mediatek/mtk_disp_drv.h
> b/drivers/gpu/drm/mediatek/mtk_disp_drv.h
> index 2cd1c660ace3..e847e90f436d 100644
> --- a/drivers/gpu/drm/mediatek/mtk_disp_drv.h
> +++ b/drivers/gpu/drm/mediatek/mtk_disp_drv.h
> @@ -63,6 +63,9 @@ void mtk_merge_config(struct device *dev, unsigned
> int width,
>  		      unsigned int bpc, struct cmdq_pkt *cmdq_pkt);
>  void mtk_merge_start(struct device *dev);
>  void mtk_merge_stop(struct device *dev);
> +void mtk_merge_advance_config(struct device *dev, unsigned int l_w,
> unsigned int r_w,
> +			      unsigned int h, unsigned int vrefresh,
> unsigned int bpc,
> +			      struct cmdq_pkt *cmdq_pkt);
>  
>  void mtk_ovl_bgclr_in_on(struct device *dev);
>  void mtk_ovl_bgclr_in_off(struct device *dev);
> diff --git a/drivers/gpu/drm/mediatek/mtk_disp_merge.c
> b/drivers/gpu/drm/mediatek/mtk_disp_merge.c
> index 45face638153..40da0555416d 100644
> --- a/drivers/gpu/drm/mediatek/mtk_disp_merge.c
> +++ b/drivers/gpu/drm/mediatek/mtk_disp_merge.c
> @@ -17,6 +17,7 @@
>  #define DISP_REG_MERGE_CTRL		0x000
>  #define MERGE_EN				1
>  #define DISP_REG_MERGE_CFG_0		0x010
> +#define DISP_REG_MERGE_CFG_1		0x014
>  #define DISP_REG_MERGE_CFG_4		0x020
>  #define DISP_REG_MERGE_CFG_10		0x038
>  /* no swap */
> @@ -25,9 +26,12 @@
>  #define DISP_REG_MERGE_CFG_12		0x040
>  #define CFG_10_10_1PI_2PO_BUF_MODE		6
>  #define CFG_10_10_2PI_2PO_BUF_MODE		8
> +#define CFG_11_10_1PI_2PO_MERGE			18
>  #define FLD_CFG_MERGE_MODE			GENMASK(4, 0)
>  #define DISP_REG_MERGE_CFG_24		0x070
>  #define DISP_REG_MERGE_CFG_25		0x074
> +#define DISP_REG_MERGE_CFG_26		0x078
> +#define DISP_REG_MERGE_CFG_27		0x07c
>  #define DISP_REG_MERGE_CFG_36		0x0a0
>  #define ULTRA_EN				BIT(0)
>  #define PREULTRA_EN				BIT(4)
> @@ -98,12 +102,19 @@ static void mtk_merge_fifo_setting(struct
> mtk_disp_merge *priv,
>  void mtk_merge_config(struct device *dev, unsigned int w,
>  		      unsigned int h, unsigned int vrefresh,
>  		      unsigned int bpc, struct cmdq_pkt *cmdq_pkt)
> +{
> +	mtk_merge_advance_config(dev, w, 0, h, vrefresh, bpc,
> cmdq_pkt);
> +}
> +
> +void mtk_merge_advance_config(struct device *dev, unsigned int l_w,
> unsigned int r_w,
> +			      unsigned int h, unsigned int vrefresh,
> unsigned int bpc,
> +			      struct cmdq_pkt *cmdq_pkt)
>  {
>  	struct mtk_disp_merge *priv = dev_get_drvdata(dev);
>  	unsigned int mode = CFG_10_10_1PI_2PO_BUF_MODE;
>  
> -	if (!h || !w) {
> -		dev_err(dev, "%s: input width(%d) or height(%d) is
> invalid\n", __func__, w, h);
> +	if (!h || !l_w) {
> +		dev_err(dev, "%s: input width(%d) or height(%d) is
> invalid\n", __func__, l_w, h);
>  		return;
>  	}
>  
> @@ -112,14 +123,41 @@ void mtk_merge_config(struct device *dev,
> unsigned int w,
>  		mode = CFG_10_10_2PI_2PO_BUF_MODE;
>  	}
>  
> -	mtk_ddp_write(cmdq_pkt, h << 16 | w, &priv->cmdq_reg, priv-
> >regs,
> +	if (r_w)
> +		mode = CFG_11_10_1PI_2PO_MERGE;
> +
> +	mtk_ddp_write(cmdq_pkt, h << 16 | l_w, &priv->cmdq_reg, priv-
> >regs,
>  		      DISP_REG_MERGE_CFG_0);
> -	mtk_ddp_write(cmdq_pkt, h << 16 | w, &priv->cmdq_reg, priv-
> >regs,
> +	mtk_ddp_write(cmdq_pkt, h << 16 | r_w, &priv->cmdq_reg, priv-
> >regs,
> +		      DISP_REG_MERGE_CFG_1);
> +	mtk_ddp_write(cmdq_pkt, h << 16 | (l_w + r_w), &priv->cmdq_reg, 
> priv->regs,
>  		      DISP_REG_MERGE_CFG_4);
> -	mtk_ddp_write(cmdq_pkt, h << 16 | w, &priv->cmdq_reg, priv-
> >regs,
> +	/*
> +	 * DISP_REG_MERGE_CFG_24 is merge SRAM0 w/h
> +	 * DISP_REG_MERGE_CFG_25 is merge SRAM1 w/h.
> +	 * If r_w > 0, the merge is in merge mode (input0 and input1
> merge together),
> +	 * the input0 goes to SRAM0, and input1 goes to SRAM1.
> +	 * If r_w = 0, the merge is in buffer mode, the input goes
> through SRAM0 and
> +	 * then to SRAM1. Both SRAM0 and SRAM1 are set to the same
> size.
> +	 */
> +	mtk_ddp_write(cmdq_pkt, h << 16 | l_w, &priv->cmdq_reg, priv-
> >regs,
>  		      DISP_REG_MERGE_CFG_24);
> -	mtk_ddp_write(cmdq_pkt, h << 16 | w, &priv->cmdq_reg, priv-
> >regs,
> -		      DISP_REG_MERGE_CFG_25);
> +	if (r_w)
> +		mtk_ddp_write(cmdq_pkt, h << 16 | r_w, &priv->cmdq_reg, 
> priv->regs,
> +			      DISP_REG_MERGE_CFG_25);
> +	else
> +		mtk_ddp_write(cmdq_pkt, h << 16 | l_w, &priv->cmdq_reg, 
> priv->regs,
> +			      DISP_REG_MERGE_CFG_25);
> +
> +	/*
> +	 * DISP_REG_MERGE_CFG_26 and DISP_REG_MERGE_CFG_27 is only used
> in LR merge.
> +	 * Only take effect when the merge is setting to merge mode.
> +	 */
> +	mtk_ddp_write(cmdq_pkt, h << 16 | l_w, &priv->cmdq_reg, priv-
> >regs,
> +		      DISP_REG_MERGE_CFG_26);
> +	mtk_ddp_write(cmdq_pkt, h << 16 | r_w, &priv->cmdq_reg, priv-
> >regs,
> +		      DISP_REG_MERGE_CFG_27);
> +
>  	mtk_ddp_write_mask(cmdq_pkt, SWAP_MODE, &priv->cmdq_reg, priv-
> >regs,
>  			   DISP_REG_MERGE_CFG_10, FLD_SWAP_MODE);
>  	mtk_ddp_write_mask(cmdq_pkt, mode, &priv->cmdq_reg, priv->regs,


WARNING: multiple messages have this Message-ID (diff)
From: CK Hu <ck.hu@mediatek.com>
To: Nancy.Lin <nancy.lin@mediatek.com>,
	Rob Herring <robh+dt@kernel.org>,
	Matthias Brugger <matthias.bgg@gmail.com>,
	Chun-Kuang Hu <chunkuang.hu@kernel.org>,
	Philipp Zabel <p.zabel@pengutronix.de>, <wim@linux-watchdog.org>,
	AngeloGioacchino Del Regno
	<angelogioacchino.delregno@collabora.com>, <linux@roeck-us.net>
Cc: devicetree@vger.kernel.org, David Airlie <airlied@linux.ie>,
	"jason-jh . lin" <jason-jh.lin@mediatek.com>,
	singo.chang@mediatek.com, llvm@lists.linux.dev,
	Nick Desaulniers <ndesaulniers@google.com>,
	linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
	Project_Global_Chrome_Upstream_Group@mediatek.com,
	linux-mediatek@lists.infradead.org,
	Yongqiang Niu <yongqiang.niu@mediatek.com>,
	Nathan Chancellor <nathan@kernel.org>,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v23 04/14] drm/mediatek: add display merge advance config API for MT8195
Date: Tue, 28 Jun 2022 09:32:21 +0800	[thread overview]
Message-ID: <eb096460b04fed32d29db9f6b66c839e964d2a74.camel@mediatek.com> (raw)
In-Reply-To: <20220620091930.27797-5-nancy.lin@mediatek.com>

Hi, Nancy:

On Mon, 2022-06-20 at 17:19 +0800, Nancy.Lin wrote:
> Add merge new advance config API. The original merge API is
> mtk_ddp_comp_funcs function prototype. The API interface parameters
> cannot be modified, so add a new config API for extension. This is
> the preparation for ovl_adaptor merge control.

Applied to mediatek-drm-next [1], thanks.

[1] 
https://git.kernel.org/pub/scm/linux/kernel/git/chunkuang.hu/linux.git/log/?h=mediatek-drm-next

Regards,
CK

> 
> Signed-off-by: Nancy.Lin <nancy.lin@mediatek.com>
> Reviewed-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
> Reviewed-by: AngeloGioacchino Del Regno <
> angelogioacchino.delregno@collabora.com>
> Tested-by: AngeloGioacchino Del Regno <
> angelogioacchino.delregno@collabora.com>
> Tested-by: Bo-Chen Chen <rex-bc.chen@mediatek.com>
> ---
>  drivers/gpu/drm/mediatek/mtk_disp_drv.h   |  3 ++
>  drivers/gpu/drm/mediatek/mtk_disp_merge.c | 52 ++++++++++++++++++++-
> --
>  2 files changed, 48 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/gpu/drm/mediatek/mtk_disp_drv.h
> b/drivers/gpu/drm/mediatek/mtk_disp_drv.h
> index 2cd1c660ace3..e847e90f436d 100644
> --- a/drivers/gpu/drm/mediatek/mtk_disp_drv.h
> +++ b/drivers/gpu/drm/mediatek/mtk_disp_drv.h
> @@ -63,6 +63,9 @@ void mtk_merge_config(struct device *dev, unsigned
> int width,
>  		      unsigned int bpc, struct cmdq_pkt *cmdq_pkt);
>  void mtk_merge_start(struct device *dev);
>  void mtk_merge_stop(struct device *dev);
> +void mtk_merge_advance_config(struct device *dev, unsigned int l_w,
> unsigned int r_w,
> +			      unsigned int h, unsigned int vrefresh,
> unsigned int bpc,
> +			      struct cmdq_pkt *cmdq_pkt);
>  
>  void mtk_ovl_bgclr_in_on(struct device *dev);
>  void mtk_ovl_bgclr_in_off(struct device *dev);
> diff --git a/drivers/gpu/drm/mediatek/mtk_disp_merge.c
> b/drivers/gpu/drm/mediatek/mtk_disp_merge.c
> index 45face638153..40da0555416d 100644
> --- a/drivers/gpu/drm/mediatek/mtk_disp_merge.c
> +++ b/drivers/gpu/drm/mediatek/mtk_disp_merge.c
> @@ -17,6 +17,7 @@
>  #define DISP_REG_MERGE_CTRL		0x000
>  #define MERGE_EN				1
>  #define DISP_REG_MERGE_CFG_0		0x010
> +#define DISP_REG_MERGE_CFG_1		0x014
>  #define DISP_REG_MERGE_CFG_4		0x020
>  #define DISP_REG_MERGE_CFG_10		0x038
>  /* no swap */
> @@ -25,9 +26,12 @@
>  #define DISP_REG_MERGE_CFG_12		0x040
>  #define CFG_10_10_1PI_2PO_BUF_MODE		6
>  #define CFG_10_10_2PI_2PO_BUF_MODE		8
> +#define CFG_11_10_1PI_2PO_MERGE			18
>  #define FLD_CFG_MERGE_MODE			GENMASK(4, 0)
>  #define DISP_REG_MERGE_CFG_24		0x070
>  #define DISP_REG_MERGE_CFG_25		0x074
> +#define DISP_REG_MERGE_CFG_26		0x078
> +#define DISP_REG_MERGE_CFG_27		0x07c
>  #define DISP_REG_MERGE_CFG_36		0x0a0
>  #define ULTRA_EN				BIT(0)
>  #define PREULTRA_EN				BIT(4)
> @@ -98,12 +102,19 @@ static void mtk_merge_fifo_setting(struct
> mtk_disp_merge *priv,
>  void mtk_merge_config(struct device *dev, unsigned int w,
>  		      unsigned int h, unsigned int vrefresh,
>  		      unsigned int bpc, struct cmdq_pkt *cmdq_pkt)
> +{
> +	mtk_merge_advance_config(dev, w, 0, h, vrefresh, bpc,
> cmdq_pkt);
> +}
> +
> +void mtk_merge_advance_config(struct device *dev, unsigned int l_w,
> unsigned int r_w,
> +			      unsigned int h, unsigned int vrefresh,
> unsigned int bpc,
> +			      struct cmdq_pkt *cmdq_pkt)
>  {
>  	struct mtk_disp_merge *priv = dev_get_drvdata(dev);
>  	unsigned int mode = CFG_10_10_1PI_2PO_BUF_MODE;
>  
> -	if (!h || !w) {
> -		dev_err(dev, "%s: input width(%d) or height(%d) is
> invalid\n", __func__, w, h);
> +	if (!h || !l_w) {
> +		dev_err(dev, "%s: input width(%d) or height(%d) is
> invalid\n", __func__, l_w, h);
>  		return;
>  	}
>  
> @@ -112,14 +123,41 @@ void mtk_merge_config(struct device *dev,
> unsigned int w,
>  		mode = CFG_10_10_2PI_2PO_BUF_MODE;
>  	}
>  
> -	mtk_ddp_write(cmdq_pkt, h << 16 | w, &priv->cmdq_reg, priv-
> >regs,
> +	if (r_w)
> +		mode = CFG_11_10_1PI_2PO_MERGE;
> +
> +	mtk_ddp_write(cmdq_pkt, h << 16 | l_w, &priv->cmdq_reg, priv-
> >regs,
>  		      DISP_REG_MERGE_CFG_0);
> -	mtk_ddp_write(cmdq_pkt, h << 16 | w, &priv->cmdq_reg, priv-
> >regs,
> +	mtk_ddp_write(cmdq_pkt, h << 16 | r_w, &priv->cmdq_reg, priv-
> >regs,
> +		      DISP_REG_MERGE_CFG_1);
> +	mtk_ddp_write(cmdq_pkt, h << 16 | (l_w + r_w), &priv->cmdq_reg, 
> priv->regs,
>  		      DISP_REG_MERGE_CFG_4);
> -	mtk_ddp_write(cmdq_pkt, h << 16 | w, &priv->cmdq_reg, priv-
> >regs,
> +	/*
> +	 * DISP_REG_MERGE_CFG_24 is merge SRAM0 w/h
> +	 * DISP_REG_MERGE_CFG_25 is merge SRAM1 w/h.
> +	 * If r_w > 0, the merge is in merge mode (input0 and input1
> merge together),
> +	 * the input0 goes to SRAM0, and input1 goes to SRAM1.
> +	 * If r_w = 0, the merge is in buffer mode, the input goes
> through SRAM0 and
> +	 * then to SRAM1. Both SRAM0 and SRAM1 are set to the same
> size.
> +	 */
> +	mtk_ddp_write(cmdq_pkt, h << 16 | l_w, &priv->cmdq_reg, priv-
> >regs,
>  		      DISP_REG_MERGE_CFG_24);
> -	mtk_ddp_write(cmdq_pkt, h << 16 | w, &priv->cmdq_reg, priv-
> >regs,
> -		      DISP_REG_MERGE_CFG_25);
> +	if (r_w)
> +		mtk_ddp_write(cmdq_pkt, h << 16 | r_w, &priv->cmdq_reg, 
> priv->regs,
> +			      DISP_REG_MERGE_CFG_25);
> +	else
> +		mtk_ddp_write(cmdq_pkt, h << 16 | l_w, &priv->cmdq_reg, 
> priv->regs,
> +			      DISP_REG_MERGE_CFG_25);
> +
> +	/*
> +	 * DISP_REG_MERGE_CFG_26 and DISP_REG_MERGE_CFG_27 is only used
> in LR merge.
> +	 * Only take effect when the merge is setting to merge mode.
> +	 */
> +	mtk_ddp_write(cmdq_pkt, h << 16 | l_w, &priv->cmdq_reg, priv-
> >regs,
> +		      DISP_REG_MERGE_CFG_26);
> +	mtk_ddp_write(cmdq_pkt, h << 16 | r_w, &priv->cmdq_reg, priv-
> >regs,
> +		      DISP_REG_MERGE_CFG_27);
> +
>  	mtk_ddp_write_mask(cmdq_pkt, SWAP_MODE, &priv->cmdq_reg, priv-
> >regs,
>  			   DISP_REG_MERGE_CFG_10, FLD_SWAP_MODE);
>  	mtk_ddp_write_mask(cmdq_pkt, mode, &priv->cmdq_reg, priv->regs,


WARNING: multiple messages have this Message-ID (diff)
From: CK Hu <ck.hu@mediatek.com>
To: Nancy.Lin <nancy.lin@mediatek.com>,
	Rob Herring <robh+dt@kernel.org>,
	Matthias Brugger <matthias.bgg@gmail.com>,
	Chun-Kuang Hu <chunkuang.hu@kernel.org>,
	Philipp Zabel <p.zabel@pengutronix.de>, <wim@linux-watchdog.org>,
	AngeloGioacchino Del Regno
	<angelogioacchino.delregno@collabora.com>, <linux@roeck-us.net>
Cc: <devicetree@vger.kernel.org>,
	<Project_Global_Chrome_Upstream_Group@mediatek.com>,
	Yongqiang Niu <yongqiang.niu@mediatek.com>,
	David Airlie <airlied@linux.ie>,
	"jason-jh . lin" <jason-jh.lin@mediatek.com>,
	<singo.chang@mediatek.com>, <llvm@lists.linux.dev>,
	Nick Desaulniers <ndesaulniers@google.com>,
	<linux-kernel@vger.kernel.org>, <dri-devel@lists.freedesktop.org>,
	"Nathan Chancellor" <nathan@kernel.org>,
	<linux-mediatek@lists.infradead.org>,
	<linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH v23 04/14] drm/mediatek: add display merge advance config API for MT8195
Date: Tue, 28 Jun 2022 09:32:21 +0800	[thread overview]
Message-ID: <eb096460b04fed32d29db9f6b66c839e964d2a74.camel@mediatek.com> (raw)
In-Reply-To: <20220620091930.27797-5-nancy.lin@mediatek.com>

Hi, Nancy:

On Mon, 2022-06-20 at 17:19 +0800, Nancy.Lin wrote:
> Add merge new advance config API. The original merge API is
> mtk_ddp_comp_funcs function prototype. The API interface parameters
> cannot be modified, so add a new config API for extension. This is
> the preparation for ovl_adaptor merge control.

Applied to mediatek-drm-next [1], thanks.

[1] 
https://git.kernel.org/pub/scm/linux/kernel/git/chunkuang.hu/linux.git/log/?h=mediatek-drm-next

Regards,
CK

> 
> Signed-off-by: Nancy.Lin <nancy.lin@mediatek.com>
> Reviewed-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
> Reviewed-by: AngeloGioacchino Del Regno <
> angelogioacchino.delregno@collabora.com>
> Tested-by: AngeloGioacchino Del Regno <
> angelogioacchino.delregno@collabora.com>
> Tested-by: Bo-Chen Chen <rex-bc.chen@mediatek.com>
> ---
>  drivers/gpu/drm/mediatek/mtk_disp_drv.h   |  3 ++
>  drivers/gpu/drm/mediatek/mtk_disp_merge.c | 52 ++++++++++++++++++++-
> --
>  2 files changed, 48 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/gpu/drm/mediatek/mtk_disp_drv.h
> b/drivers/gpu/drm/mediatek/mtk_disp_drv.h
> index 2cd1c660ace3..e847e90f436d 100644
> --- a/drivers/gpu/drm/mediatek/mtk_disp_drv.h
> +++ b/drivers/gpu/drm/mediatek/mtk_disp_drv.h
> @@ -63,6 +63,9 @@ void mtk_merge_config(struct device *dev, unsigned
> int width,
>  		      unsigned int bpc, struct cmdq_pkt *cmdq_pkt);
>  void mtk_merge_start(struct device *dev);
>  void mtk_merge_stop(struct device *dev);
> +void mtk_merge_advance_config(struct device *dev, unsigned int l_w,
> unsigned int r_w,
> +			      unsigned int h, unsigned int vrefresh,
> unsigned int bpc,
> +			      struct cmdq_pkt *cmdq_pkt);
>  
>  void mtk_ovl_bgclr_in_on(struct device *dev);
>  void mtk_ovl_bgclr_in_off(struct device *dev);
> diff --git a/drivers/gpu/drm/mediatek/mtk_disp_merge.c
> b/drivers/gpu/drm/mediatek/mtk_disp_merge.c
> index 45face638153..40da0555416d 100644
> --- a/drivers/gpu/drm/mediatek/mtk_disp_merge.c
> +++ b/drivers/gpu/drm/mediatek/mtk_disp_merge.c
> @@ -17,6 +17,7 @@
>  #define DISP_REG_MERGE_CTRL		0x000
>  #define MERGE_EN				1
>  #define DISP_REG_MERGE_CFG_0		0x010
> +#define DISP_REG_MERGE_CFG_1		0x014
>  #define DISP_REG_MERGE_CFG_4		0x020
>  #define DISP_REG_MERGE_CFG_10		0x038
>  /* no swap */
> @@ -25,9 +26,12 @@
>  #define DISP_REG_MERGE_CFG_12		0x040
>  #define CFG_10_10_1PI_2PO_BUF_MODE		6
>  #define CFG_10_10_2PI_2PO_BUF_MODE		8
> +#define CFG_11_10_1PI_2PO_MERGE			18
>  #define FLD_CFG_MERGE_MODE			GENMASK(4, 0)
>  #define DISP_REG_MERGE_CFG_24		0x070
>  #define DISP_REG_MERGE_CFG_25		0x074
> +#define DISP_REG_MERGE_CFG_26		0x078
> +#define DISP_REG_MERGE_CFG_27		0x07c
>  #define DISP_REG_MERGE_CFG_36		0x0a0
>  #define ULTRA_EN				BIT(0)
>  #define PREULTRA_EN				BIT(4)
> @@ -98,12 +102,19 @@ static void mtk_merge_fifo_setting(struct
> mtk_disp_merge *priv,
>  void mtk_merge_config(struct device *dev, unsigned int w,
>  		      unsigned int h, unsigned int vrefresh,
>  		      unsigned int bpc, struct cmdq_pkt *cmdq_pkt)
> +{
> +	mtk_merge_advance_config(dev, w, 0, h, vrefresh, bpc,
> cmdq_pkt);
> +}
> +
> +void mtk_merge_advance_config(struct device *dev, unsigned int l_w,
> unsigned int r_w,
> +			      unsigned int h, unsigned int vrefresh,
> unsigned int bpc,
> +			      struct cmdq_pkt *cmdq_pkt)
>  {
>  	struct mtk_disp_merge *priv = dev_get_drvdata(dev);
>  	unsigned int mode = CFG_10_10_1PI_2PO_BUF_MODE;
>  
> -	if (!h || !w) {
> -		dev_err(dev, "%s: input width(%d) or height(%d) is
> invalid\n", __func__, w, h);
> +	if (!h || !l_w) {
> +		dev_err(dev, "%s: input width(%d) or height(%d) is
> invalid\n", __func__, l_w, h);
>  		return;
>  	}
>  
> @@ -112,14 +123,41 @@ void mtk_merge_config(struct device *dev,
> unsigned int w,
>  		mode = CFG_10_10_2PI_2PO_BUF_MODE;
>  	}
>  
> -	mtk_ddp_write(cmdq_pkt, h << 16 | w, &priv->cmdq_reg, priv-
> >regs,
> +	if (r_w)
> +		mode = CFG_11_10_1PI_2PO_MERGE;
> +
> +	mtk_ddp_write(cmdq_pkt, h << 16 | l_w, &priv->cmdq_reg, priv-
> >regs,
>  		      DISP_REG_MERGE_CFG_0);
> -	mtk_ddp_write(cmdq_pkt, h << 16 | w, &priv->cmdq_reg, priv-
> >regs,
> +	mtk_ddp_write(cmdq_pkt, h << 16 | r_w, &priv->cmdq_reg, priv-
> >regs,
> +		      DISP_REG_MERGE_CFG_1);
> +	mtk_ddp_write(cmdq_pkt, h << 16 | (l_w + r_w), &priv->cmdq_reg, 
> priv->regs,
>  		      DISP_REG_MERGE_CFG_4);
> -	mtk_ddp_write(cmdq_pkt, h << 16 | w, &priv->cmdq_reg, priv-
> >regs,
> +	/*
> +	 * DISP_REG_MERGE_CFG_24 is merge SRAM0 w/h
> +	 * DISP_REG_MERGE_CFG_25 is merge SRAM1 w/h.
> +	 * If r_w > 0, the merge is in merge mode (input0 and input1
> merge together),
> +	 * the input0 goes to SRAM0, and input1 goes to SRAM1.
> +	 * If r_w = 0, the merge is in buffer mode, the input goes
> through SRAM0 and
> +	 * then to SRAM1. Both SRAM0 and SRAM1 are set to the same
> size.
> +	 */
> +	mtk_ddp_write(cmdq_pkt, h << 16 | l_w, &priv->cmdq_reg, priv-
> >regs,
>  		      DISP_REG_MERGE_CFG_24);
> -	mtk_ddp_write(cmdq_pkt, h << 16 | w, &priv->cmdq_reg, priv-
> >regs,
> -		      DISP_REG_MERGE_CFG_25);
> +	if (r_w)
> +		mtk_ddp_write(cmdq_pkt, h << 16 | r_w, &priv->cmdq_reg, 
> priv->regs,
> +			      DISP_REG_MERGE_CFG_25);
> +	else
> +		mtk_ddp_write(cmdq_pkt, h << 16 | l_w, &priv->cmdq_reg, 
> priv->regs,
> +			      DISP_REG_MERGE_CFG_25);
> +
> +	/*
> +	 * DISP_REG_MERGE_CFG_26 and DISP_REG_MERGE_CFG_27 is only used
> in LR merge.
> +	 * Only take effect when the merge is setting to merge mode.
> +	 */
> +	mtk_ddp_write(cmdq_pkt, h << 16 | l_w, &priv->cmdq_reg, priv-
> >regs,
> +		      DISP_REG_MERGE_CFG_26);
> +	mtk_ddp_write(cmdq_pkt, h << 16 | r_w, &priv->cmdq_reg, priv-
> >regs,
> +		      DISP_REG_MERGE_CFG_27);
> +
>  	mtk_ddp_write_mask(cmdq_pkt, SWAP_MODE, &priv->cmdq_reg, priv-
> >regs,
>  			   DISP_REG_MERGE_CFG_10, FLD_SWAP_MODE);
>  	mtk_ddp_write_mask(cmdq_pkt, mode, &priv->cmdq_reg, priv->regs,


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2022-06-28  1:32 UTC|newest]

Thread overview: 69+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-20  9:19 [PATCH v23 00/14] Add MediaTek SoC DRM (vdosys1) support for mt8195 Nancy.Lin
2022-06-20  9:19 ` Nancy.Lin
2022-06-20  9:19 ` Nancy.Lin
2022-06-20  9:19 ` [PATCH v23 01/14] dt-bindings: mediatek: add vdosys1 RDMA definition " Nancy.Lin
2022-06-20  9:19   ` Nancy.Lin
2022-06-20  9:19   ` Nancy.Lin
2022-06-22  3:55   ` CK Hu
2022-06-22  3:55     ` CK Hu
2022-06-22  3:55     ` CK Hu
2022-06-28  1:28     ` CK Hu
2022-06-28  1:28       ` CK Hu
2022-06-28  1:28       ` CK Hu
2022-06-20  9:19 ` [PATCH v23 02/14] dt-bindings: mediatek: add ethdr " Nancy.Lin
2022-06-20  9:19   ` Nancy.Lin
2022-06-20  9:19   ` Nancy.Lin
2022-06-20  9:19 ` [PATCH v23 03/14] drm/mediatek: add display MDP RDMA support for MT8195 Nancy.Lin
2022-06-20  9:19   ` Nancy.Lin
2022-06-20  9:19   ` Nancy.Lin
2022-06-28  1:34   ` CK Hu
2022-06-28  1:34     ` CK Hu
2022-06-28  1:34     ` CK Hu
2022-06-20  9:19 ` [PATCH v23 04/14] drm/mediatek: add display merge advance config API " Nancy.Lin
2022-06-20  9:19   ` Nancy.Lin
2022-06-20  9:19   ` Nancy.Lin
2022-06-28  1:32   ` CK Hu [this message]
2022-06-28  1:32     ` CK Hu
2022-06-28  1:32     ` CK Hu
2022-06-20  9:19 ` [PATCH v23 05/14] drm/mediatek: add display merge start/stop API for cmdq support Nancy.Lin
2022-06-20  9:19   ` Nancy.Lin
2022-06-20  9:19   ` Nancy.Lin
2022-06-28  1:35   ` CK Hu
2022-06-28  1:35     ` CK Hu
2022-06-28  1:35     ` CK Hu
2022-06-20  9:19 ` [PATCH v23 06/14] drm/mediatek: add display merge mute/unmute support for MT8195 Nancy.Lin
2022-06-20  9:19   ` Nancy.Lin
2022-06-20  9:19   ` Nancy.Lin
2022-06-28  1:37   ` CK Hu
2022-06-28  1:37     ` CK Hu
2022-06-28  1:37     ` CK Hu
2022-06-20  9:19 ` [PATCH v23 07/14] drm/mediatek: add display merge async reset control Nancy.Lin
2022-06-20  9:19   ` Nancy.Lin
2022-06-20  9:19   ` Nancy.Lin
2022-06-28  1:39   ` CK Hu
2022-06-28  1:39     ` CK Hu
2022-06-28  1:39     ` CK Hu
2022-06-20  9:19 ` [PATCH v23 08/14] drm/mediatek: add ETHDR support for MT8195 Nancy.Lin
2022-06-20  9:19   ` Nancy.Lin
2022-06-20  9:19   ` Nancy.Lin
2022-06-20  9:19 ` [PATCH v23 09/14] drm/mediatek: add mediatek-drm plane color encoding info Nancy.Lin
2022-06-20  9:19   ` Nancy.Lin
2022-06-20  9:19   ` Nancy.Lin
2022-06-28  1:42   ` CK Hu
2022-06-28  1:42     ` CK Hu
2022-06-28  1:42     ` CK Hu
2022-06-20  9:19 ` [PATCH v23 10/14] drm/mediatek: add ovl_adaptor support for MT8195 Nancy.Lin
2022-06-20  9:19   ` Nancy.Lin
2022-06-20  9:19   ` Nancy.Lin
2022-06-20  9:19 ` [PATCH v23 11/14] drm/mediatek: add dma dev get function Nancy.Lin
2022-06-20  9:19   ` Nancy.Lin
2022-06-20  9:19   ` Nancy.Lin
2022-06-20  9:19 ` [PATCH v23 12/14] drm/mediatek: modify mediatek-drm for mt8195 multi mmsys support Nancy.Lin
2022-06-20  9:19   ` Nancy.Lin
2022-06-20  9:19   ` Nancy.Lin
2022-06-20  9:19 ` [PATCH v23 13/14] drm/mediatek: add drm ovl_adaptor sub driver for MT8195 Nancy.Lin
2022-06-20  9:19   ` Nancy.Lin
2022-06-20  9:19   ` Nancy.Lin
2022-06-20  9:19 ` [PATCH v23 14/14] drm/mediatek: add mediatek-drm of vdosys1 support " Nancy.Lin
2022-06-20  9:19   ` Nancy.Lin
2022-06-20  9:19   ` Nancy.Lin

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=eb096460b04fed32d29db9f6b66c839e964d2a74.camel@mediatek.com \
    --to=ck.hu@mediatek.com \
    --cc=Project_Global_Chrome_Upstream_Group@mediatek.com \
    --cc=airlied@linux.ie \
    --cc=angelogioacchino.delregno@collabora.com \
    --cc=chunkuang.hu@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=jason-jh.lin@mediatek.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mediatek@lists.infradead.org \
    --cc=linux@roeck-us.net \
    --cc=llvm@lists.linux.dev \
    --cc=matthias.bgg@gmail.com \
    --cc=nancy.lin@mediatek.com \
    --cc=nathan@kernel.org \
    --cc=ndesaulniers@google.com \
    --cc=p.zabel@pengutronix.de \
    --cc=robh+dt@kernel.org \
    --cc=singo.chang@mediatek.com \
    --cc=wim@linux-watchdog.org \
    --cc=yongqiang.niu@mediatek.com \
    /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.