blob: c695ffc71f5c2458fd6630232f16a8b78059239b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
/* SPDX-License-Identifier: GPL-2.0+ */
/*
* MIPS Coherence Manager (CM) Register Definitions
*
* Copyright (c) 2016 Imagination Technologies Ltd.
*/
#ifndef __MIPS_ASM_CM_H__
#define __MIPS_ASM_CM_H__
/* Global Control Register (GCR) offsets */
#define GCR_CONFIG 0x0000
#define GCR_BASE 0x0008
#define GCR_BASE_UPPER 0x000c
#define GCR_CONTROL 0x0010
#define GCR_ACCESS 0x0020
#define GCR_REV 0x0030
#define GCR_GIC_BASE 0x0080
#define GCR_CPC_BASE 0x0088
#define GCR_REG0_BASE 0x0090
#define GCR_REG0_MASK 0x0098
#define GCR_REG1_BASE 0x00a0
#define GCR_REG1_MASK 0x00a8
#define GCR_REG2_BASE 0x00b0
#define GCR_REG2_MASK 0x00b8
#define GCR_REG3_BASE 0x00c0
#define GCR_REG3_MASK 0x00c8
#define GCR_CPC_STATUS 0x00f0
#define GCR_L2_CONFIG 0x0130
#define GCR_L2_TAG_ADDR 0x0600
#define GCR_L2_TAG_ADDR_UPPER 0x0604
#define GCR_L2_TAG_STATE 0x0608
#define GCR_L2_TAG_STATE_UPPER 0x060c
#define GCR_L2_DATA 0x0610
#define GCR_L2_DATA_UPPER 0x0614
#define GCR_Cx_COHERENCE 0x2008
#define GCR_Cx_OTHER 0x2018
#define GCR_Cx_ID 0x2028
#define GCR_CO_COHERENCE 0x4008
/* GCR_CONFIG fields */
#define GCR_CONFIG_NUM_CLUSTERS_SHIFT 23
#define GCR_CONFIG_NUM_CLUSTERS (0x7f << 23)
#define GCR_CONFIG_NUMIOCU_SHIFT 8
#define GCR_CONFIG_NUMIOCU (0xff << 8)
#define GCR_CONFIG_PCORES_SHIFT 0
#define GCR_CONFIG_PCORES (0xff << 0)
/* GCR_BASE fields */
#define GCR_BASE_SHIFT 15
#define CCA_DEFAULT_OVR_SHIFT 5
#define CCA_DEFAULT_OVR_MASK (0x7 << 5)
#define CCA_DEFAULT_OVREN (0x1 << 4)
#define CM_DEFAULT_TARGET_SHIFT 0
#define CM_DEFAULT_TARGET_MASK (0x3 << 0)
/* GCR_CONTROL fields */
#define GCR_CONTROL_SYNCCTL (0x1 << 16)
/* GCR_REV CM versions */
#define GCR_REV_CM3 0x0800
/* GCR_GIC_BASE fields */
#define GCR_GIC_BASE_ADDRMASK_SHIFT 7
#define GCR_GIC_BASE_ADDRMASK (0x1ffffff << 7)
#define GCR_GIC_EN (0x1 << 0)
/* GCR_CPC_BASE fields */
#define GCR_CPC_BASE_ADDRMASK_SHIFT 15
#define GCR_CPC_BASE_ADDRMASK (0x1ffff << 15)
#define GCR_CPC_EN (0x1 << 0)
/* GCR_REGn_MASK fields */
#define GCR_REGn_MASK_ADDRMASK_SHIFT 16
#define GCR_REGn_MASK_ADDRMASK (0xffff << 16)
#define GCR_REGn_MASK_CCAOVR_SHIFT 5
#define GCR_REGn_MASK_CCAOVR (0x7 << 5)
#define GCR_REGn_MASK_CCAOVREN (1 << 4)
#define GCR_REGn_MASK_DROPL2 (1 << 2)
#define GCR_REGn_MASK_CMTGT_SHIFT 0
#define GCR_REGn_MASK_CMTGT (0x3 << 0)
#define GCR_REGn_MASK_CMTGT_DISABLED 0x0
#define GCR_REGn_MASK_CMTGT_MEM 0x1
#define GCR_REGn_MASK_CMTGT_IOCU0 0x2
#define GCR_REGn_MASK_CMTGT_IOCU1 0x3
/* GCR_CPC_STATUS fields */
#define GCR_CPC_EX (0x1 << 0)
/* GCR_L2_CONFIG fields */
#define GCR_L2_CONFIG_ASSOC_SHIFT 0
#define GCR_L2_CONFIG_ASSOC_BITS 8
#define GCR_L2_CONFIG_LINESZ_SHIFT 8
#define GCR_L2_CONFIG_LINESZ_BITS 4
#define GCR_L2_CONFIG_SETSZ_SHIFT 12
#define GCR_L2_CONFIG_SETSZ_BITS 4
#define GCR_L2_CONFIG_BYPASS (1 << 20)
/* GCR_Cx_COHERENCE */
#define GCR_Cx_COHERENCE_DOM_EN (0xff << 0)
#define GCR_Cx_COHERENCE_EN (0x1 << 0)
/* GCR_Cx_OTHER fields */
#define GCR_Cx_OTHER_CORENUM_SHIFT 16
#define GCR_Cx_OTHER_CORENUM (0xffff << 16)
#ifndef __ASSEMBLY__
#include <asm/io.h>
#include <linux/bitops.h>
#if IS_ENABLED(CONFIG_MIPS_CM)
static inline void *mips_cm_base(void)
{
return (void *)CKSEG1ADDR(CONFIG_MIPS_CM_BASE);
}
static inline unsigned long mips_cm_l2_line_size(void)
{
unsigned long l2conf, line_sz;
l2conf = __raw_readl(mips_cm_base() + GCR_L2_CONFIG);
line_sz = l2conf >> GCR_L2_CONFIG_LINESZ_SHIFT;
line_sz &= GENMASK(GCR_L2_CONFIG_LINESZ_BITS - 1, 0);
return line_sz ? (2 << line_sz) : 0;
}
#else
static inline void *mips_cm_base(void)
{
return NULL;
}
static inline unsigned long mips_cm_l2_line_size(void)
{
return 0;
}
#endif
#endif /* !__ASSEMBLY__ */
#endif /* __MIPS_ASM_CM_H__ */
|