diff mbox series

[v1,02/14] soc: mediatek: mutex: expand parameter for mdp mutex function

Message ID 20220117055254.9777-3-roy-cw.yeh@mediatek.com (mailing list archive)
State New, archived
Headers show
Series Add mdp support for mt8195 | expand

Commit Message

roy-cw.yeh Jan. 17, 2022, 5:52 a.m. UTC
From: "Roy-CW.Yeh" <roy-cw.yeh@mediatek.com>

Expand parameter for mdp mutex function

Signed-off-by: Roy-CW.Yeh <roy-cw.yeh@mediatek.com>
---
This patch is base on [1][2]
[1] soc: mediatek: mutex: add functions that operate registers by CMDQ
- https://patchwork.kernel.org/project/linux-mediatek/patch/20220104091712.25670-5-moudy.ho@mediatek.com/
[2] media: platform: mtk-mdp3: add Mediatek MDP3 driver
- https://patchwork.kernel.org/project/linux-mediatek/patch/20220105093758.6850-4-moudy.ho@mediatek.com/
---
 .../media/platform/mtk-mdp3/mtk-mdp3-cmdq.c   |  3 ++-
 drivers/soc/mediatek/mtk-mutex.c              | 26 +++++++++++++------
 include/linux/soc/mediatek/mtk-mutex.h        |  2 +-
 3 files changed, 21 insertions(+), 10 deletions(-)

Comments

CK Hu (胡俊光) March 18, 2022, 9:23 a.m. UTC | #1
Hi, Roy:

