xref: /arm-trusted-firmware/plat/intel/soc/common/include/socfpga_sip_svc.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2019-2022, Intel Corporation. All rights reserved.
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu  */
6*91f16700Schasinglulu 
7*91f16700Schasinglulu #ifndef SOCFPGA_SIP_SVC_H
8*91f16700Schasinglulu #define SOCFPGA_SIP_SVC_H
9*91f16700Schasinglulu 
10*91f16700Schasinglulu 
11*91f16700Schasinglulu /* SiP status response */
12*91f16700Schasinglulu #define INTEL_SIP_SMC_STATUS_OK					0
13*91f16700Schasinglulu #define INTEL_SIP_SMC_STATUS_BUSY				0x1
14*91f16700Schasinglulu #define INTEL_SIP_SMC_STATUS_REJECTED				0x2
15*91f16700Schasinglulu #define INTEL_SIP_SMC_STATUS_NO_RESPONSE			0x3
16*91f16700Schasinglulu #define INTEL_SIP_SMC_STATUS_ERROR				0x4
17*91f16700Schasinglulu #define INTEL_SIP_SMC_RSU_ERROR					0x7
18*91f16700Schasinglulu #define INTEL_SIP_SMC_SEU_ERR_READ_ERROR		0x8
19*91f16700Schasinglulu 
20*91f16700Schasinglulu /* SiP mailbox error code */
21*91f16700Schasinglulu #define GENERIC_RESPONSE_ERROR					0x3FF
22*91f16700Schasinglulu 
23*91f16700Schasinglulu /* SiP V2 command code range */
24*91f16700Schasinglulu #define INTEL_SIP_SMC_CMD_MASK					0xFFFF
25*91f16700Schasinglulu #define INTEL_SIP_SMC_CMD_V2_RANGE_BEGIN			0x400
26*91f16700Schasinglulu #define INTEL_SIP_SMC_CMD_V2_RANGE_END				0x4FF
27*91f16700Schasinglulu 
28*91f16700Schasinglulu /* SiP V2 protocol header */
29*91f16700Schasinglulu #define INTEL_SIP_SMC_HEADER_JOB_ID_MASK			0xF
30*91f16700Schasinglulu #define INTEL_SIP_SMC_HEADER_JOB_ID_OFFSET			0U
31*91f16700Schasinglulu #define INTEL_SIP_SMC_HEADER_CID_MASK				0xF
32*91f16700Schasinglulu #define INTEL_SIP_SMC_HEADER_CID_OFFSET				4U
33*91f16700Schasinglulu #define INTEL_SIP_SMC_HEADER_VERSION_MASK			0xF
34*91f16700Schasinglulu #define INTEL_SIP_SMC_HEADER_VERSION_OFFSET			60U
35*91f16700Schasinglulu 
36*91f16700Schasinglulu /* SMC SiP service function identifier for version 1 */
37*91f16700Schasinglulu 
38*91f16700Schasinglulu /* FPGA Reconfig */
39*91f16700Schasinglulu #define INTEL_SIP_SMC_FPGA_CONFIG_START				0xC2000001
40*91f16700Schasinglulu #define INTEL_SIP_SMC_FPGA_CONFIG_WRITE				0x42000002
41*91f16700Schasinglulu #define INTEL_SIP_SMC_FPGA_CONFIG_COMPLETED_WRITE		0xC2000003
42*91f16700Schasinglulu #define INTEL_SIP_SMC_FPGA_CONFIG_ISDONE			0xC2000004
43*91f16700Schasinglulu #define INTEL_SIP_SMC_FPGA_CONFIG_GET_MEM			0xC2000005
44*91f16700Schasinglulu 
45*91f16700Schasinglulu /* FPGA Bitstream Flag */
46*91f16700Schasinglulu #define FLAG_PARTIAL_CONFIG					BIT(0)
47*91f16700Schasinglulu #define FLAG_AUTHENTICATION					BIT(1)
48*91f16700Schasinglulu #define CONFIG_TEST_FLAG(_flag, _type)				(((flag) & FLAG_##_type) \
49*91f16700Schasinglulu 								== FLAG_##_type)
50*91f16700Schasinglulu 
51*91f16700Schasinglulu /* Secure Register Access */
52*91f16700Schasinglulu #define INTEL_SIP_SMC_REG_READ				0xC2000007
53*91f16700Schasinglulu #define INTEL_SIP_SMC_REG_WRITE				0xC2000008
54*91f16700Schasinglulu #define INTEL_SIP_SMC_REG_UPDATE			0xC2000009
55*91f16700Schasinglulu 
56*91f16700Schasinglulu /* Remote System Update */
57*91f16700Schasinglulu #define INTEL_SIP_SMC_RSU_STATUS				0xC200000B
58*91f16700Schasinglulu #define INTEL_SIP_SMC_RSU_UPDATE				0xC200000C
59*91f16700Schasinglulu #define INTEL_SIP_SMC_RSU_NOTIFY				0xC200000E
60*91f16700Schasinglulu #define INTEL_SIP_SMC_RSU_RETRY_COUNTER				0xC200000F
61*91f16700Schasinglulu #define INTEL_SIP_SMC_RSU_DCMF_VERSION				0xC2000010
62*91f16700Schasinglulu #define INTEL_SIP_SMC_RSU_COPY_DCMF_VERSION			0xC2000011
63*91f16700Schasinglulu #define INTEL_SIP_SMC_RSU_MAX_RETRY				0xC2000012
64*91f16700Schasinglulu #define INTEL_SIP_SMC_RSU_COPY_MAX_RETRY			0xC2000013
65*91f16700Schasinglulu #define INTEL_SIP_SMC_RSU_DCMF_STATUS				0xC2000014
66*91f16700Schasinglulu #define INTEL_SIP_SMC_RSU_COPY_DCMF_STATUS			0xC2000015
67*91f16700Schasinglulu 
68*91f16700Schasinglulu /* Hardware monitor */
69*91f16700Schasinglulu #define INTEL_SIP_SMC_HWMON_READTEMP				0xC2000020
70*91f16700Schasinglulu #define INTEL_SIP_SMC_HWMON_READVOLT				0xC2000021
71*91f16700Schasinglulu #define TEMP_CHANNEL_MAX					(1 << 15)
72*91f16700Schasinglulu #define VOLT_CHANNEL_MAX					(1 << 15)
73*91f16700Schasinglulu 
74*91f16700Schasinglulu /* ECC */
75*91f16700Schasinglulu #define INTEL_SIP_SMC_ECC_DBE					0xC200000D
76*91f16700Schasinglulu 
77*91f16700Schasinglulu /* Generic Command */
78*91f16700Schasinglulu #define INTEL_SIP_SMC_SERVICE_COMPLETED				0xC200001E
79*91f16700Schasinglulu #define INTEL_SIP_SMC_FIRMWARE_VERSION				0xC200001F
80*91f16700Schasinglulu #define INTEL_SIP_SMC_HPS_SET_BRIDGES				0xC2000032
81*91f16700Schasinglulu #define INTEL_SIP_SMC_GET_ROM_PATCH_SHA384			0xC2000040
82*91f16700Schasinglulu 
83*91f16700Schasinglulu #define SERVICE_COMPLETED_MODE_ASYNC				0x00004F4E
84*91f16700Schasinglulu 
85*91f16700Schasinglulu /* Mailbox Command */
86*91f16700Schasinglulu #define INTEL_SIP_SMC_MBOX_SEND_CMD				0xC200003C
87*91f16700Schasinglulu #define INTEL_SIP_SMC_GET_USERCODE				0xC200003D
88*91f16700Schasinglulu 
89*91f16700Schasinglulu /* FPGA Crypto Services */
90*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_RANDOM_NUMBER					0xC200005A
91*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_RANDOM_NUMBER_EXT				0x4200008F
92*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_CRYPTION					0x4200005B
93*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_CRYPTION_EXT					0xC2000090
94*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_SERVICE_REQUEST				0x4200005C
95*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_SEND_CERTIFICATE				0x4200005D
96*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_GET_PROVISION_DATA				0x4200005E
97*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_CNTR_SET_PREAUTH				0xC200005F
98*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_PSGSIGMA_TEARDOWN				0xC2000064
99*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_CHIP_ID					0xC2000065
100*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_ATTESTATION_SUBKEY				0xC2000066
101*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_ATTESTATION_MEASUREMENTS			0xC2000067
102*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_GET_ATTESTATION_CERT				0xC2000068
103*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_CREATE_CERT_ON_RELOAD				0xC2000069
104*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_OPEN_CS_SESSION				0xC200006E
105*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_CLOSE_CS_SESSION				0xC200006F
106*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_IMPORT_CS_KEY					0x42000070
107*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_EXPORT_CS_KEY					0xC2000071
108*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_REMOVE_CS_KEY					0xC2000072
109*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_GET_CS_KEY_INFO				0xC2000073
110*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_AES_CRYPT_INIT				0xC2000074
111*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_AES_CRYPT_UPDATE				0x42000075
112*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_AES_CRYPT_FINALIZE				0x42000076
113*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_GET_DIGEST_INIT				0xC2000077
114*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_GET_DIGEST_UPDATE				0xC2000078
115*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_GET_DIGEST_FINALIZE				0xC2000079
116*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_GET_DIGEST_SMMU_UPDATE			0x42000091
117*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_GET_DIGEST_SMMU_FINALIZE			0x42000092
118*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_MAC_VERIFY_INIT				0xC200007A
119*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_MAC_VERIFY_UPDATE				0xC200007B
120*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_MAC_VERIFY_FINALIZE				0xC200007C
121*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_MAC_VERIFY_SMMU_UPDATE			0x42000093
122*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_MAC_VERIFY_SMMU_FINALIZE			0x42000094
123*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_ECDSA_HASH_SIGN_INIT				0xC200007D
124*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_ECDSA_HASH_SIGN_FINALIZE			0xC200007F
125*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIGN_INIT			0xC2000080
126*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIGN_UPDATE			0xC2000081
127*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIGN_FINALIZE			0xC2000082
128*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIGN_SMMU_UPDATE		0x42000095
129*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIGN_SMMU_FINALIZE		0x42000096
130*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_ECDSA_HASH_SIG_VERIFY_INIT			0xC2000083
131*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_ECDSA_HASH_SIG_VERIFY_FINALIZE		0xC2000085
132*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIG_VERIFY_INIT		0xC2000086
133*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIG_VERIFY_UPDATE		0xC2000087
134*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIG_VERIFY_FINALIZE		0xC2000088
135*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIG_VERIFY_SMMU_UPDATE	0x42000097
136*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIG_VERIFY_SMMU_FINALIZE	0x42000098
137*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_ECDSA_GET_PUBKEY_INIT				0xC2000089
138*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_ECDSA_GET_PUBKEY_FINALIZE			0xC200008B
139*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_ECDH_REQUEST_INIT				0xC200008C
140*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_ECDH_REQUEST_FINALIZE				0xC200008E
141*91f16700Schasinglulu 
142*91f16700Schasinglulu /* SEU ERR */
143*91f16700Schasinglulu #define INTEL_SIP_SMC_SEU_ERR_STATUS				0xC2000099
144*91f16700Schasinglulu 
145*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_SHA_MODE_MASK				0xF
146*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_DIGEST_SIZE_MASK			0xF
147*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_DIGEST_SIZE_OFFSET			4U
148*91f16700Schasinglulu #define INTEL_SIP_SMC_FCS_ECC_ALGO_MASK				0xF
149*91f16700Schasinglulu 
150*91f16700Schasinglulu /* ECC DBE */
151*91f16700Schasinglulu #define WARM_RESET_WFI_FLAG					BIT(31)
152*91f16700Schasinglulu #define SYSMGR_ECC_DBE_COLD_RST_MASK				(SYSMGR_ECC_OCRAM_MASK |\
153*91f16700Schasinglulu 								SYSMGR_ECC_DDR0_MASK |\
154*91f16700Schasinglulu 								SYSMGR_ECC_DDR1_MASK)
155*91f16700Schasinglulu 
156*91f16700Schasinglulu /* Non-mailbox SMC Call */
157*91f16700Schasinglulu #define INTEL_SIP_SMC_SVC_VERSION				0xC2000200
158*91f16700Schasinglulu 
159*91f16700Schasinglulu /**
160*91f16700Schasinglulu  * SMC SiP service function identifier for version 2
161*91f16700Schasinglulu  * Command code from 0x400 ~ 0x4FF
162*91f16700Schasinglulu  */
163*91f16700Schasinglulu 
164*91f16700Schasinglulu /* V2: Non-mailbox function identifier */
165*91f16700Schasinglulu #define INTEL_SIP_SMC_V2_GET_SVC_VERSION			0xC2000400
166*91f16700Schasinglulu #define INTEL_SIP_SMC_V2_REG_READ				0xC2000401
167*91f16700Schasinglulu #define INTEL_SIP_SMC_V2_REG_WRITE				0xC2000402
168*91f16700Schasinglulu #define INTEL_SIP_SMC_V2_REG_UPDATE				0xC2000403
169*91f16700Schasinglulu #define INTEL_SIP_SMC_V2_HPS_SET_BRIDGES			0xC2000404
170*91f16700Schasinglulu #define INTEL_SIP_SMC_V2_RSU_UPDATE_ADDR			0xC2000405
171*91f16700Schasinglulu 
172*91f16700Schasinglulu /* V2: Mailbox function identifier */
173*91f16700Schasinglulu #define INTEL_SIP_SMC_V2_MAILBOX_SEND_COMMAND			0xC2000420
174*91f16700Schasinglulu #define INTEL_SIP_SMC_V2_MAILBOX_POLL_RESPONSE			0xC2000421
175*91f16700Schasinglulu 
176*91f16700Schasinglulu /* SMC function IDs for SiP Service queries */
177*91f16700Schasinglulu #define SIP_SVC_CALL_COUNT					0x8200ff00
178*91f16700Schasinglulu #define SIP_SVC_UID						0x8200ff01
179*91f16700Schasinglulu #define SIP_SVC_VERSION						0x8200ff03
180*91f16700Schasinglulu 
181*91f16700Schasinglulu /* SiP Service Calls version numbers */
182*91f16700Schasinglulu /*
183*91f16700Schasinglulu  * Increase if there is any backward compatibility impact
184*91f16700Schasinglulu  */
185*91f16700Schasinglulu #define SIP_SVC_VERSION_MAJOR					2
186*91f16700Schasinglulu /*
187*91f16700Schasinglulu  * Increase if there is new SMC function ID being added
188*91f16700Schasinglulu  */
189*91f16700Schasinglulu #define SIP_SVC_VERSION_MINOR					2
190*91f16700Schasinglulu 
191*91f16700Schasinglulu 
192*91f16700Schasinglulu /* Structure Definitions */
193*91f16700Schasinglulu struct fpga_config_info {
194*91f16700Schasinglulu 	uint32_t addr;
195*91f16700Schasinglulu 	int size;
196*91f16700Schasinglulu 	int size_written;
197*91f16700Schasinglulu 	uint32_t write_requested;
198*91f16700Schasinglulu 	int subblocks_sent;
199*91f16700Schasinglulu 	int block_number;
200*91f16700Schasinglulu };
201*91f16700Schasinglulu 
202*91f16700Schasinglulu typedef enum {
203*91f16700Schasinglulu 	NO_REQUEST = 0,
204*91f16700Schasinglulu 	RECONFIGURATION,
205*91f16700Schasinglulu 	BITSTREAM_AUTH
206*91f16700Schasinglulu } config_type;
207*91f16700Schasinglulu 
208*91f16700Schasinglulu /* Function Definitions */
209*91f16700Schasinglulu bool is_size_4_bytes_aligned(uint32_t size);
210*91f16700Schasinglulu bool is_address_in_ddr_range(uint64_t addr, uint64_t size);
211*91f16700Schasinglulu 
212*91f16700Schasinglulu /* ECC DBE */
213*91f16700Schasinglulu bool cold_reset_for_ecc_dbe(void);
214*91f16700Schasinglulu uint32_t intel_ecc_dbe_notification(uint64_t dbe_value);
215*91f16700Schasinglulu 
216*91f16700Schasinglulu /* Secure register access */
217*91f16700Schasinglulu uint32_t intel_secure_reg_read(uint64_t reg_addr, uint32_t *retval);
218*91f16700Schasinglulu uint32_t intel_secure_reg_write(uint64_t reg_addr, uint32_t val,
219*91f16700Schasinglulu 				uint32_t *retval);
220*91f16700Schasinglulu uint32_t intel_secure_reg_update(uint64_t reg_addr, uint32_t mask,
221*91f16700Schasinglulu 				 uint32_t val, uint32_t *retval);
222*91f16700Schasinglulu 
223*91f16700Schasinglulu /* Set RSU update address*/
224*91f16700Schasinglulu uint32_t intel_rsu_update(uint64_t update_address);
225*91f16700Schasinglulu 
226*91f16700Schasinglulu /* Miscellaneous HPS services */
227*91f16700Schasinglulu uint32_t intel_hps_set_bridges(uint64_t enable, uint64_t mask);
228*91f16700Schasinglulu 
229*91f16700Schasinglulu /* SiP Service handler for version 2 */
230*91f16700Schasinglulu uintptr_t sip_smc_handler_v2(uint32_t smc_fid,
231*91f16700Schasinglulu 			 u_register_t x1,
232*91f16700Schasinglulu 			 u_register_t x2,
233*91f16700Schasinglulu 			 u_register_t x3,
234*91f16700Schasinglulu 			 u_register_t x4,
235*91f16700Schasinglulu 			 void *cookie,
236*91f16700Schasinglulu 			 void *handle,
237*91f16700Schasinglulu 			 u_register_t flags);
238*91f16700Schasinglulu 
239*91f16700Schasinglulu #endif /* SOCFPGA_SIP_SVC_H */
240