summaryrefslogtreecommitdiffstats
path: root/plat/intel/soc/common/include/socfpga_sip_svc.h
blob: 0803eb5dbac8077be56e7c6b900e875b9b404b48 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
/*
 * Copyright (c) 2019-2022, Intel Corporation. All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#ifndef SOCFPGA_SIP_SVC_H
#define SOCFPGA_SIP_SVC_H


/* SiP status response */
#define INTEL_SIP_SMC_STATUS_OK					0
#define INTEL_SIP_SMC_STATUS_BUSY				0x1
#define INTEL_SIP_SMC_STATUS_REJECTED				0x2
#define INTEL_SIP_SMC_STATUS_NO_RESPONSE			0x3
#define INTEL_SIP_SMC_STATUS_ERROR				0x4
#define INTEL_SIP_SMC_RSU_ERROR					0x7

/* SiP mailbox error code */
#define GENERIC_RESPONSE_ERROR					0x3FF

/* SiP V2 command code range */
#define INTEL_SIP_SMC_CMD_MASK					0xFFFF
#define INTEL_SIP_SMC_CMD_V2_RANGE_BEGIN			0x400
#define INTEL_SIP_SMC_CMD_V2_RANGE_END				0x4FF

/* SiP V2 protocol header */
#define INTEL_SIP_SMC_HEADER_JOB_ID_MASK			0xF
#define INTEL_SIP_SMC_HEADER_JOB_ID_OFFSET			0U
#define INTEL_SIP_SMC_HEADER_CID_MASK				0xF
#define INTEL_SIP_SMC_HEADER_CID_OFFSET				4U
#define INTEL_SIP_SMC_HEADER_VERSION_MASK			0xF
#define INTEL_SIP_SMC_HEADER_VERSION_OFFSET			60U

/* SMC SiP service function identifier for version 1 */

/* FPGA Reconfig */
#define INTEL_SIP_SMC_FPGA_CONFIG_START				0xC2000001
#define INTEL_SIP_SMC_FPGA_CONFIG_WRITE				0x42000002
#define INTEL_SIP_SMC_FPGA_CONFIG_COMPLETED_WRITE		0xC2000003
#define INTEL_SIP_SMC_FPGA_CONFIG_ISDONE			0xC2000004
#define INTEL_SIP_SMC_FPGA_CONFIG_GET_MEM			0xC2000005

/* FPGA Bitstream Flag */
#define FLAG_PARTIAL_CONFIG					BIT(0)
#define FLAG_AUTHENTICATION					BIT(1)
#define CONFIG_TEST_FLAG(_flag, _type)				(((flag) & FLAG_##_type) \
								== FLAG_##_type)

/* Secure Register Access */
#define INTEL_SIP_SMC_REG_READ				0xC2000007
#define INTEL_SIP_SMC_REG_WRITE				0xC2000008
#define INTEL_SIP_SMC_REG_UPDATE			0xC2000009

/* Remote System Update */
#define INTEL_SIP_SMC_RSU_STATUS				0xC200000B
#define INTEL_SIP_SMC_RSU_UPDATE				0xC200000C
#define INTEL_SIP_SMC_RSU_NOTIFY				0xC200000E
#define INTEL_SIP_SMC_RSU_RETRY_COUNTER				0xC200000F
#define INTEL_SIP_SMC_RSU_DCMF_VERSION				0xC2000010
#define INTEL_SIP_SMC_RSU_COPY_DCMF_VERSION			0xC2000011
#define INTEL_SIP_SMC_RSU_MAX_RETRY				0xC2000012
#define INTEL_SIP_SMC_RSU_COPY_MAX_RETRY			0xC2000013
#define INTEL_SIP_SMC_RSU_DCMF_STATUS				0xC2000014
#define INTEL_SIP_SMC_RSU_COPY_DCMF_STATUS			0xC2000015

/* Hardware monitor */
#define INTEL_SIP_SMC_HWMON_READTEMP				0xC2000020
#define INTEL_SIP_SMC_HWMON_READVOLT				0xC2000021
#define TEMP_CHANNEL_MAX					(1 << 15)
#define VOLT_CHANNEL_MAX					(1 << 15)

/* ECC */
#define INTEL_SIP_SMC_ECC_DBE					0xC200000D

