162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/* Octeon CIU definitions
362306a36Sopenharmony_ci *
462306a36Sopenharmony_ci * Copyright (C) 2003-2018 Cavium, Inc.
562306a36Sopenharmony_ci */
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#ifndef __CVMX_CIU_DEFS_H__
862306a36Sopenharmony_ci#define __CVMX_CIU_DEFS_H__
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#include <asm/bitfield.h>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#define CVMX_CIU_ADDR(addr, coreid, coremask, offset)			       \
1362306a36Sopenharmony_ci	(CVMX_ADD_IO_SEG(0x0001070000000000ull + addr##ull) +		       \
1462306a36Sopenharmony_ci	(((coreid) & (coremask)) * offset))
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci#define CVMX_CIU_EN2_PPX_IP4(c)		CVMX_CIU_ADDR(0xA400, c, 0x0F, 8)
1762306a36Sopenharmony_ci#define CVMX_CIU_EN2_PPX_IP4_W1C(c)	CVMX_CIU_ADDR(0xCC00, c, 0x0F, 8)
1862306a36Sopenharmony_ci#define CVMX_CIU_EN2_PPX_IP4_W1S(c)	CVMX_CIU_ADDR(0xAC00, c, 0x0F, 8)
1962306a36Sopenharmony_ci#define CVMX_CIU_FUSE			CVMX_CIU_ADDR(0x0728, 0, 0x00, 0)
2062306a36Sopenharmony_ci#define CVMX_CIU_INT_SUM1		CVMX_CIU_ADDR(0x0108, 0, 0x00, 0)
2162306a36Sopenharmony_ci#define CVMX_CIU_INTX_EN0(c)		CVMX_CIU_ADDR(0x0200, c, 0x3F, 16)
2262306a36Sopenharmony_ci#define CVMX_CIU_INTX_EN0_W1C(c)	CVMX_CIU_ADDR(0x2200, c, 0x3F, 16)
2362306a36Sopenharmony_ci#define CVMX_CIU_INTX_EN0_W1S(c)	CVMX_CIU_ADDR(0x6200, c, 0x3F, 16)
2462306a36Sopenharmony_ci#define CVMX_CIU_INTX_EN1(c)		CVMX_CIU_ADDR(0x0208, c, 0x3F, 16)
2562306a36Sopenharmony_ci#define CVMX_CIU_INTX_EN1_W1C(c)	CVMX_CIU_ADDR(0x2208, c, 0x3F, 16)
2662306a36Sopenharmony_ci#define CVMX_CIU_INTX_EN1_W1S(c)	CVMX_CIU_ADDR(0x6208, c, 0x3F, 16)
2762306a36Sopenharmony_ci#define CVMX_CIU_INTX_SUM0(c)		CVMX_CIU_ADDR(0x0000, c, 0x3F, 8)
2862306a36Sopenharmony_ci#define CVMX_CIU_NMI			CVMX_CIU_ADDR(0x0718, 0, 0x00, 0)
2962306a36Sopenharmony_ci#define CVMX_CIU_PCI_INTA		CVMX_CIU_ADDR(0x0750, 0, 0x00, 0)
3062306a36Sopenharmony_ci#define CVMX_CIU_PP_BIST_STAT		CVMX_CIU_ADDR(0x07E0, 0, 0x00, 0)
3162306a36Sopenharmony_ci#define CVMX_CIU_PP_DBG			CVMX_CIU_ADDR(0x0708, 0, 0x00, 0)
3262306a36Sopenharmony_ci#define CVMX_CIU_PP_RST			CVMX_CIU_ADDR(0x0700, 0, 0x00, 0)
3362306a36Sopenharmony_ci#define CVMX_CIU_QLM0			CVMX_CIU_ADDR(0x0780, 0, 0x00, 0)
3462306a36Sopenharmony_ci#define CVMX_CIU_QLM1			CVMX_CIU_ADDR(0x0788, 0, 0x00, 0)
3562306a36Sopenharmony_ci#define CVMX_CIU_QLM_JTGC		CVMX_CIU_ADDR(0x0768, 0, 0x00, 0)
3662306a36Sopenharmony_ci#define CVMX_CIU_QLM_JTGD		CVMX_CIU_ADDR(0x0770, 0, 0x00, 0)
3762306a36Sopenharmony_ci#define CVMX_CIU_SOFT_BIST		CVMX_CIU_ADDR(0x0738, 0, 0x00, 0)
3862306a36Sopenharmony_ci#define CVMX_CIU_SOFT_PRST1		CVMX_CIU_ADDR(0x0758, 0, 0x00, 0)
3962306a36Sopenharmony_ci#define CVMX_CIU_SOFT_PRST		CVMX_CIU_ADDR(0x0748, 0, 0x00, 0)
4062306a36Sopenharmony_ci#define CVMX_CIU_SOFT_RST		CVMX_CIU_ADDR(0x0740, 0, 0x00, 0)
4162306a36Sopenharmony_ci#define CVMX_CIU_SUM2_PPX_IP4(c)	CVMX_CIU_ADDR(0x8C00, c, 0x0F, 8)
4262306a36Sopenharmony_ci#define CVMX_CIU_TIM_MULTI_CAST		CVMX_CIU_ADDR(0xC200, 0, 0x00, 0)
4362306a36Sopenharmony_ci#define CVMX_CIU_TIMX(c)		CVMX_CIU_ADDR(0x0480, c, 0x0F, 8)
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_cistatic inline uint64_t CVMX_CIU_MBOX_CLRX(unsigned int coreid)
4662306a36Sopenharmony_ci{
4762306a36Sopenharmony_ci	if (cvmx_get_octeon_family() == (OCTEON_CN68XX & OCTEON_FAMILY_MASK))
4862306a36Sopenharmony_ci		return CVMX_CIU_ADDR(0x100100600, coreid, 0x0F, 8);
4962306a36Sopenharmony_ci	else
5062306a36Sopenharmony_ci		return CVMX_CIU_ADDR(0x000000680, coreid, 0x0F, 8);
5162306a36Sopenharmony_ci}
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_cistatic inline uint64_t CVMX_CIU_MBOX_SETX(unsigned int coreid)
5462306a36Sopenharmony_ci{
5562306a36Sopenharmony_ci	if (cvmx_get_octeon_family() == (OCTEON_CN68XX & OCTEON_FAMILY_MASK))
5662306a36Sopenharmony_ci		return CVMX_CIU_ADDR(0x100100400, coreid, 0x0F, 8);
5762306a36Sopenharmony_ci	else
5862306a36Sopenharmony_ci		return CVMX_CIU_ADDR(0x000000600, coreid, 0x0F, 8);
5962306a36Sopenharmony_ci}
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_cistatic inline uint64_t CVMX_CIU_PP_POKEX(unsigned int coreid)
6262306a36Sopenharmony_ci{
6362306a36Sopenharmony_ci	switch (cvmx_get_octeon_family()) {
6462306a36Sopenharmony_ci	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
6562306a36Sopenharmony_ci		return CVMX_CIU_ADDR(0x100100200, coreid, 0x0F, 8);
6662306a36Sopenharmony_ci	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
6762306a36Sopenharmony_ci	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
6862306a36Sopenharmony_ci	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
6962306a36Sopenharmony_ci		return CVMX_CIU_ADDR(0x000030000, coreid, 0x0F, 8) -
7062306a36Sopenharmony_ci			0x60000000000ull;
7162306a36Sopenharmony_ci	default:
7262306a36Sopenharmony_ci		return CVMX_CIU_ADDR(0x000000580, coreid, 0x0F, 8);
7362306a36Sopenharmony_ci	}
7462306a36Sopenharmony_ci}
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_cistatic inline uint64_t CVMX_CIU_WDOGX(unsigned int coreid)
7762306a36Sopenharmony_ci{
7862306a36Sopenharmony_ci	switch (cvmx_get_octeon_family()) {
7962306a36Sopenharmony_ci	case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
8062306a36Sopenharmony_ci		return CVMX_CIU_ADDR(0x100100000, coreid, 0x0F, 8);
8162306a36Sopenharmony_ci	case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
8262306a36Sopenharmony_ci	case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
8362306a36Sopenharmony_ci	case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
8462306a36Sopenharmony_ci		return CVMX_CIU_ADDR(0x000020000, coreid, 0x0F, 8) -
8562306a36Sopenharmony_ci			0x60000000000ull;
8662306a36Sopenharmony_ci	default:
8762306a36Sopenharmony_ci		return CVMX_CIU_ADDR(0x000000500, coreid, 0x0F, 8);
8862306a36Sopenharmony_ci	}
8962306a36Sopenharmony_ci}
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_ci
9262306a36Sopenharmony_ciunion cvmx_ciu_qlm {
9362306a36Sopenharmony_ci	uint64_t u64;
9462306a36Sopenharmony_ci	struct cvmx_ciu_qlm_s {
9562306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t g2bypass:1,
9662306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t reserved_53_62:10,
9762306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t g2deemph:5,
9862306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t reserved_45_47:3,
9962306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t g2margin:5,
10062306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t reserved_32_39:8,
10162306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t txbypass:1,
10262306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t reserved_21_30:10,
10362306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t txdeemph:5,
10462306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t reserved_13_15:3,
10562306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t txmargin:5,
10662306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t reserved_4_7:4,
10762306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t lane_en:4,
10862306a36Sopenharmony_ci		;)))))))))))))
10962306a36Sopenharmony_ci	} s;
11062306a36Sopenharmony_ci};
11162306a36Sopenharmony_ci
11262306a36Sopenharmony_ciunion cvmx_ciu_qlm_jtgc {
11362306a36Sopenharmony_ci	uint64_t u64;
11462306a36Sopenharmony_ci	struct cvmx_ciu_qlm_jtgc_s {
11562306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t reserved_17_63:47,
11662306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t bypass_ext:1,
11762306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t reserved_11_15:5,
11862306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t clk_div:3,
11962306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t reserved_7_7:1,
12062306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t mux_sel:3,
12162306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t bypass:4,
12262306a36Sopenharmony_ci		;)))))))
12362306a36Sopenharmony_ci	} s;
12462306a36Sopenharmony_ci};
12562306a36Sopenharmony_ci
12662306a36Sopenharmony_ciunion cvmx_ciu_qlm_jtgd {
12762306a36Sopenharmony_ci	uint64_t u64;
12862306a36Sopenharmony_ci	struct cvmx_ciu_qlm_jtgd_s {
12962306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t capture:1,
13062306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t shift:1,
13162306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t update:1,
13262306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t reserved_45_60:16,
13362306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t select:5,
13462306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t reserved_37_39:3,
13562306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t shft_cnt:5,
13662306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t shft_reg:32,
13762306a36Sopenharmony_ci		;))))))))
13862306a36Sopenharmony_ci	} s;
13962306a36Sopenharmony_ci};
14062306a36Sopenharmony_ci
14162306a36Sopenharmony_ciunion cvmx_ciu_soft_prst {
14262306a36Sopenharmony_ci	uint64_t u64;
14362306a36Sopenharmony_ci	struct cvmx_ciu_soft_prst_s {
14462306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t reserved_3_63:61,
14562306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t host64:1,
14662306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t npi:1,
14762306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t soft_prst:1,
14862306a36Sopenharmony_ci		;))))
14962306a36Sopenharmony_ci	} s;
15062306a36Sopenharmony_ci};
15162306a36Sopenharmony_ci
15262306a36Sopenharmony_ciunion cvmx_ciu_timx {
15362306a36Sopenharmony_ci	uint64_t u64;
15462306a36Sopenharmony_ci	struct cvmx_ciu_timx_s {
15562306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t reserved_37_63:27,
15662306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t one_shot:1,
15762306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t len:36,
15862306a36Sopenharmony_ci		;)))
15962306a36Sopenharmony_ci	} s;
16062306a36Sopenharmony_ci};
16162306a36Sopenharmony_ci
16262306a36Sopenharmony_ciunion cvmx_ciu_wdogx {
16362306a36Sopenharmony_ci	uint64_t u64;
16462306a36Sopenharmony_ci	struct cvmx_ciu_wdogx_s {
16562306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t reserved_46_63:18,
16662306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t gstopen:1,
16762306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t dstop:1,
16862306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t cnt:24,
16962306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t len:16,
17062306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t state:2,
17162306a36Sopenharmony_ci		__BITFIELD_FIELD(uint64_t mode:2,
17262306a36Sopenharmony_ci		;)))))))
17362306a36Sopenharmony_ci	} s;
17462306a36Sopenharmony_ci};
17562306a36Sopenharmony_ci
17662306a36Sopenharmony_ci#endif /* __CVMX_CIU_DEFS_H__ */
177