Merge "drm/msm/sde: store mdss irq status in case of irq storm"
This commit is contained in:
commit
fc187e817f
1 changed files with 24 additions and 2 deletions
|
@ -19,6 +19,8 @@
|
||||||
#include "sde_irq.h"
|
#include "sde_irq.h"
|
||||||
#include "sde_core_irq.h"
|
#include "sde_core_irq.h"
|
||||||
|
|
||||||
|
static uint32_t g_sde_irq_status;
|
||||||
|
|
||||||
irqreturn_t sde_irq(struct msm_kms *kms)
|
irqreturn_t sde_irq(struct msm_kms *kms)
|
||||||
{
|
{
|
||||||
struct sde_kms *sde_kms = to_sde_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,
|
sde_kms->hw_intr->ops.get_interrupt_sources(sde_kms->hw_intr,
|
||||||
&interrupts);
|
&interrupts);
|
||||||
|
|
||||||
|
/* store irq status in case of irq-storm debugging */
|
||||||
|
g_sde_irq_status = interrupts;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Taking care of MDP interrupt
|
* Taking care of MDP interrupt
|
||||||
*/
|
*/
|
||||||
|
@ -40,13 +45,30 @@ irqreturn_t sde_irq(struct msm_kms *kms)
|
||||||
*/
|
*/
|
||||||
while (interrupts) {
|
while (interrupts) {
|
||||||
irq_hw_number_t hwirq = fls(interrupts) - 1;
|
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);
|
interrupts &= ~(1 << hwirq);
|
||||||
}
|
}
|
||||||
|
|
||||||
return IRQ_HANDLED;
|
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)
|
void sde_irq_preinstall(struct msm_kms *kms)
|
||||||
|
|
Loading…
Add table
Reference in a new issue