blob: 7fc48fb73e4942e66408b5ce534676d1d8312d4c [file] [log] [blame]
Pankaj Guptaa9e3ac22020-12-09 14:02:40 +05301/*
Jiafei Pandef7edc2021-09-10 18:54:56 +08002 * Copyright 2018-2021 NXP
Pankaj Guptaa9e3ac22020-12-09 14:02:40 +05303 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 *
6 */
7
8#ifndef PLAT_PSCI_H
9#define PLAT_PSCI_H
Jiafei Pandef7edc2021-09-10 18:54:56 +080010#include <cortex_a53.h>
11#include <cortex_a72.h>
Pankaj Guptaa9e3ac22020-12-09 14:02:40 +053012
13 /* core abort current op */
14#define CORE_ABORT_OP 0x1
15
16 /* psci power levels - these are actually affinity levels
17 * in the psci_power_state_t array
18 */
19#define PLAT_CORE_LVL PSCI_CPU_PWR_LVL
20#define PLAT_CLSTR_LVL U(1)
21#define PLAT_SYS_LVL U(2)
22#define PLAT_MAX_LVL PLAT_SYS_LVL
23
24 /* core state */
25 /* OFF states 0x0 - 0xF */
26#define CORE_IN_RESET 0x0
27#define CORE_DISABLED 0x1
28#define CORE_OFF 0x2
29#define CORE_STANDBY 0x3
30#define CORE_PWR_DOWN 0x4
31#define CORE_WFE 0x6
32#define CORE_WFI 0x7
33#define CORE_LAST 0x8
34#define CORE_OFF_PENDING 0x9
35#define CORE_WORKING_INIT 0xA
36#define SYS_OFF_PENDING 0xB
37#define SYS_OFF 0xC
38
39 /* ON states 0x10 - 0x1F */
40#define CORE_PENDING 0x10
41#define CORE_RELEASED 0x11
42#define CORE_WAKEUP 0x12
43 /* highest off state */
44#define CORE_OFF_MAX 0xF
45 /* lowest on state */
46#define CORE_ON_MIN CORE_PENDING
47
48#define DAIF_SET_MASK 0x3C0
49#define SCTLR_I_C_M_MASK 0x00001005
50#define SCTLR_C_MASK 0x00000004
51#define SCTLR_I_MASK 0x00001000
52#define CPUACTLR_L1PCTL_MASK 0x0000E000
53#define DCSR_RCPM2_BASE 0x20170000
54#define CPUECTLR_SMPEN_MASK 0x40
55#define CPUECTLR_SMPEN_EN 0x40
56#define CPUECTLR_RET_MASK 0x7
57#define CPUECTLR_RET_SET 0x2
58#define CPUECTLR_TIMER_MASK 0x7
59#define CPUECTLR_TIMER_8TICKS 0x2
Jiafei Panf60957f2021-09-10 19:08:19 +080060#define CPUECTLR_TIMER_2TICKS 0x1
Pankaj Guptaa9e3ac22020-12-09 14:02:40 +053061#define SCR_IRQ_MASK 0x2
62#define SCR_FIQ_MASK 0x4
63
64/* pwr mgmt features supported in the soc-specific code:
65 * value == 0x0, the soc code does not support this feature
66 * value != 0x0, the soc code supports this feature
67 */
Jiafei Pan584c3f12021-09-10 19:01:15 +080068#ifndef SOC_CORE_RELEASE
Pankaj Guptaa9e3ac22020-12-09 14:02:40 +053069#define SOC_CORE_RELEASE 0x1
Jiafei Pan584c3f12021-09-10 19:01:15 +080070#endif
71
72#ifndef SOC_CORE_RESTART
Pankaj Guptaa9e3ac22020-12-09 14:02:40 +053073#define SOC_CORE_RESTART 0x1
Jiafei Pan584c3f12021-09-10 19:01:15 +080074#endif
75
76#ifndef SOC_CORE_OFF
Pankaj Guptaa9e3ac22020-12-09 14:02:40 +053077#define SOC_CORE_OFF 0x1
Jiafei Pan584c3f12021-09-10 19:01:15 +080078#endif
79
80#ifndef SOC_CORE_STANDBY
Pankaj Guptaa9e3ac22020-12-09 14:02:40 +053081#define SOC_CORE_STANDBY 0x1
Jiafei Pan584c3f12021-09-10 19:01:15 +080082#endif
83
84#ifndef SOC_CORE_PWR_DWN
Pankaj Guptaa9e3ac22020-12-09 14:02:40 +053085#define SOC_CORE_PWR_DWN 0x1
Jiafei Pan584c3f12021-09-10 19:01:15 +080086#endif
87
88#ifndef SOC_CLUSTER_STANDBY
Pankaj Guptaa9e3ac22020-12-09 14:02:40 +053089#define SOC_CLUSTER_STANDBY 0x1
Jiafei Pan584c3f12021-09-10 19:01:15 +080090#endif
91
92#ifndef SOC_CLUSTER_PWR_DWN
Pankaj Guptaa9e3ac22020-12-09 14:02:40 +053093#define SOC_CLUSTER_PWR_DWN 0x1
Jiafei Pan584c3f12021-09-10 19:01:15 +080094#endif
95
96#ifndef SOC_SYSTEM_STANDBY
Pankaj Guptaa9e3ac22020-12-09 14:02:40 +053097#define SOC_SYSTEM_STANDBY 0x1
Jiafei Pan584c3f12021-09-10 19:01:15 +080098#endif
99
100#ifndef SOC_SYSTEM_PWR_DWN
Pankaj Guptaa9e3ac22020-12-09 14:02:40 +0530101#define SOC_SYSTEM_PWR_DWN 0x1
Jiafei Pan584c3f12021-09-10 19:01:15 +0800102#endif
103
104#ifndef SOC_SYSTEM_OFF
Pankaj Guptaa9e3ac22020-12-09 14:02:40 +0530105#define SOC_SYSTEM_OFF 0x1
Jiafei Pan584c3f12021-09-10 19:01:15 +0800106#endif
107
108#ifndef SOC_SYSTEM_RESET
Pankaj Guptaa9e3ac22020-12-09 14:02:40 +0530109#define SOC_SYSTEM_RESET 0x1
Jiafei Pan584c3f12021-09-10 19:01:15 +0800110#endif
111
112#ifndef SOC_SYSTEM_RESET2
Pankaj Guptaa9e3ac22020-12-09 14:02:40 +0530113#define SOC_SYSTEM_RESET2 0x1
Jiafei Pan584c3f12021-09-10 19:01:15 +0800114#endif
Pankaj Guptaa9e3ac22020-12-09 14:02:40 +0530115
116#ifndef __ASSEMBLER__
117
118void __dead2 _psci_system_reset(void);
119void __dead2 _psci_system_off(void);
120int _psci_cpu_on(u_register_t core_mask);
121void _psci_cpu_prep_off(u_register_t core_mask);
122void __dead2 _psci_cpu_off_wfi(u_register_t core_mask,
123 u_register_t wakeup_address);
124void __dead2 _psci_cpu_pwrdn_wfi(u_register_t core_mask,
125 u_register_t wakeup_address);
126void __dead2 _psci_sys_pwrdn_wfi(u_register_t core_mask,
127 u_register_t wakeup_address);
128void _psci_wakeup(u_register_t core_mask);
129void _psci_core_entr_stdby(u_register_t core_mask);
130void _psci_core_prep_stdby(u_register_t core_mask);
131void _psci_core_exit_stdby(u_register_t core_mask);
132void _psci_core_prep_pwrdn(u_register_t core_mask);
133void _psci_core_exit_pwrdn(u_register_t core_mask);
134void _psci_clstr_prep_stdby(u_register_t core_mask);
135void _psci_clstr_exit_stdby(u_register_t core_mask);
136void _psci_clstr_prep_pwrdn(u_register_t core_mask);
137void _psci_clstr_exit_pwrdn(u_register_t core_mask);
138void _psci_sys_prep_stdby(u_register_t core_mask);
139void _psci_sys_exit_stdby(u_register_t core_mask);
140void _psci_sys_prep_pwrdn(u_register_t core_mask);
141void _psci_sys_exit_pwrdn(u_register_t core_mask);
142
143#endif
144
145#endif /* __PLAT_PSCI_H__ */