Subversion Repositories HelenOS

Rev

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
 
-