video: driver: Fix unbalanced irq warning in interrupt handling
In case of watchdog interrupt, power off sequence will get called which will make intr_status to 0 due to which enable_irq gets called from isr_handler irrespective of watchdog interrupt. Now during power up sequence again when the enable_irq gets called, it will through "Unbalanced enable for irq" error. Added a fix for the same. Call trace -> enable_irq+0x9c/0xf8 __power_on_ar50lt+0x2d4/0x320 [msm_video] __load_fw+0x92c/0x1368 [msm_video] venus_hfi_core_init+0x64/0x468 [msm_video] msm_vidc_core_init+0x158/0x4bc [msm_video] msm_vidc_open+0x90/0x804 [msm_video] Change-Id: Ic675d7540ef029e530a8cd5b87fb97f72e72057f Signed-off-by: Vedang Nagar <quic_vnagar@quicinc.com>
This commit is contained in:
@@ -439,9 +439,8 @@ static int __power_off_iris2(struct msm_vidc_core *core)
|
|||||||
if (rc)
|
if (rc)
|
||||||
d_vpr_e("%s: failed to unvote buses\n", __func__);
|
d_vpr_e("%s: failed to unvote buses\n", __func__);
|
||||||
|
|
||||||
if (!(core->intr_status & WRAPPER_INTR_STATUS_A2HWD_BMSK_IRIS2))
|
if (!call_venus_op(core, watchdog, core, core->intr_status))
|
||||||
disable_irq_nosync(core->resource->irq);
|
disable_irq_nosync(core->resource->irq);
|
||||||
core->intr_status = 0;
|
|
||||||
|
|
||||||
msm_vidc_change_core_sub_state(core, CORE_SUBSTATE_POWER_ENABLE, 0, __func__);
|
msm_vidc_change_core_sub_state(core, CORE_SUBSTATE_POWER_ENABLE, 0, __func__);
|
||||||
|
|
||||||
|
@@ -489,9 +489,8 @@ static int __power_off_iris3(struct msm_vidc_core *core)
|
|||||||
if (rc)
|
if (rc)
|
||||||
d_vpr_e("%s: failed to unvote buses\n", __func__);
|
d_vpr_e("%s: failed to unvote buses\n", __func__);
|
||||||
|
|
||||||
if (!(core->intr_status & WRAPPER_INTR_STATUS_A2HWD_BMSK_IRIS3))
|
if (!call_venus_op(core, watchdog, core, core->intr_status))
|
||||||
disable_irq_nosync(core->resource->irq);
|
disable_irq_nosync(core->resource->irq);
|
||||||
core->intr_status = 0;
|
|
||||||
|
|
||||||
msm_vidc_change_core_sub_state(core, CORE_SUBSTATE_POWER_ENABLE, 0, __func__);
|
msm_vidc_change_core_sub_state(core, CORE_SUBSTATE_POWER_ENABLE, 0, __func__);
|
||||||
|
|
||||||
|
@@ -593,9 +593,8 @@ static int __power_off_iris33(struct msm_vidc_core *core)
|
|||||||
if (rc)
|
if (rc)
|
||||||
d_vpr_e("%s: failed to unvote buses\n", __func__);
|
d_vpr_e("%s: failed to unvote buses\n", __func__);
|
||||||
|
|
||||||
if (!(core->intr_status & WRAPPER_INTR_STATUS_A2HWD_BMSK_IRIS33))
|
if (!call_venus_op(core, watchdog, core, core->intr_status))
|
||||||
disable_irq_nosync(core->resource->irq);
|
disable_irq_nosync(core->resource->irq);
|
||||||
core->intr_status = 0;
|
|
||||||
|
|
||||||
msm_vidc_change_core_sub_state(core, CORE_SUBSTATE_POWER_ENABLE, 0, __func__);
|
msm_vidc_change_core_sub_state(core, CORE_SUBSTATE_POWER_ENABLE, 0, __func__);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user