diff options
author | Daniel Lezcano <daniel.lezcano@linaro.org> | 2012-02-28 16:46:07 -0500 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2012-03-06 12:46:55 -0500 |
commit | 9f60d33e1811e0aa696a3152050d6e3e4c3195aa (patch) | |
tree | 7cf702dca14b1be0e310b6c45d2c71b32bce2aa2 /drivers/mfd | |
parent | cc9a0f68d1f8b9bfd9c0c2ada13db64d63f63db3 (diff) |
mfd : Copy the db8500 gic setting to the prcmu
In the case we go to the retention mode, we decoupled the gic
in order to have the A9 core to reach a stable WFI state.
But we want the prcmu to wake up the A9 when the gic has a pending
irq which is done by copying the gic settings to the to the prcmu.
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Diffstat (limited to 'drivers/mfd')
-rw-r--r-- | drivers/mfd/db8500-prcmu.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/mfd/db8500-prcmu.c b/drivers/mfd/db8500-prcmu.c index 8346a0e39949..97341aa4025c 100644 --- a/drivers/mfd/db8500-prcmu.c +++ b/drivers/mfd/db8500-prcmu.c | |||
@@ -883,6 +883,26 @@ bool db8500_prcmu_gic_pending_irq(void) | |||
883 | return false; | 883 | return false; |
884 | } | 884 | } |
885 | 885 | ||
886 | /* | ||
887 | * This function copies the gic SPI settings to the prcmu in order to | ||
888 | * monitor them and abort/finish the retention/off sequence or state. | ||
889 | */ | ||
890 | int db8500_prcmu_copy_gic_settings(void) | ||
891 | { | ||
892 | u32 er; /* Enable register */ | ||
893 | void __iomem *dist_base = __io_address(U8500_GIC_DIST_BASE); | ||
894 | int i; | ||
895 | |||
896 | /* We skip the STI and PPI */ | ||
897 | for (i = 0; i < PRCMU_GIC_NUMBER_REGS - 1; i++) { | ||
898 | er = readl_relaxed(dist_base + | ||
899 | GIC_DIST_ENABLE_SET + (i + 1) * 4); | ||
900 | writel(er, PRCM_ARMITMSK31TO0 + i * 4); | ||
901 | } | ||
902 | |||
903 | return 0; | ||
904 | } | ||
905 | |||
886 | /* This function should only be called while mb0_transfer.lock is held. */ | 906 | /* This function should only be called while mb0_transfer.lock is held. */ |
887 | static void config_wakeups(void) | 907 | static void config_wakeups(void) |
888 | { | 908 | { |