Commit 8589e346 authored by Alexandre Ghiti's avatar Alexandre Ghiti Committed by Palmer Dabbelt

riscv: Move the linear mapping creation in its own function

No change intended, it just splits the linear mapping creation from
setup_vm_final: this prepares for upcoming additions to the linear
mapping creation.
Signed-off-by: default avatarAlexandre Ghiti <alexghiti@rivosinc.com>
Reviewed-by: default avatarAndrew Jones <ajones@ventanamicro.com>
Reviewed-by: default avatarAnup Patel <anup@brainfault.org>
Tested-by: default avatarAnup Patel <anup@brainfault.org>
Link: https://lore.kernel.org/r/20230324155421.271544-3-alexghiti@rivosinc.comSigned-off-by: default avatarPalmer Dabbelt <palmer@rivosinc.com>
parent a7407a13
...@@ -1086,16 +1086,25 @@ asmlinkage void __init setup_vm(uintptr_t dtb_pa) ...@@ -1086,16 +1086,25 @@ asmlinkage void __init setup_vm(uintptr_t dtb_pa)
pt_ops_set_fixmap(); pt_ops_set_fixmap();
} }
static void __init setup_vm_final(void) static void __init create_linear_mapping_range(phys_addr_t start,
phys_addr_t end)
{ {
phys_addr_t pa;
uintptr_t va, map_size; uintptr_t va, map_size;
phys_addr_t pa, start, end;
u64 i;
/* Setup swapper PGD for fixmap */ for (pa = start; pa < end; pa += map_size) {
create_pgd_mapping(swapper_pg_dir, FIXADDR_START, va = (uintptr_t)__va(pa);
__pa_symbol(fixmap_pgd_next), map_size = best_map_size(pa, end - pa);
PGDIR_SIZE, PAGE_TABLE);
create_pgd_mapping(swapper_pg_dir, va, pa, map_size,
pgprot_from_va(va));
}
}
static void __init create_linear_mapping_page_table(void)
{
phys_addr_t start, end;
u64 i;
/* Map all memory banks in the linear mapping */ /* Map all memory banks in the linear mapping */
for_each_mem_range(i, &start, &end) { for_each_mem_range(i, &start, &end) {
...@@ -1107,14 +1116,19 @@ static void __init setup_vm_final(void) ...@@ -1107,14 +1116,19 @@ static void __init setup_vm_final(void)
if (end >= __pa(PAGE_OFFSET) + memory_limit) if (end >= __pa(PAGE_OFFSET) + memory_limit)
end = __pa(PAGE_OFFSET) + memory_limit; end = __pa(PAGE_OFFSET) + memory_limit;
for (pa = start; pa < end; pa += map_size) { create_linear_mapping_range(start, end);
va = (uintptr_t)__va(pa);
map_size = best_map_size(pa, end - pa);
create_pgd_mapping(swapper_pg_dir, va, pa, map_size,
pgprot_from_va(va));
}
} }
}
static void __init setup_vm_final(void)
{
/* Setup swapper PGD for fixmap */
create_pgd_mapping(swapper_pg_dir, FIXADDR_START,
__pa_symbol(fixmap_pgd_next),
PGDIR_SIZE, PAGE_TABLE);
/* Map the linear mapping */
create_linear_mapping_page_table();
/* Map the kernel */ /* Map the kernel */
if (IS_ENABLED(CONFIG_64BIT)) if (IS_ENABLED(CONFIG_64BIT))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment