xref: /OK3568_Linux_fs/kernel/arch/mips/include/asm/octeon/cvmx-ciu-defs.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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