Le samedi 17 juin 2023 à 18:32 +0800, Yunfei Dong a écrit : > Align scp and vpu firmware interface, remove the depedency for > 'struct mtk_vcodec_dev' and 'struct mtk_vcodec_ctx'. It will be > much easier to separate video encoder and decoder. > > Signed-off-by: Yunfei Dong <yunfei.dong@xxxxxxxxxxxx> Reviewed-by: Nicolas Dufresne <nicolas.dufresne@xxxxxxxxxxxxx> > --- > .../media/platform/mediatek/vcodec/mtk_vcodec_fw.c | 7 +++---- > .../media/platform/mediatek/vcodec/mtk_vcodec_fw.h | 3 +-- > .../platform/mediatek/vcodec/mtk_vcodec_fw_priv.h | 11 +++++------ > .../platform/mediatek/vcodec/mtk_vcodec_fw_scp.c | 9 ++++++--- > .../platform/mediatek/vcodec/mtk_vcodec_fw_vpu.c | 12 ++++++++---- > 5 files changed, 23 insertions(+), 19 deletions(-) > > diff --git a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_fw.c b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_fw.c > index 556e54aadac9..be9159acacf8 100644 > --- a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_fw.c > +++ b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_fw.c > @@ -5,15 +5,14 @@ > #include "mtk_vcodec_util.h" > #include "mtk_vcodec_drv.h" > > -struct mtk_vcodec_fw *mtk_vcodec_fw_select(struct mtk_vcodec_dev *dev, > - enum mtk_vcodec_fw_type type, > +struct mtk_vcodec_fw *mtk_vcodec_fw_select(void *priv, enum mtk_vcodec_fw_type type, > enum mtk_vcodec_fw_use fw_use) > { > switch (type) { > case VPU: > - return mtk_vcodec_fw_vpu_init(dev, fw_use); > + return mtk_vcodec_fw_vpu_init(priv, fw_use); > case SCP: > - return mtk_vcodec_fw_scp_init(dev); > + return mtk_vcodec_fw_scp_init(priv, fw_use); > default: > mtk_v4l2_err("invalid vcodec fw type"); > return ERR_PTR(-EINVAL); > diff --git a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_fw.h b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_fw.h > index 16824114657f..d8cfbec323d5 100644 > --- a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_fw.h > +++ b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_fw.h > @@ -25,8 +25,7 @@ struct mtk_vcodec_fw; > typedef void (*mtk_vcodec_ipi_handler) (void *data, > unsigned int len, void *priv); > > -struct mtk_vcodec_fw *mtk_vcodec_fw_select(struct mtk_vcodec_dev *dev, > - enum mtk_vcodec_fw_type type, > +struct mtk_vcodec_fw *mtk_vcodec_fw_select(void *priv, enum mtk_vcodec_fw_type type, > enum mtk_vcodec_fw_use fw_use); > void mtk_vcodec_fw_release(struct mtk_vcodec_fw *fw); > > diff --git a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_fw_priv.h b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_fw_priv.h > index b41e66185cec..3438a4917344 100644 > --- a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_fw_priv.h > +++ b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_fw_priv.h > @@ -12,6 +12,7 @@ struct mtk_vcodec_fw { > const struct mtk_vcodec_fw_ops *ops; > struct platform_device *pdev; > struct mtk_scp *scp; > + enum mtk_vcodec_fw_use fw_use; > }; > > struct mtk_vcodec_fw_ops { > @@ -28,22 +29,20 @@ struct mtk_vcodec_fw_ops { > }; > > #if IS_ENABLED(CONFIG_VIDEO_MEDIATEK_VCODEC_VPU) > -struct mtk_vcodec_fw *mtk_vcodec_fw_vpu_init(struct mtk_vcodec_dev *dev, > - enum mtk_vcodec_fw_use fw_use); > +struct mtk_vcodec_fw *mtk_vcodec_fw_vpu_init(void *priv, enum mtk_vcodec_fw_use fw_use); > #else > static inline struct mtk_vcodec_fw * > -mtk_vcodec_fw_vpu_init(struct mtk_vcodec_dev *dev, > - enum mtk_vcodec_fw_use fw_use) > +mtk_vcodec_fw_vpu_init(void *priv, enum mtk_vcodec_fw_use fw_use) > { > return ERR_PTR(-ENODEV); > } > #endif /* CONFIG_VIDEO_MEDIATEK_VCODEC_VPU */ > > #if IS_ENABLED(CONFIG_VIDEO_MEDIATEK_VCODEC_SCP) > -struct mtk_vcodec_fw *mtk_vcodec_fw_scp_init(struct mtk_vcodec_dev *dev); > +struct mtk_vcodec_fw *mtk_vcodec_fw_scp_init(void *priv, enum mtk_vcodec_fw_use fw_use); > #else > static inline struct mtk_vcodec_fw * > -mtk_vcodec_fw_scp_init(struct mtk_vcodec_dev *dev) > +mtk_vcodec_fw_scp_init(void *priv, enum mtk_vcodec_fw_use fw_use) > { > return ERR_PTR(-ENODEV); > } > diff --git a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_fw_scp.c b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_fw_scp.c > index d8e66b645bd8..9a2472442c6f 100644 > --- a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_fw_scp.c > +++ b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_fw_scp.c > @@ -53,18 +53,21 @@ static const struct mtk_vcodec_fw_ops mtk_vcodec_rproc_msg = { > .release = mtk_vcodec_scp_release, > }; > > -struct mtk_vcodec_fw *mtk_vcodec_fw_scp_init(struct mtk_vcodec_dev *dev) > +struct mtk_vcodec_fw *mtk_vcodec_fw_scp_init(void *priv, enum mtk_vcodec_fw_use fw_use) > { > struct mtk_vcodec_fw *fw; > + struct mtk_vcodec_dev *dev = priv; > + struct platform_device *plat_dev; > struct mtk_scp *scp; > > - scp = scp_get(dev->plat_dev); > + plat_dev = dev->plat_dev; > + scp = scp_get(plat_dev); > if (!scp) { > mtk_v4l2_err("could not get vdec scp handle"); > return ERR_PTR(-EPROBE_DEFER); > } > > - fw = devm_kzalloc(&dev->plat_dev->dev, sizeof(*fw), GFP_KERNEL); > + fw = devm_kzalloc(&plat_dev->dev, sizeof(*fw), GFP_KERNEL); > fw->type = SCP; > fw->ops = &mtk_vcodec_rproc_msg; > fw->scp = scp; > diff --git a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_fw_vpu.c b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_fw_vpu.c > index cfc7ebed8fb7..46a028031133 100644 > --- a/drivers/media/platform/mediatek/vcodec/mtk_vcodec_fw_vpu.c > +++ b/drivers/media/platform/mediatek/vcodec/mtk_vcodec_fw_vpu.c > @@ -77,10 +77,11 @@ static const struct mtk_vcodec_fw_ops mtk_vcodec_vpu_msg = { > .release = mtk_vcodec_vpu_release, > }; > > -struct mtk_vcodec_fw *mtk_vcodec_fw_vpu_init(struct mtk_vcodec_dev *dev, > - enum mtk_vcodec_fw_use fw_use) > +struct mtk_vcodec_fw *mtk_vcodec_fw_vpu_init(void *priv, enum mtk_vcodec_fw_use fw_use) > { > struct platform_device *fw_pdev; > + struct mtk_vcodec_dev *dev = priv; > + struct platform_device *plat_dev; > struct mtk_vcodec_fw *fw; > enum rst_id rst_id; > > @@ -94,19 +95,22 @@ struct mtk_vcodec_fw *mtk_vcodec_fw_vpu_init(struct mtk_vcodec_dev *dev, > break; > } > > - fw_pdev = vpu_get_plat_device(dev->plat_dev); > + plat_dev = dev->plat_dev; > + fw_pdev = vpu_get_plat_device(plat_dev); > if (!fw_pdev) { > mtk_v4l2_err("firmware device is not ready"); > return ERR_PTR(-EINVAL); > } > + > vpu_wdt_reg_handler(fw_pdev, mtk_vcodec_vpu_reset_handler, dev, rst_id); > > - fw = devm_kzalloc(&dev->plat_dev->dev, sizeof(*fw), GFP_KERNEL); > + fw = devm_kzalloc(&plat_dev->dev, sizeof(*fw), GFP_KERNEL); > if (!fw) > return ERR_PTR(-ENOMEM); > fw->type = VPU; > fw->ops = &mtk_vcodec_vpu_msg; > fw->pdev = fw_pdev; > + fw->fw_use = fw_use; > > return fw; > }