Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 34fe6f10 authored by Daniel Lezcano's avatar Daniel Lezcano Committed by Samuel Ortiz
Browse files

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: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: default avatarSamuel Ortiz <sameo@linux.intel.com>
parent 9ab492e1
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -903,6 +903,18 @@ bool db8500_prcmu_pending_irq(void)
	return false;
}

/*
 * This function checks if the specified cpu is in in WFI. It's usage
 * makes sense only if the gic is decoupled with the db8500_prcmu_gic_decouple
 * function. Of course passing smp_processor_id() to this function will
 * always return false...
 */
bool db8500_prcmu_is_cpu_in_wfi(int cpu)
{
	return readl(PRCM_ARM_WFI_STANDBY) & cpu ? PRCM_ARM_WFI_STANDBY_WFI1 :
		     PRCM_ARM_WFI_STANDBY_WFI0;
}

/*
 * This function copies the gic SPI settings to the prcmu in order to
 * monitor them and abort/finish the retention/off sequence or state.
+2 −0
Original line number Diff line number Diff line
@@ -79,6 +79,8 @@

/* ARM WFI Standby signal register */
#define PRCM_ARM_WFI_STANDBY    (_PRCMU_BASE + 0x130)
#define PRCM_ARM_WFI_STANDBY_WFI0               0x08
#define PRCM_ARM_WFI_STANDBY_WFI1               0x10
#define PRCM_IOCR		(_PRCMU_BASE + 0x310)
#define PRCM_IOCR_IOFORCE			0x1

+1 −0
Original line number Diff line number Diff line
@@ -585,6 +585,7 @@ int db8500_prcmu_gic_recouple(void);
int db8500_prcmu_copy_gic_settings(void);
bool db8500_prcmu_gic_pending_irq(void);
bool db8500_prcmu_pending_irq(void);
bool db8500_prcmu_is_cpu_in_wfi(int cpu);
void db8500_prcmu_enable_wakeups(u32 wakeups);
int db8500_prcmu_set_epod(u16 epod_id, u8 epod_state);
int db8500_prcmu_request_clock(u8 clock, bool enable);
+8 −0
Original line number Diff line number Diff line
@@ -305,6 +305,14 @@ static inline bool prcmu_gic_pending_irq(void)
		return db8500_prcmu_gic_pending_irq();
}

static inline bool prcmu_is_cpu_in_wfi(int cpu)
{
	if (cpu_is_u5500())
		return -EINVAL;
	else
		return db8500_prcmu_is_cpu_in_wfi(cpu);
}

static inline int prcmu_copy_gic_settings(void)
{
	if (cpu_is_u5500())