[PATCH v1 02/14] soc: mediatek: mutex: expand parameter for mdp mutex function
roy-cw.yeh
roy-cw.yeh at mediatek.com
Sun Jan 16 21:52:42 PST 2022
From: "Roy-CW.Yeh" <roy-cw.yeh at mediatek.com>
Expand parameter for mdp mutex function
Signed-off-by: Roy-CW.Yeh <roy-cw.yeh at 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(-)
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);
--
2.18.0
More information about the Linux-mediatek
mailing list