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