1*fd3040b9SWells Lu /* SPDX-License-Identifier: GPL-2.0 */ 2*fd3040b9SWells Lu /* Copyright Sunplus Technology Co., Ltd. 3*fd3040b9SWells Lu * All rights reserved. 4*fd3040b9SWells Lu */ 5*fd3040b9SWells Lu 6*fd3040b9SWells Lu #ifndef __SPL2SW_DEFINE_H__ 7*fd3040b9SWells Lu #define __SPL2SW_DEFINE_H__ 8*fd3040b9SWells Lu 9*fd3040b9SWells Lu #define MAX_NETDEV_NUM 2 /* Maximum # of net-device */ 10*fd3040b9SWells Lu 11*fd3040b9SWells Lu /* Interrupt status */ 12*fd3040b9SWells Lu #define MAC_INT_DAISY_MODE_CHG BIT(31) /* Daisy Mode Change */ 13*fd3040b9SWells Lu #define MAC_INT_IP_CHKSUM_ERR BIT(23) /* IP Checksum Append Error */ 14*fd3040b9SWells Lu #define MAC_INT_WDOG_TIMER1_EXP BIT(22) /* Watchdog Timer1 Expired */ 15*fd3040b9SWells Lu #define MAC_INT_WDOG_TIMER0_EXP BIT(21) /* Watchdog Timer0 Expired */ 16*fd3040b9SWells Lu #define MAC_INT_INTRUDER_ALERT BIT(20) /* Atruder Alert */ 17*fd3040b9SWells Lu #define MAC_INT_PORT_ST_CHG BIT(19) /* Port Status Change */ 18*fd3040b9SWells Lu #define MAC_INT_BC_STORM BIT(18) /* Broad Cast Storm */ 19*fd3040b9SWells Lu #define MAC_INT_MUST_DROP_LAN BIT(17) /* Global Queue Exhausted */ 20*fd3040b9SWells Lu #define MAC_INT_GLOBAL_QUE_FULL BIT(16) /* Global Queue Full */ 21*fd3040b9SWells Lu #define MAC_INT_TX_SOC_PAUSE_ON BIT(15) /* Soc Port TX Pause On */ 22*fd3040b9SWells Lu #define MAC_INT_RX_SOC_QUE_FULL BIT(14) /* Soc Port Out Queue Full */ 23*fd3040b9SWells Lu #define MAC_INT_TX_LAN1_QUE_FULL BIT(9) /* Port 1 Out Queue Full */ 24*fd3040b9SWells Lu #define MAC_INT_TX_LAN0_QUE_FULL BIT(8) /* Port 0 Out Queue Full */ 25*fd3040b9SWells Lu #define MAC_INT_RX_L_DESCF BIT(7) /* Low Priority Descriptor Full */ 26*fd3040b9SWells Lu #define MAC_INT_RX_H_DESCF BIT(6) /* High Priority Descriptor Full */ 27*fd3040b9SWells Lu #define MAC_INT_RX_DONE_L BIT(5) /* RX Low Priority Done */ 28*fd3040b9SWells Lu #define MAC_INT_RX_DONE_H BIT(4) /* RX High Priority Done */ 29*fd3040b9SWells Lu #define MAC_INT_TX_DONE_L BIT(3) /* TX Low Priority Done */ 30*fd3040b9SWells Lu #define MAC_INT_TX_DONE_H BIT(2) /* TX High Priority Done */ 31*fd3040b9SWells Lu #define MAC_INT_TX_DES_ERR BIT(1) /* TX Descriptor Error */ 32*fd3040b9SWells Lu #define MAC_INT_RX_DES_ERR BIT(0) /* Rx Descriptor Error */ 33*fd3040b9SWells Lu 34*fd3040b9SWells Lu #define MAC_INT_RX (MAC_INT_RX_DONE_H | MAC_INT_RX_DONE_L | \ 35*fd3040b9SWells Lu MAC_INT_RX_DES_ERR) 36*fd3040b9SWells Lu #define MAC_INT_TX (MAC_INT_TX_DONE_L | MAC_INT_TX_DONE_H | \ 37*fd3040b9SWells Lu MAC_INT_TX_DES_ERR) 38*fd3040b9SWells Lu #define MAC_INT_MASK_DEF (MAC_INT_DAISY_MODE_CHG | MAC_INT_IP_CHKSUM_ERR | \ 39*fd3040b9SWells Lu MAC_INT_WDOG_TIMER1_EXP | MAC_INT_WDOG_TIMER0_EXP | \ 40*fd3040b9SWells Lu MAC_INT_INTRUDER_ALERT | MAC_INT_PORT_ST_CHG | \ 41*fd3040b9SWells Lu MAC_INT_BC_STORM | MAC_INT_MUST_DROP_LAN | \ 42*fd3040b9SWells Lu MAC_INT_GLOBAL_QUE_FULL | MAC_INT_TX_SOC_PAUSE_ON | \ 43*fd3040b9SWells Lu MAC_INT_RX_SOC_QUE_FULL | MAC_INT_TX_LAN1_QUE_FULL | \ 44*fd3040b9SWells Lu MAC_INT_TX_LAN0_QUE_FULL | MAC_INT_RX_L_DESCF | \ 45*fd3040b9SWells Lu MAC_INT_RX_H_DESCF) 46*fd3040b9SWells Lu 47*fd3040b9SWells Lu /* Address table search */ 48*fd3040b9SWells Lu #define MAC_ADDR_LOOKUP_IDLE BIT(2) 49*fd3040b9SWells Lu #define MAC_SEARCH_NEXT_ADDR BIT(1) 50*fd3040b9SWells Lu #define MAC_BEGIN_SEARCH_ADDR BIT(0) 51*fd3040b9SWells Lu 52*fd3040b9SWells Lu /* Address table status */ 53*fd3040b9SWells Lu #define MAC_HASH_LOOKUP_ADDR GENMASK(31, 22) 54*fd3040b9SWells Lu #define MAC_R_PORT_MAP GENMASK(13, 12) 55*fd3040b9SWells Lu #define MAC_R_CPU_PORT GENMASK(11, 10) 56*fd3040b9SWells Lu #define MAC_R_VID GENMASK(9, 7) 57*fd3040b9SWells Lu #define MAC_R_AGE GENMASK(6, 4) 58*fd3040b9SWells Lu #define MAC_R_PROXY BIT(3) 59*fd3040b9SWells Lu #define MAC_R_MC_INGRESS BIT(2) 60*fd3040b9SWells Lu #define MAC_AT_TABLE_END BIT(1) 61*fd3040b9SWells Lu #define MAC_AT_DATA_READY BIT(0) 62*fd3040b9SWells Lu 63*fd3040b9SWells Lu /* Wt mac ad0 */ 64*fd3040b9SWells Lu #define MAC_W_PORT_MAP GENMASK(13, 12) 65*fd3040b9SWells Lu #define MAC_W_LAN_PORT_1 BIT(13) 66*fd3040b9SWells Lu #define MAC_W_LAN_PORT_0 BIT(12) 67*fd3040b9SWells Lu #define MAC_W_CPU_PORT GENMASK(11, 10) 68*fd3040b9SWells Lu #define MAC_W_CPU_PORT_1 BIT(11) 69*fd3040b9SWells Lu #define MAC_W_CPU_PORT_0 BIT(10) 70*fd3040b9SWells Lu #define MAC_W_VID GENMASK(9, 7) 71*fd3040b9SWells Lu #define MAC_W_AGE GENMASK(6, 4) 72*fd3040b9SWells Lu #define MAC_W_PROXY BIT(3) 73*fd3040b9SWells Lu #define MAC_W_MC_INGRESS BIT(2) 74*fd3040b9SWells Lu #define MAC_W_MAC_DONE BIT(1) 75*fd3040b9SWells Lu #define MAC_W_MAC_CMD BIT(0) 76*fd3040b9SWells Lu 77*fd3040b9SWells Lu /* W mac 15_0 bus */ 78*fd3040b9SWells Lu #define MAC_W_MAC_15_0 GENMASK(15, 0) 79*fd3040b9SWells Lu 80*fd3040b9SWells Lu /* W mac 47_16 bus */ 81*fd3040b9SWells Lu #define MAC_W_MAC_47_16 GENMASK(31, 0) 82*fd3040b9SWells Lu 83*fd3040b9SWells Lu /* PVID config 0 */ 84*fd3040b9SWells Lu #define MAC_P1_PVID GENMASK(6, 4) 85*fd3040b9SWells Lu #define MAC_P0_PVID GENMASK(2, 0) 86*fd3040b9SWells Lu 87*fd3040b9SWells Lu /* VLAN member config 0 */ 88*fd3040b9SWells Lu #define MAC_VLAN_MEMSET_3 GENMASK(27, 24) 89*fd3040b9SWells Lu #define MAC_VLAN_MEMSET_2 GENMASK(19, 16) 90*fd3040b9SWells Lu #define MAC_VLAN_MEMSET_1 GENMASK(11, 8) 91*fd3040b9SWells Lu #define MAC_VLAN_MEMSET_0 GENMASK(3, 0) 92*fd3040b9SWells Lu 93*fd3040b9SWells Lu /* VLAN member config 1 */ 94*fd3040b9SWells Lu #define MAC_VLAN_MEMSET_5 GENMASK(11, 8) 95*fd3040b9SWells Lu #define MAC_VLAN_MEMSET_4 GENMASK(3, 0) 96*fd3040b9SWells Lu 97*fd3040b9SWells Lu /* Port ability */ 98*fd3040b9SWells Lu #define MAC_PORT_ABILITY_LINK_ST GENMASK(25, 24) 99*fd3040b9SWells Lu 100*fd3040b9SWells Lu /* CPU control */ 101*fd3040b9SWells Lu #define MAC_EN_SOC1_AGING BIT(15) 102*fd3040b9SWells Lu #define MAC_EN_SOC0_AGING BIT(14) 103*fd3040b9SWells Lu #define MAC_DIS_LRN_SOC1 BIT(13) 104*fd3040b9SWells Lu #define MAC_DIS_LRN_SOC0 BIT(12) 105*fd3040b9SWells Lu #define MAC_EN_CRC_SOC1 BIT(9) 106*fd3040b9SWells Lu #define MAC_EN_CRC_SOC0 BIT(8) 107*fd3040b9SWells Lu #define MAC_DIS_SOC1_CPU BIT(7) 108*fd3040b9SWells Lu #define MAC_DIS_SOC0_CPU BIT(6) 109*fd3040b9SWells Lu #define MAC_DIS_BC2CPU_P1 BIT(5) 110*fd3040b9SWells Lu #define MAC_DIS_BC2CPU_P0 BIT(4) 111*fd3040b9SWells Lu #define MAC_DIS_MC2CPU GENMASK(3, 2) 112*fd3040b9SWells Lu #define MAC_DIS_MC2CPU_P1 BIT(3) 113*fd3040b9SWells Lu #define MAC_DIS_MC2CPU_P0 BIT(2) 114*fd3040b9SWells Lu #define MAC_DIS_UN2CPU GENMASK(1, 0) 115*fd3040b9SWells Lu 116*fd3040b9SWells Lu /* Port control 0 */ 117*fd3040b9SWells Lu #define MAC_DIS_PORT GENMASK(25, 24) 118*fd3040b9SWells Lu #define MAC_DIS_PORT1 BIT(25) 119*fd3040b9SWells Lu #define MAC_DIS_PORT0 BIT(24) 120*fd3040b9SWells Lu #define MAC_DIS_RMC2CPU_P1 BIT(17) 121*fd3040b9SWells Lu #define MAC_DIS_RMC2CPU_P0 BIT(16) 122*fd3040b9SWells Lu #define MAC_EN_FLOW_CTL_P1 BIT(9) 123*fd3040b9SWells Lu #define MAC_EN_FLOW_CTL_P0 BIT(8) 124*fd3040b9SWells Lu #define MAC_EN_BACK_PRESS_P1 BIT(1) 125*fd3040b9SWells Lu #define MAC_EN_BACK_PRESS_P0 BIT(0) 126*fd3040b9SWells Lu 127*fd3040b9SWells Lu /* Port control 1 */ 128*fd3040b9SWells Lu #define MAC_DIS_SA_LRN_P1 BIT(9) 129*fd3040b9SWells Lu #define MAC_DIS_SA_LRN_P0 BIT(8) 130*fd3040b9SWells Lu 131*fd3040b9SWells Lu /* Port control 2 */ 132*fd3040b9SWells Lu #define MAC_EN_AGING_P1 BIT(9) 133*fd3040b9SWells Lu #define MAC_EN_AGING_P0 BIT(8) 134*fd3040b9SWells Lu 135*fd3040b9SWells Lu /* Switch Global control */ 136*fd3040b9SWells Lu #define MAC_RMC_TB_FAULT_RULE GENMASK(26, 25) 137*fd3040b9SWells Lu #define MAC_LED_FLASH_TIME GENMASK(24, 23) 138*fd3040b9SWells Lu #define MAC_BC_STORM_PREV GENMASK(5, 4) 139*fd3040b9SWells Lu 140*fd3040b9SWells Lu /* LED port 0 */ 141*fd3040b9SWells Lu #define MAC_LED_ACT_HI BIT(28) 142*fd3040b9SWells Lu 143*fd3040b9SWells Lu /* PHY control register 0 */ 144*fd3040b9SWells Lu #define MAC_CPU_PHY_WT_DATA GENMASK(31, 16) 145*fd3040b9SWells Lu #define MAC_CPU_PHY_CMD GENMASK(14, 13) 146*fd3040b9SWells Lu #define MAC_CPU_PHY_REG_ADDR GENMASK(12, 8) 147*fd3040b9SWells Lu #define MAC_CPU_PHY_ADDR GENMASK(4, 0) 148*fd3040b9SWells Lu 149*fd3040b9SWells Lu /* PHY control register 1 */ 150*fd3040b9SWells Lu #define MAC_CPU_PHY_RD_DATA GENMASK(31, 16) 151*fd3040b9SWells Lu #define MAC_PHY_RD_RDY BIT(1) 152*fd3040b9SWells Lu #define MAC_PHY_WT_DONE BIT(0) 153*fd3040b9SWells Lu 154*fd3040b9SWells Lu /* MAC force mode */ 155*fd3040b9SWells Lu #define MAC_EXT_PHY1_ADDR GENMASK(28, 24) 156*fd3040b9SWells Lu #define MAC_EXT_PHY0_ADDR GENMASK(20, 16) 157*fd3040b9SWells Lu #define MAC_FORCE_RMII_LINK GENMASK(9, 8) 158*fd3040b9SWells Lu #define MAC_FORCE_RMII_EN_1 BIT(7) 159*fd3040b9SWells Lu #define MAC_FORCE_RMII_EN_0 BIT(6) 160*fd3040b9SWells Lu #define MAC_FORCE_RMII_FC GENMASK(5, 4) 161*fd3040b9SWells Lu #define MAC_FORCE_RMII_DPX GENMASK(3, 2) 162*fd3040b9SWells Lu #define MAC_FORCE_RMII_SPD GENMASK(1, 0) 163*fd3040b9SWells Lu 164*fd3040b9SWells Lu /* CPU transmit trigger */ 165*fd3040b9SWells Lu #define MAC_TRIG_L_SOC0 BIT(1) 166*fd3040b9SWells Lu #define MAC_TRIG_H_SOC0 BIT(0) 167*fd3040b9SWells Lu 168*fd3040b9SWells Lu /* Config descriptor queue */ 169*fd3040b9SWells Lu #define TX_DESC_NUM 16 /* # of descriptors in TX queue */ 170*fd3040b9SWells Lu #define MAC_GUARD_DESC_NUM 2 /* # of descriptors of gap 0 */ 171*fd3040b9SWells Lu #define RX_QUEUE0_DESC_NUM 16 /* # of descriptors in RX queue 0 */ 172*fd3040b9SWells Lu #define RX_QUEUE1_DESC_NUM 16 /* # of descriptors in RX queue 1 */ 173*fd3040b9SWells Lu #define TX_DESC_QUEUE_NUM 1 /* # of TX queue */ 174*fd3040b9SWells Lu #define RX_DESC_QUEUE_NUM 2 /* # of RX queue */ 175*fd3040b9SWells Lu 176*fd3040b9SWells Lu #define MAC_RX_LEN_MAX 2047 /* Size of RX buffer */ 177*fd3040b9SWells Lu 178*fd3040b9SWells Lu /* Tx descriptor */ 179*fd3040b9SWells Lu /* cmd1 */ 180*fd3040b9SWells Lu #define TXD_OWN BIT(31) 181*fd3040b9SWells Lu #define TXD_ERR_CODE GENMASK(29, 26) 182*fd3040b9SWells Lu #define TXD_SOP BIT(25) /* start of a packet */ 183*fd3040b9SWells Lu #define TXD_EOP BIT(24) /* end of a packet */ 184*fd3040b9SWells Lu #define TXD_VLAN GENMASK(17, 12) 185*fd3040b9SWells Lu #define TXD_PKT_LEN GENMASK(10, 0) /* packet length */ 186*fd3040b9SWells Lu /* cmd2 */ 187*fd3040b9SWells Lu #define TXD_EOR BIT(31) /* end of ring */ 188*fd3040b9SWells Lu #define TXD_BUF_LEN2 GENMASK(22, 12) 189*fd3040b9SWells Lu #define TXD_BUF_LEN1 GENMASK(10, 0) 190*fd3040b9SWells Lu 191*fd3040b9SWells Lu /* Rx descriptor */ 192*fd3040b9SWells Lu /* cmd1 */ 193*fd3040b9SWells Lu #define RXD_OWN BIT(31) 194*fd3040b9SWells Lu #define RXD_ERR_CODE GENMASK(29, 26) 195*fd3040b9SWells Lu #define RXD_TCP_UDP_CHKSUM BIT(23) 196*fd3040b9SWells Lu #define RXD_PROXY BIT(22) 197*fd3040b9SWells Lu #define RXD_PROTOCOL GENMASK(21, 20) 198*fd3040b9SWells Lu #define RXD_VLAN_TAG BIT(19) 199*fd3040b9SWells Lu #define RXD_IP_CHKSUM BIT(18) 200*fd3040b9SWells Lu #define RXD_ROUTE_TYPE GENMASK(17, 16) 201*fd3040b9SWells Lu #define RXD_PKT_SP GENMASK(14, 12) /* packet source port */ 202*fd3040b9SWells Lu #define RXD_PKT_LEN GENMASK(10, 0) /* packet length */ 203*fd3040b9SWells Lu /* cmd2 */ 204*fd3040b9SWells Lu #define RXD_EOR BIT(31) /* end of ring */ 205*fd3040b9SWells Lu #define RXD_BUF_LEN2 GENMASK(22, 12) 206*fd3040b9SWells Lu #define RXD_BUF_LEN1 GENMASK(10, 0) 207*fd3040b9SWells Lu 208*fd3040b9SWells Lu /* structure of descriptor */ 209*fd3040b9SWells Lu struct spl2sw_mac_desc { 210*fd3040b9SWells Lu u32 cmd1; 211*fd3040b9SWells Lu u32 cmd2; 212*fd3040b9SWells Lu u32 addr1; 213*fd3040b9SWells Lu u32 addr2; 214*fd3040b9SWells Lu }; 215*fd3040b9SWells Lu 216*fd3040b9SWells Lu struct spl2sw_skb_info { 217*fd3040b9SWells Lu struct sk_buff *skb; 218*fd3040b9SWells Lu u32 mapping; 219*fd3040b9SWells Lu u32 len; 220*fd3040b9SWells Lu }; 221*fd3040b9SWells Lu 222*fd3040b9SWells Lu struct spl2sw_common { 223*fd3040b9SWells Lu void __iomem *l2sw_reg_base; 224*fd3040b9SWells Lu 225*fd3040b9SWells Lu struct platform_device *pdev; 226*fd3040b9SWells Lu struct reset_control *rstc; 227*fd3040b9SWells Lu struct clk *clk; 228*fd3040b9SWells Lu 229*fd3040b9SWells Lu void *desc_base; 230*fd3040b9SWells Lu dma_addr_t desc_dma; 231*fd3040b9SWells Lu s32 desc_size; 232*fd3040b9SWells Lu struct spl2sw_mac_desc *rx_desc[RX_DESC_QUEUE_NUM]; 233*fd3040b9SWells Lu struct spl2sw_skb_info *rx_skb_info[RX_DESC_QUEUE_NUM]; 234*fd3040b9SWells Lu u32 rx_pos[RX_DESC_QUEUE_NUM]; 235*fd3040b9SWells Lu u32 rx_desc_num[RX_DESC_QUEUE_NUM]; 236*fd3040b9SWells Lu u32 rx_desc_buff_size; 237*fd3040b9SWells Lu 238*fd3040b9SWells Lu struct spl2sw_mac_desc *tx_desc; 239*fd3040b9SWells Lu struct spl2sw_skb_info tx_temp_skb_info[TX_DESC_NUM]; 240*fd3040b9SWells Lu u32 tx_done_pos; 241*fd3040b9SWells Lu u32 tx_pos; 242*fd3040b9SWells Lu u32 tx_desc_full; 243*fd3040b9SWells Lu 244*fd3040b9SWells Lu struct net_device *ndev[MAX_NETDEV_NUM]; 245*fd3040b9SWells Lu struct mii_bus *mii_bus; 246*fd3040b9SWells Lu 247*fd3040b9SWells Lu struct napi_struct rx_napi; 248*fd3040b9SWells Lu struct napi_struct tx_napi; 249*fd3040b9SWells Lu 250*fd3040b9SWells Lu spinlock_t tx_lock; /* spinlock for accessing tx buffer */ 251*fd3040b9SWells Lu spinlock_t mdio_lock; /* spinlock for mdio commands */ 252*fd3040b9SWells Lu spinlock_t int_mask_lock; /* spinlock for accessing int mask reg. */ 253*fd3040b9SWells Lu 254*fd3040b9SWells Lu u8 enable; 255*fd3040b9SWells Lu }; 256*fd3040b9SWells Lu 257*fd3040b9SWells Lu struct spl2sw_mac { 258*fd3040b9SWells Lu struct net_device *ndev; 259*fd3040b9SWells Lu struct spl2sw_common *comm; 260*fd3040b9SWells Lu 261*fd3040b9SWells Lu u8 mac_addr[ETH_ALEN]; 262*fd3040b9SWells Lu phy_interface_t phy_mode; 263*fd3040b9SWells Lu struct device_node *phy_node; 264*fd3040b9SWells Lu 265*fd3040b9SWells Lu u8 lan_port; 266*fd3040b9SWells Lu u8 to_vlan; 267*fd3040b9SWells Lu u8 vlan_id; 268*fd3040b9SWells Lu }; 269*fd3040b9SWells Lu 270*fd3040b9SWells Lu #endif 271