xref: /arm-trusted-firmware/plat/st/stm32mp1/include/stm32mp1_smc.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2016-2021, STMicroelectronics - All Rights Reserved
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu  */
6*91f16700Schasinglulu 
7*91f16700Schasinglulu #ifndef STM32MP1_SMC_H
8*91f16700Schasinglulu #define STM32MP1_SMC_H
9*91f16700Schasinglulu 
10*91f16700Schasinglulu /*
11*91f16700Schasinglulu  * SMC function IDs for STM32 Service queries
12*91f16700Schasinglulu  * STM32 SMC services use the space between 0x82000000 and 0x8200FFFF
13*91f16700Schasinglulu  * like this is defined in SMC calling Convention by ARM
14*91f16700Schasinglulu  * for SiP (silicon Partner)
15*91f16700Schasinglulu  * https://developer.arm.com/docs/den0028/latest
16*91f16700Schasinglulu  */
17*91f16700Schasinglulu 
18*91f16700Schasinglulu /* Secure Service access from Non-secure */
19*91f16700Schasinglulu 
20*91f16700Schasinglulu /*
21*91f16700Schasinglulu  * STM32_SMC_BSEC call API
22*91f16700Schasinglulu  *
23*91f16700Schasinglulu  * Argument a0: (input) SMCC ID
24*91f16700Schasinglulu  *		(output) status return code
25*91f16700Schasinglulu  * Argument a1: (input) Service ID (STM32_SMC_BSEC_xxx)
26*91f16700Schasinglulu  * Argument a2: (input) OTP index
27*91f16700Schasinglulu  *		(output) OTP read value, if applicable
28*91f16700Schasinglulu  * Argument a3: (input) OTP value if applicable
29*91f16700Schasinglulu  */
30*91f16700Schasinglulu #define STM32_SMC_BSEC			0x82001003
31*91f16700Schasinglulu 
32*91f16700Schasinglulu /*
33*91f16700Schasinglulu  * STM32_SIP_SMC_SCMI_AGENT0
34*91f16700Schasinglulu  * STM32_SIP_SMC_SCMI_AGENT1
35*91f16700Schasinglulu  * Process SCMI message pending in SCMI shared memory buffer.
36*91f16700Schasinglulu  *
37*91f16700Schasinglulu  * Argument a0: (input) SMCC ID
38*91f16700Schasinglulu  */
39*91f16700Schasinglulu #define STM32_SIP_SMC_SCMI_AGENT0	0x82002000
40*91f16700Schasinglulu #define STM32_SIP_SMC_SCMI_AGENT1	0x82002001
41*91f16700Schasinglulu 
42*91f16700Schasinglulu /* SMC function IDs for SiP Service queries */
43*91f16700Schasinglulu #define STM32_SIP_SVC_CALL_COUNT	0x8200ff00
44*91f16700Schasinglulu #define STM32_SIP_SVC_UID		0x8200ff01
45*91f16700Schasinglulu /*					0x8200ff02 is reserved */
46*91f16700Schasinglulu #define STM32_SIP_SVC_VERSION		0x8200ff03
47*91f16700Schasinglulu 
48*91f16700Schasinglulu /* STM32 SiP Service Calls version numbers */
49*91f16700Schasinglulu #define STM32_SIP_SVC_VERSION_MAJOR	0x0
50*91f16700Schasinglulu #define STM32_SIP_SVC_VERSION_MINOR	0x1
51*91f16700Schasinglulu 
52*91f16700Schasinglulu /* Number of STM32 SiP Calls implemented */
53*91f16700Schasinglulu #define STM32_COMMON_SIP_NUM_CALLS	3
54*91f16700Schasinglulu 
55*91f16700Schasinglulu /* Service for BSEC */
56*91f16700Schasinglulu #define STM32_SMC_READ_SHADOW		0x01
57*91f16700Schasinglulu #define STM32_SMC_PROG_OTP		0x02
58*91f16700Schasinglulu #define STM32_SMC_WRITE_SHADOW		0x03
59*91f16700Schasinglulu #define STM32_SMC_READ_OTP		0x04
60*91f16700Schasinglulu 
61*91f16700Schasinglulu /* SMC error codes */
62*91f16700Schasinglulu #define STM32_SMC_OK			0x00000000U
63*91f16700Schasinglulu #define STM32_SMC_NOT_SUPPORTED		0xFFFFFFFFU
64*91f16700Schasinglulu #define STM32_SMC_FAILED		0xFFFFFFFEU
65*91f16700Schasinglulu #define STM32_SMC_INVALID_PARAMS	0xFFFFFFFDU
66*91f16700Schasinglulu 
67*91f16700Schasinglulu #endif /* STM32MP1_SMC_H */
68