drv_eth.h 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. /*
  2. * Copyright (c) 2006-2021, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2020-10-30 bigmagic first version
  9. */
  10. #ifndef __DRV_ETH_H__
  11. #define __DRV_ETH_H__
  12. #define MAC_REG (void *)(0xfd580000)
  13. //#define BIT(nr) (1UL << (nr))
  14. #define SYS_REV_CTRL (0x00)
  15. #define SYS_PORT_CTRL (0x04)
  16. #define PORT_MODE_EXT_GPHY (3)
  17. #define GENET_SYS_OFF (0x0000)
  18. #define SYS_RBUF_FLUSH_CTRL (GENET_SYS_OFF + 0x08)
  19. #define SYS_TBUF_FLUSH_CTRL (GENET_SYS_OFF + 0x0c)
  20. #define GENET_EXT_OFF (0x0080)
  21. #define EXT_RGMII_OOB_CTRL (GENET_EXT_OFF + 0x0c)
  22. #define RGMII_LINK BIT(4)
  23. #define OOB_DISABLE BIT(5)
  24. #define RGMII_MODE_EN BIT(6)
  25. #define ID_MODE_DIS BIT(16)
  26. #define GENET_RBUF_OFF (0x0300)
  27. #define RBUF_TBUF_SIZE_CTRL (GENET_RBUF_OFF + 0xb4)
  28. #define RBUF_CTRL (GENET_RBUF_OFF + 0x00)
  29. #define RBUF_ALIGN_2B BIT(1)
  30. #define GENET_UMAC_OFF (0x0800)
  31. #define UMAC_MIB_CTRL (GENET_UMAC_OFF + 0x580)
  32. #define UMAC_MAX_FRAME_LEN (GENET_UMAC_OFF + 0x014)
  33. #define UMAC_MAC0 (GENET_UMAC_OFF + 0x00c)
  34. #define UMAC_MAC1 (GENET_UMAC_OFF + 0x010)
  35. #define UMAC_CMD (GENET_UMAC_OFF + 0x008)
  36. #define MDIO_CMD (GENET_UMAC_OFF + 0x614)
  37. #define UMAC_TX_FLUSH (GENET_UMAC_OFF + 0x334)
  38. #define MDIO_START_BUSY BIT(29)
  39. #define MDIO_READ_FAIL BIT(28)
  40. #define MDIO_RD (2 << 26)
  41. #define MDIO_WR BIT(26)
  42. #define MDIO_PMD_SHIFT (21)
  43. #define MDIO_PMD_MASK (0x1f)
  44. #define MDIO_REG_SHIFT (16)
  45. #define MDIO_REG_MASK (0x1f)
  46. #define GENET_INTRL2_OFF (0x0200)
  47. #define GENET_INTRL2_CPU_STAT (GENET_INTRL2_OFF + 0x00)
  48. #define GENET_INTRL2_CPU_CLEAR (GENET_INTRL2_OFF + 0x08)
  49. #define GENET_INTRL2_CPU_STAT_MASK (GENET_INTRL2_OFF + 0x0c)
  50. #define GENET_INTRL2_CPU_SET_MASK (GENET_INTRL2_OFF + 0x10)
  51. #define GENET_INTRL2_CPU_CLEAR_MASK (GENET_INTRL2_OFF + 0x14)
  52. #define GENET_IRQ_MDIO_ERROR BIT(24)
  53. #define GENET_IRQ_MDIO_DONE BIT(23)
  54. #define GENET_IRQ_TXDMA_DONE BIT(16)
  55. #define GENET_IRQ_RXDMA_DONE BIT(13)
  56. #define CMD_TX_EN BIT(0)
  57. #define CMD_RX_EN BIT(1)
  58. #define UMAC_SPEED_10 (0)
  59. #define UMAC_SPEED_100 (1)
  60. #define UMAC_SPEED_1000 (2)
  61. #define UMAC_SPEED_2500 (3)
  62. #define CMD_SPEED_SHIFT (2)
  63. #define CMD_SPEED_MASK (3)
  64. #define CMD_SW_RESET BIT(13)
  65. #define CMD_LCL_LOOP_EN BIT(15)
  66. #define CMD_TX_EN BIT(0)
  67. #define CMD_RX_EN BIT(1)
  68. #define MIB_RESET_RX BIT(0)
  69. #define MIB_RESET_RUNT BIT(1)
  70. #define MIB_RESET_TX BIT(2)
  71. /* total number of Buffer Descriptors, same for Rx/Tx */
  72. #define TOTAL_DESCS (256)
  73. #define RX_DESCS TOTAL_DESCS
  74. #define TX_DESCS TOTAL_DESCS
  75. #define DEFAULT_Q (0x10)
  76. #define ETH_DATA_LEN (1500)
  77. #define ETH_HLEN (14)
  78. #define VLAN_HLEN (4)
  79. #define ETH_FCS_LEN (4)
  80. /* Body(1500) + EH_SIZE(14) + VLANTAG(4) + BRCMTAG(6) + FCS(4) = 1528.
  81. * 1536 is multiple of 256 bytes
  82. */
  83. #define ENET_BRCM_TAG_LEN (6)
  84. #define ENET_PAD (8)
  85. #define ENET_MAX_MTU_SIZE (ETH_DATA_LEN + ETH_HLEN + \
  86. VLAN_HLEN + ENET_BRCM_TAG_LEN + \
  87. ETH_FCS_LEN + ENET_PAD)
  88. /* Tx/Rx Dma Descriptor common bits */
  89. #define DMA_EN BIT(0)
  90. #define DMA_RING_BUF_EN_SHIFT (0x01)
  91. #define DMA_RING_BUF_EN_MASK (0xffff)
  92. #define DMA_BUFLENGTH_MASK (0x0fff)
  93. #define DMA_BUFLENGTH_SHIFT (16)
  94. #define DMA_RING_SIZE_SHIFT (16)
  95. #define DMA_OWN (0x8000)
  96. #define DMA_EOP (0x4000)
  97. #define DMA_SOP (0x2000)
  98. #define DMA_WRAP (0x1000)
  99. #define DMA_MAX_BURST_LENGTH (0x8)
  100. /* Tx specific DMA descriptor bits */
  101. #define DMA_TX_UNDERRUN (0x0200)
  102. #define DMA_TX_APPEND_CRC (0x0040)
  103. #define DMA_TX_OW_CRC (0x0020)
  104. #define DMA_TX_DO_CSUM (0x0010)
  105. #define DMA_TX_QTAG_SHIFT (7)
  106. /* DMA rings size */
  107. #define DMA_RING_SIZE (0x40)
  108. #define DMA_RINGS_SIZE (DMA_RING_SIZE * (DEFAULT_Q + 1))
  109. /* DMA descriptor */
  110. #define DMA_DESC_LENGTH_STATUS (0x00)
  111. #define DMA_DESC_ADDRESS_LO (0x04)
  112. #define DMA_DESC_ADDRESS_HI (0x08)
  113. #define DMA_DESC_SIZE (12)
  114. #define GENET_RX_OFF (0x2000)
  115. #define GENET_RDMA_REG_OFF \
  116. (GENET_RX_OFF + TOTAL_DESCS * DMA_DESC_SIZE)
  117. #define GENET_TX_OFF (0x4000)
  118. #define GENET_TDMA_REG_OFF \
  119. (GENET_TX_OFF + TOTAL_DESCS * DMA_DESC_SIZE)
  120. #define DMA_FC_THRESH_HI (RX_DESCS >> 4)
  121. #define DMA_FC_THRESH_LO (5)
  122. #define DMA_FC_THRESH_VALUE ((DMA_FC_THRESH_LO << 16) | \
  123. DMA_FC_THRESH_HI)
  124. #define DMA_XOFF_THRESHOLD_SHIFT (16)
  125. #define TDMA_RING_REG_BASE \
  126. (GENET_TDMA_REG_OFF + DEFAULT_Q * DMA_RING_SIZE)
  127. #define TDMA_READ_PTR (TDMA_RING_REG_BASE + 0x00)
  128. #define TDMA_CONS_INDEX (TDMA_RING_REG_BASE + 0x08)
  129. #define TDMA_PROD_INDEX (TDMA_RING_REG_BASE + 0x0c)
  130. #define DMA_RING_BUF_SIZE (0x10)
  131. #define DMA_START_ADDR (0x14)
  132. #define DMA_END_ADDR (0x1c)
  133. #define DMA_MBUF_DONE_THRESH (0x24)
  134. #define TDMA_FLOW_PERIOD (TDMA_RING_REG_BASE + 0x28)
  135. #define TDMA_WRITE_PTR (TDMA_RING_REG_BASE + 0x2c)
  136. #define RDMA_RING_REG_BASE \
  137. (GENET_RDMA_REG_OFF + DEFAULT_Q * DMA_RING_SIZE)
  138. #define RDMA_WRITE_PTR (RDMA_RING_REG_BASE + 0x00)
  139. #define RDMA_PROD_INDEX (RDMA_RING_REG_BASE + 0x08)
  140. #define RDMA_CONS_INDEX (RDMA_RING_REG_BASE + 0x0c)
  141. #define RDMA_XON_XOFF_THRESH (RDMA_RING_REG_BASE + 0x28)
  142. #define RDMA_READ_PTR (RDMA_RING_REG_BASE + 0x2c)
  143. #define TDMA_REG_BASE (GENET_TDMA_REG_OFF + DMA_RINGS_SIZE)
  144. #define RDMA_REG_BASE (GENET_RDMA_REG_OFF + DMA_RINGS_SIZE)
  145. #define DMA_RING_CFG (0x00)
  146. #define DMA_CTRL (0x04)
  147. #define DMA_SCB_BURST_SIZE (0x0c)
  148. #define RX_BUF_LENGTH (2048)
  149. #define RX_TOTAL_BUFSIZE (RX_BUF_LENGTH * RX_DESCS)
  150. #define RX_BUF_OFFSET (2)
  151. #define PHY_INTERFACE_MODE_RGMII (7)
  152. #define PHY_INTERFACE_MODE_RGMII_RXID (9)
  153. #define BCM54213PE_MII_CONTROL (0x00)
  154. #define BCM54213PE_MII_STATUS (0x01)
  155. #define BCM54213PE_PHY_IDENTIFIER_HIGH (0x02)
  156. #define BCM54213PE_PHY_IDENTIFIER_LOW (0x03)
  157. #define BCM54213PE_AUTO_NEGOTIATION_ADV (0x04)
  158. #define BCM54213PE_AUTO_NEGOTIATION_LINK (0x05)
  159. #define BCM54213PE_AUTO_NEGOTIATION_EXPANSION (0x06)
  160. #define BCM54213PE_NEXT_PAGE_TX (0x07)
  161. #define BCM54213PE_PARTNER_RX (0x08)
  162. #define BCM54213PE_CONTROL (0x09)
  163. #define BCM54213PE_STATUS (0x0A)
  164. #define BCM54213PE_IEEE_EXTENDED_STATUS (0x0F)
  165. #define BCM54213PE_PHY_EXTENDED_CONTROL (0x10)
  166. #define BCM54213PE_PHY_EXTENDED_STATUS (0x11)
  167. #define BCM54213PE_RECEIVE_ERROR_COUNTER (0x12)
  168. #define BCM54213PE_FALSE_C_S_COUNTER (0x13)
  169. #define BCM54213PE_RECEIVE_NOT_OK_COUNTER (0x14)
  170. #define BCM54213PE_VERSION_B1 (0x600d84a2)
  171. #define BCM54213PE_VERSION_X (0x600d84a0)
  172. //BCM54213PE_MII_CONTROL
  173. #define MII_CONTROL_PHY_RESET (1 << 15)
  174. #define MII_CONTROL_AUTO_NEGOTIATION_ENABLED (1 << 12)
  175. #define MII_CONTROL_AUTO_NEGOTIATION_RESTART (1 << 9)
  176. #define MII_CONTROL_PHY_FULL_DUPLEX (1 << 8)
  177. #define MII_CONTROL_SPEED_SELECTION (1 << 6)
  178. //BCM54213PE_MII_STATUS
  179. #define MII_STATUS_LINK_UP (1 << 2)
  180. //BCM54213PE_CONTROL
  181. #define CONTROL_FULL_DUPLEX_CAPABILITY (1 << 9)
  182. #define CONTROL_HALF_DUPLEX_CAPABILITY (1 << 8)
  183. #define SPEED_1000 (1000)
  184. #define SPEED_100 (100)
  185. #define SPEED_10 (10)
  186. #endif/* __DRV_ETH_H__ */