mt_cpuidle.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #ifndef MT_CPUIDLE_H
  2. #define MT_CPUIDLE_H
  3. #define MT_CPU_DORMANT_RESET 0
  4. #define MT_CPU_DORMANT_ABORT 1
  5. #define MT_CPU_DORMANT_BREAK 2
  6. #define MT_CPU_DORMANT_BYPASS 8
  7. #define MT_CPU_DORMANT_BREAK_V(v) (MT_CPU_DORMANT_BREAK | ((v) << 0x8))
  8. #define CPU_PM_BREAK 0
  9. #define IRQ_PENDING_1 1
  10. #define IRQ_PENDING_2 2
  11. #define IRQ_PENDING_3 3
  12. #define DORMANT_BREAK_CHECK (1<<0)
  13. #define DORMANT_SKIP_1 (1<<1)
  14. #define DORMANT_SKIP_2 (1<<2)
  15. #define DORMANT_SKIP_3 (1<<3)
  16. #define DORMANT_LOUIS_OFF (1<<8)
  17. #define DORMANT_INNER_OFF (1<<9)
  18. #define DORMANT_OUTER_OFF (1<<10)
  19. #define DORMANT_CPUSYS_OFF (1<<11)
  20. #define DORMANT_GIC_OFF (1<<12)
  21. #define DORMANT_SNOOP_OFF (1<<13)
  22. #define DORMANT_CCI400_CLOCK_SW (1<<16)
  23. #define DORMANT_ALL_OFF (DORMANT_OUTER_OFF \
  24. | DORMANT_INNER_OFF \
  25. | DORMANT_CPUSYS_OFF \
  26. | DORMANT_LOUIS_OFF \
  27. | DORMANT_GIC_OFF \
  28. | DORMANT_SNOOP_OFF)
  29. #define DORMANT_MODE_MASK (0x0ffff00)
  30. #define CPU_SHUTDOWN_MODE (DORMANT_ALL_OFF)
  31. #define CPU_MCDI_MODE (DORMANT_LOUIS_OFF)
  32. #define CPU_SODI_MODE (DORMANT_LOUIS_OFF \
  33. | DORMANT_CPUSYS_OFF \
  34. | DORMANT_GIC_OFF \
  35. | DORMANT_SNOOP_OFF)
  36. #define CPU_DEEPIDLE_MODE (DORMANT_LOUIS_OFF \
  37. | DORMANT_CPUSYS_OFF \
  38. | DORMANT_GIC_OFF \
  39. | DORMANT_SNOOP_OFF)
  40. #define CPU_SUSPEND_MODE (DORMANT_ALL_OFF)
  41. #define IS_DORMANT_SKIP_1(a) (((a) & DORMANT_SKIP_1) == DORMANT_SKIP_1)
  42. #define IS_DORMANT_SKIP_2(a) (((a) & DORMANT_SKIP_2) == DORMANT_SKIP_2)
  43. #define IS_DORMANT_SKIP_3(a) (((a) & DORMANT_SKIP_3) == DORMANT_SKIP_3)
  44. #define IS_DORMANT_BREAK_CHECK(a) (((a) & DORMANT_BREAK_CHECK) == DORMANT_BREAK_CHECK)
  45. #define IS_DORMANT_SNOOP_OFF(a) (((a) & DORMANT_SNOOP_OFF) == DORMANT_SNOOP_OFF)
  46. #define IS_DORMANT_INNER_OFF(a) (((a) & DORMANT_INNER_OFF) == DORMANT_INNER_OFF)
  47. #define IS_DORMANT_CPUSYS_OFF(a) (((a) & DORMANT_CPUSYS_OFF) == DORMANT_CPUSYS_OFF)
  48. #define IS_DORMANT_GIC_OFF(a) (((a) & DORMANT_GIC_OFF) == DORMANT_GIC_OFF)
  49. #define IS_DORMANT_CCI400_CLOCK_SW(a) (((a) & DORMANT_CCI400_CLOCK_SW) == DORMANT_CCI400_CLOCK_SW)
  50. #define IS_CPU_SHUTDOWN_MODE(a) (((a) & MODE_MASK) == CPU_SHUTDOWN_MODE)
  51. #define IS_CPU_DORMANT_MODE(a) (((a) & MODE_MASK) == CPU_DORMANT_MODE)
  52. #define _IS_DORMANT_SET(flag, feature) (((flag) & (feature)) == (feature))
  53. /*
  54. * mt_cpu_dormant
  55. *
  56. * cpu do the context save and issue WFI to SPM for trigger power-down,
  57. * and finally restore context after reset
  58. *
  59. * input:
  60. * data - the flags to decide detail of flow a bitwise arguments
  61. * -- CPU_DORMANT_MODE
  62. * -- CPU_SHUTDOWN_MODE
  63. * -- (optional) DORMANT_BREAK_CHECK
  64. *
  65. * return:
  66. * MT_CPU_DORMANT_RESET: cpu is reset from power-down state.
  67. * MT_CPU_DORMANT_ABORT: cpu issue WFI and return for a pending interrupt.
  68. * MT_CPU_DORMANT_BREAK: cpu dormant flow broken before by validating a SPM interrupt.
  69. * MT_CPU_DORMANT_BYPASS: (for debug only) to bypass all dormant flow.
  70. */
  71. int mt_cpu_dormant_init(void);
  72. int mt_cpu_dormant(unsigned long data);
  73. extern void write_cntpctl(int cntpctl);
  74. extern int read_cntpctl(void);
  75. extern int read_cpu_id(void);
  76. extern int read_cluster_id(void);
  77. extern void mt_save_generic_timer(unsigned int *container, int sw);
  78. extern void mt_restore_generic_timer(unsigned int *container, int sw);
  79. extern void mt_save_l2ctlr(unsigned long l2ctlr);
  80. extern unsigned long mt_restore_l2ctlr(int);
  81. extern void mt_goto_cpu_resume(void (*cpu_resume_phys));
  82. extern int mt_get_data_nommu(int data, unsigned long pva);
  83. extern void smp(void);
  84. extern void amp(void);
  85. extern void disable_dcache_safe(bool is_inner_off);
  86. extern void cpu_wake_up_errata_802022(void);
  87. extern unsigned *copy_words(volatile unsigned *destination,
  88. volatile unsigned *source, unsigned num_words);
  89. extern unsigned long *aee_rr_rec_cpu_dormant(void);
  90. extern unsigned long *aee_rr_rec_cpu_dormant_pa(void);
  91. #endif