media: iris: Add hooks to initialize and tear down context banks

Add platform hooks to set up and tear down context bank devices.
Different iris platforms may require different context bank setup, so
let platform data provide the required operations via vpu_ops.

Co-developed-by: Vishnu Reddy <busanna.reddy@oss.qualcomm.com>
Signed-off-by: Vishnu Reddy <busanna.reddy@oss.qualcomm.com>
Signed-off-by: Vikash Garodia <vikash.garodia@oss.qualcomm.com>
Tested-by: Daniel J Blueman <daniel@quora.org>
Link: https://patch.msgid.link/20260726-glymur-v10-2-de451559e88b@oss.qualcomm.com
Signed-off-by: Abel Vesa <abel.vesa@oss.qualcomm.com>
This commit is contained in:
Vikash Garodia
2026-08-05 15:36:01 +03:00
committed by Abel Vesa
parent c7d216f298
commit a5f4a00d4b
2 changed files with 26 additions and 1 deletions
+24 -1
View File
@@ -15,6 +15,7 @@
#include "iris_core.h"
#include "iris_ctrls.h"
#include "iris_vidc.h"
#include "iris_vpu_common.h"
static int iris_init_icc(struct iris_core *core)
{
@@ -150,6 +151,20 @@ static int iris_init_resources(struct iris_core *core)
return iris_init_resets(core);
}
static int iris_init_cb_devs(struct iris_core *core)
{
if (core->iris_platform_data->vpu_ops->init_cb_devs)
return core->iris_platform_data->vpu_ops->init_cb_devs(core);
return 0;
}
static void iris_deinit_cb_devs(struct iris_core *core)
{
if (core->iris_platform_data->vpu_ops->deinit_cb_devs)
core->iris_platform_data->vpu_ops->deinit_cb_devs(core);
}
static int iris_register_video_device(struct iris_core *core, enum domain_type type)
{
struct video_device *vdev;
@@ -207,6 +222,8 @@ static void iris_remove(struct platform_device *pdev)
v4l2_device_unregister(&core->v4l2_dev);
iris_deinit_cb_devs(core);
mutex_destroy(&core->lock);
}
@@ -273,10 +290,14 @@ static int iris_probe(struct platform_device *pdev)
iris_session_init_caps(core);
ret = v4l2_device_register(dev, &core->v4l2_dev);
ret = iris_init_cb_devs(core);
if (ret)
return ret;
ret = v4l2_device_register(dev, &core->v4l2_dev);
if (ret)
goto err_cb_deinit;
ret = iris_register_video_device(core, DECODER);
if (ret)
goto err_v4l2_unreg;
@@ -310,6 +331,8 @@ err_vdev_unreg_dec:
video_unregister_device(core->vdev_dec);
err_v4l2_unreg:
v4l2_device_unregister(&core->v4l2_dev);
err_cb_deinit:
iris_deinit_cb_devs(core);
return ret;
}
@@ -22,6 +22,8 @@ struct vpu_ops {
void (*program_bootup_registers)(struct iris_core *core);
u64 (*calc_freq)(struct iris_inst *inst, size_t data_size);
int (*set_hwmode)(struct iris_core *core);
int (*init_cb_devs)(struct iris_core *core);
void (*deinit_cb_devs)(struct iris_core *core);
};
int iris_vpu_boot_firmware(struct iris_core *core);