1fa8f86a1SJerin Jacob /* SPDX-License-Identifier: BSD-3-Clause 2fa8f86a1SJerin Jacob * Copyright(C) 2021 Marvell. 3fa8f86a1SJerin Jacob */ 4fa8f86a1SJerin Jacob 5fa8f86a1SJerin Jacob #ifndef __SDP_HW_H_ 6fa8f86a1SJerin Jacob #define __SDP_HW_H_ 7fa8f86a1SJerin Jacob 8fa8f86a1SJerin Jacob /* SDP VF IOQs */ 9fa8f86a1SJerin Jacob #define SDP_MIN_RINGS_PER_VF (1) 10fa8f86a1SJerin Jacob #define SDP_MAX_RINGS_PER_VF (8) 11fa8f86a1SJerin Jacob 12fa8f86a1SJerin Jacob /* SDP VF IQ configuration */ 13fa8f86a1SJerin Jacob #define SDP_VF_MAX_IQ_DESCRIPTORS (512) 14fa8f86a1SJerin Jacob #define SDP_VF_MIN_IQ_DESCRIPTORS (128) 15fa8f86a1SJerin Jacob 16fa8f86a1SJerin Jacob #define SDP_VF_DB_MIN (1) 17fa8f86a1SJerin Jacob #define SDP_VF_DB_TIMEOUT (1) 18fa8f86a1SJerin Jacob #define SDP_VF_INTR_THRESHOLD (0xFFFFFFFF) 19fa8f86a1SJerin Jacob 20fa8f86a1SJerin Jacob #define SDP_VF_64BYTE_INSTR (64) 21fa8f86a1SJerin Jacob #define SDP_VF_32BYTE_INSTR (32) 22fa8f86a1SJerin Jacob 23fa8f86a1SJerin Jacob /* SDP VF OQ configuration */ 24fa8f86a1SJerin Jacob #define SDP_VF_MAX_OQ_DESCRIPTORS (512) 25fa8f86a1SJerin Jacob #define SDP_VF_MIN_OQ_DESCRIPTORS (128) 26fa8f86a1SJerin Jacob #define SDP_VF_OQ_BUF_SIZE (2048) 27fa8f86a1SJerin Jacob #define SDP_VF_OQ_REFIL_THRESHOLD (16) 28fa8f86a1SJerin Jacob 29fa8f86a1SJerin Jacob #define SDP_VF_OQ_INFOPTR_MODE (1) 30fa8f86a1SJerin Jacob #define SDP_VF_OQ_BUFPTR_MODE (0) 31fa8f86a1SJerin Jacob 32fa8f86a1SJerin Jacob #define SDP_VF_OQ_INTR_PKT (1) 33fa8f86a1SJerin Jacob #define SDP_VF_OQ_INTR_TIME (10) 34fa8f86a1SJerin Jacob #define SDP_VF_CFG_IO_QUEUES SDP_MAX_RINGS_PER_VF 35fa8f86a1SJerin Jacob 36fa8f86a1SJerin Jacob /* Wait time in milliseconds for FLR */ 37fa8f86a1SJerin Jacob #define SDP_VF_PCI_FLR_WAIT (100) 38fa8f86a1SJerin Jacob #define SDP_VF_BUSY_LOOP_COUNT (10000) 39fa8f86a1SJerin Jacob 40fa8f86a1SJerin Jacob #define SDP_VF_MAX_IO_QUEUES SDP_MAX_RINGS_PER_VF 41fa8f86a1SJerin Jacob #define SDP_VF_MIN_IO_QUEUES SDP_MIN_RINGS_PER_VF 42fa8f86a1SJerin Jacob 43fa8f86a1SJerin Jacob /* SDP VF IOQs per rawdev */ 44fa8f86a1SJerin Jacob #define SDP_VF_MAX_IOQS_PER_RAWDEV SDP_VF_MAX_IO_QUEUES 45fa8f86a1SJerin Jacob #define SDP_VF_DEFAULT_IOQS_PER_RAWDEV SDP_VF_MIN_IO_QUEUES 46fa8f86a1SJerin Jacob 47fa8f86a1SJerin Jacob /* SDP VF Register definitions */ 48fa8f86a1SJerin Jacob #define SDP_VF_RING_OFFSET (0x1ull << 17) 49fa8f86a1SJerin Jacob 50fa8f86a1SJerin Jacob /* SDP VF IQ Registers */ 51fa8f86a1SJerin Jacob #define SDP_VF_R_IN_CONTROL_START (0x10000) 52fa8f86a1SJerin Jacob #define SDP_VF_R_IN_ENABLE_START (0x10010) 53fa8f86a1SJerin Jacob #define SDP_VF_R_IN_INSTR_BADDR_START (0x10020) 54fa8f86a1SJerin Jacob #define SDP_VF_R_IN_INSTR_RSIZE_START (0x10030) 55fa8f86a1SJerin Jacob #define SDP_VF_R_IN_INSTR_DBELL_START (0x10040) 56fa8f86a1SJerin Jacob #define SDP_VF_R_IN_CNTS_START (0x10050) 57fa8f86a1SJerin Jacob #define SDP_VF_R_IN_INT_LEVELS_START (0x10060) 58fa8f86a1SJerin Jacob #define SDP_VF_R_IN_PKT_CNT_START (0x10080) 59fa8f86a1SJerin Jacob #define SDP_VF_R_IN_BYTE_CNT_START (0x10090) 60fa8f86a1SJerin Jacob 61fa8f86a1SJerin Jacob #define SDP_VF_R_IN_CONTROL(ring) \ 62fa8f86a1SJerin Jacob (SDP_VF_R_IN_CONTROL_START + (SDP_VF_RING_OFFSET * (ring))) 63fa8f86a1SJerin Jacob 64fa8f86a1SJerin Jacob #define SDP_VF_R_IN_ENABLE(ring) \ 65fa8f86a1SJerin Jacob (SDP_VF_R_IN_ENABLE_START + (SDP_VF_RING_OFFSET * (ring))) 66fa8f86a1SJerin Jacob 67fa8f86a1SJerin Jacob #define SDP_VF_R_IN_INSTR_BADDR(ring) \ 68fa8f86a1SJerin Jacob (SDP_VF_R_IN_INSTR_BADDR_START + (SDP_VF_RING_OFFSET * (ring))) 69fa8f86a1SJerin Jacob 70fa8f86a1SJerin Jacob #define SDP_VF_R_IN_INSTR_RSIZE(ring) \ 71fa8f86a1SJerin Jacob (SDP_VF_R_IN_INSTR_RSIZE_START + (SDP_VF_RING_OFFSET * (ring))) 72fa8f86a1SJerin Jacob 73fa8f86a1SJerin Jacob #define SDP_VF_R_IN_INSTR_DBELL(ring) \ 74fa8f86a1SJerin Jacob (SDP_VF_R_IN_INSTR_DBELL_START + (SDP_VF_RING_OFFSET * (ring))) 75fa8f86a1SJerin Jacob 76fa8f86a1SJerin Jacob #define SDP_VF_R_IN_CNTS(ring) \ 77fa8f86a1SJerin Jacob (SDP_VF_R_IN_CNTS_START + (SDP_VF_RING_OFFSET * (ring))) 78fa8f86a1SJerin Jacob 79fa8f86a1SJerin Jacob #define SDP_VF_R_IN_INT_LEVELS(ring) \ 80fa8f86a1SJerin Jacob (SDP_VF_R_IN_INT_LEVELS_START + (SDP_VF_RING_OFFSET * (ring))) 81fa8f86a1SJerin Jacob 82fa8f86a1SJerin Jacob #define SDP_VF_R_IN_PKT_CNT(ring) \ 83fa8f86a1SJerin Jacob (SDP_VF_R_IN_PKT_CNT_START + (SDP_VF_RING_OFFSET * (ring))) 84fa8f86a1SJerin Jacob 85fa8f86a1SJerin Jacob #define SDP_VF_R_IN_BYTE_CNT(ring) \ 86fa8f86a1SJerin Jacob (SDP_VF_R_IN_BYTE_CNT_START + (SDP_VF_RING_OFFSET * (ring))) 87fa8f86a1SJerin Jacob 88fa8f86a1SJerin Jacob /* SDP VF IQ Masks */ 89fa8f86a1SJerin Jacob #define SDP_VF_R_IN_CTL_RPVF_MASK (0xF) 90fa8f86a1SJerin Jacob #define SDP_VF_R_IN_CTL_RPVF_POS (48) 91fa8f86a1SJerin Jacob 92fa8f86a1SJerin Jacob #define SDP_VF_R_IN_CTL_IDLE (0x1ull << 28) 93fa8f86a1SJerin Jacob #define SDP_VF_R_IN_CTL_RDSIZE (0x3ull << 25) /* Setting to max(4) */ 94fa8f86a1SJerin Jacob #define SDP_VF_R_IN_CTL_IS_64B (0x1ull << 24) 95fa8f86a1SJerin Jacob #define SDP_VF_R_IN_CTL_D_NSR (0x1ull << 8) 96fa8f86a1SJerin Jacob #define SDP_VF_R_IN_CTL_D_ESR (0x1ull << 6) 97fa8f86a1SJerin Jacob #define SDP_VF_R_IN_CTL_D_ROR (0x1ull << 5) 98fa8f86a1SJerin Jacob #define SDP_VF_R_IN_CTL_NSR (0x1ull << 3) 99fa8f86a1SJerin Jacob #define SDP_VF_R_IN_CTL_ESR (0x1ull << 1) 100fa8f86a1SJerin Jacob #define SDP_VF_R_IN_CTL_ROR (0x1ull << 0) 101fa8f86a1SJerin Jacob 102fa8f86a1SJerin Jacob #define SDP_VF_R_IN_CTL_MASK (SDP_VF_R_IN_CTL_RDSIZE | SDP_VF_R_IN_CTL_IS_64B) 103fa8f86a1SJerin Jacob 104fa8f86a1SJerin Jacob /* SDP VF OQ Registers */ 105fa8f86a1SJerin Jacob #define SDP_VF_R_OUT_CNTS_START (0x10100) 106fa8f86a1SJerin Jacob #define SDP_VF_R_OUT_INT_LEVELS_START (0x10110) 107fa8f86a1SJerin Jacob #define SDP_VF_R_OUT_SLIST_BADDR_START (0x10120) 108fa8f86a1SJerin Jacob #define SDP_VF_R_OUT_SLIST_RSIZE_START (0x10130) 109fa8f86a1SJerin Jacob #define SDP_VF_R_OUT_SLIST_DBELL_START (0x10140) 110fa8f86a1SJerin Jacob #define SDP_VF_R_OUT_CONTROL_START (0x10150) 111fa8f86a1SJerin Jacob #define SDP_VF_R_OUT_ENABLE_START (0x10160) 112fa8f86a1SJerin Jacob #define SDP_VF_R_OUT_PKT_CNT_START (0x10180) 113fa8f86a1SJerin Jacob #define SDP_VF_R_OUT_BYTE_CNT_START (0x10190) 114fa8f86a1SJerin Jacob 115fa8f86a1SJerin Jacob #define SDP_VF_R_OUT_CONTROL(ring) \ 116fa8f86a1SJerin Jacob (SDP_VF_R_OUT_CONTROL_START + (SDP_VF_RING_OFFSET * (ring))) 117fa8f86a1SJerin Jacob 118fa8f86a1SJerin Jacob #define SDP_VF_R_OUT_ENABLE(ring) \ 119fa8f86a1SJerin Jacob (SDP_VF_R_OUT_ENABLE_START + (SDP_VF_RING_OFFSET * (ring))) 120fa8f86a1SJerin Jacob 121fa8f86a1SJerin Jacob #define SDP_VF_R_OUT_SLIST_BADDR(ring) \ 122fa8f86a1SJerin Jacob (SDP_VF_R_OUT_SLIST_BADDR_START + (SDP_VF_RING_OFFSET * (ring))) 123fa8f86a1SJerin Jacob 124fa8f86a1SJerin Jacob #define SDP_VF_R_OUT_SLIST_RSIZE(ring) \ 125fa8f86a1SJerin Jacob (SDP_VF_R_OUT_SLIST_RSIZE_START + (SDP_VF_RING_OFFSET * (ring))) 126fa8f86a1SJerin Jacob 127fa8f86a1SJerin Jacob #define SDP_VF_R_OUT_SLIST_DBELL(ring) \ 128fa8f86a1SJerin Jacob (SDP_VF_R_OUT_SLIST_DBELL_START + (SDP_VF_RING_OFFSET * (ring))) 129fa8f86a1SJerin Jacob 130fa8f86a1SJerin Jacob #define SDP_VF_R_OUT_CNTS(ring) \ 131fa8f86a1SJerin Jacob (SDP_VF_R_OUT_CNTS_START + (SDP_VF_RING_OFFSET * (ring))) 132fa8f86a1SJerin Jacob 133fa8f86a1SJerin Jacob #define SDP_VF_R_OUT_INT_LEVELS(ring) \ 134fa8f86a1SJerin Jacob (SDP_VF_R_OUT_INT_LEVELS_START + (SDP_VF_RING_OFFSET * (ring))) 135fa8f86a1SJerin Jacob 136fa8f86a1SJerin Jacob #define SDP_VF_R_OUT_PKT_CNT(ring) \ 137fa8f86a1SJerin Jacob (SDP_VF_R_OUT_PKT_CNT_START + (SDP_VF_RING_OFFSET * (ring))) 138fa8f86a1SJerin Jacob 139fa8f86a1SJerin Jacob #define SDP_VF_R_OUT_BYTE_CNT(ring) \ 140fa8f86a1SJerin Jacob (SDP_VF_R_OUT_BYTE_CNT_START + (SDP_VF_RING_OFFSET * (ring))) 141fa8f86a1SJerin Jacob 142fa8f86a1SJerin Jacob /* SDP VF OQ Masks */ 143fa8f86a1SJerin Jacob #define SDP_VF_R_OUT_CTL_IDLE (1ull << 40) 144fa8f86a1SJerin Jacob #define SDP_VF_R_OUT_CTL_ES_I (1ull << 34) 145fa8f86a1SJerin Jacob #define SDP_VF_R_OUT_CTL_NSR_I (1ull << 33) 146fa8f86a1SJerin Jacob #define SDP_VF_R_OUT_CTL_ROR_I (1ull << 32) 147fa8f86a1SJerin Jacob #define SDP_VF_R_OUT_CTL_ES_D (1ull << 30) 148fa8f86a1SJerin Jacob #define SDP_VF_R_OUT_CTL_NSR_D (1ull << 29) 149fa8f86a1SJerin Jacob #define SDP_VF_R_OUT_CTL_ROR_D (1ull << 28) 150fa8f86a1SJerin Jacob #define SDP_VF_R_OUT_CTL_ES_P (1ull << 26) 151fa8f86a1SJerin Jacob #define SDP_VF_R_OUT_CTL_NSR_P (1ull << 25) 152fa8f86a1SJerin Jacob #define SDP_VF_R_OUT_CTL_ROR_P (1ull << 24) 153fa8f86a1SJerin Jacob #define SDP_VF_R_OUT_CTL_IMODE (1ull << 23) 154fa8f86a1SJerin Jacob 155fa8f86a1SJerin Jacob #define SDP_VF_R_OUT_INT_LEVELS_BMODE (1ull << 63) 156fa8f86a1SJerin Jacob #define SDP_VF_R_OUT_INT_LEVELS_TIMET (32) 157fa8f86a1SJerin Jacob 158fa8f86a1SJerin Jacob /* SDP Instruction Header */ 159*e7750639SAndre Muezerie struct __plt_packed_begin sdp_instr_ih { 160fa8f86a1SJerin Jacob /* Data Len */ 161fa8f86a1SJerin Jacob uint64_t tlen : 16; 162fa8f86a1SJerin Jacob 163fa8f86a1SJerin Jacob /* Reserved1 */ 164fa8f86a1SJerin Jacob uint64_t rsvd1 : 20; 165fa8f86a1SJerin Jacob 166fa8f86a1SJerin Jacob /* PKIND for SDP */ 167fa8f86a1SJerin Jacob uint64_t pkind : 6; 168fa8f86a1SJerin Jacob 169fa8f86a1SJerin Jacob /* Front Data size */ 170fa8f86a1SJerin Jacob uint64_t fsz : 6; 171fa8f86a1SJerin Jacob 172fa8f86a1SJerin Jacob /* No. of entries in gather list */ 173fa8f86a1SJerin Jacob uint64_t gsz : 14; 174fa8f86a1SJerin Jacob 175fa8f86a1SJerin Jacob /* Gather indicator */ 176fa8f86a1SJerin Jacob uint64_t gather : 1; 177fa8f86a1SJerin Jacob 178fa8f86a1SJerin Jacob /* Reserved2 */ 179fa8f86a1SJerin Jacob uint64_t rsvd2 : 1; 180*e7750639SAndre Muezerie } __plt_packed_end; 181fa8f86a1SJerin Jacob 182fa8f86a1SJerin Jacob #endif /* __SDP_HW_H_ */ 183