15e8ce833SSrujana Challa /* SPDX-License-Identifier: GPL-2.0-only
25e8ce833SSrujana Challa  * Copyright (C) 2020 Marvell.
35e8ce833SSrujana Challa  */
45e8ce833SSrujana Challa 
55e8ce833SSrujana Challa #ifndef __OTX2_CPT_HW_TYPES_H
65e8ce833SSrujana Challa #define __OTX2_CPT_HW_TYPES_H
75e8ce833SSrujana Challa 
85e8ce833SSrujana Challa #include <linux/types.h>
95e8ce833SSrujana Challa 
105e8ce833SSrujana Challa /* Device IDs */
115e8ce833SSrujana Challa #define OTX2_CPT_PCI_PF_DEVICE_ID 0xA0FD
125e8ce833SSrujana Challa #define OTX2_CPT_PCI_VF_DEVICE_ID 0xA0FE
134cd8c315SSrujana Challa #define CN10K_CPT_PCI_PF_DEVICE_ID 0xA0F2
144cd8c315SSrujana Challa #define CN10K_CPT_PCI_VF_DEVICE_ID 0xA0F3
155e8ce833SSrujana Challa 
165e8ce833SSrujana Challa /* Mailbox interrupts offset */
175e8ce833SSrujana Challa #define OTX2_CPT_PF_MBOX_INT	6
185e8ce833SSrujana Challa #define OTX2_CPT_PF_INT_VEC_E_MBOXX(x, a) ((x) + (a))
195e8ce833SSrujana Challa 
205e8ce833SSrujana Challa /* Maximum supported microcode groups */
215e8ce833SSrujana Challa #define OTX2_CPT_MAX_ENGINE_GROUPS 8
225e8ce833SSrujana Challa 
235e8ce833SSrujana Challa /* CPT instruction size in bytes */
245e8ce833SSrujana Challa #define OTX2_CPT_INST_SIZE	64
255e8ce833SSrujana Challa /*
265e8ce833SSrujana Challa  * CPT VF MSIX vectors and their offsets
275e8ce833SSrujana Challa  */
285e8ce833SSrujana Challa #define OTX2_CPT_VF_MSIX_VECTORS 1
295e8ce833SSrujana Challa #define OTX2_CPT_VF_INTR_MBOX_MASK BIT(0)
304cd8c315SSrujana Challa #define CN10K_CPT_VF_MBOX_REGION  (0xC0000)
315e8ce833SSrujana Challa 
325e8ce833SSrujana Challa /* CPT LF MSIX vectors */
335e8ce833SSrujana Challa #define OTX2_CPT_LF_MSIX_VECTORS 2
345e8ce833SSrujana Challa 
355e8ce833SSrujana Challa /* OcteonTX2 CPT PF registers */
365e8ce833SSrujana Challa #define OTX2_CPT_PF_CONSTANTS           (0x0)
375e8ce833SSrujana Challa #define OTX2_CPT_PF_RESET               (0x100)
385e8ce833SSrujana Challa #define OTX2_CPT_PF_DIAG                (0x120)
395e8ce833SSrujana Challa #define OTX2_CPT_PF_BIST_STATUS         (0x160)
405e8ce833SSrujana Challa #define OTX2_CPT_PF_ECC0_CTL            (0x200)
415e8ce833SSrujana Challa #define OTX2_CPT_PF_ECC0_FLIP           (0x210)
425e8ce833SSrujana Challa #define OTX2_CPT_PF_ECC0_INT            (0x220)
435e8ce833SSrujana Challa #define OTX2_CPT_PF_ECC0_INT_W1S        (0x230)
445e8ce833SSrujana Challa #define OTX2_CPT_PF_ECC0_ENA_W1S        (0x240)
455e8ce833SSrujana Challa #define OTX2_CPT_PF_ECC0_ENA_W1C        (0x250)
465e8ce833SSrujana Challa #define OTX2_CPT_PF_MBOX_INTX(b)        (0x400 | (b) << 3)
475e8ce833SSrujana Challa #define OTX2_CPT_PF_MBOX_INT_W1SX(b)    (0x420 | (b) << 3)
485e8ce833SSrujana Challa #define OTX2_CPT_PF_MBOX_ENA_W1CX(b)    (0x440 | (b) << 3)
495e8ce833SSrujana Challa #define OTX2_CPT_PF_MBOX_ENA_W1SX(b)    (0x460 | (b) << 3)
505e8ce833SSrujana Challa #define OTX2_CPT_PF_EXEC_INT            (0x500)
515e8ce833SSrujana Challa #define OTX2_CPT_PF_EXEC_INT_W1S        (0x520)
525e8ce833SSrujana Challa #define OTX2_CPT_PF_EXEC_ENA_W1C        (0x540)
535e8ce833SSrujana Challa #define OTX2_CPT_PF_EXEC_ENA_W1S        (0x560)
545e8ce833SSrujana Challa #define OTX2_CPT_PF_GX_EN(b)            (0x600 | (b) << 3)
555e8ce833SSrujana Challa #define OTX2_CPT_PF_EXEC_INFO           (0x700)
565e8ce833SSrujana Challa #define OTX2_CPT_PF_EXEC_BUSY           (0x800)
575e8ce833SSrujana Challa #define OTX2_CPT_PF_EXEC_INFO0          (0x900)
585e8ce833SSrujana Challa #define OTX2_CPT_PF_EXEC_INFO1          (0x910)
595e8ce833SSrujana Challa #define OTX2_CPT_PF_INST_REQ_PC         (0x10000)
605e8ce833SSrujana Challa #define OTX2_CPT_PF_INST_LATENCY_PC     (0x10020)
615e8ce833SSrujana Challa #define OTX2_CPT_PF_RD_REQ_PC           (0x10040)
625e8ce833SSrujana Challa #define OTX2_CPT_PF_RD_LATENCY_PC       (0x10060)
635e8ce833SSrujana Challa #define OTX2_CPT_PF_RD_UC_PC            (0x10080)
645e8ce833SSrujana Challa #define OTX2_CPT_PF_ACTIVE_CYCLES_PC    (0x10100)
655e8ce833SSrujana Challa #define OTX2_CPT_PF_EXE_CTL             (0x4000000)
665e8ce833SSrujana Challa #define OTX2_CPT_PF_EXE_STATUS          (0x4000008)
675e8ce833SSrujana Challa #define OTX2_CPT_PF_EXE_CLK             (0x4000010)
685e8ce833SSrujana Challa #define OTX2_CPT_PF_EXE_DBG_CTL         (0x4000018)
695e8ce833SSrujana Challa #define OTX2_CPT_PF_EXE_DBG_DATA        (0x4000020)
705e8ce833SSrujana Challa #define OTX2_CPT_PF_EXE_BIST_STATUS     (0x4000028)
715e8ce833SSrujana Challa #define OTX2_CPT_PF_EXE_REQ_TIMER       (0x4000030)
725e8ce833SSrujana Challa #define OTX2_CPT_PF_EXE_MEM_CTL         (0x4000038)
735e8ce833SSrujana Challa #define OTX2_CPT_PF_EXE_PERF_CTL        (0x4001000)
745e8ce833SSrujana Challa #define OTX2_CPT_PF_EXE_DBG_CNTX(b)     (0x4001100 | (b) << 3)
755e8ce833SSrujana Challa #define OTX2_CPT_PF_EXE_PERF_EVENT_CNT  (0x4001180)
765e8ce833SSrujana Challa #define OTX2_CPT_PF_EXE_EPCI_INBX_CNT(b)  (0x4001200 | (b) << 3)
775e8ce833SSrujana Challa #define OTX2_CPT_PF_EXE_EPCI_OUTBX_CNT(b) (0x4001240 | (b) << 3)
785e8ce833SSrujana Challa #define OTX2_CPT_PF_ENGX_UCODE_BASE(b)  (0x4002000 | (b) << 3)
795e8ce833SSrujana Challa #define OTX2_CPT_PF_QX_CTL(b)           (0x8000000 | (b) << 20)
805e8ce833SSrujana Challa #define OTX2_CPT_PF_QX_GMCTL(b)         (0x8000020 | (b) << 20)
815e8ce833SSrujana Challa #define OTX2_CPT_PF_QX_CTL2(b)          (0x8000100 | (b) << 20)
825e8ce833SSrujana Challa #define OTX2_CPT_PF_VFX_MBOXX(b, c)     (0x8001000 | (b) << 20 | \
835e8ce833SSrujana Challa 					 (c) << 8)
845e8ce833SSrujana Challa 
855e8ce833SSrujana Challa /* OcteonTX2 CPT LF registers */
865e8ce833SSrujana Challa #define OTX2_CPT_LF_CTL                 (0x10)
875e8ce833SSrujana Challa #define OTX2_CPT_LF_DONE_WAIT           (0x30)
885e8ce833SSrujana Challa #define OTX2_CPT_LF_INPROG              (0x40)
895e8ce833SSrujana Challa #define OTX2_CPT_LF_DONE                (0x50)
905e8ce833SSrujana Challa #define OTX2_CPT_LF_DONE_ACK            (0x60)
915e8ce833SSrujana Challa #define OTX2_CPT_LF_DONE_INT_ENA_W1S    (0x90)
925e8ce833SSrujana Challa #define OTX2_CPT_LF_DONE_INT_ENA_W1C    (0xa0)
935e8ce833SSrujana Challa #define OTX2_CPT_LF_MISC_INT            (0xb0)
945e8ce833SSrujana Challa #define OTX2_CPT_LF_MISC_INT_W1S        (0xc0)
955e8ce833SSrujana Challa #define OTX2_CPT_LF_MISC_INT_ENA_W1S    (0xd0)
965e8ce833SSrujana Challa #define OTX2_CPT_LF_MISC_INT_ENA_W1C    (0xe0)
975e8ce833SSrujana Challa #define OTX2_CPT_LF_Q_BASE              (0xf0)
985e8ce833SSrujana Challa #define OTX2_CPT_LF_Q_SIZE              (0x100)
995e8ce833SSrujana Challa #define OTX2_CPT_LF_Q_INST_PTR          (0x110)
1005e8ce833SSrujana Challa #define OTX2_CPT_LF_Q_GRP_PTR           (0x120)
1015e8ce833SSrujana Challa #define OTX2_CPT_LF_NQX(a)              (0x400 | (a) << 3)
1025e8ce833SSrujana Challa #define OTX2_CPT_RVU_FUNC_BLKADDR_SHIFT 20
1035e8ce833SSrujana Challa /* LMT LF registers */
1045e8ce833SSrujana Challa #define OTX2_CPT_LMT_LFBASE             BIT_ULL(OTX2_CPT_RVU_FUNC_BLKADDR_SHIFT)
1055e8ce833SSrujana Challa #define OTX2_CPT_LMT_LF_LMTLINEX(a)     (OTX2_CPT_LMT_LFBASE | 0x000 | \
1065e8ce833SSrujana Challa 					 (a) << 12)
1075e8ce833SSrujana Challa /* RVU VF registers */
1085e8ce833SSrujana Challa #define OTX2_RVU_VF_INT                 (0x20)
1095e8ce833SSrujana Challa #define OTX2_RVU_VF_INT_W1S             (0x28)
1105e8ce833SSrujana Challa #define OTX2_RVU_VF_INT_ENA_W1S         (0x30)
1115e8ce833SSrujana Challa #define OTX2_RVU_VF_INT_ENA_W1C         (0x38)
1125e8ce833SSrujana Challa 
1135e8ce833SSrujana Challa /*
1145e8ce833SSrujana Challa  * Enumeration otx2_cpt_ucode_error_code_e
1155e8ce833SSrujana Challa  *
1165e8ce833SSrujana Challa  * Enumerates ucode errors
1175e8ce833SSrujana Challa  */
1185e8ce833SSrujana Challa enum otx2_cpt_ucode_comp_code_e {
1195e8ce833SSrujana Challa 	OTX2_CPT_UCC_SUCCESS = 0x00,
1205e8ce833SSrujana Challa 	OTX2_CPT_UCC_INVALID_OPCODE = 0x01,
1215e8ce833SSrujana Challa 
1225e8ce833SSrujana Challa 	/* Scatter gather */
1235e8ce833SSrujana Challa 	OTX2_CPT_UCC_SG_WRITE_LENGTH = 0x02,
1245e8ce833SSrujana Challa 	OTX2_CPT_UCC_SG_LIST = 0x03,
1255e8ce833SSrujana Challa 	OTX2_CPT_UCC_SG_NOT_SUPPORTED = 0x04,
1265e8ce833SSrujana Challa 
1275e8ce833SSrujana Challa };
1285e8ce833SSrujana Challa 
1295e8ce833SSrujana Challa /*
1305e8ce833SSrujana Challa  * Enumeration otx2_cpt_comp_e
1315e8ce833SSrujana Challa  *
1325e8ce833SSrujana Challa  * OcteonTX2 CPT Completion Enumeration
1335e8ce833SSrujana Challa  * Enumerates the values of CPT_RES_S[COMPCODE].
1345e8ce833SSrujana Challa  */
1355e8ce833SSrujana Challa enum otx2_cpt_comp_e {
1365e8ce833SSrujana Challa 	OTX2_CPT_COMP_E_NOTDONE = 0x00,
1375e8ce833SSrujana Challa 	OTX2_CPT_COMP_E_GOOD = 0x01,
1385e8ce833SSrujana Challa 	OTX2_CPT_COMP_E_FAULT = 0x02,
1395e8ce833SSrujana Challa 	OTX2_CPT_COMP_E_HWERR = 0x04,
1405e8ce833SSrujana Challa 	OTX2_CPT_COMP_E_INSTERR = 0x05,
141*40a645f7SSrujana Challa 	OTX2_CPT_COMP_E_WARN = 0x06
1425e8ce833SSrujana Challa };
1435e8ce833SSrujana Challa 
1445e8ce833SSrujana Challa /*
1455e8ce833SSrujana Challa  * Enumeration otx2_cpt_vf_int_vec_e
1465e8ce833SSrujana Challa  *
1475e8ce833SSrujana Challa  * OcteonTX2 CPT VF MSI-X Vector Enumeration
1485e8ce833SSrujana Challa  * Enumerates the MSI-X interrupt vectors.
1495e8ce833SSrujana Challa  */
1505e8ce833SSrujana Challa enum otx2_cpt_vf_int_vec_e {
1515e8ce833SSrujana Challa 	OTX2_CPT_VF_INT_VEC_E_MBOX = 0x00
1525e8ce833SSrujana Challa };
1535e8ce833SSrujana Challa 
1545e8ce833SSrujana Challa /*
1555e8ce833SSrujana Challa  * Enumeration otx2_cpt_lf_int_vec_e
1565e8ce833SSrujana Challa  *
1575e8ce833SSrujana Challa  * OcteonTX2 CPT LF MSI-X Vector Enumeration
1585e8ce833SSrujana Challa  * Enumerates the MSI-X interrupt vectors.
1595e8ce833SSrujana Challa  */
1605e8ce833SSrujana Challa enum otx2_cpt_lf_int_vec_e {
1615e8ce833SSrujana Challa 	OTX2_CPT_LF_INT_VEC_E_MISC = 0x00,
1625e8ce833SSrujana Challa 	OTX2_CPT_LF_INT_VEC_E_DONE = 0x01
1635e8ce833SSrujana Challa };
1645e8ce833SSrujana Challa 
1655e8ce833SSrujana Challa /*
1665e8ce833SSrujana Challa  * Structure otx2_cpt_inst_s
1675e8ce833SSrujana Challa  *
1685e8ce833SSrujana Challa  * CPT Instruction Structure
1695e8ce833SSrujana Challa  * This structure specifies the instruction layout. Instructions are
1705e8ce833SSrujana Challa  * stored in memory as little-endian unless CPT()_PF_Q()_CTL[INST_BE] is set.
1715e8ce833SSrujana Challa  * cpt_inst_s_s
1725e8ce833SSrujana Challa  * Word 0
1735e8ce833SSrujana Challa  * doneint:1 Done interrupt.
1745e8ce833SSrujana Challa  *	0 = No interrupts related to this instruction.
1755e8ce833SSrujana Challa  *	1 = When the instruction completes, CPT()_VQ()_DONE[DONE] will be
1765e8ce833SSrujana Challa  *	incremented,and based on the rules described there an interrupt may
1775e8ce833SSrujana Challa  *	occur.
1785e8ce833SSrujana Challa  * Word 1
1795e8ce833SSrujana Challa  * res_addr [127: 64] Result IOVA.
1805e8ce833SSrujana Challa  *	If nonzero, specifies where to write CPT_RES_S.
1815e8ce833SSrujana Challa  *	If zero, no result structure will be written.
1825e8ce833SSrujana Challa  *	Address must be 16-byte aligned.
1835e8ce833SSrujana Challa  *	Bits <63:49> are ignored by hardware; software should use a
1845e8ce833SSrujana Challa  *	sign-extended bit <48> for forward compatibility.
1855e8ce833SSrujana Challa  * Word 2
1865e8ce833SSrujana Challa  *  grp:10 [171:162] If [WQ_PTR] is nonzero, the SSO guest-group to use when
1875e8ce833SSrujana Challa  *	CPT submits work SSO.
1885e8ce833SSrujana Challa  *	For the SSO to not discard the add-work request, FPA_PF_MAP() must map
1895e8ce833SSrujana Challa  *	[GRP] and CPT()_PF_Q()_GMCTL[GMID] as valid.
1905e8ce833SSrujana Challa  *  tt:2 [161:160] If [WQ_PTR] is nonzero, the SSO tag type to use when CPT
1915e8ce833SSrujana Challa  *	submits work to SSO
1925e8ce833SSrujana Challa  *  tag:32 [159:128] If [WQ_PTR] is nonzero, the SSO tag to use when CPT
1935e8ce833SSrujana Challa  *	submits work to SSO.
1945e8ce833SSrujana Challa  * Word 3
1955e8ce833SSrujana Challa  *  wq_ptr [255:192] If [WQ_PTR] is nonzero, it is a pointer to a
1965e8ce833SSrujana Challa  *	work-queue entry that CPT submits work to SSO after all context,
1975e8ce833SSrujana Challa  *	output data, and result write operations are visible to other
1985e8ce833SSrujana Challa  *	CNXXXX units and the cores. Bits <2:0> must be zero.
1995e8ce833SSrujana Challa  *	Bits <63:49> are ignored by hardware; software should
2005e8ce833SSrujana Challa  *	use a sign-extended bit <48> for forward compatibility.
2015e8ce833SSrujana Challa  *	Internal:
2025e8ce833SSrujana Challa  *	Bits <63:49>, <2:0> are ignored by hardware, treated as always 0x0.
2035e8ce833SSrujana Challa  * Word 4
2045e8ce833SSrujana Challa  *  ei0; [319:256] Engine instruction word 0. Passed to the AE/SE.
2055e8ce833SSrujana Challa  * Word 5
2065e8ce833SSrujana Challa  *  ei1; [383:320] Engine instruction word 1. Passed to the AE/SE.
2075e8ce833SSrujana Challa  * Word 6
2085e8ce833SSrujana Challa  *  ei2; [447:384] Engine instruction word 1. Passed to the AE/SE.
2095e8ce833SSrujana Challa  * Word 7
2105e8ce833SSrujana Challa  *  ei3; [511:448] Engine instruction word 1. Passed to the AE/SE.
2115e8ce833SSrujana Challa  *
2125e8ce833SSrujana Challa  */
2135e8ce833SSrujana Challa union otx2_cpt_inst_s {
2145e8ce833SSrujana Challa 	u64 u[8];
2155e8ce833SSrujana Challa 
2165e8ce833SSrujana Challa 	struct {
2175e8ce833SSrujana Challa 		/* Word 0 */
2185e8ce833SSrujana Challa 		u64 nixtxl:3;
2195e8ce833SSrujana Challa 		u64 doneint:1;
2205e8ce833SSrujana Challa 		u64 nixtx_addr:60;
2215e8ce833SSrujana Challa 		/* Word 1 */
2225e8ce833SSrujana Challa 		u64 res_addr;
2235e8ce833SSrujana Challa 		/* Word 2 */
2245e8ce833SSrujana Challa 		u64 tag:32;
2255e8ce833SSrujana Challa 		u64 tt:2;
2265e8ce833SSrujana Challa 		u64 grp:10;
2275e8ce833SSrujana Challa 		u64 reserved_172_175:4;
2285e8ce833SSrujana Challa 		u64 rvu_pf_func:16;
2295e8ce833SSrujana Challa 		/* Word 3 */
2305e8ce833SSrujana Challa 		u64 qord:1;
2315e8ce833SSrujana Challa 		u64 reserved_194_193:2;
2325e8ce833SSrujana Challa 		u64 wq_ptr:61;
2335e8ce833SSrujana Challa 		/* Word 4 */
2345e8ce833SSrujana Challa 		u64 ei0;
2355e8ce833SSrujana Challa 		/* Word 5 */
2365e8ce833SSrujana Challa 		u64 ei1;
2375e8ce833SSrujana Challa 		/* Word 6 */
2385e8ce833SSrujana Challa 		u64 ei2;
2395e8ce833SSrujana Challa 		/* Word 7 */
2405e8ce833SSrujana Challa 		u64 ei3;
2415e8ce833SSrujana Challa 	} s;
2425e8ce833SSrujana Challa };
2435e8ce833SSrujana Challa 
2445e8ce833SSrujana Challa /*
2455e8ce833SSrujana Challa  * Structure otx2_cpt_res_s
2465e8ce833SSrujana Challa  *
2475e8ce833SSrujana Challa  * CPT Result Structure
2485e8ce833SSrujana Challa  * The CPT coprocessor writes the result structure after it completes a
2495e8ce833SSrujana Challa  * CPT_INST_S instruction. The result structure is exactly 16 bytes, and
2505e8ce833SSrujana Challa  * each instruction completion produces exactly one result structure.
2515e8ce833SSrujana Challa  *
2525e8ce833SSrujana Challa  * This structure is stored in memory as little-endian unless
2535e8ce833SSrujana Challa  * CPT()_PF_Q()_CTL[INST_BE] is set.
2545e8ce833SSrujana Challa  * cpt_res_s_s
2555e8ce833SSrujana Challa  * Word 0
2565e8ce833SSrujana Challa  *  doneint:1 [16:16] Done interrupt. This bit is copied from the
2575e8ce833SSrujana Challa  *	corresponding instruction's CPT_INST_S[DONEINT].
2585e8ce833SSrujana Challa  *  compcode:8 [7:0] Indicates completion/error status of the CPT coprocessor
2595e8ce833SSrujana Challa  *	for the	associated instruction, as enumerated by CPT_COMP_E.
2605e8ce833SSrujana Challa  *	Core software may write the memory location containing [COMPCODE] to
2615e8ce833SSrujana Challa  *	0x0 before ringing the doorbell, and then poll for completion by
2625e8ce833SSrujana Challa  *	checking for a nonzero value.
2635e8ce833SSrujana Challa  *	Once the core observes a nonzero [COMPCODE] value in this case,the CPT
2645e8ce833SSrujana Challa  *	coprocessor will have also completed L2/DRAM write operations.
2655e8ce833SSrujana Challa  * Word 1
2665e8ce833SSrujana Challa  *  reserved
2675e8ce833SSrujana Challa  *
2685e8ce833SSrujana Challa  */
2695e8ce833SSrujana Challa union otx2_cpt_res_s {
2705e8ce833SSrujana Challa 	u64 u[2];
2715e8ce833SSrujana Challa 
272*40a645f7SSrujana Challa 	struct cn9k_cpt_res_s {
2735e8ce833SSrujana Challa 		u64 compcode:8;
2745e8ce833SSrujana Challa 		u64 uc_compcode:8;
2755e8ce833SSrujana Challa 		u64 doneint:1;
2765e8ce833SSrujana Challa 		u64 reserved_17_63:47;
2775e8ce833SSrujana Challa 		u64 reserved_64_127;
2785e8ce833SSrujana Challa 	} s;
279*40a645f7SSrujana Challa 
280*40a645f7SSrujana Challa 	struct cn10k_cpt_res_s {
281*40a645f7SSrujana Challa 		u64 compcode:7;
282*40a645f7SSrujana Challa 		u64 doneint:1;
283*40a645f7SSrujana Challa 		u64 uc_compcode:8;
284*40a645f7SSrujana Challa 		u64 rlen:16;
285*40a645f7SSrujana Challa 		u64 spi:32;
286*40a645f7SSrujana Challa 		u64 esn;
287*40a645f7SSrujana Challa 	} cn10k;
2885e8ce833SSrujana Challa };
2895e8ce833SSrujana Challa 
2905e8ce833SSrujana Challa /*
2915e8ce833SSrujana Challa  * Register (RVU_PF_BAR0) cpt#_af_constants1
2925e8ce833SSrujana Challa  *
2935e8ce833SSrujana Challa  * CPT AF Constants Register
2945e8ce833SSrujana Challa  * This register contains implementation-related parameters of CPT.
2955e8ce833SSrujana Challa  */
2965e8ce833SSrujana Challa union otx2_cptx_af_constants1 {
2975e8ce833SSrujana Challa 	u64 u;
2985e8ce833SSrujana Challa 	struct otx2_cptx_af_constants1_s {
2995e8ce833SSrujana Challa 		u64 se:16;
3005e8ce833SSrujana Challa 		u64 ie:16;
3015e8ce833SSrujana Challa 		u64 ae:16;
3025e8ce833SSrujana Challa 		u64 reserved_48_63:16;
3035e8ce833SSrujana Challa 	} s;
3045e8ce833SSrujana Challa };
3055e8ce833SSrujana Challa 
3065e8ce833SSrujana Challa /*
3075e8ce833SSrujana Challa  * RVU_PFVF_BAR2 - cpt_lf_misc_int
3085e8ce833SSrujana Challa  *
3095e8ce833SSrujana Challa  * This register contain the per-queue miscellaneous interrupts.
3105e8ce833SSrujana Challa  *
3115e8ce833SSrujana Challa  */
3125e8ce833SSrujana Challa union otx2_cptx_lf_misc_int {
3135e8ce833SSrujana Challa 	u64 u;
3145e8ce833SSrujana Challa 	struct otx2_cptx_lf_misc_int_s {
3155e8ce833SSrujana Challa 		u64 reserved_0:1;
3165e8ce833SSrujana Challa 		u64 nqerr:1;
3175e8ce833SSrujana Challa 		u64 irde:1;
3185e8ce833SSrujana Challa 		u64 nwrp:1;
3195e8ce833SSrujana Challa 		u64 reserved_4:1;
3205e8ce833SSrujana Challa 		u64 hwerr:1;
3215e8ce833SSrujana Challa 		u64 fault:1;
3225e8ce833SSrujana Challa 		u64 reserved_7_63:57;
3235e8ce833SSrujana Challa 	} s;
3245e8ce833SSrujana Challa };
3255e8ce833SSrujana Challa 
3265e8ce833SSrujana Challa /*
3275e8ce833SSrujana Challa  * RVU_PFVF_BAR2 - cpt_lf_misc_int_ena_w1s
3285e8ce833SSrujana Challa  *
3295e8ce833SSrujana Challa  * This register sets interrupt enable bits.
3305e8ce833SSrujana Challa  *
3315e8ce833SSrujana Challa  */
3325e8ce833SSrujana Challa union otx2_cptx_lf_misc_int_ena_w1s {
3335e8ce833SSrujana Challa 	u64 u;
3345e8ce833SSrujana Challa 	struct otx2_cptx_lf_misc_int_ena_w1s_s {
3355e8ce833SSrujana Challa 		u64 reserved_0:1;
3365e8ce833SSrujana Challa 		u64 nqerr:1;
3375e8ce833SSrujana Challa 		u64 irde:1;
3385e8ce833SSrujana Challa 		u64 nwrp:1;
3395e8ce833SSrujana Challa 		u64 reserved_4:1;
3405e8ce833SSrujana Challa 		u64 hwerr:1;
3415e8ce833SSrujana Challa 		u64 fault:1;
3425e8ce833SSrujana Challa 		u64 reserved_7_63:57;
3435e8ce833SSrujana Challa 	} s;
3445e8ce833SSrujana Challa };
3455e8ce833SSrujana Challa 
3465e8ce833SSrujana Challa /*
3475e8ce833SSrujana Challa  * RVU_PFVF_BAR2 - cpt_lf_ctl
3485e8ce833SSrujana Challa  *
3495e8ce833SSrujana Challa  * This register configures the queue.
3505e8ce833SSrujana Challa  *
3515e8ce833SSrujana Challa  * When the queue is not execution-quiescent (see CPT_LF_INPROG[EENA,INFLIGHT]),
3525e8ce833SSrujana Challa  * software must only write this register with [ENA]=0.
3535e8ce833SSrujana Challa  */
3545e8ce833SSrujana Challa union otx2_cptx_lf_ctl {
3555e8ce833SSrujana Challa 	u64 u;
3565e8ce833SSrujana Challa 	struct otx2_cptx_lf_ctl_s {
3575e8ce833SSrujana Challa 		u64 ena:1;
3585e8ce833SSrujana Challa 		u64 fc_ena:1;
3595e8ce833SSrujana Challa 		u64 fc_up_crossing:1;
3605e8ce833SSrujana Challa 		u64 reserved_3:1;
3615e8ce833SSrujana Challa 		u64 fc_hyst_bits:4;
3625e8ce833SSrujana Challa 		u64 reserved_8_63:56;
3635e8ce833SSrujana Challa 	} s;
3645e8ce833SSrujana Challa };
3655e8ce833SSrujana Challa 
3665e8ce833SSrujana Challa /*
3675e8ce833SSrujana Challa  * RVU_PFVF_BAR2 - cpt_lf_done_wait
3685e8ce833SSrujana Challa  *
3695e8ce833SSrujana Challa  * This register specifies the per-queue interrupt coalescing settings.
3705e8ce833SSrujana Challa  */
3715e8ce833SSrujana Challa union otx2_cptx_lf_done_wait {
3725e8ce833SSrujana Challa 	u64 u;
3735e8ce833SSrujana Challa 	struct otx2_cptx_lf_done_wait_s {
3745e8ce833SSrujana Challa 		u64 num_wait:20;
3755e8ce833SSrujana Challa 		u64 reserved_20_31:12;
3765e8ce833SSrujana Challa 		u64 time_wait:16;
3775e8ce833SSrujana Challa 		u64 reserved_48_63:16;
3785e8ce833SSrujana Challa 	} s;
3795e8ce833SSrujana Challa };
3805e8ce833SSrujana Challa 
3815e8ce833SSrujana Challa /*
3825e8ce833SSrujana Challa  * RVU_PFVF_BAR2 - cpt_lf_done
3835e8ce833SSrujana Challa  *
3845e8ce833SSrujana Challa  * This register contain the per-queue instruction done count.
3855e8ce833SSrujana Challa  */
3865e8ce833SSrujana Challa union otx2_cptx_lf_done {
3875e8ce833SSrujana Challa 	u64 u;
3885e8ce833SSrujana Challa 	struct otx2_cptx_lf_done_s {
3895e8ce833SSrujana Challa 		u64 done:20;
3905e8ce833SSrujana Challa 		u64 reserved_20_63:44;
3915e8ce833SSrujana Challa 	} s;
3925e8ce833SSrujana Challa };
3935e8ce833SSrujana Challa 
3945e8ce833SSrujana Challa /*
3955e8ce833SSrujana Challa  * RVU_PFVF_BAR2 - cpt_lf_inprog
3965e8ce833SSrujana Challa  *
3975e8ce833SSrujana Challa  * These registers contain the per-queue instruction in flight registers.
3985e8ce833SSrujana Challa  *
3995e8ce833SSrujana Challa  */
4005e8ce833SSrujana Challa union otx2_cptx_lf_inprog {
4015e8ce833SSrujana Challa 	u64 u;
4025e8ce833SSrujana Challa 	struct otx2_cptx_lf_inprog_s {
4035e8ce833SSrujana Challa 		u64 inflight:9;
4045e8ce833SSrujana Challa 		u64 reserved_9_15:7;
4055e8ce833SSrujana Challa 		u64 eena:1;
4065e8ce833SSrujana Challa 		u64 grp_drp:1;
4075e8ce833SSrujana Challa 		u64 reserved_18_30:13;
4085e8ce833SSrujana Challa 		u64 grb_partial:1;
4095e8ce833SSrujana Challa 		u64 grb_cnt:8;
4105e8ce833SSrujana Challa 		u64 gwb_cnt:8;
4115e8ce833SSrujana Challa 		u64 reserved_48_63:16;
4125e8ce833SSrujana Challa 	} s;
4135e8ce833SSrujana Challa };
4145e8ce833SSrujana Challa 
4155e8ce833SSrujana Challa /*
4165e8ce833SSrujana Challa  * RVU_PFVF_BAR2 - cpt_lf_q_base
4175e8ce833SSrujana Challa  *
4185e8ce833SSrujana Challa  * CPT initializes these CSR fields to these values on any CPT_LF_Q_BASE write:
4195e8ce833SSrujana Challa  * _ CPT_LF_Q_INST_PTR[XQ_XOR]=0.
4205e8ce833SSrujana Challa  * _ CPT_LF_Q_INST_PTR[NQ_PTR]=2.
4215e8ce833SSrujana Challa  * _ CPT_LF_Q_INST_PTR[DQ_PTR]=2.
4225e8ce833SSrujana Challa  * _ CPT_LF_Q_GRP_PTR[XQ_XOR]=0.
4235e8ce833SSrujana Challa  * _ CPT_LF_Q_GRP_PTR[NQ_PTR]=1.
4245e8ce833SSrujana Challa  * _ CPT_LF_Q_GRP_PTR[DQ_PTR]=1.
4255e8ce833SSrujana Challa  */
4265e8ce833SSrujana Challa union otx2_cptx_lf_q_base {
4275e8ce833SSrujana Challa 	u64 u;
4285e8ce833SSrujana Challa 	struct otx2_cptx_lf_q_base_s {
4295e8ce833SSrujana Challa 		u64 fault:1;
4305e8ce833SSrujana Challa 		u64 reserved_1_6:6;
4315e8ce833SSrujana Challa 		u64 addr:46;
4325e8ce833SSrujana Challa 		u64 reserved_53_63:11;
4335e8ce833SSrujana Challa 	} s;
4345e8ce833SSrujana Challa };
4355e8ce833SSrujana Challa 
4365e8ce833SSrujana Challa /*
4375e8ce833SSrujana Challa  * RVU_PFVF_BAR2 - cpt_lf_q_size
4385e8ce833SSrujana Challa  *
4395e8ce833SSrujana Challa  * CPT initializes these CSR fields to these values on any CPT_LF_Q_SIZE write:
4405e8ce833SSrujana Challa  * _ CPT_LF_Q_INST_PTR[XQ_XOR]=0.
4415e8ce833SSrujana Challa  * _ CPT_LF_Q_INST_PTR[NQ_PTR]=2.
4425e8ce833SSrujana Challa  * _ CPT_LF_Q_INST_PTR[DQ_PTR]=2.
4435e8ce833SSrujana Challa  * _ CPT_LF_Q_GRP_PTR[XQ_XOR]=0.
4445e8ce833SSrujana Challa  * _ CPT_LF_Q_GRP_PTR[NQ_PTR]=1.
4455e8ce833SSrujana Challa  * _ CPT_LF_Q_GRP_PTR[DQ_PTR]=1.
4465e8ce833SSrujana Challa  */
4475e8ce833SSrujana Challa union otx2_cptx_lf_q_size {
4485e8ce833SSrujana Challa 	u64 u;
4495e8ce833SSrujana Challa 	struct otx2_cptx_lf_q_size_s {
4505e8ce833SSrujana Challa 		u64 size_div40:15;
4515e8ce833SSrujana Challa 		u64 reserved_15_63:49;
4525e8ce833SSrujana Challa 	} s;
4535e8ce833SSrujana Challa };
4545e8ce833SSrujana Challa 
4555e8ce833SSrujana Challa /*
4565e8ce833SSrujana Challa  * RVU_PF_BAR0 - cpt_af_lf_ctl
4575e8ce833SSrujana Challa  *
4585e8ce833SSrujana Challa  * This register configures queues. This register should be written only
4595e8ce833SSrujana Challa  * when the queue is execution-quiescent (see CPT_LF_INPROG[INFLIGHT]).
4605e8ce833SSrujana Challa  */
4615e8ce833SSrujana Challa union otx2_cptx_af_lf_ctrl {
4625e8ce833SSrujana Challa 	u64 u;
4635e8ce833SSrujana Challa 	struct otx2_cptx_af_lf_ctrl_s {
4645e8ce833SSrujana Challa 		u64 pri:1;
4655e8ce833SSrujana Challa 		u64 reserved_1_8:8;
4665e8ce833SSrujana Challa 		u64 pf_func_inst:1;
4675e8ce833SSrujana Challa 		u64 cont_err:1;
4685e8ce833SSrujana Challa 		u64 reserved_11_15:5;
4695e8ce833SSrujana Challa 		u64 nixtx_en:1;
4705e8ce833SSrujana Challa 		u64 reserved_17_47:31;
4715e8ce833SSrujana Challa 		u64 grp:8;
4725e8ce833SSrujana Challa 		u64 reserved_56_63:8;
4735e8ce833SSrujana Challa 	} s;
4745e8ce833SSrujana Challa };
4755e8ce833SSrujana Challa 
4765e8ce833SSrujana Challa #endif /* __OTX2_CPT_HW_TYPES_H */
477