me.h 5.7 KB

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