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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
|
/* $OpenBSD: m8820x.h,v 1.6 2005/12/04 12:20:19 miod Exp $ */
/*
* Copyright (c) 2004, Miodrag Vallat.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/*
* Mach Operating System
* Copyright (c) 1993-1992 Carnegie Mellon University
* All Rights Reserved.
*
* Permission to use, copy, modify and distribute this software and its
* documentation is hereby granted, provided that both the copyright
* notice and this permission notice appear in all copies of the
* software, derivative works or modified versions, and any portions
* thereof, and that both notices appear in supporting documentation.
*
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
* ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
*
* Carnegie Mellon requests users of this software to return to
*
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
* School of Computer Science
* Carnegie Mellon University
* Pittsburgh PA 15213-3890
*
* any improvements or extensions that they make and grant Carnegie Mellon
* the rights to redistribute these changes.
*/
#ifndef __M88K_M8820X_H__
#define __M88K_M8820X_H__
/*
* 8820x CMMU definitions
*/
/* CMMU registers */
#define CMMU_IDR (0x000 / 4) /* CMMU id register */
#define CMMU_SCR (0x004 / 4) /* system command register */
#define CMMU_SSR (0x008 / 4) /* system status register */
#define CMMU_SAR (0x00c / 4) /* system address register */
#define CMMU_SCTR (0x104 / 4) /* system control register */
#define CMMU_PFSR (0x108 / 4) /* P bus fault status register */
#define CMMU_PFAR (0x10c / 4) /* P bus fault address register */
#define CMMU_SAPR (0x200 / 4) /* supervisor area pointer register */
#define CMMU_UAPR (0x204 / 4) /* user area pointer register */
#define CMMU_BWP0 (0x400 / 4) /* block ATC writer port 0 */
#define CMMU_BWP1 (0x404 / 4) /* block ATC writer port 1 */
#define CMMU_BWP2 (0x408 / 4) /* block ATC writer port 2 */
#define CMMU_BWP3 (0x40c / 4) /* block ATC writer port 3 */
#define CMMU_BWP4 (0x410 / 4) /* block ATC writer port 4 */
#define CMMU_BWP5 (0x414 / 4) /* block ATC writer port 5 */
#define CMMU_BWP6 (0x418 / 4) /* block ATC writer port 6 */
#define CMMU_BWP7 (0x41c / 4) /* block ATC writer port 7 */
#define CMMU_BWP(n) (CMMU_BWP0 + (n))
#define CMMU_CDP0 (0x800 / 4) /* cache data port 0 */
#define CMMU_CDP1 (0x804 / 4) /* cache data port 1 */
#define CMMU_CDP2 (0x808 / 4) /* cache data port 2 */
#define CMMU_CDP3 (0x80c / 4) /* cache data port 3 */
#define CMMU_CTP0 (0x840 / 4) /* cache tag port 0 */
#define CMMU_CTP1 (0x844 / 4) /* cache tag port 1 */
#define CMMU_CTP2 (0x848 / 4) /* cache tag port 2 */
#define CMMU_CTP3 (0x84c / 4) /* cache tag port 3 */
#define CMMU_CSSP0 (0x880 / 4) /* cache set status register */
#define CMMU_CSSP(n) ((0x880 + (n * 0x10)) / 4)
/* the following only exist on 88204 */
#define CMMU_CSSP1 (0x890 / 4) /* cache set status register */
#define CMMU_CSSP2 (0x8a0 / 4) /* cache set status register */
#define CMMU_CSSP3 (0x8b0 / 4) /* cache set status register */
/* system commands */
#define CMMU_FLUSH_CACHE_INV_LINE 0x14 /* data cache invalidate */
#define CMMU_FLUSH_CACHE_INV_PAGE 0x15
#define CMMU_FLUSH_CACHE_INV_SEGMENT 0x16
#define CMMU_FLUSH_CACHE_INV_ALL 0x17
#define CMMU_FLUSH_CACHE_CB_LINE 0x18 /* data cache copyback */
#define CMMU_FLUSH_CACHE_CB_PAGE 0x19
#define CMMU_FLUSH_CACHE_CB_SEGMENT 0x1a
#define CMMU_FLUSH_CACHE_CB_ALL 0x1b
#define CMMU_FLUSH_CACHE_CBI_LINE 0x1c /* copyback and invalidate */
#define CMMU_FLUSH_CACHE_CBI_PAGE 0x1d
#define CMMU_FLUSH_CACHE_CBI_SEGMENT 0x1e
#define CMMU_FLUSH_CACHE_CBI_ALL 0x1f
#define CMMU_PROBE_USER 0x20 /* probe user address */
#define CMMU_PROBE_SUPER 0x24 /* probe supervisor address */
#define CMMU_FLUSH_USER_LINE 0x30 /* flush PATC */
#define CMMU_FLUSH_USER_PAGE 0x31
#define CMMU_FLUSH_USER_SEGMENT 0x32
#define CMMU_FLUSH_USER_ALL 0x33
#define CMMU_FLUSH_SUPER_LINE 0x34
#define CMMU_FLUSH_SUPER_PAGE 0x35
#define CMMU_FLUSH_SUPER_SEGMENT 0x36
#define CMMU_FLUSH_SUPER_ALL 0x37
/* system control values */
#define CMMU_SCTR_PE 0x00008000 /* parity enable */
#define CMMU_SCTR_SE 0x00004000 /* snoop enable */
#define CMMU_SCTR_PR 0x00002000 /* priority arbitration */
/* P bus fault status */
#define CMMU_PFSR_FAULT(pfsr) (((pfsr) >> 16) & 0x07)
#define CMMU_PFSR_SUCCESS 0 /* no fault */
#define CMMU_PFSR_BERROR 3 /* bus error */
#define CMMU_PFSR_SFAULT 4 /* segment fault */
#define CMMU_PFSR_PFAULT 5 /* page fault */
#define CMMU_PFSR_SUPER 6 /* supervisor violation */
#define CMMU_PFSR_WRITE 7 /* writer violation */
/* CSSP values */
#define CMMU_CSSP_L5 0x20000000
#define CMMU_CSSP_L4 0x10000000
#define CMMU_CSSP_L3 0x08000000
#define CMMU_CSSP_L2 0x04000000
#define CMMU_CSSP_L1 0x02000000
#define CMMU_CSSP_L0 0x01000000
#define CMMU_CSSP_D3 0x00800000
#define CMMU_CSSP_D2 0x00400000
#define CMMU_CSSP_D1 0x00200000
#define CMMU_CSSP_D0 0x00100000
#define CMMU_CSSP_VV(n,v) (((v) & 0x03) << (12 + 2 * (n)))
#define CMMU_VV_EXCLUSIVE 0x00
#define CMMU_VV_MODIFIED 0x01
#define CMMU_VV_SHARED 0x02
#define CMMU_VV_INVALID 0x03
/* IDR values */
#define CMMU_ID(idr) ((idr) >> 24)
#define CMMU_TYPE(idr) (((idr) >> 21) & 0x07)
#define CMMU_VERSION(idr) (((idr) >> 16) & 0x1f)
#define M88200_ID 5
#define M88204_ID 6
/* SSR values */
#define CMMU_SSR_CE 0x00008000 /* copyback error */
#define CMMU_SSR_BE 0x00004000 /* bus error */
#define CMMU_SSR_SO 0x00000100
#define CMMU_SSR_M 0x00000010
#define CMMU_SSR_U 0x00000008
#define CMMU_SSR_PROT 0x00000004
#define CMMU_SSR_BH 0x00000002 /* probe BATC hit */
#define CMMU_SSR_V 0x00000001
/*
* Cache line information
*/
#define MC88200_CACHE_SHIFT 4
#define MC88200_CACHE_LINE (1 << MC88200_CACHE_SHIFT)
#define NBSG (1 << (PDT_BITS + PG_BITS)) /* segment size */
#ifndef _LOCORE
/*
* CMMU kernel information
*/
struct m8820x_cmmu {
volatile u_int32_t *cmmu_regs; /* CMMU "base" area */
#ifdef M88200_HAS_SPLIT_ADDRESS
vaddr_t cmmu_addr; /* address range */
vaddr_t cmmu_addr_mask; /* address mask */
#endif
};
#define INST_CMMU 0x00 /* even number */
#define DATA_CMMU 0x01 /* odd number */
#define CMMU_MODE(num) ((num) & 1)
#define MAX_CMMUS 8 /* maximum cmmus on the board */
extern struct m8820x_cmmu m8820x_cmmu[MAX_CMMUS];
extern u_int cmmu_shift;
extern u_int max_cmmus;
void m8820x_setup_board_config(void);
cpuid_t m8820x_cpu_number(void);
#endif /* _LOCORE */
#endif /* __M88K_M8820X_H__ */
|