diff options
author | Kumar Sanghvi <kumar.sanghvi@stericsson.com> | 2010-06-04 11:15:09 +0530 |
---|---|---|
committer | John Rigby <john.rigby@linaro.org> | 2010-09-02 22:45:33 -0600 |
commit | 3e1df2aea392511d4cf1622e3541d818d79a5596 (patch) | |
tree | 6736e1fa8f610128d57dbf302375540ed3720a39 /arch | |
parent | dfa3afebccdbc64876afd2339ee96beb0985961e (diff) |
u8500-prcmu: Process AckMb7 IRQ first before any other IRQ
With DV6 and SHRM V1 updates, due to delay in processing of
AckMb7 IRQ, occassional hangs are observed. Correct this by
processing the AckMb7 IRQ first before any other AckMb IRQ
ST-Ericsson ID: ER262914
Signed-off-by: Kumar Sanghvi <kumar.sanghvi@stericsson.com>
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/796
Reviewed-by: Jonas ABERG <jonas.aberg@stericsson.com>
Signed-off-by: Mian Yousaf Kaukab <mian.yousaf.kaukab@stericsson.com>
Change-Id: I9d4745b06ad2fd1e62821d46d08c82a98cc2b996
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/2395
Diffstat (limited to 'arch')
-rwxr-xr-x | arch/arm/mach-ux500/prcmu-fw.c | 17 | ||||
-rwxr-xr-x | arch/arm/mach-ux500/prcmu-fw_v1.h | 3 |
2 files changed, 12 insertions, 8 deletions
diff --git a/arch/arm/mach-ux500/prcmu-fw.c b/arch/arm/mach-ux500/prcmu-fw.c index 7117bd29f4e..728782c8600 100755 --- a/arch/arm/mach-ux500/prcmu-fw.c +++ b/arch/arm/mach-ux500/prcmu-fw.c @@ -1498,7 +1498,15 @@ irqreturn_t prcmu_ack_mbox_irq_handler(int irq, void *ctrlr) dbg_printk(" prcm_arm_it1_val = %x ", prcm_arm_it1_val); - if (prcm_arm_it1_val & (1 << 0)) { + if (prcm_arm_it1_val & (PRCM_IRQ_ACK_MBOX7)) { + /* No header reading required */ + dbg_printk("\n IRQ handler for Ack mb7\n"); + tasklet_schedule(&prcmu_ack_mb7_tasklet); + + /* clear the bit 7 */ + writeb(PRCM_IRQ_ACK_MBOX7, PRCM_ARM_IT1_CLEAR); + + } else if (prcm_arm_it1_val & (PRCM_IRQ_ACK_MBOX0)) { dbg_printk("\n Inside IRQ handler for Ack mb0 "); wake_up_interruptible(&ack_mb0_queue); @@ -1557,13 +1565,6 @@ irqreturn_t prcmu_ack_mbox_irq_handler(int irq, void *ctrlr) /* clear the bit 6 */ writeb(0x40, PRCM_ARM_IT1_CLEAR); - } else if (prcm_arm_it1_val & (1<<7)) { - /* No header reading required */ - dbg_printk("\n IRQ handler for Ack mb7\n"); - tasklet_schedule(&prcmu_ack_mb7_tasklet); - - /* clear the bit 7 */ - writeb(0x80, PRCM_ARM_IT1_CLEAR); } return IRQ_HANDLED; } diff --git a/arch/arm/mach-ux500/prcmu-fw_v1.h b/arch/arm/mach-ux500/prcmu-fw_v1.h index 6a88295fa42..3bdea06aace 100755 --- a/arch/arm/mach-ux500/prcmu-fw_v1.h +++ b/arch/arm/mach-ux500/prcmu-fw_v1.h @@ -148,6 +148,9 @@ #define PRCM_ACK_MB5_SLAVE (PRCM_ACK_MB5 + 0x2) #define PRCM_ACK_MB5_VAL (PRCM_ACK_MB5 + 0x3) +#define PRCM_IRQ_ACK_MBOX0 (1 << 0) +#define PRCM_IRQ_ACK_MBOX7 (1 << 7) + #define LOW_POWER_WAKEUP 1 #define EXE_WAKEUP 0 |