[PATCH v3,02/11] media: mediatek: vcodec: align fw interface

Nicolas Dufresne nicolas.dufresne at collabora.com
Mon Jun 19 07:45:13 PDT 2023


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 at mediatek.com>

Reviewed-by: Nicolas Dufresne <nicolas.dufresne at collabora.com>

> ---
>  .../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;
>  }




More information about the Linux-mediatek mailing list