xref: /linux/drivers/net/ethernet/hisilicon/hibmcge/hbg_reg.h (revision 60675d4ca1ef0857e44eba5849b74a3a998d0c0f)
1fc1992baSJijie Shao /* SPDX-License-Identifier: GPL-2.0+ */
2fc1992baSJijie Shao /* Copyright (c) 2024 Hisilicon Limited. */
3fc1992baSJijie Shao 
4fc1992baSJijie Shao #ifndef __HBG_REG_H
5fc1992baSJijie Shao #define __HBG_REG_H
6fc1992baSJijie Shao 
7fc1992baSJijie Shao /* DEV SPEC */
8fc1992baSJijie Shao #define HBG_REG_SPEC_VALID_ADDR			0x0000
9fc1992baSJijie Shao #define HBG_REG_EVENT_REQ_ADDR			0x0004
10fc1992baSJijie Shao #define HBG_REG_MAC_ID_ADDR			0x0008
11fc1992baSJijie Shao #define HBG_REG_PHY_ID_ADDR			0x000C
12fc1992baSJijie Shao #define HBG_REG_MAC_ADDR_ADDR			0x0010
13fc1992baSJijie Shao #define HBG_REG_MDIO_FREQ_ADDR			0x0024
14fc1992baSJijie Shao #define HBG_REG_MAX_MTU_ADDR			0x0028
15fc1992baSJijie Shao #define HBG_REG_MIN_MTU_ADDR			0x002C
16fc1992baSJijie Shao #define HBG_REG_TX_FIFO_NUM_ADDR		0x0030
17fc1992baSJijie Shao #define HBG_REG_RX_FIFO_NUM_ADDR		0x0034
18fc1992baSJijie Shao #define HBG_REG_VLAN_LAYERS_ADDR		0x0038
19fc1992baSJijie Shao 
20a239b2b1SJijie Shao /* MDIO */
21a239b2b1SJijie Shao #define HBG_REG_MDIO_BASE			0x8000
22a239b2b1SJijie Shao #define HBG_REG_MDIO_COMMAND_ADDR		(HBG_REG_MDIO_BASE + 0x0000)
23a239b2b1SJijie Shao #define HBG_REG_MDIO_COMMAND_CLK_SEL_EXP_B	BIT(17)
24a239b2b1SJijie Shao #define HBG_REG_MDIO_COMMAND_AUTO_SCAN_B	BIT(16)
25a239b2b1SJijie Shao #define HBG_REG_MDIO_COMMAND_CLK_SEL_B		BIT(15)
26a239b2b1SJijie Shao #define HBG_REG_MDIO_COMMAND_START_B		BIT(14)
27a239b2b1SJijie Shao #define HBG_REG_MDIO_COMMAND_ST_M		GENMASK(13, 12)
28a239b2b1SJijie Shao #define HBG_REG_MDIO_COMMAND_OP_M		GENMASK(11, 10)
29a239b2b1SJijie Shao #define HBG_REG_MDIO_COMMAND_PRTAD_M		GENMASK(9, 5)
30a239b2b1SJijie Shao #define HBG_REG_MDIO_COMMAND_DEVAD_M		GENMASK(4, 0)
31a239b2b1SJijie Shao #define HBG_REG_MDIO_WDATA_ADDR			(HBG_REG_MDIO_BASE + 0x0008)
32a239b2b1SJijie Shao #define HBG_REG_MDIO_WDATA_M			GENMASK(15, 0)
33a239b2b1SJijie Shao #define HBG_REG_MDIO_RDATA_ADDR			(HBG_REG_MDIO_BASE + 0x000C)
34a239b2b1SJijie Shao #define HBG_REG_MDIO_STA_ADDR			(HBG_REG_MDIO_BASE + 0x0010)
35a239b2b1SJijie Shao 
36a239b2b1SJijie Shao /* GMAC */
37a239b2b1SJijie Shao #define HBG_REG_SGMII_BASE			0x10000
38a239b2b1SJijie Shao #define HBG_REG_DUPLEX_TYPE_ADDR		(HBG_REG_SGMII_BASE + 0x0008)
39a239b2b1SJijie Shao #define HBG_REG_DUPLEX_B			BIT(0)
40ff4edac6SJijie Shao #define HBG_REG_MAX_FRAME_SIZE_ADDR		(HBG_REG_SGMII_BASE + 0x003C)
41a239b2b1SJijie Shao #define HBG_REG_PORT_MODE_ADDR			(HBG_REG_SGMII_BASE + 0x0040)
42a239b2b1SJijie Shao #define HBG_REG_PORT_MODE_M			GENMASK(3, 0)
43ff4edac6SJijie Shao #define HBG_REG_PORT_ENABLE_ADDR		(HBG_REG_SGMII_BASE + 0x0044)
44ff4edac6SJijie Shao #define HBG_REG_PORT_ENABLE_RX_B		BIT(1)
45ff4edac6SJijie Shao #define HBG_REG_PORT_ENABLE_TX_B		BIT(2)
46a239b2b1SJijie Shao #define HBG_REG_TRANSMIT_CTRL_ADDR		(HBG_REG_SGMII_BASE + 0x0060)
47a239b2b1SJijie Shao #define HBG_REG_TRANSMIT_CTRL_PAD_EN_B		BIT(7)
48a239b2b1SJijie Shao #define HBG_REG_TRANSMIT_CTRL_CRC_ADD_B		BIT(6)
49a239b2b1SJijie Shao #define HBG_REG_TRANSMIT_CTRL_AN_EN_B		BIT(5)
50a239b2b1SJijie Shao #define HBG_REG_CF_CRC_STRIP_ADDR		(HBG_REG_SGMII_BASE + 0x01B0)
51a239b2b1SJijie Shao #define HBG_REG_CF_CRC_STRIP_B			BIT(0)
52a239b2b1SJijie Shao #define HBG_REG_MODE_CHANGE_EN_ADDR		(HBG_REG_SGMII_BASE + 0x01B4)
53a239b2b1SJijie Shao #define HBG_REG_MODE_CHANGE_EN_B		BIT(0)
54a239b2b1SJijie Shao #define HBG_REG_RECV_CTRL_ADDR			(HBG_REG_SGMII_BASE + 0x01E0)
55a239b2b1SJijie Shao #define HBG_REG_RECV_CTRL_STRIP_PAD_EN_B	BIT(3)
56ff4edac6SJijie Shao #define HBG_REG_STATION_ADDR_LOW_2_ADDR		(HBG_REG_SGMII_BASE + 0x0210)
57ff4edac6SJijie Shao #define HBG_REG_STATION_ADDR_HIGH_2_ADDR	(HBG_REG_SGMII_BASE + 0x0214)
58a239b2b1SJijie Shao 
59a239b2b1SJijie Shao /* PCU */
604d089035SJijie Shao #define HBG_REG_CF_INTRPT_MSK_ADDR		(HBG_REG_SGMII_BASE + 0x042C)
614d089035SJijie Shao #define HBG_INT_MSK_WE_ERR_B			BIT(31)
624d089035SJijie Shao #define HBG_INT_MSK_RBREQ_ERR_B			BIT(30)
634d089035SJijie Shao #define HBG_INT_MSK_MAC_FIFO_ERR_B		BIT(29)
644d089035SJijie Shao #define HBG_INT_MSK_RX_AHB_ERR_B		BIT(28)
654d089035SJijie Shao #define HBG_INT_MSK_RX_DROP_B			BIT(26)
664d089035SJijie Shao #define HBG_INT_MSK_TX_DROP_B			BIT(25)
674d089035SJijie Shao #define HBG_INT_MSK_TXCFG_AVL_B			BIT(24)
684d089035SJijie Shao #define HBG_INT_MSK_REL_BUF_ERR_B		BIT(23)
694d089035SJijie Shao #define HBG_INT_MSK_RX_BUF_AVL_B		BIT(22)
704d089035SJijie Shao #define HBG_INT_MSK_TX_AHB_ERR_B		BIT(21)
714d089035SJijie Shao #define HBG_INT_MSK_SRAM_PARITY_ERR_B		BIT(20)
724d089035SJijie Shao #define HBG_INT_MSK_MAC_APP_TX_FIFO_ERR_B	BIT(19)
734d089035SJijie Shao #define HBG_INT_MSK_MAC_APP_RX_FIFO_ERR_B	BIT(18)
744d089035SJijie Shao #define HBG_INT_MSK_MAC_PCS_TX_FIFO_ERR_B	BIT(17)
754d089035SJijie Shao #define HBG_INT_MSK_MAC_PCS_RX_FIFO_ERR_B	BIT(16)
764d089035SJijie Shao #define HBG_INT_MSK_MAC_MII_FIFO_ERR_B		BIT(15)
774d089035SJijie Shao #define HBG_INT_MSK_TX_B			BIT(1) /* just used in driver */
784d089035SJijie Shao #define HBG_INT_MSK_RX_B			BIT(0) /* just used in driver */
794d089035SJijie Shao #define HBG_REG_CF_INTRPT_STAT_ADDR		(HBG_REG_SGMII_BASE + 0x0434)
804d089035SJijie Shao #define HBG_REG_CF_INTRPT_CLR_ADDR		(HBG_REG_SGMII_BASE + 0x0438)
81ff4edac6SJijie Shao #define HBG_REG_MAX_FRAME_LEN_ADDR		(HBG_REG_SGMII_BASE + 0x0444)
82ff4edac6SJijie Shao #define HBG_REG_MAX_FRAME_LEN_M			GENMASK(15, 0)
8340735e75SJijie Shao #define HBG_REG_CF_CFF_DATA_NUM_ADDR		(HBG_REG_SGMII_BASE + 0x045C)
8440735e75SJijie Shao #define HBG_REG_CF_CFF_DATA_NUM_ADDR_TX_M	GENMASK(8, 0)
85*f72e2559SJijie Shao #define HBG_REG_CF_CFF_DATA_NUM_ADDR_RX_M	GENMASK(24, 16)
8640735e75SJijie Shao #define HBG_REG_TX_CFF_ADDR_0_ADDR		(HBG_REG_SGMII_BASE + 0x0488)
8740735e75SJijie Shao #define HBG_REG_TX_CFF_ADDR_1_ADDR		(HBG_REG_SGMII_BASE + 0x048C)
8840735e75SJijie Shao #define HBG_REG_TX_CFF_ADDR_2_ADDR		(HBG_REG_SGMII_BASE + 0x0490)
8940735e75SJijie Shao #define HBG_REG_TX_CFF_ADDR_3_ADDR		(HBG_REG_SGMII_BASE + 0x0494)
90*f72e2559SJijie Shao #define HBG_REG_RX_CFF_ADDR_ADDR		(HBG_REG_SGMII_BASE + 0x04A0)
91a239b2b1SJijie Shao #define HBG_REG_RX_BUF_SIZE_ADDR		(HBG_REG_SGMII_BASE + 0x04E4)
92a239b2b1SJijie Shao #define HBG_REG_RX_BUF_SIZE_M			GENMASK(15, 0)
93a239b2b1SJijie Shao #define HBG_REG_BUS_CTRL_ADDR			(HBG_REG_SGMII_BASE + 0x04E8)
94a239b2b1SJijie Shao #define HBG_REG_BUS_CTRL_ENDIAN_M		GENMASK(2, 1)
95a239b2b1SJijie Shao #define HBG_REG_RX_CTRL_ADDR			(HBG_REG_SGMII_BASE + 0x04F0)
96a239b2b1SJijie Shao #define HBG_REG_RX_CTRL_RXBUF_1ST_SKIP_SIZE_M	GENMASK(31, 28)
97a239b2b1SJijie Shao #define HBG_REG_RX_CTRL_TIME_INF_EN_B		BIT(23)
98a239b2b1SJijie Shao #define HBG_REG_RX_CTRL_RX_ALIGN_NUM_M		GENMASK(18, 17)
99a239b2b1SJijie Shao #define HBG_REG_RX_CTRL_PORT_NUM		GENMASK(16, 13)
100a239b2b1SJijie Shao #define HBG_REG_RX_CTRL_RX_GET_ADDR_MODE_B	BIT(12)
101a239b2b1SJijie Shao #define HBG_REG_RX_CTRL_RXBUF_1ST_SKIP_SIZE2_M	GENMASK(3, 0)
102a239b2b1SJijie Shao #define HBG_REG_RX_PKT_MODE_ADDR		(HBG_REG_SGMII_BASE + 0x04F4)
103a239b2b1SJijie Shao #define HBG_REG_RX_PKT_MODE_PARSE_MODE_M	GENMASK(22, 21)
1044d089035SJijie Shao #define HBG_REG_CF_IND_TXINT_MSK_ADDR		(HBG_REG_SGMII_BASE + 0x0694)
105ff4edac6SJijie Shao #define HBG_REG_IND_INTR_MASK_B			BIT(0)
1064d089035SJijie Shao #define HBG_REG_CF_IND_TXINT_STAT_ADDR		(HBG_REG_SGMII_BASE + 0x0698)
1074d089035SJijie Shao #define HBG_REG_CF_IND_TXINT_CLR_ADDR		(HBG_REG_SGMII_BASE + 0x069C)
1084d089035SJijie Shao #define HBG_REG_CF_IND_RXINT_MSK_ADDR		(HBG_REG_SGMII_BASE + 0x06a0)
1094d089035SJijie Shao #define HBG_REG_CF_IND_RXINT_STAT_ADDR		(HBG_REG_SGMII_BASE + 0x06a4)
1104d089035SJijie Shao #define HBG_REG_CF_IND_RXINT_CLR_ADDR		(HBG_REG_SGMII_BASE + 0x06a8)
111a239b2b1SJijie Shao 
112a239b2b1SJijie Shao enum hbg_port_mode {
113a239b2b1SJijie Shao 	/* 0x0 ~ 0x5 are reserved */
114a239b2b1SJijie Shao 	HBG_PORT_MODE_SGMII_10M = 0x6,
115a239b2b1SJijie Shao 	HBG_PORT_MODE_SGMII_100M = 0x7,
116a239b2b1SJijie Shao 	HBG_PORT_MODE_SGMII_1000M = 0x8,
117a239b2b1SJijie Shao };
118a239b2b1SJijie Shao 
11940735e75SJijie Shao struct hbg_tx_desc {
12040735e75SJijie Shao 	u32 word0;
12140735e75SJijie Shao 	u32 word1;
12240735e75SJijie Shao 	u32 word2; /* pkt_addr */
12340735e75SJijie Shao 	u32 word3; /* clear_addr */
12440735e75SJijie Shao };
12540735e75SJijie Shao 
12640735e75SJijie Shao #define HBG_TX_DESC_W0_IP_OFF_M		GENMASK(30, 26)
12740735e75SJijie Shao #define HBG_TX_DESC_W0_l3_CS_B		BIT(2)
12840735e75SJijie Shao #define HBG_TX_DESC_W0_WB_B		BIT(1)
12940735e75SJijie Shao #define HBG_TX_DESC_W0_l4_CS_B		BIT(0)
13040735e75SJijie Shao #define HBG_TX_DESC_W1_SEND_LEN_M	GENMASK(19, 4)
13140735e75SJijie Shao 
132*f72e2559SJijie Shao struct hbg_rx_desc {
133*f72e2559SJijie Shao 	u32 word0;
134*f72e2559SJijie Shao 	u32 word1; /* tag */
135*f72e2559SJijie Shao 	u32 word2;
136*f72e2559SJijie Shao 	u32 word3;
137*f72e2559SJijie Shao 	u32 word4;
138*f72e2559SJijie Shao 	u32 word5;
139*f72e2559SJijie Shao };
140*f72e2559SJijie Shao 
141*f72e2559SJijie Shao #define HBG_RX_DESC_W2_PKT_LEN_M	GENMASK(31, 16)
142*f72e2559SJijie Shao 
143fc1992baSJijie Shao #endif
144