xref: /OK3568_Linux_fs/kernel/include/linux/firmware/intel/stratix10-smc.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (C) 2017-2018, Intel Corporation
4*4882a593Smuzhiyun  */
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun #ifndef __STRATIX10_SMC_H
7*4882a593Smuzhiyun #define __STRATIX10_SMC_H
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun #include <linux/arm-smccc.h>
10*4882a593Smuzhiyun #include <linux/bitops.h>
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun /**
13*4882a593Smuzhiyun  * This file defines the Secure Monitor Call (SMC) message protocol used for
14*4882a593Smuzhiyun  * service layer driver in normal world (EL1) to communicate with secure
15*4882a593Smuzhiyun  * monitor software in Secure Monitor Exception Level 3 (EL3).
16*4882a593Smuzhiyun  *
17*4882a593Smuzhiyun  * This file is shared with secure firmware (FW) which is out of kernel tree.
18*4882a593Smuzhiyun  *
19*4882a593Smuzhiyun  * An ARM SMC instruction takes a function identifier and up to 6 64-bit
20*4882a593Smuzhiyun  * register values as arguments, and can return up to 4 64-bit register
21*4882a593Smuzhiyun  * value. The operation of the secure monitor is determined by the parameter
22*4882a593Smuzhiyun  * values passed in through registers.
23*4882a593Smuzhiyun  *
24*4882a593Smuzhiyun  * EL1 and EL3 communicates pointer as physical address rather than the
25*4882a593Smuzhiyun  * virtual address.
26*4882a593Smuzhiyun  *
27*4882a593Smuzhiyun  * Functions specified by ARM SMC Calling convention:
28*4882a593Smuzhiyun  *
29*4882a593Smuzhiyun  * FAST call executes atomic operations, returns when the requested operation
30*4882a593Smuzhiyun  * has completed.
31*4882a593Smuzhiyun  * STD call starts a operation which can be preempted by a non-secure
32*4882a593Smuzhiyun  * interrupt. The call can return before the requested operation has
33*4882a593Smuzhiyun  * completed.
34*4882a593Smuzhiyun  *
35*4882a593Smuzhiyun  * a0..a7 is used as register names in the descriptions below, on arm32
36*4882a593Smuzhiyun  * that translates to r0..r7 and on arm64 to w0..w7.
37*4882a593Smuzhiyun  */
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun /**
40*4882a593Smuzhiyun  * @func_num: function ID
41*4882a593Smuzhiyun  */
42*4882a593Smuzhiyun #define INTEL_SIP_SMC_STD_CALL_VAL(func_num) \
43*4882a593Smuzhiyun 	ARM_SMCCC_CALL_VAL(ARM_SMCCC_STD_CALL, ARM_SMCCC_SMC_64, \
44*4882a593Smuzhiyun 	ARM_SMCCC_OWNER_SIP, (func_num))
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun #define INTEL_SIP_SMC_FAST_CALL_VAL(func_num) \
47*4882a593Smuzhiyun 	ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL, ARM_SMCCC_SMC_64, \
48*4882a593Smuzhiyun 	ARM_SMCCC_OWNER_SIP, (func_num))
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun /**
51*4882a593Smuzhiyun  * Return values in INTEL_SIP_SMC_* call
52*4882a593Smuzhiyun  *
53*4882a593Smuzhiyun  * INTEL_SIP_SMC_RETURN_UNKNOWN_FUNCTION:
54*4882a593Smuzhiyun  * Secure monitor software doesn't recognize the request.
55*4882a593Smuzhiyun  *
56*4882a593Smuzhiyun  * INTEL_SIP_SMC_STATUS_OK:
57*4882a593Smuzhiyun  * Secure monitor software accepts the service client's request.
58*4882a593Smuzhiyun  *
59*4882a593Smuzhiyun  * INTEL_SIP_SMC_STATUS_BUSY:
60*4882a593Smuzhiyun  * Secure monitor software is still processing service client's request.
61*4882a593Smuzhiyun  *
62*4882a593Smuzhiyun  * INTEL_SIP_SMC_STATUS_REJECTED:
63*4882a593Smuzhiyun  * Secure monitor software reject the service client's request.
64*4882a593Smuzhiyun  *
65*4882a593Smuzhiyun  * INTEL_SIP_SMC_STATUS_ERROR:
66*4882a593Smuzhiyun  * There is error during the process of service request.
67*4882a593Smuzhiyun  *
68*4882a593Smuzhiyun  * INTEL_SIP_SMC_RSU_ERROR:
69*4882a593Smuzhiyun  * There is error during the process of remote status update request.
70*4882a593Smuzhiyun  */
71*4882a593Smuzhiyun #define INTEL_SIP_SMC_RETURN_UNKNOWN_FUNCTION		0xFFFFFFFF
72*4882a593Smuzhiyun #define INTEL_SIP_SMC_STATUS_OK				0x0
73*4882a593Smuzhiyun #define INTEL_SIP_SMC_STATUS_BUSY			0x1
74*4882a593Smuzhiyun #define INTEL_SIP_SMC_STATUS_REJECTED			0x2
75*4882a593Smuzhiyun #define INTEL_SIP_SMC_STATUS_ERROR			0x4
76*4882a593Smuzhiyun #define INTEL_SIP_SMC_RSU_ERROR				0x7
77*4882a593Smuzhiyun 
78*4882a593Smuzhiyun /**
79*4882a593Smuzhiyun  * Request INTEL_SIP_SMC_FPGA_CONFIG_START
80*4882a593Smuzhiyun  *
81*4882a593Smuzhiyun  * Sync call used by service driver at EL1 to request the FPGA in EL3 to
82*4882a593Smuzhiyun  * be prepare to receive a new configuration.
83*4882a593Smuzhiyun  *
84*4882a593Smuzhiyun  * Call register usage:
85*4882a593Smuzhiyun  * a0: INTEL_SIP_SMC_FPGA_CONFIG_START.
86*4882a593Smuzhiyun  * a1: flag for full or partial configuration. 0 for full and 1 for partial
87*4882a593Smuzhiyun  * configuration.
88*4882a593Smuzhiyun  * a2-7: not used.
89*4882a593Smuzhiyun  *
90*4882a593Smuzhiyun  * Return status:
91*4882a593Smuzhiyun  * a0: INTEL_SIP_SMC_STATUS_OK, or INTEL_SIP_SMC_STATUS_ERROR.
92*4882a593Smuzhiyun  * a1-3: not used.
93*4882a593Smuzhiyun  */
94*4882a593Smuzhiyun #define INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_START 1
95*4882a593Smuzhiyun #define INTEL_SIP_SMC_FPGA_CONFIG_START \
96*4882a593Smuzhiyun 	INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_START)
97*4882a593Smuzhiyun 
98*4882a593Smuzhiyun /**
99*4882a593Smuzhiyun  * Request INTEL_SIP_SMC_FPGA_CONFIG_WRITE
100*4882a593Smuzhiyun  *
101*4882a593Smuzhiyun  * Async call used by service driver at EL1 to provide FPGA configuration data
102*4882a593Smuzhiyun  * to secure world.
103*4882a593Smuzhiyun  *
104*4882a593Smuzhiyun  * Call register usage:
105*4882a593Smuzhiyun  * a0: INTEL_SIP_SMC_FPGA_CONFIG_WRITE.
106*4882a593Smuzhiyun  * a1: 64bit physical address of the configuration data memory block
107*4882a593Smuzhiyun  * a2: Size of configuration data block.
108*4882a593Smuzhiyun  * a3-7: not used.
109*4882a593Smuzhiyun  *
110*4882a593Smuzhiyun  * Return status:
111*4882a593Smuzhiyun  * a0: INTEL_SIP_SMC_STATUS_OK, INTEL_SIP_SMC_STATUS_BUSY or
112*4882a593Smuzhiyun  * INTEL_SIP_SMC_STATUS_ERROR.
113*4882a593Smuzhiyun  * a1: 64bit physical address of 1st completed memory block if any completed
114*4882a593Smuzhiyun  * block, otherwise zero value.
115*4882a593Smuzhiyun  * a2: 64bit physical address of 2nd completed memory block if any completed
116*4882a593Smuzhiyun  * block, otherwise zero value.
117*4882a593Smuzhiyun  * a3: 64bit physical address of 3rd completed memory block if any completed
118*4882a593Smuzhiyun  * block, otherwise zero value.
119*4882a593Smuzhiyun  */
120*4882a593Smuzhiyun #define INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_WRITE 2
121*4882a593Smuzhiyun #define INTEL_SIP_SMC_FPGA_CONFIG_WRITE \
122*4882a593Smuzhiyun 	INTEL_SIP_SMC_STD_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_WRITE)
123*4882a593Smuzhiyun 
124*4882a593Smuzhiyun /**
125*4882a593Smuzhiyun  * Request INTEL_SIP_SMC_FPGA_CONFIG_COMPLETED_WRITE
126*4882a593Smuzhiyun  *
127*4882a593Smuzhiyun  * Sync call used by service driver at EL1 to track the completed write
128*4882a593Smuzhiyun  * transactions. This request is called after INTEL_SIP_SMC_FPGA_CONFIG_WRITE
129*4882a593Smuzhiyun  * call returns INTEL_SIP_SMC_STATUS_BUSY.
130*4882a593Smuzhiyun  *
131*4882a593Smuzhiyun  * Call register usage:
132*4882a593Smuzhiyun  * a0: INTEL_SIP_SMC_FPGA_CONFIG_COMPLETED_WRITE.
133*4882a593Smuzhiyun  * a1-7: not used.
134*4882a593Smuzhiyun  *
135*4882a593Smuzhiyun  * Return status:
136*4882a593Smuzhiyun  * a0: INTEL_SIP_SMC_STATUS_OK, INTEL_SIP_SMC_FPGA_BUSY or
137*4882a593Smuzhiyun  * INTEL_SIP_SMC_STATUS_ERROR.
138*4882a593Smuzhiyun  * a1: 64bit physical address of 1st completed memory block.
139*4882a593Smuzhiyun  * a2: 64bit physical address of 2nd completed memory block if
140*4882a593Smuzhiyun  * any completed block, otherwise zero value.
141*4882a593Smuzhiyun  * a3: 64bit physical address of 3rd completed memory block if
142*4882a593Smuzhiyun  * any completed block, otherwise zero value.
143*4882a593Smuzhiyun  */
144*4882a593Smuzhiyun #define INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_COMPLETED_WRITE 3
145*4882a593Smuzhiyun #define INTEL_SIP_SMC_FPGA_CONFIG_COMPLETED_WRITE \
146*4882a593Smuzhiyun INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_COMPLETED_WRITE)
147*4882a593Smuzhiyun 
148*4882a593Smuzhiyun /**
149*4882a593Smuzhiyun  * Request INTEL_SIP_SMC_FPGA_CONFIG_ISDONE
150*4882a593Smuzhiyun  *
151*4882a593Smuzhiyun  * Sync call used by service driver at EL1 to inform secure world that all
152*4882a593Smuzhiyun  * data are sent, to check whether or not the secure world had completed
153*4882a593Smuzhiyun  * the FPGA configuration process.
154*4882a593Smuzhiyun  *
155*4882a593Smuzhiyun  * Call register usage:
156*4882a593Smuzhiyun  * a0: INTEL_SIP_SMC_FPGA_CONFIG_ISDONE.
157*4882a593Smuzhiyun  * a1-7: not used.
158*4882a593Smuzhiyun  *
159*4882a593Smuzhiyun  * Return status:
160*4882a593Smuzhiyun  * a0: INTEL_SIP_SMC_STATUS_OK, INTEL_SIP_SMC_STATUS_BUSY or
161*4882a593Smuzhiyun  * INTEL_SIP_SMC_STATUS_ERROR.
162*4882a593Smuzhiyun  * a1-3: not used.
163*4882a593Smuzhiyun  */
164*4882a593Smuzhiyun #define INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_ISDONE 4
165*4882a593Smuzhiyun #define INTEL_SIP_SMC_FPGA_CONFIG_ISDONE \
166*4882a593Smuzhiyun 	INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_ISDONE)
167*4882a593Smuzhiyun 
168*4882a593Smuzhiyun /**
169*4882a593Smuzhiyun  * Request INTEL_SIP_SMC_FPGA_CONFIG_GET_MEM
170*4882a593Smuzhiyun  *
171*4882a593Smuzhiyun  * Sync call used by service driver at EL1 to query the physical address of
172*4882a593Smuzhiyun  * memory block reserved by secure monitor software.
173*4882a593Smuzhiyun  *
174*4882a593Smuzhiyun  * Call register usage:
175*4882a593Smuzhiyun  * a0:INTEL_SIP_SMC_FPGA_CONFIG_GET_MEM.
176*4882a593Smuzhiyun  * a1-7: not used.
177*4882a593Smuzhiyun  *
178*4882a593Smuzhiyun  * Return status:
179*4882a593Smuzhiyun  * a0: INTEL_SIP_SMC_STATUS_OK or INTEL_SIP_SMC_STATUS_ERROR.
180*4882a593Smuzhiyun  * a1: start of physical address of reserved memory block.
181*4882a593Smuzhiyun  * a2: size of reserved memory block.
182*4882a593Smuzhiyun  * a3: not used.
183*4882a593Smuzhiyun  */
184*4882a593Smuzhiyun #define INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_GET_MEM 5
185*4882a593Smuzhiyun #define INTEL_SIP_SMC_FPGA_CONFIG_GET_MEM \
186*4882a593Smuzhiyun 	INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_GET_MEM)
187*4882a593Smuzhiyun 
188*4882a593Smuzhiyun /**
189*4882a593Smuzhiyun  * Request INTEL_SIP_SMC_FPGA_CONFIG_LOOPBACK
190*4882a593Smuzhiyun  *
191*4882a593Smuzhiyun  * For SMC loop-back mode only, used for internal integration, debugging
192*4882a593Smuzhiyun  * or troubleshooting.
193*4882a593Smuzhiyun  *
194*4882a593Smuzhiyun  * Call register usage:
195*4882a593Smuzhiyun  * a0: INTEL_SIP_SMC_FPGA_CONFIG_LOOPBACK.
196*4882a593Smuzhiyun  * a1-7: not used.
197*4882a593Smuzhiyun  *
198*4882a593Smuzhiyun  * Return status:
199*4882a593Smuzhiyun  * a0: INTEL_SIP_SMC_STATUS_OK or INTEL_SIP_SMC_STATUS_ERROR.
200*4882a593Smuzhiyun  * a1-3: not used.
201*4882a593Smuzhiyun  */
202*4882a593Smuzhiyun #define INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_LOOPBACK 6
203*4882a593Smuzhiyun #define INTEL_SIP_SMC_FPGA_CONFIG_LOOPBACK \
204*4882a593Smuzhiyun 	INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_LOOPBACK)
205*4882a593Smuzhiyun 
206*4882a593Smuzhiyun /**
207*4882a593Smuzhiyun  * Request INTEL_SIP_SMC_REG_READ
208*4882a593Smuzhiyun  *
209*4882a593Smuzhiyun  * Read a protected register at EL3
210*4882a593Smuzhiyun  *
211*4882a593Smuzhiyun  * Call register usage:
212*4882a593Smuzhiyun  * a0: INTEL_SIP_SMC_REG_READ.
213*4882a593Smuzhiyun  * a1: register address.
214*4882a593Smuzhiyun  * a2-7: not used.
215*4882a593Smuzhiyun  *
216*4882a593Smuzhiyun  * Return status:
217*4882a593Smuzhiyun  * a0: INTEL_SIP_SMC_STATUS_OK or INTEL_SIP_SMC_REG_ERROR.
218*4882a593Smuzhiyun  * a1: value in the register
219*4882a593Smuzhiyun  * a2-3: not used.
220*4882a593Smuzhiyun  */
221*4882a593Smuzhiyun #define INTEL_SIP_SMC_FUNCID_REG_READ 7
222*4882a593Smuzhiyun #define INTEL_SIP_SMC_REG_READ \
223*4882a593Smuzhiyun 	INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_REG_READ)
224*4882a593Smuzhiyun 
225*4882a593Smuzhiyun /**
226*4882a593Smuzhiyun  * Request INTEL_SIP_SMC_REG_WRITE
227*4882a593Smuzhiyun  *
228*4882a593Smuzhiyun  * Write a protected register at EL3
229*4882a593Smuzhiyun  *
230*4882a593Smuzhiyun  * Call register usage:
231*4882a593Smuzhiyun  * a0: INTEL_SIP_SMC_REG_WRITE.
232*4882a593Smuzhiyun  * a1: register address
233*4882a593Smuzhiyun  * a2: value to program into register.
234*4882a593Smuzhiyun  * a3-7: not used.
235*4882a593Smuzhiyun  *
236*4882a593Smuzhiyun  * Return status:
237*4882a593Smuzhiyun  * a0: INTEL_SIP_SMC_STATUS_OK or INTEL_SIP_SMC_REG_ERROR.
238*4882a593Smuzhiyun  * a1-3: not used.
239*4882a593Smuzhiyun  */
240*4882a593Smuzhiyun #define INTEL_SIP_SMC_FUNCID_REG_WRITE 8
241*4882a593Smuzhiyun #define INTEL_SIP_SMC_REG_WRITE \
242*4882a593Smuzhiyun 	INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_REG_WRITE)
243*4882a593Smuzhiyun 
244*4882a593Smuzhiyun /**
245*4882a593Smuzhiyun  * Request INTEL_SIP_SMC_FUNCID_REG_UPDATE
246*4882a593Smuzhiyun  *
247*4882a593Smuzhiyun  * Update one or more bits in a protected register at EL3 using a
248*4882a593Smuzhiyun  * read-modify-write operation.
249*4882a593Smuzhiyun  *
250*4882a593Smuzhiyun  * Call register usage:
251*4882a593Smuzhiyun  * a0: INTEL_SIP_SMC_REG_UPDATE.
252*4882a593Smuzhiyun  * a1: register address
253*4882a593Smuzhiyun  * a2: write Mask.
254*4882a593Smuzhiyun  * a3: value to write.
255*4882a593Smuzhiyun  * a4-7: not used.
256*4882a593Smuzhiyun  *
257*4882a593Smuzhiyun  * Return status:
258*4882a593Smuzhiyun  * a0: INTEL_SIP_SMC_STATUS_OK or INTEL_SIP_SMC_REG_ERROR.
259*4882a593Smuzhiyun  * a1-3: Not used.
260*4882a593Smuzhiyun  */
261*4882a593Smuzhiyun #define INTEL_SIP_SMC_FUNCID_REG_UPDATE 9
262*4882a593Smuzhiyun #define INTEL_SIP_SMC_REG_UPDATE \
263*4882a593Smuzhiyun 	INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_REG_UPDATE)
264*4882a593Smuzhiyun 
265*4882a593Smuzhiyun /**
266*4882a593Smuzhiyun  * Request INTEL_SIP_SMC_RSU_STATUS
267*4882a593Smuzhiyun  *
268*4882a593Smuzhiyun  * Request remote status update boot log, call is synchronous.
269*4882a593Smuzhiyun  *
270*4882a593Smuzhiyun  * Call register usage:
271*4882a593Smuzhiyun  * a0 INTEL_SIP_SMC_RSU_STATUS
272*4882a593Smuzhiyun  * a1-7 not used
273*4882a593Smuzhiyun  *
274*4882a593Smuzhiyun  * Return status
275*4882a593Smuzhiyun  * a0: Current Image
276*4882a593Smuzhiyun  * a1: Last Failing Image
277*4882a593Smuzhiyun  * a2: Version | State
278*4882a593Smuzhiyun  * a3: Error details | Error location
279*4882a593Smuzhiyun  *
280*4882a593Smuzhiyun  * Or
281*4882a593Smuzhiyun  *
282*4882a593Smuzhiyun  * a0: INTEL_SIP_SMC_RSU_ERROR
283*4882a593Smuzhiyun  */
284*4882a593Smuzhiyun #define INTEL_SIP_SMC_FUNCID_RSU_STATUS 11
285*4882a593Smuzhiyun #define INTEL_SIP_SMC_RSU_STATUS \
286*4882a593Smuzhiyun 	INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_RSU_STATUS)
287*4882a593Smuzhiyun 
288*4882a593Smuzhiyun /**
289*4882a593Smuzhiyun  * Request INTEL_SIP_SMC_RSU_UPDATE
290*4882a593Smuzhiyun  *
291*4882a593Smuzhiyun  * Request to set the offset of the bitstream to boot after reboot, call
292*4882a593Smuzhiyun  * is synchronous.
293*4882a593Smuzhiyun  *
294*4882a593Smuzhiyun  * Call register usage:
295*4882a593Smuzhiyun  * a0 INTEL_SIP_SMC_RSU_UPDATE
296*4882a593Smuzhiyun  * a1 64bit physical address of the configuration data memory in flash
297*4882a593Smuzhiyun  * a2-7 not used
298*4882a593Smuzhiyun  *
299*4882a593Smuzhiyun  * Return status
300*4882a593Smuzhiyun  * a0 INTEL_SIP_SMC_STATUS_OK
301*4882a593Smuzhiyun  */
302*4882a593Smuzhiyun #define INTEL_SIP_SMC_FUNCID_RSU_UPDATE 12
303*4882a593Smuzhiyun #define INTEL_SIP_SMC_RSU_UPDATE \
304*4882a593Smuzhiyun 	INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_RSU_UPDATE)
305*4882a593Smuzhiyun 
306*4882a593Smuzhiyun /**
307*4882a593Smuzhiyun  * Request INTEL_SIP_SMC_ECC_DBE
308*4882a593Smuzhiyun  *
309*4882a593Smuzhiyun  * Sync call used by service driver at EL1 to alert EL3 that a Double
310*4882a593Smuzhiyun  * Bit ECC error has occurred.
311*4882a593Smuzhiyun  *
312*4882a593Smuzhiyun  * Call register usage:
313*4882a593Smuzhiyun  * a0 INTEL_SIP_SMC_ECC_DBE
314*4882a593Smuzhiyun  * a1 SysManager Double Bit Error value
315*4882a593Smuzhiyun  * a2-7 not used
316*4882a593Smuzhiyun  *
317*4882a593Smuzhiyun  * Return status
318*4882a593Smuzhiyun  * a0 INTEL_SIP_SMC_STATUS_OK
319*4882a593Smuzhiyun  */
320*4882a593Smuzhiyun #define INTEL_SIP_SMC_FUNCID_ECC_DBE 13
321*4882a593Smuzhiyun #define INTEL_SIP_SMC_ECC_DBE \
322*4882a593Smuzhiyun 	INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_ECC_DBE)
323*4882a593Smuzhiyun 
324*4882a593Smuzhiyun #endif
325*4882a593Smuzhiyun 
326*4882a593Smuzhiyun /**
327*4882a593Smuzhiyun  * Request INTEL_SIP_SMC_RSU_NOTIFY
328*4882a593Smuzhiyun  *
329*4882a593Smuzhiyun  * Sync call used by service driver at EL1 to report hard processor
330*4882a593Smuzhiyun  * system execution stage to firmware
331*4882a593Smuzhiyun  *
332*4882a593Smuzhiyun  * Call register usage:
333*4882a593Smuzhiyun  * a0 INTEL_SIP_SMC_RSU_NOTIFY
334*4882a593Smuzhiyun  * a1 32bit value representing hard processor system execution stage
335*4882a593Smuzhiyun  * a2-7 not used
336*4882a593Smuzhiyun  *
337*4882a593Smuzhiyun  * Return status
338*4882a593Smuzhiyun  * a0 INTEL_SIP_SMC_STATUS_OK
339*4882a593Smuzhiyun  */
340*4882a593Smuzhiyun #define INTEL_SIP_SMC_FUNCID_RSU_NOTIFY 14
341*4882a593Smuzhiyun #define INTEL_SIP_SMC_RSU_NOTIFY \
342*4882a593Smuzhiyun 	INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_RSU_NOTIFY)
343*4882a593Smuzhiyun 
344*4882a593Smuzhiyun /**
345*4882a593Smuzhiyun  * Request INTEL_SIP_SMC_RSU_RETRY_COUNTER
346*4882a593Smuzhiyun  *
347*4882a593Smuzhiyun  * Sync call used by service driver at EL1 to query RSU retry counter
348*4882a593Smuzhiyun  *
349*4882a593Smuzhiyun  * Call register usage:
350*4882a593Smuzhiyun  * a0 INTEL_SIP_SMC_RSU_RETRY_COUNTER
351*4882a593Smuzhiyun  * a1-7 not used
352*4882a593Smuzhiyun  *
353*4882a593Smuzhiyun  * Return status
354*4882a593Smuzhiyun  * a0 INTEL_SIP_SMC_STATUS_OK
355*4882a593Smuzhiyun  * a1 the retry counter
356*4882a593Smuzhiyun  *
357*4882a593Smuzhiyun  * Or
358*4882a593Smuzhiyun  *
359*4882a593Smuzhiyun  * a0 INTEL_SIP_SMC_RSU_ERROR
360*4882a593Smuzhiyun  */
361*4882a593Smuzhiyun #define INTEL_SIP_SMC_FUNCID_RSU_RETRY_COUNTER 15
362*4882a593Smuzhiyun #define INTEL_SIP_SMC_RSU_RETRY_COUNTER \
363*4882a593Smuzhiyun 	INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_RSU_RETRY_COUNTER)
364*4882a593Smuzhiyun 
365*4882a593Smuzhiyun /**
366*4882a593Smuzhiyun  * Request INTEL_SIP_SMC_RSU_DCMF_VERSION
367*4882a593Smuzhiyun  *
368*4882a593Smuzhiyun  * Sync call used by service driver at EL1 to query DCMF (Decision
369*4882a593Smuzhiyun  * Configuration Management Firmware) version from FW
370*4882a593Smuzhiyun  *
371*4882a593Smuzhiyun  * Call register usage:
372*4882a593Smuzhiyun  * a0 INTEL_SIP_SMC_RSU_DCMF_VERSION
373*4882a593Smuzhiyun  * a1-7 not used
374*4882a593Smuzhiyun  *
375*4882a593Smuzhiyun  * Return status
376*4882a593Smuzhiyun  * a0 INTEL_SIP_SMC_STATUS_OK
377*4882a593Smuzhiyun  * a1 dcmf1 | dcmf0
378*4882a593Smuzhiyun  * a2 dcmf3 | dcmf2
379*4882a593Smuzhiyun  *
380*4882a593Smuzhiyun  * Or
381*4882a593Smuzhiyun  *
382*4882a593Smuzhiyun  * a0 INTEL_SIP_SMC_RSU_ERROR
383*4882a593Smuzhiyun  */
384*4882a593Smuzhiyun #define INTEL_SIP_SMC_FUNCID_RSU_DCMF_VERSION 16
385*4882a593Smuzhiyun #define INTEL_SIP_SMC_RSU_DCMF_VERSION \
386*4882a593Smuzhiyun 	INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_RSU_DCMF_VERSION)
387*4882a593Smuzhiyun 
388*4882a593Smuzhiyun /**
389*4882a593Smuzhiyun  * Request INTEL_SIP_SMC_RSU_MAX_RETRY
390*4882a593Smuzhiyun  *
391*4882a593Smuzhiyun  * Sync call used by service driver at EL1 to query max retry value from FW
392*4882a593Smuzhiyun  *
393*4882a593Smuzhiyun  * Call register usage:
394*4882a593Smuzhiyun  * a0 INTEL_SIP_SMC_RSU_MAX_RETRY
395*4882a593Smuzhiyun  * a1-7 not used
396*4882a593Smuzhiyun  *
397*4882a593Smuzhiyun  * Return status
398*4882a593Smuzhiyun  * a0 INTEL_SIP_SMC_STATUS_OK
399*4882a593Smuzhiyun  * a1 max retry value
400*4882a593Smuzhiyun  *
401*4882a593Smuzhiyun  * Or
402*4882a593Smuzhiyun  * a0 INTEL_SIP_SMC_RSU_ERROR
403*4882a593Smuzhiyun  */
404*4882a593Smuzhiyun #define INTEL_SIP_SMC_FUNCID_RSU_MAX_RETRY 18
405*4882a593Smuzhiyun #define INTEL_SIP_SMC_RSU_MAX_RETRY \
406*4882a593Smuzhiyun 	INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_RSU_MAX_RETRY)
407