/* Generic Command */
#define INTEL_SIP_SMC_SERVICE_COMPLETED				0xC200001E
#define INTEL_SIP_SMC_FIRMWARE_VERSION				0xC200001F
#define INTEL_SIP_SMC_HPS_SET_BRIDGES				0xC2000032
#define INTEL_SIP_SMC_GET_ROM_PATCH_SHA384			0xC2000040

#define SERVICE_COMPLETED_MODE_ASYNC				0x00004F4E

/* Mailbox Command */
#define INTEL_SIP_SMC_MBOX_SEND_CMD				0xC200003C
#define INTEL_SIP_SMC_GET_USERCODE				0xC200003D

/* FPGA Crypto Services */
#define INTEL_SIP_SMC_FCS_RANDOM_NUMBER				0xC200005A
#define INTEL_SIP_SMC_FCS_RANDOM_NUMBER_EXT			0x4200008F
#define INTEL_SIP_SMC_FCS_CRYPTION				0x4200005B
#define INTEL_SIP_SMC_FCS_CRYPTION_EXT				0xC2000090
#define INTEL_SIP_SMC_FCS_SERVICE_REQUEST			0x4200005C
#define INTEL_SIP_SMC_FCS_SEND_CERTIFICATE			0x4200005D
#define INTEL_SIP_SMC_FCS_GET_PROVISION_DATA			0x4200005E
#define INTEL_SIP_SMC_FCS_CNTR_SET_PREAUTH			0xC200005F
#define INTEL_SIP_SMC_FCS_PSGSIGMA_TEARDOWN			0xC2000064
#define INTEL_SIP_SMC_FCS_CHIP_ID				0xC2000065
#define INTEL_SIP_SMC_FCS_ATTESTATION_SUBKEY			0xC2000066
#define INTEL_SIP_SMC_FCS_ATTESTATION_MEASUREMENTS		0xC2000067
#define INTEL_SIP_SMC_FCS_GET_ATTESTATION_CERT			0xC2000068
#define INTEL_SIP_SMC_FCS_CREATE_CERT_ON_RELOAD			0xC2000069
#define INTEL_SIP_SMC_FCS_OPEN_CS_SESSION			0xC200006E
#define INTEL_SIP_SMC_FCS_CLOSE_CS_SESSION			0xC200006F
#define INTEL_SIP_SMC_FCS_IMPORT_CS_KEY				0x42000070
#define INTEL_SIP_SMC_FCS_EXPORT_CS_KEY				0xC2000071
#define INTEL_SIP_SMC_FCS_REMOVE_CS_KEY				0xC2000072
#define INTEL_SIP_SMC_FCS_GET_CS_KEY_INFO			0xC2000073
#define INTEL_SIP_SMC_FCS_AES_CRYPT_INIT			0xC2000074
#define INTEL_SIP_SMC_FCS_AES_CRYPT_UPDATE			0x42000075
#define INTEL_SIP_SMC_FCS_AES_CRYPT_FINALIZE			0x42000076
#define INTEL_SIP_SMC_FCS_GET_DIGEST_INIT			0xC2000077
#define INTEL_SIP_SMC_FCS_GET_DIGEST_UPDATE			0xC2000078
#define INTEL_SIP_SMC_FCS_GET_DIGEST_FINALIZE			0xC2000079
#define INTEL_SIP_SMC_FCS_MAC_VERIFY_INIT			0xC200007A
#define INTEL_SIP_SMC_FCS_MAC_VERIFY_UPDATE			0xC200007B
#define INTEL_SIP_SMC_FCS_MAC_VERIFY_FINALIZE			0xC200007C
#define INTEL_SIP_SMC_FCS_ECDSA_HASH_SIGN_INIT			0xC200007D
#define INTEL_SIP_SMC_FCS_ECDSA_HASH_SIGN_FINALIZE		0xC200007F
#define INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIGN_INIT		0xC2000080
#define INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIGN_UPDATE		0xC2000081
#define INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIGN_FINALIZE		0xC2000082
#define INTEL_SIP_SMC_FCS_ECDSA_HASH_SIG_VERIFY_INIT		0xC2000083
#define INTEL_SIP_SMC_FCS_ECDSA_HASH_SIG_VERIFY_FINALIZE	0xC2000085
#define INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIG_VERIFY_INIT	0xC2000086
#define INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIG_VERIFY_UPDATE	0xC2000087
#define INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIG_VERIFY_FINALIZE	0xC2000088
#define INTEL_SIP_SMC_FCS_ECDSA_GET_PUBKEY_INIT			0xC2000089
#define INTEL_SIP_SMC_FCS_ECDSA_GET_PUBKEY_FINALIZE		0xC200008B
#define INTEL_SIP_SMC_FCS_ECDH_REQUEST_INIT			0xC200008C
#define INTEL_SIP_SMC_FCS_ECDH_REQUEST_FINALIZE			0xC200008E

