You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ef10_regs.h 12KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364
  1. /****************************************************************************
  2. *
  3. * Driver for Solarflare network controllers and boards
  4. * Copyright 2012-2017 Solarflare Communications Inc.
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU General Public License as
  8. * published by the Free Software Foundation; either version 2 of the
  9. * License, or any later version.
  10. *
  11. * You can also choose to distribute this program under the terms of
  12. * the Unmodified Binary Distribution Licence (as given in the file
  13. * COPYING.UBDL), provided that you have satisfied its requirements.
  14. */
  15. #ifndef EFX_EF10_REGS_H
  16. #define EFX_EF10_REGS_H
  17. FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
  18. /** \file ef10_regs.h
  19. * EF10 hardware architecture definitions
  20. *
  21. * EF10 hardware architecture definitions have a name prefix following
  22. * the format:
  23. *
  24. * E<type>_<min-rev><max-rev>_
  25. *
  26. * The following <type> strings are used:
  27. *
  28. * MMIO register Host memory structure
  29. * Address R
  30. * Bitfield RF SF
  31. * Enumerator FE SE
  32. *
  33. * <min-rev> is the first revision to which the definition applies:
  34. *
  35. * D: Huntington A0
  36. *
  37. * If the definition has been changed or removed in later revisions
  38. * then <max-rev> is the last revision to which the definition applies;
  39. * otherwise it is "Z".
  40. */
  41. /**************************************************************************
  42. *
  43. * EF10 registers and descriptors
  44. *
  45. **************************************************************************
  46. */
  47. /* BIU_HW_REV_ID_REG: */
  48. #define ER_DZ_BIU_HW_REV_ID 0x00000000
  49. #define ERF_DZ_HW_REV_ID_LBN 0
  50. #define ERF_DZ_HW_REV_ID_WIDTH 32
  51. /* BIU_MC_SFT_STATUS_REG: */
  52. #define ER_DZ_BIU_MC_SFT_STATUS 0x00000010
  53. #define ER_DZ_BIU_MC_SFT_STATUS_STEP 4
  54. #define ER_DZ_BIU_MC_SFT_STATUS_ROWS 8
  55. #define ERF_DZ_MC_SFT_STATUS_LBN 0
  56. #define ERF_DZ_MC_SFT_STATUS_WIDTH 32
  57. /* BIU_INT_ISR_REG: */
  58. #define ER_DZ_BIU_INT_ISR 0x00000090
  59. #define ERF_DZ_ISR_REG_LBN 0
  60. #define ERF_DZ_ISR_REG_WIDTH 32
  61. /* MC_DB_LWRD_REG: */
  62. #define ER_DZ_MC_DB_LWRD 0x00000200
  63. #define ERF_DZ_MC_DOORBELL_L_LBN 0
  64. #define ERF_DZ_MC_DOORBELL_L_WIDTH 32
  65. /* MC_DB_HWRD_REG: */
  66. #define ER_DZ_MC_DB_HWRD 0x00000204
  67. #define ERF_DZ_MC_DOORBELL_H_LBN 0
  68. #define ERF_DZ_MC_DOORBELL_H_WIDTH 32
  69. /* EVQ_RPTR_REG: */
  70. #define ER_DZ_EVQ_RPTR 0x00000400
  71. #define ER_DZ_EVQ_RPTR_STEP 8192
  72. #define ER_DZ_EVQ_RPTR_ROWS 2048
  73. #define ERF_DZ_EVQ_RPTR_VLD_LBN 15
  74. #define ERF_DZ_EVQ_RPTR_VLD_WIDTH 1
  75. #define ERF_DZ_EVQ_RPTR_LBN 0
  76. #define ERF_DZ_EVQ_RPTR_WIDTH 15
  77. /* EVQ_TMR_REG: */
  78. #define ER_DZ_EVQ_TMR 0x00000420
  79. #define ER_DZ_EVQ_TMR_STEP 8192
  80. #define ER_DZ_EVQ_TMR_ROWS 2048
  81. #define ERF_DZ_TC_TIMER_MODE_LBN 14
  82. #define ERF_DZ_TC_TIMER_MODE_WIDTH 2
  83. #define ERF_DZ_TC_TIMER_VAL_LBN 0
  84. #define ERF_DZ_TC_TIMER_VAL_WIDTH 14
  85. /* RX_DESC_UPD_REG: */
  86. #define ER_DZ_RX_DESC_UPD 0x00000830
  87. #define ER_DZ_RX_DESC_UPD_STEP 8192
  88. #define ER_DZ_RX_DESC_UPD_ROWS 2048
  89. #define ERF_DZ_RX_DESC_WPTR_LBN 0
  90. #define ERF_DZ_RX_DESC_WPTR_WIDTH 12
  91. /* TX_DESC_UPD_REG: */
  92. #define ER_DZ_TX_DESC_UPD 0x00000a10
  93. #define ER_DZ_TX_DESC_UPD_STEP 8192
  94. #define ER_DZ_TX_DESC_UPD_ROWS 2048
  95. #define ERF_DZ_RSVD_LBN 76
  96. #define ERF_DZ_RSVD_WIDTH 20
  97. #define ERF_DZ_TX_DESC_WPTR_LBN 64
  98. #define ERF_DZ_TX_DESC_WPTR_WIDTH 12
  99. #define ERF_DZ_TX_DESC_HWORD_LBN 32
  100. #define ERF_DZ_TX_DESC_HWORD_WIDTH 32
  101. #define ERF_DZ_TX_DESC_LWORD_LBN 0
  102. #define ERF_DZ_TX_DESC_LWORD_WIDTH 32
  103. /* DRIVER_EV */
  104. #define ESF_DZ_DRV_CODE_LBN 60
  105. #define ESF_DZ_DRV_CODE_WIDTH 4
  106. #define ESF_DZ_DRV_SUB_CODE_LBN 56
  107. #define ESF_DZ_DRV_SUB_CODE_WIDTH 4
  108. #define ESE_DZ_DRV_TIMER_EV 3
  109. #define ESE_DZ_DRV_START_UP_EV 2
  110. #define ESE_DZ_DRV_WAKE_UP_EV 1
  111. #define ESF_DZ_DRV_SUB_DATA_LBN 0
  112. #define ESF_DZ_DRV_SUB_DATA_WIDTH 56
  113. #define ESF_DZ_DRV_EVQ_ID_LBN 0
  114. #define ESF_DZ_DRV_EVQ_ID_WIDTH 14
  115. #define ESF_DZ_DRV_TMR_ID_LBN 0
  116. #define ESF_DZ_DRV_TMR_ID_WIDTH 14
  117. /* EVENT_ENTRY */
  118. #define ESF_DZ_EV_CODE_LBN 60
  119. #define ESF_DZ_EV_CODE_WIDTH 4
  120. #define ESE_DZ_EV_CODE_MCDI_EV 12
  121. #define ESE_DZ_EV_CODE_DRIVER_EV 5
  122. #define ESE_DZ_EV_CODE_TX_EV 2
  123. #define ESE_DZ_EV_CODE_RX_EV 0
  124. #define ESE_DZ_OTHER other
  125. #define ESF_DZ_EV_DATA_LBN 0
  126. #define ESF_DZ_EV_DATA_WIDTH 60
  127. /* MC_EVENT */
  128. #define ESF_DZ_MC_CODE_LBN 60
  129. #define ESF_DZ_MC_CODE_WIDTH 4
  130. #define ESF_DZ_MC_OVERRIDE_HOLDOFF_LBN 59
  131. #define ESF_DZ_MC_OVERRIDE_HOLDOFF_WIDTH 1
  132. #define ESF_DZ_MC_DROP_EVENT_LBN 58
  133. #define ESF_DZ_MC_DROP_EVENT_WIDTH 1
  134. #define ESF_DZ_MC_SOFT_LBN 0
  135. #define ESF_DZ_MC_SOFT_WIDTH 58
  136. /* RX_EVENT */
  137. #define ESF_DZ_RX_CODE_LBN 60
  138. #define ESF_DZ_RX_CODE_WIDTH 4
  139. #define ESF_DZ_RX_OVERRIDE_HOLDOFF_LBN 59
  140. #define ESF_DZ_RX_OVERRIDE_HOLDOFF_WIDTH 1
  141. #define ESF_DZ_RX_DROP_EVENT_LBN 58
  142. #define ESF_DZ_RX_DROP_EVENT_WIDTH 1
  143. #define ESF_DZ_RX_EV_RSVD2_LBN 54
  144. #define ESF_DZ_RX_EV_RSVD2_WIDTH 4
  145. #define ESF_DZ_RX_EV_SOFT2_LBN 52
  146. #define ESF_DZ_RX_EV_SOFT2_WIDTH 2
  147. #define ESF_DZ_RX_DSC_PTR_LBITS_LBN 48
  148. #define ESF_DZ_RX_DSC_PTR_LBITS_WIDTH 4
  149. #define ESF_DZ_RX_L4_CLASS_LBN 45
  150. #define ESF_DZ_RX_L4_CLASS_WIDTH 3
  151. #define ESE_DZ_L4_CLASS_RSVD7 7
  152. #define ESE_DZ_L4_CLASS_RSVD6 6
  153. #define ESE_DZ_L4_CLASS_RSVD5 5
  154. #define ESE_DZ_L4_CLASS_RSVD4 4
  155. #define ESE_DZ_L4_CLASS_RSVD3 3
  156. #define ESE_DZ_L4_CLASS_UDP 2
  157. #define ESE_DZ_L4_CLASS_TCP 1
  158. #define ESE_DZ_L4_CLASS_UNKNOWN 0
  159. #define ESF_DZ_RX_L3_CLASS_LBN 42
  160. #define ESF_DZ_RX_L3_CLASS_WIDTH 3
  161. #define ESE_DZ_L3_CLASS_RSVD7 7
  162. #define ESE_DZ_L3_CLASS_IP6_FRAG 6
  163. #define ESE_DZ_L3_CLASS_ARP 5
  164. #define ESE_DZ_L3_CLASS_IP4_FRAG 4
  165. #define ESE_DZ_L3_CLASS_FCOE 3
  166. #define ESE_DZ_L3_CLASS_IP6 2
  167. #define ESE_DZ_L3_CLASS_IP4 1
  168. #define ESE_DZ_L3_CLASS_UNKNOWN 0
  169. #define ESF_DZ_RX_ETH_TAG_CLASS_LBN 39
  170. #define ESF_DZ_RX_ETH_TAG_CLASS_WIDTH 3
  171. #define ESE_DZ_ETH_TAG_CLASS_RSVD7 7
  172. #define ESE_DZ_ETH_TAG_CLASS_RSVD6 6
  173. #define ESE_DZ_ETH_TAG_CLASS_RSVD5 5
  174. #define ESE_DZ_ETH_TAG_CLASS_RSVD4 4
  175. #define ESE_DZ_ETH_TAG_CLASS_RSVD3 3
  176. #define ESE_DZ_ETH_TAG_CLASS_VLAN2 2
  177. #define ESE_DZ_ETH_TAG_CLASS_VLAN1 1
  178. #define ESE_DZ_ETH_TAG_CLASS_NONE 0
  179. #define ESF_DZ_RX_ETH_BASE_CLASS_LBN 36
  180. #define ESF_DZ_RX_ETH_BASE_CLASS_WIDTH 3
  181. #define ESE_DZ_ETH_BASE_CLASS_LLC_SNAP 2
  182. #define ESE_DZ_ETH_BASE_CLASS_LLC 1
  183. #define ESE_DZ_ETH_BASE_CLASS_ETH2 0
  184. #define ESF_DZ_RX_MAC_CLASS_LBN 35
  185. #define ESF_DZ_RX_MAC_CLASS_WIDTH 1
  186. #define ESE_DZ_MAC_CLASS_MCAST 1
  187. #define ESE_DZ_MAC_CLASS_UCAST 0
  188. #define ESF_DZ_RX_EV_SOFT1_LBN 32
  189. #define ESF_DZ_RX_EV_SOFT1_WIDTH 3
  190. #define ESF_DZ_RX_EV_RSVD1_LBN 31
  191. #define ESF_DZ_RX_EV_RSVD1_WIDTH 1
  192. #define ESF_DZ_RX_ABORT_LBN 30
  193. #define ESF_DZ_RX_ABORT_WIDTH 1
  194. #define ESF_DZ_RX_ECC_ERR_LBN 29
  195. #define ESF_DZ_RX_ECC_ERR_WIDTH 1
  196. #define ESF_DZ_RX_CRC1_ERR_LBN 28
  197. #define ESF_DZ_RX_CRC1_ERR_WIDTH 1
  198. #define ESF_DZ_RX_CRC0_ERR_LBN 27
  199. #define ESF_DZ_RX_CRC0_ERR_WIDTH 1
  200. #define ESF_DZ_RX_TCPUDP_CKSUM_ERR_LBN 26
  201. #define ESF_DZ_RX_TCPUDP_CKSUM_ERR_WIDTH 1
  202. #define ESF_DZ_RX_IPCKSUM_ERR_LBN 25
  203. #define ESF_DZ_RX_IPCKSUM_ERR_WIDTH 1
  204. #define ESF_DZ_RX_ECRC_ERR_LBN 24
  205. #define ESF_DZ_RX_ECRC_ERR_WIDTH 1
  206. #define ESF_DZ_RX_QLABEL_LBN 16
  207. #define ESF_DZ_RX_QLABEL_WIDTH 5
  208. #define ESF_DZ_RX_PARSE_INCOMPLETE_LBN 15
  209. #define ESF_DZ_RX_PARSE_INCOMPLETE_WIDTH 1
  210. #define ESF_DZ_RX_CONT_LBN 14
  211. #define ESF_DZ_RX_CONT_WIDTH 1
  212. #define ESF_DZ_RX_BYTES_LBN 0
  213. #define ESF_DZ_RX_BYTES_WIDTH 14
  214. /* RX_KER_DESC */
  215. #define ESF_DZ_RX_KER_RESERVED_LBN 62
  216. #define ESF_DZ_RX_KER_RESERVED_WIDTH 2
  217. #define ESF_DZ_RX_KER_BYTE_CNT_LBN 48
  218. #define ESF_DZ_RX_KER_BYTE_CNT_WIDTH 14
  219. #define ESF_DZ_RX_KER_BUF_ADDR_LBN 0
  220. #define ESF_DZ_RX_KER_BUF_ADDR_WIDTH 48
  221. /* TX_CSUM_TSTAMP_DESC */
  222. #define ESF_DZ_TX_DESC_IS_OPT_LBN 63
  223. #define ESF_DZ_TX_DESC_IS_OPT_WIDTH 1
  224. #define ESF_DZ_TX_OPTION_TYPE_LBN 60
  225. #define ESF_DZ_TX_OPTION_TYPE_WIDTH 3
  226. #define ESE_DZ_TX_OPTION_DESC_TSO 7
  227. #define ESE_DZ_TX_OPTION_DESC_VLAN 6
  228. #define ESE_DZ_TX_OPTION_DESC_CRC_CSUM 0
  229. #define ESF_DZ_TX_TIMESTAMP_LBN 5
  230. #define ESF_DZ_TX_TIMESTAMP_WIDTH 1
  231. #define ESF_DZ_TX_OPTION_CRC_MODE_LBN 2
  232. #define ESF_DZ_TX_OPTION_CRC_MODE_WIDTH 3
  233. #define ESE_DZ_TX_OPTION_CRC_FCOIP_MPA 5
  234. #define ESE_DZ_TX_OPTION_CRC_FCOIP_FCOE 4
  235. #define ESE_DZ_TX_OPTION_CRC_ISCSI_HDR_AND_PYLD 3
  236. #define ESE_DZ_TX_OPTION_CRC_ISCSI_HDR 2
  237. #define ESE_DZ_TX_OPTION_CRC_FCOE 1
  238. #define ESE_DZ_TX_OPTION_CRC_OFF 0
  239. #define ESF_DZ_TX_OPTION_UDP_TCP_CSUM_LBN 1
  240. #define ESF_DZ_TX_OPTION_UDP_TCP_CSUM_WIDTH 1
  241. #define ESF_DZ_TX_OPTION_IP_CSUM_LBN 0
  242. #define ESF_DZ_TX_OPTION_IP_CSUM_WIDTH 1
  243. /* TX_EVENT */
  244. #define ESF_DZ_TX_CODE_LBN 60
  245. #define ESF_DZ_TX_CODE_WIDTH 4
  246. #define ESF_DZ_TX_OVERRIDE_HOLDOFF_LBN 59
  247. #define ESF_DZ_TX_OVERRIDE_HOLDOFF_WIDTH 1
  248. #define ESF_DZ_TX_DROP_EVENT_LBN 58
  249. #define ESF_DZ_TX_DROP_EVENT_WIDTH 1
  250. #define ESF_DZ_TX_EV_RSVD_LBN 48
  251. #define ESF_DZ_TX_EV_RSVD_WIDTH 10
  252. #define ESF_DZ_TX_SOFT2_LBN 32
  253. #define ESF_DZ_TX_SOFT2_WIDTH 16
  254. #define ESF_DZ_TX_CAN_MERGE_LBN 31
  255. #define ESF_DZ_TX_CAN_MERGE_WIDTH 1
  256. #define ESF_DZ_TX_SOFT1_LBN 24
  257. #define ESF_DZ_TX_SOFT1_WIDTH 7
  258. #define ESF_DZ_TX_QLABEL_LBN 16
  259. #define ESF_DZ_TX_QLABEL_WIDTH 5
  260. #define ESF_DZ_TX_DESCR_INDX_LBN 0
  261. #define ESF_DZ_TX_DESCR_INDX_WIDTH 16
  262. /* TX_KER_DESC */
  263. #define ESF_DZ_TX_KER_TYPE_LBN 63
  264. #define ESF_DZ_TX_KER_TYPE_WIDTH 1
  265. #define ESF_DZ_TX_KER_CONT_LBN 62
  266. #define ESF_DZ_TX_KER_CONT_WIDTH 1
  267. #define ESF_DZ_TX_KER_BYTE_CNT_LBN 48
  268. #define ESF_DZ_TX_KER_BYTE_CNT_WIDTH 14
  269. #define ESF_DZ_TX_KER_BUF_ADDR_LBN 0
  270. #define ESF_DZ_TX_KER_BUF_ADDR_WIDTH 48
  271. /* TX_PIO_DESC */
  272. #define ESF_DZ_TX_PIO_TYPE_LBN 63
  273. #define ESF_DZ_TX_PIO_TYPE_WIDTH 1
  274. #define ESF_DZ_TX_PIO_OPT_LBN 60
  275. #define ESF_DZ_TX_PIO_OPT_WIDTH 3
  276. #define ESF_DZ_TX_PIO_CONT_LBN 59
  277. #define ESF_DZ_TX_PIO_CONT_WIDTH 1
  278. #define ESF_DZ_TX_PIO_BYTE_CNT_LBN 32
  279. #define ESF_DZ_TX_PIO_BYTE_CNT_WIDTH 12
  280. #define ESF_DZ_TX_PIO_BUF_ADDR_LBN 0
  281. #define ESF_DZ_TX_PIO_BUF_ADDR_WIDTH 12
  282. /* TX_TSO_DESC */
  283. #define ESF_DZ_TX_DESC_IS_OPT_LBN 63
  284. #define ESF_DZ_TX_DESC_IS_OPT_WIDTH 1
  285. #define ESF_DZ_TX_OPTION_TYPE_LBN 60
  286. #define ESF_DZ_TX_OPTION_TYPE_WIDTH 3
  287. #define ESE_DZ_TX_OPTION_DESC_TSO 7
  288. #define ESE_DZ_TX_OPTION_DESC_VLAN 6
  289. #define ESE_DZ_TX_OPTION_DESC_CRC_CSUM 0
  290. #define ESF_DZ_TX_TSO_TCP_FLAGS_LBN 48
  291. #define ESF_DZ_TX_TSO_TCP_FLAGS_WIDTH 8
  292. #define ESF_DZ_TX_TSO_IP_ID_LBN 32
  293. #define ESF_DZ_TX_TSO_IP_ID_WIDTH 16
  294. #define ESF_DZ_TX_TSO_TCP_SEQNO_LBN 0
  295. #define ESF_DZ_TX_TSO_TCP_SEQNO_WIDTH 32
  296. /*************************************************************************/
  297. /* TX_DESC_UPD_REG: Transmit descriptor update register.
  298. * We may write just one dword of these registers.
  299. */
  300. #define ER_DZ_TX_DESC_UPD_DWORD (ER_DZ_TX_DESC_UPD + 2 * 4)
  301. #define ERF_DZ_TX_DESC_WPTR_DWORD_LBN (ERF_DZ_TX_DESC_WPTR_LBN - 2 * 32)
  302. #define ERF_DZ_TX_DESC_WPTR_DWORD_WIDTH ERF_DZ_TX_DESC_WPTR_WIDTH
  303. /* The workaround for bug 35388 requires multiplexing writes through
  304. * the TX_DESC_UPD_DWORD address.
  305. * TX_DESC_UPD: 0ppppppppppp (bit 11 lost)
  306. * EVQ_RPTR: 1000hhhhhhhh, 1001llllllll (split into high and low bits)
  307. * EVQ_TMR: 11mmvvvvvvvv (bits 8:13 of value lost)
  308. */
  309. #define ER_DD_EVQ_INDIRECT ER_DZ_TX_DESC_UPD_DWORD
  310. #define ERF_DD_EVQ_IND_RPTR_FLAGS_LBN 8
  311. #define ERF_DD_EVQ_IND_RPTR_FLAGS_WIDTH 4
  312. #define EFE_DD_EVQ_IND_RPTR_FLAGS_HIGH 8
  313. #define EFE_DD_EVQ_IND_RPTR_FLAGS_LOW 9
  314. #define ERF_DD_EVQ_IND_RPTR_LBN 0
  315. #define ERF_DD_EVQ_IND_RPTR_WIDTH 8
  316. #define ERF_DD_EVQ_IND_TIMER_FLAGS_LBN 10
  317. #define ERF_DD_EVQ_IND_TIMER_FLAGS_WIDTH 2
  318. #define EFE_DD_EVQ_IND_TIMER_FLAGS 3
  319. #define ERF_DD_EVQ_IND_TIMER_MODE_LBN 8
  320. #define ERF_DD_EVQ_IND_TIMER_MODE_WIDTH 2
  321. #define ERF_DD_EVQ_IND_TIMER_VAL_LBN 0
  322. #define ERF_DD_EVQ_IND_TIMER_VAL_WIDTH 8
  323. /* TX_PIOBUF
  324. * PIO buffer aperture (paged)
  325. */
  326. #define ER_DZ_TX_PIOBUF 4096
  327. #define ER_DZ_TX_PIOBUF_SIZE 2048
  328. /* RX packet prefix */
  329. #define ES_DZ_RX_PREFIX_HASH_OFST 0
  330. #define ES_DZ_RX_PREFIX_VLAN1_OFST 4
  331. #define ES_DZ_RX_PREFIX_VLAN2_OFST 6
  332. #define ES_DZ_RX_PREFIX_PKTLEN_OFST 8
  333. #define ES_DZ_RX_PREFIX_TSTAMP_OFST 10
  334. #define ES_DZ_RX_PREFIX_SIZE 14
  335. #endif /* EFX_EF10_REGS_H */