an8855.h 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (C) 2023 Min Yao <[email protected]>
  4. * Copyright (C) 2024 Christian Marangi <[email protected]>
  5. */
  6. #ifndef __AN8855_H
  7. #define __AN8855_H
  8. #include <linux/bitfield.h>
  9. #define AN8855_NUM_PORTS 6
  10. #define AN8855_CPU_PORT 5
  11. #define AN8855_NUM_FDB_RECORDS 2048
  12. #define AN8855_GPHY_SMI_ADDR_DEFAULT 1
  13. #define AN8855_PORT_VID_DEFAULT 0
  14. #define MTK_TAG_LEN 4
  15. #define AN8855_MAX_MTU (15360 - ETH_HLEN - ETH_FCS_LEN - MTK_TAG_LEN)
  16. #define AN8855_L2_AGING_MS_CONSTANT 1024
  17. #define AN8855_PHY_FLAGS_EN_CALIBRATION BIT(0)
  18. /* AN8855_SCU 0x10000000 */
  19. #define AN8855_RG_GPIO_LED_MODE 0x10000054
  20. #define AN8855_RG_GPIO_LED_SEL(i) (0x10000000 + (0x0058 + ((i) * 4)))
  21. #define AN8855_RG_INTB_MODE 0x10000080
  22. #define AN8855_RG_RGMII_TXCK_C 0x100001d0
  23. #define AN8855_PKG_SEL 0x10000094
  24. #define AN8855_PAG_SEL_AN8855H 0x2
  25. /* Register for hw trap status */
  26. #define AN8855_HWTRAP 0x1000009c
  27. #define AN8855_RG_GPIO_L_INV 0x10000010
  28. #define AN8855_RG_GPIO_CTRL 0x1000a300
  29. #define AN8855_RG_GPIO_DATA 0x1000a304
  30. #define AN8855_RG_GPIO_OE 0x1000a314
  31. #define AN8855_CREV 0x10005000
  32. #define AN8855_ID 0x8855
  33. /* Register for system reset */
  34. #define AN8855_RST_CTRL 0x100050c0
  35. #define AN8855_SYS_CTRL_SYS_RST BIT(31)
  36. #define AN8855_INT_MASK 0x100050f0
  37. #define AN8855_INT_SYS BIT(15)
  38. #define AN8855_RG_CLK_CPU_ICG 0x10005034
  39. #define AN8855_MCU_ENABLE BIT(3)
  40. #define AN8855_RG_TIMER_CTL 0x1000a100
  41. #define AN8855_WDOG_ENABLE BIT(25)
  42. #define AN8855_RG_GDMP_RAM 0x10010000
  43. /* Registers to mac forward control for unknown frames */
  44. #define AN8855_MFC 0x10200010
  45. #define AN8855_CPU_EN BIT(15)
  46. #define AN8855_CPU_PORT_IDX GENMASK(12, 8)
  47. #define AN8855_PAC 0x10200024
  48. #define AN8855_TAG_PAE_MANG_FR BIT(30)
  49. #define AN8855_TAG_PAE_BPDU_FR BIT(28)
  50. #define AN8855_TAG_PAE_EG_TAG GENMASK(27, 25)
  51. #define AN8855_TAG_PAE_LKY_VLAN BIT(24)
  52. #define AN8855_TAG_PAE_PRI_HIGH BIT(23)
  53. #define AN8855_TAG_PAE_MIR GENMASK(20, 19)
  54. #define AN8855_TAG_PAE_PORT_FW GENMASK(18, 16)
  55. #define AN8855_PAE_MANG_FR BIT(14)
  56. #define AN8855_PAE_BPDU_FR BIT(12)
  57. #define AN8855_PAE_EG_TAG GENMASK(11, 9)
  58. #define AN8855_PAE_LKY_VLAN BIT(8)
  59. #define AN8855_PAE_PRI_HIGH BIT(7)
  60. #define AN8855_PAE_MIR GENMASK(4, 3)
  61. #define AN8855_PAE_PORT_FW GENMASK(2, 0)
  62. #define AN8855_RGAC1 0x10200028
  63. #define AN8855_R02_MANG_FR BIT(30)
  64. #define AN8855_R02_BPDU_FR BIT(28)
  65. #define AN8855_R02_EG_TAG GENMASK(27, 25)
  66. #define AN8855_R02_LKY_VLAN BIT(24)
  67. #define AN8855_R02_PRI_HIGH BIT(23)
  68. #define AN8855_R02_MIR GENMASK(20, 19)
  69. #define AN8855_R02_PORT_FW GENMASK(18, 16)
  70. #define AN8855_R01_MANG_FR BIT(14)
  71. #define AN8855_R01_BPDU_FR BIT(12)
  72. #define AN8855_R01_EG_TAG GENMASK(11, 9)
  73. #define AN8855_R01_LKY_VLAN BIT(8)
  74. #define AN8855_R01_PRI_HIGH BIT(7)
  75. #define AN8855_R01_MIR GENMASK(4, 3)
  76. #define AN8855_R01_PORT_FW GENMASK(2, 0)
  77. #define AN8855_RGAC2 0x1020002c
  78. #define AN8855_R0E_MANG_FR BIT(30)
  79. #define AN8855_R0E_BPDU_FR BIT(28)
  80. #define AN8855_R0E_EG_TAG GENMASK(27, 25)
  81. #define AN8855_R0E_LKY_VLAN BIT(24)
  82. #define AN8855_R0E_PRI_HIGH BIT(23)
  83. #define AN8855_R0E_MIR GENMASK(20, 19)
  84. #define AN8855_R0E_PORT_FW GENMASK(18, 16)
  85. #define AN8855_R03_MANG_FR BIT(14)
  86. #define AN8855_R03_BPDU_FR BIT(12)
  87. #define AN8855_R03_EG_TAG GENMASK(11, 9)
  88. #define AN8855_R03_LKY_VLAN BIT(8)
  89. #define AN8855_R03_PRI_HIGH BIT(7)
  90. #define AN8855_R03_MIR GENMASK(4, 3)
  91. #define AN8855_R03_PORT_FW GENMASK(2, 0)
  92. #define AN8855_AAC 0x102000a0
  93. #define AN8855_MAC_AUTO_FLUSH BIT(28)
  94. /* Control Address Table Age time.
  95. * (AN8855_AGE_CNT + 1) * ( AN8855_AGE_UNIT + 1 ) * AN8855_L2_AGING_MS_CONSTANT
  96. */
  97. #define AN8855_AGE_CNT GENMASK(20, 12)
  98. /* Value in seconds. Value is always incremented of 1 */
  99. #define AN8855_AGE_UNIT GENMASK(10, 0)
  100. /* Registers for ARL Unknown Unicast Forward control */
  101. #define AN8855_UNUF 0x102000b4
  102. /* Registers for ARL Unknown Multicast Forward control */
  103. #define AN8855_UNMF 0x102000b8
  104. /* Registers for ARL Broadcast forward control */
  105. #define AN8855_BCF 0x102000bc
  106. /* Registers for port address age disable */
  107. #define AN8855_AGDIS 0x102000c0
  108. /* Registers for mirror port control */
  109. #define AN8855_MIR 0x102000cc
  110. #define AN8855_MIRROR_EN BIT(7)
  111. #define AN8855_MIRROR_PORT GENMASK(4, 0)
  112. /* Registers for BPDU and PAE frame control*/
  113. #define AN8855_BPC 0x102000d0
  114. #define AN8855_BPDU_MANG_FR BIT(14)
  115. #define AN8855_BPDU_BPDU_FR BIT(12)
  116. #define AN8855_BPDU_EG_TAG GENMASK(11, 9)
  117. #define AN8855_BPDU_LKY_VLAN BIT(8)
  118. #define AN8855_BPDU_PRI_HIGH BIT(7)
  119. #define AN8855_BPDU_MIR GENMASK(4, 3)
  120. #define AN8855_BPDU_PORT_FW GENMASK(2, 0)
  121. /* Registers for IP Unknown Multicast Forward control */
  122. #define AN8855_UNIPMF 0x102000dc
  123. enum an8855_bpdu_port_fw {
  124. AN8855_BPDU_FOLLOW_MFC = 0,
  125. AN8855_BPDU_CPU_EXCLUDE = 4,
  126. AN8855_BPDU_CPU_INCLUDE = 5,
  127. AN8855_BPDU_CPU_ONLY = 6,
  128. AN8855_BPDU_DROP = 7,
  129. };
  130. /* Register for address table control */
  131. #define AN8855_ATC 0x10200300
  132. #define AN8855_ATC_BUSY BIT(31)
  133. #define AN8855_ATC_HASH GENMASK(24, 16)
  134. #define AN8855_ATC_HIT GENMASK(15, 12)
  135. #define AN8855_ATC_MAT_MASK GENMASK(11, 7)
  136. #define AN8855_ATC_MAT(x) FIELD_PREP(AN8855_ATC_MAT_MASK, x)
  137. #define AN8855_ATC_SAT GENMASK(5, 4)
  138. #define AN8855_ATC_CMD GENMASK(2, 0)
  139. enum an8855_fdb_mat_cmds {
  140. AND8855_FDB_MAT_ALL = 0,
  141. AND8855_FDB_MAT_MAC, /* All MAC address */
  142. AND8855_FDB_MAT_DYNAMIC_MAC, /* All Dynamic MAC address */
  143. AND8855_FDB_MAT_STATIC_MAC, /* All Static Mac Address */
  144. AND8855_FDB_MAT_DIP, /* All DIP/GA address */
  145. AND8855_FDB_MAT_DIP_IPV4, /* All DIP/GA IPv4 address */
  146. AND8855_FDB_MAT_DIP_IPV6, /* All DIP/GA IPv6 address */
  147. AND8855_FDB_MAT_DIP_SIP, /* All DIP_SIP address */
  148. AND8855_FDB_MAT_DIP_SIP_IPV4, /* All DIP_SIP IPv4 address */
  149. AND8855_FDB_MAT_DIP_SIP_IPV6, /* All DIP_SIP IPv6 address */
  150. AND8855_FDB_MAT_MAC_CVID, /* All MAC address with CVID */
  151. AND8855_FDB_MAT_MAC_FID, /* All MAC address with Filter ID */
  152. AND8855_FDB_MAT_MAC_PORT, /* All MAC address with port */
  153. AND8855_FDB_MAT_DIP_SIP_DIP_IPV4, /* All DIP_SIP address with DIP_IPV4 */
  154. AND8855_FDB_MAT_DIP_SIP_SIP_IPV4, /* All DIP_SIP address with SIP_IPV4 */
  155. AND8855_FDB_MAT_DIP_SIP_DIP_IPV6, /* All DIP_SIP address with DIP_IPV6 */
  156. AND8855_FDB_MAT_DIP_SIP_SIP_IPV6, /* All DIP_SIP address with SIP_IPV6 */
  157. /* All MAC address with MAC type (dynamic or static) with CVID */
  158. AND8855_FDB_MAT_MAC_TYPE_CVID,
  159. /* All MAC address with MAC type (dynamic or static) with Filter ID */
  160. AND8855_FDB_MAT_MAC_TYPE_FID,
  161. /* All MAC address with MAC type (dynamic or static) with port */
  162. AND8855_FDB_MAT_MAC_TYPE_PORT,
  163. };
  164. enum an8855_fdb_cmds {
  165. AN8855_FDB_READ = 0,
  166. AN8855_FDB_WRITE = 1,
  167. AN8855_FDB_FLUSH = 2,
  168. AN8855_FDB_START = 4,
  169. AN8855_FDB_NEXT = 5,
  170. };
  171. /* Registers for address table access */
  172. #define AN8855_ATA1 0x10200304
  173. #define AN8855_ATA1_MAC0 GENMASK(31, 24)
  174. #define AN8855_ATA1_MAC1 GENMASK(23, 16)
  175. #define AN8855_ATA1_MAC2 GENMASK(15, 8)
  176. #define AN8855_ATA1_MAC3 GENMASK(7, 0)
  177. #define AN8855_ATA2 0x10200308
  178. #define AN8855_ATA2_MAC4 GENMASK(31, 24)
  179. #define AN8855_ATA2_MAC5 GENMASK(23, 16)
  180. #define AN8855_ATA2_UNAUTH BIT(10)
  181. #define AN8855_ATA2_TYPE BIT(9) /* 1: dynamic, 0: static */
  182. #define AN8855_ATA2_AGE GENMASK(8, 0)
  183. /* Register for address table write data */
  184. #define AN8855_ATWD 0x10200324
  185. #define AN8855_ATWD_FID GENMASK(31, 28)
  186. #define AN8855_ATWD_VID GENMASK(27, 16)
  187. #define AN8855_ATWD_IVL BIT(15)
  188. #define AN8855_ATWD_EG_TAG GENMASK(14, 12)
  189. #define AN8855_ATWD_SA_MIR GENMASK(9, 8)
  190. #define AN8855_ATWD_SA_FWD GENMASK(7, 5)
  191. #define AN8855_ATWD_UPRI GENMASK(4, 2)
  192. #define AN8855_ATWD_LEAKY BIT(1)
  193. #define AN8855_ATWD_VLD BIT(0) /* vid LOAD */
  194. #define AN8855_ATWD2 0x10200328
  195. #define AN8855_ATWD2_PORT GENMASK(7, 0)
  196. /* Registers for table search read address */
  197. #define AN8855_ATRDS 0x10200330
  198. #define AN8855_ATRD_SEL GENMASK(1, 0)
  199. #define AN8855_ATRD0 0x10200334
  200. #define AN8855_ATRD0_FID GENMASK(28, 25)
  201. #define AN8855_ATRD0_VID GENMASK(21, 10)
  202. #define AN8855_ATRD0_IVL BIT(9)
  203. #define AN8855_ATRD0_TYPE GENMASK(4, 3)
  204. #define AN8855_ATRD0_ARP GENMASK(2, 1)
  205. #define AN8855_ATRD0_LIVE BIT(0)
  206. #define AN8855_ATRD1 0x10200338
  207. #define AN8855_ATRD1_MAC4 GENMASK(31, 24)
  208. #define AN8855_ATRD1_MAC5 GENMASK(23, 16)
  209. #define AN8855_ATRD1_AGING GENMASK(11, 3)
  210. #define AN8855_ATRD2 0x1020033c
  211. #define AN8855_ATRD2_MAC0 GENMASK(31, 24)
  212. #define AN8855_ATRD2_MAC1 GENMASK(23, 16)
  213. #define AN8855_ATRD2_MAC2 GENMASK(15, 8)
  214. #define AN8855_ATRD2_MAC3 GENMASK(7, 0)
  215. #define AN8855_ATRD3 0x10200340
  216. #define AN8855_ATRD3_PORTMASK GENMASK(7, 0)
  217. enum an8855_fdb_type {
  218. AN8855_MAC_TB_TY_MAC = 0,
  219. AN8855_MAC_TB_TY_DIP = 1,
  220. AN8855_MAC_TB_TY_DIP_SIP = 2,
  221. };
  222. /* Register for vlan table control */
  223. #define AN8855_VTCR 0x10200600
  224. #define AN8855_VTCR_BUSY BIT(31)
  225. #define AN8855_VTCR_FUNC GENMASK(15, 12)
  226. #define AN8855_VTCR_VID GENMASK(11, 0)
  227. enum an8855_vlan_cmd {
  228. /* Read/Write the specified VID entry from VAWD register based
  229. * on VID.
  230. */
  231. AN8855_VTCR_RD_VID = 0,
  232. AN8855_VTCR_WR_VID = 1,
  233. };
  234. /* Register for setup vlan write data */
  235. #define AN8855_VAWD0 0x10200604
  236. /* VLAN Member Control */
  237. #define AN8855_VA0_PORT GENMASK(31, 26)
  238. /* Egress Tag Control */
  239. #define AN8855_VA0_ETAG GENMASK(23, 12)
  240. #define AN8855_VA0_ETAG_PORT GENMASK(13, 12)
  241. #define AN8855_VA0_ETAG_PORT_SHIFT(port) ((port) * 2)
  242. #define AN8855_VA0_ETAG_PORT_MASK(port) (AN8855_VA0_ETAG_PORT << \
  243. AN8855_VA0_ETAG_PORT_SHIFT(port))
  244. #define AN8855_VA0_ETAG_PORT_VAL(port, val) (FIELD_PREP(AN8855_VA0_ETAG_PORT, (val)) << \
  245. AN8855_VA0_ETAG_PORT_SHIFT(port))
  246. #define AN8855_VA0_EG_CON BIT(11)
  247. #define AN8855_VA0_VTAG_EN BIT(10) /* Per VLAN Egress Tag Control */
  248. #define AN8855_VA0_IVL_MAC BIT(5) /* Independent VLAN Learning */
  249. #define AN8855_VA0_FID GENMASK(4, 1)
  250. #define AN8855_VA0_VLAN_VALID BIT(0) /* VLAN Entry Valid */
  251. #define AN8855_VAWD1 0x10200608
  252. #define AN8855_VA1_PORT_STAG BIT(1)
  253. enum an8855_fid {
  254. AN8855_FID_STANDALONE = 0,
  255. AN8855_FID_BRIDGED = 1,
  256. };
  257. /* Same register field of VAWD0 */
  258. #define AN8855_VARD0 0x10200618
  259. enum an8855_vlan_egress_attr {
  260. AN8855_VLAN_EGRESS_UNTAG = 0,
  261. AN8855_VLAN_EGRESS_TAG = 2,
  262. AN8855_VLAN_EGRESS_STACK = 3,
  263. };
  264. /* Register for port STP state control */
  265. #define AN8855_SSP_P(x) (0x10208000 + ((x) * 0x200))
  266. /* Up to 16 FID supported, each with the same mask */
  267. #define AN8855_FID_PST GENMASK(1, 0)
  268. #define AN8855_FID_PST_SHIFT(fid) (2 * (fid))
  269. #define AN8855_FID_PST_MASK(fid) (AN8855_FID_PST << \
  270. AN8855_FID_PST_SHIFT(fid))
  271. #define AN8855_FID_PST_VAL(fid, val) (FIELD_PREP(AN8855_FID_PST, (val)) << \
  272. AN8855_FID_PST_SHIFT(fid))
  273. enum an8855_stp_state {
  274. AN8855_STP_DISABLED = 0,
  275. AN8855_STP_BLOCKING = 1,
  276. AN8855_STP_LISTENING = AN8855_STP_BLOCKING,
  277. AN8855_STP_LEARNING = 2,
  278. AN8855_STP_FORWARDING = 3
  279. };
  280. /* Register for port control */
  281. #define AN8855_PCR_P(x) (0x10208004 + ((x) * 0x200))
  282. #define AN8855_EG_TAG GENMASK(29, 28)
  283. #define AN8855_PORT_PRI GENMASK(26, 24)
  284. #define AN8855_PORT_TX_MIR BIT(20)
  285. #define AN8855_PORT_RX_MIR BIT(16)
  286. #define AN8855_PORT_VLAN GENMASK(1, 0)
  287. enum an8855_port_mode {
  288. /* Port Matrix Mode: Frames are forwarded by the PCR_MATRIX members. */
  289. AN8855_PORT_MATRIX_MODE = 0,
  290. /* Fallback Mode: Forward received frames with ingress ports that do
  291. * not belong to the VLAN member. Frames whose VID is not listed on
  292. * the VLAN table are forwarded by the PCR_MATRIX members.
  293. */
  294. AN8855_PORT_FALLBACK_MODE = 1,
  295. /* Check Mode: Forward received frames whose ingress do not
  296. * belong to the VLAN member. Discard frames if VID ismiddes on the
  297. * VLAN table.
  298. */
  299. AN8855_PORT_CHECK_MODE = 2,
  300. /* Security Mode: Discard any frame due to ingress membership
  301. * violation or VID missed on the VLAN table.
  302. */
  303. AN8855_PORT_SECURITY_MODE = 3,
  304. };
  305. /* Register for port security control */
  306. #define AN8855_PSC_P(x) (0x1020800c + ((x) * 0x200))
  307. #define AN8855_SA_DIS BIT(4)
  308. /* Register for port vlan control */
  309. #define AN8855_PVC_P(x) (0x10208010 + ((x) * 0x200))
  310. #define AN8855_PORT_SPEC_REPLACE_MODE BIT(11)
  311. #define AN8855_PVC_EG_TAG GENMASK(10, 8)
  312. #define AN8855_VLAN_ATTR GENMASK(7, 6)
  313. #define AN8855_PORT_SPEC_TAG BIT(5)
  314. #define AN8855_ACC_FRM GENMASK(1, 0)
  315. enum an8855_vlan_port_eg_tag {
  316. AN8855_VLAN_EG_DISABLED = 0,
  317. AN8855_VLAN_EG_CONSISTENT = 1,
  318. AN8855_VLAN_EG_UNTAGGED = 4,
  319. AN8855_VLAN_EG_SWAP = 5,
  320. AN8855_VLAN_EG_TAGGED = 6,
  321. AN8855_VLAN_EG_STACK = 7,
  322. };
  323. enum an8855_vlan_port_attr {
  324. AN8855_VLAN_USER = 0,
  325. AN8855_VLAN_STACK = 1,
  326. AN8855_VLAN_TRANSPARENT = 3,
  327. };
  328. enum an8855_vlan_port_acc_frm {
  329. AN8855_VLAN_ACC_ALL = 0,
  330. AN8855_VLAN_ACC_TAGGED = 1,
  331. AN8855_VLAN_ACC_UNTAGGED = 2,
  332. };
  333. #define AN8855_PPBV1_P(x) (0x10208014 + ((x) * 0x200))
  334. #define AN8855_PPBV_G0_PORT_VID GENMASK(11, 0)
  335. #define AN8855_PORTMATRIX_P(x) (0x10208044 + ((x) * 0x200))
  336. #define AN8855_PORTMATRIX GENMASK(5, 0)
  337. /* Port matrix without the CPU port that should never be removed */
  338. #define AN8855_USER_PORTMATRIX GENMASK(4, 0)
  339. /* Register for port PVID */
  340. #define AN8855_PVID_P(x) (0x10208048 + ((x) * 0x200))
  341. #define AN8855_G0_PORT_VID GENMASK(11, 0)
  342. /* Register for port MAC control register */
  343. #define AN8855_PMCR_P(x) (0x10210000 + ((x) * 0x200))
  344. #define AN8855_PMCR_FORCE_MODE BIT(31)
  345. #define AN8855_PMCR_FORCE_SPEED GENMASK(30, 28)
  346. #define AN8855_PMCR_FORCE_SPEED_5000 FIELD_PREP_CONST(AN8855_PMCR_FORCE_SPEED, 0x4)
  347. #define AN8855_PMCR_FORCE_SPEED_2500 FIELD_PREP_CONST(AN8855_PMCR_FORCE_SPEED, 0x3)
  348. #define AN8855_PMCR_FORCE_SPEED_1000 FIELD_PREP_CONST(AN8855_PMCR_FORCE_SPEED, 0x2)
  349. #define AN8855_PMCR_FORCE_SPEED_100 FIELD_PREP_CONST(AN8855_PMCR_FORCE_SPEED, 0x1)
  350. #define AN8855_PMCR_FORCE_SPEED_10 FIELD_PREP_CONST(AN8855_PMCR_FORCE_SPEED, 0x1)
  351. #define AN8855_PMCR_FORCE_FDX BIT(25)
  352. #define AN8855_PMCR_FORCE_LNK BIT(24)
  353. #define AN8855_PMCR_IFG_XMIT GENMASK(21, 20)
  354. #define AN8855_PMCR_EXT_PHY BIT(19)
  355. #define AN8855_PMCR_MAC_MODE BIT(18)
  356. #define AN8855_PMCR_TX_EN BIT(16)
  357. #define AN8855_PMCR_RX_EN BIT(15)
  358. #define AN8855_PMCR_BACKOFF_EN BIT(12)
  359. #define AN8855_PMCR_BACKPR_EN BIT(11)
  360. #define AN8855_PMCR_FORCE_EEE5G BIT(9)
  361. #define AN8855_PMCR_FORCE_EEE2P5G BIT(8)
  362. #define AN8855_PMCR_FORCE_EEE1G BIT(7)
  363. #define AN8855_PMCR_FORCE_EEE100 BIT(6)
  364. #define AN8855_PMCR_TX_FC_EN BIT(5)
  365. #define AN8855_PMCR_RX_FC_EN BIT(4)
  366. #define AN8855_PMSR_P(x) (0x10210010 + (x) * 0x200)
  367. #define AN8855_PMSR_SPEED GENMASK(30, 28)
  368. #define AN8855_PMSR_SPEED_5000 FIELD_PREP_CONST(AN8855_PMSR_SPEED, 0x4)
  369. #define AN8855_PMSR_SPEED_2500 FIELD_PREP_CONST(AN8855_PMSR_SPEED, 0x3)
  370. #define AN8855_PMSR_SPEED_1000 FIELD_PREP_CONST(AN8855_PMSR_SPEED, 0x2)
  371. #define AN8855_PMSR_SPEED_100 FIELD_PREP_CONST(AN8855_PMSR_SPEED, 0x1)
  372. #define AN8855_PMSR_SPEED_10 FIELD_PREP_CONST(AN8855_PMSR_SPEED, 0x0)
  373. #define AN8855_PMSR_DPX BIT(25)
  374. #define AN8855_PMSR_LNK BIT(24)
  375. #define AN8855_PMSR_EEE1G BIT(7)
  376. #define AN8855_PMSR_EEE100M BIT(6)
  377. #define AN8855_PMSR_RX_FC BIT(5)
  378. #define AN8855_PMSR_TX_FC BIT(4)
  379. #define AN8855_PMEEECR_P(x) (0x10210004 + (x) * 0x200)
  380. #define AN8855_LPI_MODE_EN BIT(31)
  381. #define AN8855_WAKEUP_TIME_2500 GENMASK(23, 16)
  382. #define AN8855_WAKEUP_TIME_1000 GENMASK(15, 8)
  383. #define AN8855_WAKEUP_TIME_100 GENMASK(7, 0)
  384. #define AN8855_PMEEECR2_P(x) (0x10210008 + (x) * 0x200)
  385. #define AN8855_WAKEUP_TIME_5000 GENMASK(7, 0)
  386. #define AN8855_GMACCR 0x10213e00
  387. #define AN8855_MAX_RX_JUMBO GENMASK(7, 4)
  388. /* 2K for 0x0, 0x1, 0x2 */
  389. #define AN8855_MAX_RX_JUMBO_2K FIELD_PREP_CONST(AN8855_MAX_RX_JUMBO, 0x0)
  390. #define AN8855_MAX_RX_JUMBO_3K FIELD_PREP_CONST(AN8855_MAX_RX_JUMBO, 0x3)
  391. #define AN8855_MAX_RX_JUMBO_4K FIELD_PREP_CONST(AN8855_MAX_RX_JUMBO, 0x4)
  392. #define AN8855_MAX_RX_JUMBO_5K FIELD_PREP_CONST(AN8855_MAX_RX_JUMBO, 0x5)
  393. #define AN8855_MAX_RX_JUMBO_6K FIELD_PREP_CONST(AN8855_MAX_RX_JUMBO, 0x6)
  394. #define AN8855_MAX_RX_JUMBO_7K FIELD_PREP_CONST(AN8855_MAX_RX_JUMBO, 0x7)
  395. #define AN8855_MAX_RX_JUMBO_8K FIELD_PREP_CONST(AN8855_MAX_RX_JUMBO, 0x8)
  396. #define AN8855_MAX_RX_JUMBO_9K FIELD_PREP_CONST(AN8855_MAX_RX_JUMBO, 0x9)
  397. #define AN8855_MAX_RX_JUMBO_12K FIELD_PREP_CONST(AN8855_MAX_RX_JUMBO, 0xa)
  398. #define AN8855_MAX_RX_JUMBO_15K FIELD_PREP_CONST(AN8855_MAX_RX_JUMBO, 0xb)
  399. #define AN8855_MAX_RX_JUMBO_16K FIELD_PREP_CONST(AN8855_MAX_RX_JUMBO, 0xc)
  400. #define AN8855_MAX_RX_PKT_LEN GENMASK(1, 0)
  401. #define AN8855_MAX_RX_PKT_1518_1522 FIELD_PREP_CONST(AN8855_MAX_RX_PKT_LEN, 0x0)
  402. #define AN8855_MAX_RX_PKT_1536 FIELD_PREP_CONST(AN8855_MAX_RX_PKT_LEN, 0x1)
  403. #define AN8855_MAX_RX_PKT_1552 FIELD_PREP_CONST(AN8855_MAX_RX_PKT_LEN, 0x2)
  404. #define AN8855_MAX_RX_PKT_JUMBO FIELD_PREP_CONST(AN8855_MAX_RX_PKT_LEN, 0x3)
  405. #define AN8855_CKGCR 0x10213e1c
  406. #define AN8855_LPI_TXIDLE_THD_MASK GENMASK(31, 14)
  407. #define AN8855_CKG_LNKDN_PORT_STOP BIT(1)
  408. #define AN8855_CKG_LNKDN_GLB_STOP BIT(0)
  409. /* Register for MIB */
  410. #define AN8855_PORT_MIB_COUNTER(x) (0x10214000 + (x) * 0x200)
  411. /* Each define is an offset of AN8855_PORT_MIB_COUNTER */
  412. #define AN8855_PORT_MIB_TX_DROP 0x00
  413. #define AN8855_PORT_MIB_TX_CRC_ERR 0x04
  414. #define AN8855_PORT_MIB_TX_UNICAST 0x08
  415. #define AN8855_PORT_MIB_TX_MULTICAST 0x0c
  416. #define AN8855_PORT_MIB_TX_BROADCAST 0x10
  417. #define AN8855_PORT_MIB_TX_COLLISION 0x14
  418. #define AN8855_PORT_MIB_TX_SINGLE_COLLISION 0x18
  419. #define AN8855_PORT_MIB_TX_MULTIPLE_COLLISION 0x1c
  420. #define AN8855_PORT_MIB_TX_DEFERRED 0x20
  421. #define AN8855_PORT_MIB_TX_LATE_COLLISION 0x24
  422. #define AN8855_PORT_MIB_TX_EXCESSIVE_COLLISION 0x28
  423. #define AN8855_PORT_MIB_TX_PAUSE 0x2c
  424. #define AN8855_PORT_MIB_TX_PKT_SZ_64 0x30
  425. #define AN8855_PORT_MIB_TX_PKT_SZ_65_TO_127 0x34
  426. #define AN8855_PORT_MIB_TX_PKT_SZ_128_TO_255 0x38
  427. #define AN8855_PORT_MIB_TX_PKT_SZ_256_TO_511 0x3
  428. #define AN8855_PORT_MIB_TX_PKT_SZ_512_TO_1023 0x40
  429. #define AN8855_PORT_MIB_TX_PKT_SZ_1024_TO_1518 0x44
  430. #define AN8855_PORT_MIB_TX_PKT_SZ_1519_TO_MAX 0x48
  431. #define AN8855_PORT_MIB_TX_BYTES 0x4c /* 64 bytes */
  432. #define AN8855_PORT_MIB_TX_OVERSIZE_DROP 0x54
  433. #define AN8855_PORT_MIB_TX_BAD_PKT_BYTES 0x58 /* 64 bytes */
  434. #define AN8855_PORT_MIB_RX_DROP 0x80
  435. #define AN8855_PORT_MIB_RX_FILTERING 0x84
  436. #define AN8855_PORT_MIB_RX_UNICAST 0x88
  437. #define AN8855_PORT_MIB_RX_MULTICAST 0x8c
  438. #define AN8855_PORT_MIB_RX_BROADCAST 0x90
  439. #define AN8855_PORT_MIB_RX_ALIGN_ERR 0x94
  440. #define AN8855_PORT_MIB_RX_CRC_ERR 0x98
  441. #define AN8855_PORT_MIB_RX_UNDER_SIZE_ERR 0x9c
  442. #define AN8855_PORT_MIB_RX_FRAG_ERR 0xa0
  443. #define AN8855_PORT_MIB_RX_OVER_SZ_ERR 0xa4
  444. #define AN8855_PORT_MIB_RX_JABBER_ERR 0xa8
  445. #define AN8855_PORT_MIB_RX_PAUSE 0xac
  446. #define AN8855_PORT_MIB_RX_PKT_SZ_64 0xb0
  447. #define AN8855_PORT_MIB_RX_PKT_SZ_65_TO_127 0xb4
  448. #define AN8855_PORT_MIB_RX_PKT_SZ_128_TO_255 0xb8
  449. #define AN8855_PORT_MIB_RX_PKT_SZ_256_TO_511 0xbc
  450. #define AN8855_PORT_MIB_RX_PKT_SZ_512_TO_1023 0xc0
  451. #define AN8855_PORT_MIB_RX_PKT_SZ_1024_TO_1518 0xc4
  452. #define AN8855_PORT_MIB_RX_PKT_SZ_1519_TO_MAX 0xc8
  453. #define AN8855_PORT_MIB_RX_BYTES 0xcc /* 64 bytes */
  454. #define AN8855_PORT_MIB_RX_CTRL_DROP 0xd4
  455. #define AN8855_PORT_MIB_RX_INGRESS_DROP 0xd8
  456. #define AN8855_PORT_MIB_RX_ARL_DROP 0xdc
  457. #define AN8855_PORT_MIB_FLOW_CONTROL_DROP 0xe0
  458. #define AN8855_PORT_MIB_WRED_DROP 0xe4
  459. #define AN8855_PORT_MIB_MIRROR_DROP 0xe8
  460. #define AN8855_PORT_MIB_RX_BAD_PKT_BYTES 0xec /* 64 bytes */
  461. #define AN8855_PORT_MIB_RXS_FLOW_SAMPLING_PKT_DROP 0xf4
  462. #define AN8855_PORT_MIB_RXS_FLOW_TOTAL_PKT_DROP 0xf8
  463. #define AN8855_PORT_MIB_PORT_CONTROL_DROP 0xfc
  464. #define AN8855_MIB_CCR 0x10213e30
  465. #define AN8855_CCR_MIB_ENABLE BIT(31)
  466. #define AN8855_CCR_RX_OCT_CNT_GOOD BIT(7)
  467. #define AN8855_CCR_RX_OCT_CNT_BAD BIT(6)
  468. #define AN8855_CCR_TX_OCT_CNT_GOOD BIT(5)
  469. #define AN8855_CCR_TX_OCT_CNT_BAD BIT(4)
  470. #define AN8855_CCR_RX_OCT_CNT_GOOD_2 BIT(3)
  471. #define AN8855_CCR_RX_OCT_CNT_BAD_2 BIT(2)
  472. #define AN8855_CCR_TX_OCT_CNT_GOOD_2 BIT(1)
  473. #define AN8855_CCR_TX_OCT_CNT_BAD_2 BIT(0)
  474. #define AN8855_CCR_MIB_ACTIVATE (AN8855_CCR_MIB_ENABLE | \
  475. AN8855_CCR_RX_OCT_CNT_GOOD | \
  476. AN8855_CCR_RX_OCT_CNT_BAD | \
  477. AN8855_CCR_TX_OCT_CNT_GOOD | \
  478. AN8855_CCR_TX_OCT_CNT_BAD | \
  479. AN8855_CCR_RX_OCT_CNT_BAD_2 | \
  480. AN8855_CCR_TX_OCT_CNT_BAD_2)
  481. #define AN8855_MIB_CLR 0x10213e34
  482. #define AN8855_MIB_PORT6_CLR BIT(6)
  483. #define AN8855_MIB_PORT5_CLR BIT(5)
  484. #define AN8855_MIB_PORT4_CLR BIT(4)
  485. #define AN8855_MIB_PORT3_CLR BIT(3)
  486. #define AN8855_MIB_PORT2_CLR BIT(2)
  487. #define AN8855_MIB_PORT1_CLR BIT(1)
  488. #define AN8855_MIB_PORT0_CLR BIT(0)
  489. /* HSGMII/SGMII Configuration register */
  490. /* AN8855_HSGMII_AN_CSR_BASE 0x10220000 */
  491. #define AN8855_SGMII_REG_AN0 0x10220000
  492. /* AN8855_SGMII_AN_ENABLE BMCR_ANENABLE */
  493. /* AN8855_SGMII_AN_RESTART BMCR_ANRESTART */
  494. #define AN8855_SGMII_REG_AN_13 0x10220034
  495. #define AN8855_SGMII_REMOTE_FAULT_DIS BIT(8)
  496. #define AN8855_SGMII_IF_MODE GENMASK(5, 0)
  497. #define AN8855_SGMII_REG_AN_FORCE_CL37 0x10220060
  498. #define AN8855_RG_FORCE_AN_DONE BIT(0)
  499. /* AN8855_HSGMII_CSR_PCS_BASE 0x10220000 */
  500. #define AN8855_RG_HSGMII_PCS_CTROL_1 0x10220a00
  501. #define AN8855_RG_TBI_10B_MODE BIT(30)
  502. #define AN8855_RG_AN_SGMII_MODE_FORCE 0x10220a24
  503. #define AN8855_RG_FORCE_CUR_SGMII_MODE GENMASK(5, 4)
  504. #define AN8855_RG_FORCE_CUR_SGMII_SEL BIT(0)
  505. /* AN8855_MULTI_SGMII_CSR_BASE 0x10224000 */
  506. #define AN8855_SGMII_STS_CTRL_0 0x10224018
  507. #define AN8855_RG_LINK_MODE_P0 GENMASK(5, 4)
  508. #define AN8855_RG_LINK_MODE_P0_SPEED_2500 FIELD_PREP_CONST(AN8855_RG_LINK_MODE_P0, 0x3)
  509. #define AN8855_RG_LINK_MODE_P0_SPEED_1000 FIELD_PREP_CONST(AN8855_RG_LINK_MODE_P0, 0x2)
  510. #define AN8855_RG_LINK_MODE_P0_SPEED_100 FIELD_PREP_CONST(AN8855_RG_LINK_MODE_P0, 0x1)
  511. #define AN8855_RG_LINK_MODE_P0_SPEED_10 FIELD_PREP_CONST(AN8855_RG_LINK_MODE_P0, 0x0)
  512. #define AN8855_RG_FORCE_SPD_MODE_P0 BIT(2)
  513. #define AN8855_MSG_RX_CTRL_0 0x10224100
  514. #define AN8855_MSG_RX_LIK_STS_0 0x10224514
  515. #define AN8855_RG_DPX_STS_P3 BIT(24)
  516. #define AN8855_RG_DPX_STS_P2 BIT(16)
  517. #define AN8855_RG_EEE1G_STS_P1 BIT(12)
  518. #define AN8855_RG_DPX_STS_P1 BIT(8)
  519. #define AN8855_RG_TXFC_STS_P0 BIT(2)
  520. #define AN8855_RG_RXFC_STS_P0 BIT(1)
  521. #define AN8855_RG_DPX_STS_P0 BIT(0)
  522. #define AN8855_MSG_RX_LIK_STS_2 0x1022451c
  523. #define AN8855_RG_RXFC_AN_BYPASS_P3 BIT(11)
  524. #define AN8855_RG_RXFC_AN_BYPASS_P2 BIT(10)
  525. #define AN8855_RG_RXFC_AN_BYPASS_P1 BIT(9)
  526. #define AN8855_RG_TXFC_AN_BYPASS_P3 BIT(7)
  527. #define AN8855_RG_TXFC_AN_BYPASS_P2 BIT(6)
  528. #define AN8855_RG_TXFC_AN_BYPASS_P1 BIT(5)
  529. #define AN8855_RG_DPX_AN_BYPASS_P3 BIT(3)
  530. #define AN8855_RG_DPX_AN_BYPASS_P2 BIT(2)
  531. #define AN8855_RG_DPX_AN_BYPASS_P1 BIT(1)
  532. #define AN8855_RG_DPX_AN_BYPASS_P0 BIT(0)
  533. #define AN8855_PHY_RX_FORCE_CTRL_0 0x10224520
  534. #define AN8855_RG_FORCE_TXC_SEL BIT(4)
  535. /* AN8855_XFI_CSR_PCS_BASE 0x10225000 */
  536. #define AN8855_RG_USXGMII_AN_CONTROL_0 0x10225bf8
  537. /* AN8855_MULTI_PHY_RA_CSR_BASE 0x10226000 */
  538. #define AN8855_RG_RATE_ADAPT_CTRL_0 0x10226000
  539. #define AN8855_RG_RATE_ADAPT_RX_BYPASS BIT(27)
  540. #define AN8855_RG_RATE_ADAPT_TX_BYPASS BIT(26)
  541. #define AN8855_RG_RATE_ADAPT_RX_EN BIT(4)
  542. #define AN8855_RG_RATE_ADAPT_TX_EN BIT(0)
  543. #define AN8855_RATE_ADP_P0_CTRL_0 0x10226100
  544. #define AN8855_RG_P0_DIS_MII_MODE BIT(31)
  545. #define AN8855_RG_P0_MII_MODE BIT(28)
  546. #define AN8855_RG_P0_MII_RA_RX_EN BIT(3)
  547. #define AN8855_RG_P0_MII_RA_TX_EN BIT(2)
  548. #define AN8855_RG_P0_MII_RA_RX_MODE BIT(1)
  549. #define AN8855_RG_P0_MII_RA_TX_MODE BIT(0)
  550. #define AN8855_MII_RA_AN_ENABLE 0x10226300
  551. #define AN8855_RG_P0_RA_AN_EN BIT(0)
  552. /* AN8855_QP_DIG_CSR_BASE 0x1022a000 */
  553. #define AN8855_QP_CK_RST_CTRL_4 0x1022a310
  554. #define AN8855_QP_DIG_MODE_CTRL_0 0x1022a324
  555. #define AN8855_RG_SGMII_MODE GENMASK(5, 4)
  556. #define AN8855_RG_SGMII_AN_EN BIT(0)
  557. #define AN8855_QP_DIG_MODE_CTRL_1 0x1022a330
  558. #define AN8855_RG_TPHY_SPEED GENMASK(3, 2)
  559. /* AN8855_SERDES_WRAPPER_BASE 0x1022c000 */
  560. #define AN8855_USGMII_CTRL_0 0x1022c000
  561. /* AN8855_QP_PMA_TOP_BASE 0x1022e000 */
  562. #define AN8855_PON_RXFEDIG_CTRL_0 0x1022e100
  563. #define AN8855_RG_QP_EQ_RX500M_CK_SEL BIT(12)
  564. #define AN8855_PON_RXFEDIG_CTRL_9 0x1022e124
  565. #define AN8855_RG_QP_EQ_LEQOSC_DLYCNT GENMASK(2, 0)
  566. #define AN8855_SS_LCPLL_PWCTL_SETTING_2 0x1022e208
  567. #define AN8855_RG_NCPO_ANA_MSB GENMASK(17, 16)
  568. #define AN8855_SS_LCPLL_TDC_FLT_2 0x1022e230
  569. #define AN8855_RG_LCPLL_NCPO_VALUE GENMASK(30, 0)
  570. #define AN8855_SS_LCPLL_TDC_FLT_5 0x1022e23c
  571. #define AN8855_RG_LCPLL_NCPO_CHG BIT(24)
  572. #define AN8855_SS_LCPLL_TDC_PCW_1 0x1022e248
  573. #define AN8855_RG_LCPLL_PON_HRDDS_PCW_NCPO_GPON GENMASK(30, 0)
  574. #define AN8855_INTF_CTRL_8 0x1022e320
  575. #define AN8855_INTF_CTRL_9 0x1022e324
  576. #define AN8855_INTF_CTRL_10 0x1022e328
  577. #define AN8855_RG_DA_QP_TX_FIR_C2_SEL BIT(29)
  578. #define AN8855_RG_DA_QP_TX_FIR_C2_FORCE GENMASK(28, 24)
  579. #define AN8855_RG_DA_QP_TX_FIR_C1_SEL BIT(21)
  580. #define AN8855_RG_DA_QP_TX_FIR_C1_FORCE GENMASK(20, 16)
  581. #define AN8855_INTF_CTRL_11 0x1022e32c
  582. #define AN8855_RG_DA_QP_TX_FIR_C0B_SEL BIT(6)
  583. #define AN8855_RG_DA_QP_TX_FIR_C0B_FORCE GENMASK(5, 0)
  584. #define AN8855_PLL_CTRL_0 0x1022e400
  585. #define AN8855_RG_PHYA_AUTO_INIT BIT(0)
  586. #define AN8855_PLL_CTRL_2 0x1022e408
  587. #define AN8855_RG_DA_QP_PLL_SDM_IFM_INTF BIT(30)
  588. #define AN8855_RG_DA_QP_PLL_RICO_SEL_INTF BIT(29)
  589. #define AN8855_RG_DA_QP_PLL_POSTDIV_EN_INTF BIT(28)
  590. #define AN8855_RG_DA_QP_PLL_PHY_CK_EN_INTF BIT(27)
  591. #define AN8855_RG_DA_QP_PLL_PFD_OFFSET_EN_INTRF BIT(26)
  592. #define AN8855_RG_DA_QP_PLL_PFD_OFFSET_INTF GENMASK(25, 24)
  593. #define AN8855_RG_DA_QP_PLL_PCK_SEL_INTF BIT(22)
  594. #define AN8855_RG_DA_QP_PLL_KBAND_PREDIV_INTF GENMASK(21, 20)
  595. #define AN8855_RG_DA_QP_PLL_IR_INTF GENMASK(19, 16)
  596. #define AN8855_RG_DA_QP_PLL_ICOIQ_EN_INTF BIT(14)
  597. #define AN8855_RG_DA_QP_PLL_FBKSEL_INTF GENMASK(13, 12)
  598. #define AN8855_RG_DA_QP_PLL_BR_INTF GENMASK(10, 8)
  599. #define AN8855_RG_DA_QP_PLL_BPD_INTF GENMASK(7, 6)
  600. #define AN8855_RG_DA_QP_PLL_BPA_INTF GENMASK(4, 2)
  601. #define AN8855_RG_DA_QP_PLL_BC_INTF GENMASK(1, 0)
  602. #define AN8855_PLL_CTRL_3 0x1022e40c
  603. #define AN8855_RG_DA_QP_PLL_SSC_PERIOD_INTF GENMASK(31, 16)
  604. #define AN8855_RG_DA_QP_PLL_SSC_DELTA_INTF GENMASK(15, 0)
  605. #define AN8855_PLL_CTRL_4 0x1022e410
  606. #define AN8855_RG_DA_QP_PLL_SDM_HREN_INTF GENMASK(4, 3)
  607. #define AN8855_RG_DA_QP_PLL_ICOLP_EN_INTF BIT(2)
  608. #define AN8855_RG_DA_QP_PLL_SSC_DIR_DLY_INTF GENMASK(1, 0)
  609. #define AN8855_PLL_CK_CTRL_0 0x1022e414
  610. #define AN8855_RG_DA_QP_PLL_TDC_TXCK_SEL_INTF BIT(9)
  611. #define AN8855_RG_DA_QP_PLL_SDM_DI_EN_INTF BIT(8)
  612. #define AN8855_RX_DLY_0 0x1022e614
  613. #define AN8855_RG_QP_RX_SAOSC_EN_H_DLY GENMASK(13, 8)
  614. #define AN8855_RG_QP_RX_PI_CAL_EN_H_DLY GENMASK(7, 0)
  615. #define AN8855_RX_CTRL_2 0x1022e630
  616. #define AN8855_RG_QP_RX_EQ_EN_H_DLY GENMASK(28, 16)
  617. #define AN8855_RX_CTRL_5 0x1022e63c
  618. #define AN8855_RG_FREDET_CHK_CYCLE GENMASK(29, 10)
  619. #define AN8855_RX_CTRL_6 0x1022e640
  620. #define AN8855_RG_FREDET_GOLDEN_CYCLE GENMASK(19, 0)
  621. #define AN8855_RX_CTRL_7 0x1022e644
  622. #define AN8855_RG_FREDET_TOLERATE_CYCLE GENMASK(19, 0)
  623. #define AN8855_RX_CTRL_8 0x1022e648
  624. #define AN8855_RG_DA_QP_SAOSC_DONE_TIME GENMASK(27, 16)
  625. #define AN8855_RG_DA_QP_LEQOS_EN_TIME GENMASK(14, 0)
  626. #define AN8855_RX_CTRL_26 0x1022e690
  627. #define AN8855_RG_QP_EQ_RETRAIN_ONLY_EN BIT(26)
  628. #define AN8855_RG_LINK_NE_EN BIT(24)
  629. #define AN8855_RG_LINK_ERRO_EN BIT(23)
  630. #define AN8855_RX_CTRL_42 0x1022e6d0
  631. #define AN8855_RG_QP_EQ_EN_DLY GENMASK(12, 0)
  632. /* AN8855_QP_ANA_CSR_BASE 0x1022f000 */
  633. #define AN8855_RG_QP_RX_DAC_EN 0x1022f000
  634. #define AN8855_RG_QP_SIGDET_HF GENMASK(17, 16)
  635. #define AN8855_RG_QP_RXAFE_RESERVE 0x1022f004
  636. #define AN8855_RG_QP_CDR_PD_10B_EN BIT(11)
  637. #define AN8855_RG_QP_CDR_LPF_BOT_LIM 0x1022f008
  638. #define AN8855_RG_QP_CDR_LPF_KP_GAIN GENMASK(26, 24)
  639. #define AN8855_RG_QP_CDR_LPF_KI_GAIN GENMASK(22, 20)
  640. #define AN8855_RG_QP_CDR_LPF_MJV_LIM 0x1022f00c
  641. #define AN8855_RG_QP_CDR_LPF_RATIO GENMASK(5, 4)
  642. #define AN8855_RG_QP_CDR_LPF_SETVALUE 0x1022f014
  643. #define AN8855_RG_QP_CDR_PR_BUF_IN_SR GENMASK(31, 29)
  644. #define AN8855_RG_QP_CDR_PR_BETA_SEL GENMASK(28, 25)
  645. #define AN8855_RG_QP_CDR_PR_CKREF_DIV1 0x1022f018
  646. #define AN8855_RG_QP_CDR_PR_KBAND_DIV GENMASK(26, 24)
  647. #define AN8855_RG_QP_CDR_PR_DAC_BAND GENMASK(12, 8)
  648. #define AN8855_RG_QP_CDR_PR_KBAND_DIV_PCIE 0x1022f01c
  649. #define AN8855_RG_QP_CDR_PR_XFICK_EN BIT(30)
  650. #define AN8855_RG_QP_CDR_PR_KBAND_PCIE_MODE BIT(6)
  651. #define AN8855_RG_QP_CDR_PR_KBAND_DIV_PCIE_MASK GENMASK(5, 0)
  652. #define AN8855_RG_QP_CDR_FORCE_IBANDLPF_R_OFF 0x1022f020
  653. #define AN8855_RG_QP_CDR_PHYCK_SEL GENMASK(17, 16)
  654. #define AN8855_RG_QP_CDR_PHYCK_RSTB BIT(13)
  655. #define AN8855_RG_QP_CDR_PHYCK_DIV GENMASK(12, 6)
  656. #define AN8855_RG_QP_TX_MODE 0x1022f028
  657. #define AN8855_RG_QP_TX_RESERVE GENMASK(31, 16)
  658. #define AN8855_RG_QP_TX_MODE_16B_EN BIT(0)
  659. #define AN8855_RG_QP_PLL_IPLL_DIG_PWR_SEL 0x1022f03c
  660. #define AN8855_RG_QP_PLL_SDM_ORD 0x1022f040
  661. #define AN8855_RG_QP_PLL_SSC_PHASE_INI BIT(4)
  662. #define AN8855_RG_QP_PLL_SSC_TRI_EN BIT(3)
  663. /* AN8855_ETHER_SYS_BASE 0x1028c800 */
  664. #define AN8855_RG_GPHY_AFE_PWD 0x1028c840
  665. #define AN8855_RG_GPHY_SMI_ADDR 0x1028c848
  666. #define MIB_DESC(_s, _o, _n) \
  667. { \
  668. .size = (_s), \
  669. .offset = (_o), \
  670. .name = (_n), \
  671. }
  672. struct an8855_mib_desc {
  673. unsigned int size;
  674. unsigned int offset;
  675. const char *name;
  676. };
  677. struct an8855_fdb {
  678. u16 vid;
  679. u8 port_mask;
  680. u16 aging;
  681. u8 mac[6];
  682. bool noarp;
  683. u8 live;
  684. u8 type;
  685. u8 fid;
  686. u8 ivl;
  687. };
  688. struct an8855_priv {
  689. struct device *dev;
  690. struct dsa_switch *ds;
  691. struct regmap *regmap;
  692. struct gpio_desc *reset_gpio;
  693. /* Protect ATU or VLAN table access */
  694. struct mutex reg_mutex;
  695. struct phylink_pcs pcs;
  696. u8 mirror_rx;
  697. u8 mirror_tx;
  698. u8 port_isolated_map;
  699. bool phy_require_calib;
  700. };
  701. #endif /* __AN8855_H */