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