/* LOW POWER IDLE */
{
/*
- * RBC 31us + ARM gating 93us + RBC clear 65us
+ * RBC 130us + ARM gating 1370us + RBC clear 65us
* + PLL2 relock 450us and some margin, here set
- * it to 650us.
+ * it to 2100us.
*/
- .exit_latency = 650,
- .target_residency = 1000,
+ .exit_latency = 2100,
+ .target_residency = 2500,
.enter = imx6ul_enter_wait,
.name = "LOW-POWER-IDLE",
.desc = "ARM power off",
/*
* enable the RBC bypass counter here
* to hold off the interrupts. RBC counter
- * = 1 (30us). With this setting, the latency
+ * = 4 (120us). With this setting, the latency
* from wakeup interrupt to ARM power up
- * is ~40uS.
+ * is ~130uS.
*/
ldr r10, [r0, #PM_INFO_MX6Q_CCM_V_OFFSET]
ldr r3, [r10, #MX6Q_CCM_CCR]
bic r3, r3, #(0x3f << 21)
- orr r3, r3, #(0x1 << 21)
+ orr r3, r3, #(0x4 << 21)
str r3, [r10, #MX6Q_CCM_CCR]
/* enable the counter. */
/*
* now delay for a short while (3usec)
- * ARM is at 1GHz at this point
+ * ARM is at 24MHz at this point
* so a short loop should be enough.
* this delay is required to ensure that
* the RBC counter can start counting in
* or in case an interrupt arrives just
* as ARM is about to assert DSM_request.
*/
- ldr r4, =2000
+ ldr r4, =50
rbc_loop:
subs r4, r4, #0x1
bne rbc_loop