Merge "drm/msm/sde: store mdss irq status in case of irq storm"

This commit is contained in:
Linux Build Service Account 2018-03-19 03:35:38 -07:00 committed by Gerrit - the friendly Code Review server
commit fc187e817f

View file

@ -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);
@ -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
*/
@ -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)