Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / hypervisor / src / greatlakes / ontario / include / mmu.h
CommitLineData
920dae64
AT
1/*
2* ========== Copyright Header Begin ==========================================
3*
4* Hypervisor Software File: mmu.h
5*
6* Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
7*
8* - Do no alter or remove copyright notices
9*
10* - Redistribution and use of this software in source and binary forms, with
11* or without modification, are permitted provided that the following
12* conditions are met:
13*
14* - Redistribution of source code must retain the above copyright notice,
15* this list of conditions and the following disclaimer.
16*
17* - Redistribution in binary form must reproduce the above copyright notice,
18* this list of conditions and the following disclaimer in the
19* documentation and/or other materials provided with the distribution.
20*
21* Neither the name of Sun Microsystems, Inc. or the names of contributors
22* may be used to endorse or promote products derived from this software
23* without specific prior written permission.
24*
25* This software is provided "AS IS," without a warranty of any kind.
26* ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
27* INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
28* PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
29* MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
30* ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
31* DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN
32* OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR
33* FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
34* DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
35* ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
36* SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
37*
38* You acknowledge that this software is not designed, licensed or
39* intended for use in the design, construction, operation or maintenance of
40* any nuclear facility.
41*
42* ========== Copyright Header End ============================================
43*/
44/*
45 * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
46 * Use is subject to license terms.
47 */
48
49#ifndef _ONTARIO_MMU_H
50#define _ONTARIO_MMU_H
51
52#pragma ident "@(#)mmu.h 1.22 07/05/03 SMI"
53
54#ifdef __cplusplus
55extern "C" {
56#endif
57
58#include <segments.h>
59
60/*
61 * Niagara MMU properties
62 */
63#define NCTXS 8192
64#define NVABITS 48
65
66#define PADDR_IO_BIT 39
67
68
69/*
70 * Only support TSBs for the two hardware TSB page size indexes.
71 */
72#define MAX_NTSB 2
73
74/*
75 * ASI_[DI]MMU registers
76 */
77#define MMU_SFSR 0x18
78#define MMU_SFAR 0x20
79#define MMU_TAG_ACCESS 0x30
80#define MMU_TAG_TARGET 0x00
81#define TAGACC_CTX_LSHIFT (64-13)
82#define TAGTRG_CTX_RSHIFT 48
83#define TAGTRG_VA_LSHIFT 22
84
85/*
86 * ASI_[ID]TSBBASE_CTX*
87 */
88#define TSB_SZ0_ENTRIES 512
89#define TSB_SZ0_SHIFT 9 /* LOG2(TSB_SZ0_ENTRIES) */
90#define TSB_MAX_SZCODE 15
91
92/*
93 * ASI_[ID]TSB_CONFIG_CTX*
94 */
95#define ASI_TSB_CONFIG_PS1_SHIFT 8
96
97#define ITLB_ENTRIES 64
98#define DTLB_ENTRIES 64
99
100/*
101 * ASI_[DI]MMU_DEMAP
102 */
103#define DEMAP_ALL 0x2
104
105/*
106 * ASI_TLB_INVALIDATE
107 */
108#define I_INVALIDATE 0x0
109#define D_INVALIDATE 0x8
110
111/*
112 * Niagara SFSR
113 */
114#define MMU_SFSR_FV (0x1 << 0)
115#define MMU_SFSR_OW (0x1 << 1)
116#define MMU_SFSR_W (0x1 << 2)
117#define MMU_SFSR_CT (0x3 << 4)
118#define MMU_SFSR_E (0x1 << 6)
119#define MMU_SFSR_FT_MASK (0x7f)
120#define MMU_SFSR_FT_SHIFT (7)
121#define MMU_SFSR_FT (MMU_SFSR_FT_MASK << MMU_SFSR_FT_SHIFT)
122#define MMU_SFSR_ASI_MASK (0xff)
123#define MMU_SFSR_ASI_SHIFT (16)
124#define MMU_SFSR_ASI (MMU_SFSR_ASI_MASK << MMU_SFSR_ASI_SHIFT)
125
126#define MMU_SFSR_FT_PRIV (0x01) /* Privilege violation */
127#define MMU_SFSR_FT_SO (0x02) /* side-effect load from E-page */
128#define MMU_SFSR_FT_ATOMICIO (0x04) /* atomic access to IO address */
129#define MMU_SFSR_FT_ASI (0x08) /* illegal ASI/VA/RW/SZ */
130#define MMU_SFSR_FT_NFO (0x10) /* non-load from NFO page */
131#define MMU_SFSR_FT_VARANGE (0x20) /* d-mmu, i-mmu branch, call, seq */
132#define MMU_SFSR_FT_VARANGE2 (0x40) /* i-mmu jmpl or return */
133
134/*
135 * Native (sun4u) tte format
136 */
137#define TTE4U_V 0x8000000000000000
138#define TTE4U_SZL 0x6000000000000000
139#define TTE4U_NFO 0x1000000000000000
140#define TTE4U_IE 0x0800000000000000
141#define TTE4U_SZH 0x0001000000000000
142#define TTE4U_DIAG 0x0000ff0000000000
143#define TTE4U_PA_SHIFT 13
144#define TTE4U_L 0x0000000000000040
145#define TTE4U_CP 0x0000000000000020
146#define TTE4U_CV 0x0000000000000010
147#define TTE4U_E 0x0000000000000008
148#define TTE4U_P 0x0000000000000004
149#define TTE4U_W 0x0000000000000002
150
151/*
152 * Niagara's sun4v format - bit 61 is lock, which is a SW bit
153 * in the sun4v spec and must be cleared on TTEs passed from guest.
154 */
155#define NI_TTE4V_L_SHIFT 61
156
157/* BEGIN CSTYLED */
158#define SET_TTE_LOCK_BIT(reg, scr) \
159 mov 1, scr ;\
160 sllx scr, NI_TTE4V_L_SHIFT, scr ;\
161 or reg, scr, reg
162
163#define CLEAR_TTE_LOCK_BIT(reg, scr) \
164 mov 1, scr ;\
165 sllx scr, NI_TTE4V_L_SHIFT, scr ;\
166 andn reg, scr, reg
167
168#define RADDR_IS_IO_XCCNEG(addr, scr1) \
169 sllx addr, (63 - PADDR_IO_BIT), scr1 ;\
170 tst scr1
171/* END CSTYLED */
172
173#define MMU_VALID_FLAGS_MASK (MAP_ITLB | MAP_DTLB)
174
175/*
176 * Check that only valid flags bits are set and that at least
177 * one TLB selector is set. If optional flags are added,
178 * the simplistic 'brz' will have to be changed.
179 */
180/* BEGIN CSTYLED */
181#define CHECK_MMU_FLAGS(flags, fail_label) \
182 brz,pn flags, fail_label ;\
183 andncc flags, MMU_VALID_FLAGS_MASK, %g0 ;\
184 bnz,pn %xcc, fail_label ;\
185 nop
186
187/*
188 * Check the virtual address and context for validity
189 * on Niagara
190 */
191#define CHECK_CTX(ctx, fail_label, scr) \
192 set NCTXS, scr ;\
193 cmp ctx, scr ;\
194 bgeu,pn %xcc, fail_label ;\
195 nop
196#define CHECK_VA_CTX(va, ctx, fail_label, scr) \
197 sllx va, (64 - NVABITS), scr ;\
198 srax scr, (64 - NVABITS), scr ;\
199 cmp va, scr ;\
200 bne,pn %xcc, fail_label ;\
201 CHECK_CTX(ctx, fail_label, scr)
202/* END CSTYLED */
203
204/*
205 * Supported page size encodings for Niagara
206 */
207#define TTE_VALIDSIZEARRAY \
208 ((1 << 0) | /* 8K */ \
209 (1 << 1) | /* 64k */ \
210 (1 << 3) | /* 4M */ \
211 (1 << 5)) /* 256M */
212
213 /* Largest page size is 28bits */
214#define LARGEST_PG_SIZE_BITS 28
215
216#ifdef __cplusplus
217}
218#endif
219
220#endif /* _ONTARIO_MMU_H */