.../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(-)
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>
---
.../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
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@mediatek.com> Reviewed-by: Nicolas Dufresne <nicolas.dufresne@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; > }
© 2016 - 2024 Red Hat, Inc.