1*5e8ce833SSrujana Challa /* SPDX-License-Identifier: GPL-2.0-only
2*5e8ce833SSrujana Challa  * Copyright (C) 2020 Marvell.
3*5e8ce833SSrujana Challa  */
4*5e8ce833SSrujana Challa 
5*5e8ce833SSrujana Challa #ifndef __OTX2_CPT_HW_TYPES_H
6*5e8ce833SSrujana Challa #define __OTX2_CPT_HW_TYPES_H
7*5e8ce833SSrujana Challa 
8*5e8ce833SSrujana Challa #include <linux/types.h>
9*5e8ce833SSrujana Challa 
10*5e8ce833SSrujana Challa /* Device IDs */
11*5e8ce833SSrujana Challa #define OTX2_CPT_PCI_PF_DEVICE_ID 0xA0FD
12*5e8ce833SSrujana Challa #define OTX2_CPT_PCI_VF_DEVICE_ID 0xA0FE
13*5e8ce833SSrujana Challa 
14*5e8ce833SSrujana Challa /* Mailbox interrupts offset */
15*5e8ce833SSrujana Challa #define OTX2_CPT_PF_MBOX_INT	6
16*5e8ce833SSrujana Challa #define OTX2_CPT_PF_INT_VEC_E_MBOXX(x, a) ((x) + (a))
17*5e8ce833SSrujana Challa 
18*5e8ce833SSrujana Challa /* Maximum supported microcode groups */
19*5e8ce833SSrujana Challa #define OTX2_CPT_MAX_ENGINE_GROUPS 8
20*5e8ce833SSrujana Challa 
21*5e8ce833SSrujana Challa /* CPT instruction size in bytes */
22*5e8ce833SSrujana Challa #define OTX2_CPT_INST_SIZE	64
23*5e8ce833SSrujana Challa /*
24*5e8ce833SSrujana Challa  * CPT VF MSIX vectors and their offsets
25*5e8ce833SSrujana Challa  */
26*5e8ce833SSrujana Challa #define OTX2_CPT_VF_MSIX_VECTORS 1
27*5e8ce833SSrujana Challa #define OTX2_CPT_VF_INTR_MBOX_MASK BIT(0)
28*5e8ce833SSrujana Challa 
29*5e8ce833SSrujana Challa /* CPT LF MSIX vectors */
30*5e8ce833SSrujana Challa #define OTX2_CPT_LF_MSIX_VECTORS 2
31*5e8ce833SSrujana Challa 
32*5e8ce833SSrujana Challa /* OcteonTX2 CPT PF registers */
33*5e8ce833SSrujana Challa #define OTX2_CPT_PF_CONSTANTS           (0x0)
34*5e8ce833SSrujana Challa #define OTX2_CPT_PF_RESET               (0x100)
35*5e8ce833SSrujana Challa #define OTX2_CPT_PF_DIAG                (0x120)
36*5e8ce833SSrujana Challa #define OTX2_CPT_PF_BIST_STATUS         (0x160)
37*5e8ce833SSrujana Challa #define OTX2_CPT_PF_ECC0_CTL            (0x200)
38*5e8ce833SSrujana Challa #define OTX2_CPT_PF_ECC0_FLIP           (0x210)
39*5e8ce833SSrujana Challa #define OTX2_CPT_PF_ECC0_INT            (0x220)
40*5e8ce833SSrujana Challa #define OTX2_CPT_PF_ECC0_INT_W1S        (0x230)
41*5e8ce833SSrujana Challa #define OTX2_CPT_PF_ECC0_ENA_W1S        (0x240)
42*5e8ce833SSrujana Challa #define OTX2_CPT_PF_ECC0_ENA_W1C        (0x250)
43*5e8ce833SSrujana Challa #define OTX2_CPT_PF_MBOX_INTX(b)        (0x400 | (b) << 3)
44*5e8ce833SSrujana Challa #define OTX2_CPT_PF_MBOX_INT_W1SX(b)    (0x420 | (b) << 3)
45*5e8ce833SSrujana Challa #define OTX2_CPT_PF_MBOX_ENA_W1CX(b)    (0x440 | (b) << 3)
46*5e8ce833SSrujana Challa #define OTX2_CPT_PF_MBOX_ENA_W1SX(b)    (0x460 | (b) << 3)
47*5e8ce833SSrujana Challa #define OTX2_CPT_PF_EXEC_INT            (0x500)
48*5e8ce833SSrujana Challa #define OTX2_CPT_PF_EXEC_INT_W1S        (0x520)
49*5e8ce833SSrujana Challa #define OTX2_CPT_PF_EXEC_ENA_W1C        (0x540)
50*5e8ce833SSrujana Challa #define OTX2_CPT_PF_EXEC_ENA_W1S        (0x560)
51*5e8ce833SSrujana Challa #define OTX2_CPT_PF_GX_EN(b)            (0x600 | (b) << 3)
52*5e8ce833SSrujana Challa #define OTX2_CPT_PF_EXEC_INFO           (0x700)
53*5e8ce833SSrujana Challa #define OTX2_CPT_PF_EXEC_BUSY           (0x800)
54*5e8ce833SSrujana Challa #define OTX2_CPT_PF_EXEC_INFO0          (0x900)
55*5e8ce833SSrujana Challa #define OTX2_CPT_PF_EXEC_INFO1          (0x910)
56*5e8ce833SSrujana Challa #define OTX2_CPT_PF_INST_REQ_PC         (0x10000)
57*5e8ce833SSrujana Challa #define OTX2_CPT_PF_INST_LATENCY_PC     (0x10020)
58*5e8ce833SSrujana Challa #define OTX2_CPT_PF_RD_REQ_PC           (0x10040)
59*5e8ce833SSrujana Challa #define OTX2_CPT_PF_RD_LATENCY_PC       (0x10060)
60*5e8ce833SSrujana Challa #define OTX2_CPT_PF_RD_UC_PC            (0x10080)
61*5e8ce833SSrujana Challa #define OTX2_CPT_PF_ACTIVE_CYCLES_PC    (0x10100)
62*5e8ce833SSrujana Challa #define OTX2_CPT_PF_EXE_CTL             (0x4000000)
63*5e8ce833SSrujana Challa #define OTX2_CPT_PF_EXE_STATUS          (0x4000008)
64*5e8ce833SSrujana Challa #define OTX2_CPT_PF_EXE_CLK             (0x4000010)
65*5e8ce833SSrujana Challa #define OTX2_CPT_PF_EXE_DBG_CTL         (0x4000018)
66*5e8ce833SSrujana Challa #define OTX2_CPT_PF_EXE_DBG_DATA        (0x4000020)
67*5e8ce833SSrujana Challa #define OTX2_CPT_PF_EXE_BIST_STATUS     (0x4000028)
68*5e8ce833SSrujana Challa #define OTX2_CPT_PF_EXE_REQ_TIMER       (0x4000030)
69*5e8ce833SSrujana Challa #define OTX2_CPT_PF_EXE_MEM_CTL         (0x4000038)
70*5e8ce833SSrujana Challa #define OTX2_CPT_PF_EXE_PERF_CTL        (0x4001000)
71*5e8ce833SSrujana Challa #define OTX2_CPT_PF_EXE_DBG_CNTX(b)     (0x4001100 | (b) << 3)
72*5e8ce833SSrujana Challa #define OTX2_CPT_PF_EXE_PERF_EVENT_CNT  (0x4001180)
73*5e8ce833SSrujana Challa #define OTX2_CPT_PF_EXE_EPCI_INBX_CNT(b)  (0x4001200 | (b) << 3)
74*5e8ce833SSrujana Challa #define OTX2_CPT_PF_EXE_EPCI_OUTBX_CNT(b) (0x4001240 | (b) << 3)
75*5e8ce833SSrujana Challa #define OTX2_CPT_PF_ENGX_UCODE_BASE(b)  (0x4002000 | (b) << 3)
76*5e8ce833SSrujana Challa #define OTX2_CPT_PF_QX_CTL(b)           (0x8000000 | (b) << 20)
77*5e8ce833SSrujana Challa #define OTX2_CPT_PF_QX_GMCTL(b)         (0x8000020 | (b) << 20)
78*5e8ce833SSrujana Challa #define OTX2_CPT_PF_QX_CTL2(b)          (0x8000100 | (b) << 20)
79*5e8ce833SSrujana Challa #define OTX2_CPT_PF_VFX_MBOXX(b, c)     (0x8001000 | (b) << 20 | \
80*5e8ce833SSrujana Challa 					 (c) << 8)
81*5e8ce833SSrujana Challa 
82*5e8ce833SSrujana Challa /* OcteonTX2 CPT LF registers */
83*5e8ce833SSrujana Challa #define OTX2_CPT_LF_CTL                 (0x10)
84*5e8ce833SSrujana Challa #define OTX2_CPT_LF_DONE_WAIT           (0x30)
85*5e8ce833SSrujana Challa #define OTX2_CPT_LF_INPROG              (0x40)
86*5e8ce833SSrujana Challa #define OTX2_CPT_LF_DONE                (0x50)
87*5e8ce833SSrujana Challa #define OTX2_CPT_LF_DONE_ACK            (0x60)
88*5e8ce833SSrujana Challa #define OTX2_CPT_LF_DONE_INT_ENA_W1S    (0x90)
89*5e8ce833SSrujana Challa #define OTX2_CPT_LF_DONE_INT_ENA_W1C    (0xa0)
90*5e8ce833SSrujana Challa #define OTX2_CPT_LF_MISC_INT            (0xb0)
91*5e8ce833SSrujana Challa #define OTX2_CPT_LF_MISC_INT_W1S        (0xc0)
92*5e8ce833SSrujana Challa #define OTX2_CPT_LF_MISC_INT_ENA_W1S    (0xd0)
93*5e8ce833SSrujana Challa #define OTX2_CPT_LF_MISC_INT_ENA_W1C    (0xe0)
94*5e8ce833SSrujana Challa #define OTX2_CPT_LF_Q_BASE              (0xf0)
95*5e8ce833SSrujana Challa #define OTX2_CPT_LF_Q_SIZE              (0x100)
96*5e8ce833SSrujana Challa #define OTX2_CPT_LF_Q_INST_PTR          (0x110)
97*5e8ce833SSrujana Challa #define OTX2_CPT_LF_Q_GRP_PTR           (0x120)
98*5e8ce833SSrujana Challa #define OTX2_CPT_LF_NQX(a)              (0x400 | (a) << 3)
99*5e8ce833SSrujana Challa #define OTX2_CPT_RVU_FUNC_BLKADDR_SHIFT 20
100*5e8ce833SSrujana Challa /* LMT LF registers */
101*5e8ce833SSrujana Challa #define OTX2_CPT_LMT_LFBASE             BIT_ULL(OTX2_CPT_RVU_FUNC_BLKADDR_SHIFT)
102*5e8ce833SSrujana Challa #define OTX2_CPT_LMT_LF_LMTLINEX(a)     (OTX2_CPT_LMT_LFBASE | 0x000 | \
103*5e8ce833SSrujana Challa 					 (a) << 12)
104*5e8ce833SSrujana Challa /* RVU VF registers */
105*5e8ce833SSrujana Challa #define OTX2_RVU_VF_INT                 (0x20)
106*5e8ce833SSrujana Challa #define OTX2_RVU_VF_INT_W1S             (0x28)
107*5e8ce833SSrujana Challa #define OTX2_RVU_VF_INT_ENA_W1S         (0x30)
108*5e8ce833SSrujana Challa #define OTX2_RVU_VF_INT_ENA_W1C         (0x38)
109*5e8ce833SSrujana Challa 
110*5e8ce833SSrujana Challa /*
111*5e8ce833SSrujana Challa  * Enumeration otx2_cpt_ucode_error_code_e
112*5e8ce833SSrujana Challa  *
113*5e8ce833SSrujana Challa  * Enumerates ucode errors
114*5e8ce833SSrujana Challa  */
115*5e8ce833SSrujana Challa enum otx2_cpt_ucode_comp_code_e {
116*5e8ce833SSrujana Challa 	OTX2_CPT_UCC_SUCCESS = 0x00,
117*5e8ce833SSrujana Challa 	OTX2_CPT_UCC_INVALID_OPCODE = 0x01,
118*5e8ce833SSrujana Challa 
119*5e8ce833SSrujana Challa 	/* Scatter gather */
120*5e8ce833SSrujana Challa 	OTX2_CPT_UCC_SG_WRITE_LENGTH = 0x02,
121*5e8ce833SSrujana Challa 	OTX2_CPT_UCC_SG_LIST = 0x03,
122*5e8ce833SSrujana Challa 	OTX2_CPT_UCC_SG_NOT_SUPPORTED = 0x04,
123*5e8ce833SSrujana Challa 
124*5e8ce833SSrujana Challa };
125*5e8ce833SSrujana Challa 
126*5e8ce833SSrujana Challa /*
127*5e8ce833SSrujana Challa  * Enumeration otx2_cpt_comp_e
128*5e8ce833SSrujana Challa  *
129*5e8ce833SSrujana Challa  * OcteonTX2 CPT Completion Enumeration
130*5e8ce833SSrujana Challa  * Enumerates the values of CPT_RES_S[COMPCODE].
131*5e8ce833SSrujana Challa  */
132*5e8ce833SSrujana Challa enum otx2_cpt_comp_e {
133*5e8ce833SSrujana Challa 	OTX2_CPT_COMP_E_NOTDONE = 0x00,
134*5e8ce833SSrujana Challa 	OTX2_CPT_COMP_E_GOOD = 0x01,
135*5e8ce833SSrujana Challa 	OTX2_CPT_COMP_E_FAULT = 0x02,
136*5e8ce833SSrujana Challa 	OTX2_CPT_COMP_E_HWERR = 0x04,
137*5e8ce833SSrujana Challa 	OTX2_CPT_COMP_E_INSTERR = 0x05,
138*5e8ce833SSrujana Challa 	OTX2_CPT_COMP_E_LAST_ENTRY = 0x06
139*5e8ce833SSrujana Challa };
140*5e8ce833SSrujana Challa 
141*5e8ce833SSrujana Challa /*
142*5e8ce833SSrujana Challa  * Enumeration otx2_cpt_vf_int_vec_e
143*5e8ce833SSrujana Challa  *
144*5e8ce833SSrujana Challa  * OcteonTX2 CPT VF MSI-X Vector Enumeration
145*5e8ce833SSrujana Challa  * Enumerates the MSI-X interrupt vectors.
146*5e8ce833SSrujana Challa  */
147*5e8ce833SSrujana Challa enum otx2_cpt_vf_int_vec_e {
148*5e8ce833SSrujana Challa 	OTX2_CPT_VF_INT_VEC_E_MBOX = 0x00
149*5e8ce833SSrujana Challa };
150*5e8ce833SSrujana Challa 
151*5e8ce833SSrujana Challa /*
152*5e8ce833SSrujana Challa  * Enumeration otx2_cpt_lf_int_vec_e
153*5e8ce833SSrujana Challa  *
154*5e8ce833SSrujana Challa  * OcteonTX2 CPT LF MSI-X Vector Enumeration
155*5e8ce833SSrujana Challa  * Enumerates the MSI-X interrupt vectors.
156*5e8ce833SSrujana Challa  */
157*5e8ce833SSrujana Challa enum otx2_cpt_lf_int_vec_e {
158*5e8ce833SSrujana Challa 	OTX2_CPT_LF_INT_VEC_E_MISC = 0x00,
159*5e8ce833SSrujana Challa 	OTX2_CPT_LF_INT_VEC_E_DONE = 0x01
160*5e8ce833SSrujana Challa };
161*5e8ce833SSrujana Challa 
162*5e8ce833SSrujana Challa /*
163*5e8ce833SSrujana Challa  * Structure otx2_cpt_inst_s
164*5e8ce833SSrujana Challa  *
165*5e8ce833SSrujana Challa  * CPT Instruction Structure
166*5e8ce833SSrujana Challa  * This structure specifies the instruction layout. Instructions are
167*5e8ce833SSrujana Challa  * stored in memory as little-endian unless CPT()_PF_Q()_CTL[INST_BE] is set.
168*5e8ce833SSrujana Challa  * cpt_inst_s_s
169*5e8ce833SSrujana Challa  * Word 0
170*5e8ce833SSrujana Challa  * doneint:1 Done interrupt.
171*5e8ce833SSrujana Challa  *	0 = No interrupts related to this instruction.
172*5e8ce833SSrujana Challa  *	1 = When the instruction completes, CPT()_VQ()_DONE[DONE] will be
173*5e8ce833SSrujana Challa  *	incremented,and based on the rules described there an interrupt may
174*5e8ce833SSrujana Challa  *	occur.
175*5e8ce833SSrujana Challa  * Word 1
176*5e8ce833SSrujana Challa  * res_addr [127: 64] Result IOVA.
177*5e8ce833SSrujana Challa  *	If nonzero, specifies where to write CPT_RES_S.
178*5e8ce833SSrujana Challa  *	If zero, no result structure will be written.
179*5e8ce833SSrujana Challa  *	Address must be 16-byte aligned.
180*5e8ce833SSrujana Challa  *	Bits <63:49> are ignored by hardware; software should use a
181*5e8ce833SSrujana Challa  *	sign-extended bit <48> for forward compatibility.
182*5e8ce833SSrujana Challa  * Word 2
183*5e8ce833SSrujana Challa  *  grp:10 [171:162] If [WQ_PTR] is nonzero, the SSO guest-group to use when
184*5e8ce833SSrujana Challa  *	CPT submits work SSO.
185*5e8ce833SSrujana Challa  *	For the SSO to not discard the add-work request, FPA_PF_MAP() must map
186*5e8ce833SSrujana Challa  *	[GRP] and CPT()_PF_Q()_GMCTL[GMID] as valid.
187*5e8ce833SSrujana Challa  *  tt:2 [161:160] If [WQ_PTR] is nonzero, the SSO tag type to use when CPT
188*5e8ce833SSrujana Challa  *	submits work to SSO
189*5e8ce833SSrujana Challa  *  tag:32 [159:128] If [WQ_PTR] is nonzero, the SSO tag to use when CPT
190*5e8ce833SSrujana Challa  *	submits work to SSO.
191*5e8ce833SSrujana Challa  * Word 3
192*5e8ce833SSrujana Challa  *  wq_ptr [255:192] If [WQ_PTR] is nonzero, it is a pointer to a
193*5e8ce833SSrujana Challa  *	work-queue entry that CPT submits work to SSO after all context,
194*5e8ce833SSrujana Challa  *	output data, and result write operations are visible to other
195*5e8ce833SSrujana Challa  *	CNXXXX units and the cores. Bits <2:0> must be zero.
196*5e8ce833SSrujana Challa  *	Bits <63:49> are ignored by hardware; software should
197*5e8ce833SSrujana Challa  *	use a sign-extended bit <48> for forward compatibility.
198*5e8ce833SSrujana Challa  *	Internal:
199*5e8ce833SSrujana Challa  *	Bits <63:49>, <2:0> are ignored by hardware, treated as always 0x0.
200*5e8ce833SSrujana Challa  * Word 4
201*5e8ce833SSrujana Challa  *  ei0; [319:256] Engine instruction word 0. Passed to the AE/SE.
202*5e8ce833SSrujana Challa  * Word 5
203*5e8ce833SSrujana Challa  *  ei1; [383:320] Engine instruction word 1. Passed to the AE/SE.
204*5e8ce833SSrujana Challa  * Word 6
205*5e8ce833SSrujana Challa  *  ei2; [447:384] Engine instruction word 1. Passed to the AE/SE.
206*5e8ce833SSrujana Challa  * Word 7
207*5e8ce833SSrujana Challa  *  ei3; [511:448] Engine instruction word 1. Passed to the AE/SE.
208*5e8ce833SSrujana Challa  *
209*5e8ce833SSrujana Challa  */
210*5e8ce833SSrujana Challa union otx2_cpt_inst_s {
211*5e8ce833SSrujana Challa 	u64 u[8];
212*5e8ce833SSrujana Challa 
213*5e8ce833SSrujana Challa 	struct {
214*5e8ce833SSrujana Challa 		/* Word 0 */
215*5e8ce833SSrujana Challa 		u64 nixtxl:3;
216*5e8ce833SSrujana Challa 		u64 doneint:1;
217*5e8ce833SSrujana Challa 		u64 nixtx_addr:60;
218*5e8ce833SSrujana Challa 		/* Word 1 */
219*5e8ce833SSrujana Challa 		u64 res_addr;
220*5e8ce833SSrujana Challa 		/* Word 2 */
221*5e8ce833SSrujana Challa 		u64 tag:32;
222*5e8ce833SSrujana Challa 		u64 tt:2;
223*5e8ce833SSrujana Challa 		u64 grp:10;
224*5e8ce833SSrujana Challa 		u64 reserved_172_175:4;
225*5e8ce833SSrujana Challa 		u64 rvu_pf_func:16;
226*5e8ce833SSrujana Challa 		/* Word 3 */
227*5e8ce833SSrujana Challa 		u64 qord:1;
228*5e8ce833SSrujana Challa 		u64 reserved_194_193:2;
229*5e8ce833SSrujana Challa 		u64 wq_ptr:61;
230*5e8ce833SSrujana Challa 		/* Word 4 */
231*5e8ce833SSrujana Challa 		u64 ei0;
232*5e8ce833SSrujana Challa 		/* Word 5 */
233*5e8ce833SSrujana Challa 		u64 ei1;
234*5e8ce833SSrujana Challa 		/* Word 6 */
235*5e8ce833SSrujana Challa 		u64 ei2;
236*5e8ce833SSrujana Challa 		/* Word 7 */
237*5e8ce833SSrujana Challa 		u64 ei3;
238*5e8ce833SSrujana Challa 	} s;
239*5e8ce833SSrujana Challa };
240*5e8ce833SSrujana Challa 
241*5e8ce833SSrujana Challa /*
242*5e8ce833SSrujana Challa  * Structure otx2_cpt_res_s
243*5e8ce833SSrujana Challa  *
244*5e8ce833SSrujana Challa  * CPT Result Structure
245*5e8ce833SSrujana Challa  * The CPT coprocessor writes the result structure after it completes a
246*5e8ce833SSrujana Challa  * CPT_INST_S instruction. The result structure is exactly 16 bytes, and
247*5e8ce833SSrujana Challa  * each instruction completion produces exactly one result structure.
248*5e8ce833SSrujana Challa  *
249*5e8ce833SSrujana Challa  * This structure is stored in memory as little-endian unless
250*5e8ce833SSrujana Challa  * CPT()_PF_Q()_CTL[INST_BE] is set.
251*5e8ce833SSrujana Challa  * cpt_res_s_s
252*5e8ce833SSrujana Challa  * Word 0
253*5e8ce833SSrujana Challa  *  doneint:1 [16:16] Done interrupt. This bit is copied from the
254*5e8ce833SSrujana Challa  *	corresponding instruction's CPT_INST_S[DONEINT].
255*5e8ce833SSrujana Challa  *  compcode:8 [7:0] Indicates completion/error status of the CPT coprocessor
256*5e8ce833SSrujana Challa  *	for the	associated instruction, as enumerated by CPT_COMP_E.
257*5e8ce833SSrujana Challa  *	Core software may write the memory location containing [COMPCODE] to
258*5e8ce833SSrujana Challa  *	0x0 before ringing the doorbell, and then poll for completion by
259*5e8ce833SSrujana Challa  *	checking for a nonzero value.
260*5e8ce833SSrujana Challa  *	Once the core observes a nonzero [COMPCODE] value in this case,the CPT
261*5e8ce833SSrujana Challa  *	coprocessor will have also completed L2/DRAM write operations.
262*5e8ce833SSrujana Challa  * Word 1
263*5e8ce833SSrujana Challa  *  reserved
264*5e8ce833SSrujana Challa  *
265*5e8ce833SSrujana Challa  */
266*5e8ce833SSrujana Challa union otx2_cpt_res_s {
267*5e8ce833SSrujana Challa 	u64 u[2];
268*5e8ce833SSrujana Challa 
269*5e8ce833SSrujana Challa 	struct {
270*5e8ce833SSrujana Challa 		u64 compcode:8;
271*5e8ce833SSrujana Challa 		u64 uc_compcode:8;
272*5e8ce833SSrujana Challa 		u64 doneint:1;
273*5e8ce833SSrujana Challa 		u64 reserved_17_63:47;
274*5e8ce833SSrujana Challa 		u64 reserved_64_127;
275*5e8ce833SSrujana Challa 	} s;
276*5e8ce833SSrujana Challa };
277*5e8ce833SSrujana Challa 
278*5e8ce833SSrujana Challa /*
279*5e8ce833SSrujana Challa  * Register (RVU_PF_BAR0) cpt#_af_constants1
280*5e8ce833SSrujana Challa  *
281*5e8ce833SSrujana Challa  * CPT AF Constants Register
282*5e8ce833SSrujana Challa  * This register contains implementation-related parameters of CPT.
283*5e8ce833SSrujana Challa  */
284*5e8ce833SSrujana Challa union otx2_cptx_af_constants1 {
285*5e8ce833SSrujana Challa 	u64 u;
286*5e8ce833SSrujana Challa 	struct otx2_cptx_af_constants1_s {
287*5e8ce833SSrujana Challa 		u64 se:16;
288*5e8ce833SSrujana Challa 		u64 ie:16;
289*5e8ce833SSrujana Challa 		u64 ae:16;
290*5e8ce833SSrujana Challa 		u64 reserved_48_63:16;
291*5e8ce833SSrujana Challa 	} s;
292*5e8ce833SSrujana Challa };
293*5e8ce833SSrujana Challa 
294*5e8ce833SSrujana Challa /*
295*5e8ce833SSrujana Challa  * RVU_PFVF_BAR2 - cpt_lf_misc_int
296*5e8ce833SSrujana Challa  *
297*5e8ce833SSrujana Challa  * This register contain the per-queue miscellaneous interrupts.
298*5e8ce833SSrujana Challa  *
299*5e8ce833SSrujana Challa  */
300*5e8ce833SSrujana Challa union otx2_cptx_lf_misc_int {
301*5e8ce833SSrujana Challa 	u64 u;
302*5e8ce833SSrujana Challa 	struct otx2_cptx_lf_misc_int_s {
303*5e8ce833SSrujana Challa 		u64 reserved_0:1;
304*5e8ce833SSrujana Challa 		u64 nqerr:1;
305*5e8ce833SSrujana Challa 		u64 irde:1;
306*5e8ce833SSrujana Challa 		u64 nwrp:1;
307*5e8ce833SSrujana Challa 		u64 reserved_4:1;
308*5e8ce833SSrujana Challa 		u64 hwerr:1;
309*5e8ce833SSrujana Challa 		u64 fault:1;
310*5e8ce833SSrujana Challa 		u64 reserved_7_63:57;
311*5e8ce833SSrujana Challa 	} s;
312*5e8ce833SSrujana Challa };
313*5e8ce833SSrujana Challa 
314*5e8ce833SSrujana Challa /*
315*5e8ce833SSrujana Challa  * RVU_PFVF_BAR2 - cpt_lf_misc_int_ena_w1s
316*5e8ce833SSrujana Challa  *
317*5e8ce833SSrujana Challa  * This register sets interrupt enable bits.
318*5e8ce833SSrujana Challa  *
319*5e8ce833SSrujana Challa  */
320*5e8ce833SSrujana Challa union otx2_cptx_lf_misc_int_ena_w1s {
321*5e8ce833SSrujana Challa 	u64 u;
322*5e8ce833SSrujana Challa 	struct otx2_cptx_lf_misc_int_ena_w1s_s {
323*5e8ce833SSrujana Challa 		u64 reserved_0:1;
324*5e8ce833SSrujana Challa 		u64 nqerr:1;
325*5e8ce833SSrujana Challa 		u64 irde:1;
326*5e8ce833SSrujana Challa 		u64 nwrp:1;
327*5e8ce833SSrujana Challa 		u64 reserved_4:1;
328*5e8ce833SSrujana Challa 		u64 hwerr:1;
329*5e8ce833SSrujana Challa 		u64 fault:1;
330*5e8ce833SSrujana Challa 		u64 reserved_7_63:57;
331*5e8ce833SSrujana Challa 	} s;
332*5e8ce833SSrujana Challa };
333*5e8ce833SSrujana Challa 
334*5e8ce833SSrujana Challa /*
335*5e8ce833SSrujana Challa  * RVU_PFVF_BAR2 - cpt_lf_ctl
336*5e8ce833SSrujana Challa  *
337*5e8ce833SSrujana Challa  * This register configures the queue.
338*5e8ce833SSrujana Challa  *
339*5e8ce833SSrujana Challa  * When the queue is not execution-quiescent (see CPT_LF_INPROG[EENA,INFLIGHT]),
340*5e8ce833SSrujana Challa  * software must only write this register with [ENA]=0.
341*5e8ce833SSrujana Challa  */
342*5e8ce833SSrujana Challa union otx2_cptx_lf_ctl {
343*5e8ce833SSrujana Challa 	u64 u;
344*5e8ce833SSrujana Challa 	struct otx2_cptx_lf_ctl_s {
345*5e8ce833SSrujana Challa 		u64 ena:1;
346*5e8ce833SSrujana Challa 		u64 fc_ena:1;
347*5e8ce833SSrujana Challa 		u64 fc_up_crossing:1;
348*5e8ce833SSrujana Challa 		u64 reserved_3:1;
349*5e8ce833SSrujana Challa 		u64 fc_hyst_bits:4;
350*5e8ce833SSrujana Challa 		u64 reserved_8_63:56;
351*5e8ce833SSrujana Challa 	} s;
352*5e8ce833SSrujana Challa };
353*5e8ce833SSrujana Challa 
354*5e8ce833SSrujana Challa /*
355*5e8ce833SSrujana Challa  * RVU_PFVF_BAR2 - cpt_lf_done_wait
356*5e8ce833SSrujana Challa  *
357*5e8ce833SSrujana Challa  * This register specifies the per-queue interrupt coalescing settings.
358*5e8ce833SSrujana Challa  */
359*5e8ce833SSrujana Challa union otx2_cptx_lf_done_wait {
360*5e8ce833SSrujana Challa 	u64 u;
361*5e8ce833SSrujana Challa 	struct otx2_cptx_lf_done_wait_s {
362*5e8ce833SSrujana Challa 		u64 num_wait:20;
363*5e8ce833SSrujana Challa 		u64 reserved_20_31:12;
364*5e8ce833SSrujana Challa 		u64 time_wait:16;
365*5e8ce833SSrujana Challa 		u64 reserved_48_63:16;
366*5e8ce833SSrujana Challa 	} s;
367*5e8ce833SSrujana Challa };
368*5e8ce833SSrujana Challa 
369*5e8ce833SSrujana Challa /*
370*5e8ce833SSrujana Challa  * RVU_PFVF_BAR2 - cpt_lf_done
371*5e8ce833SSrujana Challa  *
372*5e8ce833SSrujana Challa  * This register contain the per-queue instruction done count.
373*5e8ce833SSrujana Challa  */
374*5e8ce833SSrujana Challa union otx2_cptx_lf_done {
375*5e8ce833SSrujana Challa 	u64 u;
376*5e8ce833SSrujana Challa 	struct otx2_cptx_lf_done_s {
377*5e8ce833SSrujana Challa 		u64 done:20;
378*5e8ce833SSrujana Challa 		u64 reserved_20_63:44;
379*5e8ce833SSrujana Challa 	} s;
380*5e8ce833SSrujana Challa };
381*5e8ce833SSrujana Challa 
382*5e8ce833SSrujana Challa /*
383*5e8ce833SSrujana Challa  * RVU_PFVF_BAR2 - cpt_lf_inprog
384*5e8ce833SSrujana Challa  *
385*5e8ce833SSrujana Challa  * These registers contain the per-queue instruction in flight registers.
386*5e8ce833SSrujana Challa  *
387*5e8ce833SSrujana Challa  */
388*5e8ce833SSrujana Challa union otx2_cptx_lf_inprog {
389*5e8ce833SSrujana Challa 	u64 u;
390*5e8ce833SSrujana Challa 	struct otx2_cptx_lf_inprog_s {
391*5e8ce833SSrujana Challa 		u64 inflight:9;
392*5e8ce833SSrujana Challa 		u64 reserved_9_15:7;
393*5e8ce833SSrujana Challa 		u64 eena:1;
394*5e8ce833SSrujana Challa 		u64 grp_drp:1;
395*5e8ce833SSrujana Challa 		u64 reserved_18_30:13;
396*5e8ce833SSrujana Challa 		u64 grb_partial:1;
397*5e8ce833SSrujana Challa 		u64 grb_cnt:8;
398*5e8ce833SSrujana Challa 		u64 gwb_cnt:8;
399*5e8ce833SSrujana Challa 		u64 reserved_48_63:16;
400*5e8ce833SSrujana Challa 	} s;
401*5e8ce833SSrujana Challa };
402*5e8ce833SSrujana Challa 
403*5e8ce833SSrujana Challa /*
404*5e8ce833SSrujana Challa  * RVU_PFVF_BAR2 - cpt_lf_q_base
405*5e8ce833SSrujana Challa  *
406*5e8ce833SSrujana Challa  * CPT initializes these CSR fields to these values on any CPT_LF_Q_BASE write:
407*5e8ce833SSrujana Challa  * _ CPT_LF_Q_INST_PTR[XQ_XOR]=0.
408*5e8ce833SSrujana Challa  * _ CPT_LF_Q_INST_PTR[NQ_PTR]=2.
409*5e8ce833SSrujana Challa  * _ CPT_LF_Q_INST_PTR[DQ_PTR]=2.
410*5e8ce833SSrujana Challa  * _ CPT_LF_Q_GRP_PTR[XQ_XOR]=0.
411*5e8ce833SSrujana Challa  * _ CPT_LF_Q_GRP_PTR[NQ_PTR]=1.
412*5e8ce833SSrujana Challa  * _ CPT_LF_Q_GRP_PTR[DQ_PTR]=1.
413*5e8ce833SSrujana Challa  */
414*5e8ce833SSrujana Challa union otx2_cptx_lf_q_base {
415*5e8ce833SSrujana Challa 	u64 u;
416*5e8ce833SSrujana Challa 	struct otx2_cptx_lf_q_base_s {
417*5e8ce833SSrujana Challa 		u64 fault:1;
418*5e8ce833SSrujana Challa 		u64 reserved_1_6:6;
419*5e8ce833SSrujana Challa 		u64 addr:46;
420*5e8ce833SSrujana Challa 		u64 reserved_53_63:11;
421*5e8ce833SSrujana Challa 	} s;
422*5e8ce833SSrujana Challa };
423*5e8ce833SSrujana Challa 
424*5e8ce833SSrujana Challa /*
425*5e8ce833SSrujana Challa  * RVU_PFVF_BAR2 - cpt_lf_q_size
426*5e8ce833SSrujana Challa  *
427*5e8ce833SSrujana Challa  * CPT initializes these CSR fields to these values on any CPT_LF_Q_SIZE write:
428*5e8ce833SSrujana Challa  * _ CPT_LF_Q_INST_PTR[XQ_XOR]=0.
429*5e8ce833SSrujana Challa  * _ CPT_LF_Q_INST_PTR[NQ_PTR]=2.
430*5e8ce833SSrujana Challa  * _ CPT_LF_Q_INST_PTR[DQ_PTR]=2.
431*5e8ce833SSrujana Challa  * _ CPT_LF_Q_GRP_PTR[XQ_XOR]=0.
432*5e8ce833SSrujana Challa  * _ CPT_LF_Q_GRP_PTR[NQ_PTR]=1.
433*5e8ce833SSrujana Challa  * _ CPT_LF_Q_GRP_PTR[DQ_PTR]=1.
434*5e8ce833SSrujana Challa  */
435*5e8ce833SSrujana Challa union otx2_cptx_lf_q_size {
436*5e8ce833SSrujana Challa 	u64 u;
437*5e8ce833SSrujana Challa 	struct otx2_cptx_lf_q_size_s {
438*5e8ce833SSrujana Challa 		u64 size_div40:15;
439*5e8ce833SSrujana Challa 		u64 reserved_15_63:49;
440*5e8ce833SSrujana Challa 	} s;
441*5e8ce833SSrujana Challa };
442*5e8ce833SSrujana Challa 
443*5e8ce833SSrujana Challa /*
444*5e8ce833SSrujana Challa  * RVU_PF_BAR0 - cpt_af_lf_ctl
445*5e8ce833SSrujana Challa  *
446*5e8ce833SSrujana Challa  * This register configures queues. This register should be written only
447*5e8ce833SSrujana Challa  * when the queue is execution-quiescent (see CPT_LF_INPROG[INFLIGHT]).
448*5e8ce833SSrujana Challa  */
449*5e8ce833SSrujana Challa union otx2_cptx_af_lf_ctrl {
450*5e8ce833SSrujana Challa 	u64 u;
451*5e8ce833SSrujana Challa 	struct otx2_cptx_af_lf_ctrl_s {
452*5e8ce833SSrujana Challa 		u64 pri:1;
453*5e8ce833SSrujana Challa 		u64 reserved_1_8:8;
454*5e8ce833SSrujana Challa 		u64 pf_func_inst:1;
455*5e8ce833SSrujana Challa 		u64 cont_err:1;
456*5e8ce833SSrujana Challa 		u64 reserved_11_15:5;
457*5e8ce833SSrujana Challa 		u64 nixtx_en:1;
458*5e8ce833SSrujana Challa 		u64 reserved_17_47:31;
459*5e8ce833SSrujana Challa 		u64 grp:8;
460*5e8ce833SSrujana Challa 		u64 reserved_56_63:8;
461*5e8ce833SSrujana Challa 	} s;
462*5e8ce833SSrujana Challa };
463*5e8ce833SSrujana Challa 
464*5e8ce833SSrujana Challa #endif /* __OTX2_CPT_HW_TYPES_H */
465