1/* SPDX-License-Identifier: GPL-2.0 */
2/* Marvell RVU Ethernet driver
3 *
4 * Copyright (C) 2020 Marvell.
5 *
6 */
7
8#ifndef OTX2_REG_H
9#define OTX2_REG_H
10
11#include <rvu_struct.h>
12
13/* RVU PF registers */
14#define RVU_PF_VFX_PFVF_MBOX0 (0x00000)
15#define RVU_PF_VFX_PFVF_MBOX1 (0x00008)
16#define RVU_PF_VFX_PFVF_MBOXX(a, b) (0x0 | (a) << 12 | (b) << 3)
17#define RVU_PF_VF_BAR4_ADDR (0x10)
18#define RVU_PF_BLOCK_ADDRX_DISC(a) (0x200 | (a) << 3)
19#define RVU_PF_VFME_STATUSX(a) (0x800 | (a) << 3)
20#define RVU_PF_VFTRPENDX(a) (0x820 | (a) << 3)
21#define RVU_PF_VFTRPEND_W1SX(a) (0x840 | (a) << 3)
22#define RVU_PF_VFPF_MBOX_INTX(a) (0x880 | (a) << 3)
23#define RVU_PF_VFPF_MBOX_INT_W1SX(a) (0x8A0 | (a) << 3)
24#define RVU_PF_VFPF_MBOX_INT_ENA_W1SX(a) (0x8C0 | (a) << 3)
25#define RVU_PF_VFPF_MBOX_INT_ENA_W1CX(a) (0x8E0 | (a) << 3)
26#define RVU_PF_VFFLR_INTX(a) (0x900 | (a) << 3)
27#define RVU_PF_VFFLR_INT_W1SX(a) (0x920 | (a) << 3)
28#define RVU_PF_VFFLR_INT_ENA_W1SX(a) (0x940 | (a) << 3)
29#define RVU_PF_VFFLR_INT_ENA_W1CX(a) (0x960 | (a) << 3)
30#define RVU_PF_VFME_INTX(a) (0x980 | (a) << 3)
31#define RVU_PF_VFME_INT_W1SX(a) (0x9A0 | (a) << 3)
32#define RVU_PF_VFME_INT_ENA_W1SX(a) (0x9C0 | (a) << 3)
33#define RVU_PF_VFME_INT_ENA_W1CX(a) (0x9E0 | (a) << 3)
34#define RVU_PF_PFAF_MBOX0 (0xC00)
35#define RVU_PF_PFAF_MBOX1 (0xC08)
36#define RVU_PF_PFAF_MBOXX(a) (0xC00 | (a) << 3)
37#define RVU_PF_INT (0xc20)
38#define RVU_PF_INT_W1S (0xc28)
39#define RVU_PF_INT_ENA_W1S (0xc30)
40#define RVU_PF_INT_ENA_W1C (0xc38)
41#define RVU_PF_MSIX_VECX_ADDR(a) (0x000 | (a) << 4)
42#define RVU_PF_MSIX_VECX_CTL(a) (0x008 | (a) << 4)
43#define RVU_PF_MSIX_PBAX(a) (0xF0000 | (a) << 3)
44#define RVU_PF_VF_MBOX_ADDR (0xC40)
45#define RVU_PF_LMTLINE_ADDR (0xC48)
46
47/* RVU VF registers */
48#define RVU_VF_VFPF_MBOX0 (0x00000)
49#define RVU_VF_VFPF_MBOX1 (0x00008)
50#define RVU_VF_VFPF_MBOXX(a) (0x00 | (a) << 3)
51#define RVU_VF_INT (0x20)
52#define RVU_VF_INT_W1S (0x28)
53#define RVU_VF_INT_ENA_W1S (0x30)
54#define RVU_VF_INT_ENA_W1C (0x38)
55#define RVU_VF_BLOCK_ADDRX_DISC(a) (0x200 | (a) << 3)
56#define RVU_VF_MSIX_VECX_ADDR(a) (0x000 | (a) << 4)
57#define RVU_VF_MSIX_VECX_CTL(a) (0x008 | (a) << 4)
58#define RVU_VF_MSIX_PBAX(a) (0xF0000 | (a) << 3)
59#define RVU_VF_MBOX_REGION (0xC0000)
60
61#define RVU_FUNC_BLKADDR_SHIFT 20
62#define RVU_FUNC_BLKADDR_MASK 0x1FULL
63
64/* NPA LF registers */
65#define NPA_LFBASE (BLKTYPE_NPA << RVU_FUNC_BLKADDR_SHIFT)
66#define NPA_LF_AURA_OP_ALLOCX(a) (NPA_LFBASE | 0x10 | (a) << 3)
67#define NPA_LF_AURA_OP_FREE0 (NPA_LFBASE | 0x20)
68#define NPA_LF_AURA_OP_FREE1 (NPA_LFBASE | 0x28)
69#define NPA_LF_AURA_OP_CNT (NPA_LFBASE | 0x30)
70#define NPA_LF_AURA_OP_LIMIT (NPA_LFBASE | 0x50)
71#define NPA_LF_AURA_OP_INT (NPA_LFBASE | 0x60)
72#define NPA_LF_AURA_OP_THRESH (NPA_LFBASE | 0x70)
73#define NPA_LF_POOL_OP_PC (NPA_LFBASE | 0x100)
74#define NPA_LF_POOL_OP_AVAILABLE (NPA_LFBASE | 0x110)
75#define NPA_LF_POOL_OP_PTR_START0 (NPA_LFBASE | 0x120)
76#define NPA_LF_POOL_OP_PTR_START1 (NPA_LFBASE | 0x128)
77#define NPA_LF_POOL_OP_PTR_END0 (NPA_LFBASE | 0x130)
78#define NPA_LF_POOL_OP_PTR_END1 (NPA_LFBASE | 0x138)
79#define NPA_LF_POOL_OP_INT (NPA_LFBASE | 0x160)
80#define NPA_LF_POOL_OP_THRESH (NPA_LFBASE | 0x170)
81#define NPA_LF_ERR_INT (NPA_LFBASE | 0x200)
82#define NPA_LF_ERR_INT_W1S (NPA_LFBASE | 0x208)
83#define NPA_LF_ERR_INT_ENA_W1C (NPA_LFBASE | 0x210)
84#define NPA_LF_ERR_INT_ENA_W1S (NPA_LFBASE | 0x218)
85#define NPA_LF_RAS (NPA_LFBASE | 0x220)
86#define NPA_LF_RAS_W1S (NPA_LFBASE | 0x228)
87#define NPA_LF_RAS_ENA_W1C (NPA_LFBASE | 0x230)
88#define NPA_LF_RAS_ENA_W1S (NPA_LFBASE | 0x238)
89#define NPA_LF_QINTX_CNT(a) (NPA_LFBASE | 0x300 | (a) << 12)
90#define NPA_LF_QINTX_INT(a) (NPA_LFBASE | 0x310 | (a) << 12)
91#define NPA_LF_QINTX_INT_W1S(a) (NPA_LFBASE | 0x318 | (a) << 12)
92#define NPA_LF_QINTX_ENA_W1S(a) (NPA_LFBASE | 0x320 | (a) << 12)
93#define NPA_LF_QINTX_ENA_W1C(a) (NPA_LFBASE | 0x330 | (a) << 12)
94#define NPA_LF_AURA_BATCH_FREE0 (NPA_LFBASE | 0x400)
95
96/* NIX LF registers */
97#define NIX_LFBASE (BLKTYPE_NIX << RVU_FUNC_BLKADDR_SHIFT)
98#define NIX_LF_RX_SECRETX(a) (NIX_LFBASE | 0x0 | (a) << 3)
99#define NIX_LF_CFG (NIX_LFBASE | 0x100)
100#define NIX_LF_GINT (NIX_LFBASE | 0x200)
101#define NIX_LF_GINT_W1S (NIX_LFBASE | 0x208)
102#define NIX_LF_GINT_ENA_W1C (NIX_LFBASE | 0x210)
103#define NIX_LF_GINT_ENA_W1S (NIX_LFBASE | 0x218)
104#define NIX_LF_ERR_INT (NIX_LFBASE | 0x220)
105#define NIX_LF_ERR_INT_W1S (NIX_LFBASE | 0x228)
106#define NIX_LF_ERR_INT_ENA_W1C (NIX_LFBASE | 0x230)
107#define NIX_LF_ERR_INT_ENA_W1S (NIX_LFBASE | 0x238)
108#define NIX_LF_RAS (NIX_LFBASE | 0x240)
109#define NIX_LF_RAS_W1S (NIX_LFBASE | 0x248)
110#define NIX_LF_RAS_ENA_W1C (NIX_LFBASE | 0x250)
111#define NIX_LF_RAS_ENA_W1S (NIX_LFBASE | 0x258)
112#define NIX_LF_SQ_OP_ERR_DBG (NIX_LFBASE | 0x260)
113#define NIX_LF_MNQ_ERR_DBG (NIX_LFBASE | 0x270)
114#define NIX_LF_SEND_ERR_DBG (NIX_LFBASE | 0x280)
115#define NIX_LF_TX_STATX(a) (NIX_LFBASE | 0x300 | (a) << 3)
116#define NIX_LF_RX_STATX(a) (NIX_LFBASE | 0x400 | (a) << 3)
117#define NIX_LF_OP_SENDX(a) (NIX_LFBASE | 0x800 | (a) << 3)
118#define NIX_LF_RQ_OP_INT (NIX_LFBASE | 0x900)
119#define NIX_LF_RQ_OP_OCTS (NIX_LFBASE | 0x910)
120#define NIX_LF_RQ_OP_PKTS (NIX_LFBASE | 0x920)
121#define NIX_LF_OP_IPSEC_DYNO_CN (NIX_LFBASE | 0x980)
122#define NIX_LF_SQ_OP_INT (NIX_LFBASE | 0xa00)
123#define NIX_LF_SQ_OP_OCTS (NIX_LFBASE | 0xa10)
124#define NIX_LF_SQ_OP_PKTS (NIX_LFBASE | 0xa20)
125#define NIX_LF_SQ_OP_STATUS (NIX_LFBASE | 0xa30)
126#define NIX_LF_CQ_OP_INT (NIX_LFBASE | 0xb00)
127#define NIX_LF_CQ_OP_DOOR (NIX_LFBASE | 0xb30)
128#define NIX_LF_CQ_OP_STATUS (NIX_LFBASE | 0xb40)
129#define NIX_LF_QINTX_CNT(a) (NIX_LFBASE | 0xC00 | (a) << 12)
130#define NIX_LF_QINTX_INT(a) (NIX_LFBASE | 0xC10 | (a) << 12)
131#define NIX_LF_QINTX_INT_W1S(a) (NIX_LFBASE | 0xC18 | (a) << 12)
132#define NIX_LF_QINTX_ENA_W1S(a) (NIX_LFBASE | 0xC20 | (a) << 12)
133#define NIX_LF_QINTX_ENA_W1C(a) (NIX_LFBASE | 0xC30 | (a) << 12)
134#define NIX_LF_CINTX_CNT(a) (NIX_LFBASE | 0xD00 | (a) << 12)
135#define NIX_LF_CINTX_WAIT(a) (NIX_LFBASE | 0xD10 | (a) << 12)
136#define NIX_LF_CINTX_INT(a) (NIX_LFBASE | 0xD20 | (a) << 12)
137#define NIX_LF_CINTX_INT_W1S(a) (NIX_LFBASE | 0xD30 | (a) << 12)
138#define NIX_LF_CINTX_ENA_W1S(a) (NIX_LFBASE | 0xD40 | (a) << 12)
139#define NIX_LF_CINTX_ENA_W1C(a) (NIX_LFBASE | 0xD50 | (a) << 12)
140
141/* NIX AF transmit scheduler registers */
142#define NIX_AF_SMQX_CFG(a) (0x700 | (a) << 16)
143#define NIX_AF_TL1X_SCHEDULE(a) (0xC00 | (a) << 16)
144#define NIX_AF_TL1X_CIR(a) (0xC20 | (a) << 16)
145#define NIX_AF_TL1X_TOPOLOGY(a) (0xC80 | (a) << 16)
146#define NIX_AF_TL2X_PARENT(a) (0xE88 | (a) << 16)
147#define NIX_AF_TL2X_SCHEDULE(a) (0xE00 | (a) << 16)
148#define NIX_AF_TL2X_TOPOLOGY(a) (0xE80 | (a) << 16)
149#define NIX_AF_TL2X_CIR(a) (0xE20 | (a) << 16)
150#define NIX_AF_TL2X_PIR(a) (0xE30 | (a) << 16)
151#define NIX_AF_TL3X_PARENT(a) (0x1088 | (a) << 16)
152#define NIX_AF_TL3X_SCHEDULE(a) (0x1000 | (a) << 16)
153#define NIX_AF_TL3X_SHAPE(a) (0x1010 | (a) << 16)
154#define NIX_AF_TL3X_CIR(a) (0x1020 | (a) << 16)
155#define NIX_AF_TL3X_PIR(a) (0x1030 | (a) << 16)
156#define NIX_AF_TL3X_TOPOLOGY(a) (0x1080 | (a) << 16)
157#define NIX_AF_TL4X_PARENT(a) (0x1288 | (a) << 16)
158#define NIX_AF_TL4X_SCHEDULE(a) (0x1200 | (a) << 16)
159#define NIX_AF_TL4X_SHAPE(a) (0x1210 | (a) << 16)
160#define NIX_AF_TL4X_CIR(a) (0x1220 | (a) << 16)
161#define NIX_AF_TL4X_PIR(a) (0x1230 | (a) << 16)
162#define NIX_AF_TL4X_TOPOLOGY(a) (0x1280 | (a) << 16)
163#define NIX_AF_MDQX_SCHEDULE(a) (0x1400 | (a) << 16)
164#define NIX_AF_MDQX_SHAPE(a) (0x1410 | (a) << 16)
165#define NIX_AF_MDQX_CIR(a) (0x1420 | (a) << 16)
166#define NIX_AF_MDQX_PIR(a) (0x1430 | (a) << 16)
167#define NIX_AF_MDQX_PARENT(a) (0x1480 | (a) << 16)
168#define NIX_AF_TL3_TL2X_LINKX_CFG(a, b) (0x1700 | (a) << 16 | (b) << 3)
169
170/* LMT LF registers */
171#define LMT_LFBASE BIT_ULL(RVU_FUNC_BLKADDR_SHIFT)
172#define LMT_LF_LMTLINEX(a) (LMT_LFBASE | 0x000 | (a) << 12)
173#define LMT_LF_LMTCANCEL (LMT_LFBASE | 0x400)
174
175#endif /* OTX2_REG_H */
176

source code of linux/drivers/net/ethernet/marvell/octeontx2/nic/otx2_reg.h