aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Lezcano <daniel.lezcano@linaro.org>2012-02-28 16:46:09 -0500
committerSamuel Ortiz <sameo@linux.intel.com>2012-03-06 12:46:56 -0500
commit34fe6f107eab096ac2f70a51763e9978b4abbeb6 (patch)
tree481a045f80276c3a0e0d512fefe1eeabb058588d
parent9ab492e12d588af7b05892c3744e8bdc2eace6d0 (diff)
mfd : Check if the other db8500 core is in WFI
This patch allows to check if the other core is in WFI mode. It is the last check the idle routine has to do before entering into the retention state. Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
-rw-r--r--drivers/mfd/db8500-prcmu.c12
-rw-r--r--drivers/mfd/dbx500-prcmu-regs.h2
-rw-r--r--include/linux/mfd/db8500-prcmu.h1
-rw-r--r--include/linux/mfd/dbx500-prcmu.h8
4 files changed, 23 insertions, 0 deletions
diff --git a/drivers/mfd/db8500-prcmu.c b/drivers/mfd/db8500-prcmu.c
index 4e27db841fab..a1b3464cdba3 100644
--- a/drivers/mfd/db8500-prcmu.c
+++ b/drivers/mfd/db8500-prcmu.c
@@ -904,6 +904,18 @@ bool db8500_prcmu_pending_irq(void)
904} 904}
905 905
906/* 906/*
907 * This function checks if the specified cpu is in in WFI. It's usage
908 * makes sense only if the gic is decoupled with the db8500_prcmu_gic_decouple
909 * function. Of course passing smp_processor_id() to this function will
910 * always return false...
911 */
912bool db8500_prcmu_is_cpu_in_wfi(int cpu)
913{
914 return readl(PRCM_ARM_WFI_STANDBY) & cpu ? PRCM_ARM_WFI_STANDBY_WFI1 :
915 PRCM_ARM_WFI_STANDBY_WFI0;
916}
917
918/*
907 * This function copies the gic SPI settings to the prcmu in order to 919 * This function copies the gic SPI settings to the prcmu in order to
908 * monitor them and abort/finish the retention/off sequence or state. 920 * monitor them and abort/finish the retention/off sequence or state.
909 */ 921 */
diff --git a/drivers/mfd/dbx500-prcmu-regs.h b/drivers/mfd/dbx500-prcmu-regs.h
index b9ab4ce62654..3a0bf91d7780 100644
--- a/drivers/mfd/dbx500-prcmu-regs.h
+++ b/drivers/mfd/dbx500-prcmu-regs.h
@@ -79,6 +79,8 @@
79 79
80/* ARM WFI Standby signal register */ 80/* ARM WFI Standby signal register */
81#define PRCM_ARM_WFI_STANDBY (_PRCMU_BASE + 0x130) 81#define PRCM_ARM_WFI_STANDBY (_PRCMU_BASE + 0x130)
82#define PRCM_ARM_WFI_STANDBY_WFI0 0x08
83#define PRCM_ARM_WFI_STANDBY_WFI1 0x10
82#define PRCM_IOCR (_PRCMU_BASE + 0x310) 84#define PRCM_IOCR (_PRCMU_BASE + 0x310)
83#define PRCM_IOCR_IOFORCE 0x1 85#define PRCM_IOCR_IOFORCE 0x1
84 86
diff --git a/include/linux/mfd/db8500-prcmu.h b/include/linux/mfd/db8500-prcmu.h
index 926bdb3adc0f..048a534fde38 100644
--- a/include/linux/mfd/db8500-prcmu.h
+++ b/include/linux/mfd/db8500-prcmu.h
@@ -585,6 +585,7 @@ int db8500_prcmu_gic_recouple(void);
585int db8500_prcmu_copy_gic_settings(void); 585int db8500_prcmu_copy_gic_settings(void);
586bool db8500_prcmu_gic_pending_irq(void); 586bool db8500_prcmu_gic_pending_irq(void);
587bool db8500_prcmu_pending_irq(void); 587bool db8500_prcmu_pending_irq(void);
588bool db8500_prcmu_is_cpu_in_wfi(int cpu);
588void db8500_prcmu_enable_wakeups(u32 wakeups); 589void db8500_prcmu_enable_wakeups(u32 wakeups);
589int db8500_prcmu_set_epod(u16 epod_id, u8 epod_state); 590int db8500_prcmu_set_epod(u16 epod_id, u8 epod_state);
590int db8500_prcmu_request_clock(u8 clock, bool enable); 591int db8500_prcmu_request_clock(u8 clock, bool enable);
diff --git a/include/linux/mfd/dbx500-prcmu.h b/include/linux/mfd/dbx500-prcmu.h
index 5c72c07e20e4..eaa99a021785 100644
--- a/include/linux/mfd/dbx500-prcmu.h
+++ b/include/linux/mfd/dbx500-prcmu.h
@@ -305,6 +305,14 @@ static inline bool prcmu_gic_pending_irq(void)
305 return db8500_prcmu_gic_pending_irq(); 305 return db8500_prcmu_gic_pending_irq();
306} 306}
307 307
308static inline bool prcmu_is_cpu_in_wfi(int cpu)
309{
310 if (cpu_is_u5500())
311 return -EINVAL;
312 else
313 return db8500_prcmu_is_cpu_in_wfi(cpu);
314}
315
308static inline int prcmu_copy_gic_settings(void) 316static inline int prcmu_copy_gic_settings(void)
309{ 317{
310 if (cpu_is_u5500()) 318 if (cpu_is_u5500())