summaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/mellanox/mlxbf_gige/mlxbf_gige_regs.h
blob: 98a8681c21b9ca8dedf0884435608de55b5feda7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/* SPDX-License-Identifier: GPL-2.0-only OR BSD-3-Clause */

/* Header file for Mellanox BlueField GigE register defines
 *
 * Copyright (C) 2020-2021 NVIDIA CORPORATION & AFFILIATES
 */

#ifndef __MLXBF_GIGE_REGS_H__
#define __MLXBF_GIGE_REGS_H__

#include <linux/bitfield.h>

#define MLXBF_GIGE_VERSION                            0x0000
#define MLXBF_GIGE_VERSION_BF2                        0x0
#define MLXBF_GIGE_VERSION_BF3                        0x1
#define MLXBF_GIGE_STATUS                             0x0010
#define MLXBF_GIGE_STATUS_READY                       BIT(0)
#define MLXBF_GIGE_INT_STATUS                         0x0028
#define MLXBF_GIGE_INT_STATUS_RX_RECEIVE_PACKET       BIT(0)
#define MLXBF_GIGE_INT_STATUS_RX_MAC_ERROR            BIT(1)
#define MLXBF_GIGE_INT_STATUS_RX_TRN_ERROR            BIT(2)
#define MLXBF_GIGE_INT_STATUS_SW_ACCESS_ERROR         BIT(3)
#define MLXBF_GIGE_INT_STATUS_SW_CONFIG_ERROR         BIT(4)
#define MLXBF_GIGE_INT_STATUS_TX_PI_CI_EXCEED_WQ_SIZE BIT(5)
#define MLXBF_GIGE_INT_STATUS_TX_SMALL_FRAME_SIZE     BIT(6)
#define MLXBF_GIGE_INT_STATUS_TX_CHECKSUM_INPUTS      BIT(7)
#define MLXBF_GIGE_INT_STATUS_HW_ACCESS_ERROR         BIT(8)
#define MLXBF_GIGE_INT_EN                             0x0030
#define MLXBF_GIGE_INT_EN_RX_RECEIVE_PACKET           BIT(0)
#define MLXBF_GIGE_INT_EN_RX_MAC_ERROR                BIT(1)
#define MLXBF_GIGE_INT_EN_RX_TRN_ERROR                BIT(2)
#define MLXBF_GIGE_INT_EN_SW_ACCESS_ERROR             BIT(3)
#define MLXBF_GIGE_INT_EN_SW_CONFIG_ERROR             BIT(4)
#define MLXBF_GIGE_INT_EN_TX_PI_CI_EXCEED_WQ_SIZE     BIT(5)
#define MLXBF_GIGE_INT_EN_TX_SMALL_FRAME_SIZE         BIT(6)
#define MLXBF_GIGE_INT_EN_TX_CHECKSUM_INPUTS          BIT(7)
#define MLXBF_GIGE_INT_EN_HW_ACCESS_ERROR             BIT(8)
#define MLXBF_GIGE_INT_MASK                           0x0038
#define MLXBF_GIGE_INT_MASK_RX_RECEIVE_PACKET         BIT(0)
#define MLXBF_GIGE_CONTROL                            0x0040
#define MLXBF_GIGE_CONTROL_PORT_EN                    BIT(0)
#define MLXBF_GIGE_CONTROL_MAC_ID_RANGE_EN            BIT(1)
#define MLXBF_GIGE_CONTROL_EN_SPECIFIC_MAC            BIT(4)
#define MLXBF_GIGE_CONTROL_CLEAN_PORT_EN              BIT(31)
#define MLXBF_GIGE_RX_WQ_BASE                         0x0200
#define MLXBF_GIGE_RX_WQE_SIZE_LOG2                   0x0208
#define MLXBF_GIGE_RX_WQE_SIZE_LOG2_RESET_VAL         7
#define MLXBF_GIGE_RX_CQ_BASE                         0x0210
#define MLXBF_GIGE_TX_WQ_BASE                         0x0218
#define MLXBF_GIGE_TX_WQ_SIZE_LOG2                    0x0220
#define MLXBF_GIGE_TX_WQ_SIZE_LOG2_RESET_VAL          7
#define MLXBF_GIGE_TX_CI_UPDATE_ADDRESS               0x0228
#define MLXBF_GIGE_RX_WQE_PI                          0x0230
#define MLXBF_GIGE_TX_PRODUCER_INDEX                  0x0238
#define MLXBF_GIGE_RX_MAC_FILTER                      0x0240
#define MLXBF_GIGE_RX_MAC_FILTER_STRIDE               0x0008
#define MLXBF_GIGE_RX_DIN_DROP_COUNTER                0x0260
#define MLXBF_GIGE_TX_CONSUMER_INDEX                  0x0310
#define MLXBF_GIGE_TX_CONTROL                         0x0318
#define MLXBF_GIGE_TX_CONTROL_GRACEFUL_STOP           BIT(0)
#define MLXBF_GIGE_TX_STATUS                          0x0388
#define MLXBF_GIGE_TX_STATUS_DATA_FIFO_FULL           BIT(1)
#define MLXBF_GIGE_RX_MAC_FILTER_DMAC_RANGE_START     0x0520
#define MLXBF_GIGE_RX_MAC_FILTER_DMAC_RANGE_END       0x0528
#define MLXBF_GIGE_RX_MAC_FILTER_COUNT_DISC           0x0540
#define MLXBF_GIGE_RX_MAC_FILTER_COUNT_DISC_EN        BIT(0)
#define MLXBF_GIGE_RX_MAC_FILTER_COUNT_PASS           0x0548
#define MLXBF_GIGE_RX_MAC_FILTER_COUNT_PASS_EN        BIT(0)
#define MLXBF_GIGE_RX_PASS_COUNTER_ALL                0x0550
#define MLXBF_GIGE_RX_DISC_COUNTER_ALL                0x0560
#define MLXBF_GIGE_RX                                 0x0578
#define MLXBF_GIGE_RX_STRIP_CRC_EN                    BIT(1)
#define MLXBF_GIGE_RX_DMA                             0x0580
#define MLXBF_GIGE_RX_DMA_EN                          BIT(0)
#define MLXBF_GIGE_RX_CQE_PACKET_CI                   0x05b0
#define MLXBF_GIGE_MAC_CFG                            0x05e8

