Loading drivers/gpu/drm/msm/sde/sde_irq.c +24 −2 Original line number Diff line number Diff line Loading @@ -19,6 +19,8 @@ #include "sde_irq.h" #include "sde_core_irq.h" static uint32_t g_sde_irq_status; irqreturn_t sde_irq(struct msm_kms *kms) { struct sde_kms *sde_kms = to_sde_kms(kms); Loading @@ -27,6 +29,9 @@ irqreturn_t sde_irq(struct msm_kms *kms) sde_kms->hw_intr->ops.get_interrupt_sources(sde_kms->hw_intr, &interrupts); /* store irq status in case of irq-storm debugging */ g_sde_irq_status = interrupts; /* * Taking care of MDP interrupt */ Loading @@ -40,13 +45,30 @@ irqreturn_t sde_irq(struct msm_kms *kms) */ while (interrupts) { irq_hw_number_t hwirq = fls(interrupts) - 1; unsigned int mapping; int rc; mapping = irq_find_mapping(sde_kms->irq_controller.domain, hwirq); if (mapping == 0) { SDE_EVT32(hwirq, SDE_EVTLOG_ERROR); goto error; } rc = generic_handle_irq(mapping); if (rc < 0) { SDE_EVT32(hwirq, mapping, rc, SDE_EVTLOG_ERROR); goto error; } generic_handle_irq(irq_find_mapping( sde_kms->irq_controller.domain, hwirq)); interrupts &= ~(1 << hwirq); } return IRQ_HANDLED; error: /* bad situation, inform irq system, it may disable overall MDSS irq */ return IRQ_NONE; } void sde_irq_preinstall(struct msm_kms *kms) Loading Loading
drivers/gpu/drm/msm/sde/sde_irq.c +24 −2 Original line number Diff line number Diff line Loading @@ -19,6 +19,8 @@ #include "sde_irq.h" #include "sde_core_irq.h" static uint32_t g_sde_irq_status; irqreturn_t sde_irq(struct msm_kms *kms) { struct sde_kms *sde_kms = to_sde_kms(kms); Loading @@ -27,6 +29,9 @@ irqreturn_t sde_irq(struct msm_kms *kms) sde_kms->hw_intr->ops.get_interrupt_sources(sde_kms->hw_intr, &interrupts); /* store irq status in case of irq-storm debugging */ g_sde_irq_status = interrupts; /* * Taking care of MDP interrupt */ Loading @@ -40,13 +45,30 @@ irqreturn_t sde_irq(struct msm_kms *kms) */ while (interrupts) { irq_hw_number_t hwirq = fls(interrupts) - 1; unsigned int mapping; int rc; mapping = irq_find_mapping(sde_kms->irq_controller.domain, hwirq); if (mapping == 0) { SDE_EVT32(hwirq, SDE_EVTLOG_ERROR); goto error; } rc = generic_handle_irq(mapping); if (rc < 0) { SDE_EVT32(hwirq, mapping, rc, SDE_EVTLOG_ERROR); goto error; } generic_handle_irq(irq_find_mapping( sde_kms->irq_controller.domain, hwirq)); interrupts &= ~(1 << hwirq); } return IRQ_HANDLED; error: /* bad situation, inform irq system, it may disable overall MDSS irq */ return IRQ_NONE; } void sde_irq_preinstall(struct msm_kms *kms) Loading