1423c8a29SSathesh Edara /* SPDX-License-Identifier: BSD-3-Clause 2423c8a29SSathesh Edara * Copyright(C) 2021 Marvell. 3423c8a29SSathesh Edara */ 4423c8a29SSathesh Edara #ifndef _OTX2_EP_VF_H_ 5423c8a29SSathesh Edara #define _OTX2_EP_VF_H_ 6423c8a29SSathesh Edara 7423c8a29SSathesh Edara #include <rte_io.h> 8423c8a29SSathesh Edara 9423c8a29SSathesh Edara #define SDP_VF_R_IN_CTL_IDLE (0x1ull << 28) 10423c8a29SSathesh Edara #define SDP_VF_R_IN_CTL_RDSIZE (0x3ull << 25) /* Setting to max(4) */ 11423c8a29SSathesh Edara #define SDP_VF_R_IN_CTL_IS_64B (0x1ull << 24) 12423c8a29SSathesh Edara #define SDP_VF_R_IN_CTL_ESR (0x1ull << 1) 13423c8a29SSathesh Edara 14423c8a29SSathesh Edara #define SDP_VF_BUSY_LOOP_COUNT (10000) 15423c8a29SSathesh Edara 16423c8a29SSathesh Edara /* SDP VF OQ Masks */ 175efa816eSSathesh Edara #define SDP_VF_R_OUT_CTL_IDLE (0x1ull << 40) 185efa816eSSathesh Edara #define SDP_VF_R_OUT_CTL_ES_I (0x1ull << 34) 195efa816eSSathesh Edara #define SDP_VF_R_OUT_CTL_NSR_I (0x1ull << 33) 205efa816eSSathesh Edara #define SDP_VF_R_OUT_CTL_ROR_I (0x1ull << 32) 215efa816eSSathesh Edara #define SDP_VF_R_OUT_CTL_ES_D (0x1ull << 30) 225efa816eSSathesh Edara #define SDP_VF_R_OUT_CTL_NSR_D (0x1ull << 29) 235efa816eSSathesh Edara #define SDP_VF_R_OUT_CTL_ROR_D (0x1ull << 28) 245efa816eSSathesh Edara #define SDP_VF_R_OUT_CTL_ES_P (0x1ull << 26) 255efa816eSSathesh Edara #define SDP_VF_R_OUT_CTL_NSR_P (0x1ull << 25) 265efa816eSSathesh Edara #define SDP_VF_R_OUT_CTL_ROR_P (0x1ull << 24) 275efa816eSSathesh Edara #define SDP_VF_R_OUT_CTL_IMODE (0x1ull << 23) 285efa816eSSathesh Edara #define SDP_VF_R_OUT_CNTS_OUT_INT (0x1ull << 62) 295efa816eSSathesh Edara #define SDP_VF_R_OUT_CNTS_IN_INT (0x1ull << 61) 305efa816eSSathesh Edara #define SDP_VF_R_IN_CNTS_OUT_INT (0x1ull << 62) 31423c8a29SSathesh Edara 32423c8a29SSathesh Edara /* SDP VF Register definitions */ 33423c8a29SSathesh Edara #define SDP_VF_RING_OFFSET (0x1ull << 17) 34423c8a29SSathesh Edara 35423c8a29SSathesh Edara /* SDP VF IQ Registers */ 36423c8a29SSathesh Edara #define SDP_VF_R_IN_CONTROL_START (0x10000) 37423c8a29SSathesh Edara #define SDP_VF_R_IN_ENABLE_START (0x10010) 38423c8a29SSathesh Edara #define SDP_VF_R_IN_INSTR_BADDR_START (0x10020) 39423c8a29SSathesh Edara #define SDP_VF_R_IN_INSTR_RSIZE_START (0x10030) 40423c8a29SSathesh Edara #define SDP_VF_R_IN_INSTR_DBELL_START (0x10040) 41423c8a29SSathesh Edara #define SDP_VF_R_IN_CNTS_START (0x10050) 42423c8a29SSathesh Edara #define SDP_VF_R_IN_INT_LEVELS_START (0x10060) 43423c8a29SSathesh Edara #define SDP_VF_R_IN_PKT_CNT_START (0x10080) 44423c8a29SSathesh Edara #define SDP_VF_R_IN_BYTE_CNT_START (0x10090) 45*d360d7bfSSathesh Edara #define SDP_VF_R_IN_CNTS_ISM_START (0x10520) 46423c8a29SSathesh Edara 47423c8a29SSathesh Edara #define SDP_VF_R_IN_CONTROL(ring) \ 48423c8a29SSathesh Edara (SDP_VF_R_IN_CONTROL_START + ((ring) * SDP_VF_RING_OFFSET)) 49423c8a29SSathesh Edara 50423c8a29SSathesh Edara #define SDP_VF_R_IN_ENABLE(ring) \ 51423c8a29SSathesh Edara (SDP_VF_R_IN_ENABLE_START + ((ring) * SDP_VF_RING_OFFSET)) 52423c8a29SSathesh Edara 53423c8a29SSathesh Edara #define SDP_VF_R_IN_INSTR_BADDR(ring) \ 54423c8a29SSathesh Edara (SDP_VF_R_IN_INSTR_BADDR_START + ((ring) * SDP_VF_RING_OFFSET)) 55423c8a29SSathesh Edara 56423c8a29SSathesh Edara #define SDP_VF_R_IN_INSTR_RSIZE(ring) \ 57423c8a29SSathesh Edara (SDP_VF_R_IN_INSTR_RSIZE_START + ((ring) * SDP_VF_RING_OFFSET)) 58423c8a29SSathesh Edara 59423c8a29SSathesh Edara #define SDP_VF_R_IN_INSTR_DBELL(ring) \ 60423c8a29SSathesh Edara (SDP_VF_R_IN_INSTR_DBELL_START + ((ring) * SDP_VF_RING_OFFSET)) 61423c8a29SSathesh Edara 62423c8a29SSathesh Edara #define SDP_VF_R_IN_CNTS(ring) \ 63423c8a29SSathesh Edara (SDP_VF_R_IN_CNTS_START + ((ring) * SDP_VF_RING_OFFSET)) 64423c8a29SSathesh Edara 65423c8a29SSathesh Edara #define SDP_VF_R_IN_INT_LEVELS(ring) \ 66423c8a29SSathesh Edara (SDP_VF_R_IN_INT_LEVELS_START + ((ring) * SDP_VF_RING_OFFSET)) 67423c8a29SSathesh Edara 68423c8a29SSathesh Edara #define SDP_VF_R_IN_PKT_CNT(ring) \ 69423c8a29SSathesh Edara (SDP_VF_R_IN_PKT_CNT_START + ((ring) * SDP_VF_RING_OFFSET)) 70423c8a29SSathesh Edara 71423c8a29SSathesh Edara #define SDP_VF_R_IN_BYTE_CNT(ring) \ 72423c8a29SSathesh Edara (SDP_VF_R_IN_BYTE_CNT_START + ((ring) * SDP_VF_RING_OFFSET)) 73423c8a29SSathesh Edara 74*d360d7bfSSathesh Edara #define SDP_VF_R_IN_CNTS_ISM(ring) \ 75*d360d7bfSSathesh Edara (SDP_VF_R_IN_CNTS_ISM_START + (SDP_VF_RING_OFFSET * (ring))) 76*d360d7bfSSathesh Edara 77423c8a29SSathesh Edara /* SDP VF OQ Registers */ 78423c8a29SSathesh Edara #define SDP_VF_R_OUT_CNTS_START (0x10100) 79423c8a29SSathesh Edara #define SDP_VF_R_OUT_INT_LEVELS_START (0x10110) 80423c8a29SSathesh Edara #define SDP_VF_R_OUT_SLIST_BADDR_START (0x10120) 81423c8a29SSathesh Edara #define SDP_VF_R_OUT_SLIST_RSIZE_START (0x10130) 82423c8a29SSathesh Edara #define SDP_VF_R_OUT_SLIST_DBELL_START (0x10140) 83423c8a29SSathesh Edara #define SDP_VF_R_OUT_CONTROL_START (0x10150) 84423c8a29SSathesh Edara #define SDP_VF_R_OUT_ENABLE_START (0x10160) 85423c8a29SSathesh Edara #define SDP_VF_R_OUT_PKT_CNT_START (0x10180) 86423c8a29SSathesh Edara #define SDP_VF_R_OUT_BYTE_CNT_START (0x10190) 87*d360d7bfSSathesh Edara #define SDP_VF_R_OUT_CNTS_ISM_START (0x10510) 88423c8a29SSathesh Edara 89423c8a29SSathesh Edara #define SDP_VF_R_OUT_CONTROL(ring) \ 90423c8a29SSathesh Edara (SDP_VF_R_OUT_CONTROL_START + ((ring) * SDP_VF_RING_OFFSET)) 91423c8a29SSathesh Edara 92423c8a29SSathesh Edara #define SDP_VF_R_OUT_ENABLE(ring) \ 93423c8a29SSathesh Edara (SDP_VF_R_OUT_ENABLE_START + ((ring) * SDP_VF_RING_OFFSET)) 94423c8a29SSathesh Edara 95423c8a29SSathesh Edara #define SDP_VF_R_OUT_SLIST_BADDR(ring) \ 96423c8a29SSathesh Edara (SDP_VF_R_OUT_SLIST_BADDR_START + ((ring) * SDP_VF_RING_OFFSET)) 97423c8a29SSathesh Edara 98423c8a29SSathesh Edara #define SDP_VF_R_OUT_SLIST_RSIZE(ring) \ 99423c8a29SSathesh Edara (SDP_VF_R_OUT_SLIST_RSIZE_START + ((ring) * SDP_VF_RING_OFFSET)) 100423c8a29SSathesh Edara 101423c8a29SSathesh Edara #define SDP_VF_R_OUT_SLIST_DBELL(ring) \ 102423c8a29SSathesh Edara (SDP_VF_R_OUT_SLIST_DBELL_START + ((ring) * SDP_VF_RING_OFFSET)) 103423c8a29SSathesh Edara 104423c8a29SSathesh Edara #define SDP_VF_R_OUT_CNTS(ring) \ 105423c8a29SSathesh Edara (SDP_VF_R_OUT_CNTS_START + ((ring) * SDP_VF_RING_OFFSET)) 106423c8a29SSathesh Edara 107423c8a29SSathesh Edara #define SDP_VF_R_OUT_INT_LEVELS(ring) \ 108423c8a29SSathesh Edara (SDP_VF_R_OUT_INT_LEVELS_START + ((ring) * SDP_VF_RING_OFFSET)) 109423c8a29SSathesh Edara 110423c8a29SSathesh Edara #define SDP_VF_R_OUT_PKT_CNT(ring) \ 111423c8a29SSathesh Edara (SDP_VF_R_OUT_PKT_CNT_START + ((ring) * SDP_VF_RING_OFFSET)) 112423c8a29SSathesh Edara 113423c8a29SSathesh Edara #define SDP_VF_R_OUT_BYTE_CNT(ring) \ 114423c8a29SSathesh Edara (SDP_VF_R_OUT_BYTE_CNT_START + ((ring) * SDP_VF_RING_OFFSET)) 115423c8a29SSathesh Edara 116*d360d7bfSSathesh Edara #define SDP_VF_R_OUT_CNTS_ISM(ring) \ 117*d360d7bfSSathesh Edara (SDP_VF_R_OUT_CNTS_ISM_START + (SDP_VF_RING_OFFSET * (ring))) 118*d360d7bfSSathesh Edara 119423c8a29SSathesh Edara /* SDP VF IQ Masks */ 120423c8a29SSathesh Edara #define SDP_VF_R_IN_CTL_RPVF_MASK (0xF) 121423c8a29SSathesh Edara #define SDP_VF_R_IN_CTL_RPVF_POS (48) 122423c8a29SSathesh Edara 123423c8a29SSathesh Edara /* IO Access */ 124423c8a29SSathesh Edara #define otx2_read64(addr) rte_read64_relaxed((void *)(addr)) 125423c8a29SSathesh Edara #define otx2_write64(val, addr) rte_write64_relaxed((val), (void *)(addr)) 126423c8a29SSathesh Edara 127423c8a29SSathesh Edara #define PCI_DEVID_CN9K_EP_NET_VF 0xB203 /* OCTEON 9 EP mode */ 128423c8a29SSathesh Edara #define PCI_DEVID_CN98XX_EP_NET_VF 0xB103 12918db77f8SSathesh Edara #define PCI_DEVID_CNF95N_EP_NET_VF 0xB403 13018db77f8SSathesh Edara #define PCI_DEVID_CNF95O_EP_NET_VF 0xB603 131423c8a29SSathesh Edara 132423c8a29SSathesh Edara int 133423c8a29SSathesh Edara otx2_ep_vf_setup_device(struct otx_ep_device *sdpvf); 134423c8a29SSathesh Edara 135423c8a29SSathesh Edara struct otx2_ep_instr_64B { 136423c8a29SSathesh Edara /* Pointer where the input data is available. */ 137423c8a29SSathesh Edara uint64_t dptr; 138423c8a29SSathesh Edara 139423c8a29SSathesh Edara /* OTX_EP Instruction Header. */ 140423c8a29SSathesh Edara union otx_ep_instr_ih ih; 141423c8a29SSathesh Edara 142423c8a29SSathesh Edara /** Pointer where the response for a RAW mode packet 143423c8a29SSathesh Edara * will be written by OCTEON TX. 144423c8a29SSathesh Edara */ 145423c8a29SSathesh Edara uint64_t rptr; 146423c8a29SSathesh Edara 147423c8a29SSathesh Edara /* Input Request Header. */ 148423c8a29SSathesh Edara union otx_ep_instr_irh irh; 149423c8a29SSathesh Edara 150423c8a29SSathesh Edara /* Additional headers available in a 64-byte instruction. */ 151423c8a29SSathesh Edara uint64_t exhdr[4]; 152423c8a29SSathesh Edara }; 153423c8a29SSathesh Edara 154*d360d7bfSSathesh Edara #define OTX2_EP_IQ_ISM_OFFSET(queue) (RTE_CACHE_LINE_SIZE * (queue) + 4) 155*d360d7bfSSathesh Edara #define OTX2_EP_OQ_ISM_OFFSET(queue) (RTE_CACHE_LINE_SIZE * (queue)) 156*d360d7bfSSathesh Edara #define OTX2_EP_ISM_EN (0x1) 157*d360d7bfSSathesh Edara #define OTX2_EP_ISM_MSIX_DIS (0x2) 158*d360d7bfSSathesh Edara #define OTX2_EP_MAX_RX_PKT_LEN (16384) 159*d360d7bfSSathesh Edara 1605efa816eSSathesh Edara union out_int_lvl_t { 1615efa816eSSathesh Edara uint64_t d64; 1625efa816eSSathesh Edara struct { 1635efa816eSSathesh Edara uint64_t cnt:32; 1645efa816eSSathesh Edara uint64_t timet:22; 1655efa816eSSathesh Edara uint64_t max_len:7; 1665efa816eSSathesh Edara uint64_t max_len_en:1; 1675efa816eSSathesh Edara uint64_t time_cnt_en:1; 1685efa816eSSathesh Edara uint64_t bmode:1; 1695efa816eSSathesh Edara } s; 1705efa816eSSathesh Edara }; 1715efa816eSSathesh Edara 1725efa816eSSathesh Edara union out_cnts_t { 1735efa816eSSathesh Edara uint64_t d64; 1745efa816eSSathesh Edara struct { 1755efa816eSSathesh Edara uint64_t cnt:32; 1765efa816eSSathesh Edara uint64_t timer:22; 1775efa816eSSathesh Edara uint64_t rsvd:5; 1785efa816eSSathesh Edara uint64_t resend:1; 1795efa816eSSathesh Edara uint64_t mbox_int:1; 1805efa816eSSathesh Edara uint64_t in_int:1; 1815efa816eSSathesh Edara uint64_t out_int:1; 1825efa816eSSathesh Edara uint64_t send_ism:1; 1835efa816eSSathesh Edara } s; 1845efa816eSSathesh Edara }; 1855efa816eSSathesh Edara 1865efa816eSSathesh Edara #define OTX2_EP_64B_INSTR_SIZE (sizeof(otx2_ep_instr_64B)) 1875efa816eSSathesh Edara 1885efa816eSSathesh Edara #define NIX_MAX_HW_FRS 9212 1895efa816eSSathesh Edara #define NIX_MAX_VTAG_INS 2 1905efa816eSSathesh Edara #define NIX_MAX_VTAG_ACT_SIZE (4 * NIX_MAX_VTAG_INS) 1915efa816eSSathesh Edara #define NIX_MAX_FRS \ 1925efa816eSSathesh Edara (NIX_MAX_HW_FRS + RTE_ETHER_CRC_LEN - NIX_MAX_VTAG_ACT_SIZE) 1935efa816eSSathesh Edara 1945efa816eSSathesh Edara #define CN93XX_INTR_R_OUT_INT (1ULL << 62) 1955efa816eSSathesh Edara #define CN93XX_INTR_R_IN_INT (1ULL << 61) 196423c8a29SSathesh Edara #endif /*_OTX2_EP_VF_H_ */ 197