| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- #ifndef MT_CPUIDLE_H
- #define MT_CPUIDLE_H
- #define MT_CPU_DORMANT_RESET 0
- #define MT_CPU_DORMANT_ABORT 1
- #define MT_CPU_DORMANT_BREAK 2
- #define MT_CPU_DORMANT_BYPASS 8
- #define MT_CPU_DORMANT_BREAK_V(v) (MT_CPU_DORMANT_BREAK | ((v) << 0x8))
- #define CPU_PM_BREAK 0
- #define IRQ_PENDING_1 1
- #define IRQ_PENDING_2 2
- #define IRQ_PENDING_3 3
- #define DORMANT_BREAK_CHECK (1<<0)
- #define DORMANT_SKIP_1 (1<<1)
- #define DORMANT_SKIP_2 (1<<2)
- #define DORMANT_SKIP_3 (1<<3)
- #define DORMANT_LOUIS_OFF (1<<8)
- #define DORMANT_INNER_OFF (1<<9)
- #define DORMANT_OUTER_OFF (1<<10)
- #define DORMANT_CPUSYS_OFF (1<<11)
- #define DORMANT_GIC_OFF (1<<12)
- #define DORMANT_SNOOP_OFF (1<<13)
- #define DORMANT_CCI400_CLOCK_SW (1<<16)
- #define DORMANT_ALL_OFF (DORMANT_OUTER_OFF \
- | DORMANT_INNER_OFF \
- | DORMANT_CPUSYS_OFF \
- | DORMANT_LOUIS_OFF \
- | DORMANT_GIC_OFF \
- | DORMANT_SNOOP_OFF)
- #define DORMANT_MODE_MASK (0x0ffff00)
- #define CPU_SHUTDOWN_MODE (DORMANT_ALL_OFF)
- #define CPU_MCDI_MODE (DORMANT_LOUIS_OFF)
- #define CPU_SODI_MODE (DORMANT_LOUIS_OFF \
- | DORMANT_CPUSYS_OFF \
- | DORMANT_GIC_OFF \
- | DORMANT_SNOOP_OFF)
- #define CPU_DEEPIDLE_MODE (DORMANT_LOUIS_OFF \
- | DORMANT_CPUSYS_OFF \
- | DORMANT_GIC_OFF \
- | DORMANT_SNOOP_OFF)
- #define CPU_SUSPEND_MODE (DORMANT_ALL_OFF)
- #define IS_DORMANT_SKIP_1(a) (((a) & DORMANT_SKIP_1) == DORMANT_SKIP_1)
- #define IS_DORMANT_SKIP_2(a) (((a) & DORMANT_SKIP_2) == DORMANT_SKIP_2)
- #define IS_DORMANT_SKIP_3(a) (((a) & DORMANT_SKIP_3) == DORMANT_SKIP_3)
- #define IS_DORMANT_BREAK_CHECK(a) (((a) & DORMANT_BREAK_CHECK) == DORMANT_BREAK_CHECK)
- #define IS_DORMANT_SNOOP_OFF(a) (((a) & DORMANT_SNOOP_OFF) == DORMANT_SNOOP_OFF)
- #define IS_DORMANT_INNER_OFF(a) (((a) & DORMANT_INNER_OFF) == DORMANT_INNER_OFF)
- #define IS_DORMANT_CPUSYS_OFF(a) (((a) & DORMANT_CPUSYS_OFF) == DORMANT_CPUSYS_OFF)
- #define IS_DORMANT_GIC_OFF(a) (((a) & DORMANT_GIC_OFF) == DORMANT_GIC_OFF)
- #define IS_DORMANT_CCI400_CLOCK_SW(a) (((a) & DORMANT_CCI400_CLOCK_SW) == DORMANT_CCI400_CLOCK_SW)
- #define IS_CPU_SHUTDOWN_MODE(a) (((a) & MODE_MASK) == CPU_SHUTDOWN_MODE)
- #define IS_CPU_DORMANT_MODE(a) (((a) & MODE_MASK) == CPU_DORMANT_MODE)
- #define _IS_DORMANT_SET(flag, feature) (((flag) & (feature)) == (feature))
- /*
- * mt_cpu_dormant
- *
- * cpu do the context save and issue WFI to SPM for trigger power-down,
- * and finally restore context after reset
- *
- * input:
- * data - the flags to decide detail of flow a bitwise arguments
- * -- CPU_DORMANT_MODE
- * -- CPU_SHUTDOWN_MODE
- * -- (optional) DORMANT_BREAK_CHECK
- *
- * return:
- * MT_CPU_DORMANT_RESET: cpu is reset from power-down state.
- * MT_CPU_DORMANT_ABORT: cpu issue WFI and return for a pending interrupt.
- * MT_CPU_DORMANT_BREAK: cpu dormant flow broken before by validating a SPM interrupt.
- * MT_CPU_DORMANT_BYPASS: (for debug only) to bypass all dormant flow.
- */
- int mt_cpu_dormant_init(void);
- int mt_cpu_dormant(unsigned long data);
- extern void write_cntpctl(int cntpctl);
- extern int read_cntpctl(void);
- extern int read_cpu_id(void);
- extern int read_cluster_id(void);
- extern void mt_save_generic_timer(unsigned int *container, int sw);
- extern void mt_restore_generic_timer(unsigned int *container, int sw);
- extern void mt_save_l2ctlr(unsigned long l2ctlr);
- extern unsigned long mt_restore_l2ctlr(int);
- extern void mt_goto_cpu_resume(void (*cpu_resume_phys));
- extern int mt_get_data_nommu(int data, unsigned long pva);
- extern void smp(void);
- extern void amp(void);
- extern void disable_dcache_safe(bool is_inner_off);
- extern void cpu_wake_up_errata_802022(void);
- extern unsigned *copy_words(volatile unsigned *destination,
- volatile unsigned *source, unsigned num_words);
- extern unsigned long *aee_rr_rec_cpu_dormant(void);
- extern unsigned long *aee_rr_rec_cpu_dormant_pa(void);
- #endif
|