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