1*4882a593Smuzhiyun /* Copyright (c) 2016, Fuzhou Rockchip Electronics Co., Ltd
2*4882a593Smuzhiyun *
3*4882a593Smuzhiyun * This program is free software; you can redistribute it and/or modify
4*4882a593Smuzhiyun * it under the terms of the GNU General Public License version 2 and
5*4882a593Smuzhiyun * only version 2 as published by the Free Software Foundation.
6*4882a593Smuzhiyun *
7*4882a593Smuzhiyun * This program is distributed in the hope that it will be useful,
8*4882a593Smuzhiyun * but WITHOUT ANY WARRANTY; without even the implied warranty of
9*4882a593Smuzhiyun * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10*4882a593Smuzhiyun * GNU General Public License for more details.
11*4882a593Smuzhiyun */
12*4882a593Smuzhiyun #ifndef __ROCKCHIP_SIP_H
13*4882a593Smuzhiyun #define __ROCKCHIP_SIP_H
14*4882a593Smuzhiyun
15*4882a593Smuzhiyun #include <linux/arm-smccc.h>
16*4882a593Smuzhiyun #include <linux/io.h>
17*4882a593Smuzhiyun
18*4882a593Smuzhiyun /* SMC function IDs for SiP Service queries, compatible with kernel-3.10 */
19*4882a593Smuzhiyun #define SIP_ATF_VERSION 0x82000001
20*4882a593Smuzhiyun #define SIP_ACCESS_REG 0x82000002
21*4882a593Smuzhiyun #define SIP_SUSPEND_MODE 0x82000003
22*4882a593Smuzhiyun #define SIP_PENDING_CPUS 0x82000004
23*4882a593Smuzhiyun #define SIP_UARTDBG_CFG 0x82000005
24*4882a593Smuzhiyun #define SIP_UARTDBG_CFG64 0xc2000005
25*4882a593Smuzhiyun #define SIP_MCU_EL3FIQ_CFG 0x82000006
26*4882a593Smuzhiyun #define SIP_ACCESS_CHIP_STATE64 0xc2000006
27*4882a593Smuzhiyun #define SIP_SECURE_MEM_CONFIG 0x82000007
28*4882a593Smuzhiyun #define SIP_ACCESS_CHIP_EXTRA_STATE64 0xc2000007
29*4882a593Smuzhiyun #define SIP_DRAM_CONFIG 0x82000008
30*4882a593Smuzhiyun #define SIP_SHARE_MEM 0x82000009
31*4882a593Smuzhiyun #define SIP_SIP_VERSION 0x8200000a
32*4882a593Smuzhiyun #define SIP_REMOTECTL_CFG 0x8200000b
33*4882a593Smuzhiyun #define PSCI_SIP_VPU_RESET 0x8200000c
34*4882a593Smuzhiyun #define SIP_BUS_CFG 0x8200000d
35*4882a593Smuzhiyun #define SIP_LAST_LOG 0x8200000e
36*4882a593Smuzhiyun #define SIP_SCMI_AGENT0 0x82000010
37*4882a593Smuzhiyun #define SIP_SCMI_AGENT1 0x82000011
38*4882a593Smuzhiyun #define SIP_SCMI_AGENT2 0x82000012
39*4882a593Smuzhiyun #define SIP_SCMI_AGENT3 0x82000013
40*4882a593Smuzhiyun #define SIP_SCMI_AGENT4 0x82000014
41*4882a593Smuzhiyun #define SIP_SCMI_AGENT5 0x82000015
42*4882a593Smuzhiyun #define SIP_SCMI_AGENT6 0x82000016
43*4882a593Smuzhiyun #define SIP_SCMI_AGENT7 0x82000017
44*4882a593Smuzhiyun #define SIP_SCMI_AGENT8 0x82000018
45*4882a593Smuzhiyun #define SIP_SCMI_AGENT9 0x82000019
46*4882a593Smuzhiyun #define SIP_SCMI_AGENT10 0x8200001a
47*4882a593Smuzhiyun #define SIP_SCMI_AGENT11 0x8200001b
48*4882a593Smuzhiyun #define SIP_SCMI_AGENT12 0x8200001c
49*4882a593Smuzhiyun #define SIP_SCMI_AGENT13 0x8200001d
50*4882a593Smuzhiyun #define SIP_SCMI_AGENT14 0x8200001e
51*4882a593Smuzhiyun #define SIP_SCMI_AGENT15 0x8200001f
52*4882a593Smuzhiyun #define SIP_SDEI_FIQ_DBG_SWITCH_CPU 0x82000020
53*4882a593Smuzhiyun #define SIP_SDEI_FIQ_DBG_GET_EVENT_ID 0x82000021
54*4882a593Smuzhiyun #define RK_SIP_AMP_CFG 0x82000022
55*4882a593Smuzhiyun #define RK_SIP_FIQ_CTRL 0x82000024
56*4882a593Smuzhiyun #define SIP_HDCP_CONFIG 0x82000025
57*4882a593Smuzhiyun #define SIP_WDT_CFG 0x82000026
58*4882a593Smuzhiyun #define SIP_HDMIRX_CFG 0x82000027
59*4882a593Smuzhiyun #define SIP_MCU_CFG 0x82000028
60*4882a593Smuzhiyun
61*4882a593Smuzhiyun #define TRUSTED_OS_HDCPKEY_INIT 0xB7000003
62*4882a593Smuzhiyun
63*4882a593Smuzhiyun /* Rockchip Sip version */
64*4882a593Smuzhiyun #define SIP_IMPLEMENT_V1 (1)
65*4882a593Smuzhiyun #define SIP_IMPLEMENT_V2 (2)
66*4882a593Smuzhiyun
67*4882a593Smuzhiyun /* Trust firmware version */
68*4882a593Smuzhiyun #define ATF_VER_MAJOR(ver) (((ver) >> 16) & 0xffff)
69*4882a593Smuzhiyun #define ATF_VER_MINOR(ver) (((ver) >> 0) & 0xffff)
70*4882a593Smuzhiyun
71*4882a593Smuzhiyun /* SIP_ACCESS_REG: read or write */
72*4882a593Smuzhiyun #define SECURE_REG_RD 0x0
73*4882a593Smuzhiyun #define SECURE_REG_WR 0x1
74*4882a593Smuzhiyun
75*4882a593Smuzhiyun /* Fiq debugger share memory: 8KB enough */
76*4882a593Smuzhiyun #define FIQ_UARTDBG_PAGE_NUMS 2
77*4882a593Smuzhiyun #define FIQ_UARTDBG_SHARE_MEM_SIZE ((FIQ_UARTDBG_PAGE_NUMS) * 4096)
78*4882a593Smuzhiyun
79*4882a593Smuzhiyun /* Error return code */
80*4882a593Smuzhiyun #define IS_SIP_ERROR(x) (!!(x))
81*4882a593Smuzhiyun
82*4882a593Smuzhiyun #define SIP_RET_SUCCESS 0
83*4882a593Smuzhiyun #define SIP_RET_SMC_UNKNOWN -1
84*4882a593Smuzhiyun #define SIP_RET_NOT_SUPPORTED -2
85*4882a593Smuzhiyun #define SIP_RET_INVALID_PARAMS -3
86*4882a593Smuzhiyun #define SIP_RET_INVALID_ADDRESS -4
87*4882a593Smuzhiyun #define SIP_RET_DENIED -5
88*4882a593Smuzhiyun #define SIP_RET_SET_RATE_TIMEOUT -6
89*4882a593Smuzhiyun
90*4882a593Smuzhiyun /* SIP_UARTDBG_CFG64 call types */
91*4882a593Smuzhiyun #define UARTDBG_CFG_INIT 0xf0
92*4882a593Smuzhiyun #define UARTDBG_CFG_OSHDL_TO_OS 0xf1
93*4882a593Smuzhiyun #define UARTDBG_CFG_OSHDL_CPUSW 0xf3
94*4882a593Smuzhiyun #define UARTDBG_CFG_OSHDL_DEBUG_ENABLE 0xf4
95*4882a593Smuzhiyun #define UARTDBG_CFG_OSHDL_DEBUG_DISABLE 0xf5
96*4882a593Smuzhiyun #define UARTDBG_CFG_PRINT_PORT 0xf7
97*4882a593Smuzhiyun #define UARTDBG_CFG_FIQ_ENABEL 0xf8
98*4882a593Smuzhiyun #define UARTDBG_CFG_FIQ_DISABEL 0xf9
99*4882a593Smuzhiyun
100*4882a593Smuzhiyun /* SIP_SUSPEND_MODE32 call types */
101*4882a593Smuzhiyun #define SUSPEND_MODE_CONFIG 0x01
102*4882a593Smuzhiyun #define WKUP_SOURCE_CONFIG 0x02
103*4882a593Smuzhiyun #define PWM_REGULATOR_CONFIG 0x03
104*4882a593Smuzhiyun #define GPIO_POWER_CONFIG 0x04
105*4882a593Smuzhiyun #define SUSPEND_DEBUG_ENABLE 0x05
106*4882a593Smuzhiyun #define APIOS_SUSPEND_CONFIG 0x06
107*4882a593Smuzhiyun #define VIRTUAL_POWEROFF 0x07
108*4882a593Smuzhiyun #define SUSPEND_WFI_TIME_MS 0x08
109*4882a593Smuzhiyun #define LINUX_PM_STATE 0x09
110*4882a593Smuzhiyun #define SUSPEND_IO_RET_CONFIG 0x0a
111*4882a593Smuzhiyun #define SLEEP_PIN_CONFIG 0x0b
112*4882a593Smuzhiyun
113*4882a593Smuzhiyun /* SIP_REMOTECTL_CFG call types */
114*4882a593Smuzhiyun #define REMOTECTL_SET_IRQ 0xf0
115*4882a593Smuzhiyun #define REMOTECTL_SET_PWM_CH 0xf1
116*4882a593Smuzhiyun #define REMOTECTL_SET_PWRKEY 0xf2
117*4882a593Smuzhiyun #define REMOTECTL_GET_WAKEUP_STATE 0xf3
118*4882a593Smuzhiyun #define REMOTECTL_ENABLE 0xf4
119*4882a593Smuzhiyun /* wakeup state */
120*4882a593Smuzhiyun #define REMOTECTL_PWRKEY_WAKEUP 0xdeadbeaf
121*4882a593Smuzhiyun
122*4882a593Smuzhiyun /* SIP_MCU_CFG child configs, MCU ID */
123*4882a593Smuzhiyun enum {
124*4882a593Smuzhiyun RK_BUS_MCU,
125*4882a593Smuzhiyun RK_PMU_MCU,
126*4882a593Smuzhiyun RK_DDR_MCU,
127*4882a593Smuzhiyun RK_NPU_MCU,
128*4882a593Smuzhiyun };
129*4882a593Smuzhiyun
130*4882a593Smuzhiyun #define RK_SIP_MCU_ID(type, id) ((type) << 8 | id)
131*4882a593Smuzhiyun
132*4882a593Smuzhiyun #define RK_SIP_CFG_BUSMCU_0_ID RK_SIP_MCU_ID(RK_BUS_MCU, 0)
133*4882a593Smuzhiyun #define RK_SIP_CFG_BUSMCU_1_ID RK_SIP_MCU_ID(RK_BUS_MCU, 1)
134*4882a593Smuzhiyun #define RK_SIP_CFG_PMUMCU_0_ID RK_SIP_MCU_ID(RK_PMU_MCU, 0)
135*4882a593Smuzhiyun #define RK_SIP_CFG_DDRMCU_0_ID RK_SIP_MCU_ID(RK_DDR_MCU, 0)
136*4882a593Smuzhiyun #define RK_SIP_CFG_NPUMCU_0_ID RK_SIP_MCU_ID(RK_NPU_MCU, 0)
137*4882a593Smuzhiyun
138*4882a593Smuzhiyun /* SIP_MCU_CFG child configs */
139*4882a593Smuzhiyun #define CONFIG_MCU_CODE_START_ADDR 0x01
140*4882a593Smuzhiyun #define CONFIG_MCU_EXPERI_START_ADDR 0x02
141*4882a593Smuzhiyun #define CONFIG_MCU_SRAM_START_ADDR 0x03
142*4882a593Smuzhiyun #define CONFIG_MCU_EXSRAM_START_ADDR 0x04
143*4882a593Smuzhiyun
144*4882a593Smuzhiyun struct dram_addrmap_info {
145*4882a593Smuzhiyun u64 ch_mask[2];
146*4882a593Smuzhiyun u64 bk_mask[4];
147*4882a593Smuzhiyun u64 bg_mask[2];
148*4882a593Smuzhiyun u64 cs_mask[2];
149*4882a593Smuzhiyun u32 reserved[20];
150*4882a593Smuzhiyun u32 bank_bit_first;
151*4882a593Smuzhiyun u32 bank_bit_mask;
152*4882a593Smuzhiyun };
153*4882a593Smuzhiyun
154*4882a593Smuzhiyun /* AMP Ctrl */
155*4882a593Smuzhiyun enum {
156*4882a593Smuzhiyun RK_AMP_SUB_FUNC_CFG_MODE = 0,
157*4882a593Smuzhiyun RK_AMP_SUB_FUNC_BOOT_ARG01,
158*4882a593Smuzhiyun RK_AMP_SUB_FUNC_BOOT_ARG23,
159*4882a593Smuzhiyun RK_AMP_SUB_FUNC_REQ_CPU_OFF,
160*4882a593Smuzhiyun RK_AMP_SUB_FUNC_GET_CPU_STATUS,
161*4882a593Smuzhiyun RK_AMP_SUB_FUNC_RSV, /* for RTOS */
162*4882a593Smuzhiyun RK_AMP_SUB_FUNC_CPU_ON,
163*4882a593Smuzhiyun RK_AMP_SUB_FUNC_END,
164*4882a593Smuzhiyun };
165*4882a593Smuzhiyun
166*4882a593Smuzhiyun enum {
167*4882a593Smuzhiyun FIRMWARE_NONE,
168*4882a593Smuzhiyun FIRMWARE_TEE_32BIT,
169*4882a593Smuzhiyun FIRMWARE_ATF_32BIT,
170*4882a593Smuzhiyun FIRMWARE_ATF_64BIT,
171*4882a593Smuzhiyun FIRMWARE_END,
172*4882a593Smuzhiyun };
173*4882a593Smuzhiyun
174*4882a593Smuzhiyun /* Share mem page types */
175*4882a593Smuzhiyun typedef enum {
176*4882a593Smuzhiyun SHARE_PAGE_TYPE_INVALID = 0,
177*4882a593Smuzhiyun SHARE_PAGE_TYPE_UARTDBG,
178*4882a593Smuzhiyun SHARE_PAGE_TYPE_DDR,
179*4882a593Smuzhiyun SHARE_PAGE_TYPE_DDRDBG,
180*4882a593Smuzhiyun SHARE_PAGE_TYPE_DDRECC,
181*4882a593Smuzhiyun SHARE_PAGE_TYPE_DDRFSP,
182*4882a593Smuzhiyun SHARE_PAGE_TYPE_DDR_ADDRMAP,
183*4882a593Smuzhiyun SHARE_PAGE_TYPE_LAST_LOG,
184*4882a593Smuzhiyun SHARE_PAGE_TYPE_HDCP,
185*4882a593Smuzhiyun SHARE_PAGE_TYPE_MAX,
186*4882a593Smuzhiyun } share_page_type_t;
187*4882a593Smuzhiyun
188*4882a593Smuzhiyun /* fiq control sub func */
189*4882a593Smuzhiyun enum {
190*4882a593Smuzhiyun RK_SIP_FIQ_CTRL_FIQ_EN = 1,
191*4882a593Smuzhiyun RK_SIP_FIQ_CTRL_FIQ_DIS,
192*4882a593Smuzhiyun RK_SIP_FIQ_CTRL_SET_AFF
193*4882a593Smuzhiyun };
194*4882a593Smuzhiyun
195*4882a593Smuzhiyun /* hdcp function types */
196*4882a593Smuzhiyun enum {
197*4882a593Smuzhiyun HDCP_FUNC_STORAGE_INCRYPT = 1,
198*4882a593Smuzhiyun HDCP_FUNC_KEY_LOAD,
199*4882a593Smuzhiyun HDCP_FUNC_ENCRYPT_MODE
200*4882a593Smuzhiyun };
201*4882a593Smuzhiyun
202*4882a593Smuzhiyun /* support hdcp device list */
203*4882a593Smuzhiyun enum {
204*4882a593Smuzhiyun DP_TX0,
205*4882a593Smuzhiyun DP_TX1,
206*4882a593Smuzhiyun EDP_TX0,
207*4882a593Smuzhiyun EDP_TX1,
208*4882a593Smuzhiyun HDMI_TX0,
209*4882a593Smuzhiyun HDMI_TX1,
210*4882a593Smuzhiyun HDMI_RX,
211*4882a593Smuzhiyun MAX_DEVICE,
212*4882a593Smuzhiyun };
213*4882a593Smuzhiyun
214*4882a593Smuzhiyun /* SIP_WDT_CONFIG call types */
215*4882a593Smuzhiyun enum {
216*4882a593Smuzhiyun WDT_START = 0,
217*4882a593Smuzhiyun WDT_STOP = 1,
218*4882a593Smuzhiyun WDT_PING = 2,
219*4882a593Smuzhiyun };
220*4882a593Smuzhiyun
221*4882a593Smuzhiyun /* SIP_HDMIRX_CONFIG child configs */
222*4882a593Smuzhiyun enum {
223*4882a593Smuzhiyun HDMIRX_AUTO_TOUCH_EN = 0,
224*4882a593Smuzhiyun HDMIRX_REG_PRE_FETCH = 1,
225*4882a593Smuzhiyun HDMIRX_INFO_NOTIFY = 2,
226*4882a593Smuzhiyun };
227*4882a593Smuzhiyun
228*4882a593Smuzhiyun struct pt_regs;
229*4882a593Smuzhiyun typedef void (*sip_fiq_debugger_uart_irq_tf_cb_t)(struct pt_regs *_pt_regs, unsigned long cpu);
230*4882a593Smuzhiyun
231*4882a593Smuzhiyun /*
232*4882a593Smuzhiyun * Rules: struct arm_smccc_res contains result and data, details:
233*4882a593Smuzhiyun *
234*4882a593Smuzhiyun * a0: error code(0: success, !0: error);
235*4882a593Smuzhiyun * a1~a3: data
236*4882a593Smuzhiyun */
237*4882a593Smuzhiyun #if IS_REACHABLE(CONFIG_ROCKCHIP_SIP)
238*4882a593Smuzhiyun struct arm_smccc_res sip_smc_get_atf_version(void);
239*4882a593Smuzhiyun struct arm_smccc_res sip_smc_get_sip_version(void);
240*4882a593Smuzhiyun struct arm_smccc_res sip_smc_dram(u32 arg0, u32 arg1, u32 arg2);
241*4882a593Smuzhiyun struct arm_smccc_res sip_smc_request_share_mem(u32 page_num,
242*4882a593Smuzhiyun share_page_type_t page_type);
243*4882a593Smuzhiyun struct arm_smccc_res sip_smc_mcu_el3fiq(u32 arg0, u32 arg1, u32 arg2);
244*4882a593Smuzhiyun struct arm_smccc_res sip_smc_vpu_reset(u32 arg0, u32 arg1, u32 arg2);
245*4882a593Smuzhiyun struct arm_smccc_res sip_smc_get_suspend_info(u32 info);
246*4882a593Smuzhiyun struct arm_smccc_res sip_smc_lastlog_request(void);
247*4882a593Smuzhiyun
248*4882a593Smuzhiyun int sip_smc_set_suspend_mode(u32 ctrl, u32 config1, u32 config2);
249*4882a593Smuzhiyun int sip_smc_virtual_poweroff(void);
250*4882a593Smuzhiyun int sip_smc_remotectl_config(u32 func, u32 data);
251*4882a593Smuzhiyun
252*4882a593Smuzhiyun int sip_smc_secure_reg_write(u32 addr_phy, u32 val);
253*4882a593Smuzhiyun u32 sip_smc_secure_reg_read(u32 addr_phy);
254*4882a593Smuzhiyun struct arm_smccc_res sip_smc_bus_config(u32 arg0, u32 arg1, u32 arg2);
255*4882a593Smuzhiyun struct dram_addrmap_info *sip_smc_get_dram_map(void);
256*4882a593Smuzhiyun int sip_smc_amp_config(u32 sub_func_id, u32 arg1, u32 arg2, u32 arg3);
257*4882a593Smuzhiyun struct arm_smccc_res sip_smc_get_amp_info(u32 sub_func_id, u32 arg1);
258*4882a593Smuzhiyun
259*4882a593Smuzhiyun void __iomem *sip_hdcp_request_share_memory(int id);
260*4882a593Smuzhiyun struct arm_smccc_res sip_hdcp_config(u32 arg0, u32 arg1, u32 arg2);
261*4882a593Smuzhiyun ulong sip_cpu_logical_map_mpidr(u32 cpu);
262*4882a593Smuzhiyun /***************************fiq debugger **************************************/
263*4882a593Smuzhiyun void sip_fiq_debugger_enable_fiq(bool enable, uint32_t tgt_cpu);
264*4882a593Smuzhiyun void sip_fiq_debugger_enable_debug(bool enable);
265*4882a593Smuzhiyun int sip_fiq_debugger_uart_irq_tf_init(u32 irq_id, sip_fiq_debugger_uart_irq_tf_cb_t callback_fn);
266*4882a593Smuzhiyun int sip_fiq_debugger_set_print_port(u32 port_phyaddr, u32 baudrate);
267*4882a593Smuzhiyun int sip_fiq_debugger_request_share_memory(void);
268*4882a593Smuzhiyun int sip_fiq_debugger_get_target_cpu(void);
269*4882a593Smuzhiyun int sip_fiq_debugger_switch_cpu(u32 cpu);
270*4882a593Smuzhiyun int sip_fiq_debugger_sdei_switch_cpu(u32 cur_cpu, u32 target_cpu, u32 flag);
271*4882a593Smuzhiyun int sip_fiq_debugger_is_enabled(void);
272*4882a593Smuzhiyun int sip_fiq_debugger_sdei_get_event_id(u32 *fiq, u32 *sw_cpu, u32 *flag);
273*4882a593Smuzhiyun int sip_fiq_control(u32 sub_func, u32 irq, unsigned long data);
274*4882a593Smuzhiyun int sip_wdt_config(u32 sub_func, u32 arg1, u32 arg2, u32 arg3);
275*4882a593Smuzhiyun int sip_hdmirx_config(u32 sub_func, u32 arg1, u32 arg2, u32 arg3);
276*4882a593Smuzhiyun int sip_hdcpkey_init(u32 hdcp_id);
277*4882a593Smuzhiyun int sip_smc_mcu_config(unsigned long mcu_id, unsigned long func, unsigned long arg2);
278*4882a593Smuzhiyun #else
sip_smc_get_atf_version(void)279*4882a593Smuzhiyun static inline struct arm_smccc_res sip_smc_get_atf_version(void)
280*4882a593Smuzhiyun {
281*4882a593Smuzhiyun struct arm_smccc_res tmp = { .a0 = SIP_RET_NOT_SUPPORTED };
282*4882a593Smuzhiyun return tmp;
283*4882a593Smuzhiyun }
284*4882a593Smuzhiyun
sip_smc_get_sip_version(void)285*4882a593Smuzhiyun static inline struct arm_smccc_res sip_smc_get_sip_version(void)
286*4882a593Smuzhiyun {
287*4882a593Smuzhiyun struct arm_smccc_res tmp = { .a0 = SIP_RET_NOT_SUPPORTED };
288*4882a593Smuzhiyun return tmp;
289*4882a593Smuzhiyun }
290*4882a593Smuzhiyun
sip_smc_dram(u32 arg0,u32 arg1,u32 arg2)291*4882a593Smuzhiyun static inline struct arm_smccc_res sip_smc_dram(u32 arg0, u32 arg1, u32 arg2)
292*4882a593Smuzhiyun {
293*4882a593Smuzhiyun struct arm_smccc_res tmp = { .a0 = SIP_RET_NOT_SUPPORTED };
294*4882a593Smuzhiyun return tmp;
295*4882a593Smuzhiyun }
296*4882a593Smuzhiyun
sip_smc_request_share_mem(u32 page_num,share_page_type_t page_type)297*4882a593Smuzhiyun static inline struct arm_smccc_res sip_smc_request_share_mem
298*4882a593Smuzhiyun (u32 page_num, share_page_type_t page_type)
299*4882a593Smuzhiyun {
300*4882a593Smuzhiyun struct arm_smccc_res tmp = { .a0 = SIP_RET_NOT_SUPPORTED };
301*4882a593Smuzhiyun return tmp;
302*4882a593Smuzhiyun }
303*4882a593Smuzhiyun
sip_smc_mcu_el3fiq(u32 arg0,u32 arg1,u32 arg2)304*4882a593Smuzhiyun static inline struct arm_smccc_res sip_smc_mcu_el3fiq
305*4882a593Smuzhiyun (u32 arg0, u32 arg1, u32 arg2)
306*4882a593Smuzhiyun {
307*4882a593Smuzhiyun struct arm_smccc_res tmp = { .a0 = SIP_RET_NOT_SUPPORTED };
308*4882a593Smuzhiyun return tmp;
309*4882a593Smuzhiyun }
310*4882a593Smuzhiyun
311*4882a593Smuzhiyun static inline struct arm_smccc_res
sip_smc_vpu_reset(u32 arg0,u32 arg1,u32 arg2)312*4882a593Smuzhiyun sip_smc_vpu_reset(u32 arg0, u32 arg1, u32 arg2)
313*4882a593Smuzhiyun {
314*4882a593Smuzhiyun struct arm_smccc_res tmp = { .a0 = SIP_RET_NOT_SUPPORTED };
315*4882a593Smuzhiyun return tmp;
316*4882a593Smuzhiyun }
317*4882a593Smuzhiyun
sip_smc_get_suspend_info(u32 info)318*4882a593Smuzhiyun static inline struct arm_smccc_res sip_smc_get_suspend_info(u32 info)
319*4882a593Smuzhiyun {
320*4882a593Smuzhiyun struct arm_smccc_res tmp = { .a0 = SIP_RET_NOT_SUPPORTED };
321*4882a593Smuzhiyun return tmp;
322*4882a593Smuzhiyun }
323*4882a593Smuzhiyun
sip_smc_lastlog_request(void)324*4882a593Smuzhiyun static inline struct arm_smccc_res sip_smc_lastlog_request(void)
325*4882a593Smuzhiyun {
326*4882a593Smuzhiyun struct arm_smccc_res tmp = { .a0 = SIP_RET_NOT_SUPPORTED };
327*4882a593Smuzhiyun return tmp;
328*4882a593Smuzhiyun }
329*4882a593Smuzhiyun
sip_smc_set_suspend_mode(u32 ctrl,u32 config1,u32 config2)330*4882a593Smuzhiyun static inline int sip_smc_set_suspend_mode(u32 ctrl, u32 config1, u32 config2)
331*4882a593Smuzhiyun {
332*4882a593Smuzhiyun return 0;
333*4882a593Smuzhiyun }
334*4882a593Smuzhiyun
sip_smc_virtual_poweroff(void)335*4882a593Smuzhiyun static inline int sip_smc_virtual_poweroff(void) { return 0; }
sip_smc_remotectl_config(u32 func,u32 data)336*4882a593Smuzhiyun static inline int sip_smc_remotectl_config(u32 func, u32 data) { return 0; }
sip_smc_secure_reg_write(u32 addr_phy,u32 val)337*4882a593Smuzhiyun static inline int sip_smc_secure_reg_write(u32 addr_phy, u32 val) { return 0; }
sip_smc_secure_reg_read(u32 addr_phy)338*4882a593Smuzhiyun static inline u32 sip_smc_secure_reg_read(u32 addr_phy) { return 0; }
339*4882a593Smuzhiyun
sip_smc_bus_config(u32 arg0,u32 arg1,u32 arg2)340*4882a593Smuzhiyun static inline struct arm_smccc_res sip_smc_bus_config(u32 arg0, u32 arg1, u32 arg2)
341*4882a593Smuzhiyun {
342*4882a593Smuzhiyun struct arm_smccc_res tmp = { .a0 = SIP_RET_NOT_SUPPORTED };
343*4882a593Smuzhiyun return tmp;
344*4882a593Smuzhiyun }
345*4882a593Smuzhiyun
sip_smc_get_dram_map(void)346*4882a593Smuzhiyun static inline struct dram_addrmap_info *sip_smc_get_dram_map(void)
347*4882a593Smuzhiyun {
348*4882a593Smuzhiyun return NULL;
349*4882a593Smuzhiyun }
350*4882a593Smuzhiyun
sip_smc_amp_config(u32 sub_func_id,u32 arg1,u32 arg2,u32 arg3)351*4882a593Smuzhiyun static inline int sip_smc_amp_config(u32 sub_func_id,
352*4882a593Smuzhiyun u32 arg1,
353*4882a593Smuzhiyun u32 arg2,
354*4882a593Smuzhiyun u32 arg3)
355*4882a593Smuzhiyun {
356*4882a593Smuzhiyun return 0;
357*4882a593Smuzhiyun }
358*4882a593Smuzhiyun
sip_smc_get_amp_info(u32 sub_func_id,u32 arg1)359*4882a593Smuzhiyun static inline struct arm_smccc_res sip_smc_get_amp_info(u32 sub_func_id,
360*4882a593Smuzhiyun u32 arg1)
361*4882a593Smuzhiyun {
362*4882a593Smuzhiyun struct arm_smccc_res tmp = { .a0 = SIP_RET_NOT_SUPPORTED, };
363*4882a593Smuzhiyun
364*4882a593Smuzhiyun return tmp;
365*4882a593Smuzhiyun }
366*4882a593Smuzhiyun
sip_hdcp_request_share_memory(int id)367*4882a593Smuzhiyun static inline void __iomem *sip_hdcp_request_share_memory(int id)
368*4882a593Smuzhiyun {
369*4882a593Smuzhiyun return NULL;
370*4882a593Smuzhiyun }
371*4882a593Smuzhiyun
sip_hdcp_config(u32 arg0,u32 arg1,u32 arg2)372*4882a593Smuzhiyun static inline struct arm_smccc_res sip_hdcp_config(u32 arg0, u32 arg1, u32 arg2)
373*4882a593Smuzhiyun {
374*4882a593Smuzhiyun struct arm_smccc_res tmp = { .a0 = SIP_RET_NOT_SUPPORTED };
375*4882a593Smuzhiyun
376*4882a593Smuzhiyun return tmp;
377*4882a593Smuzhiyun }
378*4882a593Smuzhiyun
sip_cpu_logical_map_mpidr(u32 cpu)379*4882a593Smuzhiyun static inline ulong sip_cpu_logical_map_mpidr(u32 cpu) { return 0; }
380*4882a593Smuzhiyun
381*4882a593Smuzhiyun /***************************fiq debugger **************************************/
sip_fiq_debugger_enable_fiq(bool enable,uint32_t tgt_cpu)382*4882a593Smuzhiyun static inline void sip_fiq_debugger_enable_fiq
383*4882a593Smuzhiyun (bool enable, uint32_t tgt_cpu) { return; }
384*4882a593Smuzhiyun
sip_fiq_debugger_enable_debug(bool enable)385*4882a593Smuzhiyun static inline void sip_fiq_debugger_enable_debug(bool enable) { return; }
sip_fiq_debugger_uart_irq_tf_init(u32 irq_id,sip_fiq_debugger_uart_irq_tf_cb_t callback_fn)386*4882a593Smuzhiyun static inline int sip_fiq_debugger_uart_irq_tf_init(u32 irq_id,
387*4882a593Smuzhiyun sip_fiq_debugger_uart_irq_tf_cb_t callback_fn)
388*4882a593Smuzhiyun {
389*4882a593Smuzhiyun return 0;
390*4882a593Smuzhiyun }
391*4882a593Smuzhiyun
sip_fiq_debugger_set_print_port(u32 port_phyaddr,u32 baudrate)392*4882a593Smuzhiyun static inline int sip_fiq_debugger_set_print_port(u32 port_phyaddr,
393*4882a593Smuzhiyun u32 baudrate)
394*4882a593Smuzhiyun {
395*4882a593Smuzhiyun return 0;
396*4882a593Smuzhiyun }
397*4882a593Smuzhiyun
sip_fiq_debugger_request_share_memory(void)398*4882a593Smuzhiyun static inline int sip_fiq_debugger_request_share_memory(void) { return 0; }
sip_fiq_debugger_get_target_cpu(void)399*4882a593Smuzhiyun static inline int sip_fiq_debugger_get_target_cpu(void) { return 0; }
sip_fiq_debugger_switch_cpu(u32 cpu)400*4882a593Smuzhiyun static inline int sip_fiq_debugger_switch_cpu(u32 cpu) { return 0; }
sip_fiq_debugger_sdei_switch_cpu(u32 cur_cpu,u32 target_cpu,u32 flag)401*4882a593Smuzhiyun static inline int sip_fiq_debugger_sdei_switch_cpu(u32 cur_cpu, u32 target_cpu,
402*4882a593Smuzhiyun u32 flag) { return 0; }
sip_fiq_debugger_is_enabled(void)403*4882a593Smuzhiyun static inline int sip_fiq_debugger_is_enabled(void) { return 0; }
sip_fiq_debugger_sdei_get_event_id(u32 * fiq,u32 * sw_cpu,u32 * flag)404*4882a593Smuzhiyun static inline int sip_fiq_debugger_sdei_get_event_id(u32 *fiq, u32 *sw_cpu, u32 *flag)
405*4882a593Smuzhiyun {
406*4882a593Smuzhiyun return SIP_RET_NOT_SUPPORTED;
407*4882a593Smuzhiyun }
408*4882a593Smuzhiyun
sip_fiq_control(u32 sub_func,u32 irq,unsigned long data)409*4882a593Smuzhiyun static inline int sip_fiq_control(u32 sub_func, u32 irq, unsigned long data)
410*4882a593Smuzhiyun {
411*4882a593Smuzhiyun return 0;
412*4882a593Smuzhiyun }
413*4882a593Smuzhiyun
sip_wdt_config(u32 sub_func,u32 arg1,u32 arg2,u32 arg3)414*4882a593Smuzhiyun static inline int sip_wdt_config(u32 sub_func,
415*4882a593Smuzhiyun u32 arg1,
416*4882a593Smuzhiyun u32 arg2,
417*4882a593Smuzhiyun u32 arg3)
418*4882a593Smuzhiyun {
419*4882a593Smuzhiyun return 0;
420*4882a593Smuzhiyun }
421*4882a593Smuzhiyun
sip_hdmirx_config(u32 sub_func,u32 arg1,u32 arg2,u32 arg3)422*4882a593Smuzhiyun static inline int sip_hdmirx_config(u32 sub_func,
423*4882a593Smuzhiyun u32 arg1,
424*4882a593Smuzhiyun u32 arg2,
425*4882a593Smuzhiyun u32 arg3)
426*4882a593Smuzhiyun {
427*4882a593Smuzhiyun return SIP_RET_NOT_SUPPORTED;
428*4882a593Smuzhiyun }
429*4882a593Smuzhiyun
sip_hdcpkey_init(u32 hdcp_id)430*4882a593Smuzhiyun static inline int sip_hdcpkey_init(u32 hdcp_id)
431*4882a593Smuzhiyun {
432*4882a593Smuzhiyun return 0;
433*4882a593Smuzhiyun }
434*4882a593Smuzhiyun
sip_smc_mcu_config(unsigned long mcu_id,unsigned long func,unsigned long arg2)435*4882a593Smuzhiyun static inline int sip_smc_mcu_config(unsigned long mcu_id,
436*4882a593Smuzhiyun unsigned long func,
437*4882a593Smuzhiyun unsigned long arg2)
438*4882a593Smuzhiyun {
439*4882a593Smuzhiyun return SIP_RET_NOT_SUPPORTED;
440*4882a593Smuzhiyun }
441*4882a593Smuzhiyun #endif
442*4882a593Smuzhiyun
443*4882a593Smuzhiyun /* 32-bit OP-TEE context, never change order of members! */
444*4882a593Smuzhiyun struct sm_nsec_ctx {
445*4882a593Smuzhiyun u32 usr_sp;
446*4882a593Smuzhiyun u32 usr_lr;
447*4882a593Smuzhiyun u32 irq_spsr;
448*4882a593Smuzhiyun u32 irq_sp;
449*4882a593Smuzhiyun u32 irq_lr;
450*4882a593Smuzhiyun u32 fiq_spsr;
451*4882a593Smuzhiyun u32 fiq_sp;
452*4882a593Smuzhiyun u32 fiq_lr;
453*4882a593Smuzhiyun u32 svc_spsr;
454*4882a593Smuzhiyun u32 svc_sp;
455*4882a593Smuzhiyun u32 svc_lr;
456*4882a593Smuzhiyun u32 abt_spsr;
457*4882a593Smuzhiyun u32 abt_sp;
458*4882a593Smuzhiyun u32 abt_lr;
459*4882a593Smuzhiyun u32 und_spsr;
460*4882a593Smuzhiyun u32 und_sp;
461*4882a593Smuzhiyun u32 und_lr;
462*4882a593Smuzhiyun u32 mon_lr;
463*4882a593Smuzhiyun u32 mon_spsr;
464*4882a593Smuzhiyun u32 r4;
465*4882a593Smuzhiyun u32 r5;
466*4882a593Smuzhiyun u32 r6;
467*4882a593Smuzhiyun u32 r7;
468*4882a593Smuzhiyun u32 r8;
469*4882a593Smuzhiyun u32 r9;
470*4882a593Smuzhiyun u32 r10;
471*4882a593Smuzhiyun u32 r11;
472*4882a593Smuzhiyun u32 r12;
473*4882a593Smuzhiyun u32 r0;
474*4882a593Smuzhiyun u32 r1;
475*4882a593Smuzhiyun u32 r2;
476*4882a593Smuzhiyun u32 r3;
477*4882a593Smuzhiyun };
478*4882a593Smuzhiyun
479*4882a593Smuzhiyun /* 64-bit ATF context, never change order of members! */
480*4882a593Smuzhiyun struct gp_regs_ctx {
481*4882a593Smuzhiyun u64 x0;
482*4882a593Smuzhiyun u64 x1;
483*4882a593Smuzhiyun u64 x2;
484*4882a593Smuzhiyun u64 x3;
485*4882a593Smuzhiyun u64 x4;
486*4882a593Smuzhiyun u64 x5;
487*4882a593Smuzhiyun u64 x6;
488*4882a593Smuzhiyun u64 x7;
489*4882a593Smuzhiyun u64 x8;
490*4882a593Smuzhiyun u64 x9;
491*4882a593Smuzhiyun u64 x10;
492*4882a593Smuzhiyun u64 x11;
493*4882a593Smuzhiyun u64 x12;
494*4882a593Smuzhiyun u64 x13;
495*4882a593Smuzhiyun u64 x14;
496*4882a593Smuzhiyun u64 x15;
497*4882a593Smuzhiyun u64 x16;
498*4882a593Smuzhiyun u64 x17;
499*4882a593Smuzhiyun u64 x18;
500*4882a593Smuzhiyun u64 x19;
501*4882a593Smuzhiyun u64 x20;
502*4882a593Smuzhiyun u64 x21;
503*4882a593Smuzhiyun u64 x22;
504*4882a593Smuzhiyun u64 x23;
505*4882a593Smuzhiyun u64 x24;
506*4882a593Smuzhiyun u64 x25;
507*4882a593Smuzhiyun u64 x26;
508*4882a593Smuzhiyun u64 x27;
509*4882a593Smuzhiyun u64 x28;
510*4882a593Smuzhiyun u64 x29;
511*4882a593Smuzhiyun u64 lr;
512*4882a593Smuzhiyun u64 sp_el0;
513*4882a593Smuzhiyun u64 scr_el3;
514*4882a593Smuzhiyun u64 runtime_sp;
515*4882a593Smuzhiyun u64 spsr_el3;
516*4882a593Smuzhiyun u64 elr_el3;
517*4882a593Smuzhiyun };
518*4882a593Smuzhiyun
519*4882a593Smuzhiyun #endif
520