Changeset 10b890b in mainline for kernel/arch/sparc64/src/sparc64.c


Ignore:
Timestamp:
2006-07-13T22:11:26Z (18 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
c6e314a
Parents:
a5f76758
Message:

Move functionality of tlb_arch_init() to take_over_tlb_and_tt().
Call take_over_tlb_and_tt() very early after the kernel starts
executing.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/sparc64/src/sparc64.c

    ra5f76758 r10b890b  
    4141#include <console/console.h>
    4242#include <arch/boot/boot.h>
     43#include <arch/arch.h>
     44#include <arch/mm/tlb.h>
     45#include <mm/asid.h>
    4346
    4447bootinfo_t bootinfo;
     
    8992}
    9093
     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 */
     110void 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
    91165/** @}
    92166 */
Note: See TracChangeset for help on using the changeset viewer.