Annotation of sys/arch/m88k/include/m8820x.h, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: m8820x.h,v 1.7 2006/05/06 16:59:26 miod Exp $ */
2: /*
3: * Copyright (c) 2004, Miodrag Vallat.
4: *
5: * Redistribution and use in source and binary forms, with or without
6: * modification, are permitted provided that the following conditions
7: * are met:
8: * 1. Redistributions of source code must retain the above copyright
9: * notice, this list of conditions and the following disclaimer.
10: * 2. Redistributions in binary form must reproduce the above copyright
11: * notice, this list of conditions and the following disclaimer in the
12: * documentation and/or other materials provided with the distribution.
13: *
14: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
15: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17: * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
18: * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19: * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
20: * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
22: * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
23: * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24: * POSSIBILITY OF SUCH DAMAGE.
25: */
26: /*
27: * Mach Operating System
28: * Copyright (c) 1993-1992 Carnegie Mellon University
29: * All Rights Reserved.
30: *
31: * Permission to use, copy, modify and distribute this software and its
32: * documentation is hereby granted, provided that both the copyright
33: * notice and this permission notice appear in all copies of the
34: * software, derivative works or modified versions, and any portions
35: * thereof, and that both notices appear in supporting documentation.
36: *
37: * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
38: * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
39: * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
40: *
41: * Carnegie Mellon requests users of this software to return to
42: *
43: * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
44: * School of Computer Science
45: * Carnegie Mellon University
46: * Pittsburgh PA 15213-3890
47: *
48: * any improvements or extensions that they make and grant Carnegie Mellon
49: * the rights to redistribute these changes.
50: */
51:
52: #ifndef __M88K_M8820X_H__
53: #define __M88K_M8820X_H__
54:
55: /*
56: * 8820x CMMU definitions
57: */
58:
59: /* CMMU registers */
60: #define CMMU_IDR (0x000 / 4) /* CMMU id register */
61: #define CMMU_SCR (0x004 / 4) /* system command register */
62: #define CMMU_SSR (0x008 / 4) /* system status register */
63: #define CMMU_SAR (0x00c / 4) /* system address register */
64: #define CMMU_SCTR (0x104 / 4) /* system control register */
65: #define CMMU_PFSR (0x108 / 4) /* P bus fault status register */
66: #define CMMU_PFAR (0x10c / 4) /* P bus fault address register */
67: #define CMMU_SAPR (0x200 / 4) /* supervisor area pointer register */
68: #define CMMU_UAPR (0x204 / 4) /* user area pointer register */
69: #define CMMU_BWP0 (0x400 / 4) /* block ATC writer port 0 */
70: #define CMMU_BWP1 (0x404 / 4) /* block ATC writer port 1 */
71: #define CMMU_BWP2 (0x408 / 4) /* block ATC writer port 2 */
72: #define CMMU_BWP3 (0x40c / 4) /* block ATC writer port 3 */
73: #define CMMU_BWP4 (0x410 / 4) /* block ATC writer port 4 */
74: #define CMMU_BWP5 (0x414 / 4) /* block ATC writer port 5 */
75: #define CMMU_BWP6 (0x418 / 4) /* block ATC writer port 6 */
76: #define CMMU_BWP7 (0x41c / 4) /* block ATC writer port 7 */
77: #define CMMU_BWP(n) (CMMU_BWP0 + (n))
78: #define CMMU_CDP0 (0x800 / 4) /* cache data port 0 */
79: #define CMMU_CDP1 (0x804 / 4) /* cache data port 1 */
80: #define CMMU_CDP2 (0x808 / 4) /* cache data port 2 */
81: #define CMMU_CDP3 (0x80c / 4) /* cache data port 3 */
82: #define CMMU_CTP0 (0x840 / 4) /* cache tag port 0 */
83: #define CMMU_CTP1 (0x844 / 4) /* cache tag port 1 */
84: #define CMMU_CTP2 (0x848 / 4) /* cache tag port 2 */
85: #define CMMU_CTP3 (0x84c / 4) /* cache tag port 3 */
86: #define CMMU_CSSP0 (0x880 / 4) /* cache set status register */
87: #define CMMU_CSSP(n) ((0x880 + (n * 0x10)) / 4)
88: /* the following only exist on 88204 */
89: #define CMMU_CSSP1 (0x890 / 4) /* cache set status register */
90: #define CMMU_CSSP2 (0x8a0 / 4) /* cache set status register */
91: #define CMMU_CSSP3 (0x8b0 / 4) /* cache set status register */
92:
93: /* system commands */
94: #define CMMU_FLUSH_CACHE_INV_LINE 0x14 /* data cache invalidate */
95: #define CMMU_FLUSH_CACHE_INV_PAGE 0x15
96: #define CMMU_FLUSH_CACHE_INV_SEGMENT 0x16
97: #define CMMU_FLUSH_CACHE_INV_ALL 0x17
98: #define CMMU_FLUSH_CACHE_CB_LINE 0x18 /* data cache copyback */
99: #define CMMU_FLUSH_CACHE_CB_PAGE 0x19
100: #define CMMU_FLUSH_CACHE_CB_SEGMENT 0x1a
101: #define CMMU_FLUSH_CACHE_CB_ALL 0x1b
102: #define CMMU_FLUSH_CACHE_CBI_LINE 0x1c /* copyback and invalidate */
103: #define CMMU_FLUSH_CACHE_CBI_PAGE 0x1d
104: #define CMMU_FLUSH_CACHE_CBI_SEGMENT 0x1e
105: #define CMMU_FLUSH_CACHE_CBI_ALL 0x1f
106: #define CMMU_PROBE_USER 0x20 /* probe user address */
107: #define CMMU_PROBE_SUPER 0x24 /* probe supervisor address */
108: #define CMMU_FLUSH_USER_LINE 0x30 /* flush PATC */
109: #define CMMU_FLUSH_USER_PAGE 0x31
110: #define CMMU_FLUSH_USER_SEGMENT 0x32
111: #define CMMU_FLUSH_USER_ALL 0x33
112: #define CMMU_FLUSH_SUPER_LINE 0x34
113: #define CMMU_FLUSH_SUPER_PAGE 0x35
114: #define CMMU_FLUSH_SUPER_SEGMENT 0x36
115: #define CMMU_FLUSH_SUPER_ALL 0x37
116:
117: /* system control values */
118: #define CMMU_SCTR_PE 0x00008000 /* parity enable */
119: #define CMMU_SCTR_SE 0x00004000 /* snoop enable */
120: #define CMMU_SCTR_PR 0x00002000 /* priority arbitration */
121:
122: /* P bus fault status */
123: #define CMMU_PFSR_FAULT(pfsr) (((pfsr) >> 16) & 0x07)
124: #define CMMU_PFSR_SUCCESS 0 /* no fault */
125: #define CMMU_PFSR_BERROR 3 /* bus error */
126: #define CMMU_PFSR_SFAULT 4 /* segment fault */
127: #define CMMU_PFSR_PFAULT 5 /* page fault */
128: #define CMMU_PFSR_SUPER 6 /* supervisor violation */
129: #define CMMU_PFSR_WRITE 7 /* writer violation */
130:
131: /* CSSP values */
132: #define CMMU_CSSP_L5 0x20000000
133: #define CMMU_CSSP_L4 0x10000000
134: #define CMMU_CSSP_L3 0x08000000
135: #define CMMU_CSSP_L2 0x04000000
136: #define CMMU_CSSP_L1 0x02000000
137: #define CMMU_CSSP_L0 0x01000000
138: #define CMMU_CSSP_D3 0x00800000
139: #define CMMU_CSSP_D2 0x00400000
140: #define CMMU_CSSP_D1 0x00200000
141: #define CMMU_CSSP_D0 0x00100000
142: #define CMMU_CSSP_VV(n,v) (((v) & 0x03) << (12 + 2 * (n)))
143: #define CMMU_VV_EXCLUSIVE 0x00
144: #define CMMU_VV_MODIFIED 0x01
145: #define CMMU_VV_SHARED 0x02
146: #define CMMU_VV_INVALID 0x03
147:
148: /* IDR values */
149: #define CMMU_ID(idr) ((idr) >> 24)
150: #define CMMU_TYPE(idr) (((idr) >> 21) & 0x07)
151: #define CMMU_VERSION(idr) (((idr) >> 16) & 0x1f)
152: #define M88200_ID 5
153: #define M88204_ID 6
154:
155: /* SSR values */
156: #define CMMU_SSR_CE 0x00008000 /* copyback error */
157: #define CMMU_SSR_BE 0x00004000 /* bus error */
158: #define CMMU_SSR_SO 0x00000100
159: #define CMMU_SSR_M 0x00000010
160: #define CMMU_SSR_U 0x00000008
161: #define CMMU_SSR_PROT 0x00000004
162: #define CMMU_SSR_BH 0x00000002 /* probe BATC hit */
163: #define CMMU_SSR_V 0x00000001
164:
165: /*
166: * Cache line information
167: */
168:
169: #define MC88200_CACHE_SHIFT 4
170: #define MC88200_CACHE_LINE (1 << MC88200_CACHE_SHIFT)
171:
172: /*
173: * Hardwired BATC information
174: */
175:
176: #define BATC8 0xfff7ffb5
177: #define BATC9 0xfffffff5
178:
179: #define BATC8_VA 0xfff00000
180: #define BATC9_VA 0xfff80000
181:
182: #define NBSG (1 << (PDT_BITS + PG_BITS)) /* segment size */
183:
184: #ifndef _LOCORE
185:
186: /*
187: * CMMU kernel information
188: */
189: struct m8820x_cmmu {
190: volatile u_int32_t *cmmu_regs; /* CMMU "base" area */
191: #ifdef M88200_HAS_SPLIT_ADDRESS
192: vaddr_t cmmu_addr; /* address range */
193: vaddr_t cmmu_addr_mask; /* address mask */
194: #endif
195: };
196:
197: #define INST_CMMU 0x00 /* even number */
198: #define DATA_CMMU 0x01 /* odd number */
199: #define CMMU_MODE(num) ((num) & 1)
200:
201: #define MAX_CMMUS 8 /* maximum cmmus on the board */
202: extern struct m8820x_cmmu m8820x_cmmu[MAX_CMMUS];
203: extern u_int cmmu_shift;
204: extern u_int max_cmmus;
205:
206: void m8820x_setup_board_config(void);
207: cpuid_t m8820x_cpu_number(void);
208:
209: #endif /* _LOCORE */
210: #endif /* __M88K_M8820X_H__ */
CVSweb