Skip to content

Commit

Permalink
riscv: Move the linear mapping creation in its own function
Browse files Browse the repository at this point in the history
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: Alexandre Ghiti <alexghiti@rivosinc.com>
Reviewed-by: Andrew Jones <ajones@ventanamicro.com>
Reviewed-by: Anup Patel <anup@brainfault.org>
Tested-by: Anup Patel <anup@brainfault.org>
Link: https://lore.kernel.org/r/20230324155421.271544-3-alexghiti@rivosinc.com
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
  • Loading branch information
Alexandre Ghiti authored and Palmer Dabbelt committed Apr 19, 2023
1 parent a7407a1 commit 8589e34
Showing 1 changed file with 28 additions and 14 deletions.
42 changes: 28 additions & 14 deletions arch/riscv/mm/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -1086,16 +1086,25 @@ asmlinkage void __init setup_vm(uintptr_t dtb_pa)
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;
phys_addr_t pa, start, end;
u64 i;

/* Setup swapper PGD for fixmap */
create_pgd_mapping(swapper_pg_dir, FIXADDR_START,
__pa_symbol(fixmap_pgd_next),
PGDIR_SIZE, PAGE_TABLE);
for (pa = start; pa < end; pa += map_size) {
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 create_linear_mapping_page_table(void)
{
phys_addr_t start, end;
u64 i;

/* Map all memory banks in the linear mapping */
for_each_mem_range(i, &start, &end) {
Expand All @@ -1107,14 +1116,19 @@ static void __init setup_vm_final(void)
if (end >= __pa(PAGE_OFFSET) + memory_limit)
end = __pa(PAGE_OFFSET) + memory_limit;

for (pa = start; pa < end; pa += map_size) {
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));
}
create_linear_mapping_range(start, end);
}
}

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 */
if (IS_ENABLED(CONFIG_64BIT))
Expand Down

0 comments on commit 8589e34

Please sign in to comment.