cvmx-ciu-defs.h 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /* Octeon CIU definitions
  3. *
  4. * Copyright (C) 2003-2018 Cavium, Inc.
  5. */
  6. #ifndef __CVMX_CIU_DEFS_H__
  7. #define __CVMX_CIU_DEFS_H__
  8. #include <asm/bitfield.h>
  9. #define CVMX_CIU_ADDR(addr, coreid, coremask, offset) \
  10. (CVMX_ADD_IO_SEG(0x0001070000000000ull + addr##ull) + \
  11. (((coreid) & (coremask)) * offset))
  12. #define CVMX_CIU_EN2_PPX_IP4(c) CVMX_CIU_ADDR(0xA400, c, 0x0F, 8)
  13. #define CVMX_CIU_EN2_PPX_IP4_W1C(c) CVMX_CIU_ADDR(0xCC00, c, 0x0F, 8)
  14. #define CVMX_CIU_EN2_PPX_IP4_W1S(c) CVMX_CIU_ADDR(0xAC00, c, 0x0F, 8)
  15. #define CVMX_CIU_FUSE CVMX_CIU_ADDR(0x0728, 0, 0x00, 0)
  16. #define CVMX_CIU_INT_SUM1 CVMX_CIU_ADDR(0x0108, 0, 0x00, 0)
  17. #define CVMX_CIU_INTX_EN0(c) CVMX_CIU_ADDR(0x0200, c, 0x3F, 16)
  18. #define CVMX_CIU_INTX_EN0_W1C(c) CVMX_CIU_ADDR(0x2200, c, 0x3F, 16)
  19. #define CVMX_CIU_INTX_EN0_W1S(c) CVMX_CIU_ADDR(0x6200, c, 0x3F, 16)
  20. #define CVMX_CIU_INTX_EN1(c) CVMX_CIU_ADDR(0x0208, c, 0x3F, 16)
  21. #define CVMX_CIU_INTX_EN1_W1C(c) CVMX_CIU_ADDR(0x2208, c, 0x3F, 16)
  22. #define CVMX_CIU_INTX_EN1_W1S(c) CVMX_CIU_ADDR(0x6208, c, 0x3F, 16)
  23. #define CVMX_CIU_INTX_SUM0(c) CVMX_CIU_ADDR(0x0000, c, 0x3F, 8)
  24. #define CVMX_CIU_NMI CVMX_CIU_ADDR(0x0718, 0, 0x00, 0)
  25. #define CVMX_CIU_PCI_INTA CVMX_CIU_ADDR(0x0750, 0, 0x00, 0)
  26. #define CVMX_CIU_PP_BIST_STAT CVMX_CIU_ADDR(0x07E0, 0, 0x00, 0)
  27. #define CVMX_CIU_PP_DBG CVMX_CIU_ADDR(0x0708, 0, 0x00, 0)
  28. #define CVMX_CIU_PP_RST CVMX_CIU_ADDR(0x0700, 0, 0x00, 0)
  29. #define CVMX_CIU_QLM0 CVMX_CIU_ADDR(0x0780, 0, 0x00, 0)
  30. #define CVMX_CIU_QLM1 CVMX_CIU_ADDR(0x0788, 0, 0x00, 0)
  31. #define CVMX_CIU_QLM_JTGC CVMX_CIU_ADDR(0x0768, 0, 0x00, 0)
  32. #define CVMX_CIU_QLM_JTGD CVMX_CIU_ADDR(0x0770, 0, 0x00, 0)
  33. #define CVMX_CIU_SOFT_BIST CVMX_CIU_ADDR(0x0738, 0, 0x00, 0)
  34. #define CVMX_CIU_SOFT_PRST1 CVMX_CIU_ADDR(0x0758, 0, 0x00, 0)
  35. #define CVMX_CIU_SOFT_PRST CVMX_CIU_ADDR(0x0748, 0, 0x00, 0)
  36. #define CVMX_CIU_SOFT_RST CVMX_CIU_ADDR(0x0740, 0, 0x00, 0)
  37. #define CVMX_CIU_SUM2_PPX_IP4(c) CVMX_CIU_ADDR(0x8C00, c, 0x0F, 8)
  38. #define CVMX_CIU_TIM_MULTI_CAST CVMX_CIU_ADDR(0xC200, 0, 0x00, 0)
  39. #define CVMX_CIU_TIMX(c) CVMX_CIU_ADDR(0x0480, c, 0x0F, 8)
  40. static inline uint64_t CVMX_CIU_MBOX_CLRX(unsigned int coreid)
  41. {
  42. if (cvmx_get_octeon_family() == (OCTEON_CN68XX & OCTEON_FAMILY_MASK))
  43. return CVMX_CIU_ADDR(0x100100600, coreid, 0x0F, 8);
  44. else
  45. return CVMX_CIU_ADDR(0x000000680, coreid, 0x0F, 8);
  46. }
  47. static inline uint64_t CVMX_CIU_MBOX_SETX(unsigned int coreid)
  48. {
  49. if (cvmx_get_octeon_family() == (OCTEON_CN68XX & OCTEON_FAMILY_MASK))
  50. return CVMX_CIU_ADDR(0x100100400, coreid, 0x0F, 8);
  51. else
  52. return CVMX_CIU_ADDR(0x000000600, coreid, 0x0F, 8);
  53. }
  54. static inline uint64_t CVMX_CIU_PP_POKEX(unsigned int coreid)
  55. {
  56. switch (cvmx_get_octeon_family()) {
  57. case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
  58. return CVMX_CIU_ADDR(0x100100200, coreid, 0x0F, 8);
  59. case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
  60. case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
  61. case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
  62. return CVMX_CIU_ADDR(0x000030000, coreid, 0x0F, 8) -
  63. 0x60000000000ull;
  64. default:
  65. return CVMX_CIU_ADDR(0x000000580, coreid, 0x0F, 8);
  66. }
  67. }
  68. static inline uint64_t CVMX_CIU_WDOGX(unsigned int coreid)
  69. {
  70. switch (cvmx_get_octeon_family()) {
  71. case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
  72. return CVMX_CIU_ADDR(0x100100000, coreid, 0x0F, 8);
  73. case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
  74. case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
  75. case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
  76. return CVMX_CIU_ADDR(0x000020000, coreid, 0x0F, 8) -
  77. 0x60000000000ull;
  78. default:
  79. return CVMX_CIU_ADDR(0x000000500, coreid, 0x0F, 8);
  80. }
  81. }
  82. union cvmx_ciu_qlm {
  83. uint64_t u64;
  84. struct cvmx_ciu_qlm_s {
  85. __BITFIELD_FIELD(uint64_t g2bypass:1,
  86. __BITFIELD_FIELD(uint64_t reserved_53_62:10,
  87. __BITFIELD_FIELD(uint64_t g2deemph:5,
  88. __BITFIELD_FIELD(uint64_t reserved_45_47:3,
  89. __BITFIELD_FIELD(uint64_t g2margin:5,
  90. __BITFIELD_FIELD(uint64_t reserved_32_39:8,
  91. __BITFIELD_FIELD(uint64_t txbypass:1,
  92. __BITFIELD_FIELD(uint64_t reserved_21_30:10,
  93. __BITFIELD_FIELD(uint64_t txdeemph:5,
  94. __BITFIELD_FIELD(uint64_t reserved_13_15:3,
  95. __BITFIELD_FIELD(uint64_t txmargin:5,
  96. __BITFIELD_FIELD(uint64_t reserved_4_7:4,
  97. __BITFIELD_FIELD(uint64_t lane_en:4,
  98. ;)))))))))))))
  99. } s;
  100. };
  101. union cvmx_ciu_qlm_jtgc {
  102. uint64_t u64;
  103. struct cvmx_ciu_qlm_jtgc_s {
  104. __BITFIELD_FIELD(uint64_t reserved_17_63:47,
  105. __BITFIELD_FIELD(uint64_t bypass_ext:1,
  106. __BITFIELD_FIELD(uint64_t reserved_11_15:5,
  107. __BITFIELD_FIELD(uint64_t clk_div:3,
  108. __BITFIELD_FIELD(uint64_t reserved_7_7:1,
  109. __BITFIELD_FIELD(uint64_t mux_sel:3,
  110. __BITFIELD_FIELD(uint64_t bypass:4,
  111. ;)))))))
  112. } s;
  113. };
  114. union cvmx_ciu_qlm_jtgd {
  115. uint64_t u64;
  116. struct cvmx_ciu_qlm_jtgd_s {
  117. __BITFIELD_FIELD(uint64_t capture:1,
  118. __BITFIELD_FIELD(uint64_t shift:1,
  119. __BITFIELD_FIELD(uint64_t update:1,
  120. __BITFIELD_FIELD(uint64_t reserved_45_60:16,
  121. __BITFIELD_FIELD(uint64_t select:5,
  122. __BITFIELD_FIELD(uint64_t reserved_37_39:3,
  123. __BITFIELD_FIELD(uint64_t shft_cnt:5,
  124. __BITFIELD_FIELD(uint64_t shft_reg:32,
  125. ;))))))))
  126. } s;
  127. };
  128. union cvmx_ciu_soft_prst {
  129. uint64_t u64;
  130. struct cvmx_ciu_soft_prst_s {
  131. __BITFIELD_FIELD(uint64_t reserved_3_63:61,
  132. __BITFIELD_FIELD(uint64_t host64:1,
  133. __BITFIELD_FIELD(uint64_t npi:1,
  134. __BITFIELD_FIELD(uint64_t soft_prst:1,
  135. ;))))
  136. } s;
  137. };
  138. union cvmx_ciu_timx {
  139. uint64_t u64;
  140. struct cvmx_ciu_timx_s {
  141. __BITFIELD_FIELD(uint64_t reserved_37_63:27,
  142. __BITFIELD_FIELD(uint64_t one_shot:1,
  143. __BITFIELD_FIELD(uint64_t len:36,
  144. ;)))
  145. } s;
  146. };
  147. union cvmx_ciu_wdogx {
  148. uint64_t u64;
  149. struct cvmx_ciu_wdogx_s {
  150. __BITFIELD_FIELD(uint64_t reserved_46_63:18,
  151. __BITFIELD_FIELD(uint64_t gstopen:1,
  152. __BITFIELD_FIELD(uint64_t dstop:1,
  153. __BITFIELD_FIELD(uint64_t cnt:24,
  154. __BITFIELD_FIELD(uint64_t len:16,
  155. __BITFIELD_FIELD(uint64_t state:2,
  156. __BITFIELD_FIELD(uint64_t mode:2,
  157. ;)))))))
  158. } s;
  159. };
  160. #endif /* __CVMX_CIU_DEFS_H__ */