+Alex On Tue, Nov 23, 2021 at 7:27 AM <guoren@xxxxxxxxxx> wrote: > > From: Guo Ren <guoren@xxxxxxxxxxxxxxxxx> > > Using riscv.fw_size in cmdline to tell the kernel what the > firmware (opensbi) size is. Then reserve the proper size of > firmware to save memory instead of the whole 2MB. It's helpful > to satisfy a small memory system (D1s/F133 from Allwinner). > > Signed-off-by: Guo Ren <guoren@xxxxxxxxxxxxxxxxx> > Cc: Palmer Dabbelt <palmer@xxxxxxxxxxx> > Cc: Anup Patel <anup.patel@xxxxxxx> > Cc: Atish Patra <atishp@xxxxxxxxxxxx> > --- > arch/riscv/mm/init.c | 14 +++++++++++++- > 1 file changed, 13 insertions(+), 1 deletion(-) > > diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c > index 920e78f8c3e4..f7db6d40213d 100644 > --- a/arch/riscv/mm/init.c > +++ b/arch/riscv/mm/init.c > @@ -159,6 +159,15 @@ static int __init early_mem(char *p) > } > early_param("mem", early_mem); > > +static phys_addr_t firmware_size __initdata; > +static int __init early_get_firmware_size(char *arg) > +{ > + firmware_size = memparse(arg, &arg); > + > + return 0; > +} > +early_param("riscv.fwsz", early_get_firmware_size); > + We have avoided any RISC-V specific kernel parameter till now and I don't think adding "riscv.fwsz" is the right approach. OpenSBI adds a reserved memory node (mmode_resv@8000000) to mark the memory where it is running as reserved. In fact, all M-mode runtime firmware should be adding a reserved memory node just like OpenSBI. Regards, Anup > static void __init setup_bootmem(void) > { > phys_addr_t vmlinux_end = __pa_symbol(&_end); > @@ -224,7 +233,10 @@ static void __init setup_bootmem(void) > /* > * Reserve OpenSBI region and depends on PMP to deny accesses. > */ > - memblock_reserve(__pa(PAGE_OFFSET), LOAD_OFFSET); > + if (firmware_size > PAGE_SIZE) > + memblock_reserve(__pa(PAGE_OFFSET), firmware_size); > + else > + memblock_reserve(__pa(PAGE_OFFSET), LOAD_OFFSET); > > early_init_fdt_scan_reserved_mem(); > dma_contiguous_reserve(dma32_phys_limit); > -- > 2.25.1 >