1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /* Copyright (c) 2024 Hisilicon Limited. */
3 
4 #ifndef __HBG_REG_H
5 #define __HBG_REG_H
6 
7 /* DEV SPEC */
8 #define HBG_REG_SPEC_VALID_ADDR			0x0000
9 #define HBG_REG_EVENT_REQ_ADDR			0x0004
10 #define HBG_REG_MAC_ID_ADDR			0x0008
11 #define HBG_REG_PHY_ID_ADDR			0x000C
12 #define HBG_REG_MAC_ADDR_ADDR			0x0010
13 #define HBG_REG_MAC_ADDR_HIGH_ADDR		0x0014
14 #define HBG_REG_UC_MAC_NUM_ADDR			0x0018
15 #define HBG_REG_MDIO_FREQ_ADDR			0x0024
16 #define HBG_REG_MAX_MTU_ADDR			0x0028
17 #define HBG_REG_MIN_MTU_ADDR			0x002C
18 #define HBG_REG_TX_FIFO_NUM_ADDR		0x0030
19 #define HBG_REG_RX_FIFO_NUM_ADDR		0x0034
20 #define HBG_REG_VLAN_LAYERS_ADDR		0x0038
21 
22 /* MDIO */
23 #define HBG_REG_MDIO_BASE			0x8000
24 #define HBG_REG_MDIO_COMMAND_ADDR		(HBG_REG_MDIO_BASE + 0x0000)
25 #define HBG_REG_MDIO_COMMAND_CLK_SEL_EXP_B	BIT(17)
26 #define HBG_REG_MDIO_COMMAND_AUTO_SCAN_B	BIT(16)
27 #define HBG_REG_MDIO_COMMAND_CLK_SEL_B		BIT(15)
28 #define HBG_REG_MDIO_COMMAND_START_B		BIT(14)
29 #define HBG_REG_MDIO_COMMAND_ST_M		GENMASK(13, 12)
30 #define HBG_REG_MDIO_COMMAND_OP_M		GENMASK(11, 10)
31 #define HBG_REG_MDIO_COMMAND_PRTAD_M		GENMASK(9, 5)
32 #define HBG_REG_MDIO_COMMAND_DEVAD_M		GENMASK(4, 0)
33 #define HBG_REG_MDIO_ADDR_ADDR			(HBG_REG_MDIO_BASE + 0x0004)
34 #define HBG_REG_MDIO_WDATA_ADDR			(HBG_REG_MDIO_BASE + 0x0008)
35 #define HBG_REG_MDIO_WDATA_M			GENMASK(15, 0)
36 #define HBG_REG_MDIO_RDATA_ADDR			(HBG_REG_MDIO_BASE + 0x000C)
37 #define HBG_REG_MDIO_STA_ADDR			(HBG_REG_MDIO_BASE + 0x0010)
38 
39 /* GMAC */
40 #define HBG_REG_SGMII_BASE			0x10000
41 #define HBG_REG_DUPLEX_TYPE_ADDR		(HBG_REG_SGMII_BASE + 0x0008)
42 #define HBG_REG_FD_FC_TYPE_ADDR			(HBG_REG_SGMII_BASE + 0x000C)
43 #define HBG_REG_FC_TX_TIMER_ADDR		(HBG_REG_SGMII_BASE + 0x001C)
44 #define HBG_REG_FD_FC_ADDR_LOW_ADDR		(HBG_REG_SGMII_BASE + 0x0020)
45 #define HBG_REG_FD_FC_ADDR_HIGH_ADDR		(HBG_REG_SGMII_BASE + 0x0024)
46 #define HBG_REG_DUPLEX_B			BIT(0)
47 #define HBG_REG_MAX_FRAME_SIZE_ADDR		(HBG_REG_SGMII_BASE + 0x003C)
48 #define HBG_REG_PORT_MODE_ADDR			(HBG_REG_SGMII_BASE + 0x0040)
49 #define HBG_REG_PORT_MODE_M			GENMASK(3, 0)
50 #define HBG_REG_PORT_ENABLE_ADDR		(HBG_REG_SGMII_BASE + 0x0044)
51 #define HBG_REG_PORT_ENABLE_RX_B		BIT(1)
52 #define HBG_REG_PORT_ENABLE_TX_B		BIT(2)
53 #define HBG_REG_PAUSE_ENABLE_ADDR		(HBG_REG_SGMII_BASE + 0x0048)
54 #define HBG_REG_PAUSE_ENABLE_RX_B		BIT(0)
55 #define HBG_REG_PAUSE_ENABLE_TX_B		BIT(1)
56 #define HBG_REG_AN_NEG_STATE_ADDR		(HBG_REG_SGMII_BASE + 0x0058)
57 #define HBG_REG_TRANSMIT_CTRL_ADDR		(HBG_REG_SGMII_BASE + 0x0060)
58 #define HBG_REG_TRANSMIT_CTRL_PAD_EN_B		BIT(7)
59 #define HBG_REG_TRANSMIT_CTRL_CRC_ADD_B		BIT(6)
60 #define HBG_REG_TRANSMIT_CTRL_AN_EN_B		BIT(5)
61 #define HBG_REG_REC_FILT_CTRL_ADDR		(HBG_REG_SGMII_BASE + 0x0064)
62 #define HBG_REG_REC_FILT_CTRL_UC_MATCH_EN_B	BIT(0)
63 #define HBG_REG_REC_FILT_CTRL_PAUSE_FRM_PASS_B	BIT(4)
64 #define HBG_REG_LINE_LOOP_BACK_ADDR		(HBG_REG_SGMII_BASE + 0x01A8)
65 #define HBG_REG_CF_CRC_STRIP_ADDR		(HBG_REG_SGMII_BASE + 0x01B0)
66 #define HBG_REG_CF_CRC_STRIP_B			BIT(0)
67 #define HBG_REG_MODE_CHANGE_EN_ADDR		(HBG_REG_SGMII_BASE + 0x01B4)
68 #define HBG_REG_MODE_CHANGE_EN_B		BIT(0)
69 #define HBG_REG_LOOP_REG_ADDR			(HBG_REG_SGMII_BASE + 0x01DC)
70 #define HBG_REG_RECV_CTRL_ADDR			(HBG_REG_SGMII_BASE + 0x01E0)
71 #define HBG_REG_RECV_CTRL_STRIP_PAD_EN_B	BIT(3)
72 #define HBG_REG_VLAN_CODE_ADDR			(HBG_REG_SGMII_BASE + 0x01E8)
73 #define HBG_REG_STATION_ADDR_LOW_0_ADDR		(HBG_REG_SGMII_BASE + 0x0200)
74 #define HBG_REG_STATION_ADDR_HIGH_0_ADDR	(HBG_REG_SGMII_BASE + 0x0204)
75 #define HBG_REG_STATION_ADDR_LOW_1_ADDR		(HBG_REG_SGMII_BASE + 0x0208)
76 #define HBG_REG_STATION_ADDR_HIGH_1_ADDR	(HBG_REG_SGMII_BASE + 0x020C)
77 #define HBG_REG_STATION_ADDR_LOW_2_ADDR		(HBG_REG_SGMII_BASE + 0x0210)
78 #define HBG_REG_STATION_ADDR_HIGH_2_ADDR	(HBG_REG_SGMII_BASE + 0x0214)
79 #define HBG_REG_STATION_ADDR_LOW_3_ADDR		(HBG_REG_SGMII_BASE + 0x0218)
80 #define HBG_REG_STATION_ADDR_HIGH_3_ADDR	(HBG_REG_SGMII_BASE + 0x021C)
81 #define HBG_REG_STATION_ADDR_LOW_4_ADDR		(HBG_REG_SGMII_BASE + 0x0220)
82 #define HBG_REG_STATION_ADDR_HIGH_4_ADDR	(HBG_REG_SGMII_BASE + 0x0224)
83 #define HBG_REG_STATION_ADDR_LOW_5_ADDR		(HBG_REG_SGMII_BASE + 0x0228)
84 #define HBG_REG_STATION_ADDR_HIGH_5_ADDR	(HBG_REG_SGMII_BASE + 0x022C)
85 #define HBG_REG_STATION_ADDR_LOW_MSK_0		(HBG_REG_SGMII_BASE + 0x0230)
86 #define HBG_REG_STATION_ADDR_LOW_MSK_1		(HBG_REG_SGMII_BASE + 0x0238)
87 
88 /* PCU */
89 #define HBG_REG_TX_FIFO_THRSLD_ADDR		(HBG_REG_SGMII_BASE + 0x0420)
90 #define HBG_REG_RX_FIFO_THRSLD_ADDR		(HBG_REG_SGMII_BASE + 0x0424)
91 #define HBG_REG_CFG_FIFO_THRSLD_ADDR		(HBG_REG_SGMII_BASE + 0x0428)
92 #define HBG_REG_CF_INTRPT_MSK_ADDR		(HBG_REG_SGMII_BASE + 0x042C)
93 #define HBG_INT_MSK_WE_ERR_B			BIT(31)
94 #define HBG_INT_MSK_RBREQ_ERR_B			BIT(30)
95 #define HBG_INT_MSK_MAC_FIFO_ERR_B		BIT(29)
96 #define HBG_INT_MSK_RX_AHB_ERR_B		BIT(28)
97 #define HBG_INT_MSK_RX_DROP_B			BIT(26)
98 #define HBG_INT_MSK_TX_DROP_B			BIT(25)
99 #define HBG_INT_MSK_TXCFG_AVL_B			BIT(24)
100 #define HBG_INT_MSK_REL_BUF_ERR_B		BIT(23)
101 #define HBG_INT_MSK_RX_BUF_AVL_B		BIT(22)
102 #define HBG_INT_MSK_TX_AHB_ERR_B		BIT(21)
103 #define HBG_INT_MSK_SRAM_PARITY_ERR_B		BIT(20)
104 #define HBG_INT_MSK_MAC_APP_TX_FIFO_ERR_B	BIT(19)
105 #define HBG_INT_MSK_MAC_APP_RX_FIFO_ERR_B	BIT(18)
106 #define HBG_INT_MSK_MAC_PCS_TX_FIFO_ERR_B	BIT(17)
107 #define HBG_INT_MSK_MAC_PCS_RX_FIFO_ERR_B	BIT(16)
108 #define HBG_INT_MSK_MAC_MII_FIFO_ERR_B		BIT(15)
109 #define HBG_INT_MSK_TX_B			BIT(1) /* just used in driver */
110 #define HBG_INT_MSK_RX_B			BIT(0) /* just used in driver */
111 #define HBG_REG_CF_INTRPT_STAT_ADDR		(HBG_REG_SGMII_BASE + 0x0434)
112 #define HBG_REG_CF_INTRPT_CLR_ADDR		(HBG_REG_SGMII_BASE + 0x0438)
113 #define HBG_REG_TX_BUS_ERR_ADDR_ADDR		(HBG_REG_SGMII_BASE + 0x043C)
114 #define HBG_REG_RX_BUS_ERR_ADDR_ADDR		(HBG_REG_SGMII_BASE + 0x0440)
115 #define HBG_REG_MAX_FRAME_LEN_ADDR		(HBG_REG_SGMII_BASE + 0x0444)
116 #define HBG_REG_MAX_FRAME_LEN_M			GENMASK(15, 0)
117 #define HBG_REG_DEBUG_ST_MCH_ADDR		(HBG_REG_SGMII_BASE + 0x0450)
118 #define HBG_REG_FIFO_CURR_STATUS_ADDR		(HBG_REG_SGMII_BASE + 0x0454)
119 #define HBG_REG_FIFO_HIST_STATUS_ADDR		(HBG_REG_SGMII_BASE + 0x0458)
120 #define HBG_REG_CF_CFF_DATA_NUM_ADDR		(HBG_REG_SGMII_BASE + 0x045C)
121 #define HBG_REG_CF_CFF_DATA_NUM_ADDR_TX_M	GENMASK(8, 0)
122 #define HBG_REG_CF_CFF_DATA_NUM_ADDR_RX_M	GENMASK(24, 16)
123 #define HBG_REG_CF_TX_PAUSE_ADDR		(HBG_REG_SGMII_BASE + 0x0470)
124 #define HBG_REG_TX_CFF_ADDR_0_ADDR		(HBG_REG_SGMII_BASE + 0x0488)
125 #define HBG_REG_TX_CFF_ADDR_1_ADDR		(HBG_REG_SGMII_BASE + 0x048C)
126 #define HBG_REG_TX_CFF_ADDR_2_ADDR		(HBG_REG_SGMII_BASE + 0x0490)
127 #define HBG_REG_TX_CFF_ADDR_3_ADDR		(HBG_REG_SGMII_BASE + 0x0494)
128 #define HBG_REG_RX_CFF_ADDR_ADDR		(HBG_REG_SGMII_BASE + 0x04A0)
129 #define HBG_REG_RX_BUF_SIZE_ADDR		(HBG_REG_SGMII_BASE + 0x04E4)
130 #define HBG_REG_RX_BUF_SIZE_M			GENMASK(15, 0)
131 #define HBG_REG_BUS_CTRL_ADDR			(HBG_REG_SGMII_BASE + 0x04E8)
132 #define HBG_REG_BUS_CTRL_ENDIAN_M		GENMASK(2, 1)
133 #define HBG_REG_RX_CTRL_ADDR			(HBG_REG_SGMII_BASE + 0x04F0)
134 #define HBG_REG_RX_CTRL_RXBUF_1ST_SKIP_SIZE_M	GENMASK(31, 28)
135 #define HBG_REG_RX_CTRL_TIME_INF_EN_B		BIT(23)
136 #define HBG_REG_RX_CTRL_RX_ALIGN_NUM_M		GENMASK(18, 17)
137 #define HBG_REG_RX_CTRL_PORT_NUM		GENMASK(16, 13)
138 #define HBG_REG_RX_CTRL_RX_GET_ADDR_MODE_B	BIT(12)
139 #define HBG_REG_RX_CTRL_RXBUF_1ST_SKIP_SIZE2_M	GENMASK(3, 0)
140 #define HBG_REG_RX_PKT_MODE_ADDR		(HBG_REG_SGMII_BASE + 0x04F4)
141 #define HBG_REG_RX_PKT_MODE_PARSE_MODE_M	GENMASK(22, 21)
142 #define HBG_REG_DBG_ST0_ADDR			(HBG_REG_SGMII_BASE + 0x05E4)
143 #define HBG_REG_DBG_ST1_ADDR			(HBG_REG_SGMII_BASE + 0x05E8)
144 #define HBG_REG_DBG_ST2_ADDR			(HBG_REG_SGMII_BASE + 0x05EC)
145 #define HBG_REG_BUS_RST_EN_ADDR			(HBG_REG_SGMII_BASE + 0x0688)
146 #define HBG_REG_CF_IND_TXINT_MSK_ADDR		(HBG_REG_SGMII_BASE + 0x0694)
147 #define HBG_REG_IND_INTR_MASK_B			BIT(0)
148 #define HBG_REG_CF_IND_TXINT_STAT_ADDR		(HBG_REG_SGMII_BASE + 0x0698)
149 #define HBG_REG_CF_IND_TXINT_CLR_ADDR		(HBG_REG_SGMII_BASE + 0x069C)
150 #define HBG_REG_CF_IND_RXINT_MSK_ADDR		(HBG_REG_SGMII_BASE + 0x06a0)
151 #define HBG_REG_CF_IND_RXINT_STAT_ADDR		(HBG_REG_SGMII_BASE + 0x06a4)
152 #define HBG_REG_CF_IND_RXINT_CLR_ADDR		(HBG_REG_SGMII_BASE + 0x06a8)
153 
154 enum hbg_port_mode {
155 	/* 0x0 ~ 0x5 are reserved */
156 	HBG_PORT_MODE_SGMII_10M = 0x6,
157 	HBG_PORT_MODE_SGMII_100M = 0x7,
158 	HBG_PORT_MODE_SGMII_1000M = 0x8,
159 };
160 
161 struct hbg_tx_desc {
162 	u32 word0;
163 	u32 word1;
164 	u32 word2; /* pkt_addr */
165 	u32 word3; /* clear_addr */
166 };
167 
168 #define HBG_TX_DESC_W0_IP_OFF_M		GENMASK(30, 26)
169 #define HBG_TX_DESC_W0_l3_CS_B		BIT(2)
170 #define HBG_TX_DESC_W0_WB_B		BIT(1)
171 #define HBG_TX_DESC_W0_l4_CS_B		BIT(0)
172 #define HBG_TX_DESC_W1_SEND_LEN_M	GENMASK(19, 4)
173 
174 struct hbg_rx_desc {
175 	u32 word0;
176 	u32 word1; /* tag */
177 	u32 word2;
178 	u32 word3;
179 	u32 word4;
180 	u32 word5;
181 };
182 
183 #define HBG_RX_DESC_W2_PKT_LEN_M	GENMASK(31, 16)
184 
185 #endif
186