/* NOTE: MLXBF_GIGE_MAC_CFG is the last defined register offset,
 * so use that plus size of single register to derive total size
 */
#define MLXBF_GIGE_MMIO_REG_SZ                        (MLXBF_GIGE_MAC_CFG + 8)

#define MLXBF_GIGE_PLU_TX_REG0                        0x80
#define MLXBF_GIGE_PLU_TX_IPG_SIZE_MASK               GENMASK(11, 0)
#define MLXBF_GIGE_PLU_TX_SGMII_MODE_MASK             GENMASK(15, 14)

#define MLXBF_GIGE_PLU_RX_REG0                        0x10
#define MLXBF_GIGE_PLU_RX_SGMII_MODE_MASK             GENMASK(25, 24)

#define MLXBF_GIGE_1G_SGMII_MODE                      0x0
#define MLXBF_GIGE_10M_SGMII_MODE                     0x1
#define MLXBF_GIGE_100M_SGMII_MODE                    0x2

/* ipg_size default value for 1G is fixed by HW to 11 + End = 12.
 * So for 100M it is 12 * 10 - 1 = 119
 * For 10M, it is 12 * 100 - 1 = 1199
 */
#define MLXBF_GIGE_1G_IPG_SIZE                        11
#define MLXBF_GIGE_100M_IPG_SIZE                      119
#define MLXBF_GIGE_10M_IPG_SIZE                       1199

/* Offsets into OOB LLU block for pause frame counters */
#define MLXBF_GIGE_BF2_TX_PAUSE_CNT_HI                0x33d8
#define MLXBF_GIGE_BF2_TX_PAUSE_CNT_LO                0x33dc
#define MLXBF_GIGE_BF2_RX_PAUSE_CNT_HI                0x3210
#define MLXBF_GIGE_BF2_RX_PAUSE_CNT_LO                0x3214

#define MLXBF_GIGE_BF3_TX_PAUSE_CNT_HI                0x3a88
#define MLXBF_GIGE_BF3_TX_PAUSE_CNT_LO                0x3a8c
#define MLXBF_GIGE_BF3_RX_PAUSE_CNT_HI                0x38c0
#define MLXBF_GIGE_BF3_RX_PAUSE_CNT_LO                0x38c4

#define MLXBF_GIGE_TX_PAUSE_CNT_HI ((priv->hw_version == MLXBF_GIGE_VERSION_BF2) ? \
				    MLXBF_GIGE_BF2_TX_PAUSE_CNT_HI :    \
				    MLXBF_GIGE_BF3_TX_PAUSE_CNT_HI)
#define MLXBF_GIGE_TX_PAUSE_CNT_LO ((priv->hw_version == MLXBF_GIGE_VERSION_BF2) ? \
				    MLXBF_GIGE_BF2_TX_PAUSE_CNT_LO : \
				    MLXBF_GIGE_BF3_TX_PAUSE_CNT_LO)
#define MLXBF_GIGE_RX_PAUSE_CNT_HI ((priv->hw_version == MLXBF_GIGE_VERSION_BF2) ? \
				    MLXBF_GIGE_BF2_RX_PAUSE_CNT_HI : \
				    MLXBF_GIGE_BF3_RX_PAUSE_CNT_HI)
#define MLXBF_GIGE_RX_PAUSE_CNT_LO ((priv->hw_version == MLXBF_GIGE_VERSION_BF2) ? \
				    MLXBF_GIGE_BF2_RX_PAUSE_CNT_LO : \
				    MLXBF_GIGE_BF3_RX_PAUSE_CNT_LO)

#define MLXBF_GIGE_BF2_LLU_GENERAL_CONFIG             0x2110
#define MLXBF_GIGE_BF3_LLU_GENERAL_CONFIG             0x2030

#define MLXBF_GIGE_BF2_LLU_COUNTERS_EN                BIT(0)
#define MLXBF_GIGE_BF3_LLU_COUNTERS_EN                BIT(4)

#endif /* !defined(__MLXBF_GIGE_REGS_H__) */