pm.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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. #define wait_for_interrupt_enable() asm("mcr p15, 0, r0, c7, c0, 4")
  21. #elif defined(CONFIG_ARCH_AT91CAP9)
  22. #include <mach/at91cap9_ddrsdr.h>
  23. static inline u32 sdram_selfrefresh_enable(void)
  24. {
  25. u32 saved_lpr, lpr;
  26. saved_lpr = at91_ramc_read(0, AT91_DDRSDRC_LPR);
  27. lpr = saved_lpr & ~AT91_DDRSDRC_LPCB;
  28. at91_ramc_write(0, AT91_DDRSDRC_LPR, lpr | AT91_DDRSDRC_LPCB_SELF_REFRESH);
  29. return saved_lpr;
  30. }
  31. #define sdram_selfrefresh_disable(saved_lpr) at91_ramc_write(0, AT91_DDRSDRC_LPR, saved_lpr)
  32. #define wait_for_interrupt_enable() cpu_do_idle()
  33. #elif defined(CONFIG_ARCH_AT91SAM9G45)
  34. #include <mach/at91sam9_ddrsdr.h>
  35. /* We manage both DDRAM/SDRAM controllers, we need more than one value to
  36. * remember.
  37. */
  38. static u32 saved_lpr1;
  39. static inline u32 sdram_selfrefresh_enable(void)
  40. {
  41. /* Those tow values allow us to delay self-refresh activation
  42. * to the maximum. */
  43. u32 lpr0, lpr1;
  44. u32 saved_lpr0;
  45. saved_lpr1 = at91_ramc_read(1, AT91_DDRSDRC_LPR);
  46. lpr1 = saved_lpr1 & ~AT91_DDRSDRC_LPCB;
  47. lpr1 |= AT91_DDRSDRC_LPCB_SELF_REFRESH;
  48. saved_lpr0 = at91_ramc_read(0, AT91_DDRSDRC_LPR);
  49. lpr0 = saved_lpr0 & ~AT91_DDRSDRC_LPCB;
  50. lpr0 |= AT91_DDRSDRC_LPCB_SELF_REFRESH;
  51. /* self-refresh mode now */
  52. at91_ramc_write(0, AT91_DDRSDRC_LPR, lpr0);
  53. at91_ramc_write(1, AT91_DDRSDRC_LPR, lpr1);
  54. return saved_lpr0;
  55. }
  56. #define sdram_selfrefresh_disable(saved_lpr0) \
  57. do { \
  58. at91_ramc_write(0, AT91_DDRSDRC_LPR, saved_lpr0); \
  59. at91_ramc_write(1, AT91_DDRSDRC_LPR, saved_lpr1); \
  60. } while (0)
  61. #define wait_for_interrupt_enable() cpu_do_idle()
  62. #else
  63. #include <mach/at91sam9_sdramc.h>
  64. #ifdef CONFIG_ARCH_AT91SAM9263
  65. /*
  66. * FIXME either or both the SDRAM controllers (EB0, EB1) might be in use;
  67. * handle those cases both here and in the Suspend-To-RAM support.
  68. */
  69. #warning Assuming EB1 SDRAM controller is *NOT* used
  70. #endif
  71. static inline u32 sdram_selfrefresh_enable(void)
  72. {
  73. u32 saved_lpr, lpr;
  74. saved_lpr = at91_ramc_read(0, AT91_SDRAMC_LPR);
  75. lpr = saved_lpr & ~AT91_SDRAMC_LPCB;
  76. at91_ramc_write(0, AT91_SDRAMC_LPR, lpr | AT91_SDRAMC_LPCB_SELF_REFRESH);
  77. return saved_lpr;
  78. }
  79. #define sdram_selfrefresh_disable(saved_lpr) at91_ramc_write(0, AT91_SDRAMC_LPR, saved_lpr)
  80. #define wait_for_interrupt_enable() cpu_do_idle()
  81. #endif