fxmac_hw.h 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701
  1. /*
  2. * Copyright : (C) 2022 Phytium Information Technology, Inc.
  3. * All Rights Reserved.
  4. *
  5. * This program is OPEN SOURCE software: you can redistribute it and/or modify it
  6. * under the terms of the Phytium Public License as published by the Phytium Technology Co.,Ltd,
  7. * either version 1.0 of the License, or (at your option) any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY;
  10. * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11. * See the Phytium Public License for more details.
  12. *
  13. *
  14. * FilePath: fxmac_hw.h
  15. * Date: 2022-04-06 14:46:52
  16. * LastEditTime: 2022-04-06 14:46:58
  17. * Description:  This file is for
  18. *
  19. * Modify History:
  20. * Ver   Who        Date         Changes
  21. * ----- ------     --------    --------------------------------------
  22. */
  23. #ifndef BSP_DRIVERS_ETH_FMAC_HW_H
  24. #define BSP_DRIVERS_ETH_FMAC_HW_H
  25. #ifdef __cplusplus
  26. extern "C"
  27. {
  28. #endif
  29. #include "fparameters.h"
  30. #include "fio.h"
  31. #include "ftypes.h"
  32. #include "fkernel.h"
  33. #define FXMAC_RX_BUF_SIZE 1536U /* Specify the receive buffer size in \
  34. bytes, 64, 128, ... 10240 */
  35. #define FXMAC_RX_BUF_SIZE_JUMBO 10240U
  36. #define FXMAC_RX_BUF_UNIT 64U /* Number of receive buffer bytes as a \
  37. unit, this is HW setup */
  38. #define FXMAC_MAX_RXBD 128U /* Size of RX buffer descriptor queues */
  39. #define FXMAC_MAX_TXBD 128U /* Size of TX buffer descriptor queues */
  40. #define FXMAC_MAX_HASH_BITS 64U /* Maximum value for hash bits. 2**6 */
  41. /************************** Constant Definitions *****************************/
  42. #define FXMAC_MAX_MAC_ADDR 4U /* Maxmum number of mac address \
  43. supported */
  44. #define FXMAC_MAX_TYPE_ID 4U /* Maxmum number of type id supported */
  45. #ifdef __aarch64__
  46. #define FXMAC_BD_ALIGNMENT 64U /* Minimum buffer descriptor alignment \
  47. on the local bus */
  48. #else
  49. #define FXMAC_BD_ALIGNMENT 4U /* Minimum buffer descriptor alignment \
  50. on the local bus */
  51. #endif
  52. #define FXMAC_RX_BUF_ALIGNMENT 4U /* Minimum buffer alignment when using \
  53. options that impose alignment \
  54. restrictions on the buffer data on \
  55. the local bus */
  56. #define FXMAC_NWCTRL_OFFSET 0x00000000U /* Network Control reg */
  57. #define FXMAC_NWCFG_OFFSET 0x00000004U /* Network Config reg */
  58. #define FXMAC_NWSR_OFFSET 0x00000008U /* Network Status reg */
  59. #define FXMAC_DMACR_OFFSET 0x00000010U /* DMA Control reg */
  60. #define FXMAC_TXSR_OFFSET 0x00000014U /* TX Status reg */
  61. #define FXMAC_RXQBASE_OFFSET 0x00000018U /* RX Q Base address reg */
  62. #define FXMAC_TXQBASE_OFFSET 0x0000001CU /* TX Q Base address reg */
  63. #define FXMAC_RXSR_OFFSET 0x00000020U /* RX Status reg */
  64. #define FXMAC_ISR_OFFSET 0x00000024U /* Interrupt Status reg */
  65. #define FXMAC_IER_OFFSET 0x00000028U /* Interrupt Enable reg */
  66. #define FXMAC_IDR_OFFSET 0x0000002CU /* Interrupt Disable reg */
  67. #define FXMAC_IMR_OFFSET 0x00000030U /* Interrupt Mask reg */
  68. #define FXMAC_PHYMNTNC_OFFSET 0x00000034U /* Phy Maintaince reg */
  69. #define FXMAC_RXPAUSE_OFFSET 0x00000038U /* RX Pause Time reg */
  70. #define FXMAC_TXPAUSE_OFFSET 0x0000003CU /* TX Pause Time reg */
  71. #define FXMAC_JUMBOMAXLEN_OFFSET 0x00000048U /* Jumbo max length reg */
  72. #define FXMAC_GEM_HSMAC 0x0050 /* Hs mac config register*/
  73. #define FXMAC_RXWATERMARK_OFFSET 0x0000007CU /* RX watermark reg */
  74. #define FXMAC_HASHL_OFFSET 0x00000080U /* Hash Low address reg */
  75. #define FXMAC_HASHH_OFFSET 0x00000084U /* Hash High address reg */
  76. #define FXMAC_GEM_SA1B 0x0088 /* Specific1 Bottom */
  77. #define FXMAC_GEM_SA1T 0x008C /* Specific1 Top */
  78. #define FXMAC_GEM_SA2B 0x0090 /* Specific2 Bottom */
  79. #define FXMAC_GEM_SA2T 0x0094 /* Specific2 Top */
  80. #define FXMAC_GEM_SA3B 0x0098 /* Specific3 Bottom */
  81. #define FXMAC_GEM_SA3T 0x009C /* Specific3 Top */
  82. #define FXMAC_GEM_SA4B 0x00A0 /* Specific4 Bottom */
  83. #define FXMAC_GEM_SA4T 0x00A4 /* Specific4 Top */
  84. #define FXMAC_MATCH1_OFFSET 0x000000A8U /* Type ID1 Match reg */
  85. #define FXMAC_MATCH2_OFFSET 0x000000ACU /* Type ID2 Match reg */
  86. #define FXMAC_MATCH3_OFFSET 0x000000B0U /* Type ID3 Match reg */
  87. #define FXMAC_MATCH4_OFFSET 0x000000B4U /* Type ID4 Match reg */
  88. #define FXMAC_STRETCH_OFFSET 0x000000BCU /* IPG Stretch reg */
  89. #define FXMAC_REVISION_REG_OFFSET 0x000000FCU /* identification number and module revision */
  90. #define FXMAC_OCTTXL_OFFSET 0x00000100U /* Octects transmitted Low \
  91. reg */
  92. #define FXMAC_OCTTXH_OFFSET 0x00000104U /* Octects transmitted High \
  93. reg */
  94. #define FXMAC_TXCNT_OFFSET 0x00000108U /* Error-free Frmaes \
  95. transmitted counter */
  96. #define FXMAC_TXBCCNT_OFFSET 0x0000010CU /* Error-free Broadcast \
  97. Frames counter*/
  98. #define FXMAC_TXMCCNT_OFFSET 0x00000110U /* Error-free Multicast \
  99. Frame counter */
  100. #define FXMAC_TXPAUSECNT_OFFSET 0x00000114U /* Pause Frames Transmitted \
  101. Counter */
  102. #define FXMAC_TX64CNT_OFFSET 0x00000118U /* Error-free 64 byte Frames \
  103. Transmitted counter */
  104. #define FXMAC_TX65CNT_OFFSET 0x0000011CU /* Error-free 65-127 byte \
  105. Frames Transmitted \
  106. counter */
  107. #define FXMAC_TX128CNT_OFFSET 0x00000120U /* Error-free 128-255 byte \
  108. Frames Transmitted \
  109. counter*/
  110. #define FXMAC_TX256CNT_OFFSET 0x00000124U /* Error-free 256-511 byte \
  111. Frames transmitted \
  112. counter */
  113. #define FXMAC_TX512CNT_OFFSET 0x00000128U /* Error-free 512-1023 byte \
  114. Frames transmitted \
  115. counter */
  116. #define FXMAC_TX1024CNT_OFFSET 0x0000012CU /* Error-free 1024-1518 byte \
  117. Frames transmitted \
  118. counter */
  119. #define FXMAC_TX1519CNT_OFFSET 0x00000130U /* Error-free larger than \
  120. 1519 byte Frames \
  121. transmitted counter */
  122. #define FXMAC_TXURUNCNT_OFFSET 0x00000134U /* TX under run error \
  123. counter */
  124. #define FXMAC_SNGLCOLLCNT_OFFSET 0x00000138U /* Single Collision Frame \
  125. Counter */
  126. #define FXMAC_MULTICOLLCNT_OFFSET 0x0000013CU /* Multiple Collision Frame \
  127. Counter */
  128. #define FXMAC_EXCESSCOLLCNT_OFFSET 0x00000140U /* Excessive Collision Frame \
  129. Counter */
  130. #define FXMAC_LATECOLLCNT_OFFSET 0x00000144U /* Late Collision Frame \
  131. Counter */
  132. #define FXMAC_TXDEFERCNT_OFFSET 0x00000148U /* Deferred Transmission \
  133. Frame Counter */
  134. #define FXMAC_TXCSENSECNT_OFFSET 0x0000014CU /* Transmit Carrier Sense \
  135. Error Counter */
  136. #define FXMAC_OCTRXL_OFFSET 0x00000150U /* Octects Received register \
  137. Low */
  138. #define FXMAC_OCTRXH_OFFSET 0x00000154U /* Octects Received register \
  139. High */
  140. #define FXMAC_RXCNT_OFFSET 0x00000158U /* Error-free Frames \
  141. Received Counter */
  142. #define FXMAC_RXBROADCNT_OFFSET 0x0000015CU /* Error-free Broadcast \
  143. Frames Received Counter */
  144. #define FXMAC_RXMULTICNT_OFFSET 0x00000160U /* Error-free Multicast \
  145. Frames Received Counter */
  146. #define FXMAC_RXPAUSECNT_OFFSET 0x00000164U /* Pause Frames \
  147. Received Counter */
  148. #define FXMAC_RX64CNT_OFFSET 0x00000168U /* Error-free 64 byte Frames \
  149. Received Counter */
  150. #define FXMAC_RX65CNT_OFFSET 0x0000016CU /* Error-free 65-127 byte \
  151. Frames Received Counter */
  152. #define FXMAC_RX128CNT_OFFSET 0x00000170U /* Error-free 128-255 byte \
  153. Frames Received Counter */
  154. #define FXMAC_RX256CNT_OFFSET 0x00000174U /* Error-free 256-512 byte \
  155. Frames Received Counter */
  156. #define FXMAC_RX512CNT_OFFSET 0x00000178U /* Error-free 512-1023 byte \
  157. Frames Received Counter */
  158. #define FXMAC_RX1024CNT_OFFSET 0x0000017CU /* Error-free 1024-1518 byte \
  159. Frames Received Counter */
  160. #define FXMAC_RX1519CNT_OFFSET 0x00000180U /* Error-free 1519-max byte \
  161. Frames Received Counter */
  162. #define FXMAC_RXUNDRCNT_OFFSET 0x00000184U /* Undersize Frames Received \
  163. Counter */
  164. #define FXMAC_RXOVRCNT_OFFSET 0x00000188U /* Oversize Frames Received \
  165. Counter */
  166. #define FXMAC_RXJABCNT_OFFSET 0x0000018CU /* Jabbers Received \
  167. Counter */
  168. #define FXMAC_RXFCSCNT_OFFSET 0x00000190U /* Frame Check Sequence \
  169. Error Counter */
  170. #define FXMAC_RXLENGTHCNT_OFFSET 0x00000194U /* Length Field Error \
  171. Counter */
  172. #define FXMAC_RXSYMBCNT_OFFSET 0x00000198U /* Symbol Error Counter */
  173. #define FXMAC_RXALIGNCNT_OFFSET 0x0000019CU /* Alignment Error Counter */
  174. #define FXMAC_RXRESERRCNT_OFFSET 0x000001A0U /* Receive Resource Error \
  175. Counter */
  176. #define FXMAC_RXORCNT_OFFSET 0x000001A4U /* Receive Overrun Counter */
  177. #define FXMAC_RXIPCCNT_OFFSET 0x000001A8U /* IP header Checksum Error \
  178. Counter */
  179. #define FXMAC_RXTCPCCNT_OFFSET 0x000001ACU /* TCP Checksum Error \
  180. Counter */
  181. #define FXMAC_RXUDPCCNT_OFFSET 0x000001B0U /* UDP Checksum Error \
  182. Counter */
  183. #define FXMAC_LAST_OFFSET 0x000001B4U /* Last statistic counter \
  184. offset, for clearing */
  185. #define FXMAC_1588_SEC_OFFSET 0x000001D0U /* 1588 second counter */
  186. #define FXMAC_1588_NANOSEC_OFFSET 0x000001D4U /* 1588 nanosecond counter */
  187. #define FXMAC_1588_ADJ_OFFSET 0x000001D8U /* 1588 nanosecond \
  188. adjustment counter */
  189. #define FXMAC_1588_INC_OFFSET 0x000001DCU /* 1588 nanosecond \
  190. increment counter */
  191. #define FXMAC_PTP_TXSEC_OFFSET 0x000001E0U /* 1588 PTP transmit second \
  192. counter */
  193. #define FXMAC_PTP_TXNANOSEC_OFFSET 0x000001E4U /* 1588 PTP transmit \
  194. nanosecond counter */
  195. #define FXMAC_PTP_RXSEC_OFFSET 0x000001E8U /* 1588 PTP receive second \
  196. counter */
  197. #define FXMAC_PTP_RXNANOSEC_OFFSET 0x000001ECU /* 1588 PTP receive \
  198. nanosecond counter */
  199. #define FXMAC_PTPP_TXSEC_OFFSET 0x000001F0U /* 1588 PTP peer transmit \
  200. second counter */
  201. #define FXMAC_PTPP_TXNANOSEC_OFFSET 0x000001F4U /* 1588 PTP peer transmit \
  202. nanosecond counter */
  203. #define FXMAC_PTPP_RXSEC_OFFSET 0x000001F8U /* 1588 PTP peer receive \
  204. second counter */
  205. #define FXMAC_PTPP_RXNANOSEC_OFFSET 0x000001FCU /* 1588 PTP peer receive \
  206. nanosecond counter */
  207. #define FXMAC_PCS_CONTROL_OFFSET 0x00000200U /* All PCS registers */
  208. #define FXMAC_PCS_STATUS_OFFSET 0x00000204U /* All PCS status */
  209. #define FXMAC_PCS_AN_LP_OFFSET 0x00000214U /* All PCS link partner's base page */
  210. #define FXMAC_DESIGNCFG_DEBUG1_OFFSET 0x00000280U /* Design Configuration Register 1 */
  211. #define FXMAC_DESIGNCFG_DEBUG2_OFFSET 0x00000284U /* Design Configuration Register 2 */
  212. #define FXMAC_INTQ1_STS_OFFSET 0x00000400U /* Interrupt Q1 Status reg */
  213. #define FXMAC_TXQ1BASE_OFFSET 0x00000440U /* TX Q1 Base address \
  214. reg */
  215. #define FXMAC_RXQ1BASE_OFFSET 0x00000480U /* RX Q1 Base address \
  216. reg */
  217. #define FXMAC_RXBUFQ1_SIZE_OFFSET 0x000004a0U /* Receive Buffer Size */
  218. #define FXMAC_RXBUFQX_SIZE_OFFSET(x) (FXMAC_RXBUFQ1_SIZE_OFFSET + (x << 2))
  219. #define FXMAC_RXBUFQX_SIZE_MASK GENMASK(7, 0)
  220. #define FXMAC_MSBBUF_TXQBASE_OFFSET 0x000004C8U /* MSB Buffer TX Q Base reg */
  221. #define FXMAC_MSBBUF_RXQBASE_OFFSET 0x000004D4U /* MSB Buffer RX Q Base \
  222. reg */
  223. #define FXMAC_INTQ1_IER_OFFSET 0x00000600U /* Interrupt Q1 Enable reg */
  224. #define FXMAC_INTQX_IER_SIZE_OFFSET(x) (FXMAC_INTQ1_IER_OFFSET + (x << 2))
  225. #define FXMAC_INTQ1_IDR_OFFSET 0x00000620U /* Interrupt Q1 Disable reg */
  226. #define FXMAC_INTQX_IDR_SIZE_OFFSET(x) (FXMAC_INTQ1_IDR_OFFSET + (x << 2))
  227. #define FXMAC_INTQ1_IMR_OFFSET 0x00000640U /* Interrupt Q1 Mask \
  228. reg */
  229. #define FXMAC_GEM_USX_CONTROL_OFFSET 0x0A80 /* High speed PCS control register */
  230. #define FXMAC_TEST_CONTROL_OFFSET 0X0A84 /* USXGMII Test Control Register */
  231. #define FXMAC_GEM_SRC_SEL_LN 0x1C04
  232. #define FXMAC_GEM_DIV_SEL0_LN 0x1C08
  233. #define FXMAC_GEM_DIV_SEL1_LN 0x1C0C
  234. #define FXMAC_GEM_PMA_XCVR_POWER_STATE 0x1C10
  235. #define FXMAC_GEM_SPEED_MODE 0x1C14
  236. #define FXMAC_GEM_MII_SELECT 0x1C18
  237. #define FXMAC_GEM_SEL_MII_ON_RGMII 0x1C1C
  238. #define FXMAC_GEM_TX_CLK_SEL0 0x1C20
  239. #define FXMAC_GEM_TX_CLK_SEL1 0x1C24
  240. #define FXMAC_GEM_TX_CLK_SEL2 0x1C28
  241. #define FXMAC_GEM_TX_CLK_SEL3 0x1C2C
  242. #define FXMAC_GEM_RX_CLK_SEL0 0x1C30
  243. #define FXMAC_GEM_RX_CLK_SEL1 0x1C34
  244. #define FXMAC_GEM_CLK_250M_DIV10_DIV100_SEL 0x1C38
  245. #define FXMAC_GEM_TX_CLK_SEL5 0x1C3C
  246. #define FXMAC_GEM_TX_CLK_SEL6 0x1C40
  247. #define FXMAC_GEM_RX_CLK_SEL4 0x1C44
  248. #define FXMAC_GEM_RX_CLK_SEL5 0x1C48
  249. #define FXMAC_GEM_TX_CLK_SEL3_0 0x1C70
  250. #define FXMAC_GEM_TX_CLK_SEL4_0 0x1C74
  251. #define FXMAC_GEM_RX_CLK_SEL3_0 0x1C78
  252. #define FXMAC_GEM_RX_CLK_SEL4_0 0x1C7C
  253. #define FXMAC_GEM_RGMII_TX_CLK_SEL0 0x1C80
  254. #define FXMAC_GEM_RGMII_TX_CLK_SEL1 0x1C84
  255. #define FXMAC_GEM_MODE_SEL_OFFSET 0xDC00
  256. #define FXMAC_LOOPBACK_SEL_OFFSET 0xDC04
  257. /**
  258. * @name interrupts bit definitions
  259. * Bits definitions are same in FXMAC_ISR_OFFSET,
  260. * FXMAC_IER_OFFSET, FXMAC_IDR_OFFSET, and FXMAC_IMR_OFFSET
  261. * @{
  262. */
  263. #define FXMAC_IXR_PTPPSTX_MASK BIT(25) /* PTP Pdelay_resp TXed */
  264. #define FXMAC_IXR_PTPPDRTX_MASK BIT(24) /* PTP Pdelay_req TXed */
  265. #define FXMAC_IXR_PTPPSRX_MASK BIT(23) /* PTP Pdelay_resp RXed */
  266. #define FXMAC_IXR_PTPPDRRX_MASK BIT(22) /* PTP Pdelay_req RXed */
  267. #define FXMAC_IXR_PTPSTX_MASK BIT(21) /* PTP Sync TXed */
  268. #define FXMAC_IXR_PTPDRTX_MASK BIT(20) /* PTP Delay_req TXed */
  269. #define FXMAC_IXR_PTPSRX_MASK BIT(19) /* PTP Sync RXed */
  270. #define FXMAC_IXR_PTPDRRX_MASK BIT(18) /* PTP Delay_req RXed */
  271. #define FXMAC_IXR_PAUSETX_MASK BIT(14) /* Pause frame transmitted */
  272. #define FXMAC_IXR_PAUSEZERO_MASK BIT(13) /* Pause time has reached zero */
  273. #define FXMAC_IXR_PAUSENZERO_MASK BIT(12) /* Pause frame received */
  274. #define FXMAC_IXR_HRESPNOK_MASK BIT(11) /* hresp not ok */
  275. #define FXMAC_IXR_RXOVR_MASK BIT(10) /* Receive overrun occurred */
  276. #define FXMAC_IXR_LINKCHANGE_MASK BIT(9) /* link status change */
  277. #define FXMAC_IXR_TXCOMPL_MASK BIT(7) /* Frame transmitted ok */
  278. #define FXMAC_IXR_TXEXH_MASK BIT(6) /* Transmit err occurred or \
  279. no buffers*/
  280. #define FXMAC_IXR_RETRY_MASK BIT(5) /* Retry limit exceeded */
  281. #define FXMAC_IXR_URUN_MASK BIT(4) /* Transmit underrun */
  282. #define FXMAC_IXR_TXUSED_MASK BIT(3) /* Tx buffer used bit read */
  283. #define FXMAC_IXR_RXUSED_MASK BIT(2) /* Rx buffer used bit read */
  284. #define FXMAC_IXR_RXCOMPL_MASK BIT(1) /* Frame received ok */
  285. #define FXMAC_IXR_MGMNT_MASK BIT(0) /* PHY management complete */
  286. #define FXMAC_IXR_ALL_MASK GENMASK(14, 0) /* Everything! */
  287. #define FXMAC_IXR_TX_ERR_MASK ((u32)FXMAC_IXR_TXEXH_MASK | \
  288. (u32)FXMAC_IXR_RETRY_MASK | \
  289. (u32)FXMAC_IXR_URUN_MASK)
  290. #define FXMAC_IXR_RX_ERR_MASK ((u32)FXMAC_IXR_HRESPNOK_MASK | \
  291. (u32)FXMAC_IXR_RXUSED_MASK | \
  292. (u32)FXMAC_IXR_RXOVR_MASK)
  293. /** @name network control register bit definitions
  294. * @{
  295. */
  296. #define FXMAC_NWCTRL_ENABLE_HS_MAC_MASK BIT(31)
  297. #define FXMAC_NWCTRL_TWO_PT_FIVE_GIG_MASK BIT(29) /* 2.5G operation selected */
  298. #define FXMAC_NWCTRL_FLUSH_DPRAM_MASK BIT(18) /* Flush a packet from \
  299. Rx SRAM */
  300. #define FXMAC_NWCTRL_ZEROPAUSETX_MASK BIT(11) /* Transmit zero quantum \
  301. pause frame */
  302. #define FXMAC_NWCTRL_PAUSETX_MASK BIT(11) /* Transmit pause frame */
  303. #define FXMAC_NWCTRL_HALTTX_MASK BIT(10) /* Halt transmission \
  304. after current frame */
  305. #define FXMAC_NWCTRL_STARTTX_MASK BIT(9) /* Start tx (tx_go) */
  306. #define FXMAC_NWCTRL_STATWEN_MASK BIT(7) /* Enable writing to \
  307. stat counters */
  308. #define FXMAC_NWCTRL_STATINC_MASK BIT(6) /* Increment statistic \
  309. registers */
  310. #define FXMAC_NWCTRL_STATCLR_MASK BIT(5) /* Clear statistic \
  311. registers */
  312. #define FXMAC_NWCTRL_MDEN_MASK BIT(4) /* Enable MDIO port */
  313. #define FXMAC_NWCTRL_TXEN_MASK BIT(3) /* Enable transmit */
  314. #define FXMAC_NWCTRL_RXEN_MASK BIT(2) /* Enable receive */
  315. #define FXMAC_NWCTRL_LOOPEN_MASK BIT(1) /* local loopback */
  316. /* External address match enable */
  317. #define FXMAC_NWCFG_SGMII_MODE_ENABLE_MASK BIT(27) /* SGMII mode enable */
  318. #define FXMAC_NWCFG_BUS_WIDTH_32_MASK (0U << 21)
  319. #define FXMAC_NWCFG_BUS_WIDTH_64_MASK (1U << 21)
  320. #define FXMAC_NWCFG_BUS_WIDTH_128_MASK (2U << 21)
  321. #define FXMAC_NWCFG_CLOCK_DIV224_MASK (7U << 18)
  322. #define FXMAC_NWCFG_CLOCK_DIV128_MASK (6U << 18)
  323. #define FXMAC_NWCFG_CLOCK_DIV96_MASK (5U << 18)
  324. #define FXMAC_NWCFG_CLOCK_DIV64_MASK (4U << 18)
  325. #define FXMAC_NWCFG_CLOCK_DIV48_MASK (3U << 18)
  326. #define FXMAC_NWCFG_CLOCK_DIV32_MASK (2U << 18)
  327. #define FXMAC_NWCFG_CLOCK_DIV16_MASK (1U << 18)
  328. #define FXMAC_NWCFG_CLOCK_DIV8_MASK (0U << 18)
  329. #define FXMAC_NWCFG_FCS_REMOVE BIT(17) /* FCS remove - setting this bit will cause received frames to be written to memory without their frame check sequence (last 4 bytes). */
  330. #define FXMAC_NWCFG_PAUSE_ENABLE BIT(13) /* Pause enable - when set, transmission will pause if a non-zero 802.3 classic pause frame is received and PFC has not been negotiated. */
  331. #define FXMAC_NWCFG_PCSSEL_MASK BIT(11) /* PCS Select */
  332. #define FXMAC_NWCFG_1000_MASK BIT(10) /* Gigabit mode enable */
  333. #define FXMAC_NWCFG_1536RXEN_MASK BIT(8) /* Enable 1536 byte \
  334. frames reception */
  335. #define FXMAC_NWCFG_UCASTHASHEN_MASK BIT(7) /* Receive unicast hash \
  336. frames */
  337. #define FXMAC_NWCFG_MCASTHASHEN_MASK BIT(6) /* Receive multicast hash \
  338. frames */
  339. #define FXMAC_NWCFG_BCASTDI_MASK BIT(5) /* Do not receive \
  340. broadcast frames */
  341. #define FXMAC_NWCFG_COPYALLEN_MASK BIT(4) /* Copy all frames */
  342. #define FXMAC_NWCFG_JUMBO_MASK BIT(3) /* Jumbo frames */
  343. #define FXMAC_NWCFG_NVLANDISC_MASK BIT(2) /* Receive only VLAN \
  344. frames */
  345. #define FXMAC_NWCFG_FDEN_MASK BIT(1) /* full duplex */
  346. #define FXMAC_NWCFG_100_MASK BIT(0) /* 100 Mbps */
  347. #define FXMAC_NWCFG_RESET_MASK BIT(19) /* reset value */
  348. /* Receive buffer descriptor status words bit positions.
  349. * Receive buffer descriptor consists of two 32-bit registers,
  350. * the first - word0 contains a 32-bit word aligned address pointing to the
  351. * address of the buffer. The lower two bits make up the wrap bit indicating
  352. * the last descriptor and the ownership bit to indicate it has been used by
  353. * the xmac.
  354. * The following register - word1, contains status information regarding why
  355. * the frame was received (the filter match condition) as well as other
  356. * useful info.
  357. * @{
  358. */
  359. #define FXMAC_RXBUF_BCAST_MASK BIT(31) /* Broadcast frame */
  360. #define FXMAC_RXBUF_MULTIHASH_MASK BIT(30) /* Multicast hashed frame */
  361. #define FXMAC_RXBUF_UNIHASH_MASK BIT(29) /* Unicast hashed frame */
  362. #define FXMAC_RXBUF_EXH_MASK BIT(27) /* buffer exhausted */
  363. #define FXMAC_RXBUF_AMATCH_MASK GENMASK(26, 25) /* Specific address \
  364. matched */
  365. #define FXMAC_RXBUF_IDFOUND_MASK BIT(24) /* Type ID matched */
  366. #define FXMAC_RXBUF_IDMATCH_MASK GENMASK(23, 22) /* ID matched mask */
  367. #define FXMAC_RXBUF_VLAN_MASK BIT(21) /* VLAN tagged */
  368. #define FXMAC_RXBUF_PRI_MASK BIT(20) /* Priority tagged */
  369. #define FXMAC_RXBUF_VPRI_MASK GENMASK(19, 17) /* Vlan priority */
  370. #define FXMAC_RXBUF_CFI_MASK BIT(16) /* CFI frame */
  371. #define FXMAC_RXBUF_EOF_MASK BIT(15) /* End of frame. */
  372. #define FXMAC_RXBUF_SOF_MASK BIT(14) /* Start of frame. */
  373. #define FXMAC_RXBUF_FCS_STATUS_MASK BIT(13) /* Status of fcs. */
  374. #define FXMAC_RXBUF_LEN_MASK GENMASK(12, 0) /* Mask for length field */
  375. #define FXMAC_RXBUF_LEN_JUMBO_MASK GENMASK(13, 0) /* Mask for jumbo length */
  376. #define FXMAC_RXBUF_WRAP_MASK BIT(1) /* Wrap bit, last BD */
  377. #define FXMAC_RXBUF_NEW_MASK BIT(0) /* Used bit.. */
  378. #define FXMAC_RXBUF_ADD_MASK GENMASK(31, 2) /* Mask for address */
  379. /*
  380. * @}
  381. */
  382. /* Transmit buffer descriptor status words bit positions.
  383. * Transmit buffer descriptor consists of two 32-bit registers,
  384. * the first - word0 contains a 32-bit address pointing to the location of
  385. * the transmit data.
  386. * The following register - word1, consists of various information to control
  387. * the xmac transmit process. After transmit, this is updated with status
  388. * information, whether the frame was transmitted OK or why it had failed.
  389. * @{
  390. */
  391. #define FXMAC_TXBUF_USED_MASK BIT(31) /* Used bit. */
  392. #define FXMAC_TXBUF_WRAP_MASK BIT(30) /* Wrap bit, last descriptor */
  393. #define FXMAC_TXBUF_RETRY_MASK BIT(29) /* Retry limit exceeded */
  394. #define FXMAC_TXBUF_URUN_MASK BIT(28) /* Transmit underrun occurred */
  395. #define FXMAC_TXBUF_EXH_MASK BIT(27) /* Buffers exhausted */
  396. #define FXMAC_TXBUF_TCP_MASK BIT(26) /* Late collision. */
  397. #define FXMAC_TXBUF_NOCRC_MASK BIT(16) /* No CRC */
  398. #define FXMAC_TXBUF_LAST_MASK BIT(15) /* Last buffer */
  399. #define FXMAC_TXBUF_LEN_MASK GENMASK(13, 0) /* Mask for length field */
  400. /*
  401. * @}
  402. */
  403. /** @name network configuration register bit definitions
  404. * @{
  405. */
  406. #define FXMAC_NWCFG_BADPREAMBEN_MASK BIT(29) /* disable rejection of \
  407. non-standard preamble */
  408. #define FXMAC_NWCFG_IPDSTRETCH_MASK BIT(28) /* enable transmit IPG */
  409. #define FXMAC_NWCFG_SGMIIEN_MASK BIT(27) /* SGMII Enable */
  410. #define FXMAC_NWCFG_FCSIGNORE_MASK BIT(26) /* disable rejection of \
  411. FCS error */
  412. #define FXMAC_NWCFG_HDRXEN_MASK BIT(25) /* RX half duplex */
  413. #define FXMAC_NWCFG_RXCHKSUMEN_MASK BIT(24) /* enable RX checksum \
  414. offload */
  415. #define FXMAC_NWCFG_PAUSECOPYDI_MASK BIT(23) /* Do not copy pause \
  416. Frames to memory */
  417. #define FXMAC_NWCFG_DWIDTH_64_MASK BIT(21) /* 64 bit Data bus width */
  418. #define FXMAC_NWCFG_MDC_SHIFT_MASK 18U /* shift bits for MDC */
  419. #define FXMAC_NWCFG_MDCCLKDIV_MASK GENMASK(20, 18) /* MDC Mask PCLK divisor */
  420. #define FXMAC_NWCFG_FCSREM_MASK BIT(17) /* Discard FCS from \
  421. received frames */
  422. #define FXMAC_NWCFG_LENERRDSCRD_MASK BIT(16)
  423. /* RX length error discard */
  424. #define FXMAC_NWCFG_RXOFFS_MASK GENMASK(15) /* RX buffer offset */
  425. #define FXMAC_NWCFG_PAUSEEN_MASK BIT(13) /* Enable pause RX */
  426. #define FXMAC_NWCFG_RETRYTESTEN_MASK BIT(12) /* Retry test */
  427. #define FXMAC_NWCFG_XTADDMACHEN_MASK BIT(9)
  428. #define FXMAC_NWCFG_LOOPBACK_LOCAL_MASK BIT(1) /* Loopback local */
  429. /* External address match enable */
  430. /**
  431. * @name receive status register bit definitions
  432. * @{
  433. */
  434. #define FXMAC_RXSR_HRESPNOK_MASK BIT(3) /* Receive hresp not OK */
  435. #define FXMAC_RXSR_RXOVR_MASK BIT(2) /* Receive overrun */
  436. #define FXMAC_RXSR_FRAMERX_MASK BIT(1) /* Frame received OK */
  437. #define FXMAC_RXSR_BUFFNA_MASK BIT(0) /* RX buffer used bit set */
  438. #define FXMAC_RXSR_ERROR_MASK ((u32)FXMAC_RXSR_HRESPNOK_MASK | \
  439. (u32)FXMAC_RXSR_RXOVR_MASK | \
  440. (u32)FXMAC_RXSR_BUFFNA_MASK)
  441. #define FXMAC_SR_ALL_MASK GENMASK(31, 0) /* Mask for full register */
  442. /** @name DMA control register bit definitions
  443. * @{
  444. */
  445. #define FXMAC_DMACR_ADDR_WIDTH_64 BIT(30) /* 64 bit address bus */
  446. #define FXMAC_DMACR_TXEXTEND_MASK BIT(29) /* Tx Extended desc mode */
  447. #define FXMAC_DMACR_RXEXTEND_MASK BIT(28) /* Rx Extended desc mode */
  448. #define FXMAC_DMACR_ORCE_DISCARD_ON_ERR_MASK BIT(24) /* Auto Discard RX frames during lack of resource. */
  449. #define FXMAC_DMACR_RXBUF_MASK GENMASK(23, 16) /* Mask bit for RX buffer \
  450. size */
  451. #define FXMAC_DMACR_RXBUF_SHIFT 16U /* Shift bit for RX buffer \
  452. size */
  453. #define FXMAC_DMACR_TCPCKSUM_MASK BIT(11) /* enable/disable TX \
  454. checksum offload */
  455. #define FXMAC_DMACR_TXSIZE_MASK BIT(10) /* TX buffer memory size bit[10] */
  456. #define FXMAC_DMACR_RXSIZE_MASK GENMASK(9, 8) /* RX buffer memory size bit[9:8] */
  457. #define FXMAC_DMACR_ENDIAN_MASK BIT(7) /* endian configuration */
  458. #define FXMAC_DMACR_SWAP_MANAGEMENT_MASK BIT(6) /* When clear, selects little endian mode */
  459. #define FXMAC_DMACR_BLENGTH_MASK GENMASK(4, 0) /* buffer burst length */
  460. #define FXMAC_DMACR_SINGLE_AHB_AXI_BURST BIT(0) /* single AHB_AXI bursts */
  461. #define FXMAC_DMACR_INCR4_AHB_AXI_BURST BIT(2) /* 4 bytes AHB_AXI bursts */
  462. #define FXMAC_DMACR_INCR8_AHB_AXI_BURST BIT(3) /* 8 bytes AHB_AXI bursts */
  463. #define FXMAC_DMACR_INCR16_AHB_AXI_BURST BIT(4) /* 16 bytes AHB_AXI bursts */
  464. /* This register indicates module identification number and module revision. */
  465. #define FXMAC_REVISION_MODULE_MASK GENMASK(15, 0) /* Module revision */
  466. #define FXMAC_IDENTIFICATION_MASK GENMASK(27, 16) /* Module identification number */
  467. #define FXMAC_FIX_NUM_MASK GENMASK(31, 28) /* Fix number - incremented for fix releases */
  468. /** @name network status register bit definitaions
  469. * @{
  470. */
  471. #define FXMAC_NWSR_MDIOIDLE_MASK BIT(2) /* PHY management idle */
  472. #define FXMAC_NWSR_MDIO_MASK BIT(1) /* Status of mdio_in */
  473. #define FXMAC_NWSR_PCS_LINK_STATE_MASK BIT(0)
  474. /** @name PHY Maintenance bit definitions
  475. * @{
  476. */
  477. #define FXMAC_PHYMNTNC_OP_MASK (BIT(17) | BIT(30)) /* operation mask bits */
  478. #define FXMAC_PHYMNTNC_OP_R_MASK BIT(29) /* read operation */
  479. #define FXMAC_PHYMNTNC_OP_W_MASK BIT(28) /* write operation */
  480. #define FXMAC_PHYMNTNC_ADDR_MASK GENMASK(27, 23) /* Address bits */
  481. #define FXMAC_PHYMNTNC_REG_MASK GENMASK(22, 18) /* register bits */
  482. #define FXMAC_PHYMNTNC_DATA_MASK GENMASK(11, 0) /* data bits */
  483. #define FXMAC_PHYMNTNC_PHAD_SHFT_MSK 23U /* Shift bits for PHYAD */
  484. #define FXMAC_PHYMNTNC_PREG_SHFT_MSK 18U /* Shift bits for PHREG */
  485. /** @name transmit status register bit definitions
  486. * @{
  487. */
  488. #define FXMAC_TXSR_HRESPNOK_MASK BIT(8) /* Transmit hresp not OK */
  489. #define FXMAC_TXSR_URUN_MASK BIT(6) /* Transmit underrun */
  490. #define FXMAC_TXSR_TXCOMPL_MASK BIT(5) /* Transmit completed OK */
  491. #define FXMAC_TXSR_BUFEXH_MASK BIT(4) /* Transmit buffs exhausted \
  492. mid frame */
  493. #define FXMAC_TXSR_TXGO_MASK BIT(3) /* Status of go flag */
  494. #define FXMAC_TXSR_RXOVR_MASK BIT(2) /* Retry limit exceeded */
  495. #define FXMAC_TXSR_FRAMERX_MASK BIT(1) /* Collision tx frame */
  496. #define FXMAC_TXSR_USEDREAD_MASK BIT(0) /* TX buffer used bit set */
  497. #define FXMAC_TXSR_ERROR_MASK ((u32)FXMAC_TXSR_HRESPNOK_MASK | \
  498. (u32)FXMAC_TXSR_URUN_MASK | \
  499. (u32)FXMAC_TXSR_BUFEXH_MASK | \
  500. (u32)FXMAC_TXSR_RXOVR_MASK | \
  501. (u32)FXMAC_TXSR_FRAMERX_MASK | \
  502. (u32)FXMAC_TXSR_USEDREAD_MASK)
  503. /**
  504. * @name Interrupt Q1 status register bit definitions
  505. * @{
  506. */
  507. #define FXMAC_INTQ1SR_TXCOMPL_MASK BIT(7) /* Transmit completed OK */
  508. #define FXMAC_INTQ1SR_TXERR_MASK BIT(6) /* Transmit AMBA Error */
  509. #define FXMAC_INTQ1_IXR_ALL_MASK ((u32)FXMAC_INTQ1SR_TXCOMPL_MASK | \
  510. (u32)FXMAC_INTQ1SR_TXERR_MASK)
  511. /**
  512. * @name Interrupt QUEUE status register bit definitions
  513. * @{
  514. */
  515. #define FXMAC_INTQUESR_TXCOMPL_MASK BIT(7) /* Transmit completed OK */
  516. #define FXMAC_INTQUESR_TXERR_MASK BIT(6) /* Transmit AMBA Error */
  517. #define FXMAC_INTQUESR_RCOMP_MASK BIT(1)
  518. #define FXMAC_INTQUESR_RXUBR_MASK BIT(2)
  519. #define FXMAC_INTQUE_IXR_ALL_MASK ((u32)FXMAC_INTQUESR_TXCOMPL_MASK | \
  520. (u32)FXMAC_INTQUESR_TXERR_MASK)
  521. #define FXMAC_QUEUE_REGISTER_OFFSET(base_addr, queue_id) ((u32)base_addr + (queue_id - 1) * 4)
  522. /* Design Configuration Register 1 - The GEM has many parameterisation options to configure the IP during compilation stage. */
  523. #define FXMAC_DESIGNCFG_DEBUG1_BUS_WIDTH_MASK GENMASK(27, 25)
  524. /*GEM hs mac config register bitfields*/
  525. #define FXMAC_GEM_HSMACSPEED_OFFSET 0
  526. #define FXMAC_GEM_HSMACSPEED_SIZE 3
  527. #define FXMAC_GEM_HSMACSPEED_MASK 0x7
  528. /* Transmit buffer descriptor status words offset
  529. * @{
  530. */
  531. #define FXMAC_BD_ADDR_OFFSET 0x00000000U /* word 0/addr of BDs */
  532. #define FXMAC_BD_STAT_OFFSET 4 /* word 1/status of BDs, 4 bytes */
  533. #define FXMAC_BD_ADDR_HI_OFFSET BIT(3) /* word 2/addr of BDs */
  534. /** @name MAC address register word 1 mask
  535. * @{
  536. */
  537. #define FXMAC_GEM_SAB_MASK GENMASK(15, 0) /* Address bits[47:32] \
  538. bit[31:0] are in BOTTOM */
  539. /* USXGMII control register */
  540. #define FXMAC_GEM_USX_HS_MAC_SPEED_100M (0x0 << 14) /* 100M operation */
  541. #define FXMAC_GEM_USX_HS_MAC_SPEED_1G (0x1 << 14) /* 1G operation */
  542. #define FXMAC_GEM_USX_HS_MAC_SPEED_2_5G (0x2 << 14) /* 2.5G operation */
  543. #define FXMAC_GEM_USX_HS_MAC_SPEED_10G (0x4 << 14) /* 10G operation */
  544. #define FXMAC_GEM_USX_TX_SCR_BYPASS BIT(8) /* RX Scrambler Bypass. Set high to bypass the receive descrambler. */
  545. #define FXMAC_GEM_USX_RX_SCR_BYPASS BIT(9) /* TX Scrambler Bypass. Set high to bypass the transmit scrambler. */
  546. #define FXMAC_GEM_USX_RX_SYNC_RESET BIT(2) /* RX Reset. Set high to reset the receive datapath. When low the receive datapath is enabled. */
  547. #define FXMAC_GEM_USX_TX_DATAPATH_EN BIT(1) /* TX Datapath Enable. */
  548. #define FXMAC_GEM_USX_SIGNAL_OK BIT(0) /* Enable the USXGMII/BASE-R receive PCS. */
  549. /* All PCS registers */
  550. #define FXMAC_PCS_CONTROL_ENABLE_AUTO_NEG BIT(12) /* Enable auto-negotiation - when set active high, autonegotiation operation is enabled. */
  551. /* FXMAC_PCS_STATUS_OFFSET */
  552. #define FXMAC_PCS_STATUS_LINK_STATUS_OFFSET 2
  553. #define FXMAC_PCS_STATUS_LINK_STATUS BIT(FXMAC_PCS_STATUS_LINK_STATUS_OFFSET) /* Link status - indicates the status of the physical connection to the link partner. When set to logic 1 the link is up, and when set to logic 0, the link is down. */
  554. /* FXMAC_PCS_AN_LP_OFFSET */
  555. #define FXMAC_PCS_AN_LP_SPEED_OFFSET 10
  556. #define FXMAC_PCS_AN_LP_SPEED (0x3U << FXMAC_PCS_AN_LP_SPEED_OFFSET) /* SGMII 11 : Reserved 10 : 1000 Mbps 01 : 100Mbps 00 : 10 Mbps */
  557. #define FXMAC_PCS_AN_LP_DUPLEX_OFFSET 12
  558. #define FXMAC_PCS_AN_LP_DUPLEX (0x3U << FXMAC_PCS_AN_LP_DUPLEX_OFFSET) /* SGMII Bit 13: Reserved. read as 0. Bit 12 : 0 : half-duplex. 1: Full Duplex." */
  559. #define FXMAC_PCS_LINK_PARTNER_NEXT_PAGE_STATUS (1U<<15) /* In sgmii mode, 0 is link down . 1 is link up */
  560. /***************** Macros (Inline Functions) Definitions *********************/
  561. #define FXMAC_READREG32(addr, reg_offset) FtIn32(addr + (u32)reg_offset)
  562. #define FXMAC_WRITEREG32(addr, reg_offset, reg_value) FtOut32(addr + (u32)reg_offset, (u32)reg_value)
  563. #define FXMAC_SetBit32(addr, reg_offset, reg_value) FtSetBit32(addr + (u32)reg_offset, (u32)reg_value)
  564. #define FXMAC_ClearBit32(addr, reg_offset, reg_value) FtClearBit32(addr + (u32)reg_offset, (u32)reg_value)
  565. /****************************************************************************/
  566. /**
  567. *
  568. * Enable interrupts specified in <i>Mask</i>. The corresponding interrupt for
  569. * each bit set to 1 in <i>Mask</i>, will be enabled.
  570. *
  571. * @param instance_p is a pointer to the instance to be worked on.
  572. * @param Mask contains a bit mask of interrupts to enable. The mask can
  573. * be formed using a set of bitwise or'd values.
  574. *
  575. * @note
  576. * The state of the transmitter and receiver are not modified by this function.
  577. * C-style signature
  578. * void FXMAC_INT_ENABLE(FXmac *instance_p, u32 Mask)
  579. *
  580. *****************************************************************************/
  581. #define FXMAC_INT_ENABLE(instance_p, Mask) \
  582. FXMAC_WRITEREG32((instance_p)->config.base_address, \
  583. FXMAC_IER_OFFSET, \
  584. ((Mask)&FXMAC_IXR_ALL_MASK));
  585. /****************************************************************************/
  586. /**
  587. *
  588. * Enable interrupts specified in <i>Mask</i>. The corresponding interrupt for
  589. * each bit set to 1 in <i>Mask</i>, will be enabled.
  590. *
  591. * @param instance_p is a pointer to the instance to be worked on.
  592. * @param Mask contains a bit mask of interrupts to enable. The mask can
  593. * be formed using a set of bitwise or'd values.
  594. *
  595. * @note
  596. * The state of the transmitter and receiver are not modified by this function.
  597. * C-style signature
  598. * void FXMAC_INT_Q1ENABLE(FXmac *instance_p, u32 Mask)
  599. *
  600. *****************************************************************************/
  601. #define FXMAC_INT_Q1ENABLE(instance_p, Mask) \
  602. FXMAC_WRITEREG32((instance_p)->config.base_address, \
  603. FXMAC_INTQ1_IER_OFFSET, \
  604. ((Mask)&FXMAC_INTQ1_IXR_ALL_MASK));
  605. #ifdef __cplusplus
  606. }
  607. #endif
  608. #endif // !