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