1*423c8a29SSathesh Edara /* SPDX-License-Identifier: BSD-3-Clause 2*423c8a29SSathesh Edara * Copyright(C) 2021 Marvell. 3*423c8a29SSathesh Edara */ 4*423c8a29SSathesh Edara #ifndef _OTX_EP_VF_H_ 5*423c8a29SSathesh Edara #define _OTX_EP_VF_H_ 6*423c8a29SSathesh Edara 7*423c8a29SSathesh Edara #define OTX_EP_RING_OFFSET (0x1ull << 17) 8*423c8a29SSathesh Edara 9*423c8a29SSathesh Edara /* OTX_EP VF IQ Registers */ 10*423c8a29SSathesh Edara #define OTX_EP_R_IN_CONTROL_START (0x10000) 11*423c8a29SSathesh Edara #define OTX_EP_R_IN_ENABLE_START (0x10010) 12*423c8a29SSathesh Edara #define OTX_EP_R_IN_INSTR_BADDR_START (0x10020) 13*423c8a29SSathesh Edara #define OTX_EP_R_IN_INSTR_RSIZE_START (0x10030) 14*423c8a29SSathesh Edara #define OTX_EP_R_IN_INSTR_DBELL_START (0x10040) 15*423c8a29SSathesh Edara #define OTX_EP_R_IN_CNTS_START (0x10050) 16*423c8a29SSathesh Edara #define OTX_EP_R_IN_INT_LEVELS_START (0x10060) 17*423c8a29SSathesh Edara 18*423c8a29SSathesh Edara #define OTX_EP_R_IN_CONTROL(ring) \ 19*423c8a29SSathesh Edara (OTX_EP_R_IN_CONTROL_START + ((ring) * OTX_EP_RING_OFFSET)) 20*423c8a29SSathesh Edara 21*423c8a29SSathesh Edara #define OTX_EP_R_IN_ENABLE(ring) \ 22*423c8a29SSathesh Edara (OTX_EP_R_IN_ENABLE_START + ((ring) * OTX_EP_RING_OFFSET)) 23*423c8a29SSathesh Edara 24*423c8a29SSathesh Edara #define OTX_EP_R_IN_INSTR_BADDR(ring) \ 25*423c8a29SSathesh Edara (OTX_EP_R_IN_INSTR_BADDR_START + ((ring) * OTX_EP_RING_OFFSET)) 26*423c8a29SSathesh Edara 27*423c8a29SSathesh Edara #define OTX_EP_R_IN_INSTR_RSIZE(ring) \ 28*423c8a29SSathesh Edara (OTX_EP_R_IN_INSTR_RSIZE_START + ((ring) * OTX_EP_RING_OFFSET)) 29*423c8a29SSathesh Edara 30*423c8a29SSathesh Edara #define OTX_EP_R_IN_INSTR_DBELL(ring) \ 31*423c8a29SSathesh Edara (OTX_EP_R_IN_INSTR_DBELL_START + ((ring) * OTX_EP_RING_OFFSET)) 32*423c8a29SSathesh Edara 33*423c8a29SSathesh Edara #define OTX_EP_R_IN_CNTS(ring) \ 34*423c8a29SSathesh Edara (OTX_EP_R_IN_CNTS_START + ((ring) * OTX_EP_RING_OFFSET)) 35*423c8a29SSathesh Edara 36*423c8a29SSathesh Edara #define OTX_EP_R_IN_INT_LEVELS(ring) \ 37*423c8a29SSathesh Edara (OTX_EP_R_IN_INT_LEVELS_START + ((ring) * OTX_EP_RING_OFFSET)) 38*423c8a29SSathesh Edara 39*423c8a29SSathesh Edara /* OTX_EP VF IQ Masks */ 40*423c8a29SSathesh Edara #define OTX_EP_R_IN_CTL_RPVF_MASK (0xF) 41*423c8a29SSathesh Edara #define OTX_EP_R_IN_CTL_RPVF_POS (48) 42*423c8a29SSathesh Edara 43*423c8a29SSathesh Edara #define OTX_EP_R_IN_CTL_IDLE (0x1ull << 28) 44*423c8a29SSathesh Edara #define OTX_EP_R_IN_CTL_RDSIZE (0x3ull << 25) /* Setting to max(4) */ 45*423c8a29SSathesh Edara #define OTX_EP_R_IN_CTL_IS_64B (0x1ull << 24) 46*423c8a29SSathesh Edara #define OTX_EP_R_IN_CTL_ESR (0x1ull << 1) 47*423c8a29SSathesh Edara /* OTX_EP VF OQ Registers */ 48*423c8a29SSathesh Edara #define OTX_EP_R_OUT_CNTS_START (0x10100) 49*423c8a29SSathesh Edara #define OTX_EP_R_OUT_INT_LEVELS_START (0x10110) 50*423c8a29SSathesh Edara #define OTX_EP_R_OUT_SLIST_BADDR_START (0x10120) 51*423c8a29SSathesh Edara #define OTX_EP_R_OUT_SLIST_RSIZE_START (0x10130) 52*423c8a29SSathesh Edara #define OTX_EP_R_OUT_SLIST_DBELL_START (0x10140) 53*423c8a29SSathesh Edara #define OTX_EP_R_OUT_CONTROL_START (0x10150) 54*423c8a29SSathesh Edara #define OTX_EP_R_OUT_ENABLE_START (0x10160) 55*423c8a29SSathesh Edara 56*423c8a29SSathesh Edara #define OTX_EP_R_OUT_CONTROL(ring) \ 57*423c8a29SSathesh Edara (OTX_EP_R_OUT_CONTROL_START + ((ring) * OTX_EP_RING_OFFSET)) 58*423c8a29SSathesh Edara 59*423c8a29SSathesh Edara #define OTX_EP_R_OUT_ENABLE(ring) \ 60*423c8a29SSathesh Edara (OTX_EP_R_OUT_ENABLE_START + ((ring) * OTX_EP_RING_OFFSET)) 61*423c8a29SSathesh Edara 62*423c8a29SSathesh Edara #define OTX_EP_R_OUT_SLIST_BADDR(ring) \ 63*423c8a29SSathesh Edara (OTX_EP_R_OUT_SLIST_BADDR_START + ((ring) * OTX_EP_RING_OFFSET)) 64*423c8a29SSathesh Edara 65*423c8a29SSathesh Edara #define OTX_EP_R_OUT_SLIST_RSIZE(ring) \ 66*423c8a29SSathesh Edara (OTX_EP_R_OUT_SLIST_RSIZE_START + ((ring) * OTX_EP_RING_OFFSET)) 67*423c8a29SSathesh Edara 68*423c8a29SSathesh Edara #define OTX_EP_R_OUT_SLIST_DBELL(ring) \ 69*423c8a29SSathesh Edara (OTX_EP_R_OUT_SLIST_DBELL_START + ((ring) * OTX_EP_RING_OFFSET)) 70*423c8a29SSathesh Edara 71*423c8a29SSathesh Edara #define OTX_EP_R_OUT_CNTS(ring) \ 72*423c8a29SSathesh Edara (OTX_EP_R_OUT_CNTS_START + ((ring) * OTX_EP_RING_OFFSET)) 73*423c8a29SSathesh Edara 74*423c8a29SSathesh Edara #define OTX_EP_R_OUT_INT_LEVELS(ring) \ 75*423c8a29SSathesh Edara (OTX_EP_R_OUT_INT_LEVELS_START + ((ring) * OTX_EP_RING_OFFSET)) 76*423c8a29SSathesh Edara 77*423c8a29SSathesh Edara /* OTX_EP VF OQ Masks */ 78*423c8a29SSathesh Edara 79*423c8a29SSathesh Edara #define OTX_EP_R_OUT_CTL_IDLE (1ull << 36) 80*423c8a29SSathesh Edara #define OTX_EP_R_OUT_CTL_ES_I (1ull << 34) 81*423c8a29SSathesh Edara #define OTX_EP_R_OUT_CTL_NSR_I (1ull << 33) 82*423c8a29SSathesh Edara #define OTX_EP_R_OUT_CTL_ROR_I (1ull << 32) 83*423c8a29SSathesh Edara #define OTX_EP_R_OUT_CTL_ES_D (1ull << 30) 84*423c8a29SSathesh Edara #define OTX_EP_R_OUT_CTL_NSR_D (1ull << 29) 85*423c8a29SSathesh Edara #define OTX_EP_R_OUT_CTL_ROR_D (1ull << 28) 86*423c8a29SSathesh Edara #define OTX_EP_R_OUT_CTL_ES_P (1ull << 26) 87*423c8a29SSathesh Edara #define OTX_EP_R_OUT_CTL_NSR_P (1ull << 25) 88*423c8a29SSathesh Edara #define OTX_EP_R_OUT_CTL_ROR_P (1ull << 24) 89*423c8a29SSathesh Edara #define OTX_EP_R_OUT_CTL_IMODE (1ull << 23) 90*423c8a29SSathesh Edara 91*423c8a29SSathesh Edara #define PCI_DEVID_OCTEONTX_EP_VF 0xa303 92*423c8a29SSathesh Edara 93*423c8a29SSathesh Edara /* this is a static value set by SLI PF driver in octeon 94*423c8a29SSathesh Edara * No handshake is available 95*423c8a29SSathesh Edara * Change this if changing the value in SLI PF driver 96*423c8a29SSathesh Edara */ 97*423c8a29SSathesh Edara #define SDP_GBL_WMARK 0x100 98*423c8a29SSathesh Edara 99*423c8a29SSathesh Edara 100*423c8a29SSathesh Edara /* Optional PKI Instruction Header(PKI IH) */ 101*423c8a29SSathesh Edara typedef union { 102*423c8a29SSathesh Edara uint64_t u64; 103*423c8a29SSathesh Edara struct { 104*423c8a29SSathesh Edara /** Tag Value */ 105*423c8a29SSathesh Edara uint64_t tag:32; 106*423c8a29SSathesh Edara 107*423c8a29SSathesh Edara /** QPG Value */ 108*423c8a29SSathesh Edara uint64_t qpg:11; 109*423c8a29SSathesh Edara 110*423c8a29SSathesh Edara /** Reserved1 */ 111*423c8a29SSathesh Edara uint64_t reserved1:2; 112*423c8a29SSathesh Edara 113*423c8a29SSathesh Edara /** Tag type */ 114*423c8a29SSathesh Edara uint64_t tagtype:2; 115*423c8a29SSathesh Edara 116*423c8a29SSathesh Edara /** Use Tag Type */ 117*423c8a29SSathesh Edara uint64_t utt:1; 118*423c8a29SSathesh Edara 119*423c8a29SSathesh Edara /** Skip Length */ 120*423c8a29SSathesh Edara uint64_t sl:8; 121*423c8a29SSathesh Edara 122*423c8a29SSathesh Edara /** Parse Mode */ 123*423c8a29SSathesh Edara uint64_t pm:3; 124*423c8a29SSathesh Edara 125*423c8a29SSathesh Edara /** Reserved2 */ 126*423c8a29SSathesh Edara uint64_t reserved2:1; 127*423c8a29SSathesh Edara 128*423c8a29SSathesh Edara /** Use QPG */ 129*423c8a29SSathesh Edara uint64_t uqpg:1; 130*423c8a29SSathesh Edara 131*423c8a29SSathesh Edara /** Use Tag */ 132*423c8a29SSathesh Edara uint64_t utag:1; 133*423c8a29SSathesh Edara 134*423c8a29SSathesh Edara /** Raw mode indicator 1 = RAW */ 135*423c8a29SSathesh Edara uint64_t raw:1; 136*423c8a29SSathesh Edara 137*423c8a29SSathesh Edara /** Wider bit */ 138*423c8a29SSathesh Edara uint64_t w:1; 139*423c8a29SSathesh Edara } s; 140*423c8a29SSathesh Edara } otx_ep_instr_pki_ih3_t; 141*423c8a29SSathesh Edara 142*423c8a29SSathesh Edara 143*423c8a29SSathesh Edara /* OTX_EP 64B instruction format */ 144*423c8a29SSathesh Edara struct otx_ep_instr_64B { 145*423c8a29SSathesh Edara /* Pointer where the input data is available. */ 146*423c8a29SSathesh Edara uint64_t dptr; 147*423c8a29SSathesh Edara 148*423c8a29SSathesh Edara /* OTX_EP Instruction Header. */ 149*423c8a29SSathesh Edara union otx_ep_instr_ih ih; 150*423c8a29SSathesh Edara 151*423c8a29SSathesh Edara /* PKI Optional Instruction Header. */ 152*423c8a29SSathesh Edara otx_ep_instr_pki_ih3_t pki_ih3; 153*423c8a29SSathesh Edara 154*423c8a29SSathesh Edara /** Pointer where the response for a RAW mode packet 155*423c8a29SSathesh Edara * will be written by OCTEON TX. 156*423c8a29SSathesh Edara */ 157*423c8a29SSathesh Edara uint64_t rptr; 158*423c8a29SSathesh Edara 159*423c8a29SSathesh Edara /* Input Request Header. */ 160*423c8a29SSathesh Edara union otx_ep_instr_irh irh; 161*423c8a29SSathesh Edara 162*423c8a29SSathesh Edara /* Additional headers available in a 64-byte instruction. */ 163*423c8a29SSathesh Edara uint64_t exhdr[3]; 164*423c8a29SSathesh Edara }; 165*423c8a29SSathesh Edara 166*423c8a29SSathesh Edara int 167*423c8a29SSathesh Edara otx_ep_vf_setup_device(struct otx_ep_device *otx_ep); 168*423c8a29SSathesh Edara #endif /*_OTX_EP_VF_H_ */ 169