On Mon, 2022-01-17 at 13:52 +0800, roy-cw.yeh wrote:
> From: "Roy-CW.Yeh" <roy-cw.yeh@mediatek.com>
> 
> Expand parameter for mdp mutex function
> 
> Signed-off-by: Roy-CW.Yeh <roy-cw.yeh@mediatek.com>
> ---
> This patch is base on [1][2]
> [1] soc: mediatek: mutex: add functions that operate registers by
> CMDQ
> - 
> https://urldefense.com/v3/__https://patchwork.kernel.org/project/linux-mediatek/patch/20220104091712.25670-5-moudy.ho@mediatek.com/__;!!CTRNKA9wMg0ARbw!28saNp-15JnZswiyVpRSXYtGcevLvGr2FEapxkshXVSBltSnkpE2iPgK4HDCWg$
>  
> [2] media: platform: mtk-mdp3: add Mediatek MDP3 driver
> - 
> https://urldefense.com/v3/__https://patchwork.kernel.org/project/linux-mediatek/patch/20220105093758.6850-4-moudy.ho@mediatek.com/__;!!CTRNKA9wMg0ARbw!28saNp-15JnZswiyVpRSXYtGcevLvGr2FEapxkshXVSBltSnkpE2iPhg9ACQ7Q$
>  
> ---
>  .../media/platform/mtk-mdp3/mtk-mdp3-cmdq.c   |  3 ++-
>  drivers/soc/mediatek/mtk-mutex.c              | 26 +++++++++++++--
> ----
>  include/linux/soc/mediatek/mtk-mutex.h        |  2 +-
>  3 files changed, 21 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/media/platform/mtk-mdp3/mtk-mdp3-cmdq.c
> b/drivers/media/platform/mtk-mdp3/mtk-mdp3-cmdq.c
> index 4a08502952d6..87751f0e2513 100644
> --- a/drivers/media/platform/mtk-mdp3/mtk-mdp3-cmdq.c
> +++ b/drivers/media/platform/mtk-mdp3/mtk-mdp3-cmdq.c
> @@ -101,7 +101,8 @@ static int mdp_path_subfrm_require(struct
> mdp_path_subfrm *subfrm,
>  	}
>  
>  	if (subfrm->mutex_mod)
> -		mtk_mutex_add_mod_by_cmdq(mutex[mutex_id], subfrm-
> >mutex_mod, cmd);
> +		mtk_mutex_add_mod_by_cmdq(mutex[mutex_id], subfrm-
> >mutex_mod,
> +					  0, 0, cmd);
>  
>  	/* Set SOF */
>  	for (index = 0; index < config->num_components; index++) {
> diff --git a/drivers/soc/mediatek/mtk-mutex.c
> b/drivers/soc/mediatek/mtk-mutex.c
> index 89daab7e6863..7da0f44b6f9a 100644
> --- a/drivers/soc/mediatek/mtk-mutex.c
> +++ b/drivers/soc/mediatek/mtk-mutex.c
> @@ -27,8 +27,9 @@
>  #define DISP_REG_MUTEX_EN(n)			(0x20 + 0x20 * (n))
>  #define DISP_REG_MUTEX(n)			(0x24 + 0x20 * (n))
>  #define DISP_REG_MUTEX_RST(n)			(0x28 + 0x20 *
> (n))
> -#define DISP_REG_MUTEX_MOD(mutex_mod_reg, n)	(mutex_mod_reg + 0x20 *
> (n))
> -#define DISP_REG_MUTEX_SOF(mutex_sof_reg, n)	(mutex_sof_reg + 0x20 *
> (n))
> +#define DISP_REG_MUTEX_MOD(mutex_mod_reg, n)	((mutex_mod_reg) + 0x20
> * (n))
> +#define DISP_REG_MUTEX_MOD1(mutex_mod_reg, n)	((mutex_mod_reg
> ) + 0x20 * (n) + 0x4)
> +#define DISP_REG_MUTEX_SOF(mutex_sof_reg, n)	((mutex_sof_reg) + 0x20
> * (n))
>  #define DISP_REG_MUTEX_MOD2(n)			(0x34 + 0x20 *
> (n))
>  
>  #define INT_MUTEX				BIT(1)
> @@ -180,6 +181,11 @@
>  #define MT8183_MUTEX_MOD_MDP_AAL0		BIT(23)
>  #define MT8183_MUTEX_MOD_MDP_CCORR0		BIT(24)
>  
> +#define
> MT8183_MDP_PIPE_IMGI                   MT8183_MUTEX_MDP_START
> +#define
> MT8183_MDP_PIPE_RDMA0                  (MT8183_MUTEX_MDP_START + 1)
> +#define
> MT8183_MDP_PIPE_WPEI                   (MT8183_MUTEX_MDP_START + 2)
> +#define
> MT8183_MDP_PIPE_WPEI2                  (MT8183_MUTEX_MDP_START + 3)
> +
>  struct mtk_mutex {
>  	int id;
>  	bool claimed;
> @@ -364,10 +370,10 @@ static const unsigned int
> mt8183_mutex_sof[DDP_MUTEX_SOF_MAX] = {
>  
>  /* indicate which mutex is used by each pipepline */
>  static const unsigned int mt8183_mutex_mdp_offset[MDP_PIPE_MAX] = {
> -	[MDP_PIPE_IMGI] = MT8183_MUTEX_MDP_START,
> -	[MDP_PIPE_RDMA0] = MT8183_MUTEX_MDP_START + 1,
> -	[MDP_PIPE_WPEI] = MT8183_MUTEX_MDP_START + 2,
> -	[MDP_PIPE_WPEI2] = MT8183_MUTEX_MDP_START + 3
> +	[MDP_PIPE_IMGI] = MT8183_MDP_PIPE_IMGI,
> +	[MDP_PIPE_RDMA0] = MT8183_MDP_PIPE_RDMA0,
> +	[MDP_PIPE_WPEI] = MT8183_MDP_PIPE_WPEI,
> +	[MDP_PIPE_WPEI2] = MT8183_MDP_PIPE_WPEI2,
>  };
>  
>  static const unsigned int mt8195_mutex_sof[DDP_MUTEX_SOF_MAX] = {
> @@ -606,7 +612,7 @@ u32 mtk_mutex_get_mdp_mod(struct mtk_mutex
> *mutex, enum mtk_mdp_comp_id id)
>  EXPORT_SYMBOL_GPL(mtk_mutex_get_mdp_mod);
>  
>  void mtk_mutex_add_mod_by_cmdq(struct mtk_mutex *mutex, u32 mod,
> -			       struct mmsys_cmdq_cmd *cmd)
> +			       u32 mod1, u32 sof, struct mmsys_cmdq_cmd
> *cmd)

In cover letter, describe this series depend on which series.
And, why do you need add mod by cmdq? I expect that pipeline is fixed
before it start working.

Regards,
CK

>  {
>  	struct mtk_mutex_ctx *mtx = container_of(mutex, struct
> mtk_mutex_ctx,
>  						 mutex[mutex->id]);
> @@ -618,9 +624,13 @@ void mtk_mutex_add_mod_by_cmdq(struct mtk_mutex
> *mutex, u32 mod,
>  	cmdq_pkt_write_mask(cmd->pkt, mtx->cmdq_reg.subsys, mtx->addr +
> offset,
>  			    mod, mtx->data->mutex_mdp_mod_mask);
>  
> +	offset = DISP_REG_MUTEX_MOD1(mtx->data->mutex_mod_reg, mutex-
> >id);
> +	cmdq_pkt_write_mask(cmd->pkt, mtx->cmdq_reg.subsys, mtx->addr +
> offset,
> +			    mod1, mtx->data->mutex_mdp_mod_mask);
> +
>  	offset = DISP_REG_MUTEX_SOF(mtx->data->mutex_sof_reg, mutex-
> >id);
>  	cmdq_pkt_write_mask(cmd->pkt, mtx->cmdq_reg.subsys, mtx->addr +
> offset,
> -			    0, mtx->data->mutex_mdp_sof_mask);
> +			    sof, mtx->data->mutex_mdp_sof_mask);
>  }
>  EXPORT_SYMBOL_GPL(mtk_mutex_add_mod_by_cmdq);
>  
> diff --git a/include/linux/soc/mediatek/mtk-mutex.h
> b/include/linux/soc/mediatek/mtk-mutex.h
> index 05de7ad4a124..dbb7324c12d9 100644
> --- a/include/linux/soc/mediatek/mtk-mutex.h
> +++ b/include/linux/soc/mediatek/mtk-mutex.h
> @@ -18,7 +18,7 @@ void mtk_mutex_add_comp(struct mtk_mutex *mutex,
>  			enum mtk_ddp_comp_id id);
>  u32 mtk_mutex_get_mdp_mod(struct mtk_mutex *mutex, enum
> mtk_mdp_comp_id id);
>  void mtk_mutex_add_mod_by_cmdq(struct mtk_mutex *mutex, u32 mod,
> -			       struct mmsys_cmdq_cmd *cmd);
> +			       u32 mod1, u32 sof, struct mmsys_cmdq_cmd
> *cmd);
>  void mtk_mutex_enable(struct mtk_mutex *mutex);
>  void mtk_mutex_enable_by_cmdq(struct mtk_mutex *mutex,
>  			      struct mmsys_cmdq_cmd *cmd);
diff mbox series

Patch

diff --git a/drivers/media/platform/mtk-mdp3/mtk-mdp3-cmdq.c b/drivers/media/platform/mtk-mdp3/mtk-mdp3-cmdq.c
index 4a08502952d6..87751f0e2513 100644
--- a/drivers/media/platform/mtk-mdp3/mtk-mdp3-cmdq.c
+++ b/drivers/media/platform/mtk-mdp3/mtk-mdp3-cmdq.c
@@ -101,7 +101,8 @@  static int mdp_path_subfrm_require(struct mdp_path_subfrm *subfrm,
 	}
 
 	if (subfrm->mutex_mod)
-		mtk_mutex_add_mod_by_cmdq(mutex[mutex_id], subfrm->mutex_mod, cmd);
+		mtk_mutex_add_mod_by_cmdq(mutex[mutex_id], subfrm->mutex_mod,
+					  0, 0, cmd);
 
 	/* Set SOF */
 	for (index = 0; index < config->num_components; index++) {
diff --git a/drivers/soc/mediatek/mtk-mutex.c b/drivers/soc/mediatek/mtk-mutex.c
index 89daab7e6863..7da0f44b6f9a 100644
--- a/drivers/soc/mediatek/mtk-mutex.c
+++ b/drivers/soc/mediatek/mtk-mutex.c
@@ -27,8 +27,9 @@ 
 #define DISP_REG_MUTEX_EN(n)			(0x20 + 0x20 * (n))
 #define DISP_REG_MUTEX(n)			(0x24 + 0x20 * (n))
 #define DISP_REG_MUTEX_RST(n)			(0x28 + 0x20 * (n))
-#define DISP_REG_MUTEX_MOD(mutex_mod_reg, n)	(mutex_mod_reg + 0x20 * (n))
-#define DISP_REG_MUTEX_SOF(mutex_sof_reg, n)	(mutex_sof_reg + 0x20 * (n))
+#define DISP_REG_MUTEX_MOD(mutex_mod_reg, n)	((mutex_mod_reg) + 0x20 * (n))
+#define DISP_REG_MUTEX_MOD1(mutex_mod_reg, n)	((mutex_mod_reg) + 0x20 * (n) + 0x4)
+#define DISP_REG_MUTEX_SOF(mutex_sof_reg, n)	((mutex_sof_reg) + 0x20 * (n))
 #define DISP_REG_MUTEX_MOD2(n)			(0x34 + 0x20 * (n))
 
 #define INT_MUTEX				BIT(1)
@@ -180,6 +181,11 @@ 
 #define MT8183_MUTEX_MOD_MDP_AAL0		BIT(23)
 #define MT8183_MUTEX_MOD_MDP_CCORR0		BIT(24)
 
+#define MT8183_MDP_PIPE_IMGI                   MT8183_MUTEX_MDP_START
+#define MT8183_MDP_PIPE_RDMA0                  (MT8183_MUTEX_MDP_START + 1)
+#define MT8183_MDP_PIPE_WPEI                   (MT8183_MUTEX_MDP_START + 2)
+#define MT8183_MDP_PIPE_WPEI2                  (MT8183_MUTEX_MDP_START + 3)
+
 struct mtk_mutex {
 	int id;
 	bool claimed;
@@ -364,10 +370,10 @@  static const unsigned int mt8183_mutex_sof[DDP_MUTEX_SOF_MAX] = {
 
 /* indicate which mutex is used by each pipepline */
 static const unsigned int mt8183_mutex_mdp_offset[MDP_PIPE_MAX] = {
-	[MDP_PIPE_IMGI] = MT8183_MUTEX_MDP_START,
-	[MDP_PIPE_RDMA0] = MT8183_MUTEX_MDP_START + 1,
-	[MDP_PIPE_WPEI] = MT8183_MUTEX_MDP_START + 2,
-	[MDP_PIPE_WPEI2] = MT8183_MUTEX_MDP_START + 3
+	[MDP_PIPE_IMGI] = MT8183_MDP_PIPE_IMGI,
+	[MDP_PIPE_RDMA0] = MT8183_MDP_PIPE_RDMA0,
+	[MDP_PIPE_WPEI] = MT8183_MDP_PIPE_WPEI,
+	[MDP_PIPE_WPEI2] = MT8183_MDP_PIPE_WPEI2,
 };
 
 static const unsigned int mt8195_mutex_sof[DDP_MUTEX_SOF_MAX] = {
@@ -606,7 +612,7 @@  u32 mtk_mutex_get_mdp_mod(struct mtk_mutex *mutex, enum mtk_mdp_comp_id id)
 EXPORT_SYMBOL_GPL(mtk_mutex_get_mdp_mod);
 
 void mtk_mutex_add_mod_by_cmdq(struct mtk_mutex *mutex, u32 mod,
-			       struct mmsys_cmdq_cmd *cmd)
+			       u32 mod1, u32 sof, struct mmsys_cmdq_cmd *cmd)
 {
 	struct mtk_mutex_ctx *mtx = container_of(mutex, struct mtk_mutex_ctx,
 						 mutex[mutex->id]);
@@ -618,9 +624,13 @@  void mtk_mutex_add_mod_by_cmdq(struct mtk_mutex *mutex, u32 mod,
 	cmdq_pkt_write_mask(cmd->pkt, mtx->cmdq_reg.subsys, mtx->addr + offset,
 			    mod, mtx->data->mutex_mdp_mod_mask);
 
+	offset = DISP_REG_MUTEX_MOD1(mtx->data->mutex_mod_reg, mutex->id);
+	cmdq_pkt_write_mask(cmd->pkt, mtx->cmdq_reg.subsys, mtx->addr + offset,
+			    mod1, mtx->data->mutex_mdp_mod_mask);
+
 	offset = DISP_REG_MUTEX_SOF(mtx->data->mutex_sof_reg, mutex->id);
 	cmdq_pkt_write_mask(cmd->pkt, mtx->cmdq_reg.subsys, mtx->addr + offset,
-			    0, mtx->data->mutex_mdp_sof_mask);
+			    sof, mtx->data->mutex_mdp_sof_mask);
 }
 EXPORT_SYMBOL_GPL(mtk_mutex_add_mod_by_cmdq);
 
diff --git a/include/linux/soc/mediatek/mtk-mutex.h b/include/linux/soc/mediatek/mtk-mutex.h
index 05de7ad4a124..dbb7324c12d9 100644
--- a/include/linux/soc/mediatek/mtk-mutex.h
+++ b/include/linux/soc/mediatek/mtk-mutex.h
@@ -18,7 +18,7 @@  void mtk_mutex_add_comp(struct mtk_mutex *mutex,
 			enum mtk_ddp_comp_id id);
 u32 mtk_mutex_get_mdp_mod(struct mtk_mutex *mutex, enum mtk_mdp_comp_id id);
 void mtk_mutex_add_mod_by_cmdq(struct mtk_mutex *mutex, u32 mod,
-			       struct mmsys_cmdq_cmd *cmd);
+			       u32 mod1, u32 sof, struct mmsys_cmdq_cmd *cmd);
 void mtk_mutex_enable(struct mtk_mutex *mutex);
 void mtk_mutex_enable_by_cmdq(struct mtk_mutex *mutex,
 			      struct mmsys_cmdq_cmd *cmd);