lkml.org 
[lkml]   [2023]   [Jul]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v6,02/11] media: mediatek: vcodec: align fw interface
    Date
    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@mediatek.com>
    Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
    Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@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;
    }
    --
    2.18.0
    \
     
     \ /
      Last update: 2023-07-04 15:15    [W:3.132 / U:0.624 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site