Changeset 10b890b in mainline for kernel/arch/sparc64/src/sparc64.c
- Timestamp:
- 2006-07-13T22:11:26Z (18 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- c6e314a
- Parents:
- a5f76758
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/sparc64/src/sparc64.c
ra5f76758 r10b890b 41 41 #include <console/console.h> 42 42 #include <arch/boot/boot.h> 43 #include <arch/arch.h> 44 #include <arch/mm/tlb.h> 45 #include <mm/asid.h> 43 46 44 47 bootinfo_t bootinfo; … … 89 92 } 90 93 94 /** Take over TLB and trap table. 95 * 96 * Initialize ITLB and DTLB and switch to kernel 97 * trap table. 98 * 99 * The goal of this function is to disable MMU 100 * so that both TLBs can be purged and new 101 * kernel 4M locked entry can be installed. 102 * After TLB is initialized, MMU is enabled 103 * again. 104 * 105 * Switching MMU off imposes the requirement for 106 * the kernel to run in identity mapped environment. 107 * 108 * @param base Base address that will be hardwired in both TLBs. 109 */ 110 void take_over_tlb_and_tt(uintptr_t base) 111 { 112 tlb_tag_access_reg_t tag; 113 tlb_data_t data; 114 frame_address_t fr; 115 page_address_t pg; 116 117 fr.address = base; 118 pg.address = base; 119 120 immu_disable(); 121 dmmu_disable(); 122 123 /* 124 * Demap everything, especially OpenFirmware. 125 */ 126 itlb_demap(TLB_DEMAP_CONTEXT, TLB_DEMAP_NUCLEUS, 0); 127 dtlb_demap(TLB_DEMAP_CONTEXT, TLB_DEMAP_NUCLEUS, 0); 128 129 /* 130 * We do identity mapping of 4M-page at 4M. 131 */ 132 tag.value = ASID_KERNEL; 133 tag.vpn = pg.vpn; 134 135 itlb_tag_access_write(tag.value); 136 dtlb_tag_access_write(tag.value); 137 138 data.value = 0; 139 data.v = true; 140 data.size = PAGESIZE_4M; 141 data.pfn = fr.pfn; 142 data.l = true; 143 data.cp = 1; 144 data.cv = 1; 145 data.p = true; 146 data.w = true; 147 data.g = true; 148 149 itlb_data_in_write(data.value); 150 dtlb_data_in_write(data.value); 151 152 /* 153 * Register window traps can occur before MMU is enabled again. 154 * This ensures that any such traps will be handled from 155 * kernel identity mapped trap handler. 156 */ 157 trap_switch_trap_table(); 158 159 tlb_invalidate_all(); 160 161 dmmu_enable(); 162 immu_enable(); 163 } 164 91 165 /** @} 92 166 */
Note:
See TracChangeset
for help on using the changeset viewer.