aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKumar Sanghvi <kumar.sanghvi@stericsson.com>2010-06-04 11:15:09 +0530
committerJohn Rigby <john.rigby@linaro.org>2010-09-02 22:45:33 -0600
commit3e1df2aea392511d4cf1622e3541d818d79a5596 (patch)
tree6736e1fa8f610128d57dbf302375540ed3720a39
parentdfa3afebccdbc64876afd2339ee96beb0985961e (diff)
downloadlinux-2.6.34-ux500-3e1df2aea392511d4cf1622e3541d818d79a5596.tar.gz
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
-rwxr-xr-xarch/arm/mach-ux500/prcmu-fw.c17
-rwxr-xr-xarch/arm/mach-ux500/prcmu-fw_v1.h3
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