Skip to content

Commit

Permalink
ARM: at91: pm select memory controler at runtime
Browse files Browse the repository at this point in the history
Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
[nicolas.ferre@atmel.com: add cpuidle modification]
Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com>
  • Loading branch information
Jean-Christophe PLAGNIOL-VILLARD authored and Nicolas Ferre committed Apr 17, 2012
1 parent 7eb1dbb commit efd0916
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 18 deletions.
8 changes: 7 additions & 1 deletion arch/arm/mach-at91/cpuidle.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
#include <linux/export.h>
#include <asm/proc-fns.h>
#include <asm/cpuidle.h>
#include <mach/cpu.h>

#include "pm.h"

Expand All @@ -33,7 +34,12 @@ static int at91_enter_idle(struct cpuidle_device *dev,
struct cpuidle_driver *drv,
int index)
{
at91_standby();
if (cpu_is_at91rm9200())
at91rm9200_standby();
else if (cpu_is_at91sam9g45())
at91sam9g45_standby();
else
at91sam9_standby();

return index;
}
Expand Down
12 changes: 8 additions & 4 deletions arch/arm/mach-at91/pm.c
Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,12 @@ static int at91_pm_enter(suspend_state_t state)
* For ARM 926 based chips, this requirement is weaker
* as at91sam9 can access a RAM in self-refresh mode.
*/
at91_standby();
if (cpu_is_at91rm9200())
at91rm9200_standby();
else if (cpu_is_at91sam9g45())
at91sam9g45_standby();
else
at91sam9_standby();
break;

case PM_SUSPEND_ON:
Expand Down Expand Up @@ -307,10 +312,9 @@ static int __init at91_pm_init(void)

pr_info("AT91: Power Management%s\n", (slow_clock ? " (with slow clock mode)" : ""));

#ifdef CONFIG_ARCH_AT91RM9200
/* AT91RM9200 SDRAM low-power mode cannot be used with self-refresh. */
at91_ramc_write(0, AT91RM9200_SDRAMC_LPR, 0);
#endif
if (cpu_is_at91rm9200())
at91_ramc_write(0, AT91RM9200_SDRAMC_LPR, 0);

suspend_set_ops(&at91_pm_ops);

Expand Down
13 changes: 0 additions & 13 deletions arch/arm/mach-at91/pm.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
#define __ARCH_ARM_MACH_AT91_PM

#include <mach/at91_ramc.h>
#ifdef CONFIG_ARCH_AT91RM9200
#include <mach/at91rm9200_sdramc.h>

/*
Expand Down Expand Up @@ -43,10 +42,6 @@ static inline void at91rm9200_standby(void)
"r" (lpr));
}

#define at91_standby at91rm9200_standby

#elif defined(CONFIG_ARCH_AT91SAM9G45)

/* We manage both DDRAM/SDRAM controllers, we need more than one value to
* remember.
*/
Expand Down Expand Up @@ -75,10 +70,6 @@ static inline void at91sam9g45_standby(void)
at91_ramc_write(1, AT91_DDRSDRC_LPR, saved_lpr1);
}

#define at91_standby at91sam9g45_standby

#else

#ifdef CONFIG_ARCH_AT91SAM9263
/*
* FIXME either or both the SDRAM controllers (EB0, EB1) might be in use;
Expand All @@ -102,8 +93,4 @@ static inline void at91sam9_standby(void)
at91_ramc_write(0, AT91_SDRAMC_LPR, saved_lpr);
}

#define at91_standby at91sam9_standby

#endif

#endif

0 comments on commit efd0916

Please sign in to comment.