blob: 0668301029b8e59f042bbb727fad05b4934a93c0 [file] [log] [blame]
Hadi Asyrafiab1132f2019-10-22 10:31:45 +08001/*
Sieu Mun Tang9f22cbf2022-03-02 11:04:09 +08002 * Copyright (c) 2019-2022, Intel Corporation. All rights reserved.
Hadi Asyrafiab1132f2019-10-22 10:31:45 +08003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#ifndef SOCFPGA_SIP_SVC_H
8#define SOCFPGA_SIP_SVC_H
9
10
11/* SiP status response */
Sieu Mun Tangdcaab772022-05-11 10:16:40 +080012#define INTEL_SIP_SMC_STATUS_OK 0
13#define INTEL_SIP_SMC_STATUS_BUSY 0x1
14#define INTEL_SIP_SMC_STATUS_REJECTED 0x2
15#define INTEL_SIP_SMC_STATUS_NO_RESPONSE 0x3
16#define INTEL_SIP_SMC_STATUS_ERROR 0x4
17#define INTEL_SIP_SMC_RSU_ERROR 0x7
Jit Loon Lim2bee1732023-05-17 12:26:11 +080018#define INTEL_SIP_SMC_SEU_ERR_READ_ERROR 0x8
Abdul Halim, Muhammad Hadi Asyrafi25f623e2020-02-27 10:23:48 +080019
Sieu Mun Tang9f22cbf2022-03-02 11:04:09 +080020/* SiP mailbox error code */
Sieu Mun Tangdcaab772022-05-11 10:16:40 +080021#define GENERIC_RESPONSE_ERROR 0x3FF
Hadi Asyrafiab1132f2019-10-22 10:31:45 +080022
Sieu Mun Tang044ed482022-05-11 10:45:19 +080023/* SiP V2 command code range */
24#define INTEL_SIP_SMC_CMD_MASK 0xFFFF
25#define INTEL_SIP_SMC_CMD_V2_RANGE_BEGIN 0x400
26#define INTEL_SIP_SMC_CMD_V2_RANGE_END 0x4FF
27
Sieu Mun Tang5d187c02022-05-10 23:26:57 +080028/* SiP V2 protocol header */
29#define INTEL_SIP_SMC_HEADER_JOB_ID_MASK 0xF
30#define INTEL_SIP_SMC_HEADER_JOB_ID_OFFSET 0U
31#define INTEL_SIP_SMC_HEADER_CID_MASK 0xF
32#define INTEL_SIP_SMC_HEADER_CID_OFFSET 4U
33#define INTEL_SIP_SMC_HEADER_VERSION_MASK 0xF
34#define INTEL_SIP_SMC_HEADER_VERSION_OFFSET 60U
35
Sieu Mun Tang044ed482022-05-11 10:45:19 +080036/* SMC SiP service function identifier for version 1 */
Abdul Halim, Muhammad Hadi Asyrafiec164b62020-05-14 14:53:29 +080037
38/* FPGA Reconfig */
Sieu Mun Tangdcaab772022-05-11 10:16:40 +080039#define INTEL_SIP_SMC_FPGA_CONFIG_START 0xC2000001
40#define INTEL_SIP_SMC_FPGA_CONFIG_WRITE 0x42000002
41#define INTEL_SIP_SMC_FPGA_CONFIG_COMPLETED_WRITE 0xC2000003
42#define INTEL_SIP_SMC_FPGA_CONFIG_ISDONE 0xC2000004
43#define INTEL_SIP_SMC_FPGA_CONFIG_GET_MEM 0xC2000005
Abdul Halim, Muhammad Hadi Asyrafiec164b62020-05-14 14:53:29 +080044
Sieu Mun Tang54064982022-04-28 22:40:58 +080045/* FPGA Bitstream Flag */
Sieu Mun Tangdcaab772022-05-11 10:16:40 +080046#define FLAG_PARTIAL_CONFIG BIT(0)
47#define FLAG_AUTHENTICATION BIT(1)
48#define CONFIG_TEST_FLAG(_flag, _type) (((flag) & FLAG_##_type) \
49 == FLAG_##_type)
Sieu Mun Tang54064982022-04-28 22:40:58 +080050
Abdul Halim, Muhammad Hadi Asyrafiec164b62020-05-14 14:53:29 +080051/* Secure Register Access */
Hadi Asyrafiab1132f2019-10-22 10:31:45 +080052#define INTEL_SIP_SMC_REG_READ 0xC2000007
53#define INTEL_SIP_SMC_REG_WRITE 0xC2000008
54#define INTEL_SIP_SMC_REG_UPDATE 0xC2000009
Abdul Halim, Muhammad Hadi Asyrafiec164b62020-05-14 14:53:29 +080055
56/* Remote System Update */
Sieu Mun Tangdcaab772022-05-11 10:16:40 +080057#define INTEL_SIP_SMC_RSU_STATUS 0xC200000B
58#define INTEL_SIP_SMC_RSU_UPDATE 0xC200000C
59#define INTEL_SIP_SMC_RSU_NOTIFY 0xC200000E
60#define INTEL_SIP_SMC_RSU_RETRY_COUNTER 0xC200000F
61#define INTEL_SIP_SMC_RSU_DCMF_VERSION 0xC2000010
62#define INTEL_SIP_SMC_RSU_COPY_DCMF_VERSION 0xC2000011
63#define INTEL_SIP_SMC_RSU_MAX_RETRY 0xC2000012
64#define INTEL_SIP_SMC_RSU_COPY_MAX_RETRY 0xC2000013
65#define INTEL_SIP_SMC_RSU_DCMF_STATUS 0xC2000014
66#define INTEL_SIP_SMC_RSU_COPY_DCMF_STATUS 0xC2000015
Abdul Halim, Muhammad Hadi Asyrafiec164b62020-05-14 14:53:29 +080067
Kris Chapline768dfa2021-06-25 11:31:52 +010068/* Hardware monitor */
Sieu Mun Tangdcaab772022-05-11 10:16:40 +080069#define INTEL_SIP_SMC_HWMON_READTEMP 0xC2000020
70#define INTEL_SIP_SMC_HWMON_READVOLT 0xC2000021
71#define TEMP_CHANNEL_MAX (1 << 15)
72#define VOLT_CHANNEL_MAX (1 << 15)
Sieu Mun Tangdbcc2cf2022-03-07 12:13:04 +080073
74/* ECC */
Sieu Mun Tangdcaab772022-05-11 10:16:40 +080075#define INTEL_SIP_SMC_ECC_DBE 0xC200000D
Sieu Mun Tangdbcc2cf2022-03-07 12:13:04 +080076
Sieu Mun Tanga34b8812022-03-17 03:11:55 +080077/* Generic Command */
Sieu Mun Tang758a2ad2022-05-11 10:23:13 +080078#define INTEL_SIP_SMC_SERVICE_COMPLETED 0xC200001E
Sieu Mun Tangdcaab772022-05-11 10:16:40 +080079#define INTEL_SIP_SMC_FIRMWARE_VERSION 0xC200001F
80#define INTEL_SIP_SMC_HPS_SET_BRIDGES 0xC2000032
81#define INTEL_SIP_SMC_GET_ROM_PATCH_SHA384 0xC2000040
Sieu Mun Tanga34b8812022-03-17 03:11:55 +080082
Sieu Mun Tangdcaab772022-05-11 10:16:40 +080083#define SERVICE_COMPLETED_MODE_ASYNC 0x00004F4E
Sieu Mun Tangfd8a8ad2022-05-07 00:50:37 +080084
Sieu Mun Tang2b8e0052022-04-27 18:57:29 +080085/* Mailbox Command */
Sieu Mun Tang758a2ad2022-05-11 10:23:13 +080086#define INTEL_SIP_SMC_MBOX_SEND_CMD 0xC200003C
Sieu Mun Tangdcaab772022-05-11 10:16:40 +080087#define INTEL_SIP_SMC_GET_USERCODE 0xC200003D
Abdul Halim, Muhammad Hadi Asyrafiec164b62020-05-14 14:53:29 +080088
Sieu Mun Tang128d2a72022-05-11 09:49:25 +080089/* FPGA Crypto Services */
Sieu Mun Tangbd8da632022-09-28 15:58:28 +080090#define INTEL_SIP_SMC_FCS_RANDOM_NUMBER 0xC200005A
91#define INTEL_SIP_SMC_FCS_RANDOM_NUMBER_EXT 0x4200008F
92#define INTEL_SIP_SMC_FCS_CRYPTION 0x4200005B
93#define INTEL_SIP_SMC_FCS_CRYPTION_EXT 0xC2000090
94#define INTEL_SIP_SMC_FCS_SERVICE_REQUEST 0x4200005C
95#define INTEL_SIP_SMC_FCS_SEND_CERTIFICATE 0x4200005D
96#define INTEL_SIP_SMC_FCS_GET_PROVISION_DATA 0x4200005E
97#define INTEL_SIP_SMC_FCS_CNTR_SET_PREAUTH 0xC200005F
98#define INTEL_SIP_SMC_FCS_PSGSIGMA_TEARDOWN 0xC2000064
99#define INTEL_SIP_SMC_FCS_CHIP_ID 0xC2000065
100#define INTEL_SIP_SMC_FCS_ATTESTATION_SUBKEY 0xC2000066
101#define INTEL_SIP_SMC_FCS_ATTESTATION_MEASUREMENTS 0xC2000067
102#define INTEL_SIP_SMC_FCS_GET_ATTESTATION_CERT 0xC2000068
103#define INTEL_SIP_SMC_FCS_CREATE_CERT_ON_RELOAD 0xC2000069
104#define INTEL_SIP_SMC_FCS_OPEN_CS_SESSION 0xC200006E
105#define INTEL_SIP_SMC_FCS_CLOSE_CS_SESSION 0xC200006F
106#define INTEL_SIP_SMC_FCS_IMPORT_CS_KEY 0x42000070
107#define INTEL_SIP_SMC_FCS_EXPORT_CS_KEY 0xC2000071
108#define INTEL_SIP_SMC_FCS_REMOVE_CS_KEY 0xC2000072
109#define INTEL_SIP_SMC_FCS_GET_CS_KEY_INFO 0xC2000073
110#define INTEL_SIP_SMC_FCS_AES_CRYPT_INIT 0xC2000074
111#define INTEL_SIP_SMC_FCS_AES_CRYPT_UPDATE 0x42000075
112#define INTEL_SIP_SMC_FCS_AES_CRYPT_FINALIZE 0x42000076
113#define INTEL_SIP_SMC_FCS_GET_DIGEST_INIT 0xC2000077
114#define INTEL_SIP_SMC_FCS_GET_DIGEST_UPDATE 0xC2000078
115#define INTEL_SIP_SMC_FCS_GET_DIGEST_FINALIZE 0xC2000079
116#define INTEL_SIP_SMC_FCS_GET_DIGEST_SMMU_UPDATE 0x42000091
117#define INTEL_SIP_SMC_FCS_GET_DIGEST_SMMU_FINALIZE 0x42000092
118#define INTEL_SIP_SMC_FCS_MAC_VERIFY_INIT 0xC200007A
119#define INTEL_SIP_SMC_FCS_MAC_VERIFY_UPDATE 0xC200007B
120#define INTEL_SIP_SMC_FCS_MAC_VERIFY_FINALIZE 0xC200007C
121#define INTEL_SIP_SMC_FCS_MAC_VERIFY_SMMU_UPDATE 0x42000093
122#define INTEL_SIP_SMC_FCS_MAC_VERIFY_SMMU_FINALIZE 0x42000094
123#define INTEL_SIP_SMC_FCS_ECDSA_HASH_SIGN_INIT 0xC200007D
124#define INTEL_SIP_SMC_FCS_ECDSA_HASH_SIGN_FINALIZE 0xC200007F
125#define INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIGN_INIT 0xC2000080
126#define INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIGN_UPDATE 0xC2000081
127#define INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIGN_FINALIZE 0xC2000082
128#define INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIGN_SMMU_UPDATE 0x42000095
129#define INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIGN_SMMU_FINALIZE 0x42000096
130#define INTEL_SIP_SMC_FCS_ECDSA_HASH_SIG_VERIFY_INIT 0xC2000083
131#define INTEL_SIP_SMC_FCS_ECDSA_HASH_SIG_VERIFY_FINALIZE 0xC2000085
132#define INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIG_VERIFY_INIT 0xC2000086
133#define INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIG_VERIFY_UPDATE 0xC2000087
134#define INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIG_VERIFY_FINALIZE 0xC2000088
135#define INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIG_VERIFY_SMMU_UPDATE 0x42000097
136#define INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIG_VERIFY_SMMU_FINALIZE 0x42000098
137#define INTEL_SIP_SMC_FCS_ECDSA_GET_PUBKEY_INIT 0xC2000089
138#define INTEL_SIP_SMC_FCS_ECDSA_GET_PUBKEY_FINALIZE 0xC200008B
139#define INTEL_SIP_SMC_FCS_ECDH_REQUEST_INIT 0xC200008C
140#define INTEL_SIP_SMC_FCS_ECDH_REQUEST_FINALIZE 0xC200008E
Abdul Halim, Muhammad Hadi Asyrafiec164b62020-05-14 14:53:29 +0800141
Jit Loon Lim2bee1732023-05-17 12:26:11 +0800142/* SEU ERR */
143#define INTEL_SIP_SMC_SEU_ERR_STATUS 0xC2000099
144
Sieu Mun Tangdcaab772022-05-11 10:16:40 +0800145#define INTEL_SIP_SMC_FCS_SHA_MODE_MASK 0xF
146#define INTEL_SIP_SMC_FCS_DIGEST_SIZE_MASK 0xF
147#define INTEL_SIP_SMC_FCS_DIGEST_SIZE_OFFSET 4U
148#define INTEL_SIP_SMC_FCS_ECC_ALGO_MASK 0xF
149
Sieu Mun Tangdbcc2cf2022-03-07 12:13:04 +0800150/* ECC DBE */
Sieu Mun Tangdcaab772022-05-11 10:16:40 +0800151#define WARM_RESET_WFI_FLAG BIT(31)
152#define SYSMGR_ECC_DBE_COLD_RST_MASK (SYSMGR_ECC_OCRAM_MASK |\
Sieu Mun Tange7a037f2022-05-10 17:18:19 +0800153 SYSMGR_ECC_DDR0_MASK |\
154 SYSMGR_ECC_DDR1_MASK)
Sieu Mun Tangdbcc2cf2022-03-07 12:13:04 +0800155
Sieu Mun Tangf9cb6572022-04-27 18:24:06 +0800156/* Non-mailbox SMC Call */
Sieu Mun Tangdcaab772022-05-11 10:16:40 +0800157#define INTEL_SIP_SMC_SVC_VERSION 0xC2000200
Sieu Mun Tangf9cb6572022-04-27 18:24:06 +0800158
Sieu Mun Tang044ed482022-05-11 10:45:19 +0800159/**
160 * SMC SiP service function identifier for version 2
161 * Command code from 0x400 ~ 0x4FF
162 */
163
164/* V2: Non-mailbox function identifier */
165#define INTEL_SIP_SMC_V2_GET_SVC_VERSION 0xC2000400
166#define INTEL_SIP_SMC_V2_REG_READ 0xC2000401
167#define INTEL_SIP_SMC_V2_REG_WRITE 0xC2000402
168#define INTEL_SIP_SMC_V2_REG_UPDATE 0xC2000403
169#define INTEL_SIP_SMC_V2_HPS_SET_BRIDGES 0xC2000404
Mahesh Rao1e1c8c42023-05-23 14:33:45 +0800170#define INTEL_SIP_SMC_V2_RSU_UPDATE_ADDR 0xC2000405
Sieu Mun Tang044ed482022-05-11 10:45:19 +0800171
Sieu Mun Tang5d187c02022-05-10 23:26:57 +0800172/* V2: Mailbox function identifier */
173#define INTEL_SIP_SMC_V2_MAILBOX_SEND_COMMAND 0xC2000420
174#define INTEL_SIP_SMC_V2_MAILBOX_POLL_RESPONSE 0xC2000421
175
Hadi Asyrafiab1132f2019-10-22 10:31:45 +0800176/* SMC function IDs for SiP Service queries */
Sieu Mun Tangdcaab772022-05-11 10:16:40 +0800177#define SIP_SVC_CALL_COUNT 0x8200ff00
178#define SIP_SVC_UID 0x8200ff01
179#define SIP_SVC_VERSION 0x8200ff03
Hadi Asyrafiab1132f2019-10-22 10:31:45 +0800180
181/* SiP Service Calls version numbers */
Sieu Mun Tangbd8da632022-09-28 15:58:28 +0800182/*
183 * Increase if there is any backward compatibility impact
184 */
185#define SIP_SVC_VERSION_MAJOR 2
186/*
187 * Increase if there is new SMC function ID being added
188 */
Mahesh Rao1e1c8c42023-05-23 14:33:45 +0800189#define SIP_SVC_VERSION_MINOR 2
Hadi Asyrafiab1132f2019-10-22 10:31:45 +0800190
Abdul Halim, Muhammad Hadi Asyrafi20a07f32020-05-18 11:16:48 +0800191
192/* Structure Definitions */
193struct fpga_config_info {
194 uint32_t addr;
195 int size;
196 int size_written;
197 uint32_t write_requested;
198 int subblocks_sent;
199 int block_number;
200};
201
Sieu Mun Tangc3667602022-05-13 14:55:05 +0800202typedef enum {
203 NO_REQUEST = 0,
204 RECONFIGURATION,
205 BITSTREAM_AUTH
206} config_type;
207
Abdul Halim, Muhammad Hadi Asyrafi20a07f32020-05-18 11:16:48 +0800208/* Function Definitions */
Sieu Mun Tang128d2a72022-05-11 09:49:25 +0800209bool is_size_4_bytes_aligned(uint32_t size);
Abdul Halim, Muhammad Hadi Asyrafi20a07f32020-05-18 11:16:48 +0800210bool is_address_in_ddr_range(uint64_t addr, uint64_t size);
211
Sieu Mun Tangdbcc2cf2022-03-07 12:13:04 +0800212/* ECC DBE */
213bool cold_reset_for_ecc_dbe(void);
214uint32_t intel_ecc_dbe_notification(uint64_t dbe_value);
215
Sieu Mun Tang044ed482022-05-11 10:45:19 +0800216/* Secure register access */
217uint32_t intel_secure_reg_read(uint64_t reg_addr, uint32_t *retval);
218uint32_t intel_secure_reg_write(uint64_t reg_addr, uint32_t val,
219 uint32_t *retval);
220uint32_t intel_secure_reg_update(uint64_t reg_addr, uint32_t mask,
221 uint32_t val, uint32_t *retval);
222
Mahesh Rao1e1c8c42023-05-23 14:33:45 +0800223/* Set RSU update address*/
224uint32_t intel_rsu_update(uint64_t update_address);
225
Sieu Mun Tang82cf5df2022-05-05 17:07:21 +0800226/* Miscellaneous HPS services */
227uint32_t intel_hps_set_bridges(uint64_t enable, uint64_t mask);
228
Sieu Mun Tang044ed482022-05-11 10:45:19 +0800229/* SiP Service handler for version 2 */
230uintptr_t sip_smc_handler_v2(uint32_t smc_fid,
231 u_register_t x1,
232 u_register_t x2,
233 u_register_t x3,
234 u_register_t x4,
235 void *cookie,
236 void *handle,
237 u_register_t flags);
238
Hadi Asyrafiab1132f2019-10-22 10:31:45 +0800239#endif /* SOCFPGA_SIP_SVC_H */