#define INTEL_SIP_SMC_FCS_SHA_MODE_MASK				0xF
#define INTEL_SIP_SMC_FCS_DIGEST_SIZE_MASK			0xF
#define INTEL_SIP_SMC_FCS_DIGEST_SIZE_OFFSET			4U
#define INTEL_SIP_SMC_FCS_ECC_ALGO_MASK				0xF

/* ECC DBE */
#define WARM_RESET_WFI_FLAG					BIT(31)
#define SYSMGR_ECC_DBE_COLD_RST_MASK				(SYSMGR_ECC_OCRAM_MASK |\
								SYSMGR_ECC_DDR0_MASK |\
								SYSMGR_ECC_DDR1_MASK)

/* Non-mailbox SMC Call */
#define INTEL_SIP_SMC_SVC_VERSION				0xC2000200

/**
 * SMC SiP service function identifier for version 2
 * Command code from 0x400 ~ 0x4FF
 */

/* V2: Non-mailbox function identifier */
#define INTEL_SIP_SMC_V2_GET_SVC_VERSION			0xC2000400
#define INTEL_SIP_SMC_V2_REG_READ				0xC2000401
#define INTEL_SIP_SMC_V2_REG_WRITE				0xC2000402
#define INTEL_SIP_SMC_V2_REG_UPDATE				0xC2000403
#define INTEL_SIP_SMC_V2_HPS_SET_BRIDGES			0xC2000404

/* V2: Mailbox function identifier */
#define INTEL_SIP_SMC_V2_MAILBOX_SEND_COMMAND			0xC2000420
#define INTEL_SIP_SMC_V2_MAILBOX_POLL_RESPONSE			0xC2000421

/* SMC function IDs for SiP Service queries */
#define SIP_SVC_CALL_COUNT					0x8200ff00
#define SIP_SVC_UID						0x8200ff01
#define SIP_SVC_VERSION						0x8200ff03

/* SiP Service Calls version numbers */
#define SIP_SVC_VERSION_MAJOR					1
#define SIP_SVC_VERSION_MINOR					0


/* Structure Definitions */
struct fpga_config_info {
	uint32_t addr;
	int size;
	int size_written;
	uint32_t write_requested;
	int subblocks_sent;
	int block_number;
};

typedef enum {
	NO_REQUEST = 0,
	RECONFIGURATION,
	BITSTREAM_AUTH
} config_type;

/* Function Definitions */
bool is_size_4_bytes_aligned(uint32_t size);
bool is_address_in_ddr_range(uint64_t addr, uint64_t size);

/* ECC DBE */
bool cold_reset_for_ecc_dbe(void);
uint32_t intel_ecc_dbe_notification(uint64_t dbe_value);

/* Secure register access */
uint32_t intel_secure_reg_read(uint64_t reg_addr, uint32_t *retval);
uint32_t intel_secure_reg_write(uint64_t reg_addr, uint32_t val,
				uint32_t *retval);
uint32_t intel_secure_reg_update(uint64_t reg_addr, uint32_t mask,
				 uint32_t val, uint32_t *retval);

/* Miscellaneous HPS services */
uint32_t intel_hps_set_bridges(uint64_t enable, uint64_t mask);

/* SiP Service handler for version 2 */
uintptr_t sip_smc_handler_v2(uint32_t smc_fid,
			 u_register_t x1,
			 u_register_t x2,
			 u_register_t x3,
			 u_register_t x4,
			 void *cookie,
			 void *handle,
			 u_register_t flags);

#endif /* SOCFPGA_SIP_SVC_H */