xref: /OK3568_Linux_fs/kernel/drivers/misc/mei/hw-txe-regs.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (c) 2013-2014, Intel Corporation. All rights reserved.
4*4882a593Smuzhiyun  * Intel Management Engine Interface (Intel MEI) Linux driver
5*4882a593Smuzhiyun  */
6*4882a593Smuzhiyun #ifndef _MEI_HW_TXE_REGS_H_
7*4882a593Smuzhiyun #define _MEI_HW_TXE_REGS_H_
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun #include "hw.h"
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #define SEC_ALIVENESS_TIMER_TIMEOUT        (5 * MSEC_PER_SEC)
12*4882a593Smuzhiyun #define SEC_ALIVENESS_WAIT_TIMEOUT         (1 * MSEC_PER_SEC)
13*4882a593Smuzhiyun #define SEC_RESET_WAIT_TIMEOUT             (1 * MSEC_PER_SEC)
14*4882a593Smuzhiyun #define SEC_READY_WAIT_TIMEOUT             (5 * MSEC_PER_SEC)
15*4882a593Smuzhiyun #define START_MESSAGE_RESPONSE_WAIT_TIMEOUT (5 * MSEC_PER_SEC)
16*4882a593Smuzhiyun #define RESET_CANCEL_WAIT_TIMEOUT          (1 * MSEC_PER_SEC)
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun enum {
19*4882a593Smuzhiyun 	SEC_BAR,
20*4882a593Smuzhiyun 	BRIDGE_BAR,
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun 	NUM_OF_MEM_BARS
23*4882a593Smuzhiyun };
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun /* SeC FW Status Register
26*4882a593Smuzhiyun  *
27*4882a593Smuzhiyun  * FW uses this register in order to report its status to host.
28*4882a593Smuzhiyun  * This register resides in PCI-E config space.
29*4882a593Smuzhiyun  */
30*4882a593Smuzhiyun #define PCI_CFG_TXE_FW_STS0   0x40
31*4882a593Smuzhiyun #  define PCI_CFG_TXE_FW_STS0_WRK_ST_MSK    0x0000000F
32*4882a593Smuzhiyun #  define PCI_CFG_TXE_FW_STS0_OP_ST_MSK     0x000001C0
33*4882a593Smuzhiyun #  define PCI_CFG_TXE_FW_STS0_FW_INIT_CMPLT 0x00000200
34*4882a593Smuzhiyun #  define PCI_CFG_TXE_FW_STS0_ERR_CODE_MSK  0x0000F000
35*4882a593Smuzhiyun #  define PCI_CFG_TXE_FW_STS0_OP_MODE_MSK   0x000F0000
36*4882a593Smuzhiyun #  define PCI_CFG_TXE_FW_STS0_RST_CNT_MSK   0x00F00000
37*4882a593Smuzhiyun #define PCI_CFG_TXE_FW_STS1   0x48
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun #define IPC_BASE_ADDR	0x80400 /* SeC IPC Base Address */
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun /* IPC Input Doorbell Register */
42*4882a593Smuzhiyun #define SEC_IPC_INPUT_DOORBELL_REG       (0x0000 + IPC_BASE_ADDR)
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun /* IPC Input Status Register
45*4882a593Smuzhiyun  * This register indicates whether or not processing of
46*4882a593Smuzhiyun  * the most recent command has been completed by the SEC
47*4882a593Smuzhiyun  * New commands and payloads should not be written by the Host
48*4882a593Smuzhiyun  * until this indicates that the previous command has been processed.
49*4882a593Smuzhiyun  */
50*4882a593Smuzhiyun #define SEC_IPC_INPUT_STATUS_REG         (0x0008 + IPC_BASE_ADDR)
51*4882a593Smuzhiyun #  define SEC_IPC_INPUT_STATUS_RDY    BIT(0)
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun /* IPC Host Interrupt Status Register */
54*4882a593Smuzhiyun #define SEC_IPC_HOST_INT_STATUS_REG      (0x0010 + IPC_BASE_ADDR)
55*4882a593Smuzhiyun #define   SEC_IPC_HOST_INT_STATUS_OUT_DB             BIT(0)
56*4882a593Smuzhiyun #define   SEC_IPC_HOST_INT_STATUS_IN_RDY             BIT(1)
57*4882a593Smuzhiyun #define   SEC_IPC_HOST_INT_STATUS_HDCP_M0_RCVD       BIT(5)
58*4882a593Smuzhiyun #define   SEC_IPC_HOST_INT_STATUS_ILL_MEM_ACCESS     BIT(17)
59*4882a593Smuzhiyun #define   SEC_IPC_HOST_INT_STATUS_AES_HKEY_ERR       BIT(18)
60*4882a593Smuzhiyun #define   SEC_IPC_HOST_INT_STATUS_DES_HKEY_ERR       BIT(19)
61*4882a593Smuzhiyun #define   SEC_IPC_HOST_INT_STATUS_TMRMTB_OVERFLOW    BIT(21)
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun /* Convenient mask for pending interrupts */
64*4882a593Smuzhiyun #define   SEC_IPC_HOST_INT_STATUS_PENDING \
65*4882a593Smuzhiyun 		(SEC_IPC_HOST_INT_STATUS_OUT_DB| \
66*4882a593Smuzhiyun 		SEC_IPC_HOST_INT_STATUS_IN_RDY)
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun /* IPC Host Interrupt Mask Register */
69*4882a593Smuzhiyun #define SEC_IPC_HOST_INT_MASK_REG        (0x0014 + IPC_BASE_ADDR)
70*4882a593Smuzhiyun 
71*4882a593Smuzhiyun #  define SEC_IPC_HOST_INT_MASK_OUT_DB	BIT(0) /* Output Doorbell Int Mask */
72*4882a593Smuzhiyun #  define SEC_IPC_HOST_INT_MASK_IN_RDY	BIT(1) /* Input Ready Int Mask */
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun /* IPC Input Payload RAM */
75*4882a593Smuzhiyun #define SEC_IPC_INPUT_PAYLOAD_REG        (0x0100 + IPC_BASE_ADDR)
76*4882a593Smuzhiyun /* IPC Shared Payload RAM */
77*4882a593Smuzhiyun #define IPC_SHARED_PAYLOAD_REG           (0x0200 + IPC_BASE_ADDR)
78*4882a593Smuzhiyun 
79*4882a593Smuzhiyun /* SeC Address Translation Table Entry 2 - Ctrl
80*4882a593Smuzhiyun  *
81*4882a593Smuzhiyun  * This register resides also in SeC's PCI-E Memory space.
82*4882a593Smuzhiyun  */
83*4882a593Smuzhiyun #define SATT2_CTRL_REG                   0x1040
84*4882a593Smuzhiyun #  define SATT2_CTRL_VALID_MSK            BIT(0)
85*4882a593Smuzhiyun #  define SATT2_CTRL_BR_BASE_ADDR_REG_SHIFT 8
86*4882a593Smuzhiyun #  define SATT2_CTRL_BRIDGE_HOST_EN_MSK   BIT(12)
87*4882a593Smuzhiyun 
88*4882a593Smuzhiyun /* SATT Table Entry 2 SAP Base Address Register */
89*4882a593Smuzhiyun #define SATT2_SAP_BA_REG                 0x1044
90*4882a593Smuzhiyun /* SATT Table Entry 2 SAP Size Register. */
91*4882a593Smuzhiyun #define SATT2_SAP_SIZE_REG               0x1048
92*4882a593Smuzhiyun  /* SATT Table Entry 2 SAP Bridge Address - LSB Register */
93*4882a593Smuzhiyun #define SATT2_BRG_BA_LSB_REG             0x104C
94*4882a593Smuzhiyun 
95*4882a593Smuzhiyun /* Host High-level Interrupt Status Register */
96*4882a593Smuzhiyun #define HHISR_REG                        0x2020
97*4882a593Smuzhiyun /* Host High-level Interrupt Enable Register
98*4882a593Smuzhiyun  *
99*4882a593Smuzhiyun  * Resides in PCI memory space. This is the top hierarchy for
100*4882a593Smuzhiyun  * interrupts from SeC to host, aggregating both interrupts that
101*4882a593Smuzhiyun  * arrive through HICR registers as well as interrupts
102*4882a593Smuzhiyun  * that arrive via IPC.
103*4882a593Smuzhiyun  */
104*4882a593Smuzhiyun #define HHIER_REG                        0x2024
105*4882a593Smuzhiyun #define   IPC_HHIER_SEC	BIT(0)
106*4882a593Smuzhiyun #define   IPC_HHIER_BRIDGE	BIT(1)
107*4882a593Smuzhiyun #define   IPC_HHIER_MSK	(IPC_HHIER_SEC | IPC_HHIER_BRIDGE)
108*4882a593Smuzhiyun 
109*4882a593Smuzhiyun /* Host High-level Interrupt Mask Register.
110*4882a593Smuzhiyun  *
111*4882a593Smuzhiyun  * Resides in PCI memory space.
112*4882a593Smuzhiyun  * This is the top hierarchy for masking interrupts from SeC to host.
113*4882a593Smuzhiyun  */
114*4882a593Smuzhiyun #define HHIMR_REG                        0x2028
115*4882a593Smuzhiyun #define   IPC_HHIMR_SEC       BIT(0)
116*4882a593Smuzhiyun #define   IPC_HHIMR_BRIDGE    BIT(1)
117*4882a593Smuzhiyun 
118*4882a593Smuzhiyun /* Host High-level IRQ Status Register */
119*4882a593Smuzhiyun #define HHIRQSR_REG                      0x202C
120*4882a593Smuzhiyun 
121*4882a593Smuzhiyun /* Host Interrupt Cause Register 0 - SeC IPC Readiness
122*4882a593Smuzhiyun  *
123*4882a593Smuzhiyun  * This register is both an ICR to Host from PCI Memory Space
124*4882a593Smuzhiyun  * and it is also exposed in the SeC memory space.
125*4882a593Smuzhiyun  * This register is used by SeC's IPC driver in order
126*4882a593Smuzhiyun  * to synchronize with host about IPC interface state.
127*4882a593Smuzhiyun  */
128*4882a593Smuzhiyun #define HICR_SEC_IPC_READINESS_REG       0x2040
129*4882a593Smuzhiyun #define   HICR_SEC_IPC_READINESS_HOST_RDY  BIT(0)
130*4882a593Smuzhiyun #define   HICR_SEC_IPC_READINESS_SEC_RDY   BIT(1)
131*4882a593Smuzhiyun #define   HICR_SEC_IPC_READINESS_SYS_RDY     \
132*4882a593Smuzhiyun 	  (HICR_SEC_IPC_READINESS_HOST_RDY | \
133*4882a593Smuzhiyun 	   HICR_SEC_IPC_READINESS_SEC_RDY)
134*4882a593Smuzhiyun #define   HICR_SEC_IPC_READINESS_RDY_CLR   BIT(2)
135*4882a593Smuzhiyun 
136*4882a593Smuzhiyun /* Host Interrupt Cause Register 1 - Aliveness Response */
137*4882a593Smuzhiyun /* This register is both an ICR to Host from PCI Memory Space
138*4882a593Smuzhiyun  * and it is also exposed in the SeC memory space.
139*4882a593Smuzhiyun  * The register may be used by SeC to ACK a host request for aliveness.
140*4882a593Smuzhiyun  */
141*4882a593Smuzhiyun #define HICR_HOST_ALIVENESS_RESP_REG     0x2044
142*4882a593Smuzhiyun #define   HICR_HOST_ALIVENESS_RESP_ACK    BIT(0)
143*4882a593Smuzhiyun 
144*4882a593Smuzhiyun /* Host Interrupt Cause Register 2 - SeC IPC Output Doorbell */
145*4882a593Smuzhiyun #define HICR_SEC_IPC_OUTPUT_DOORBELL_REG 0x2048
146*4882a593Smuzhiyun 
147*4882a593Smuzhiyun /* Host Interrupt Status Register.
148*4882a593Smuzhiyun  *
149*4882a593Smuzhiyun  * Resides in PCI memory space.
150*4882a593Smuzhiyun  * This is the main register involved in generating interrupts
151*4882a593Smuzhiyun  * from SeC to host via HICRs.
152*4882a593Smuzhiyun  * The interrupt generation rules are as follows:
153*4882a593Smuzhiyun  * An interrupt will be generated whenever for any i,
154*4882a593Smuzhiyun  * there is a transition from a state where at least one of
155*4882a593Smuzhiyun  * the following conditions did not hold, to a state where
156*4882a593Smuzhiyun  * ALL the following conditions hold:
157*4882a593Smuzhiyun  * A) HISR.INT[i]_STS == 1.
158*4882a593Smuzhiyun  * B) HIER.INT[i]_EN == 1.
159*4882a593Smuzhiyun  */
160*4882a593Smuzhiyun #define HISR_REG                         0x2060
161*4882a593Smuzhiyun #define   HISR_INT_0_STS      BIT(0)
162*4882a593Smuzhiyun #define   HISR_INT_1_STS      BIT(1)
163*4882a593Smuzhiyun #define   HISR_INT_2_STS      BIT(2)
164*4882a593Smuzhiyun #define   HISR_INT_3_STS      BIT(3)
165*4882a593Smuzhiyun #define   HISR_INT_4_STS      BIT(4)
166*4882a593Smuzhiyun #define   HISR_INT_5_STS      BIT(5)
167*4882a593Smuzhiyun #define   HISR_INT_6_STS      BIT(6)
168*4882a593Smuzhiyun #define   HISR_INT_7_STS      BIT(7)
169*4882a593Smuzhiyun #define   HISR_INT_STS_MSK \
170*4882a593Smuzhiyun 	(HISR_INT_0_STS | HISR_INT_1_STS | HISR_INT_2_STS)
171*4882a593Smuzhiyun 
172*4882a593Smuzhiyun /* Host Interrupt Enable Register. Resides in PCI memory space. */
173*4882a593Smuzhiyun #define HIER_REG                         0x2064
174*4882a593Smuzhiyun #define   HIER_INT_0_EN      BIT(0)
175*4882a593Smuzhiyun #define   HIER_INT_1_EN      BIT(1)
176*4882a593Smuzhiyun #define   HIER_INT_2_EN      BIT(2)
177*4882a593Smuzhiyun #define   HIER_INT_3_EN      BIT(3)
178*4882a593Smuzhiyun #define   HIER_INT_4_EN      BIT(4)
179*4882a593Smuzhiyun #define   HIER_INT_5_EN      BIT(5)
180*4882a593Smuzhiyun #define   HIER_INT_6_EN      BIT(6)
181*4882a593Smuzhiyun #define   HIER_INT_7_EN      BIT(7)
182*4882a593Smuzhiyun 
183*4882a593Smuzhiyun #define   HIER_INT_EN_MSK \
184*4882a593Smuzhiyun 	 (HIER_INT_0_EN | HIER_INT_1_EN | HIER_INT_2_EN)
185*4882a593Smuzhiyun 
186*4882a593Smuzhiyun 
187*4882a593Smuzhiyun /* SEC Memory Space IPC output payload.
188*4882a593Smuzhiyun  *
189*4882a593Smuzhiyun  * This register is part of the output payload which SEC provides to host.
190*4882a593Smuzhiyun  */
191*4882a593Smuzhiyun #define BRIDGE_IPC_OUTPUT_PAYLOAD_REG    0x20C0
192*4882a593Smuzhiyun 
193*4882a593Smuzhiyun /* SeC Interrupt Cause Register - Host Aliveness Request
194*4882a593Smuzhiyun  * This register is both an ICR to SeC and it is also exposed
195*4882a593Smuzhiyun  * in the host-visible PCI memory space.
196*4882a593Smuzhiyun  * The register is used by host to request SeC aliveness.
197*4882a593Smuzhiyun  */
198*4882a593Smuzhiyun #define SICR_HOST_ALIVENESS_REQ_REG      0x214C
199*4882a593Smuzhiyun #define   SICR_HOST_ALIVENESS_REQ_REQUESTED    BIT(0)
200*4882a593Smuzhiyun 
201*4882a593Smuzhiyun 
202*4882a593Smuzhiyun /* SeC Interrupt Cause Register - Host IPC Readiness
203*4882a593Smuzhiyun  *
204*4882a593Smuzhiyun  * This register is both an ICR to SeC and it is also exposed
205*4882a593Smuzhiyun  * in the host-visible PCI memory space.
206*4882a593Smuzhiyun  * This register is used by the host's SeC driver uses in order
207*4882a593Smuzhiyun  * to synchronize with SeC about IPC interface state.
208*4882a593Smuzhiyun  */
209*4882a593Smuzhiyun #define SICR_HOST_IPC_READINESS_REQ_REG  0x2150
210*4882a593Smuzhiyun 
211*4882a593Smuzhiyun 
212*4882a593Smuzhiyun #define SICR_HOST_IPC_READINESS_HOST_RDY  BIT(0)
213*4882a593Smuzhiyun #define SICR_HOST_IPC_READINESS_SEC_RDY   BIT(1)
214*4882a593Smuzhiyun #define SICR_HOST_IPC_READINESS_SYS_RDY     \
215*4882a593Smuzhiyun 	(SICR_HOST_IPC_READINESS_HOST_RDY | \
216*4882a593Smuzhiyun 	 SICR_HOST_IPC_READINESS_SEC_RDY)
217*4882a593Smuzhiyun #define SICR_HOST_IPC_READINESS_RDY_CLR   BIT(2)
218*4882a593Smuzhiyun 
219*4882a593Smuzhiyun /* SeC Interrupt Cause Register - SeC IPC Output Status
220*4882a593Smuzhiyun  *
221*4882a593Smuzhiyun  * This register indicates whether or not processing of the most recent
222*4882a593Smuzhiyun  * command has been completed by the Host.
223*4882a593Smuzhiyun  * New commands and payloads should not be written by SeC until this
224*4882a593Smuzhiyun  * register indicates that the previous command has been processed.
225*4882a593Smuzhiyun  */
226*4882a593Smuzhiyun #define SICR_SEC_IPC_OUTPUT_STATUS_REG   0x2154
227*4882a593Smuzhiyun #  define SEC_IPC_OUTPUT_STATUS_RDY BIT(0)
228*4882a593Smuzhiyun 
229*4882a593Smuzhiyun 
230*4882a593Smuzhiyun 
231*4882a593Smuzhiyun /*  MEI IPC Message payload size 64 bytes */
232*4882a593Smuzhiyun #define PAYLOAD_SIZE        64
233*4882a593Smuzhiyun 
234*4882a593Smuzhiyun /* MAX size for SATT range 32MB */
235*4882a593Smuzhiyun #define SATT_RANGE_MAX     (32 << 20)
236*4882a593Smuzhiyun 
237*4882a593Smuzhiyun 
238*4882a593Smuzhiyun #endif /* _MEI_HW_TXE_REGS_H_ */
239*4882a593Smuzhiyun 
240