Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/riscv64/src/mm/page.c

    r83dab11 r295ee02  
    3636#include <genarch/mm/page_pt.h>
    3737#include <arch/mm/frame.h>
     38#include <arch/cpu.h>
    3839#include <mm/frame.h>
    3940#include <mm/page.h>
     
    5051void page_arch_init(void)
    5152{
    52         if (config.cpu_active == 1)
     53        if (config.cpu_active == 1) {
    5354                page_mapping_operations = &pt_mapping_operations;
     55               
     56                page_table_lock(AS_KERNEL, true);
     57               
     58                /*
     59                 * PA2KA(identity) mapping for all low-memory frames.
     60                 */
     61                for (uintptr_t cur = 0;
     62                    cur < min(config.identity_size, config.physmem_end);
     63                    cur += FRAME_SIZE)
     64                        page_mapping_insert(AS_KERNEL, PA2KA(cur), cur,
     65                            PAGE_GLOBAL | PAGE_CACHEABLE | PAGE_EXEC | PAGE_WRITE | PAGE_READ);
     66               
     67                page_table_unlock(AS_KERNEL, true);
     68               
     69                // FIXME: register page fault extension handler
     70               
     71                write_satp((uintptr_t) AS_KERNEL->genarch.page_table);
     72               
     73                /* The boot page table is no longer needed. */
     74                // FIXME: frame_mark_available(pt_frame, 1);
     75        }
    5476}
    5577
     
    5880}
    5981
     82void write_satp(uintptr_t ptl0)
     83{
     84        uint64_t satp = ((ptl0 >> FRAME_WIDTH) & SATP_PFN_MASK) |
     85            SATP_MODE_SV48;
     86       
     87        asm volatile (
     88                "csrw sptbr, %[satp]\n"
     89                :: [satp] "r" (satp)
     90        );
     91}
     92
    6093/** @}
    6194 */
Note: See TracChangeset for help on using the changeset viewer.