Re: [PATCH v4 04/16] media: iris: Introduce interrupt_init as a vpu_op
From: Vishnu Reddy
Date: Mon Jun 15 2026 - 13:56:15 EST
On 6/12/2026 2:55 PM, Dmitry Baryshkov wrote:
> From: Dikshita Agarwal <dikshita.agarwal@xxxxxxxxxxxxxxxx>
>
> The interrupt_init sequence is currently shared across all supported
> devices. Starting with Qualcomm QCM2290 (AR50LT), the register
> programming would differ.
>
> Move interrupt_init into a vpu_op to allow per-device customization.
>
> This change prepares the driver for upcoming hardware variants.
> No functional change so far for existing devices.
>
> Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxxxxxxxx>
> Signed-off-by: Dikshita Agarwal <dikshita.agarwal@xxxxxxxxxxxxxxxx>
> Reviewed-by: Vikash Garodia <vikash.garodia@xxxxxxxxxxxxxxxx>
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxxxxxxxx>
> ---
> drivers/media/platform/qcom/iris/iris_vpu2.c | 1 +
> drivers/media/platform/qcom/iris/iris_vpu3x.c | 3 +++
> drivers/media/platform/qcom/iris/iris_vpu4x.c | 1 +
> drivers/media/platform/qcom/iris/iris_vpu_common.c | 4 ++--
> drivers/media/platform/qcom/iris/iris_vpu_common.h | 2 ++
> 5 files changed, 9 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/media/platform/qcom/iris/iris_vpu2.c b/drivers/media/platform/qcom/iris/iris_vpu2.c
> index 2dc121a3f5e8..dd2eeae0d9eb 100644
> --- a/drivers/media/platform/qcom/iris/iris_vpu2.c
> +++ b/drivers/media/platform/qcom/iris/iris_vpu2.c
> @@ -46,4 +46,5 @@ const struct vpu_ops iris_vpu2_ops = {
> .calc_freq = iris_vpu2_calc_freq,
> .set_hwmode = iris_vpu_set_hwmode,
> .set_preset_registers = iris_vpu_set_preset_registers,
> + .interrupt_init = iris_vpu_interrupt_init,
> };
> diff --git a/drivers/media/platform/qcom/iris/iris_vpu3x.c b/drivers/media/platform/qcom/iris/iris_vpu3x.c
> index dc02ced1b931..c3b760730c98 100644
> --- a/drivers/media/platform/qcom/iris/iris_vpu3x.c
> +++ b/drivers/media/platform/qcom/iris/iris_vpu3x.c
> @@ -262,6 +262,7 @@ const struct vpu_ops iris_vpu3_ops = {
> .calc_freq = iris_vpu3x_vpu4x_calculate_frequency,
> .set_hwmode = iris_vpu_set_hwmode,
> .set_preset_registers = iris_vpu_set_preset_registers,
> + .interrupt_init = iris_vpu_interrupt_init,
> };
>
> const struct vpu_ops iris_vpu33_ops = {
> @@ -272,6 +273,7 @@ const struct vpu_ops iris_vpu33_ops = {
> .calc_freq = iris_vpu3x_vpu4x_calculate_frequency,
> .set_hwmode = iris_vpu_set_hwmode,
> .set_preset_registers = iris_vpu_set_preset_registers,
> + .interrupt_init = iris_vpu_interrupt_init,
> };
>
> const struct vpu_ops iris_vpu35_ops = {
> @@ -283,4 +285,5 @@ const struct vpu_ops iris_vpu35_ops = {
> .calc_freq = iris_vpu3x_vpu4x_calculate_frequency,
> .set_hwmode = iris_vpu_set_hwmode,
> .set_preset_registers = iris_vpu_set_preset_registers,
> + .interrupt_init = iris_vpu_interrupt_init,
> };
> diff --git a/drivers/media/platform/qcom/iris/iris_vpu4x.c b/drivers/media/platform/qcom/iris/iris_vpu4x.c
> index f608a297d4a3..90ccdc0d2a07 100644
> --- a/drivers/media/platform/qcom/iris/iris_vpu4x.c
> +++ b/drivers/media/platform/qcom/iris/iris_vpu4x.c
> @@ -369,4 +369,5 @@ const struct vpu_ops iris_vpu4x_ops = {
> .calc_freq = iris_vpu3x_vpu4x_calculate_frequency,
> .set_hwmode = iris_vpu4x_set_hwmode,
> .set_preset_registers = iris_vpu_set_preset_registers,
> + .interrupt_init = iris_vpu_interrupt_init,
> };
> diff --git a/drivers/media/platform/qcom/iris/iris_vpu_common.c b/drivers/media/platform/qcom/iris/iris_vpu_common.c
> index a49113b0da23..375bcd923476 100644
> --- a/drivers/media/platform/qcom/iris/iris_vpu_common.c
> +++ b/drivers/media/platform/qcom/iris/iris_vpu_common.c
> @@ -31,7 +31,7 @@
> #define UC_REGION_ADDR (CPU_CS_BASE_OFFS + 0x64)
> #define UC_REGION_SIZE (CPU_CS_BASE_OFFS + 0x68)
>
> -static void iris_vpu_interrupt_init(struct iris_core *core)
> +void iris_vpu_interrupt_init(struct iris_core *core)
> {
> u32 mask_val;
>
> @@ -485,7 +485,7 @@ int iris_vpu_power_on(struct iris_core *core)
>
> core->iris_platform_data->vpu_ops->set_preset_registers(core);
>
> - iris_vpu_interrupt_init(core);
> + core->iris_platform_data->vpu_ops->interrupt_init(core);
> core->intr_status = 0;
> enable_irq(core->irq);
>
> diff --git a/drivers/media/platform/qcom/iris/iris_vpu_common.h b/drivers/media/platform/qcom/iris/iris_vpu_common.h
> index 21ed4c9bd5e3..9151545065cd 100644
> --- a/drivers/media/platform/qcom/iris/iris_vpu_common.h
> +++ b/drivers/media/platform/qcom/iris/iris_vpu_common.h
> @@ -23,6 +23,7 @@ struct vpu_ops {
> u64 (*calc_freq)(struct iris_inst *inst, size_t data_size);
> int (*set_hwmode)(struct iris_core *core);
> void (*set_preset_registers)(struct iris_core *core);
> + void (*interrupt_init)(struct iris_core *core);
> };
>
> int iris_vpu_boot_firmware(struct iris_core *core);
> @@ -44,5 +45,6 @@ void iris_vpu35_vpu4x_program_bootup_registers(struct iris_core *core);
> u64 iris_vpu3x_vpu4x_calculate_frequency(struct iris_inst *inst, size_t data_size);
>
> void iris_vpu_set_preset_registers(struct iris_core *core);
> +void iris_vpu_interrupt_init(struct iris_core *core);
>
> #endif
Reviewed-by: Vishnu Reddy <busanna.reddy@xxxxxxxxxxxxxxxx>