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