spl2sw_define.h 8.5 KB

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