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 |
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 --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);