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