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