mscc_ptp.h 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472
  1. /* SPDX-License-Identifier: (GPL-2.0 OR MIT) */
  2. /*
  3. * Driver for Microsemi VSC85xx PHYs
  4. *
  5. * Copyright (c) 2020 Microsemi Corporation
  6. */
  7. #ifndef _MSCC_PHY_PTP_H_
  8. #define _MSCC_PHY_PTP_H_
  9. /* 1588 page Registers */
  10. #define MSCC_PHY_TS_BIU_ADDR_CNTL 16
  11. #define BIU_ADDR_EXE 0x8000
  12. #define BIU_ADDR_READ 0x4000
  13. #define BIU_ADDR_WRITE 0x0000
  14. #define BIU_BLK_ID(x) ((x) << 11)
  15. #define BIU_CSR_ADDR(x) (x)
  16. #define BIU_ADDR_CNT_MAX 8
  17. #define MSCC_PHY_TS_CSR_DATA_LSB 17
  18. #define MSCC_PHY_TS_CSR_DATA_MSB 18
  19. #define MSCC_PHY_1588_INGR_VSC85XX_INT_STATUS 0x002d
  20. #define MSCC_PHY_1588_VSC85XX_INT_STATUS 0x004d
  21. #define VSC85XX_1588_INT_FIFO_ADD 0x0004
  22. #define VSC85XX_1588_INT_FIFO_OVERFLOW 0x0001
  23. #define MSCC_PHY_1588_INGR_VSC85XX_INT_MASK 0x002e
  24. #define MSCC_PHY_1588_VSC85XX_INT_MASK 0x004e
  25. #define VSC85XX_1588_INT_MASK_MASK (VSC85XX_1588_INT_FIFO_ADD | \
  26. VSC85XX_1588_INT_FIFO_OVERFLOW)
  27. /* TS CSR addresses */
  28. #define MSCC_PHY_ANA_ETH1_NTX_PROT 0x0000
  29. #define ANA_ETH1_NTX_PROT_SIG_OFF_MASK GENMASK(20, 16)
  30. #define ANA_ETH1_NTX_PROT_SIG_OFF(x) (((x) << 16) & ANA_ETH1_NTX_PROT_SIG_OFF_MASK)
  31. #define ANA_ETH1_NTX_PROT_COMPARATOR_MASK GENMASK(2, 0)
  32. #define ANA_ETH1_NTX_PROT_PTP_OAM 0x0005
  33. #define ANA_ETH1_NTX_PROT_MPLS 0x0004
  34. #define ANA_ETH1_NTX_PROT_IP_UDP_ACH_2 0x0003
  35. #define ANA_ETH1_NTX_PROT_IP_UDP_ACH_1 0x0002
  36. #define ANA_ETH1_NTX_PROT_ETH2 0x0001
  37. #define MSCC_PHY_PTP_IFACE_CTRL 0x0000
  38. #define PTP_IFACE_CTRL_CLK_ENA 0x0040
  39. #define PTP_IFACE_CTRL_INGR_BYPASS 0x0008
  40. #define PTP_IFACE_CTRL_EGR_BYPASS 0x0004
  41. #define PTP_IFACE_CTRL_MII_PROT 0x0003
  42. #define PTP_IFACE_CTRL_GMII_PROT 0x0002
  43. #define PTP_IFACE_CTRL_XGMII_64_PROT 0x0000
  44. #define MSCC_PHY_ANA_ETH1_NTX_PROT_VLAN_TPID 0x0001
  45. #define ANA_ETH1_NTX_PROT_VLAN_TPID_MASK GENMASK(31, 16)
  46. #define ANA_ETH1_NTX_PROT_VLAN_TPID(x) (((x) << 16) & ANA_ETH1_NTX_PROT_VLAN_TPID_MASK)
  47. #define MSCC_PHY_PTP_ANALYZER_MODE 0x0001
  48. #define PTP_ANA_SPLIT_ENCAP_FLOW 0x1000000
  49. #define PTP_ANA_EGR_ENCAP_FLOW_MODE_MASK GENMASK(22, 20)
  50. #define PTP_ANA_EGR_ENCAP_FLOW_MODE(x) (((x) << 20) & PTP_ANA_EGR_ENCAP_FLOW_MODE_MASK)
  51. #define PTP_ANA_INGR_ENCAP_FLOW_MODE_MASK GENMASK(18, 16)
  52. #define PTP_ANA_INGR_ENCAP_FLOW_MODE(x) (((x) << 16) & PTP_ANA_INGR_ENCAP_FLOW_MODE_MASK)
  53. #define PTP_ANALYZER_MODE_EGR_ENA_MASK GENMASK(6, 4)
  54. #define PTP_ANALYZER_MODE_EGR_ENA(x) (((x) << 4) & PTP_ANALYZER_MODE_EGR_ENA_MASK)
  55. #define PTP_ANALYZER_MODE_INGR_ENA_MASK GENMASK(2, 0)
  56. #define PTP_ANALYZER_MODE_INGR_ENA(x) ((x) & PTP_ANALYZER_MODE_INGR_ENA_MASK)
  57. #define MSCC_PHY_ANA_ETH1_NXT_PROT_TAG 0x0002
  58. #define ANA_ETH1_NXT_PROT_TAG_ENA 0x0001
  59. #define MSCC_PHY_PTP_MODE_CTRL 0x0002
  60. #define PTP_MODE_CTRL_MODE_MASK GENMASK(2, 0)
  61. #define PTP_MODE_CTRL_PKT_MODE 0x0004
  62. #define MSCC_PHY_ANA_ETH1_NXT_PROT_ETYPE_MATCH 0x0003
  63. #define ANA_ETH1_NXT_PROT_ETYPE_MATCH_ENA 0x10000
  64. #define ANA_ETH1_NXT_PROT_ETYPE_MATCH_MASK GENMASK(15, 0)
  65. #define ANA_ETH1_NXT_PROT_ETYPE_MATCH(x) ((x) & ANA_ETH1_NXT_PROT_ETYPE_MATCH_MASK)
  66. #define MSCC_PHY_PTP_VERSION_CODE 0x0003
  67. #define PTP_IP_VERSION_MASK GENMASK(7, 0)
  68. #define PTP_IP_VERSION_2_1 0x0021
  69. #define MSCC_ANA_ETH1_FLOW_ENA(x) (0x0010 + ((x) << 4))
  70. #define ETH1_FLOW_ENA_CHANNEL_MASK_MASK GENMASK(9, 8)
  71. #define ETH1_FLOW_ENA_CHANNEL_MASK(x) (((x) << 8) & ETH1_FLOW_ENA_CHANNEL_MASK_MASK)
  72. #define ETH1_FLOW_VALID_CH1 ETH1_FLOW_ENA_CHANNEL_MASK(2)
  73. #define ETH1_FLOW_VALID_CH0 ETH1_FLOW_ENA_CHANNEL_MASK(1)
  74. #define ETH1_FLOW_ENA 0x0001
  75. #define MSCC_ANA_ETH1_FLOW_MATCH_MODE(x) (MSCC_ANA_ETH1_FLOW_ENA(x) + 1)
  76. #define ANA_ETH1_FLOW_MATCH_VLAN_TAG_MASK GENMASK(7, 6)
  77. #define ANA_ETH1_FLOW_MATCH_VLAN_TAG(x) (((x) << 6) & ANA_ETH1_FLOW_MATCH_VLAN_TAG_MASK)
  78. #define ANA_ETH1_FLOW_MATCH_VLAN_TAG2 0x0200
  79. #define ANA_ETH1_FLOW_MATCH_VLAN_VERIFY 0x0010
  80. #define MSCC_ANA_ETH1_FLOW_ADDR_MATCH1(x) (MSCC_ANA_ETH1_FLOW_ENA(x) + 2)
  81. #define MSCC_ANA_ETH1_FLOW_ADDR_MATCH2(x) (MSCC_ANA_ETH1_FLOW_ENA(x) + 3)
  82. #define ANA_ETH1_FLOW_ADDR_MATCH2_MASK_MASK GENMASK(22, 20)
  83. #define ANA_ETH1_FLOW_ADDR_MATCH2_ANY_MULTICAST 0x400000
  84. #define ANA_ETH1_FLOW_ADDR_MATCH2_FULL_ADDR 0x100000
  85. #define ANA_ETH1_FLOW_ADDR_MATCH2_SRC_DEST_MASK GENMASK(17, 16)
  86. #define ANA_ETH1_FLOW_ADDR_MATCH2_SRC_DEST 0x020000
  87. #define ANA_ETH1_FLOW_ADDR_MATCH2_SRC 0x010000
  88. #define ANA_ETH1_FLOW_ADDR_MATCH2_DEST 0x000000
  89. #define MSCC_ANA_ETH1_FLOW_VLAN_RANGE_I_TAG(x) (MSCC_ANA_ETH1_FLOW_ENA(x) + 4)
  90. #define MSCC_ANA_ETH1_FLOW_VLAN_TAG1(x) (MSCC_ANA_ETH1_FLOW_ENA(x) + 5)
  91. #define MSCC_ANA_ETH1_FLOW_VLAN_TAG2_I_TAG(x) (MSCC_ANA_ETH1_FLOW_ENA(x) + 6)
  92. #define MSCC_PHY_PTP_LTC_CTRL 0x0010
  93. #define PTP_LTC_CTRL_CLK_SEL_MASK GENMASK(14, 12)
  94. #define PTP_LTC_CTRL_CLK_SEL(x) (((x) << 12) & PTP_LTC_CTRL_CLK_SEL_MASK)
  95. #define PTP_LTC_CTRL_CLK_SEL_INTERNAL_250 PTP_LTC_CTRL_CLK_SEL(5)
  96. #define PTP_LTC_CTRL_AUTO_ADJ_UPDATE 0x0010
  97. #define PTP_LTC_CTRL_ADD_SUB_1NS_REQ 0x0008
  98. #define PTP_LTC_CTRL_ADD_1NS 0x0004
  99. #define PTP_LTC_CTRL_SAVE_ENA 0x0002
  100. #define PTP_LTC_CTRL_LOAD_ENA 0x0001
  101. #define MSCC_PHY_PTP_LTC_LOAD_SEC_MSB 0x0011
  102. #define PTP_LTC_LOAD_SEC_MSB(x) (((x) & GENMASK_ULL(47, 32)) >> 32)
  103. #define MSCC_PHY_PTP_LTC_LOAD_SEC_LSB 0x0012
  104. #define PTP_LTC_LOAD_SEC_LSB(x) ((x) & GENMASK(31, 0))
  105. #define MSCC_PHY_PTP_LTC_LOAD_NS 0x0013
  106. #define PTP_LTC_LOAD_NS(x) ((x) & GENMASK(31, 0))
  107. #define MSCC_PHY_PTP_LTC_SAVED_SEC_MSB 0x0014
  108. #define MSCC_PHY_PTP_LTC_SAVED_SEC_LSB 0x0015
  109. #define MSCC_PHY_PTP_LTC_SAVED_NS 0x0016
  110. #define MSCC_PHY_PTP_LTC_SEQUENCE 0x0017
  111. #define PTP_LTC_SEQUENCE_A_MASK GENMASK(3, 0)
  112. #define PTP_LTC_SEQUENCE_A(x) ((x) & PTP_LTC_SEQUENCE_A_MASK)
  113. #define MSCC_PHY_PTP_LTC_SEQ 0x0018
  114. #define PTP_LTC_SEQ_ADD_SUB 0x80000
  115. #define PTP_LTC_SEQ_ERR_MASK GENMASK(18, 0)
  116. #define PTP_LTC_SEQ_ERR(x) ((x) & PTP_LTC_SEQ_ERR_MASK)
  117. #define MSCC_PHY_PTP_LTC_AUTO_ADJ 0x001a
  118. #define PTP_AUTO_ADJ_NS_ROLLOVER(x) ((x) & GENMASK(29, 0))
  119. #define PTP_AUTO_ADJ_ADD_SUB_1NS_MASK GENMASK(31, 30)
  120. #define PTP_AUTO_ADJ_SUB_1NS 0x80000000
  121. #define PTP_AUTO_ADJ_ADD_1NS 0x40000000
  122. #define MSCC_PHY_PTP_LTC_1PPS_WIDTH_ADJ 0x001b
  123. #define PTP_LTC_1PPS_WIDTH_ADJ_MASK GENMASK(29, 0)
  124. #define MSCC_PHY_PTP_TSTAMP_FIFO_SI 0x0020
  125. #define PTP_TSTAMP_FIFO_SI_EN 0x0001
  126. #define MSCC_PHY_PTP_INGR_PREDICTOR 0x0022
  127. #define PTP_INGR_PREDICTOR_EN 0x0001
  128. #define MSCC_PHY_PTP_EGR_PREDICTOR 0x0026
  129. #define PTP_EGR_PREDICTOR_EN 0x0001
  130. #define MSCC_PHY_PTP_INGR_TSP_CTRL 0x0035
  131. #define PHY_PTP_INGR_TSP_CTRL_FRACT_NS 0x0004
  132. #define PHY_PTP_INGR_TSP_CTRL_LOAD_DELAYS 0x0001
  133. #define MSCC_PHY_PTP_INGR_LOCAL_LATENCY 0x0037
  134. #define PTP_INGR_LOCAL_LATENCY_MASK GENMASK(22, 0)
  135. #define PTP_INGR_LOCAL_LATENCY(x) ((x) & PTP_INGR_LOCAL_LATENCY_MASK)
  136. #define MSCC_PHY_PTP_INGR_DELAY_FIFO 0x003a
  137. #define PTP_INGR_DELAY_FIFO_DEPTH_MACSEC 0x0013
  138. #define PTP_INGR_DELAY_FIFO_DEPTH_DEFAULT 0x000f
  139. #define MSCC_PHY_PTP_INGR_TS_FIFO(x) (0x005c + (x))
  140. #define PTP_INGR_TS_FIFO_EMPTY 0x80000000
  141. #define MSCC_PHY_PTP_INGR_REWRITER_CTRL 0x0044
  142. #define PTP_INGR_REWRITER_REDUCE_PREAMBLE 0x0010
  143. #define PTP_INGR_REWRITER_FLAG_VAL 0x0008
  144. #define PTP_INGR_REWRITER_FLAG_BIT_OFF_M GENMASK(2, 0)
  145. #define PTP_INGR_REWRITER_FLAG_BIT_OFF(x) ((x) & PTP_INGR_REWRITER_FLAG_BIT_OFF_M)
  146. #define MSCC_PHY_PTP_EGR_STALL_LATENCY 0x004f
  147. #define MSCC_PHY_PTP_EGR_TSP_CTRL 0x0055
  148. #define PHY_PTP_EGR_TSP_CTRL_FRACT_NS 0x0004
  149. #define PHY_PTP_EGR_TSP_CTRL_LOAD_DELAYS 0x0001
  150. #define MSCC_PHY_PTP_EGR_LOCAL_LATENCY 0x0057
  151. #define PTP_EGR_LOCAL_LATENCY_MASK GENMASK(22, 0)
  152. #define PTP_EGR_LOCAL_LATENCY(x) ((x) & PTP_EGR_LOCAL_LATENCY_MASK)
  153. #define MSCC_PHY_PTP_EGR_DELAY_FIFO 0x005a
  154. #define PTP_EGR_DELAY_FIFO_DEPTH_MACSEC 0x0013
  155. #define PTP_EGR_DELAY_FIFO_DEPTH_DEFAULT 0x000f
  156. #define MSCC_PHY_PTP_EGR_TS_FIFO_CTRL 0x005b
  157. #define PTP_EGR_TS_FIFO_RESET 0x10000
  158. #define PTP_EGR_FIFO_LEVEL_LAST_READ_MASK GENMASK(15, 12)
  159. #define PTP_EGR_FIFO_LEVEL_LAST_READ(x) (((x) & PTP_EGR_FIFO_LEVEL_LAST_READ_MASK) >> 12)
  160. #define PTP_EGR_TS_FIFO_THRESH_MASK GENMASK(11, 8)
  161. #define PTP_EGR_TS_FIFO_THRESH(x) (((x) << 8) & PTP_EGR_TS_FIFO_THRESH_MASK)
  162. #define PTP_EGR_TS_FIFO_SIG_BYTES_MASK GENMASK(4, 0)
  163. #define PTP_EGR_TS_FIFO_SIG_BYTES(x) ((x) & PTP_EGR_TS_FIFO_SIG_BYTES_MASK)
  164. #define MSCC_PHY_PTP_EGR_TS_FIFO(x) (0x005c + (x))
  165. #define PTP_EGR_TS_FIFO_EMPTY 0x80000000
  166. #define PTP_EGR_TS_FIFO_0_MASK GENMASK(15, 0)
  167. #define MSCC_PHY_PTP_EGR_REWRITER_CTRL 0x0064
  168. #define PTP_EGR_REWRITER_REDUCE_PREAMBLE 0x0010
  169. #define PTP_EGR_REWRITER_FLAG_VAL 0x0008
  170. #define PTP_EGR_REWRITER_FLAG_BIT_OFF_M GENMASK(2, 0)
  171. #define PTP_EGR_REWRITER_FLAG_BIT_OFF(x) ((x) & PTP_EGR_REWRITER_FLAG_BIT_OFF_M)
  172. #define MSCC_PHY_PTP_SERIAL_TOD_IFACE 0x006e
  173. #define PTP_SERIAL_TOD_IFACE_LS_AUTO_CLR 0x0004
  174. #define MSCC_PHY_PTP_LTC_OFFSET 0x0070
  175. #define PTP_LTC_OFFSET_ADJ BIT(31)
  176. #define PTP_LTC_OFFSET_ADD BIT(30)
  177. #define PTP_LTC_OFFSET_VAL(x) (x)
  178. #define MSCC_PHY_PTP_ACCUR_CFG_STATUS 0x0074
  179. #define PTP_ACCUR_PPS_OUT_CALIB_ERR 0x20000
  180. #define PTP_ACCUR_PPS_OUT_CALIB_DONE 0x10000
  181. #define PTP_ACCUR_PPS_IN_CALIB_ERR 0x4000
  182. #define PTP_ACCUR_PPS_IN_CALIB_DONE 0x2000
  183. #define PTP_ACCUR_EGR_SOF_CALIB_ERR 0x1000
  184. #define PTP_ACCUR_EGR_SOF_CALIB_DONE 0x0800
  185. #define PTP_ACCUR_INGR_SOF_CALIB_ERR 0x0400
  186. #define PTP_ACCUR_INGR_SOF_CALIB_DONE 0x0200
  187. #define PTP_ACCUR_LOAD_SAVE_CALIB_ERR 0x0100
  188. #define PTP_ACCUR_LOAD_SAVE_CALIB_DONE 0x0080
  189. #define PTP_ACCUR_CALIB_TRIGG 0x0040
  190. #define PTP_ACCUR_PPS_OUT_BYPASS 0x0010
  191. #define PTP_ACCUR_PPS_IN_BYPASS 0x0008
  192. #define PTP_ACCUR_EGR_SOF_BYPASS 0x0004
  193. #define PTP_ACCUR_INGR_SOF_BYPASS 0x0002
  194. #define PTP_ACCUR_LOAD_SAVE_BYPASS 0x0001
  195. #define MSCC_PHY_ANA_ETH2_NTX_PROT 0x0090
  196. #define ANA_ETH2_NTX_PROT_COMPARATOR_MASK GENMASK(2, 0)
  197. #define ANA_ETH2_NTX_PROT_PTP_OAM 0x0005
  198. #define ANA_ETH2_NTX_PROT_MPLS 0x0004
  199. #define ANA_ETH2_NTX_PROT_IP_UDP_ACH_2 0x0003
  200. #define ANA_ETH2_NTX_PROT_IP_UDP_ACH_1 0x0002
  201. #define ANA_ETH2_NTX_PROT_ETH2 0x0001
  202. #define MSCC_PHY_ANA_ETH2_NXT_PROT_ETYPE_MATCH 0x0003
  203. #define ANA_ETH2_NXT_PROT_ETYPE_MATCH_ENA 0x10000
  204. #define ANA_ETH2_NXT_PROT_ETYPE_MATCH_MASK GENMASK(15, 0)
  205. #define ANA_ETH2_NXT_PROT_ETYPE_MATCH(x) ((x) & ANA_ETH2_NXT_PROT_ETYPE_MATCH_MASK)
  206. #define MSCC_ANA_ETH2_FLOW_ENA(x) (0x00a0 + ((x) << 4))
  207. #define ETH2_FLOW_ENA_CHANNEL_MASK_MASK GENMASK(9, 8)
  208. #define ETH2_FLOW_ENA_CHANNEL_MASK(x) (((x) << 8) & ETH2_FLOW_ENA_CHANNEL_MASK_MASK)
  209. #define ETH2_FLOW_VALID_CH1 ETH2_FLOW_ENA_CHANNEL_MASK(2)
  210. #define ETH2_FLOW_VALID_CH0 ETH2_FLOW_ENA_CHANNEL_MASK(1)
  211. #define MSCC_PHY_ANA_MPLS_COMP_NXT_COMP 0x0120
  212. #define ANA_MPLS_NTX_PROT_COMPARATOR_MASK GENMASK(2, 0)
  213. #define ANA_MPLS_NTX_PROT_PTP_OAM 0x0005
  214. #define ANA_MPLS_NTX_PROT_MPLS 0x0004
  215. #define ANA_MPLS_NTX_PROT_IP_UDP_ACH_2 0x0003
  216. #define ANA_MPLS_NTX_PROT_IP_UDP_ACH_1 0x0002
  217. #define ANA_MPLS_NTX_PROT_ETH2 0x0001
  218. #define MSCC_ANA_MPLS_FLOW_CTRL(x) (0x0130 + ((x) << 4))
  219. #define MPLS_FLOW_CTRL_CHANNEL_MASK_MASK GENMASK(25, 24)
  220. #define MPLS_FLOW_CTRL_CHANNEL_MASK(x) (((x) << 24) & MPLS_FLOW_CTRL_CHANNEL_MASK_MASK)
  221. #define MPLS_FLOW_VALID_CH1 MPLS_FLOW_CTRL_CHANNEL_MASK(2)
  222. #define MPLS_FLOW_VALID_CH0 MPLS_FLOW_CTRL_CHANNEL_MASK(1)
  223. #define MSCC_ANA_IP1_NXT_PROT_NXT_COMP 0x01b0
  224. #define ANA_IP1_NXT_PROT_NXT_COMP_BYTES_HDR_MASK GENMASK(15, 8)
  225. #define ANA_IP1_NXT_PROT_NXT_COMP_BYTES_HDR(x) (((x) << 8) & ANA_IP1_NXT_PROT_NXT_COMP_BYTES_HDR_MASK)
  226. #define ANA_IP1_NXT_PROT_NXT_COMP_PTP_OAM 0x0005
  227. #define ANA_IP1_NXT_PROT_NXT_COMP_IP_UDP_ACH2 0x0003
  228. #define MSCC_ANA_IP1_NXT_PROT_IP1_MODE 0x01b1
  229. #define ANA_IP1_NXT_PROT_FLOW_OFFSET_IPV4 0x0c00
  230. #define ANA_IP1_NXT_PROT_FLOW_OFFSET_IPV6 0x0800
  231. #define ANA_IP1_NXT_PROT_IPV6 0x0001
  232. #define ANA_IP1_NXT_PROT_IPV4 0x0000
  233. #define MSCC_ANA_IP1_NXT_PROT_IP_MATCH1 0x01b2
  234. #define ANA_IP1_NXT_PROT_IP_MATCH1_PROT_OFF_MASK GENMASK(20, 16)
  235. #define ANA_IP1_NXT_PROT_IP_MATCH1_PROT_OFF(x) (((x) << 16) & ANA_IP1_NXT_PROT_IP_MATCH1_PROT_OFF_MASK)
  236. #define ANA_IP1_NXT_PROT_IP_MATCH1_PROT_MASK_MASK GENMASK(15, 8)
  237. #define ANA_IP1_NXT_PROT_IP_MATCH1_PROT_MASK(x) (((x) << 15) & ANA_IP1_NXT_PROT_IP_MATCH1_PROT_MASK_MASK)
  238. #define ANA_IP1_NXT_PROT_IP_MATCH1_PROT_MATCH_MASK GENMASK(7, 0)
  239. #define ANA_IP1_NXT_PROT_IP_MATCH1_PROT_MATCH(x) ((x) & ANA_IP1_NXT_PROT_IP_MATCH1_PROT_MATCH_MASK)
  240. #define MSCC_ANA_IP1_NXT_PROT_MATCH2_UPPER 0x01b3
  241. #define MSCC_ANA_IP1_NXT_PROT_MATCH2_LOWER 0x01b4
  242. #define MSCC_ANA_IP1_NXT_PROT_MASK2_UPPER 0x01b5
  243. #define MSCC_ANA_IP1_NXT_PROT_MASK2_LOWER 0x01b6
  244. #define MSCC_ANA_IP1_NXT_PROT_OFFSET2 0x01b7
  245. #define ANA_IP1_NXT_PROT_OFFSET2_MASK GENMASK(6, 0)
  246. #define ANA_IP1_NXT_PROT_OFFSET2(x) ((x) & ANA_IP1_NXT_PROT_OFFSET2_MASK)
  247. #define MSCC_ANA_IP1_NXT_PROT_UDP_CHKSUM 0x01b8
  248. #define IP1_NXT_PROT_UDP_CHKSUM_OFF_MASK GENMASK(15, 8)
  249. #define IP1_NXT_PROT_UDP_CHKSUM_OFF(x) (((x) << 8) & IP1_NXT_PROT_UDP_CHKSUM_OFF_MASK)
  250. #define IP1_NXT_PROT_UDP_CHKSUM_WIDTH_MASK GENMASK(5, 4)
  251. #define IP1_NXT_PROT_UDP_CHKSUM_WIDTH(x) (((x) << 4) & IP1_NXT_PROT_UDP_CHKSUM_WIDTH_MASK)
  252. #define IP1_NXT_PROT_UDP_CHKSUM_UPDATE 0x0002
  253. #define IP1_NXT_PROT_UDP_CHKSUM_CLEAR 0x0001
  254. #define MSCC_ANA_IP1_FLOW_ENA(x) (0x01c0 + ((x) << 4))
  255. #define IP1_FLOW_MATCH_ADDR_MASK GENMASK(9, 8)
  256. #define IP1_FLOW_MATCH_DEST_SRC_ADDR 0x0200
  257. #define IP1_FLOW_MATCH_DEST_ADDR 0x0100
  258. #define IP1_FLOW_MATCH_SRC_ADDR 0x0000
  259. #define IP1_FLOW_ENA_CHANNEL_MASK_MASK GENMASK(5, 4)
  260. #define IP1_FLOW_ENA_CHANNEL_MASK(x) (((x) << 4) & IP1_FLOW_ENA_CHANNEL_MASK_MASK)
  261. #define IP1_FLOW_VALID_CH1 IP1_FLOW_ENA_CHANNEL_MASK(2)
  262. #define IP1_FLOW_VALID_CH0 IP1_FLOW_ENA_CHANNEL_MASK(1)
  263. #define IP1_FLOW_ENA 0x0001
  264. #define MSCC_ANA_OAM_PTP_FLOW_ENA(x) (0x1e0 + ((x) << 4))
  265. #define MSCC_ANA_OAM_PTP_FLOW_MATCH_LOWER(x) (MSCC_ANA_OAM_PTP_FLOW_ENA(x) + 2)
  266. #define MSCC_ANA_OAM_PTP_FLOW_MASK_LOWER(x) (MSCC_ANA_OAM_PTP_FLOW_ENA(x) + 4)
  267. #define MSCC_ANA_OAM_PTP_FLOW_PTP_0_FIELD(x) (MSCC_ANA_OAM_PTP_FLOW_ENA(x) + 8)
  268. #define MSCC_ANA_IP1_FLOW_MATCH_UPPER(x) (MSCC_ANA_IP1_FLOW_ENA(x) + 1)
  269. #define MSCC_ANA_IP1_FLOW_MATCH_UPPER_MID(x) (MSCC_ANA_IP1_FLOW_ENA(x) + 2)
  270. #define MSCC_ANA_IP1_FLOW_MATCH_LOWER_MID(x) (MSCC_ANA_IP1_FLOW_ENA(x) + 3)
  271. #define MSCC_ANA_IP1_FLOW_MATCH_LOWER(x) (MSCC_ANA_IP1_FLOW_ENA(x) + 4)
  272. #define MSCC_ANA_IP1_FLOW_MASK_UPPER(x) (MSCC_ANA_IP1_FLOW_ENA(x) + 5)
  273. #define MSCC_ANA_IP1_FLOW_MASK_UPPER_MID(x) (MSCC_ANA_IP1_FLOW_ENA(x) + 6)
  274. #define MSCC_ANA_IP1_FLOW_MASK_LOWER_MID(x) (MSCC_ANA_IP1_FLOW_ENA(x) + 7)
  275. #define MSCC_ANA_IP1_FLOW_MASK_LOWER(x) (MSCC_ANA_IP1_FLOW_ENA(x) + 8)
  276. #define MSCC_ANA_IP2_NXT_PROT_NXT_COMP 0x0240
  277. #define ANA_IP2_NXT_PROT_NXT_COMP_BYTES_HDR_MASK GENMASK(15, 8)
  278. #define ANA_IP2_NXT_PROT_NXT_COMP_BYTES_HDR(x) (((x) << 8) & ANA_IP2_NXT_PROT_NXT_COMP_BYTES_HDR_MASK)
  279. #define ANA_IP2_NXT_PROT_NXT_COMP_PTP_OAM 0x0005
  280. #define ANA_IP2_NXT_PROT_NXT_COMP_IP_UDP_ACH2 0x0003
  281. #define MSCC_ANA_IP2_NXT_PROT_UDP_CHKSUM 0x0248
  282. #define IP2_NXT_PROT_UDP_CHKSUM_OFF_MASK GENMASK(15, 8)
  283. #define IP2_NXT_PROT_UDP_CHKSUM_OFF(x) (((x) << 8) & IP2_NXT_PROT_UDP_CHKSUM_OFF_MASK)
  284. #define IP2_NXT_PROT_UDP_CHKSUM_WIDTH_MASK GENMASK(5, 4)
  285. #define IP2_NXT_PROT_UDP_CHKSUM_WIDTH(x) (((x) << 4) & IP2_NXT_PROT_UDP_CHKSUM_WIDTH_MASK)
  286. #define MSCC_ANA_IP2_FLOW_ENA(x) (0x0250 + ((x) << 4))
  287. #define IP2_FLOW_ENA_CHANNEL_MASK_MASK GENMASK(5, 4)
  288. #define IP2_FLOW_ENA_CHANNEL_MASK(x) (((x) << 4) & IP2_FLOW_ENA_CHANNEL_MASK_MASK)
  289. #define IP2_FLOW_VALID_CH1 IP2_FLOW_ENA_CHANNEL_MASK(2)
  290. #define IP2_FLOW_VALID_CH0 IP2_FLOW_ENA_CHANNEL_MASK(1)
  291. #define MSCC_ANA_PTP_FLOW_ENA(x) (0x02d0 + ((x) << 4))
  292. #define PTP_FLOW_ENA_CHANNEL_MASK_MASK GENMASK(5, 4)
  293. #define PTP_FLOW_ENA_CHANNEL_MASK(x) (((x) << 4) & PTP_FLOW_ENA_CHANNEL_MASK_MASK)
  294. #define PTP_FLOW_VALID_CH1 PTP_FLOW_ENA_CHANNEL_MASK(2)
  295. #define PTP_FLOW_VALID_CH0 PTP_FLOW_ENA_CHANNEL_MASK(1)
  296. #define PTP_FLOW_ENA 0x0001
  297. #define MSCC_ANA_PTP_FLOW_MATCH_UPPER(x) (MSCC_ANA_PTP_FLOW_ENA(x) + 1)
  298. #define PTP_FLOW_MSG_TYPE_MASK 0x0F000000
  299. #define PTP_FLOW_MSG_PDELAY_RESP 0x04000000
  300. #define PTP_FLOW_MSG_PDELAY_REQ 0x02000000
  301. #define PTP_FLOW_MSG_DELAY_REQ 0x01000000
  302. #define PTP_FLOW_MSG_SYNC 0x00000000
  303. #define MSCC_ANA_PTP_FLOW_MATCH_LOWER(x) (MSCC_ANA_PTP_FLOW_ENA(x) + 2)
  304. #define MSCC_ANA_PTP_FLOW_MASK_UPPER(x) (MSCC_ANA_PTP_FLOW_ENA(x) + 3)
  305. #define MSCC_ANA_PTP_FLOW_MASK_LOWER(x) (MSCC_ANA_PTP_FLOW_ENA(x) + 4)
  306. #define MSCC_ANA_PTP_FLOW_DOMAIN_RANGE(x) (MSCC_ANA_PTP_FLOW_ENA(x) + 5)
  307. #define PTP_FLOW_DOMAIN_RANGE_ENA 0x0001
  308. #define MSCC_ANA_PTP_FLOW_PTP_ACTION(x) (MSCC_ANA_PTP_FLOW_ENA(x) + 6)
  309. #define PTP_FLOW_PTP_ACTION_MOD_FRAME_STATUS_UPDATE 0x10000000
  310. #define PTP_FLOW_PTP_ACTION_MOD_FRAME_STATUS_BYTE_OFFSET_MASK GENMASK(26, 24)
  311. #define PTP_FLOW_PTP_ACTION_MOD_FRAME_STATUS_BYTE_OFFSET(x) (((x) << 24) & PTP_FLOW_PTP_ACTION_MOD_FRAME_STATUS_BYTE_OFFSET_MASK)
  312. #define PTP_FLOW_PTP_ACTION_PTP_CMD_MASK GENMASK(3, 0)
  313. #define PTP_FLOW_PTP_ACTION_PTP_CMD(x) ((x) & PTP_FLOW_PTP_ACTION_PTP_CMD_MASK)
  314. #define PTP_FLOW_PTP_ACTION_SUB_DELAY_ASYM 0x00200000
  315. #define PTP_FLOW_PTP_ACTION_ADD_DELAY_ASYM 0x00100000
  316. #define PTP_FLOW_PTP_ACTION_TIME_OFFSET_MASK GENMASK(15, 10)
  317. #define PTP_FLOW_PTP_ACTION_TIME_OFFSET(x) (((x) << 10) & PTP_FLOW_PTP_ACTION_TIME_OFFSET_MASK)
  318. #define PTP_FLOW_PTP_ACTION_CORR_OFFSET_MASK GENMASK(9, 5)
  319. #define PTP_FLOW_PTP_ACTION_CORR_OFFSET(x) (((x) << 5) & PTP_FLOW_PTP_ACTION_CORR_OFFSET_MASK)
  320. #define PTP_FLOW_PTP_ACTION_SAVE_LOCAL_TIME 0x00000010
  321. #define MSCC_ANA_PTP_FLOW_PTP_ACTION2(x) (MSCC_ANA_PTP_FLOW_ENA(x) + 7)
  322. #define PTP_FLOW_PTP_ACTION2_REWRITE_OFFSET_MASK GENMASK(15, 8)
  323. #define PTP_FLOW_PTP_ACTION2_REWRITE_OFFSET(x) (((x) << 8) & PTP_FLOW_PTP_ACTION2_REWRITE_OFFSET_MASK)
  324. #define PTP_FLOW_PTP_ACTION2_REWRITE_BYTES_MASK GENMASK(3, 0)
  325. #define PTP_FLOW_PTP_ACTION2_REWRITE_BYTES(x) ((x) & PTP_FLOW_PTP_ACTION2_REWRITE_BYTES_MASK)
  326. #define MSCC_ANA_PTP_FLOW_PTP_0_FIELD(x) (MSCC_ANA_PTP_FLOW_ENA(x) + 8)
  327. #define PTP_FLOW_PTP_0_FIELD_PTP_FRAME 0x8000
  328. #define PTP_FLOW_PTP_0_FIELD_RSVRD_CHECK 0x4000
  329. #define PTP_FLOW_PTP_0_FIELD_OFFSET_MASK GENMASK(13, 8)
  330. #define PTP_FLOW_PTP_0_FIELD_OFFSET(x) (((x) << 8) & PTP_FLOW_PTP_0_FIELD_OFFSET_MASK)
  331. #define PTP_FLOW_PTP_0_FIELD_BYTES_MASK GENMASK(3, 0)
  332. #define PTP_FLOW_PTP_0_FIELD_BYTES(x) ((x) & PTP_FLOW_PTP_0_FIELD_BYTES_MASK)
  333. #define MSCC_ANA_PTP_IP_CHKSUM_SEL 0x0330
  334. #define ANA_PTP_IP_CHKSUM_SEL_IP_COMP_2 0x0001
  335. #define ANA_PTP_IP_CHKSUM_SEL_IP_COMP_1 0x0000
  336. #define MSCC_PHY_ANA_FSB_CFG 0x331
  337. #define ANA_FSB_ADDR_FROM_BLOCK_SEL_MASK GENMASK(1, 0)
  338. #define ANA_FSB_ADDR_FROM_IP2 0x0003
  339. #define ANA_FSB_ADDR_FROM_IP1 0x0002
  340. #define ANA_FSB_ADDR_FROM_ETH2 0x0001
  341. #define ANA_FSB_ADDR_FROM_ETH1 0x0000
  342. #define MSCC_PHY_ANA_FSB_REG(x) (0x332 + (x))
  343. #define COMP_MAX_FLOWS 8
  344. #define PTP_COMP_MAX_FLOWS 6
  345. #define PPS_WIDTH_ADJ 0x1dcd6500
  346. #define STALL_EGR_LATENCY(x) (1536000 / (x))
  347. /* PHC clock available frequencies. */
  348. enum {
  349. PHC_CLK_125MHZ,
  350. PHC_CLK_156_25MHZ,
  351. PHC_CLK_200MHZ,
  352. PHC_CLK_250MHZ,
  353. PHC_CLK_500MHZ,
  354. };
  355. enum ptp_cmd {
  356. PTP_NOP = 0,
  357. PTP_WRITE_1588 = 5,
  358. PTP_WRITE_NS = 7,
  359. PTP_SAVE_IN_TS_FIFO = 11, /* invalid when writing in reg */
  360. };
  361. struct vsc85xx_ptphdr {
  362. u8 tsmt; /* transportSpecific | messageType */
  363. u8 ver; /* reserved0 | versionPTP */
  364. __be16 msglen;
  365. u8 domain;
  366. u8 rsrvd1;
  367. __be16 flags;
  368. __be64 correction;
  369. __be32 rsrvd2;
  370. __be64 clk_identity;
  371. __be16 src_port_id;
  372. __be16 seq_id;
  373. u8 ctrl;
  374. u8 log_interval;
  375. } __attribute__((__packed__));
  376. /* Represents an entry in the timestamping FIFO */
  377. struct vsc85xx_ts_fifo {
  378. u32 ns;
  379. u64 secs:48;
  380. u8 sig[16];
  381. } __attribute__((__packed__));
  382. struct vsc85xx_ptp {
  383. struct phy_device *phydev;
  384. struct ptp_clock *ptp_clock;
  385. struct ptp_clock_info caps;
  386. struct sk_buff_head tx_queue;
  387. enum hwtstamp_tx_types tx_type;
  388. enum hwtstamp_rx_filters rx_filter;
  389. u8 configured:1;
  390. };
  391. #endif /* _MSCC_PHY_PTP_H_ */