Rev 1787 | Rev 1793 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1787 | Rev 1792 | ||
---|---|---|---|
Line 24... | Line 24... | ||
24 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
24 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
25 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
25 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
26 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
27 | */ |
27 | */ |
28 | 28 | ||
29 | /** @addtogroup sparc64mm |
29 | /** @addtogroup sparc64mm |
30 | * @{ |
30 | * @{ |
31 | */ |
31 | */ |
32 | /** @file |
32 | /** @file |
33 | */ |
33 | */ |
34 | 34 | ||
Line 55... | Line 55... | ||
55 | "Secondary", |
55 | "Secondary", |
56 | "Nucleus", |
56 | "Nucleus", |
57 | "Reserved" |
57 | "Reserved" |
58 | }; |
58 | }; |
59 | 59 | ||
60 | /** Initialize ITLB and DTLB. |
- | |
61 | * |
- | |
62 | * The goal of this function is to disable MMU |
- | |
63 | * so that both TLBs can be purged and new |
- | |
64 | * kernel 4M locked entry can be installed. |
- | |
65 | * After TLB is initialized, MMU is enabled |
- | |
66 | * again. |
- | |
67 | * |
- | |
68 | * Switching MMU off imposes the requirement for |
- | |
69 | * the kernel to run in identity mapped environment. |
- | |
70 | */ |
- | |
71 | void tlb_arch_init(void) |
60 | void tlb_arch_init(void) |
72 | { |
61 | { |
73 | tlb_tag_access_reg_t tag; |
- | |
74 | tlb_data_t data; |
- | |
75 | frame_address_t fr; |
- | |
76 | page_address_t pg; |
- | |
77 | - | ||
78 | fr.address = config.base; |
- | |
79 | pg.address = config.base; |
- | |
80 | - | ||
81 | immu_disable(); |
- | |
82 | dmmu_disable(); |
- | |
83 | - | ||
84 | /* |
- | |
85 | * Demap everything, especially OpenFirmware. |
- | |
86 | */ |
- | |
87 | itlb_demap(TLB_DEMAP_CONTEXT, TLB_DEMAP_NUCLEUS, 0); |
- | |
88 | dtlb_demap(TLB_DEMAP_CONTEXT, TLB_DEMAP_NUCLEUS, 0); |
- | |
89 | - | ||
90 | /* |
- | |
91 | * We do identity mapping of 4M-page at 4M. |
- | |
92 | */ |
- | |
93 | tag.value = ASID_KERNEL; |
- | |
94 | tag.vpn = pg.vpn; |
- | |
95 | - | ||
96 | itlb_tag_access_write(tag.value); |
- | |
97 | dtlb_tag_access_write(tag.value); |
- | |
98 | - | ||
99 | data.value = 0; |
- | |
100 | data.v = true; |
- | |
101 | data.size = PAGESIZE_4M; |
- | |
102 | data.pfn = fr.pfn; |
- | |
103 | data.l = true; |
- | |
104 | data.cp = 1; |
- | |
105 | data.cv = 1; |
- | |
106 | data.p = true; |
- | |
107 | data.w = true; |
- | |
108 | data.g = true; |
- | |
109 | - | ||
110 | itlb_data_in_write(data.value); |
- | |
111 | dtlb_data_in_write(data.value); |
- | |
112 | - | ||
113 | /* |
- | |
114 | * Register window traps can occur before MMU is enabled again. |
- | |
115 | * This ensures that any such traps will be handled from |
- | |
116 | * kernel identity mapped trap handler. |
- | |
117 | */ |
- | |
118 | trap_switch_trap_table(); |
- | |
119 | - | ||
120 | tlb_invalidate_all(); |
- | |
121 | - | ||
122 | dmmu_enable(); |
- | |
123 | immu_enable(); |
- | |
124 | } |
62 | } |
125 | 63 | ||
126 | /** Insert privileged mapping into DMMU TLB. |
64 | /** Insert privileged mapping into DMMU TLB. |
127 | * |
65 | * |
128 | * @param page Virtual page address. |
66 | * @param page Virtual page address. |
Line 277... | Line 215... | ||
277 | itlb_demap(TLB_DEMAP_PAGE, TLB_DEMAP_NUCLEUS, page + i * PAGE_SIZE); |
215 | itlb_demap(TLB_DEMAP_PAGE, TLB_DEMAP_NUCLEUS, page + i * PAGE_SIZE); |
278 | dtlb_demap(TLB_DEMAP_PAGE, TLB_DEMAP_NUCLEUS, page + i * PAGE_SIZE); |
216 | dtlb_demap(TLB_DEMAP_PAGE, TLB_DEMAP_NUCLEUS, page + i * PAGE_SIZE); |
279 | } |
217 | } |
280 | } |
218 | } |
281 | 219 | ||
282 | /** @} |
220 | /** @} |
283 | */ |
221 | */ |
284 | - |