cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

spl2sw_define.h (8696B)


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