pm.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #ifdef CONFIG_ARCH_AT91RM9200
  2. #include <mach/at91rm9200_mc.h>
  3. /*
  4. * The AT91RM9200 goes into self-refresh mode with this command, and will
  5. * terminate self-refresh automatically on the next SDRAM access.
  6. *
  7. * Self-refresh mode is exited as soon as a memory access is made, but we don't
  8. * know for sure when that happens. However, we need to restore the low-power
  9. * mode if it was enabled before going idle. Restoring low-power mode while
  10. * still in self-refresh is "not recommended", but seems to work.
  11. */
  12. static inline u32 sdram_selfrefresh_enable(void)
  13. {
  14. u32 saved_lpr = at91_sys_read(AT91_SDRAMC_LPR);
  15. at91_sys_write(AT91_SDRAMC_LPR, 0);
  16. at91_sys_write(AT91_SDRAMC_SRR, 1);
  17. return saved_lpr;
  18. }
  19. #define sdram_selfrefresh_disable(saved_lpr) at91_sys_write(AT91_SDRAMC_LPR, saved_lpr)
  20. #elif defined(CONFIG_ARCH_AT91CAP9)
  21. #include <mach/at91cap9_ddrsdr.h>
  22. static inline u32 sdram_selfrefresh_enable(void)
  23. {
  24. u32 saved_lpr, lpr;
  25. saved_lpr = at91_sys_read(AT91_DDRSDRC_LPR);
  26. lpr = saved_lpr & ~AT91_DDRSDRC_LPCB;
  27. at91_sys_write(AT91_DDRSDRC_LPR, lpr | AT91_DDRSDRC_LPCB_SELF_REFRESH);
  28. return saved_lpr;
  29. }
  30. #define sdram_selfrefresh_disable(saved_lpr) at91_sys_write(AT91_DDRSDRC_LPR, saved_lpr)
  31. #else
  32. #include <mach/at91sam9_sdramc.h>
  33. #ifdef CONFIG_ARCH_AT91SAM9263
  34. /*
  35. * FIXME either or both the SDRAM controllers (EB0, EB1) might be in use;
  36. * handle those cases both here and in the Suspend-To-RAM support.
  37. */
  38. #define AT91_SDRAMC AT91_SDRAMC0
  39. #warning Assuming EB1 SDRAM controller is *NOT* used
  40. #endif
  41. static inline u32 sdram_selfrefresh_enable(void)
  42. {
  43. u32 saved_lpr, lpr;
  44. saved_lpr = at91_sys_read(AT91_SDRAMC_LPR);
  45. lpr = saved_lpr & ~AT91_SDRAMC_LPCB;
  46. at91_sys_write(AT91_SDRAMC_LPR, lpr | AT91_SDRAMC_LPCB_SELF_REFRESH);
  47. return saved_lpr;
  48. }
  49. #define sdram_selfrefresh_disable(saved_lpr) at91_sys_write(AT91_SDRAMC_LPR, saved_lpr)
  50. #endif