On Sat, 1 Oct 2022, Irui Wang wrote: > when enable multi-core encoding, all available encoder cores' power need > to be on/off, add new functions for encoder cores' power management. > > Signed-off-by: Irui Wang <irui.wang@xxxxxxxxxxxx> > --- > diff --git a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_enc_pm.c b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_enc_pm.c > index 75de5031d292..213c3f50e9eb 100644 > --- a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_enc_pm.c > +++ b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_enc_pm.c > @@ -9,6 +9,7 @@ > #include <linux/of_platform.h> > #include <linux/pm_runtime.h> > > +#include "mtk_vcodec_enc_hw.h" > #include "mtk_vcodec_enc_pm.h" > #include "mtk_vcodec_util.h" > > @@ -56,6 +57,88 @@ int mtk_vcodec_init_enc_clk(struct platform_device *pdev, > } > EXPORT_SYMBOL_GPL(mtk_vcodec_init_enc_clk); > > +static int mtk_enc_core_power_on(struct mtk_vcodec_ctx *ctx) > +{ > + struct mtk_venc_hw_dev *sub_core; > + int ret, i; > + > + /* multi-core encoding need power on all available cores */ > + for (i = 0; i < MTK_VENC_HW_MAX; i++) { > + sub_core = (struct mtk_venc_hw_dev *)ctx->dev->enc_hw_dev[i]; > + if (!sub_core) > + continue; > + > + ret = pm_runtime_resume_and_get(&sub_core->plat_dev->dev); > + if (ret) { > + mtk_v4l2_err("power on sub_core[%d] fail %d", i, ret); > + goto pm_on_fail; > + } > + } > + return ret; > + > +pm_on_fail: > + for (i -= 1; i >= 0; i--) { while (i--) { achieves the same. > + sub_core = (struct mtk_venc_hw_dev *)ctx->dev->enc_hw_dev[i]; > + pm_runtime_put_sync(&sub_core->plat_dev->dev); > + } > + return ret; > +} -- i.