1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * From coreboot soc/intel/broadwell/include/soc/me.h 4 * 5 * Copyright (C) 2014 Google Inc. 6 */ 7 8 #ifndef _asm_arch_me_h 9 #define _asm_arch_me_h 10 11 #include <asm/me_common.h> 12 13 #define ME_INIT_STATUS_SUCCESS_OTHER 3 /* SEE ME9 BWG */ 14 15 #define ME_HSIO_MESSAGE (7 << 28) 16 #define ME_HSIO_CMD_GETHSIOVER 1 17 #define ME_HSIO_CMD_CLOSE 0 18 19 /* 20 * Apparently the GMES register is renamed to HFS2 (or HFSTS2 according 21 * to ME9 BWG). Sadly the PCH EDS and the ME BWG do not match on nomenclature. 22 */ 23 #define PCI_ME_HFS2 0x48 24 /* Infrastructure Progress Values */ 25 #define ME_HFS2_PHASE_ROM 0 26 #define ME_HFS2_PHASE_BUP 1 27 #define ME_HFS2_PHASE_UKERNEL 2 28 #define ME_HFS2_PHASE_POLICY 3 29 #define ME_HFS2_PHASE_MODULE_LOAD 4 30 #define ME_HFS2_PHASE_UNKNOWN 5 31 #define ME_HFS2_PHASE_HOST_COMM 6 32 /* Current State - Based on Infra Progress values. */ 33 /* ROM State */ 34 #define ME_HFS2_STATE_ROM_BEGIN 0 35 #define ME_HFS2_STATE_ROM_DISABLE 6 36 /* BUP State */ 37 #define ME_HFS2_STATE_BUP_INIT 0 38 #define ME_HFS2_STATE_BUP_DIS_HOST_WAKE 1 39 #define ME_HFS2_STATE_BUP_FLOW_DET 4 40 #define ME_HFS2_STATE_BUP_VSCC_ERR 8 41 #define ME_HFS2_STATE_BUP_CHECK_STRAP 0xa 42 #define ME_HFS2_STATE_BUP_PWR_OK_TIMEOUT 0xb 43 #define ME_HFS2_STATE_BUP_MANUF_OVRD_STRAP 0xd 44 #define ME_HFS2_STATE_BUP_M3 0x11 45 #define ME_HFS2_STATE_BUP_M0 0x12 46 #define ME_HFS2_STATE_BUP_FLOW_DET_ERR 0x13 47 #define ME_HFS2_STATE_BUP_M3_CLK_ERR 0x15 48 #define ME_HFS2_STATE_BUP_CPU_RESET_DID_TIMEOUT_MEM_MISSING 0x17 49 #define ME_HFS2_STATE_BUP_M3_KERN_LOAD 0x18 50 #define ME_HFS2_STATE_BUP_T32_MISSING 0x1c 51 #define ME_HFS2_STATE_BUP_WAIT_DID 0x1f 52 #define ME_HFS2_STATE_BUP_WAIT_DID_FAIL 0x20 53 #define ME_HFS2_STATE_BUP_DID_NO_FAIL 0x21 54 #define ME_HFS2_STATE_BUP_ENABLE_UMA 0x22 55 #define ME_HFS2_STATE_BUP_ENABLE_UMA_ERR 0x23 56 #define ME_HFS2_STATE_BUP_SEND_DID_ACK 0x24 57 #define ME_HFS2_STATE_BUP_SEND_DID_ACK_ERR 0x25 58 #define ME_HFS2_STATE_BUP_M0_CLK 0x26 59 #define ME_HFS2_STATE_BUP_M0_CLK_ERR 0x27 60 #define ME_HFS2_STATE_BUP_TEMP_DIS 0x28 61 #define ME_HFS2_STATE_BUP_M0_KERN_LOAD 0x32 62 /* Policy Module State */ 63 #define ME_HFS2_STATE_POLICY_ENTRY 0 64 #define ME_HFS2_STATE_POLICY_RCVD_S3 3 65 #define ME_HFS2_STATE_POLICY_RCVD_S4 4 66 #define ME_HFS2_STATE_POLICY_RCVD_S5 5 67 #define ME_HFS2_STATE_POLICY_RCVD_UPD 6 68 #define ME_HFS2_STATE_POLICY_RCVD_PCR 7 69 #define ME_HFS2_STATE_POLICY_RCVD_NPCR 8 70 #define ME_HFS2_STATE_POLICY_RCVD_HOST_WAKE 9 71 #define ME_HFS2_STATE_POLICY_RCVD_AC_DC 0xa 72 #define ME_HFS2_STATE_POLICY_RCVD_DID 0xb 73 #define ME_HFS2_STATE_POLICY_VSCC_NOT_FOUND 0xc 74 #define ME_HFS2_STATE_POLICY_VSCC_INVALID 0xd 75 #define ME_HFS2_STATE_POLICY_FPB_ERR 0xe 76 #define ME_HFS2_STATE_POLICY_DESCRIPTOR_ERR 0xf 77 #define ME_HFS2_STATE_POLICY_VSCC_NO_MATCH 0x10 78 /* Current PM Event Values */ 79 #define ME_HFS2_PMEVENT_CLEAN_MOFF_MX_WAKE 0 80 #define ME_HFS2_PMEVENT_MOFF_MX_WAKE_ERROR 1 81 #define ME_HFS2_PMEVENT_CLEAN_GLOBAL_RESET 2 82 #define ME_HFS2_PMEVENT_CLEAN_GLOBAL_RESET_ERROR 3 83 #define ME_HFS2_PMEVENT_CLEAN_ME_RESET 4 84 #define ME_HFS2_PMEVENT_ME_RESET_EXCEPTION 5 85 #define ME_HFS2_PMEVENT_PSEUDO_ME_RESET 6 86 #define ME_HFS2_PMEVENT_S0MO_SXM3 7 87 #define ME_HFS2_PMEVENT_SXM3_S0M0 8 88 #define ME_HFS2_PMEVENT_NON_PWR_CYCLE_RESET 9 89 #define ME_HFS2_PMEVENT_PWR_CYCLE_RESET_M3 0xa 90 #define ME_HFS2_PMEVENT_PWR_CYCLE_RESET_MOFF 0xb 91 #define ME_HFS2_PMEVENT_SXMX_SXMOFF 0xc 92 93 struct me_hfs2 { 94 u32 bist_in_progress:1; 95 u32 reserved1:2; 96 u32 invoke_mebx:1; 97 u32 cpu_replaced_sts:1; 98 u32 mbp_rdy:1; 99 u32 mfs_failure:1; 100 u32 warm_reset_request:1; 101 u32 cpu_replaced_valid:1; 102 u32 reserved2:4; 103 u32 mbp_cleared:1; 104 u32 reserved3:2; 105 u32 current_state:8; 106 u32 current_pmevent:4; 107 u32 progress_code:4; 108 } __packed; 109 110 #define PCI_ME_HFS5 0x68 111 112 #define PCI_ME_H_GS2 0x70 113 #define PCI_ME_MBP_GIVE_UP 0x01 114 115 /* ICC Messages */ 116 #define ICC_SET_CLOCK_ENABLES 0x3 117 #define ICC_API_VERSION_LYNXPOINT 0x00030000 118 119 struct icc_header { 120 u32 api_version; 121 u32 icc_command; 122 u32 icc_status; 123 u32 length; 124 u32 reserved; 125 } __packed; 126 127 struct icc_clock_enables_msg { 128 u32 clock_enables; 129 u32 clock_mask; 130 u32 no_response:1; 131 u32 reserved:31; 132 } __packed; 133 134 /* 135 * ME to BIOS Payload Datastructures and definitions. The ordering of the 136 * structures follows the ordering in the ME9 BWG. 137 */ 138 139 #define MBP_APPID_KERNEL 1 140 #define MBP_APPID_INTEL_AT 3 141 #define MBP_APPID_HWA 4 142 #define MBP_APPID_ICC 5 143 #define MBP_APPID_NFC 6 144 /* Kernel items: */ 145 #define MBP_KERNEL_FW_VER_ITEM 1 146 #define MBP_KERNEL_FW_CAP_ITEM 2 147 #define MBP_KERNEL_ROM_BIST_ITEM 3 148 #define MBP_KERNEL_PLAT_KEY_ITEM 4 149 #define MBP_KERNEL_FW_TYPE_ITEM 5 150 #define MBP_KERNEL_MFS_FAILURE_ITEM 6 151 #define MBP_KERNEL_PLAT_TIME_ITEM 7 152 /* Intel AT items: */ 153 #define MBP_INTEL_AT_STATE_ITEM 1 154 /* ICC Items: */ 155 #define MBP_ICC_PROFILE_ITEM 1 156 /* HWA Items: */ 157 #define MBP_HWA_REQUEST_ITEM 1 158 /* NFC Items: */ 159 #define MBP_NFC_SUPPORT_DATA_ITEM 1 160 161 #define MBP_MAKE_IDENT(appid, item) ((appid << 8) | item) 162 #define MBP_IDENT(appid, item) \ 163 MBP_MAKE_IDENT(MBP_APPID_##appid, MBP_##appid##_##item##_ITEM) 164 165 struct mbp_fw_version_name { 166 u32 major_version:16; 167 u32 minor_version:16; 168 u32 hotfix_version:16; 169 u32 build_version:16; 170 } __packed; 171 172 struct icc_address_mask { 173 u16 icc_start_address; 174 u16 mask; 175 } __packed; 176 177 struct mbp_icc_profile { 178 u8 num_icc_profiles; 179 u8 icc_profile_soft_strap; 180 u8 icc_profile_index; 181 u8 reserved; 182 u32 icc_reg_bundles; 183 struct icc_address_mask icc_address_mask[0]; 184 } __packed; 185 186 struct me_bios_payload { 187 struct mbp_fw_version_name *fw_version_name; 188 struct mbp_mefwcaps *fw_capabilities; 189 struct mbp_rom_bist_data *rom_bist_data; 190 struct mbp_platform_key *platform_key; 191 struct mbp_plat_type *fw_plat_type; 192 struct mbp_icc_profile *icc_profile; 193 struct mbp_at_state *at_state; 194 u32 *mfsintegrity; 195 struct mbp_plat_time *plat_time; 196 struct mbp_nfc_data *nfc_data; 197 }; 198 199 #endif 200