xref: /openbsd/sys/dev/fdt/if_mvppreg.h (revision 4cfece93)
1 /*	$OpenBSD: if_mvppreg.h,v 1.1 2020/06/25 12:09:11 patrick Exp $	*/
2 /*
3  * Copyright (c) 2008, 2019 Mark Kettenis <kettenis@openbsd.org>
4  * Copyright (c) 2017, 2020 Patrick Wildt <patrick@blueri.se>
5  *
6  * Permission to use, copy, modify, and distribute this software for any
7  * purpose with or without fee is hereby granted, provided that the above
8  * copyright notice and this permission notice appear in all copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17  */
18 /*
19  * Copyright (C) 2016 Marvell International Ltd.
20  *
21  * Marvell BSD License Option
22  *
23  * If you received this File from Marvell, you may opt to use, redistribute
24  * and/or modify this File under the following licensing terms.
25  * Redistribution and use in source and binary forms, with or without
26  * modification, are permitted provided that the following conditions are met:
27  *
28  *   * Redistributions of source code must retain the above copyright notice,
29  *     this list of conditions and the following disclaimer.
30  *
31  *   * Redistributions in binary form must reproduce the above copyright
32  *     notice, this list of conditions and the following disclaimer in the
33  *     documentation and/or other materials provided with the distribution.
34  *
35  *   * Neither the name of Marvell nor the names of its contributors may be
36  *     used to endorse or promote products derived from this software without
37  *     specific prior written permission.
38  *
39  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
40  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
42  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
43  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
44  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
45  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
46  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
47  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
48  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
49  * POSSIBILITY OF SUCH DAMAGE.
50  */
51 
52 #ifndef __MVPP2_LIB_HW__
53 #define __MVPP2_LIB_HW__
54 
55 #ifndef BIT
56 #define BIT(nr)         (1 << (nr))
57 #endif
58 
59 /* PP2v2 registers offsets */
60 #define MVPP22_SMI_OFFSET                                  0x1200
61 #define MVPP22_MPCS_OFFSET                                 0x7000
62 #define MVPP22_MPCS_REG_SIZE                               0x1000
63 #define MVPP22_XPCS_OFFSET                                 0x7400
64 #define MVPP22_XPCS_REG_SIZE                               0x1000
65 #define MVPP22_GMAC_OFFSET                                 0x7e00
66 #define MVPP22_GMAC_REG_SIZE                               0x1000
67 #define MVPP22_XLG_OFFSET                                  0x7f00
68 #define MVPP22_XLG_REG_SIZE                                0x1000
69 #define MVPP22_RFU1_OFFSET                                 0x318000
70 #define MVPP22_ADDR_SPACE_SIZE                             0x10000
71 
72 /* RX Fifo Registers */
73 #define MVPP2_RX_DATA_FIFO_SIZE_REG(port)                 (0x00 + 4 * (port))
74 #define MVPP2_RX_ATTR_FIFO_SIZE_REG(port)                 (0x20 + 4 * (port))
75 #define MVPP2_RX_MIN_PKT_SIZE_REG                         0x60
76 #define MVPP2_RX_FIFO_INIT_REG                            0x64
77 #define MVPP22_TX_FIFO_THRESH_REG(port)                  (0x8840 + 4 * (port))
78 #define MVPP22_TX_FIFO_SIZE_REG(port)                    (0x8860 + 4 * (port))
79 
80 /* RX DMA Top Registers */
81 #define MVPP2_RX_CTRL_REG(port)                           (0x140 + 4 * (port))
82 #define MVPP2_RX_LOW_LATENCY_PKT_SIZE(s)                  (((s) & 0xfff) << 16)
83 #define MVPP2_RX_USE_PSEUDO_FOR_CSUM_MASK                 BIT(31)
84 #define MVPP2_POOL_BUF_SIZE_REG(pool)                     (0x180 + 4 * (pool))
85 #define MVPP2_POOL_BUF_SIZE_OFFSET                        5
86 #define MVPP2_RXQ_CONFIG_REG(rxq)                         (0x800 + 4 * (rxq))
87 #define MVPP2_SNOOP_PKT_SIZE_MASK                         0x1ff
88 #define MVPP2_SNOOP_BUF_HDR_MASK                          BIT(9)
89 #define MVPP2_RXQ_POOL_SHORT_OFFS                         20
90 #define MVPP2_RXQ_POOL_SHORT_MASK                         0xf00000
91 #define MVPP2_RXQ_POOL_LONG_OFFS                          24
92 #define MVPP2_RXQ_POOL_LONG_MASK                          0xf000000
93 #define MVPP2_RXQ_PACKET_OFFSET_OFFS                      28
94 #define MVPP2_RXQ_PACKET_OFFSET_MASK                      0x70000000
95 #define MVPP2_RXQ_DISABLE_MASK                            BIT(31)
96 
97 /* Parser Registers */
98 #define MVPP2_PRS_INIT_LOOKUP_REG                         0x1000
99 #define MVPP2_PRS_PORT_LU_MAX                             0xf
100 #define MVPP2_PRS_PORT_LU_MASK(port)                      (0xff << ((port) * 4))
101 #define MVPP2_PRS_PORT_LU_VAL(port, val)                  ((val) << ((port) * 4))
102 #define MVPP2_PRS_INIT_OFFS_REG(port)                     (0x1004 + ((port) & 4))
103 #define MVPP2_PRS_INIT_OFF_MASK(port)                     (0x3f << (((port) % 4) * 8))
104 #define MVPP2_PRS_INIT_OFF_VAL(port, val)                 ((val) << (((port) % 4) * 8))
105 #define MVPP2_PRS_MAX_LOOP_REG(port)                      (0x100c + ((port) & 4))
106 #define MVPP2_PRS_MAX_LOOP_MASK(port)                     (0xff << (((port) % 4) * 8))
107 #define MVPP2_PRS_MAX_LOOP_VAL(port, val)                 ((val) << (((port) % 4) * 8))
108 #define MVPP2_PRS_TCAM_IDX_REG                            0x1100
109 #define MVPP2_PRS_TCAM_DATA_REG(idx)                      (0x1104 + (idx) * 4)
110 #define MVPP2_PRS_TCAM_INV_MASK                           BIT(31)
111 #define MVPP2_PRS_SRAM_IDX_REG                            0x1200
112 #define MVPP2_PRS_SRAM_DATA_REG(idx)                      (0x1204 + (idx) * 4)
113 #define MVPP2_PRS_TCAM_CTRL_REG                           0x1230
114 #define MVPP2_PRS_TCAM_EN_MASK                            BIT(0)
115 
116 /* Classifier Registers */
117 #define MVPP2_CLS_MODE_REG                                0x1800
118 #define MVPP2_CLS_MODE_ACTIVE_MASK                        BIT(0)
119 #define MVPP2_CLS_PORT_WAY_REG                            0x1810
120 #define MVPP2_CLS_PORT_WAY_MASK(port)                     (1 << (port))
121 #define MVPP2_CLS_LKP_INDEX_REG                           0x1814
122 #define MVPP2_CLS_LKP_INDEX_WAY_OFFS                      6
123 #define MVPP2_CLS_LKP_TBL_REG                             0x1818
124 #define MVPP2_CLS_LKP_TBL_RXQ_MASK                        0xff
125 #define MVPP2_CLS_LKP_TBL_LOOKUP_EN_MASK                  BIT(25)
126 #define MVPP2_CLS_FLOW_INDEX_REG                          0x1820
127 #define MVPP2_CLS_FLOW_TBL0_REG                           0x1824
128 #define MVPP2_CLS_FLOW_TBL1_REG                           0x1828
129 #define MVPP2_CLS_FLOW_TBL2_REG                           0x182c
130 #define MVPP2_CLS_OVERSIZE_RXQ_LOW_REG(port)              (0x1980 + ((port) * 4))
131 #define MVPP2_CLS_OVERSIZE_RXQ_LOW_BITS                   3
132 #define MVPP2_CLS_OVERSIZE_RXQ_LOW_MASK                   0x7
133 #define MVPP2_CLS_SWFWD_P2HQ_REG(port)                    (0x19b0 + ((port) * 4))
134 #define MVPP2_CLS_SWFWD_PCTRL_REG                         0x19d0
135 #define MVPP2_CLS_SWFWD_PCTRL_MASK(port)                  (1 << (port))
136 
137 /* Descriptor Manager Top Registers */
138 #define MVPP2_RXQ_NUM_REG                                 0x2040
139 #define MVPP2_RXQ_DESC_ADDR_REG                           0x2044
140 #define MVPP2_RXQ_DESC_SIZE_REG                           0x2048
141 #define MVPP2_RXQ_DESC_SIZE_MASK                          0x3ff0
142 #define MVPP2_RXQ_STATUS_UPDATE_REG(rxq)                  (0x3000 + 4 * (rxq))
143 #define MVPP2_RXQ_NUM_PROCESSED_OFFSET                    0
144 #define MVPP2_RXQ_NUM_NEW_OFFSET                          16
145 #define MVPP2_RXQ_STATUS_REG(rxq)                         (0x3400 + 4 * (rxq))
146 #define MVPP2_RXQ_OCCUPIED_MASK                           0x3fff
147 #define MVPP2_RXQ_NON_OCCUPIED_OFFSET                     16
148 #define MVPP2_RXQ_NON_OCCUPIED_MASK                       0x3fff0000
149 #define MVPP2_RXQ_THRESH_REG                              0x204c
150 #define MVPP2_OCCUPIED_THRESH_OFFSET                      0
151 #define MVPP2_OCCUPIED_THRESH_MASK                        0x3fff
152 #define MVPP2_RXQ_INDEX_REG                               0x2050
153 #define MVPP2_TXQ_NUM_REG                                 0x2080
154 #define MVPP2_TXQ_DESC_ADDR_REG                           0x2084
155 #define MVPP22_TXQ_DESC_ADDR_HIGH_REG                     0x20a8
156 #define MVPP22_TXQ_DESC_ADDR_HIGH_MASK                    0xff
157 #define MVPP2_TXQ_DESC_SIZE_REG                           0x2088
158 #define MVPP2_TXQ_DESC_SIZE_MASK                          0x3ff0
159 #define MVPP2_AGGR_TXQ_UPDATE_REG                         0x2090
160 #define MVPP2_TXQ_THRESH_REG                              0x2094
161 #define MVPP2_TRANSMITTED_THRESH_OFFSET                   16
162 #define MVPP2_TRANSMITTED_THRESH_MASK                     0x3fff
163 #define MVPP2_TXQ_INDEX_REG                               0x2098
164 #define MVPP2_TXQ_PREF_BUF_REG                            0x209c
165 #define MVPP2_PREF_BUF_PTR(desc)                          ((desc) & 0xfff)
166 #define MVPP2_PREF_BUF_SIZE_4                             (BIT(12) | BIT(13))
167 #define MVPP2_PREF_BUF_SIZE_16                            (BIT(12) | BIT(14))
168 #define MVPP2_PREF_BUF_THRESH(val)                        ((val) << 17)
169 #define MVPP2_TXQ_DRAIN_EN_MASK                           BIT(31)
170 #define MVPP2_TXQ_PENDING_REG                             0x20a0
171 #define MVPP2_TXQ_PENDING_MASK                            0x3fff
172 #define MVPP2_TXQ_INT_STATUS_REG                          0x20a4
173 #define MVPP2_TXQ_SENT_REG(txq)                           (0x3c00 + 4 * (txq))
174 #define MVPP22_TXQ_SENT_REG(txq)                          (0x3e00 + 4 * (txq-128))
175 #define MVPP2_TRANSMITTED_COUNT_OFFSET                    16
176 #define MVPP2_TRANSMITTED_COUNT_MASK                      0x3fff0000
177 #define MVPP2_TXQ_RSVD_REQ_REG                            0x20b0
178 #define MVPP2_TXQ_RSVD_REQ_Q_OFFSET                       16
179 #define MVPP2_TXQ_RSVD_RSLT_REG                           0x20b4
180 #define MVPP2_TXQ_RSVD_RSLT_MASK                          0x3fff
181 #define MVPP2_TXQ_RSVD_CLR_REG                            0x20b8
182 #define MVPP2_TXQ_RSVD_CLR_OFFSET                         16
183 #define MVPP2_AGGR_TXQ_DESC_ADDR_REG(cpu)                 (0x2100 + 4 * (cpu))
184 #define MVPP2_AGGR_TXQ_DESC_SIZE_REG(cpu)                 (0x2140 + 4 * (cpu))
185 #define MVPP2_AGGR_TXQ_DESC_SIZE_MASK                     0x3ff0
186 #define MVPP2_AGGR_TXQ_STATUS_REG(cpu)                    (0x2180 + 4 * (cpu))
187 #define MVPP2_AGGR_TXQ_PENDING_MASK                       0x3fff
188 #define MVPP2_AGGR_TXQ_INDEX_REG(cpu)                     (0x21c0 + 4 * (cpu))
189 
190 /* MBUS bridge registers */
191 #define MVPP2_WIN_BASE(w)                                 (0x4000 + ((w) << 2))
192 #define MVPP2_WIN_SIZE(w)                                 (0x4020 + ((w) << 2))
193 #define MVPP2_WIN_REMAP(w)                                (0x4040 + ((w) << 2))
194 #define MVPP2_BASE_ADDR_ENABLE                            0x4060
195 
196 /* Interrupt Cause and Mask registers */
197 #define MVPP2_ISR_TX_THRESHOLD_REG(port)                  (0x5140 + 4 * (port))
198 #define MVPP2_ISR_RX_THRESHOLD_REG(rxq)                   (0x5200 + 4 * (rxq))
199 #define MVPP2_ISR_RXQ_GROUP_REG(rxq)                      (0x5400 + 4 * (rxq))
200 #define MVPP2_ISR_RXQ_GROUP_INDEX_REG                     0x5400
201 #define MVPP2_ISR_RXQ_GROUP_INDEX_GROUP_SHIFT             7
202 #define MVPP2_ISR_RXQ_SUB_GROUP_CONFIG_REG                0x5404
203 #define MVPP2_ISR_RXQ_SUB_GROUP_CONFIG_SIZE_SHIFT         8
204 #define MVPP2_ISR_ENABLE_REG(port)                        (0x5420 + 4 * (port))
205 #define MVPP2_ISR_ENABLE_INTERRUPT(mask)                  ((mask) & 0xffff)
206 #define MVPP2_ISR_DISABLE_INTERRUPT(mask)                 (((mask) << 16) & 0xffff0000)
207 #define MVPP2_ISR_RX_TX_CAUSE_REG(port)                   (0x5480 + 4 * (port))
208 #define MVPP2_CAUSE_RXQ_OCCUP_DESC_ALL_MASK               0xff
209 #define MVPP2_CAUSE_TXQ_OCCUP_DESC_ALL_MASK               0xff0000
210 #define MVPP2_CAUSE_TXQ_OCCUP_DESC_ALL_OFFSET             16
211 #define MVPP2_CAUSE_RX_FIFO_OVERRUN_MASK                  BIT(24)
212 #define MVPP2_CAUSE_FCS_ERR_MASK                          BIT(25)
213 #define MVPP2_CAUSE_TX_FIFO_UNDERRUN_MASK                 BIT(26)
214 #define MVPP2_CAUSE_TX_EXCEPTION_SUM_MASK                 BIT(29)
215 #define MVPP2_CAUSE_RX_EXCEPTION_SUM_MASK                 BIT(30)
216 #define MVPP2_CAUSE_MISC_SUM_MASK                         BIT(31)
217 #define MVPP2_ISR_RX_TX_MASK_REG(port)                    (0x54a0 + 4 * (port))
218 #define MVPP2_ISR_PON_RX_TX_MASK_REG                      0x54bc
219 #define MVPP2_PON_CAUSE_RXQ_OCCUP_DESC_ALL_MASK           0xffff
220 #define MVPP2_PON_CAUSE_TXP_OCCUP_DESC_ALL_MASK           0x3fc00000
221 #define MVPP2_PON_CAUSE_MISC_SUM_MASK                     BIT(31)
222 #define MVPP2_ISR_MISC_CAUSE_REG                          0x55b0
223 
224 /* Buffer Manager registers */
225 #define MVPP2_BM_POOL_BASE_REG(pool)                      (0x6000 + ((pool) * 4))
226 #define MVPP2_BM_POOL_BASE_ADDR_MASK                      0xfffff80
227 #define MVPP2_BM_POOL_SIZE_REG(pool)                      (0x6040 + ((pool) * 4))
228 #define MVPP2_BM_POOL_SIZE_MASK                           0xfff0
229 #define MVPP2_BM_POOL_READ_PTR_REG(pool)                  (0x6080 + ((pool) * 4))
230 #define MVPP2_BM_POOL_GET_READ_PTR_MASK                   0xfff0
231 #define MVPP2_BM_POOL_PTRS_NUM_REG(pool)                  (0x60c0 + ((pool) * 4))
232 #define MVPP2_BM_POOL_PTRS_NUM_MASK                       0xfff8
233 #define MVPP2_BM_BPPI_READ_PTR_REG(pool)                  (0x6100 + ((pool) * 4))
234 #define MVPP2_BM_BPPI_PTRS_NUM_REG(pool)                  (0x6140 + ((pool) * 4))
235 #define MVPP2_BM_BPPI_PTR_NUM_MASK                        0x7ff
236 #define MVPP2_BM_BPPI_PREFETCH_FULL_MASK                  BIT(16)
237 #define MVPP2_BM_POOL_CTRL_REG(pool)                      (0x6200 + ((pool) * 4))
238 #define MVPP2_BM_START_MASK                               BIT(0)
239 #define MVPP2_BM_STOP_MASK                                BIT(1)
240 #define MVPP2_BM_STATE_MASK                               BIT(4)
241 #define MVPP2_BM_LOW_THRESH_OFFS                          8
242 #define MVPP2_BM_LOW_THRESH_MASK                          0x7f00
243 #define MVPP2_BM_LOW_THRESH_VALUE(val)                    ((val) << MVPP2_BM_LOW_THRESH_OFFS)
244 #define MVPP2_BM_HIGH_THRESH_OFFS                         16
245 #define MVPP2_BM_HIGH_THRESH_MASK                         0x7f0000
246 #define MVPP2_BM_HIGH_THRESH_VALUE(val)                   ((val) << MVPP2_BM_HIGH_THRESH_OFFS)
247 #define MVPP2_BM_INTR_CAUSE_REG(pool)                     (0x6240 + ((pool) * 4))
248 #define MVPP2_BM_RELEASED_DELAY_MASK                      BIT(0)
249 #define MVPP2_BM_ALLOC_FAILED_MASK                        BIT(1)
250 #define MVPP2_BM_BPPE_EMPTY_MASK                          BIT(2)
251 #define MVPP2_BM_BPPE_FULL_MASK                           BIT(3)
252 #define MVPP2_BM_AVAILABLE_BP_LOW_MASK                    BIT(4)
253 #define MVPP2_BM_INTR_MASK_REG(pool)                      (0x6280 + ((pool) * 4))
254 #define MVPP2_BM_PHY_ALLOC_REG(pool)                      (0x6400 + ((pool) * 4))
255 #define MVPP2_BM_PHY_ALLOC_GRNTD_MASK                     BIT(0)
256 #define MVPP2_BM_VIRT_ALLOC_REG                           0x6440
257 #define MVPP2_BM_PHY_RLS_REG(pool)                        (0x6480 + ((pool) * 4))
258 #define MVPP2_BM_PHY_RLS_MC_BUFF_MASK                     BIT(0)
259 #define MVPP2_BM_PHY_RLS_PRIO_EN_MASK                     BIT(1)
260 #define MVPP2_BM_PHY_RLS_GRNTD_MASK                       BIT(2)
261 #define MVPP2_BM_VIRT_RLS_REG                             0x64c0
262 #define MVPP2_BM_MC_RLS_REG                               0x64c4
263 #define MVPP2_BM_MC_ID_MASK                               0xfff
264 #define MVPP2_BM_FORCE_RELEASE_MASK                       BIT(12)
265 
266 #define MVPP22_BM_PHY_VIRT_HIGH_ALLOC_REG                 0x6444
267 #define MVPP22_BM_PHY_HIGH_ALLOC_OFFSET                   0
268 #define MVPP22_BM_VIRT_HIGH_ALLOC_OFFSET                  8
269 #define MVPP22_BM_VIRT_HIGH_ALLOC_MASK                    0xff00
270 
271 #define MVPP22_BM_PHY_VIRT_HIGH_RLS_REG                   0x64c4
272 
273 #define MVPP22_BM_PHY_HIGH_RLS_OFFSET                     0
274 #define MVPP22_BM_VIRT_HIGH_RLS_OFFST                     8
275 
276 #define MVPP22_BM_POOL_BASE_HIGH_REG                      0x6310
277 #define MVPP22_BM_POOL_BASE_HIGH_MASK                     0xff
278 #define MVPP2_BM_PRIO_CTRL_REG                            0x6800
279 
280 /* TX Scheduler registers */
281 #define MVPP2_TXP_SCHED_PORT_INDEX_REG                    0x8000
282 #define MVPP2_TXP_SCHED_Q_CMD_REG                         0x8004
283 #define MVPP2_TXP_SCHED_ENQ_MASK                          0xff
284 #define MVPP2_TXP_SCHED_DISQ_OFFSET                       8
285 #define MVPP2_TXP_SCHED_CMD_1_REG                         0x8010
286 #define MVPP2_TXP_SCHED_PERIOD_REG                        0x8018
287 #define MVPP2_TXP_SCHED_MTU_REG                           0x801c
288 #define MVPP2_TXP_MTU_MAX                                 0x7FFFF
289 #define MVPP2_TXP_SCHED_REFILL_REG                        0x8020
290 #define MVPP2_TXP_REFILL_TOKENS_ALL_MASK                  0x7ffff
291 #define MVPP2_TXP_REFILL_PERIOD_ALL_MASK                  0x3ff00000
292 #define MVPP2_TXP_REFILL_PERIOD_MASK(v)                   ((v) << 20)
293 #define MVPP2_TXP_SCHED_TOKEN_SIZE_REG                    0x8024
294 #define MVPP2_TXP_TOKEN_SIZE_MAX                          0xffffffff
295 #define MVPP2_TXQ_SCHED_REFILL_REG(q)                     (0x8040 + ((q) << 2))
296 #define MVPP2_TXQ_REFILL_TOKENS_ALL_MASK                  0x7ffff
297 #define MVPP2_TXQ_REFILL_PERIOD_ALL_MASK                  0x3ff00000
298 #define MVPP2_TXQ_REFILL_PERIOD_MASK(v)                   ((v) << 20)
299 #define MVPP2_TXQ_SCHED_TOKEN_SIZE_REG(q)                 (0x8060 + ((q) << 2))
300 #define MVPP2_TXQ_TOKEN_SIZE_MAX                          0x7fffffff
301 #define MVPP2_TXQ_SCHED_TOKEN_CNTR_REG(q)                 (0x8080 + ((q) << 2))
302 #define MVPP2_TXQ_TOKEN_CNTR_MAX                          0xffffffff
303 
304 /* TX general registers */
305 #define MVPP2_TX_SNOOP_REG                                0x8800
306 #define MVPP2_TX_PORT_FLUSH_REG                           0x8810
307 #define MVPP2_TX_PORT_FLUSH_MASK(port)                    (1 << (port))
308 
309 /* LMS registers */
310 #define MVPP2_SRC_ADDR_MIDDLE                             0x24
311 #define MVPP2_SRC_ADDR_HIGH                               0x28
312 #define MVPP2_PHY_AN_CFG0_REG                             0x34
313 #define MVPP2_PHY_AN_STOP_SMI0_MASK                       BIT(7)
314 #define MVPP2_MIB_COUNTERS_BASE(port)                     (0x1000 + ((port) >> 1) * 0x400 + (port) * 0x400)
315 #define MVPP2_MIB_LATE_COLLISION                          0x7c
316 #define MVPP2_ISR_SUM_MASK_REG                            0x220c
317 #define MVPP2_MNG_EXTENDED_GLOBAL_CTRL_REG                0x305c
318 #define MVPP2_EXT_GLOBAL_CTRL_DEFAULT                     0x27
319 
320 /* Per-port registers */
321 #define MVPP2_GMAC_CTRL_0_REG                             0x0
322 #define MVPP2_GMAC_PORT_EN_MASK                           BIT(0)
323 #define MVPP2_GMAC_PORT_TYPE_MASK                         BIT(1)
324 #define MVPP2_GMAC_MAX_RX_SIZE_OFFS                       2
325 #define MVPP2_GMAC_MAX_RX_SIZE_MASK                       0x7ffc
326 #define MVPP2_GMAC_MIB_CNTR_EN_MASK                       BIT(15)
327 #define MVPP2_GMAC_CTRL_1_REG                             0x4
328 #define MVPP2_GMAC_PERIODIC_XON_EN_MASK                   BIT(1)
329 #define MVPP2_GMAC_GMII_LB_EN_MASK                        BIT(5)
330 #define MVPP2_GMAC_PCS_LB_EN_BIT                          6
331 #define MVPP2_GMAC_PCS_LB_EN_MASK                         BIT(6)
332 #define MVPP2_GMAC_SA_LOW_OFFS                            7
333 #define MVPP2_GMAC_CTRL_2_REG                             0x8
334 #define MVPP2_GMAC_INBAND_AN_MASK                         BIT(0)
335 #define MVPP2_GMAC_PCS_ENABLE_MASK                        BIT(3)
336 #define MVPP2_GMAC_PORT_RGMII_MASK                        BIT(4)
337 #define MVPP2_GMAC_PORT_RESET_MASK                        BIT(6)
338 #define MVPP2_GMAC_AUTONEG_CONFIG                         0xc
339 #define MVPP2_GMAC_FORCE_LINK_DOWN                        BIT(0)
340 #define MVPP2_GMAC_FORCE_LINK_PASS                        BIT(1)
341 #define MVPP2_GMAC_IN_BAND_AUTONEG                        BIT(2)
342 #define MVPP2_GMAC_IN_BAND_AUTONEG_BYPASS                 BIT(3)
343 #define MVPP2_GMAC_IN_BAND_RESTART_AN                     BIT(4)
344 #define MVPP2_GMAC_CONFIG_MII_SPEED                       BIT(5)
345 #define MVPP2_GMAC_CONFIG_GMII_SPEED                      BIT(6)
346 #define MVPP2_GMAC_AN_SPEED_EN                            BIT(7)
347 #define MVPP2_GMAC_FC_ADV_EN                              BIT(9)
348 #define MVPP2_GMAC_FC_ADV_ASM_EN                          BIT(10)
349 #define MVPP2_GMAC_FLOW_CTRL_AUTONEG                      BIT(11)
350 #define MVPP2_GMAC_CONFIG_FULL_DUPLEX                     BIT(12)
351 #define MVPP2_GMAC_AN_DUPLEX_EN                           BIT(13)
352 #define MVPP2_GMAC_PORT_FIFO_CFG_1_REG                    0x1c
353 #define MVPP2_GMAC_TX_FIFO_MIN_TH_OFFS                    6
354 #define MVPP2_GMAC_TX_FIFO_MIN_TH_ALL_MASK                0x1fc0
355 #define MVPP2_GMAC_TX_FIFO_MIN_TH_MASK(v)                 (((v) << 6) & MVPP2_GMAC_TX_FIFO_MIN_TH_ALL_MASK)
356 
357 /* Port Interrupts */
358 #define MV_GMAC_INTERRUPT_CAUSE_REG                       (0x0020)
359 #define MV_GMAC_INTERRUPT_MASK_REG                        (0x0024)
360 #define MV_GMAC_INTERRUPT_CAUSE_LINK_CHANGE_OFFS          1
361 #define MV_GMAC_INTERRUPT_CAUSE_LINK_CHANGE_MASK          (0x1 << MV_GMAC_INTERRUPT_CAUSE_LINK_CHANGE_OFFS)
362 
363 /* Port Interrupt Summary */
364 #define MV_GMAC_INTERRUPT_SUM_CAUSE_REG                   (0x00A0)
365 #define MV_GMAC_INTERRUPT_SUM_MASK_REG                    (0x00A4)
366 #define MV_GMAC_INTERRUPT_SUM_CAUSE_LINK_CHANGE_OFFS      1
367 #define MV_GMAC_INTERRUPT_SUM_CAUSE_LINK_CHANGE_MASK      (0x1 << MV_GMAC_INTERRUPT_SUM_CAUSE_LINK_CHANGE_OFFS)
368 
369 /* Port Mac Control0 */
370 #define MVPP2_PORT_CTRL0_REG                              (0x0000)
371 #define MVPP2_PORT_CTRL0_PORTEN_OFFS    0
372 #define MVPP2_PORT_CTRL0_PORTEN_MASK    \
373     (0x00000001 << MVPP2_PORT_CTRL0_PORTEN_OFFS)
374 
375 #define MVPP2_PORT_CTRL0_PORTTYPE_OFFS    1
376 #define MVPP2_PORT_CTRL0_PORTTYPE_MASK    \
377     (0x00000001 << MVPP2_PORT_CTRL0_PORTTYPE_OFFS)
378 
379 #define MVPP2_PORT_CTRL0_FRAMESIZELIMIT_OFFS    2
380 #define MVPP2_PORT_CTRL0_FRAMESIZELIMIT_MASK    \
381     (0x00001fff << MVPP2_PORT_CTRL0_FRAMESIZELIMIT_OFFS)
382 
383 #define MVPP2_PORT_CTRL0_COUNT_EN_OFFS    15
384 #define MVPP2_PORT_CTRL0_COUNT_EN_MASK    \
385     (0x00000001 << MVPP2_PORT_CTRL0_COUNT_EN_OFFS)
386 
387 /* Port Mac Control1 */
388 #define MVPP2_PORT_CTRL1_REG                              (0x0004)
389 #define MVPP2_PORT_CTRL1_EN_RX_CRC_CHECK_OFFS    0
390 #define MVPP2_PORT_CTRL1_EN_RX_CRC_CHECK_MASK    \
391     (0x00000001 << MVPP2_PORT_CTRL1_EN_RX_CRC_CHECK_OFFS)
392 
393 #define MVPP2_PORT_CTRL1_EN_PERIODIC_FC_XON_OFFS    1
394 #define MVPP2_PORT_CTRL1_EN_PERIODIC_FC_XON_MASK    \
395     (0x00000001 << MVPP2_PORT_CTRL1_EN_PERIODIC_FC_XON_OFFS)
396 
397 #define MVPP2_PORT_CTRL1_MGMII_MODE_OFFS    2
398 #define MVPP2_PORT_CTRL1_MGMII_MODE_MASK    \
399     (0x00000001 << MVPP2_PORT_CTRL1_MGMII_MODE_OFFS)
400 
401 #define MVPP2_PORT_CTRL1_PFC_CASCADE_PORT_ENABLE_OFFS   3
402 #define MVPP2_PORT_CTRL1_PFC_CASCADE_PORT_ENABLE_MASK    \
403     (0x00000001 << MVPP2_PORT_CTRL1_PFC_CASCADE_PORT_ENABLE_OFFS)
404 
405 #define MVPP2_PORT_CTRL1_DIS_EXCESSIVE_COL_OFFS   4
406 #define MVPP2_PORT_CTRL1_DIS_EXCESSIVE_COL_MASK    \
407     (0x00000001 << MVPP2_PORT_CTRL1_DIS_EXCESSIVE_COL_OFFS)
408 
409 #define MVPP2_PORT_CTRL1_GMII_LOOPBACK_OFFS   5
410 #define MVPP2_PORT_CTRL1_GMII_LOOPBACK_MASK    \
411     (0x00000001 << MVPP2_PORT_CTRL1_GMII_LOOPBACK_OFFS)
412 
413 #define MVPP2_PORT_CTRL1_PCS_LOOPBACK_OFFS    6
414 #define MVPP2_PORT_CTRL1_PCS_LOOPBACK_MASK    \
415     (0x00000001 << MVPP2_PORT_CTRL1_PCS_LOOPBACK_OFFS)
416 
417 #define MVPP2_PORT_CTRL1_FC_SA_ADDR_LO_OFFS   7
418 #define MVPP2_PORT_CTRL1_FC_SA_ADDR_LO_MASK    \
419     (0x000000ff << MVPP2_PORT_CTRL1_FC_SA_ADDR_LO_OFFS)
420 
421 #define MVPP2_PORT_CTRL1_EN_SHORT_PREAMBLE_OFFS   15
422 #define MVPP2_PORT_CTRL1_EN_SHORT_PREAMBLE_MASK    \
423     (0x00000001 << MVPP2_PORT_CTRL1_EN_SHORT_PREAMBLE_OFFS)
424 
425 /* Port Mac Control2 */
426 #define MVPP2_PORT_CTRL2_REG                              (0x0008)
427 #define MVPP2_PORT_CTRL2_SGMII_MODE_OFFS    0
428 #define MVPP2_PORT_CTRL2_SGMII_MODE_MASK    \
429     (0x00000001 << MVPP2_PORT_CTRL2_SGMII_MODE_OFFS)
430 
431 #define MVPP2_PORT_CTRL2_FC_MODE_OFFS   1
432 #define MVPP2_PORT_CTRL2_FC_MODE_MASK    \
433     (0x00000003 << MVPP2_PORT_CTRL2_FC_MODE_OFFS)
434 
435 #define MVPP2_PORT_CTRL2_PCS_EN_OFFS    3
436 #define MVPP2_PORT_CTRL2_PCS_EN_MASK    \
437     (0x00000001 << MVPP2_PORT_CTRL2_PCS_EN_OFFS)
438 
439 #define MVPP2_PORT_CTRL2_RGMII_MODE_OFFS    4
440 #define MVPP2_PORT_CTRL2_RGMII_MODE_MASK    \
441     (0x00000001 << MVPP2_PORT_CTRL2_RGMII_MODE_OFFS)
442 
443 #define MVPP2_PORT_CTRL2_DIS_PADING_OFFS    5
444 #define MVPP2_PORT_CTRL2_DIS_PADING_MASK    \
445     (0x00000001 << MVPP2_PORT_CTRL2_DIS_PADING_OFFS)
446 
447 #define MVPP2_PORT_CTRL2_PORTMACRESET_OFFS    6
448 #define MVPP2_PORT_CTRL2_PORTMACRESET_MASK    \
449     (0x00000001 << MVPP2_PORT_CTRL2_PORTMACRESET_OFFS)
450 
451 #define MVPP2_PORT_CTRL2_TX_DRAIN_OFFS    7
452 #define MVPP2_PORT_CTRL2_TX_DRAIN_MASK    \
453     (0x00000001 << MVPP2_PORT_CTRL2_TX_DRAIN_OFFS)
454 
455 #define MVPP2_PORT_CTRL2_EN_MII_ODD_PRE_OFFS    8
456 #define MVPP2_PORT_CTRL2_EN_MII_ODD_PRE_MASK    \
457     (0x00000001 << MVPP2_PORT_CTRL2_EN_MII_ODD_PRE_OFFS)
458 
459 #define MVPP2_PORT_CTRL2_CLK_125_BYPS_EN_OFFS   9
460 #define MVPP2_PORT_CTRL2_CLK_125_BYPS_EN_MASK    \
461     (0x00000001 << MVPP2_PORT_CTRL2_CLK_125_BYPS_EN_OFFS)
462 
463 #define MVPP2_PORT_CTRL2_PRBS_CHECK_EN_OFFS   10
464 #define MVPP2_PORT_CTRL2_PRBS_CHECK_EN_MASK    \
465     (0x00000001 << MVPP2_PORT_CTRL2_PRBS_CHECK_EN_OFFS)
466 
467 #define MVPP2_PORT_CTRL2_PRBS_GEN_EN_OFFS   11
468 #define MVPP2_PORT_CTRL2_PRBS_GEN_EN_MASK    \
469     (0x00000001 << MVPP2_PORT_CTRL2_PRBS_GEN_EN_OFFS)
470 
471 #define MVPP2_PORT_CTRL2_SELECT_DATA_TO_TX_OFFS   12
472 #define MVPP2_PORT_CTRL2_SELECT_DATA_TO_TX_MASK    \
473     (0x00000003 << MVPP2_PORT_CTRL2_SELECT_DATA_TO_TX_OFFS)
474 
475 #define MVPP2_PORT_CTRL2_EN_COL_ON_BP_OFFS    14
476 #define MVPP2_PORT_CTRL2_EN_COL_ON_BP_MASK    \
477     (0x00000001 << MVPP2_PORT_CTRL2_EN_COL_ON_BP_OFFS)
478 
479 #define MVPP2_PORT_CTRL2_EARLY_REJECT_MODE_OFFS   15
480 #define MVPP2_PORT_CTRL2_EARLY_REJECT_MODE_MASK    \
481     (0x00000001 << MVPP2_PORT_CTRL2_EARLY_REJECT_MODE_OFFS)
482 
483 /* Port Auto-negotiation Configuration */
484 #define MVPP2_PORT_AUTO_NEG_CFG_REG                       (0x000c)
485 #define MVPP2_PORT_AUTO_NEG_CFG_FORCE_LINK_DOWN_OFFS    0
486 #define MVPP2_PORT_AUTO_NEG_CFG_FORCE_LINK_DOWN_MASK    \
487     (0x00000001 << MVPP2_PORT_AUTO_NEG_CFG_FORCE_LINK_DOWN_OFFS)
488 
489 #define MVPP2_PORT_AUTO_NEG_CFG_FORCE_LINK_UP_OFFS    1
490 #define MVPP2_PORT_AUTO_NEG_CFG_FORCE_LINK_UP_MASK    \
491     (0x00000001 << MVPP2_PORT_AUTO_NEG_CFG_FORCE_LINK_UP_OFFS)
492 
493 #define MVPP2_PORT_AUTO_NEG_CFG_EN_PCS_AN_OFFS    2
494 #define MVPP2_PORT_AUTO_NEG_CFG_EN_PCS_AN_MASK    \
495     (0x00000001 << MVPP2_PORT_AUTO_NEG_CFG_EN_PCS_AN_OFFS)
496 
497 #define MVPP2_PORT_AUTO_NEG_CFG_AN_BYPASS_EN_OFFS    3
498 #define MVPP2_PORT_AUTO_NEG_CFG_AN_BYPASS_EN_MASK    \
499     (0x00000001 << MVPP2_PORT_AUTO_NEG_CFG_AN_BYPASS_EN_OFFS)
500 
501 #define MVPP2_PORT_AUTO_NEG_CFG_INBAND_RESTARTAN_OFFS    4
502 #define MVPP2_PORT_AUTO_NEG_CFG_INBAND_RESTARTAN_MASK    \
503     (0x00000001 << MVPP2_PORT_AUTO_NEG_CFG_INBAND_RESTARTAN_OFFS)
504 
505 #define MVPP2_PORT_AUTO_NEG_CFG_SET_MII_SPEED_OFFS    5
506 #define MVPP2_PORT_AUTO_NEG_CFG_SET_MII_SPEED_MASK    \
507     (0x00000001 << MVPP2_PORT_AUTO_NEG_CFG_SET_MII_SPEED_OFFS)
508 
509 #define MVPP2_PORT_AUTO_NEG_CFG_SET_GMII_SPEED_OFFS   6
510 #define MVPP2_PORT_AUTO_NEG_CFG_SET_GMII_SPEED_MASK    \
511     (0x00000001 << MVPP2_PORT_AUTO_NEG_CFG_SET_GMII_SPEED_OFFS)
512 
513 #define MVPP2_PORT_AUTO_NEG_CFG_EN_AN_SPEED_OFFS    7
514 #define MVPP2_PORT_AUTO_NEG_CFG_EN_AN_SPEED_MASK    \
515     (0x00000001 << MVPP2_PORT_AUTO_NEG_CFG_EN_AN_SPEED_OFFS)
516 
517 #define MVPP2_PORT_AUTO_NEG_CFG_ADV_PAUSE_OFFS    9
518 #define MVPP2_PORT_AUTO_NEG_CFG_ADV_PAUSE_MASK    \
519     (0x00000001 << MVPP2_PORT_AUTO_NEG_CFG_ADV_PAUSE_OFFS)
520 
521 #define MVPP2_PORT_AUTO_NEG_CFG_ADV_ASM_PAUSE_OFFS    10
522 #define MVPP2_PORT_AUTO_NEG_CFG_ADV_ASM_PAUSE_MASK    \
523     (0x00000001 << MVPP2_PORT_AUTO_NEG_CFG_ADV_ASM_PAUSE_OFFS)
524 
525 #define MVPP2_PORT_AUTO_NEG_CFG_EN_FC_AN_OFFS    11
526 #define MVPP2_PORT_AUTO_NEG_CFG_EN_FC_AN_MASK    \
527     (0x00000001 << MVPP2_PORT_AUTO_NEG_CFG_EN_FC_AN_OFFS)
528 
529 #define MVPP2_PORT_AUTO_NEG_CFG_SET_FULL_DX_OFFS    12
530 #define MVPP2_PORT_AUTO_NEG_CFG_SET_FULL_DX_MASK    \
531     (0x00000001 << MVPP2_PORT_AUTO_NEG_CFG_SET_FULL_DX_OFFS)
532 
533 #define MVPP2_PORT_AUTO_NEG_CFG_EN_FDX_AN_OFFS    13
534 #define MVPP2_PORT_AUTO_NEG_CFG_EN_FDX_AN_MASK    \
535     (0x00000001 << MVPP2_PORT_AUTO_NEG_CFG_EN_FDX_AN_OFFS)
536 
537 #define MVPP2_PORT_AUTO_NEG_CFG_PHY_MODE_OFFS    14
538 #define MVPP2_PORT_AUTO_NEG_CFG_PHY_MODE_MASK    \
539     (0x00000001 << MVPP2_PORT_AUTO_NEG_CFG_PHY_MODE_OFFS)
540 
541 #define MVPP2_PORT_AUTO_NEG_CFG_CHOOSE_SAMPLE_TX_CONFIG_OFFS    15
542 #define MVPP2_PORT_AUTO_NEG_CFG_CHOOSE_SAMPLE_TX_CONFIG_MASK    \
543     (0x00000001 << MVPP2_PORT_AUTO_NEG_CFG_CHOOSE_SAMPLE_TX_CONFIG_OFFS)
544 
545 /* Port Status0 */
546 #define MVPP2_PORT_STATUS0_REG                            (0x0010)
547 #define MVPP2_PORT_STATUS0_LINKUP_OFFS    0
548 #define MVPP2_PORT_STATUS0_LINKUP_MASK    \
549     (0x00000001 << MVPP2_PORT_STATUS0_LINKUP_OFFS)
550 
551 #define MVPP2_PORT_STATUS0_GMIISPEED_OFFS    1
552 #define MVPP2_PORT_STATUS0_GMIISPEED_MASK    \
553     (0x00000001 << MVPP2_PORT_STATUS0_GMIISPEED_OFFS)
554 
555 #define MVPP2_PORT_STATUS0_MIISPEED_OFFS    2
556 #define MVPP2_PORT_STATUS0_MIISPEED_MASK    \
557     (0x00000001 << MVPP2_PORT_STATUS0_MIISPEED_OFFS)
558 
559 #define MVPP2_PORT_STATUS0_FULLDX_OFFS    3
560 #define MVPP2_PORT_STATUS0_FULLDX_MASK    \
561     (0x00000001 << MVPP2_PORT_STATUS0_FULLDX_OFFS)
562 
563 #define MVPP2_PORT_STATUS0_RXFCEN_OFFS    4
564 #define MVPP2_PORT_STATUS0_RXFCEN_MASK    \
565     (0x00000001 << MVPP2_PORT_STATUS0_RXFCEN_OFFS)
566 
567 #define MVPP2_PORT_STATUS0_TXFCEN_OFFS    5
568 #define MVPP2_PORT_STATUS0_TXFCEN_MASK    \
569     (0x00000001 << MVPP2_PORT_STATUS0_TXFCEN_OFFS)
570 
571 #define MVPP2_PORT_STATUS0_PORTRXPAUSE_OFFS    6
572 #define MVPP2_PORT_STATUS0_PORTRXPAUSE_MASK    \
573     (0x00000001 << MVPP2_PORT_STATUS0_PORTRXPAUSE_OFFS)
574 
575 #define MVPP2_PORT_STATUS0_PORTTXPAUSE_OFFS    7
576 #define MVPP2_PORT_STATUS0_PORTTXPAUSE_MASK    \
577     (0x00000001 << MVPP2_PORT_STATUS0_PORTTXPAUSE_OFFS)
578 
579 #define MVPP2_PORT_STATUS0_PORTIS_DOINGPRESSURE_OFFS    8
580 #define MVPP2_PORT_STATUS0_PORTIS_DOINGPRESSURE_MASK    \
581     (0x00000001 << MVPP2_PORT_STATUS0_PORTIS_DOINGPRESSURE_OFFS)
582 
583 #define MVPP2_PORT_STATUS0_PORTBUFFULL_OFFS    9
584 #define MVPP2_PORT_STATUS0_PORTBUFFULL_MASK    \
585     (0x00000001 << MVPP2_PORT_STATUS0_PORTBUFFULL_OFFS)
586 
587 #define MVPP2_PORT_STATUS0_SYNCFAIL10MS_OFFS    10
588 #define MVPP2_PORT_STATUS0_SYNCFAIL10MS_MASK    \
589     (0x00000001 << MVPP2_PORT_STATUS0_SYNCFAIL10MS_OFFS)
590 
591 #define MVPP2_PORT_STATUS0_ANDONE_OFFS    11
592 #define MVPP2_PORT_STATUS0_ANDONE_MASK    \
593     (0x00000001 << MVPP2_PORT_STATUS0_ANDONE_OFFS)
594 
595 #define MVPP2_PORT_STATUS0_INBAND_AUTONEG_BYPASSACT_OFFS    12
596 #define MVPP2_PORT_STATUS0_INBAND_AUTONEG_BYPASSACT_MASK    \
597     (0x00000001 << MVPP2_PORT_STATUS0_INBAND_AUTONEG_BYPASSACT_OFFS)
598 
599 #define MVPP2_PORT_STATUS0_SERDESPLL_LOCKED_OFFS    13
600 #define MVPP2_PORT_STATUS0_SERDESPLL_LOCKED_MASK    \
601     (0x00000001 << MVPP2_PORT_STATUS0_SERDESPLL_LOCKED_OFFS)
602 
603 #define MVPP2_PORT_STATUS0_SYNCOK_OFFS    14
604 #define MVPP2_PORT_STATUS0_SYNCOK_MASK    \
605     (0x00000001 << MVPP2_PORT_STATUS0_SYNCOK_OFFS)
606 
607 #define MVPP2_PORT_STATUS0_SQUELCHNOT_DETECTED_OFFS    15
608 #define MVPP2_PORT_STATUS0_SQUELCHNOT_DETECTED_MASK    \
609     (0x00000001 << MVPP2_PORT_STATUS0_SQUELCHNOT_DETECTED_OFFS)
610 
611 /* Port Serial Parameters Configuration */
612 #define MVPP2_PORT_SERIAL_PARAM_CFG_REG                   (0x0014)
613 #define MVPP2_PORT_SERIAL_PARAM_CFG_UNIDIRECTIONAL_ENABLE_OFFS    0
614 #define MVPP2_PORT_SERIAL_PARAM_CFG_UNIDIRECTIONAL_ENABLE_MASK    \
615     (0x00000001 << MVPP2_PORT_SERIAL_PARAM_CFG_UNIDIRECTIONAL_ENABLE_OFFS)
616 
617 #define MVPP2_PORT_SERIAL_PARAM_CFG_RETRANSMIT_COLLISION_DOMAIN_OFFS    1
618 #define MVPP2_PORT_SERIAL_PARAM_CFG_RETRANSMIT_COLLISION_DOMAIN_MASK    \
619     (0x00000001 << MVPP2_PORT_SERIAL_PARAM_CFG_RETRANSMIT_COLLISION_DOMAIN_OFFS)
620 
621 #define MVPP2_PORT_SERIAL_PARAM_CFG_PUMA2_BTS1444_EN_OFFS    2
622 #define MVPP2_PORT_SERIAL_PARAM_CFG_PUMA2_BTS1444_EN_MASK    \
623     (0x00000001 << MVPP2_PORT_SERIAL_PARAM_CFG_PUMA2_BTS1444_EN_OFFS)
624 
625 #define MVPP2_PORT_SERIAL_PARAM_CFG_FORWARD_802_3X_FC_EN_OFFS    3
626 #define MVPP2_PORT_SERIAL_PARAM_CFG_FORWARD_802_3X_FC_EN_MASK    \
627     (0x00000001 << MVPP2_PORT_SERIAL_PARAM_CFG_FORWARD_802_3X_FC_EN_OFFS)
628 
629 #define MVPP2_PORT_SERIAL_PARAM_CFG_BP_EN_OFFS    4
630 #define MVPP2_PORT_SERIAL_PARAM_CFG_BP_EN_MASK    \
631     (0x00000001 << MVPP2_PORT_SERIAL_PARAM_CFG_BP_EN_OFFS)
632 
633 #define MVPP2_PORT_SERIAL_PARAM_CFG_RX_NEGEDGE_SAMPLE_EN_OFFS   5
634 #define MVPP2_PORT_SERIAL_PARAM_CFG_RX_NEGEDGE_SAMPLE_EN_MASK   \
635     (0x00000001 << MVPP2_PORT_SERIAL_PARAM_CFG_RX_NEGEDGE_SAMPLE_EN_OFFS)
636 
637 #define MVPP2_PORT_SERIAL_PARAM_CFG_COL_DOMAIN_LIMIT_OFFS    6
638 #define MVPP2_PORT_SERIAL_PARAM_CFG_COL_DOMAIN_LIMIT_MASK    \
639     (0x0000003f << MVPP2_PORT_SERIAL_PARAM_CFG_COL_DOMAIN_LIMIT_OFFS)
640 
641 #define MVPP2_PORT_SERIAL_PARAM_CFG_PERIODIC_TYPE_SELECT_OFFS   12
642 #define MVPP2_PORT_SERIAL_PARAM_CFG_PERIODIC_TYPE_SELECT_MASK   \
643     (0x00000001 << MVPP2_PORT_SERIAL_PARAM_CFG_PERIODIC_TYPE_SELECT_OFFS)
644 
645 #define MVPP2_PORT_SERIAL_PARAM_CFG_PER_PRIORITY_FC_EN_OFFS   13
646 #define MVPP2_PORT_SERIAL_PARAM_CFG_PER_PRIORITY_FC_EN_MASK   \
647     (0x00000001 << MVPP2_PORT_SERIAL_PARAM_CFG_PER_PRIORITY_FC_EN_OFFS)
648 
649 #define MVPP2_PORT_SERIAL_PARAM_CFG_TX_STANDARD_PRBS7_OFFS    14
650 #define MVPP2_PORT_SERIAL_PARAM_CFG_TX_STANDARD_PRBS7_MASK    \
651     (0x00000001 << MVPP2_PORT_SERIAL_PARAM_CFG_TX_STANDARD_PRBS7_OFFS)
652 
653 #define MVPP2_PORT_SERIAL_PARAM_CFG_REVERSE_PRBS_RX_OFFS    15
654 #define MVPP2_PORT_SERIAL_PARAM_CFG_REVERSE_PRBS_RX_MASK    \
655     (0x00000001 << MVPP2_PORT_SERIAL_PARAM_CFG_REVERSE_PRBS_RX_OFFS)
656 
657 /* Port Fifo Configuration 0 */
658 #define MVPP2_PORT_FIFO_CFG_0_REG                         (0x0018)
659 #define MVPP2_PORT_FIFO_CFG_0_TX_FIFO_HIGH_WM_OFFS    0
660 #define MVPP2_PORT_FIFO_CFG_0_TX_FIFO_HIGH_WM_MASK    \
661     (0x000000ff << MVPP2_PORT_FIFO_CFG_0_TX_FIFO_HIGH_WM_OFFS)
662 
663 #define MVPP2_PORT_FIFO_CFG_0_TX_FIFO_LOW_WM_OFFS    8
664 #define MVPP2_PORT_FIFO_CFG_0_TX_FIFO_LOW_WM_MASK    \
665     (0x000000ff << MVPP2_PORT_FIFO_CFG_0_TX_FIFO_LOW_WM_OFFS)
666 
667 /* Port Fifo Configuration 1 */
668 #define MVPP2_PORT_FIFO_CFG_1_REG                         (0x001c)
669 #define MVPP2_PORT_FIFO_CFG_1_RX_FIFO_MAX_TH_OFFS    0
670 #define MVPP2_PORT_FIFO_CFG_1_RX_FIFO_MAX_TH_MASK    \
671     (0x0000003f << MVPP2_PORT_FIFO_CFG_1_RX_FIFO_MAX_TH_OFFS)
672 
673 #define MVPP2_PORT_FIFO_CFG_1_TX_FIFO_MIN_TH_OFFS    6
674 #define MVPP2_PORT_FIFO_CFG_1_TX_FIFO_MIN_TH_MASK    \
675     (0x000000ff << MVPP2_PORT_FIFO_CFG_1_TX_FIFO_MIN_TH_OFFS)
676 
677 #define MVPP2_PORT_FIFO_CFG_1_PORT_EN_FIX_EN_OFFS    15
678 #define MVPP2_PORT_FIFO_CFG_1_PORT_EN_FIX_EN_MASK    \
679     (0x00000001 << MVPP2_PORT_FIFO_CFG_1_PORT_EN_FIX_EN_OFFS)
680 
681 /* Port Serdes Configuration0 */
682 #define MVPP2_PORT_SERDES_CFG0_REG                        (0x0028)
683 #define MVPP2_PORT_SERDES_CFG0_SERDESRESET_OFFS    0
684 #define MVPP2_PORT_SERDES_CFG0_SERDESRESET_MASK    \
685     (0x00000001 << MVPP2_PORT_SERDES_CFG0_SERDESRESET_OFFS)
686 
687 #define MVPP2_PORT_SERDES_CFG0_PU_TX_OFFS    1
688 #define MVPP2_PORT_SERDES_CFG0_PU_TX_MASK    \
689     (0x00000001 << MVPP2_PORT_SERDES_CFG0_PU_TX_OFFS)
690 
691 #define MVPP2_PORT_SERDES_CFG0_PU_RX_OFFS    2
692 #define MVPP2_PORT_SERDES_CFG0_PU_RX_MASK    \
693     (0x00000001 << MVPP2_PORT_SERDES_CFG0_PU_RX_OFFS)
694 
695 #define MVPP2_PORT_SERDES_CFG0_PU_PLL_OFFS    3
696 #define MVPP2_PORT_SERDES_CFG0_PU_PLL_MASK    \
697     (0x00000001 << MVPP2_PORT_SERDES_CFG0_PU_PLL_OFFS)
698 
699 #define MVPP2_PORT_SERDES_CFG0_PU_IVREF_OFFS    4
700 #define MVPP2_PORT_SERDES_CFG0_PU_IVREF_MASK    \
701     (0x00000001 << MVPP2_PORT_SERDES_CFG0_PU_IVREF_OFFS)
702 
703 #define MVPP2_PORT_SERDES_CFG0_TESTEN_OFFS    5
704 #define MVPP2_PORT_SERDES_CFG0_TESTEN_MASK    \
705     (0x00000001 << MVPP2_PORT_SERDES_CFG0_TESTEN_OFFS)
706 
707 #define MVPP2_PORT_SERDES_CFG0_DPHER_EN_OFFS    6
708 #define MVPP2_PORT_SERDES_CFG0_DPHER_EN_MASK    \
709     (0x00000001 << MVPP2_PORT_SERDES_CFG0_DPHER_EN_OFFS)
710 
711 #define MVPP2_PORT_SERDES_CFG0_RUDI_INVALID_ENABLE_OFFS    7
712 #define MVPP2_PORT_SERDES_CFG0_RUDI_INVALID_ENABLE_MASK    \
713     (0x00000001 << MVPP2_PORT_SERDES_CFG0_RUDI_INVALID_ENABLE_OFFS)
714 
715 #define MVPP2_PORT_SERDES_CFG0_ACK_OVERRIDE_ENABLE_OFFS    8
716 #define MVPP2_PORT_SERDES_CFG0_ACK_OVERRIDE_ENABLE_MASK    \
717     (0x00000001 << MVPP2_PORT_SERDES_CFG0_ACK_OVERRIDE_ENABLE_OFFS)
718 
719 #define MVPP2_PORT_SERDES_CFG0_CONFIG_WORD_ENABLE_OFFS    9
720 #define MVPP2_PORT_SERDES_CFG0_CONFIG_WORD_ENABLE_MASK    \
721     (0x00000001 << MVPP2_PORT_SERDES_CFG0_CONFIG_WORD_ENABLE_OFFS)
722 
723 #define MVPP2_PORT_SERDES_CFG0_SYNC_FAIL_INT_ENABLE_OFFS    10
724 #define MVPP2_PORT_SERDES_CFG0_SYNC_FAIL_INT_ENABLE_MASK    \
725     (0x00000001 << MVPP2_PORT_SERDES_CFG0_SYNC_FAIL_INT_ENABLE_OFFS)
726 
727 #define MVPP2_PORT_SERDES_CFG0_MASTER_MODE_ENABLE_OFFS    11
728 #define MVPP2_PORT_SERDES_CFG0_MASTER_MODE_ENABLE_MASK    \
729     (0x00000001 << MVPP2_PORT_SERDES_CFG0_MASTER_MODE_ENABLE_OFFS)
730 
731 #define MVPP2_PORT_SERDES_CFG0_TERM75_TX_OFFS    12
732 #define MVPP2_PORT_SERDES_CFG0_TERM75_TX_MASK    \
733     (0x00000001 << MVPP2_PORT_SERDES_CFG0_TERM75_TX_OFFS)
734 
735 #define MVPP2_PORT_SERDES_CFG0_OUTAMP_OFFS    13
736 #define MVPP2_PORT_SERDES_CFG0_OUTAMP_MASK    \
737     (0x00000001 << MVPP2_PORT_SERDES_CFG0_OUTAMP_OFFS)
738 
739 #define MVPP2_PORT_SERDES_CFG0_BTS712_FIX_EN_OFFS    14
740 #define MVPP2_PORT_SERDES_CFG0_BTS712_FIX_EN_MASK    \
741     (0x00000001 << MVPP2_PORT_SERDES_CFG0_BTS712_FIX_EN_OFFS)
742 
743 #define MVPP2_PORT_SERDES_CFG0_BTS156_FIX_EN_OFFS    15
744 #define MVPP2_PORT_SERDES_CFG0_BTS156_FIX_EN_MASK    \
745     (0x00000001 << MVPP2_PORT_SERDES_CFG0_BTS156_FIX_EN_OFFS)
746 
747 /* Port Serdes Configuration1 */
748 #define MVPP2_PORT_SERDES_CFG1_REG                        (0x002c)
749 #define MVPP2_PORT_SERDES_CFG1_SMII_RX_10MB_CLK_EDGE_SEL_OFFS    0
750 #define MVPP2_PORT_SERDES_CFG1_SMII_RX_10MB_CLK_EDGE_SEL_MASK    \
751     (0x00000001 << MVPP2_GMAC_PORT_SERDES_CFG1_SMII_RX_10MB_CLK_EDGE_SEL_OFFS)
752 
753 #define MVPP2_GMAC_PORT_SERDES_CFG1_SMII_TX_10MB_CLK_EDGE_SEL_OFFS    1
754 #define MVPP2_GMAC_PORT_SERDES_CFG1_SMII_TX_10MB_CLK_EDGE_SEL_MASK    \
755     (0x00000001 << MVPP2_GMAC_PORT_SERDES_CFG1_SMII_TX_10MB_CLK_EDGE_SEL_OFFS)
756 
757 #define MVPP2_GMAC_PORT_SERDES_CFG1_MEN_OFFS    2
758 #define MVPP2_GMAC_PORT_SERDES_CFG1_MEN_MASK    \
759     (0x00000003 << MVPP2_GMAC_PORT_SERDES_CFG1_MEN_OFFS)
760 
761 #define MVPP2_GMAC_PORT_SERDES_CFG1_VCMS_OFFS    4
762 #define MVPP2_GMAC_PORT_SERDES_CFG1_VCMS_MASK    \
763     (0x00000001 << MVPP2_GMAC_PORT_SERDES_CFG1_VCMS_OFFS)
764 
765 #define MVPP2_GMAC_PORT_SERDES_CFG1_100FX_PCS_USE_SIGDET_OFFS    5
766 #define MVPP2_GMAC_PORT_SERDES_CFG1_100FX_PCS_USE_SIGDET_MASK    \
767     (0x00000001 << MVPP2_GMAC_PORT_SERDES_CFG1_100FX_PCS_USE_SIGDET_OFFS)
768 
769 #define MVPP2_GMAC_PORT_SERDES_CFG1_EN_CRS_MASK_TX_OFFS    6
770 #define MVPP2_GMAC_PORT_SERDES_CFG1_EN_CRS_MASK_TX_MASK    \
771     (0x00000001 << MVPP2_GMAC_PORT_SERDES_CFG1_EN_CRS_MASK_TX_OFFS)
772 
773 #define MVPP2_GMAC_PORT_SERDES_CFG1_100FX_ENABLE_OFFS    7
774 #define MVPP2_GMAC_PORT_SERDES_CFG1_100FX_ENABLE_MASK    \
775     (0x00000001 << MVPP2_GMAC_PORT_SERDES_CFG1_100FX_ENABLE_OFFS)
776 
777 #define MVPP2_GMAC_PORT_SERDES_CFG1_100FX_PCS_PHY_ADDRESS_OFFS    8
778 #define MVPP2_GMAC_PORT_SERDES_CFG1_100FX_PCS_PHY_ADDRESS_MASK    \
779     (0x0000001f << MVPP2_GMAC_PORT_SERDES_CFG1_100FX_PCS_PHY_ADDRESS_OFFS)
780 
781 #define MVPP2_GMAC_PORT_SERDES_CFG1_100FX_PCS_SIGDET_POLARITY_OFFS    13
782 #define MVPP2_GMAC_PORT_SERDES_CFG1_100FX_PCS_SIGDET_POLARITY_MASK    \
783     (0x00000001 << MVPP2_GMAC_PORT_SERDES_CFG1_100FX_PCS_SIGDET_POLARITY_OFFS)
784 
785 #define MVPP2_GMAC_PORT_SERDES_CFG1_100FX_PCS_INTERRUPT_POLARITY_OFFS    14
786 #define MVPP2_GMAC_PORT_SERDES_CFG1_100FX_PCS_INTERRUPT_POLARITY_MASK    \
787     (0x00000001 << MVPP2_GMAC_PORT_SERDES_CFG1_100FX_PCS_INTERRUPT_POLARITY_OFFS)
788 
789 #define MVPP2_GMAC_PORT_SERDES_CFG1_100FX_PCS_SERDES_POLARITY_OFFS    15
790 #define MVPP2_GMAC_PORT_SERDES_CFG1_100FX_PCS_SERDES_POLARITY_MASK    \
791     (0x00000001 << MVPP2_GMAC_PORT_SERDES_CFG1_100FX_PCS_SERDES_POLARITY_OFFS)
792 
793 /* Port Serdes Configuration2 */
794 #define MVPP2_PORT_SERDES_CFG2_REG                        (0x0030)
795 #define MVPP2_PORT_SERDES_CFG2_AN_ADV_CONFIGURATION_OFFS    0
796 #define MVPP2_PORT_SERDES_CFG2_AN_ADV_CONFIGURATION_MASK    \
797     (0x0000ffff << MVPP2_PORT_SERDES_CFG2_AN_ADV_CONFIGURATION_OFFS)
798 
799 /* Port Serdes Configuration3 */
800 #define MVPP2_PORT_SERDES_CFG3_REG                        (0x0034)
801 #define MVPP2_PORT_SERDES_CFG3_ABILITY_MATCH_STATUS_OFFS    0
802 #define MVPP2_PORT_SERDES_CFG3_ABILITY_MATCH_STATUS_MASK    \
803     (0x0000ffff << MVPP2_PORT_SERDES_CFG3_ABILITY_MATCH_STATUS_OFFS)
804 
805 /* Port Prbs Status */
806 #define MVPP2_PORT_PRBS_STATUS_REG                        (0x0038)
807 #define MVPP2_PORT_PRBS_STATUS_PRBSCHECK_LOCKED_OFFS    0
808 #define MVPP2_PORT_PRBS_STATUS_PRBSCHECK_LOCKED_MASK    \
809     (0x00000001 << MVPP2_PORT_PRBS_STATUS_PRBSCHECK_LOCKED_OFFS)
810 
811 #define MVPP2_PORT_PRBS_STATUS_PRBSCHECKRDY_OFFS    1
812 #define MVPP2_PORT_PRBS_STATUS_PRBSCHECKRDY_MASK    \
813     (0x00000001 << MVPP2_PORT_PRBS_STATUS_PRBSCHECKRDY_OFFS)
814 
815 /* Port Prbs Error Counter */
816 #define MVPP2_PORT_PRBS_ERR_CNTR_REG                      (0x003c)
817 #define MVPP2_PORT_PRBS_ERR_CNTR_PRBSBITERRCNT_OFFS    0
818 #define MVPP2_PORT_PRBS_ERR_CNTR_PRBSBITERRCNT_MASK    \
819     (0x0000ffff << MVPP2_PORT_PRBS_ERR_CNTR_PRBSBITERRCNT_OFFS)
820 
821 /* Port Status1 */
822 #define MVPP2_PORT_STATUS1_REG                            (0x0040)
823 #define MVPP2_PORT_STATUS1_MEDIAACTIVE_OFFS    0
824 #define MVPP2_PORT_STATUS1_MEDIAACTIVE_MASK    \
825     (0x00000001 << MVPP2_PORT_STATUS1_MEDIAACTIVE_OFFS)
826 
827 /* Port Mib Counters Control */
828 #define MVPP2_PORT_MIB_CNTRS_CTRL_REG                     (0x0044)
829 #define MVPP2_PORT_MIB_CNTRS_CTRL_MIB_COPY_TRIGGER_OFFS    0
830 #define MVPP2_PORT_MIB_CNTRS_CTRL_MIB_COPY_TRIGGER_MASK    \
831     (0x00000001 << MVPP2_PORT_MIB_CNTRS_CTRL_MIB_COPY_TRIGGER_OFFS)
832 
833 #define MVPP2_PORT_MIB_CNTRS_CTRL_MIB_CLEAR_ON_READ__OFFS     1
834 #define MVPP2_PORT_MIB_CNTRS_CTRL_MIB_CLEAR_ON_READ__MASK     \
835     (0x00000001 << MVPP2_PORT_MIB_CNTRS_CTRL_MIB_CLEAR_ON_READ__OFFS)
836 
837 #define MVPP2_PORT_MIB_CNTRS_CTRL_RX_HISTOGRAM_EN_OFFS    2
838 #define MVPP2_PORT_MIB_CNTRS_CTRL_RX_HISTOGRAM_EN_MASK    \
839     (0x00000001 << MVPP2_PORT_MIB_CNTRS_CTRL_RX_HISTOGRAM_EN_OFFS)
840 
841 #define MVPP2_PORT_MIB_CNTRS_CTRL_TX_HISTOGRAM_EN_OFFS    3
842 #define MVPP2_PORT_MIB_CNTRS_CTRL_TX_HISTOGRAM_EN_MASK    \
843     (0x00000001 << MVPP2_PORT_MIB_CNTRS_CTRL_TX_HISTOGRAM_EN_OFFS)
844 
845 #define MVPP2_PORT_MIB_CNTRS_CTRL_MFA1_BTT940_FIX_ENABLE__OFFS    4
846 #define MVPP2_PORT_MIB_CNTRS_CTRL_MFA1_BTT940_FIX_ENABLE__MASK    \
847     (0x00000001 << MVPP2_PORT_MIB_CNTRS_CTRL_MFA1_BTT940_FIX_ENABLE__OFFS)
848 
849 #define MVPP2_PORT_MIB_CNTRS_CTRL_XCAT_BTS_340_EN__OFFS    5
850 #define MVPP2_PORT_MIB_CNTRS_CTRL_XCAT_BTS_340_EN__MASK    \
851     (0x00000001 << MVPP2_PORT_MIB_CNTRS_CTRL_XCAT_BTS_340_EN__OFFS)
852 
853 #define MVPP2_PORT_MIB_CNTRS_CTRL_MIB_4_COUNT_HIST_OFFS    6
854 #define MVPP2_PORT_MIB_CNTRS_CTRL_MIB_4_COUNT_HIST_MASK    \
855     (0x00000001 << MVPP2_PORT_MIB_CNTRS_CTRL_MIB_4_COUNT_HIST_OFFS)
856 
857 #define MVPP2_PORT_MIB_CNTRS_CTRL_MIB_4_LIMIT_1518_1522_OFFS    7
858 #define MVPP2_PORT_MIB_CNTRS_CTRL_MIB_4_LIMIT_1518_1522_MASK    \
859     (0x00000001 << MVPP2_PORT_MIB_CNTRS_CTRL_MIB_4_LIMIT_1518_1522_OFFS)
860 
861 /* Port Mac Control3 */
862 #define MVPP2_PORT_CTRL3_REG                              (0x0048)
863 #define MVPP2_PORT_CTRL3_BUF_SIZE_OFFS    0
864 #define MVPP2_PORT_CTRL3_BUF_SIZE_MASK    \
865     (0x0000003f << MVPP2_PORT_CTRL3_BUF_SIZE_OFFS)
866 
867 #define MVPP2_PORT_CTRL3_IPG_DATA_OFFS    6
868 #define MVPP2_PORT_CTRL3_IPG_DATA_MASK    \
869     (0x000001ff << MVPP2_PORT_CTRL3_IPG_DATA_OFFS)
870 
871 #define MVPP2_PORT_CTRL3_LLFC_GLOBAL_FC_ENABLE_OFFS    15
872 #define MVPP2_PORT_CTRL3_LLFC_GLOBAL_FC_ENABLE_MASK    \
873     (0x00000001 << MVPP2_PORT_CTRL3_LLFC_GLOBAL_FC_ENABLE_OFFS)
874 #define MVPP2_CAUSE_TXQ_SENT_DESC_ALL_MASK    0xff
875 
876 /* Port Mac Control4 */
877 #define MVPP2_PORT_CTRL4_REG                              (0x0090)
878 #define MVPP2_PORT_CTRL4_EXT_PIN_GMII_SEL_OFFS    0
879 #define MVPP2_PORT_CTRL4_EXT_PIN_GMII_SEL_MASK    \
880     (0x00000001 << MVPP2_PORT_CTRL4_EXT_PIN_GMII_SEL_OFFS)
881 
882 #define MVPP2_PORT_CTRL4_PREAMBLE_FIX_OFFS    1
883 #define MVPP2_PORT_CTRL4_PREAMBLE_FIX_MASK    \
884     (0x00000001 << MVPP2_PORT_CTRL4_PREAMBLE_FIX_OFFS)
885 
886 #define MVPP2_PORT_CTRL4_SQ_DETECT_FIX_EN_OFFS    2
887 #define MVPP2_PORT_CTRL4_SQ_DETECT_FIX_EN_MASK    \
888     (0x00000001 << MVPP2_PORT_CTRL4_SQ_DETECT_FIX_EN_OFFS)
889 
890 #define MVPP2_PORT_CTRL4_FC_EN_RX_OFFS    3
891 #define MVPP2_PORT_CTRL4_FC_EN_RX_MASK    \
892     (0x00000001 << MVPP2_PORT_CTRL4_FC_EN_RX_OFFS)
893 
894 #define MVPP2_PORT_CTRL4_FC_EN_TX_OFFS    4
895 #define MVPP2_PORT_CTRL4_FC_EN_TX_MASK    \
896     (0x00000001 << MVPP2_PORT_CTRL4_FC_EN_TX_OFFS)
897 
898 #define MVPP2_PORT_CTRL4_DP_CLK_SEL_OFFS    5
899 #define MVPP2_PORT_CTRL4_DP_CLK_SEL_MASK    \
900     (0x00000001 << MVPP2_PORT_CTRL4_DP_CLK_SEL_OFFS)
901 
902 #define MVPP2_PORT_CTRL4_SYNC_BYPASS_OFFS   6
903 #define MVPP2_PORT_CTRL4_SYNC_BYPASS_MASK    \
904     (0x00000001 << MVPP2_PORT_CTRL4_SYNC_BYPASS_OFFS)
905 
906 #define MVPP2_PORT_CTRL4_QSGMII_BYPASS_ACTIVE_OFFS    7
907 #define MVPP2_PORT_CTRL4_QSGMII_BYPASS_ACTIVE_MASK    \
908     (0x00000001 << MVPP2_PORT_CTRL4_QSGMII_BYPASS_ACTIVE_OFFS)
909 
910 #define MVPP2_PORT_CTRL4_COUNT_EXTERNAL_FC_EN_OFFS    8
911 #define MVPP2_PORT_CTRL4_COUNT_EXTERNAL_FC_EN_MASK    \
912     (0x00000001 << MVPP2_PORT_CTRL4_COUNT_EXTERNAL_FC_EN_OFFS)
913 
914 #define MVPP2_PORT_CTRL4_MARVELL_HEADER_EN_OFFS    9
915 #define MVPP2_PORT_CTRL4_MARVELL_HEADER_EN_MASK    \
916     (0x00000001 << MVPP2_PORT_CTRL4_MARVELL_HEADER_EN_OFFS)
917 
918 #define MVPP2_PORT_CTRL4_LEDS_NUMBER_OFFS    10
919 #define MVPP2_PORT_CTRL4_LEDS_NUMBER_MASK    \
920     (0x0000003f << MVPP2_PORT_CTRL4_LEDS_NUMBER_OFFS)
921 
922 /* XPCS registers */
923 
924 /* Global Configuration 0 */
925 #define MVPP22_XPCS_GLOBAL_CFG_0_REG                   0x0
926 #define MVPP22_XPCS_PCSRESET                           BIT(0)
927 #define MVPP22_XPCS_PCSMODE_OFFS                       3
928 #define MVPP22_XPCS_PCSMODE_MASK                       (0x3 << MVPP22_XPCS_PCSMODE_OFFS)
929 #define MVPP22_XPCS_LANEACTIVE_OFFS                    5
930 #define MVPP22_XPCS_LANEACTIVE_MASK                    (0x3 << MVPP22_XPCS_LANEACTIVE_OFFS)
931 
932 /* MPCS registers */
933 
934 #define MVPP22_MPCS40G_COMMON_CONTROL                  0x14
935 #define MVPP22_MPCS_FORWARD_ERROR_CORRECTION_MASK      BIT(10)
936 
937 #define MVPP22_MPCS_CLOCK_RESET                        0x14c
938 #define MVPP22_MPCS_TX_SD_CLK_RESET_MASK               BIT(0)
939 #define MVPP22_MPCS_RX_SD_CLK_RESET_MASK               BIT(1)
940 #define MVPP22_MPCS_MAC_CLK_RESET_MASK                 BIT(2)
941 #define MVPP22_MPCS_CLK_DIVISION_RATIO_OFFS            4
942 #define MVPP22_MPCS_CLK_DIVISION_RATIO_MASK            (0x7 << MVPP22_MPCS_CLK_DIVISION_RATIO_OFFS)
943 #define MVPP22_MPCS_CLK_DIVISION_RATIO_DEFAULT         (0x1 << MVPP22_MPCS_CLK_DIVISION_RATIO_OFFS)
944 #define MVPP22_MPCS_CLK_DIV_PHASE_SET_MASK             BIT(11)
945 
946 /* Descriptor ring Macros */
947 #define MVPP2_QUEUE_NEXT_DESC(q, index)                   (((index) < (q)->LastDesc) ? ((index) + 1) : 0)
948 
949 /* Various constants */
950 
951 /* Coalescing */
952 #define MVPP2_TXDONE_COAL_PKTS_THRESH                     64
953 #define MVPP2_TXDONE_HRTIMER_PERIOD_NS                    1000000UL
954 #define MVPP2_TXDONE_COAL_USEC                            1000
955 #define MVPP2_RX_COAL_PKTS                                32
956 #define MVPP2_RX_COAL_USEC                                64
957 
958 /*
959  * The two bytes Marvell header. Either contains a special value used
960  * by Marvell switches when a specific hardware mode is enabled (not
961  * supported by this driver) or is filled automatically by zeroes on
962  * the RX side. Those two bytes being at the front of the Ethernet
963  * header, they allow to have the IP header aligned on a 4 bytes
964  * boundary automatically: the hardware skips those two bytes on its
965  * own.
966  */
967 #define MVPP2_MH_SIZE                                     2
968 #define MVPP2_ETH_TYPE_LEN                                2
969 #define MVPP2_PPPOE_HDR_SIZE                              8
970 #define MVPP2_VLAN_TAG_LEN                                4
971 
972 /* Lbtd 802.3 type */
973 #define MVPP2_IP_LBDT_TYPE                                0xfffa
974 
975 #define MVPP2_CPU_D_CACHE_LINE_SIZE                       32
976 #define MVPP2_TX_CSUM_MAX_SIZE                            9800
977 
978 /* Timeout constants */
979 #define MVPP2_TX_DISABLE_TIMEOUT_MSEC                     1000
980 #define MVPP2_TX_PENDING_TIMEOUT_MSEC                     1000
981 
982 #define MVPP2_TX_MTU_MAX                                  0x7ffff
983 
984 /* Maximum number of T-CONTs of PON port */
985 #define MVPP2_MAX_TCONT                                   16
986 
987 /* Maximum number of supported ports */
988 #define MVPP2_MAX_PORTS                                   4
989 
990 /* Maximum number of TXQs used by single port */
991 #define MVPP2_MAX_TXQ                                     8
992 
993 /* Maximum number of RXQs used by single port */
994 #define MVPP2_MAX_RXQ                                     8
995 
996 /* Dfault number of RXQs in use */
997 #define MVPP2_DEFAULT_RXQ                                 4
998 
999 /* Total number of RXQs available to all ports */
1000 #define MVPP2_RXQ_TOTAL_NUM                               (MVPP2_MAX_PORTS * MVPP2_MAX_RXQ)
1001 
1002 /* Max number of Rx descriptors */
1003 #define MVPP2_MAX_RXD                                     64
1004 
1005 /* Max number of Tx descriptors */
1006 #define MVPP2_MAX_TXD                                     32
1007 
1008 /* Amount of Tx descriptors that can be reserved at once by CPU */
1009 #define MVPP2_CPU_DESC_CHUNK                              64
1010 
1011 /* Max number of Tx descriptors in each aggregated queue */
1012 #define MVPP2_AGGR_TXQ_SIZE                               256
1013 
1014 /* Descriptor aligned size */
1015 #define MVPP2_DESC_ALIGNED_SIZE                           32
1016 
1017 /* Descriptor alignment mask */
1018 #define MVPP2_TX_DESC_ALIGN                               (MVPP2_DESC_ALIGNED_SIZE - 1)
1019 
1020 /* RX FIFO constants */
1021 #define MVPP2_RX_FIFO_PORT_DATA_SIZE_32KB       0x8000
1022 #define MVPP2_RX_FIFO_PORT_DATA_SIZE_8KB        0x2000
1023 #define MVPP2_RX_FIFO_PORT_DATA_SIZE_4KB        0x1000
1024 #define MVPP2_RX_FIFO_PORT_ATTR_SIZE_32KB       0x200
1025 #define MVPP2_RX_FIFO_PORT_ATTR_SIZE_8KB        0x80
1026 #define MVPP2_RX_FIFO_PORT_ATTR_SIZE_4KB        0x40
1027 #define MVPP2_RX_FIFO_PORT_MIN_PKT              0x80
1028 
1029 /* TX FIFO constants */
1030 #define MVPP22_TX_FIFO_DATA_SIZE_10KB           0xa
1031 #define MVPP22_TX_FIFO_DATA_SIZE_3KB            0x3
1032 #define MVPP2_TX_FIFO_THRESHOLD_MIN             256
1033 #define MVPP2_TX_FIFO_THRESHOLD_10KB    \
1034         (MVPP22_TX_FIFO_DATA_SIZE_10KB * 1024 - MVPP2_TX_FIFO_THRESHOLD_MIN)
1035 #define MVPP2_TX_FIFO_THRESHOLD_3KB     \
1036         (MVPP22_TX_FIFO_DATA_SIZE_3KB * 1024 - MVPP2_TX_FIFO_THRESHOLD_MIN)
1037 
1038 #define MVPP2_BIT_TO_BYTE(bit)                            ((bit) / 8)
1039 
1040 /* IPv6 max L3 address size */
1041 #define MVPP2_MAX_L3_ADDR_SIZE                            16
1042 
1043 /* Port flags */
1044 #define MVPP2_F_LOOPBACK                                  BIT(0)
1045 
1046 /* SD1 Control1 */
1047 #define SD1_CONTROL_1_REG                                 (0x148)
1048 
1049 #define SD1_CONTROL_XAUI_EN_OFFSET    28
1050 #define SD1_CONTROL_XAUI_EN_MASK    (0x1 << SD1_CONTROL_XAUI_EN_OFFSET)
1051 
1052 #define SD1_CONTROL_RXAUI0_L23_EN_OFFSET    27
1053 #define SD1_CONTROL_RXAUI0_L23_EN_MASK    (0x1 << SD1_CONTROL_RXAUI0_L23_EN_OFFSET)
1054 
1055 #define SD1_CONTROL_RXAUI1_L45_EN_OFFSET    26
1056 #define SD1_CONTROL_RXAUI1_L45_EN_MASK    (0x1 << SD1_CONTROL_RXAUI1_L45_EN_OFFSET)
1057 
1058 /* System Soft Reset 1 */
1059 #define MV_GOP_SOFT_RESET_1_REG                           (0x108)
1060 
1061 #define NETC_GOP_SOFT_RESET_OFFSET    6
1062 #define NETC_GOP_SOFT_RESET_MASK    (0x1 << NETC_GOP_SOFT_RESET_OFFSET)
1063 
1064 /* Ports Control 0 */
1065 #define MV_NETCOMP_PORTS_CONTROL_0                        (0x110)
1066 
1067 #define NETC_CLK_DIV_PHASE_OFFSET    31
1068 #define NETC_CLK_DIV_PHASE_MASK    (0x1 << NETC_CLK_DIV_PHASE_OFFSET)
1069 
1070 #define NETC_GIG_RX_DATA_SAMPLE_OFFSET    29
1071 #define NETC_GIG_RX_DATA_SAMPLE_MASK    (0x1 << NETC_GIG_RX_DATA_SAMPLE_OFFSET)
1072 
1073 #define NETC_BUS_WIDTH_SELECT_OFFSET    1
1074 #define NETC_BUS_WIDTH_SELECT_MASK    (0x1 << NETC_BUS_WIDTH_SELECT_OFFSET)
1075 
1076 #define NETC_GOP_ENABLE_OFFSET    0
1077 #define NETC_GOP_ENABLE_MASK    (0x1 << NETC_GOP_ENABLE_OFFSET)
1078 
1079 /* Ports Control 1 */
1080 #define MV_NETCOMP_PORTS_CONTROL_1                        (0x114)
1081 
1082 #define NETC_PORT_GIG_RF_RESET_OFFSET(port)    (28 + port)
1083 #define NETC_PORT_GIG_RF_RESET_MASK(port)    (0x1 << NETC_PORT_GIG_RF_RESET_OFFSET(port))
1084 
1085 #define NETC_PORTS_ACTIVE_OFFSET(port)    (0 + port)
1086 #define NETC_PORTS_ACTIVE_MASK(port)    (0x1 << NETC_PORTS_ACTIVE_OFFSET(port))
1087 
1088 /* Ports Status */
1089 #define MV_NETCOMP_PORTS_STATUS                           (0x11C)
1090 #define NETC_PORTS_STATUS_OFFSET(port)    (0 + port)
1091 #define NETC_PORTS_STATUS_MASK(port)    (0x1 << NETC_PORTS_STATUS_OFFSET(port))
1092 
1093 /* Networking Complex Control 0 */
1094 #define MV_NETCOMP_CONTROL_0                              (0x120)
1095 
1096 #define NETC_GBE_PORT1_MII_MODE_OFFSET    2
1097 #define NETC_GBE_PORT1_MII_MODE_MASK    (0x1 << NETC_GBE_PORT1_MII_MODE_OFFSET)
1098 
1099 #define NETC_GBE_PORT1_SGMII_MODE_OFFSET    1
1100 #define NETC_GBE_PORT1_SGMII_MODE_MASK    (0x1 << NETC_GBE_PORT1_SGMII_MODE_OFFSET)
1101 
1102 #define NETC_GBE_PORT0_SGMII_MODE_OFFSET    0
1103 #define NETC_GBE_PORT0_SGMII_MODE_MASK    (0x1 << NETC_GBE_PORT0_SGMII_MODE_OFFSET)
1104 
1105 /* Port Mac Control0 */
1106 #define MV_XLG_PORT_MAC_CTRL0_REG     (                   0x0000)
1107 #define MV_XLG_MAC_CTRL0_PORTEN_OFFS    0
1108 #define MV_XLG_MAC_CTRL0_PORTEN_MASK    \
1109     (0x00000001 << MV_XLG_MAC_CTRL0_PORTEN_OFFS)
1110 
1111 #define MV_XLG_MAC_CTRL0_MACRESETN_OFFS    1
1112 #define MV_XLG_MAC_CTRL0_MACRESETN_MASK    \
1113     (0x00000001 << MV_XLG_MAC_CTRL0_MACRESETN_OFFS)
1114 
1115 #define MV_XLG_MAC_CTRL0_FORCELINKDOWN_OFFS    2
1116 #define MV_XLG_MAC_CTRL0_FORCELINKDOWN_MASK    \
1117     (0x00000001 << MV_XLG_MAC_CTRL0_FORCELINKDOWN_OFFS)
1118 
1119 #define MV_XLG_MAC_CTRL0_FORCELINKPASS_OFFS    3
1120 #define MV_XLG_MAC_CTRL0_FORCELINKPASS_MASK    \
1121     (0x00000001 << MV_XLG_MAC_CTRL0_FORCELINKPASS_OFFS)
1122 
1123 #define MV_XLG_MAC_CTRL0_TXIPGMODE_OFFS    5
1124 #define MV_XLG_MAC_CTRL0_TXIPGMODE_MASK    \
1125     (0x00000003 << MV_XLG_MAC_CTRL0_TXIPGMODE_OFFS)
1126 
1127 #define MV_XLG_MAC_CTRL0_RXFCEN_OFFS    7
1128 #define MV_XLG_MAC_CTRL0_RXFCEN_MASK    \
1129     (0x00000001 << MV_XLG_MAC_CTRL0_RXFCEN_OFFS)
1130 
1131 #define MV_XLG_MAC_CTRL0_TXFCEN_OFFS    8
1132 #define MV_XLG_MAC_CTRL0_TXFCEN_MASK    \
1133     (0x00000001 << MV_XLG_MAC_CTRL0_TXFCEN_OFFS)
1134 
1135 #define MV_XLG_MAC_CTRL0_RXCRCCHECKEN_OFFS    9
1136 #define MV_XLG_MAC_CTRL0_RXCRCCHECKEN_MASK    \
1137     (0x00000001 << MV_XLG_MAC_CTRL0_RXCRCCHECKEN_OFFS)
1138 
1139 #define MV_XLG_MAC_CTRL0_PERIODICXONEN_OFFS    10
1140 #define MV_XLG_MAC_CTRL0_PERIODICXONEN_MASK    \
1141     (0x00000001 << MV_XLG_MAC_CTRL0_PERIODICXONEN_OFFS)
1142 
1143 #define MV_XLG_MAC_CTRL0_RXCRCSTRIPEN_OFFS    11
1144 #define MV_XLG_MAC_CTRL0_RXCRCSTRIPEN_MASK    \
1145     (0x00000001 << MV_XLG_MAC_CTRL0_RXCRCSTRIPEN_OFFS)
1146 
1147 #define MV_XLG_MAC_CTRL0_PADDINGDIS_OFFS    13
1148 #define MV_XLG_MAC_CTRL0_PADDINGDIS_MASK    \
1149     (0x00000001 << MV_XLG_MAC_CTRL0_PADDINGDIS_OFFS)
1150 
1151 #define MV_XLG_MAC_CTRL0_MIBCNTDIS_OFFS    14
1152 #define MV_XLG_MAC_CTRL0_MIBCNTDIS_MASK    \
1153     (0x00000001 << MV_XLG_MAC_CTRL0_MIBCNTDIS_OFFS)
1154 
1155 #define MV_XLG_MAC_CTRL0_PFC_CASCADE_PORT_ENABLE_OFFS    15
1156 #define MV_XLG_MAC_CTRL0_PFC_CASCADE_PORT_ENABLE_MASK    \
1157     (0x00000001 << MV_XLG_MAC_CTRL0_PFC_CASCADE_PORT_ENABLE_OFFS)
1158 
1159 /* Port Mac Control1 */
1160 #define MV_XLG_PORT_MAC_CTRL1_REG                         (0x0004)
1161 #define MV_XLG_MAC_CTRL1_FRAMESIZELIMIT_OFFS    0
1162 #define MV_XLG_MAC_CTRL1_FRAMESIZELIMIT_MASK    \
1163     (0x00001fff << MV_XLG_MAC_CTRL1_FRAMESIZELIMIT_OFFS)
1164 #define MV_XLG_MAC_CTRL1_FRAMESIZELIMIT_DEFAULT     0x1400
1165 
1166 #define MV_XLG_MAC_CTRL1_MACLOOPBACKEN_OFFS    13
1167 #define MV_XLG_MAC_CTRL1_MACLOOPBACKEN_MASK    \
1168     (0x00000001 << MV_XLG_MAC_CTRL1_MACLOOPBACKEN_OFFS)
1169 
1170 #define MV_XLG_MAC_CTRL1_XGMIILOOPBACKEN_OFFS    14
1171 #define MV_XLG_MAC_CTRL1_XGMIILOOPBACKEN_MASK    \
1172     (0x00000001 << MV_XLG_MAC_CTRL1_XGMIILOOPBACKEN_OFFS)
1173 
1174 #define MV_XLG_MAC_CTRL1_LOOPBACKCLOCKSELECT_OFFS    15
1175 #define MV_XLG_MAC_CTRL1_LOOPBACKCLOCKSELECT_MASK    \
1176     (0x00000001 << MV_XLG_MAC_CTRL1_LOOPBACKCLOCKSELECT_OFFS)
1177 
1178 /* Port Mac Control2 */
1179 #define MV_XLG_PORT_MAC_CTRL2_REG                         (0x0008)
1180 #define MV_XLG_MAC_CTRL2_SALOW_7_0_OFFS    0
1181 #define MV_XLG_MAC_CTRL2_SALOW_7_0_MASK    \
1182     (0x000000ff << MV_XLG_MAC_CTRL2_SALOW_7_0_OFFS)
1183 
1184 #define MV_XLG_MAC_CTRL2_UNIDIRECTIONALEN_OFFS    8
1185 #define MV_XLG_MAC_CTRL2_UNIDIRECTIONALEN_MASK    \
1186     (0x00000001 << MV_XLG_MAC_CTRL2_UNIDIRECTIONALEN_OFFS)
1187 
1188 #define MV_XLG_MAC_CTRL2_FIXEDIPGBASE_OFFS    9
1189 #define MV_XLG_MAC_CTRL2_FIXEDIPGBASE_MASK    \
1190     (0x00000001 << MV_XLG_MAC_CTRL2_FIXEDIPGBASE_OFFS)
1191 
1192 #define MV_XLG_MAC_CTRL2_PERIODICXOFFEN_OFFS    10
1193 #define MV_XLG_MAC_CTRL2_PERIODICXOFFEN_MASK    \
1194     (0x00000001 << MV_XLG_MAC_CTRL2_PERIODICXOFFEN_OFFS)
1195 
1196 #define MV_XLG_MAC_CTRL2_SIMPLEXMODEEN_OFFS    13
1197 #define MV_XLG_MAC_CTRL2_SIMPLEXMODEEN_MASK    \
1198     (0x00000001 << MV_XLG_MAC_CTRL2_SIMPLEXMODEEN_OFFS)
1199 
1200 #define MV_XLG_MAC_CTRL2_FC_MODE_OFFS    14
1201 #define MV_XLG_MAC_CTRL2_FC_MODE_MASK    \
1202     (0x00000003 << MV_XLG_MAC_CTRL2_FC_MODE_OFFS)
1203 
1204 /* Port Status */
1205 #define MV_XLG_MAC_PORT_STATUS_REG                        (0x000c)
1206 #define MV_XLG_MAC_PORT_STATUS_LINKSTATUS_OFFS    0
1207 #define MV_XLG_MAC_PORT_STATUS_LINKSTATUS_MASK    \
1208     (0x00000001 << MV_XLG_MAC_PORT_STATUS_LINKSTATUS_OFFS)
1209 
1210 #define MV_XLG_MAC_PORT_STATUS_REMOTEFAULT_OFFS    1
1211 #define MV_XLG_MAC_PORT_STATUS_REMOTEFAULT_MASK    \
1212     (0x00000001 << MV_XLG_MAC_PORT_STATUS_REMOTEFAULT_OFFS)
1213 
1214 #define MV_XLG_MAC_PORT_STATUS_LOCALFAULT_OFFS    2
1215 #define MV_XLG_MAC_PORT_STATUS_LOCALFAULT_MASK    \
1216     (0x00000001 << MV_XLG_MAC_PORT_STATUS_LOCALFAULT_OFFS)
1217 
1218 #define MV_XLG_MAC_PORT_STATUS_LINKSTATUSCLEAN_OFFS    3
1219 #define MV_XLG_MAC_PORT_STATUS_LINKSTATUSCLEAN_MASK    \
1220     (0x00000001 << MV_XLG_MAC_PORT_STATUS_LINKSTATUSCLEAN_OFFS)
1221 
1222 #define MV_XLG_MAC_PORT_STATUS_LOCALFAULTCLEAN_OFFS    4
1223 #define MV_XLG_MAC_PORT_STATUS_LOCALFAULTCLEAN_MASK    \
1224     (0x00000001 << MV_XLG_MAC_PORT_STATUS_LOCALFAULTCLEAN_OFFS)
1225 
1226 #define MV_XLG_MAC_PORT_STATUS_REMOTEFAULTCLEAN_OFFS    5
1227 #define MV_XLG_MAC_PORT_STATUS_REMOTEFAULTCLEAN_MASK    \
1228     (0x00000001 << MV_XLG_MAC_PORT_STATUS_REMOTEFAULTCLEAN_OFFS)
1229 
1230 #define MV_XLG_MAC_PORT_STATUS_PORTRXPAUSE_OFFS    6
1231 #define MV_XLG_MAC_PORT_STATUS_PORTRXPAUSE_MASK    \
1232     (0x00000001 << MV_XLG_MAC_PORT_STATUS_PORTRXPAUSE_OFFS)
1233 
1234 #define MV_XLG_MAC_PORT_STATUS_PORTTXPAUSE_OFFS    7
1235 #define MV_XLG_MAC_PORT_STATUS_PORTTXPAUSE_MASK    \
1236     (0x00000001 << MV_XLG_MAC_PORT_STATUS_PORTTXPAUSE_OFFS)
1237 
1238 #define MV_XLG_MAC_PORT_STATUS_PFC_SYNC_FIFO_FULL_OFFS    8
1239 #define MV_XLG_MAC_PORT_STATUS_PFC_SYNC_FIFO_FULL_MASK    \
1240     (0x00000001 << MV_XLG_MAC_PORT_STATUS_PFC_SYNC_FIFO_FULL_OFFS)
1241 
1242 /* Port Fifos Thresholds Configuration */
1243 #define MV_XLG_PORT_FIFOS_THRS_CFG_REG                    (0x0010)
1244 #define MV_XLG_MAC_PORT_FIFOS_THRS_CFG_RXFULLTHR_OFFS    0
1245 #define MV_XLG_MAC_PORT_FIFOS_THRS_CFG_RXFULLTHR_MASK    \
1246     (0x0000001f << MV_XLG_MAC_PORT_FIFOS_THRS_CFG_RXFULLTHR_OFFS)
1247 
1248 #define MV_XLG_MAC_PORT_FIFOS_THRS_CFG_TXFIFOSIZE_OFFS    5
1249 #define MV_XLG_MAC_PORT_FIFOS_THRS_CFG_TXFIFOSIZE_MASK    \
1250     (0x0000003f << MV_XLG_MAC_PORT_FIFOS_THRS_CFG_TXFIFOSIZE_OFFS)
1251 
1252 #define MV_XLG_MAC_PORT_FIFOS_THRS_CFG_TXRDTHR_OFFS    11
1253 #define MV_XLG_MAC_PORT_FIFOS_THRS_CFG_TXRDTHR_MASK    \
1254     (0x0000001f << MV_XLG_MAC_PORT_FIFOS_THRS_CFG_TXRDTHR_OFFS)
1255 
1256 /* Port Mac Control3 */
1257 #define MV_XLG_PORT_MAC_CTRL3_REG                         (0x001c)
1258 #define MV_XLG_MAC_CTRL3_BUFSIZE_OFFS    0
1259 #define MV_XLG_MAC_CTRL3_BUFSIZE_MASK    \
1260     (0x0000003f << MV_XLG_MAC_CTRL3_BUFSIZE_OFFS)
1261 
1262 #define MV_XLG_MAC_CTRL3_XTRAIPG_OFFS    6
1263 #define MV_XLG_MAC_CTRL3_XTRAIPG_MASK    \
1264     (0x0000007f << MV_XLG_MAC_CTRL3_XTRAIPG_OFFS)
1265 
1266 #define MV_XLG_MAC_CTRL3_MACMODESELECT_OFFS    13
1267 #define MV_XLG_MAC_CTRL3_MACMODESELECT_MASK    \
1268     (0x00000007 << MV_XLG_MAC_CTRL3_MACMODESELECT_OFFS)
1269 #define MV_XLG_MAC_CTRL3_MACMODESELECT_GMAC    \
1270     (0x00000000 << MV_XLG_MAC_CTRL3_MACMODESELECT_OFFS)
1271 #define MV_XLG_MAC_CTRL3_MACMODESELECT_10G     \
1272     (0x00000001 << MV_XLG_MAC_CTRL3_MACMODESELECT_OFFS)
1273 
1274 /* Port Per Prio Flow Control Status */
1275 #define MV_XLG_PORT_PER_PRIO_FLOW_CTRL_STATUS_REG         (0x0020)
1276 #define MV_XLG_MAC_PORT_PER_PRIO_FLOW_CTRL_STATUS_PRIONSTATUS_OFFS    0
1277 #define MV_XLG_MAC_PORT_PER_PRIO_FLOW_CTRL_STATUS_PRIONSTATUS_MASK    \
1278     (0x00000001 << MV_XLG_MAC_PORT_PER_PRIO_FLOW_CTRL_STATUS_PRIONSTATUS_OFFS)
1279 
1280 /* Debug Bus Status */
1281 #define MV_XLG_DEBUG_BUS_STATUS_REG                       (0x0024)
1282 #define MV_XLG_MAC_DEBUG_BUS_STATUS_DEBUG_BUS_OFFS    0
1283 #define MV_XLG_MAC_DEBUG_BUS_STATUS_DEBUG_BUS_MASK    \
1284     (0x0000ffff << MV_XLG_MAC_DEBUG_BUS_STATUS_DEBUG_BUS_OFFS)
1285 
1286 /* Port Metal Fix */
1287 #define MV_XLG_PORT_METAL_FIX_REG                         (0x002c)
1288 #define MV_XLG_MAC_PORT_METAL_FIX_EN_EOP_IN_FIFO__OFFS    0
1289 #define MV_XLG_MAC_PORT_METAL_FIX_EN_EOP_IN_FIFO__MASK    \
1290     (0x00000001 << MV_XLG_MAC_PORT_METAL_FIX_EN_EOP_IN_FIFO__OFFS)
1291 
1292 #define MV_XLG_MAC_PORT_METAL_FIX_EN_LTF_FIX__OFFS    1
1293 #define MV_XLG_MAC_PORT_METAL_FIX_EN_LTF_FIX__MASK    \
1294     (0x00000001 << MV_XLG_MAC_PORT_METAL_FIX_EN_LTF_FIX__OFFS)
1295 
1296 #define MV_XLG_MAC_PORT_METAL_FIX_EN_HOLD_FIX__OFFS    2
1297 #define MV_XLG_MAC_PORT_METAL_FIX_EN_HOLD_FIX__MASK    \
1298     (0x00000001 << MV_XLG_MAC_PORT_METAL_FIX_EN_HOLD_FIX__OFFS)
1299 
1300 #define MV_XLG_MAC_PORT_METAL_FIX_EN_LED_FIX__OFFS    3
1301 #define MV_XLG_MAC_PORT_METAL_FIX_EN_LED_FIX__MASK    \
1302     (0x00000001 << MV_XLG_MAC_PORT_METAL_FIX_EN_LED_FIX__OFFS)
1303 
1304 #define MV_XLG_MAC_PORT_METAL_FIX_EN_PAD_PROTECT__OFFS    4
1305 #define MV_XLG_MAC_PORT_METAL_FIX_EN_PAD_PROTECT__MASK    \
1306     (0x00000001 << MV_XLG_MAC_PORT_METAL_FIX_EN_PAD_PROTECT__OFFS)
1307 
1308 #define MV_XLG_MAC_PORT_METAL_FIX_EN_NX_BTS44__OFFS    5
1309 #define MV_XLG_MAC_PORT_METAL_FIX_EN_NX_BTS44__MASK    \
1310     (0x00000001 << MV_XLG_MAC_PORT_METAL_FIX_EN_NX_BTS44__OFFS)
1311 
1312 #define MV_XLG_MAC_PORT_METAL_FIX_EN_NX_BTS42__OFFS    6
1313 #define MV_XLG_MAC_PORT_METAL_FIX_EN_NX_BTS42__MASK    \
1314     (0x00000001 << MV_XLG_MAC_PORT_METAL_FIX_EN_NX_BTS42__OFFS)
1315 
1316 #define MV_XLG_MAC_PORT_METAL_FIX_EN_FLUSH_FIX_OFFS    7
1317 #define MV_XLG_MAC_PORT_METAL_FIX_EN_FLUSH_FIX_MASK    \
1318     (0x00000001 << MV_XLG_MAC_PORT_METAL_FIX_EN_FLUSH_FIX_OFFS)
1319 
1320 #define MV_XLG_MAC_PORT_METAL_FIX_EN_PORT_EN_FIX_OFFS    8
1321 #define MV_XLG_MAC_PORT_METAL_FIX_EN_PORT_EN_FIX_MASK    \
1322     (0x00000001 << MV_XLG_MAC_PORT_METAL_FIX_EN_PORT_EN_FIX_OFFS)
1323 
1324 #define MV_XLG_MAC_PORT_METAL_FIX_SPARE_DEF0_BITS_OFFS    9
1325 #define MV_XLG_MAC_PORT_METAL_FIX_SPARE_DEF0_BITS_MASK    \
1326     (0x0000000f << MV_XLG_MAC_PORT_METAL_FIX_SPARE_DEF0_BITS_OFFS)
1327 
1328 #define MV_XLG_MAC_PORT_METAL_FIX_SPARE_DEF1_BITS_OFFS    13
1329 #define MV_XLG_MAC_PORT_METAL_FIX_SPARE_DEF1_BITS_MASK    \
1330     (0x00000007 << MV_XLG_MAC_PORT_METAL_FIX_SPARE_DEF1_BITS_OFFS)
1331 
1332 /* Xg Mib Counters Control */
1333 #define MV_XLG_MIB_CNTRS_CTRL_REG                         (0x0030)
1334 #define MV_XLG_MAC_XG_MIB_CNTRS_CTRL_XGCAPTURETRIGGER_OFFS    0
1335 #define MV_XLG_MAC_XG_MIB_CNTRS_CTRL_XGCAPTURETRIGGER_MASK    \
1336     (0x00000001 << MV_XLG_MAC_XG_MIB_CNTRS_CTRL_XGCAPTURETRIGGER_OFFS)
1337 
1338 #define MV_XLG_MAC_XG_MIB_CNTRS_CTRL_XGDONTCLEARAFTERREAD_OFFS    1
1339 #define MV_XLG_MAC_XG_MIB_CNTRS_CTRL_XGDONTCLEARAFTERREAD_MASK    \
1340     (0x00000001 << MV_XLG_MAC_XG_MIB_CNTRS_CTRL_XGDONTCLEARAFTERREAD_OFFS)
1341 
1342 #define MV_XLG_MAC_XG_MIB_CNTRS_CTRL_XGRXHISTOGRAMEN_OFFS    2
1343 #define MV_XLG_MAC_XG_MIB_CNTRS_CTRL_XGRXHISTOGRAMEN_MASK    \
1344     (0x00000001 << MV_XLG_MAC_XG_MIB_CNTRS_CTRL_XGRXHISTOGRAMEN_OFFS)
1345 
1346 #define MV_XLG_MAC_XG_MIB_CNTRS_CTRL_XGTXHISTOGRAMEN_OFFS    3
1347 #define MV_XLG_MAC_XG_MIB_CNTRS_CTRL_XGTXHISTOGRAMEN_MASK    \
1348     (0x00000001 << MV_XLG_MAC_XG_MIB_CNTRS_CTRL_XGTXHISTOGRAMEN_OFFS)
1349 
1350 #define MV_XLG_MAC_XG_MIB_CNTRS_CTRL_MFA1_BTT940_FIX_ENABLE__OFFS    4
1351 #define MV_XLG_MAC_XG_MIB_CNTRS_CTRL_MFA1_BTT940_FIX_ENABLE__MASK    \
1352     (0x00000001 << MV_XLG_MAC_XG_MIB_CNTRS_CTRL_MFA1_BTT940_FIX_ENABLE__OFFS)
1353 
1354 #define MV_XLG_MAC_XG_MIB_CNTRS_CTRL_LEDS_NUMBER_OFFS    5
1355 #define MV_XLG_MAC_XG_MIB_CNTRS_CTRL_LEDS_NUMBER_MASK    \
1356     (0x0000003f << MV_XLG_MAC_XG_MIB_CNTRS_CTRL_LEDS_NUMBER_OFFS)
1357 
1358 #define MV_XLG_MAC_XG_MIB_CNTRS_CTRL_MIB_4_COUNT_HIST_OFFS    11
1359 #define MV_XLG_MAC_XG_MIB_CNTRS_CTRL_MIB_4_COUNT_HIST_MASK    \
1360     (0x00000001 << MV_XLG_MAC_XG_MIB_CNTRS_CTRL_MIB_4_COUNT_HIST_OFFS)
1361 
1362 #define MV_XLG_MAC_XG_MIB_CNTRS_CTRL_MIB_4_LIMIT_1518_1522_OFFS    12
1363 #define MV_XLG_MAC_XG_MIB_CNTRS_CTRL_MIB_4_LIMIT_1518_1522_MASK    \
1364     (0x00000001 << MV_XLG_MAC_XG_MIB_CNTRS_CTRL_MIB_4_LIMIT_1518_1522_OFFS)
1365 
1366 /* Cn/ccfc Timer%i */
1367 #define MV_XLG_CNCCFC_TIMERI_REG(t)                       ((0x0038 + (t) * 4))
1368 #define MV_XLG_MAC_CNCCFC_TIMERI_PORTSPEEDTIMER_OFFS    0
1369 #define MV_XLG_MAC_CNCCFC_TIMERI_PORTSPEEDTIMER_MASK    \
1370     (0x0000ffff << MV_XLG_MAC_CNCCFC_TIMERI_PORTSPEEDTIMER_OFFS)
1371 
1372 /* Ppfc Control */
1373 #define MV_XLG_MAC_PPFC_CTRL_REG                          (0x0060)
1374 #define MV_XLG_MAC_PPFC_CTRL_GLOBAL_PAUSE_ENI_OFFS    0
1375 #define MV_XLG_MAC_PPFC_CTRL_GLOBAL_PAUSE_ENI_MASK    \
1376     (0x00000001 << MV_XLG_MAC_PPFC_CTRL_GLOBAL_PAUSE_ENI_OFFS)
1377 
1378 #define MV_XLG_MAC_PPFC_CTRL_DIP_BTS_677_EN_OFFS    9
1379 #define MV_XLG_MAC_PPFC_CTRL_DIP_BTS_677_EN_MASK    \
1380     (0x00000001 << MV_XLG_MAC_PPFC_CTRL_DIP_BTS_677_EN_OFFS)
1381 
1382 /* Fc Dsa Tag 0 */
1383 #define MV_XLG_MAC_FC_DSA_TAG_0_REG                       (0x0068)
1384 #define MV_XLG_MAC_FC_DSA_TAG_0_DSATAGREG0_OFFS    0
1385 #define MV_XLG_MAC_FC_DSA_TAG_0_DSATAGREG0_MASK    \
1386     (0x0000ffff << MV_XLG_MAC_FC_DSA_TAG_0_DSATAGREG0_OFFS)
1387 
1388 /* Fc Dsa Tag 1 */
1389 #define MV_XLG_MAC_FC_DSA_TAG_1_REG                       (0x006c)
1390 #define MV_XLG_MAC_FC_DSA_TAG_1_DSATAGREG1_OFFS    0
1391 #define MV_XLG_MAC_FC_DSA_TAG_1_DSATAGREG1_MASK    \
1392     (0x0000ffff << MV_XLG_MAC_FC_DSA_TAG_1_DSATAGREG1_OFFS)
1393 
1394 /* Fc Dsa Tag 2 */
1395 #define MV_XLG_MAC_FC_DSA_TAG_2_REG                       (0x0070)
1396 #define MV_XLG_MAC_FC_DSA_TAG_2_DSATAGREG2_OFFS    0
1397 #define MV_XLG_MAC_FC_DSA_TAG_2_DSATAGREG2_MASK    \
1398     (0x0000ffff << MV_XLG_MAC_FC_DSA_TAG_2_DSATAGREG2_OFFS)
1399 
1400 /* Fc Dsa Tag 3 */
1401 #define MV_XLG_MAC_FC_DSA_TAG_3_REG                       (0x0074)
1402 #define MV_XLG_MAC_FC_DSA_TAG_3_DSATAGREG3_OFFS    0
1403 #define MV_XLG_MAC_FC_DSA_TAG_3_DSATAGREG3_MASK    \
1404     (0x0000ffff << MV_XLG_MAC_FC_DSA_TAG_3_DSATAGREG3_OFFS)
1405 
1406 /* Dic Budget Compensation */
1407 #define MV_XLG_MAC_DIC_BUDGET_COMPENSATION_REG            (0x0080)
1408 #define MV_XLG_MAC_DIC_BUDGET_COMPENSATION_DIC_COUNTER_TO_ADD_8BYTES_OFFS    0
1409 #define MV_XLG_MAC_DIC_BUDGET_COMPENSATION_DIC_COUNTER_TO_ADD_8BYTES_MASK    \
1410     (0x0000ffff << MV_XLG_MAC_DIC_BUDGET_COMPENSATION_DIC_COUNTER_TO_ADD_8BYTES_OFFS)
1411 
1412 /* Port Mac Control4 */
1413 #define MV_XLG_PORT_MAC_CTRL4_REG                         (0x0084)
1414 #define MV_XLG_MAC_CTRL4_LLFC_GLOBAL_FC_ENABLE_OFFS    0
1415 #define MV_XLG_MAC_CTRL4_LLFC_GLOBAL_FC_ENABLE_MASK    \
1416     (0x00000001 << MV_XLG_MAC_CTRL4_LLFC_GLOBAL_FC_ENABLE_OFFS)
1417 
1418 #define MV_XLG_MAC_CTRL4_LED_STREAM_SELECT_OFFS    1
1419 #define MV_XLG_MAC_CTRL4_LED_STREAM_SELECT_MASK    \
1420     (0x00000001 << MV_XLG_MAC_CTRL4_LED_STREAM_SELECT_OFFS)
1421 
1422 #define MV_XLG_MAC_CTRL4_DEBUG_BUS_SELECT_OFFS    2
1423 #define MV_XLG_MAC_CTRL4_DEBUG_BUS_SELECT_MASK    \
1424     (0x00000001 << MV_XLG_MAC_CTRL4_DEBUG_BUS_SELECT_OFFS)
1425 
1426 #define MV_XLG_MAC_CTRL4_MASK_PCS_RESET_OFFS    3
1427 #define MV_XLG_MAC_CTRL4_MASK_PCS_RESET_MASK    \
1428     (0x00000001 << MV_XLG_MAC_CTRL4_MASK_PCS_RESET_OFFS)
1429 
1430 #define MV_XLG_MAC_CTRL4_ENABLE_SHORT_PREAMBLE_FOR_XLG_OFFS    4
1431 #define MV_XLG_MAC_CTRL4_ENABLE_SHORT_PREAMBLE_FOR_XLG_MASK    \
1432     (0x00000001 << MV_XLG_MAC_CTRL4_ENABLE_SHORT_PREAMBLE_FOR_XLG_OFFS)
1433 
1434 #define MV_XLG_MAC_CTRL4_FORWARD_802_3X_FC_EN_OFFS    5
1435 #define MV_XLG_MAC_CTRL4_FORWARD_802_3X_FC_EN_MASK    \
1436     (0x00000001 << MV_XLG_MAC_CTRL4_FORWARD_802_3X_FC_EN_OFFS)
1437 
1438 #define MV_XLG_MAC_CTRL4_FORWARD_PFC_EN_OFFS    6
1439 #define MV_XLG_MAC_CTRL4_FORWARD_PFC_EN_MASK    \
1440     (0x00000001 << MV_XLG_MAC_CTRL4_FORWARD_PFC_EN_OFFS)
1441 
1442 #define MV_XLG_MAC_CTRL4_FORWARD_UNKNOWN_FC_EN_OFFS    7
1443 #define MV_XLG_MAC_CTRL4_FORWARD_UNKNOWN_FC_EN_MASK    \
1444     (0x00000001 << MV_XLG_MAC_CTRL4_FORWARD_UNKNOWN_FC_EN_OFFS)
1445 
1446 #define MV_XLG_MAC_CTRL4_USE_XPCS_OFFS    8
1447 #define MV_XLG_MAC_CTRL4_USE_XPCS_MASK    \
1448     (0x00000001 << MV_XLG_MAC_CTRL4_USE_XPCS_OFFS)
1449 
1450 #define MV_XLG_MAC_CTRL4_DMA_INTERFACE_IS_64_BIT_OFFS    9
1451 #define MV_XLG_MAC_CTRL4_DMA_INTERFACE_IS_64_BIT_MASK    \
1452     (0x00000001 << MV_XLG_MAC_CTRL4_DMA_INTERFACE_IS_64_BIT_OFFS)
1453 
1454 #define MV_XLG_MAC_CTRL4_TX_DMA_INTERFACE_BITS_OFFS    10
1455 #define MV_XLG_MAC_CTRL4_TX_DMA_INTERFACE_BITS_MASK    \
1456     (0x00000003 << MV_XLG_MAC_CTRL4_TX_DMA_INTERFACE_BITS_OFFS)
1457 
1458 #define MV_XLG_MAC_CTRL4_MAC_MODE_DMA_1G_OFFS    12
1459 #define MV_XLG_MAC_CTRL4_MAC_MODE_DMA_1G_MASK    \
1460     (0x00000001 << MV_XLG_MAC_CTRL4_MAC_MODE_DMA_1G_OFFS)
1461 
1462 #define MV_XLG_MAC_CTRL4_EN_IDLE_CHECK_FOR_LINK         14
1463 #define MV_XLG_MAC_CTRL4_EN_IDLE_CHECK_FOR_LINK_MASK    \
1464     (0x00000001 << MV_XLG_MAC_CTRL4_EN_IDLE_CHECK_FOR_LINK)
1465 
1466 /* Port Mac Control5 */
1467 #define MV_XLG_PORT_MAC_CTRL5_REG                         (0x0088)
1468 #define MV_XLG_MAC_CTRL5_TXIPGLENGTH_OFFS    0
1469 #define MV_XLG_MAC_CTRL5_TXIPGLENGTH_MASK    \
1470     (0x0000000f << MV_XLG_MAC_CTRL5_TXIPGLENGTH_OFFS)
1471 
1472 #define MV_XLG_MAC_CTRL5_PREAMBLELENGTHTX_OFFS    4
1473 #define MV_XLG_MAC_CTRL5_PREAMBLELENGTHTX_MASK    \
1474     (0x00000007 << MV_XLG_MAC_CTRL5_PREAMBLELENGTHTX_OFFS)
1475 
1476 #define MV_XLG_MAC_CTRL5_PREAMBLELENGTHRX_OFFS    7
1477 #define MV_XLG_MAC_CTRL5_PREAMBLELENGTHRX_MASK    \
1478     (0x00000007 << MV_XLG_MAC_CTRL5_PREAMBLELENGTHRX_OFFS)
1479 
1480 #define MV_XLG_MAC_CTRL5_TXNUMCRCBYTES_OFFS    10
1481 #define MV_XLG_MAC_CTRL5_TXNUMCRCBYTES_MASK    \
1482     (0x00000007 << MV_XLG_MAC_CTRL5_TXNUMCRCBYTES_OFFS)
1483 
1484 #define MV_XLG_MAC_CTRL5_RXNUMCRCBYTES_OFFS    13
1485 #define MV_XLG_MAC_CTRL5_RXNUMCRCBYTES_MASK    \
1486     (0x00000007 << MV_XLG_MAC_CTRL5_RXNUMCRCBYTES_OFFS)
1487 
1488 /* External Control */
1489 #define MV_XLG_MAC_EXT_CTRL_REG                           (0x0090)
1490 #define MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL0_OFFS    0
1491 #define MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL0_MASK    \
1492     (0x00000001 << MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL0_OFFS)
1493 
1494 #define MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL1_OFFS    1
1495 #define MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL1_MASK    \
1496     (0x00000001 << MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL1_OFFS)
1497 
1498 #define MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL2_OFFS    2
1499 #define MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL2_MASK    \
1500     (0x00000001 << MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL2_OFFS)
1501 
1502 #define MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL3_OFFS    3
1503 #define MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL3_MASK    \
1504     (0x00000001 << MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL3_OFFS)
1505 
1506 #define MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL4_OFFS    4
1507 #define MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL4_MASK    \
1508     (0x00000001 << MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL4_OFFS)
1509 
1510 #define MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL5_OFFS    5
1511 #define MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL5_MASK    \
1512     (0x00000001 << MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL5_OFFS)
1513 
1514 #define MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL6_OFFS    6
1515 #define MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL6_MASK    \
1516     (0x00000001 << MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL6_OFFS)
1517 
1518 #define MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL7_OFFS    7
1519 #define MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL7_MASK    \
1520     (0x00000001 << MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL7_OFFS)
1521 
1522 #define MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL8_OFFS    8
1523 #define MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL8_MASK    \
1524     (0x00000001 << MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL8_OFFS)
1525 
1526 #define MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL9_OFFS    9
1527 #define MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL9_MASK    \
1528     (0x00000001 << MV_XLG_MAC_EXT_CTRL_EXTERNAL_CTRL9_OFFS)
1529 
1530 #define MV_XLG_MAC_EXT_CTRL_EXT_CTRL_10_OFFS    10
1531 #define MV_XLG_MAC_EXT_CTRL_EXT_CTRL_10_MASK    \
1532     (0x00000001 << MV_XLG_MAC_EXT_CTRL_EXT_CTRL_10_OFFS)
1533 
1534 #define MV_XLG_MAC_EXT_CTRL_EXT_CTRL_11_OFFS    11
1535 #define MV_XLG_MAC_EXT_CTRL_EXT_CTRL_11_MASK    \
1536     (0x00000001 << MV_XLG_MAC_EXT_CTRL_EXT_CTRL_11_OFFS)
1537 
1538 #define MV_XLG_MAC_EXT_CTRL_EXT_CTRL_12_OFFS    12
1539 #define MV_XLG_MAC_EXT_CTRL_EXT_CTRL_12_MASK    \
1540     (0x00000001 << MV_XLG_MAC_EXT_CTRL_EXT_CTRL_12_OFFS)
1541 
1542 #define MV_XLG_MAC_EXT_CTRL_EXT_CTRL_13_OFFS    13
1543 #define MV_XLG_MAC_EXT_CTRL_EXT_CTRL_13_MASK    \
1544     (0x00000001 << MV_XLG_MAC_EXT_CTRL_EXT_CTRL_13_OFFS)
1545 
1546 #define MV_XLG_MAC_EXT_CTRL_EXT_CTRL_14_OFFS    14
1547 #define MV_XLG_MAC_EXT_CTRL_EXT_CTRL_14_MASK    \
1548     (0x00000001 << MV_XLG_MAC_EXT_CTRL_EXT_CTRL_14_OFFS)
1549 
1550 #define MV_XLG_MAC_EXT_CTRL_EXT_CTRL_15_OFFS    15
1551 #define MV_XLG_MAC_EXT_CTRL_EXT_CTRL_15_MASK    \
1552     (0x00000001 << MV_XLG_MAC_EXT_CTRL_EXT_CTRL_15_OFFS)
1553 
1554 /* Macro Control */
1555 #define MV_XLG_MAC_MACRO_CTRL_REG                         (0x0094)
1556 #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_0_OFFS    0
1557 #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_0_MASK    \
1558     (0x00000001 << MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_0_OFFS)
1559 
1560 #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_1_OFFS    1
1561 #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_1_MASK    \
1562     (0x00000001 << MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_1_OFFS)
1563 
1564 #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_2_OFFS    2
1565 #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_2_MASK    \
1566     (0x00000001 << MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_2_OFFS)
1567 
1568 #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_3_OFFS    3
1569 #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_3_MASK    \
1570     (0x00000001 << MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_3_OFFS)
1571 
1572 #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_4_OFFS    4
1573 #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_4_MASK    \
1574     (0x00000001 << MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_4_OFFS)
1575 
1576 #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_5_OFFS    5
1577 #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_5_MASK    \
1578     (0x00000001 << MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_5_OFFS)
1579 
1580 #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_6_OFFS    6
1581 #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_6_MASK    \
1582     (0x00000001 << MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_6_OFFS)
1583 
1584 #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_7_OFFS    7
1585 #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_7_MASK    \
1586     (0x00000001 << MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_7_OFFS)
1587 
1588 #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_8_OFFS    8
1589 #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_8_MASK    \
1590     (0x00000001 << MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_8_OFFS)
1591 
1592 #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_9_OFFS    9
1593 #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_9_MASK    \
1594     (0x00000001 << MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_9_OFFS)
1595 
1596 #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_10_OFFS    10
1597 #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_10_MASK    \
1598     (0x00000001 << MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_10_OFFS)
1599 
1600 #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_11_OFFS    11
1601 #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_11_MASK    \
1602     (0x00000001 << MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_11_OFFS)
1603 
1604 #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_12_OFFS    12
1605 #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_12_MASK    \
1606     (0x00000001 << MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_12_OFFS)
1607 
1608 #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_13_OFFS    13
1609 #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_13_MASK    \
1610     (0x00000001 << MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_13_OFFS)
1611 
1612 #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_14_OFFS    14
1613 #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_14_MASK    \
1614     (0x00000001 << MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_14_OFFS)
1615 
1616 #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_15_OFFS    15
1617 #define MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_15_MASK    \
1618     (0x00000001 << MV_XLG_MAC_MACRO_CTRL_MACRO_CTRL_15_OFFS)
1619 
1620 #define MV_XLG_MAC_DIC_PPM_IPG_REDUCE_REG                 (0x0094)
1621 
1622 /* Port Interrupt Cause */
1623 #define MV_XLG_INTERRUPT_CAUSE_REG                        (0x0014)
1624 /* Port Interrupt Mask */
1625 #define MV_XLG_INTERRUPT_MASK_REG                         (0x0018)
1626 #define MV_XLG_SUMMARY_INTERRUPT_OFFSET      0
1627 #define MV_XLG_SUMMARY_INTERRUPT_MASK        \
1628     (0x1 << MV_XLG_SUMMARY_INTERRUPT_OFFSET)
1629 #define MV_XLG_INTERRUPT_LINK_CHANGE_OFFS    1
1630 #define MV_XLG_INTERRUPT_LINK_CHANGE_MASK    \
1631     (0x1 << MV_XLG_INTERRUPT_LINK_CHANGE_OFFS)
1632 
1633 /* Port Interrupt Summary Cause */
1634 #define MV_XLG_EXTERNAL_INTERRUPT_CAUSE_REG               (0x0058)
1635 /* Port Interrupt Summary Mask */
1636 #define MV_XLG_EXTERNAL_INTERRUPT_MASK_REG                (0x005C)
1637 #define MV_XLG_EXTERNAL_INTERRUPT_LINK_CHANGE_XLG_OFFS    1
1638 #define MV_XLG_EXTERNAL_INTERRUPT_LINK_CHANGE_XLG_MASK    \
1639     (0x1 << MV_XLG_EXTERNAL_INTERRUPT_LINK_CHANGE_XLG_OFFS)
1640 #define MV_XLG_EXTERNAL_INTERRUPT_LINK_CHANGE_GIG_OFFS    2
1641 #define MV_XLG_EXTERNAL_INTERRUPT_LINK_CHANGE_GIG_MASK    \
1642     (0x1 << MV_XLG_EXTERNAL_INTERRUPT_LINK_CHANGE_GIG_OFFS)
1643 
1644 /*All PPV22 Addresses are 40-bit */
1645 #define MVPP22_ADDR_HIGH_SIZE    8
1646 #define MVPP22_ADDR_HIGH_MASK    ((1<<MVPP22_ADDR_HIGH_SIZE) - 1)
1647 #define MVPP22_ADDR_MASK    (0xFFFFFFFFFF)
1648 
1649 /* Desc addr shift */
1650 #define MVPP21_DESC_ADDR_SHIFT    0 /*Applies to RXQ, AGGR_TXQ*/
1651 #define MVPP22_DESC_ADDR_SHIFT    8 /*Applies to RXQ, AGGR_TXQ*/
1652 
1653 /* AXI Bridge Registers */
1654 #define MVPP22_AXI_BM_WR_ATTR_REG                         0x4100
1655 #define MVPP22_AXI_BM_RD_ATTR_REG                         0x4104
1656 #define MVPP22_AXI_AGGRQ_DESCR_RD_ATTR_REG                0x4110
1657 #define MVPP22_AXI_TXQ_DESCR_WR_ATTR_REG                  0x4114
1658 #define MVPP22_AXI_TXQ_DESCR_RD_ATTR_REG                  0x4118
1659 #define MVPP22_AXI_RXQ_DESCR_WR_ATTR_REG                  0x411c
1660 #define MVPP22_AXI_RX_DATA_WR_ATTR_REG                    0x4120
1661 #define MVPP22_AXI_TX_DATA_RD_ATTR_REG                    0x4130
1662 #define MVPP22_AXI_RD_NORMAL_CODE_REG                     0x4150
1663 #define MVPP22_AXI_RD_SNOOP_CODE_REG                      0x4154
1664 #define MVPP22_AXI_WR_NORMAL_CODE_REG                     0x4160
1665 #define MVPP22_AXI_WR_SNOOP_CODE_REG                      0x4164
1666 
1667 #define MVPP22_AXI_ATTR_CACHE_OFFS                        0
1668 #define MVPP22_AXI_ATTR_DOMAIN_OFFS                       12
1669 
1670 #define MVPP22_AXI_CODE_CACHE_OFFS                        0
1671 #define MVPP22_AXI_CODE_DOMAIN_OFFS                       4
1672 
1673 #define MVPP22_AXI_CODE_CACHE_NON_CACHE                   0x3
1674 #define MVPP22_AXI_CODE_CACHE_WR_CACHE                    0x7
1675 #define MVPP22_AXI_CODE_CACHE_RD_CACHE                    0xb
1676 
1677 #define MVPP22_AXI_CODE_DOMAIN_OUTER_DOM                  2
1678 #define MVPP22_AXI_CODE_DOMAIN_SYSTEM                     3
1679 
1680 /* PHY address register */
1681 #define MV_SMI_PHY_ADDRESS_REG(n)                         (0xC + 0x4 * (n))
1682 #define MV_SMI_PHY_ADDRESS_PHYAD_OFFS    0
1683 #define MV_SMI_PHY_ADDRESS_PHYAD_MASK    \
1684   (0x1F << MV_SMI_PHY_ADDRESS_PHYAD_OFFS)
1685 
1686 /* Marvell tag types */
1687 enum Mvpp2TagType {
1688   MVPP2_TAG_TYPE_NONE = 0,
1689   MVPP2_TAG_TYPE_MH   = 1,
1690   MVPP2_TAG_TYPE_DSA  = 2,
1691   MVPP2_TAG_TYPE_EDSA = 3,
1692   MVPP2_TAG_TYPE_VLAN = 4,
1693   MVPP2_TAG_TYPE_LAST = 5
1694 };
1695 
1696 /* Parser constants */
1697 #define MVPP2_PRS_TCAM_SRAM_SIZE    256
1698 #define MVPP2_PRS_TCAM_WORDS    6
1699 #define MVPP2_PRS_SRAM_WORDS    4
1700 #define MVPP2_PRS_FLOW_ID_SIZE    64
1701 #define MVPP2_PRS_FLOW_ID_MASK    0x3f
1702 #define MVPP2_PRS_TCAM_ENTRY_INVALID    1
1703 #define MVPP2_PRS_TCAM_DSA_TAGGED_BIT    BIT(5)
1704 #define MVPP2_PRS_IPV4_HEAD    0x40
1705 #define MVPP2_PRS_IPV4_HEAD_MASK    0xf0
1706 #define MVPP2_PRS_IPV4_MC    0xe0
1707 #define MVPP2_PRS_IPV4_MC_MASK    0xf0
1708 #define MVPP2_PRS_IPV4_BC_MASK    0xff
1709 #define MVPP2_PRS_IPV4_IHL    0x5
1710 #define MVPP2_PRS_IPV4_IHL_MASK    0xf
1711 #define MVPP2_PRS_IPV6_MC    0xff
1712 #define MVPP2_PRS_IPV6_MC_MASK    0xff
1713 #define MVPP2_PRS_IPV6_HOP_MASK    0xff
1714 #define MVPP2_PRS_TCAM_PROTO_MASK    0xff
1715 #define MVPP2_PRS_TCAM_PROTO_MASK_L    0x3f
1716 #define MVPP2_PRS_DBL_VLANS_MAX    100
1717 
1718 /*
1719  * Tcam structure:
1720  * - lookup ID - 4 bits
1721  * - port ID - 1 byte
1722  * - additional information - 1 byte
1723  * - header data - 8 bytes
1724  * The fields are represented by MVPP2_PRS_TCAM_DATA_REG(5)->(0).
1725  */
1726 #define MVPP2_PRS_AI_BITS    8
1727 #define MVPP2_PRS_PORT_MASK    0xff
1728 #define MVPP2_PRS_LU_MASK    0xf
1729 #define MVPP2_PRS_TCAM_DATA_BYTE(offs)    (((offs) - ((offs) % 2)) * 2 + ((offs) % 2))
1730 #define MVPP2_PRS_TCAM_DATA_BYTE_EN(offs)    (((offs) * 2) - ((offs) % 2)  + 2)
1731 #define MVPP2_PRS_TCAM_AI_BYTE    16
1732 #define MVPP2_PRS_TCAM_PORT_BYTE    17
1733 #define MVPP2_PRS_TCAM_LU_BYTE    20
1734 #define MVPP2_PRS_TCAM_EN_OFFS(offs)    ((offs) + 2)
1735 #define MVPP2_PRS_TCAM_INV_WORD    5
1736 /* Tcam entries ID */
1737 #define MVPP2_PE_DROP_ALL    0
1738 #define MVPP2_PE_FIRST_FREE_TID    1
1739 #define MVPP2_PE_LAST_FREE_TID    (MVPP2_PRS_TCAM_SRAM_SIZE - 31)
1740 #define MVPP2_PE_IP6_EXT_PROTO_UN    (MVPP2_PRS_TCAM_SRAM_SIZE - 30)
1741 #define MVPP2_PE_MAC_MC_IP6    (MVPP2_PRS_TCAM_SRAM_SIZE - 29)
1742 #define MVPP2_PE_IP6_ADDR_UN    (MVPP2_PRS_TCAM_SRAM_SIZE - 28)
1743 #define MVPP2_PE_IP4_ADDR_UN    (MVPP2_PRS_TCAM_SRAM_SIZE - 27)
1744 #define MVPP2_PE_LAST_DEFAULT_FLOW    (MVPP2_PRS_TCAM_SRAM_SIZE - 26)
1745 #define MVPP2_PE_FIRST_DEFAULT_FLOW    (MVPP2_PRS_TCAM_SRAM_SIZE - 19)
1746 #define MVPP2_PE_EDSA_TAGGED    (MVPP2_PRS_TCAM_SRAM_SIZE - 18)
1747 #define MVPP2_PE_EDSA_UNTAGGED    (MVPP2_PRS_TCAM_SRAM_SIZE - 17)
1748 #define MVPP2_PE_DSA_TAGGED    (MVPP2_PRS_TCAM_SRAM_SIZE - 16)
1749 #define MVPP2_PE_DSA_UNTAGGED    (MVPP2_PRS_TCAM_SRAM_SIZE - 15)
1750 #define MVPP2_PE_ETYPE_EDSA_TAGGED    (MVPP2_PRS_TCAM_SRAM_SIZE - 14)
1751 #define MVPP2_PE_ETYPE_EDSA_UNTAGGED    (MVPP2_PRS_TCAM_SRAM_SIZE - 13)
1752 #define MVPP2_PE_ETYPE_DSA_TAGGED    (MVPP2_PRS_TCAM_SRAM_SIZE - 12)
1753 #define MVPP2_PE_ETYPE_DSA_UNTAGGED    (MVPP2_PRS_TCAM_SRAM_SIZE - 11)
1754 #define MVPP2_PE_MH_DEFAULT    (MVPP2_PRS_TCAM_SRAM_SIZE - 10)
1755 #define MVPP2_PE_DSA_DEFAULT    (MVPP2_PRS_TCAM_SRAM_SIZE - 9)
1756 #define MVPP2_PE_IP6_PROTO_UN    (MVPP2_PRS_TCAM_SRAM_SIZE - 8)
1757 #define MVPP2_PE_IP4_PROTO_UN    (MVPP2_PRS_TCAM_SRAM_SIZE - 7)
1758 #define MVPP2_PE_ETH_TYPE_UN    (MVPP2_PRS_TCAM_SRAM_SIZE - 6)
1759 #define MVPP2_PE_VLAN_DBL    (MVPP2_PRS_TCAM_SRAM_SIZE - 5)
1760 #define MVPP2_PE_VLAN_NONE    (MVPP2_PRS_TCAM_SRAM_SIZE - 4)
1761 #define MVPP2_PE_MAC_MC_ALL    (MVPP2_PRS_TCAM_SRAM_SIZE - 3)
1762 #define MVPP2_PE_MAC_PROMISCUOUS    (MVPP2_PRS_TCAM_SRAM_SIZE - 2)
1763 #define MVPP2_PE_MAC_NON_PROMISCUOUS    (MVPP2_PRS_TCAM_SRAM_SIZE - 1)
1764 
1765 /*
1766  * Sram structure
1767  * The fields are represented by MVPP2_PRS_TCAM_DATA_REG(3)->(0).
1768  */
1769 #define MVPP2_PRS_SRAM_RI_OFFS    0
1770 #define MVPP2_PRS_SRAM_RI_WORD    0
1771 #define MVPP2_PRS_SRAM_RI_CTRL_OFFS    32
1772 #define MVPP2_PRS_SRAM_RI_CTRL_WORD    1
1773 #define MVPP2_PRS_SRAM_RI_CTRL_BITS    32
1774 #define MVPP2_PRS_SRAM_SHIFT_OFFS    64
1775 #define MVPP2_PRS_SRAM_SHIFT_SIGN_BIT    72
1776 #define MVPP2_PRS_SRAM_SHIFT_MASK    0xff
1777 #define MVPP2_PRS_SRAM_UDF_OFFS    73
1778 #define MVPP2_PRS_SRAM_UDF_BITS    8
1779 #define MVPP2_PRS_SRAM_UDF_MASK    0xff
1780 #define MVPP2_PRS_SRAM_UDF_SIGN_BIT    81
1781 #define MVPP2_PRS_SRAM_UDF_TYPE_OFFS    82
1782 #define MVPP2_PRS_SRAM_UDF_TYPE_MASK    0x7
1783 #define MVPP2_PRS_SRAM_UDF_TYPE_L3    1
1784 #define MVPP2_PRS_SRAM_UDF_TYPE_L4    4
1785 #define MVPP2_PRS_SRAM_OP_SEL_SHIFT_OFFS    85
1786 #define MVPP2_PRS_SRAM_OP_SEL_SHIFT_MASK    0x3
1787 #define MVPP2_PRS_SRAM_OP_SEL_SHIFT_ADD    1
1788 #define MVPP2_PRS_SRAM_OP_SEL_SHIFT_IP4_ADD    2
1789 #define MVPP2_PRS_SRAM_OP_SEL_SHIFT_IP6_ADD    3
1790 #define MVPP2_PRS_SRAM_OP_SEL_UDF_OFFS    87
1791 #define MVPP2_PRS_SRAM_OP_SEL_UDF_BITS    2
1792 #define MVPP2_PRS_SRAM_OP_SEL_UDF_MASK    0x3
1793 #define MVPP2_PRS_SRAM_OP_SEL_UDF_ADD    0
1794 #define MVPP2_PRS_SRAM_OP_SEL_UDF_IP4_ADD    2
1795 #define MVPP2_PRS_SRAM_OP_SEL_UDF_IP6_ADD    3
1796 #define MVPP2_PRS_SRAM_OP_SEL_BASE_OFFS    89
1797 #define MVPP2_PRS_SRAM_AI_OFFS    90
1798 #define MVPP2_PRS_SRAM_AI_CTRL_OFFS    98
1799 #define MVPP2_PRS_SRAM_AI_CTRL_BITS    8
1800 #define MVPP2_PRS_SRAM_AI_MASK    0xff
1801 #define MVPP2_PRS_SRAM_NEXT_LU_OFFS    106
1802 #define MVPP2_PRS_SRAM_NEXT_LU_MASK    0xf
1803 #define MVPP2_PRS_SRAM_LU_DONE_BIT    110
1804 #define MVPP2_PRS_SRAM_LU_GEN_BIT    111
1805 
1806 /* Sram result info bits assignment */
1807 #define MVPP2_PRS_RI_MAC_ME_MASK    0x1
1808 #define MVPP2_PRS_RI_DSA_MASK    0x2
1809 #define MVPP2_PRS_RI_VLAN_MASK    0xc
1810 #define MVPP2_PRS_RI_VLAN_NONE    ~(BIT(2) | BIT(3))
1811 #define MVPP2_PRS_RI_VLAN_SINGLE    BIT(2)
1812 #define MVPP2_PRS_RI_VLAN_DOUBLE    BIT(3)
1813 #define MVPP2_PRS_RI_VLAN_TRIPLE    (BIT(2) | BIT(3))
1814 #define MVPP2_PRS_RI_CPU_CODE_MASK    0x70
1815 #define MVPP2_PRS_RI_CPU_CODE_RX_SPEC    BIT(4)
1816 #define MVPP2_PRS_RI_L2_CAST_MASK    0x600
1817 #define MVPP2_PRS_RI_L2_UCAST    ~(BIT(9) | BIT(10))
1818 #define MVPP2_PRS_RI_L2_MCAST    BIT(9)
1819 #define MVPP2_PRS_RI_L2_BCAST    BIT(10)
1820 #define MVPP2_PRS_RI_PPPOE_MASK    0x800
1821 #define MVPP2_PRS_RI_L3_PROTO_MASK    0x7000
1822 #define MVPP2_PRS_RI_L3_UN    ~(BIT(12) | BIT(13) | BIT(14))
1823 #define MVPP2_PRS_RI_L3_IP4    BIT(12)
1824 #define MVPP2_PRS_RI_L3_IP4_OPT    BIT(13)
1825 #define MVPP2_PRS_RI_L3_IP4_OTHER    (BIT(12) | BIT(13))
1826 #define MVPP2_PRS_RI_L3_IP6    BIT(14)
1827 #define MVPP2_PRS_RI_L3_IP6_EXT    (BIT(12) | BIT(14))
1828 #define MVPP2_PRS_RI_L3_ARP    (BIT(13) | BIT(14))
1829 #define MVPP2_PRS_RI_L3_ADDR_MASK    0x18000
1830 #define MVPP2_PRS_RI_L3_UCAST    ~(BIT(15) | BIT(16))
1831 #define MVPP2_PRS_RI_L3_MCAST    BIT(15)
1832 #define MVPP2_PRS_RI_L3_BCAST    (BIT(15) | BIT(16))
1833 #define MVPP2_PRS_RI_IP_FRAG_MASK    0x20000
1834 #define MVPP2_PRS_RI_UDF3_MASK    0x300000
1835 #define MVPP2_PRS_RI_UDF3_RX_SPECIAL    BIT(21)
1836 #define MVPP2_PRS_RI_L4_PROTO_MASK    0x1c00000
1837 #define MVPP2_PRS_RI_L4_TCP    BIT(22)
1838 #define MVPP2_PRS_RI_L4_UDP    BIT(23)
1839 #define MVPP2_PRS_RI_L4_OTHER    (BIT(22) | BIT(23))
1840 #define MVPP2_PRS_RI_UDF7_MASK    0x60000000
1841 #define MVPP2_PRS_RI_UDF7_IP6_LITE    BIT(29)
1842 #define MVPP2_PRS_RI_DROP_MASK    0x80000000
1843 
1844 /* Sram additional info bits assignment */
1845 #define MVPP2_PRS_IPV4_DIP_AI_BIT    BIT(0)
1846 #define MVPP2_PRS_IPV6_NO_EXT_AI_BIT    BIT(0)
1847 #define MVPP2_PRS_IPV6_EXT_AI_BIT    BIT(1)
1848 #define MVPP2_PRS_IPV6_EXT_AH_AI_BIT    BIT(2)
1849 #define MVPP2_PRS_IPV6_EXT_AH_LEN_AI_BIT    BIT(3)
1850 #define MVPP2_PRS_IPV6_EXT_AH_L4_AI_BIT    BIT(4)
1851 #define MVPP2_PRS_SINGLE_VLAN_AI    0
1852 #define MVPP2_PRS_DBL_VLAN_AI_BIT    BIT(7)
1853 
1854 /* DSA/EDSA type */
1855 #define MVPP2_PRS_TAGGED    1
1856 #define MVPP2_PRS_UNTAGGED    0
1857 #define MVPP2_PRS_EDSA    1
1858 #define MVPP2_PRS_DSA    0
1859 
1860 /* MAC entries, shadow udf */
1861 enum Mvpp2PrsUdf {
1862   MVPP2_PRS_UDF_MAC_DEF,
1863   MVPP2_PRS_UDF_MAC_RANGE,
1864   MVPP2_PRS_UDF_L2_DEF,
1865   MVPP2_PRS_UDF_L2_DEF_COPY,
1866   MVPP2_PRS_UDF_L2_USER,
1867 };
1868 
1869 /* Lookup ID */
1870 enum Mvpp2PrsLookup {
1871   MVPP2_PRS_LU_MH,
1872   MVPP2_PRS_LU_MAC,
1873   MVPP2_PRS_LU_DSA,
1874   MVPP2_PRS_LU_VLAN,
1875   MVPP2_PRS_LU_L2,
1876   MVPP2_PRS_LU_PPPOE,
1877   MVPP2_PRS_LU_IP4,
1878   MVPP2_PRS_LU_IP6,
1879   MVPP2_PRS_LU_FLOWS,
1880   MVPP2_PRS_LU_LAST,
1881 };
1882 
1883 /* L3 cast enum */
1884 enum Mvpp2PrsL3Cast {
1885   MVPP2_PRS_L3_UNI_CAST,
1886   MVPP2_PRS_L3_MULTI_CAST,
1887   MVPP2_PRS_L3_BROAD_CAST
1888 };
1889 
1890 /* Classifier constants */
1891 #define MVPP2_CLS_FLOWS_TBL_SIZE    512
1892 #define MVPP2_CLS_FLOWS_TBL_DATA_WORDS    3
1893 #define MVPP2_CLS_LKP_TBL_SIZE    64
1894 
1895 /* BM cookie (32 bits) definition */
1896 #define MVPP2_BM_COOKIE_POOL_OFFS    8
1897 #define MVPP2_BM_COOKIE_CPU_OFFS    24
1898 
1899 /*
1900  * The MVPP2_TX_DESC and MVPP2_RX_DESC structures describe the
1901  * layout of the transmit and reception DMA descriptors, and their
1902  * layout is therefore defined by the hardware design
1903  */
1904 #define MVPP2_TXD_L3_OFF_SHIFT    0
1905 #define MVPP2_TXD_IP_HLEN_SHIFT    8
1906 #define MVPP2_TXD_L4_CSUM_FRAG    BIT(13)
1907 #define MVPP2_TXD_L4_CSUM_NOT    BIT(14)
1908 #define MVPP2_TXD_IP_CSUM_DISABLE    BIT(15)
1909 #define MVPP2_TXD_PADDING_DISABLE    BIT(23)
1910 #define MVPP2_TXD_L4_UDP    BIT(24)
1911 #define MVPP2_TXD_L3_IP6    BIT(26)
1912 #define MVPP2_TXD_L_DESC    BIT(28)
1913 #define MVPP2_TXD_F_DESC    BIT(29)
1914 
1915 #define MVPP2_RXD_ERR_SUMMARY    BIT(15)
1916 #define MVPP2_RXD_ERR_CODE_MASK    (BIT(13) | BIT(14))
1917 #define MVPP2_RXD_ERR_CRC    0x0
1918 #define MVPP2_RXD_ERR_OVERRUN    BIT(13)
1919 #define MVPP2_RXD_ERR_RESOURCE    (BIT(13) | BIT(14))
1920 #define MVPP2_RXD_BM_POOL_ID_OFFS    16
1921 #define MVPP2_RXD_BM_POOL_ID_MASK    (BIT(16) | BIT(17) | BIT(18))
1922 #define MVPP2_RXD_HWF_SYNC    BIT(21)
1923 #define MVPP2_RXD_L4_CSUM_OK    BIT(22)
1924 #define MVPP2_RXD_IP4_HEADER_ERR    BIT(24)
1925 #define MVPP2_RXD_L4_TCP    BIT(25)
1926 #define MVPP2_RXD_L4_UDP    BIT(26)
1927 #define MVPP2_RXD_L3_IP4    BIT(28)
1928 #define MVPP2_RXD_L3_IP6    BIT(30)
1929 #define MVPP2_RXD_BUF_HDR    BIT(31)
1930 
1931 struct mvpp2_tx_desc {
1932   uint32_t command;   /* Options used by HW for packet transmitting.*/
1933   uint8_t  packet_offset; /* the offset from the buffer beginning */
1934   uint8_t  phys_txq;    /* destination queue ID     */
1935   uint16_t data_size;   /* data size of transmitted packet in bytes */
1936   uint64_t rsrvd_hw_cmd1; /* HwCmd (BM, PON, PNC) */
1937   uint64_t buf_phys_addr_hw_cmd2;
1938   uint64_t buf_cookie_bm_qset_hw_cmd3;
1939 };
1940 
1941 struct mvpp2_rx_desc {
1942   uint32_t status;    /* info about received packet   */
1943   uint16_t reserved1;   /* ParserInfo (for future use, PnC)  */
1944   uint16_t data_size;   /* size of received packet in bytes */
1945   uint16_t rsrvd_gem;   /* GemPortId (for future use, PON)  */
1946   uint16_t rsrvd_l4_csum;  /* CsumL4 (for future use, PnC)  */
1947   uint32_t rsrvd_timestamp;
1948   uint64_t buf_phys_addr_key_hash;
1949   uint64_t buf_cookie_bm_qset_cls_info;
1950 };
1951 
1952 union mvpp2_prs_tcam_entry {
1953   uint32_t word[MVPP2_PRS_TCAM_WORDS];
1954   uint8_t byte[MVPP2_PRS_TCAM_WORDS * 4];
1955 };
1956 
1957 union mvpp2_prs_sram_entry {
1958   uint32_t word[MVPP2_PRS_SRAM_WORDS];
1959   uint8_t byte[MVPP2_PRS_SRAM_WORDS * 4];
1960 };
1961 
1962 struct mvpp2_prs_entry {
1963  uint32_t index;
1964  union mvpp2_prs_tcam_entry tcam;
1965  union mvpp2_prs_sram_entry sram;
1966 };
1967 
1968 struct mvpp2_prs_shadow {
1969   int valid;
1970   int finish;
1971 
1972   /* Lookup ID */
1973   int32_t lu;
1974 
1975   /* User defined offset */
1976   int32_t udf;
1977 
1978   /* Result info */
1979   uint32_t ri;
1980   uint32_t ri_mask;
1981 };
1982 
1983 struct mvpp2_cls_flow_entry {
1984   uint32_t index;
1985   uint32_t data[MVPP2_CLS_FLOWS_TBL_DATA_WORDS];
1986 };
1987 
1988 struct mvpp2_cls_lookup_entry {
1989   uint32_t lkpid;
1990   uint32_t way;
1991   uint32_t data;
1992 };
1993 
1994 typedef struct {
1995   uint32_t NextBuffPhysAddr;
1996   uint32_t NextBuffVirtAddr;
1997   uint16_t ByteCount;
1998   uint16_t info;
1999   uint8_t  reserved1;   /* BmQset (for future use, BM)   */
2000 } MVPP2_BUFF_HDR;
2001 
2002 /* Buffer header info bits */
2003 #define MVPP2_B_HDR_INFO_MC_ID_MASK    0xfff
2004 #define MVPP2_B_HDR_INFO_MC_ID(info)    ((info) & MVPP2_B_HDR_INFO_MC_ID_MASK)
2005 #define MVPP2_B_HDR_INFO_LAST_OFFS    12
2006 #define MVPP2_B_HDR_INFO_LAST_MASK    BIT(12)
2007 #define MVPP2_B_HDR_INFO_IS_LAST(info)    ((info & MVPP2_B_HDR_INFO_LAST_MASK) >> MVPP2_B_HDR_INFO_LAST_OFFS)
2008 
2009 /* SerDes */
2010 #define MVPP2_SFI_LANE_COUNT          1
2011 
2012 /* Net Complex */
2013 enum MvNetcTopology {
2014   MV_NETC_GE_MAC0_RXAUI_L23 = BIT(0),
2015   MV_NETC_GE_MAC0_RXAUI_L45 = BIT(1),
2016   MV_NETC_GE_MAC0_XAUI = BIT(2),
2017   MV_NETC_GE_MAC2_SGMII = BIT(3),
2018   MV_NETC_GE_MAC3_SGMII = BIT(4),
2019   MV_NETC_GE_MAC3_RGMII = BIT(5),
2020 };
2021 
2022 enum MvNetcPhase {
2023   MV_NETC_FIRST_PHASE,
2024   MV_NETC_SECOND_PHASE,
2025 };
2026 
2027 enum MvNetcSgmiiXmiMode {
2028   MV_NETC_GBE_SGMII,
2029   MV_NETC_GBE_XMII,
2030 };
2031 
2032 enum MvNetcMiiMode {
2033   MV_NETC_GBE_RGMII,
2034   MV_NETC_GBE_MII,
2035 };
2036 
2037 enum MvNetcLanes {
2038   MV_NETC_LANE_23,
2039   MV_NETC_LANE_45,
2040 };
2041 
2042 /* Port related */
2043 enum MvReset {
2044   RESET,
2045   UNRESET
2046 };
2047 
2048 enum Mvpp2Command {
2049   MVPP2_START,    /* Start     */
2050   MVPP2_STOP,    /* Stop     */
2051   MVPP2_PAUSE,    /* Pause    */
2052   MVPP2_RESTART    /* Restart  */
2053 };
2054 
2055 enum MvPortDuplex {
2056   MV_PORT_DUPLEX_AN,
2057   MV_PORT_DUPLEX_HALF,
2058   MV_PORT_DUPLEX_FULL
2059 };
2060 
2061 /* L2 and L3 protocol macros */
2062 #define MV_IPPR_TCP                         0
2063 #define MV_IPPR_UDP                         1
2064 #define MV_IPPR_IPIP                        2
2065 #define MV_IPPR_ICMPV6                      3
2066 #define MV_IPPR_IGMP                        4
2067 #define MV_ETH_P_IP                         5
2068 #define MV_ETH_P_IPV6                       6
2069 #define MV_ETH_P_PPP_SES                    7
2070 #define MV_ETH_P_ARP                        8
2071 #define MV_ETH_P_8021Q                      9
2072 #define MV_ETH_P_8021AD                     10
2073 #define MV_ETH_P_EDSA                       11
2074 #define MV_PPP_IP                           12
2075 #define MV_PPP_IPV6                         13
2076 
2077 #endif /* __MVPP2_LIB_HW__ */
2078