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

Commit 80a18573 authored by Todd Poynor's avatar Todd Poynor Committed by Russell King
Browse files

[ARM] 2787/2: PXA27x low power modes support



Patch from Todd Poynor

Add symbols for PXA2xx PWRMODE register M field that selects low-power
mode, replace unadorned constants.  Honor power mode parameter of
pxa_cpu_suspend(mode), no longer force to 3 (sleep).  Full Deep Sleep
low-power mode support for PXA27x is pending generic PM interfaces to
select more than 2 suspend-to-RAM-style power modes, but this is
expected soon. This can be hardcoded in the meantime by replacing the
pxa_cpu_suspend() parameter value.  From David Burrage and Todd Poynor.
Try #2 removes one of the register copies and moves the code to save the
pxa_cpu_suspend parameter to immediately surround the call that requires
the parameter value be preserved.

Signed-off-by: default avatarTodd Poynor <tpoynor@mvista.com>
Signed-off-by: default avatarNicolas Pitre <nico@cam.org>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 917f68f8
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -129,7 +129,7 @@ void pxa_cpu_pm_enter(suspend_state_t state)
	case PM_SUSPEND_MEM:
		/* set resume return address */
		PSPR = virt_to_phys(pxa_cpu_resume);
		pxa_cpu_suspend(3);
		pxa_cpu_suspend(PWRMODE_SLEEP);
		break;
	}
}
+1 −1
Original line number Diff line number Diff line
@@ -157,7 +157,7 @@ void pxa_cpu_pm_enter(suspend_state_t state)
	case PM_SUSPEND_MEM:
		/* set resume return address */
		PSPR = virt_to_phys(pxa_cpu_resume);
		pxa_cpu_suspend(3);
		pxa_cpu_suspend(PWRMODE_SLEEP);
		break;
	}
}
+5 −2
Original line number Diff line number Diff line
@@ -28,7 +28,9 @@
/*
 * pxa_cpu_suspend()
 *
 * Forces CPU into sleep state
 * Forces CPU into sleep state.
 *
 * r0 = value for PWRMODE M field for desired sleep state
 */

ENTRY(pxa_cpu_suspend)
@@ -53,6 +55,7 @@ ENTRY(pxa_cpu_suspend)
	mov	r10, sp
	stmfd	sp!, {r3 - r10}

	mov r5, r0				@ save sleep mode
	@ preserve phys address of stack
	mov	r0, sp
	bl	sleep_phys_sp
@@ -66,7 +69,7 @@ ENTRY(pxa_cpu_suspend)
	@ (also workaround for sighting 28071)

	@ prepare value for sleep mode
	mov	r1, #3				@ sleep mode
	mov	r1, r5				@ sleep mode

	@ prepare pointer to physical address 0 (virtual mapping in generic.c)
	mov	r2, #UNCACHED_PHYS_0
+1 −1
Original line number Diff line number Diff line
@@ -21,7 +21,7 @@
ENTRY(pxa_cpu_standby)
	ldr	r0, =PSSR
	mov	r1, #(PSSR_PH | PSSR_STS)
	mov	r2, #2
	mov	r2, #PWRMODE_STANDBY
	mov	r3, #UNCACHED_PHYS_0	@ Read mem context in.
	ldr	ip, [r3]
	b	1f
+7 −0
Original line number Diff line number Diff line
@@ -2282,4 +2282,11 @@

#endif

/* PWRMODE register M field values */

#define PWRMODE_IDLE		0x1
#define PWRMODE_STANDBY		0x2
#define PWRMODE_SLEEP		0x3
#define PWRMODE_DEEPSLEEP	0x7

#endif