diff options
Diffstat (limited to 'arch/arm/mach-at91/pm.h')
| -rw-r--r-- | arch/arm/mach-at91/pm.h | 30 | 
1 files changed, 24 insertions, 6 deletions
diff --git a/arch/arm/mach-at91/pm.h b/arch/arm/mach-at91/pm.h index 38f467c6b71..2f5908f0b8c 100644 --- a/arch/arm/mach-at91/pm.h +++ b/arch/arm/mach-at91/pm.h @@ -70,13 +70,31 @@ static inline void at91sam9g45_standby(void)  	at91_ramc_write(1, AT91_DDRSDRC_LPR, saved_lpr1);  } -#ifdef CONFIG_SOC_AT91SAM9263 -/* - * FIXME either or both the SDRAM controllers (EB0, EB1) might be in use; - * handle those cases both here and in the Suspend-To-RAM support. +/* We manage both DDRAM/SDRAM controllers, we need more than one value to + * remember.   */ -#warning Assuming EB1 SDRAM controller is *NOT* used -#endif +static inline void at91sam9263_standby(void) +{ +	u32 lpr0, lpr1; +	u32 saved_lpr0, saved_lpr1; + +	saved_lpr1 = at91_ramc_read(1, AT91_SDRAMC_LPR); +	lpr1 = saved_lpr1 & ~AT91_SDRAMC_LPCB; +	lpr1 |= AT91_SDRAMC_LPCB_SELF_REFRESH; + +	saved_lpr0 = at91_ramc_read(0, AT91_SDRAMC_LPR); +	lpr0 = saved_lpr0 & ~AT91_SDRAMC_LPCB; +	lpr0 |= AT91_SDRAMC_LPCB_SELF_REFRESH; + +	/* self-refresh mode now */ +	at91_ramc_write(0, AT91_SDRAMC_LPR, lpr0); +	at91_ramc_write(1, AT91_SDRAMC_LPR, lpr1); + +	cpu_do_idle(); + +	at91_ramc_write(0, AT91_SDRAMC_LPR, saved_lpr0); +	at91_ramc_write(1, AT91_SDRAMC_LPR, saved_lpr1); +}  static inline void at91sam9_standby(void)  {  |