1f92e1869SDavid Thompson /* SPDX-License-Identifier: GPL-2.0-only OR BSD-3-Clause */
2f92e1869SDavid Thompson 
3f92e1869SDavid Thompson /* Header file for Mellanox BlueField GigE register defines
4f92e1869SDavid Thompson  *
5f92e1869SDavid Thompson  * Copyright (C) 2020-2021 NVIDIA CORPORATION & AFFILIATES
6f92e1869SDavid Thompson  */
7f92e1869SDavid Thompson 
8f92e1869SDavid Thompson #ifndef __MLXBF_GIGE_REGS_H__
9f92e1869SDavid Thompson #define __MLXBF_GIGE_REGS_H__
10f92e1869SDavid Thompson 
11*20d03d4dSDavid Thompson #include <linux/bitfield.h>
12*20d03d4dSDavid Thompson 
133a1a274eSDavid Thompson #define MLXBF_GIGE_VERSION                            0x0000
143a1a274eSDavid Thompson #define MLXBF_GIGE_VERSION_BF2                        0x0
152321d69fSDavid Thompson #define MLXBF_GIGE_VERSION_BF3                        0x1
16f92e1869SDavid Thompson #define MLXBF_GIGE_STATUS                             0x0010
17f92e1869SDavid Thompson #define MLXBF_GIGE_STATUS_READY                       BIT(0)
18f92e1869SDavid Thompson #define MLXBF_GIGE_INT_STATUS                         0x0028
19f92e1869SDavid Thompson #define MLXBF_GIGE_INT_STATUS_RX_RECEIVE_PACKET       BIT(0)
20f92e1869SDavid Thompson #define MLXBF_GIGE_INT_STATUS_RX_MAC_ERROR            BIT(1)
21f92e1869SDavid Thompson #define MLXBF_GIGE_INT_STATUS_RX_TRN_ERROR            BIT(2)
22f92e1869SDavid Thompson #define MLXBF_GIGE_INT_STATUS_SW_ACCESS_ERROR         BIT(3)
23f92e1869SDavid Thompson #define MLXBF_GIGE_INT_STATUS_SW_CONFIG_ERROR         BIT(4)
24f92e1869SDavid Thompson #define MLXBF_GIGE_INT_STATUS_TX_PI_CI_EXCEED_WQ_SIZE BIT(5)
25f92e1869SDavid Thompson #define MLXBF_GIGE_INT_STATUS_TX_SMALL_FRAME_SIZE     BIT(6)
26f92e1869SDavid Thompson #define MLXBF_GIGE_INT_STATUS_TX_CHECKSUM_INPUTS      BIT(7)
27f92e1869SDavid Thompson #define MLXBF_GIGE_INT_STATUS_HW_ACCESS_ERROR         BIT(8)
28f92e1869SDavid Thompson #define MLXBF_GIGE_INT_EN                             0x0030
29f92e1869SDavid Thompson #define MLXBF_GIGE_INT_EN_RX_RECEIVE_PACKET           BIT(0)
30f92e1869SDavid Thompson #define MLXBF_GIGE_INT_EN_RX_MAC_ERROR                BIT(1)
31f92e1869SDavid Thompson #define MLXBF_GIGE_INT_EN_RX_TRN_ERROR                BIT(2)
32f92e1869SDavid Thompson #define MLXBF_GIGE_INT_EN_SW_ACCESS_ERROR             BIT(3)
33f92e1869SDavid Thompson #define MLXBF_GIGE_INT_EN_SW_CONFIG_ERROR             BIT(4)
34f92e1869SDavid Thompson #define MLXBF_GIGE_INT_EN_TX_PI_CI_EXCEED_WQ_SIZE     BIT(5)
35f92e1869SDavid Thompson #define MLXBF_GIGE_INT_EN_TX_SMALL_FRAME_SIZE         BIT(6)
36f92e1869SDavid Thompson #define MLXBF_GIGE_INT_EN_TX_CHECKSUM_INPUTS          BIT(7)
37f92e1869SDavid Thompson #define MLXBF_GIGE_INT_EN_HW_ACCESS_ERROR             BIT(8)
38f92e1869SDavid Thompson #define MLXBF_GIGE_INT_MASK                           0x0038
39f92e1869SDavid Thompson #define MLXBF_GIGE_INT_MASK_RX_RECEIVE_PACKET         BIT(0)
40f92e1869SDavid Thompson #define MLXBF_GIGE_CONTROL                            0x0040
41f92e1869SDavid Thompson #define MLXBF_GIGE_CONTROL_PORT_EN                    BIT(0)
42f92e1869SDavid Thompson #define MLXBF_GIGE_CONTROL_MAC_ID_RANGE_EN            BIT(1)
43f92e1869SDavid Thompson #define MLXBF_GIGE_CONTROL_EN_SPECIFIC_MAC            BIT(4)
44f92e1869SDavid Thompson #define MLXBF_GIGE_CONTROL_CLEAN_PORT_EN              BIT(31)
45f92e1869SDavid Thompson #define MLXBF_GIGE_RX_WQ_BASE                         0x0200
46f92e1869SDavid Thompson #define MLXBF_GIGE_RX_WQE_SIZE_LOG2                   0x0208
47f92e1869SDavid Thompson #define MLXBF_GIGE_RX_WQE_SIZE_LOG2_RESET_VAL         7
48f92e1869SDavid Thompson #define MLXBF_GIGE_RX_CQ_BASE                         0x0210
49f92e1869SDavid Thompson #define MLXBF_GIGE_TX_WQ_BASE                         0x0218
50f92e1869SDavid Thompson #define MLXBF_GIGE_TX_WQ_SIZE_LOG2                    0x0220
51f92e1869SDavid Thompson #define MLXBF_GIGE_TX_WQ_SIZE_LOG2_RESET_VAL          7
52f92e1869SDavid Thompson #define MLXBF_GIGE_TX_CI_UPDATE_ADDRESS               0x0228
53f92e1869SDavid Thompson #define MLXBF_GIGE_RX_WQE_PI                          0x0230
54f92e1869SDavid Thompson #define MLXBF_GIGE_TX_PRODUCER_INDEX                  0x0238
55f92e1869SDavid Thompson #define MLXBF_GIGE_RX_MAC_FILTER                      0x0240
56f92e1869SDavid Thompson #define MLXBF_GIGE_RX_MAC_FILTER_STRIDE               0x0008
57f92e1869SDavid Thompson #define MLXBF_GIGE_RX_DIN_DROP_COUNTER                0x0260
58f92e1869SDavid Thompson #define MLXBF_GIGE_TX_CONSUMER_INDEX                  0x0310
59f92e1869SDavid Thompson #define MLXBF_GIGE_TX_CONTROL                         0x0318
60f92e1869SDavid Thompson #define MLXBF_GIGE_TX_CONTROL_GRACEFUL_STOP           BIT(0)
61f92e1869SDavid Thompson #define MLXBF_GIGE_TX_STATUS                          0x0388
62f92e1869SDavid Thompson #define MLXBF_GIGE_TX_STATUS_DATA_FIFO_FULL           BIT(1)
63f92e1869SDavid Thompson #define MLXBF_GIGE_RX_MAC_FILTER_DMAC_RANGE_START     0x0520
64f92e1869SDavid Thompson #define MLXBF_GIGE_RX_MAC_FILTER_DMAC_RANGE_END       0x0528
65f92e1869SDavid Thompson #define MLXBF_GIGE_RX_MAC_FILTER_COUNT_DISC           0x0540
66f92e1869SDavid Thompson #define MLXBF_GIGE_RX_MAC_FILTER_COUNT_DISC_EN        BIT(0)
67f92e1869SDavid Thompson #define MLXBF_GIGE_RX_MAC_FILTER_COUNT_PASS           0x0548
68f92e1869SDavid Thompson #define MLXBF_GIGE_RX_MAC_FILTER_COUNT_PASS_EN        BIT(0)
69f92e1869SDavid Thompson #define MLXBF_GIGE_RX_PASS_COUNTER_ALL                0x0550
70f92e1869SDavid Thompson #define MLXBF_GIGE_RX_DISC_COUNTER_ALL                0x0560
71f92e1869SDavid Thompson #define MLXBF_GIGE_RX                                 0x0578
72f92e1869SDavid Thompson #define MLXBF_GIGE_RX_STRIP_CRC_EN                    BIT(1)
73f92e1869SDavid Thompson #define MLXBF_GIGE_RX_DMA                             0x0580
74f92e1869SDavid Thompson #define MLXBF_GIGE_RX_DMA_EN                          BIT(0)
75f92e1869SDavid Thompson #define MLXBF_GIGE_RX_CQE_PACKET_CI                   0x05b0
76f92e1869SDavid Thompson #define MLXBF_GIGE_MAC_CFG                            0x05e8
77f92e1869SDavid Thompson 
78f92e1869SDavid Thompson /* NOTE: MLXBF_GIGE_MAC_CFG is the last defined register offset,
79f92e1869SDavid Thompson  * so use that plus size of single register to derive total size
80f92e1869SDavid Thompson  */
81f92e1869SDavid Thompson #define MLXBF_GIGE_MMIO_REG_SZ                        (MLXBF_GIGE_MAC_CFG + 8)
82f92e1869SDavid Thompson 
83*20d03d4dSDavid Thompson #define MLXBF_GIGE_PLU_TX_REG0                        0x80
84*20d03d4dSDavid Thompson #define MLXBF_GIGE_PLU_TX_IPG_SIZE_MASK               GENMASK(11, 0)
85*20d03d4dSDavid Thompson #define MLXBF_GIGE_PLU_TX_SGMII_MODE_MASK             GENMASK(15, 14)
86*20d03d4dSDavid Thompson 
87*20d03d4dSDavid Thompson #define MLXBF_GIGE_PLU_RX_REG0                        0x10
88*20d03d4dSDavid Thompson #define MLXBF_GIGE_PLU_RX_SGMII_MODE_MASK             GENMASK(25, 24)
89*20d03d4dSDavid Thompson 
90*20d03d4dSDavid Thompson #define MLXBF_GIGE_1G_SGMII_MODE                      0x0
91*20d03d4dSDavid Thompson #define MLXBF_GIGE_10M_SGMII_MODE                     0x1
92*20d03d4dSDavid Thompson #define MLXBF_GIGE_100M_SGMII_MODE                    0x2
93*20d03d4dSDavid Thompson 
94*20d03d4dSDavid Thompson /* ipg_size default value for 1G is fixed by HW to 11 + End = 12.
95*20d03d4dSDavid Thompson  * So for 100M it is 12 * 10 - 1 = 119
96*20d03d4dSDavid Thompson  * For 10M, it is 12 * 100 - 1 = 1199
97*20d03d4dSDavid Thompson  */
98*20d03d4dSDavid Thompson #define MLXBF_GIGE_1G_IPG_SIZE                        11
99*20d03d4dSDavid Thompson #define MLXBF_GIGE_100M_IPG_SIZE                      119
100*20d03d4dSDavid Thompson #define MLXBF_GIGE_10M_IPG_SIZE                       1199
101*20d03d4dSDavid Thompson 
102f92e1869SDavid Thompson #endif /* !defined(__MLXBF_GIGE_REGS_H__) */
103