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