linux_riscv: Add patches for initrd support

This commit is contained in:
Shea Levy 2018-02-20 09:18:17 -05:00
parent 0022708d6d
commit f8b5b93b88
No known key found for this signature in database
GPG Key ID: 5C0BD6957D86FE27
4 changed files with 86 additions and 1 deletions

View File

@ -88,4 +88,14 @@ rec {
patch = ./riscv-install.patch;
};
riscv_initrd = {
name = "riscv-initrd";
patch = ./riscv-initrd.patch;
};
riscv_initrd_free = {
name = "riscv-initrd-free";
patch = ./riscv-initrd-free.patch;
};
}

View File

@ -0,0 +1,21 @@
commit b1fbec8b74ace263ce1371e6bcfdd1dd71b52070
Author: Shea Levy <shea@shealevy.com>
Date: Tue Feb 20 08:48:12 2018 -0500
riscv: Implement free_initrd_mem.
v2: Remove incorrect page alignment.
Signed-off-by: Shea Levy <shea@shealevy.com>
diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c
index c77df8142be2..1b6daa5184e0 100644
--- a/arch/riscv/mm/init.c
+++ b/arch/riscv/mm/init.c
@@ -66,5 +66,6 @@ void free_initmem(void)
#ifdef CONFIG_BLK_DEV_INITRD
void free_initrd_mem(unsigned long start, unsigned long end)
{
+ free_reserved_area((void *)start, (void *)end, -1, "initrd");
}
#endif /* CONFIG_BLK_DEV_INITRD */

View File

@ -0,0 +1,48 @@
commit 1e5f6473492f41355289d022003a049ebf8995fa
Author: Shea Levy <shea@shealevy.com>
Date: Tue Feb 20 07:52:14 2018 -0500
riscv: Respect the initrd found in the dt, if any.
Signed-off-by: Shea Levy <shea@shealevy.com>
diff --git a/arch/riscv/kernel/setup.c b/arch/riscv/kernel/setup.c
index 41d34008faf6..c4ebc907af34 100644
--- a/arch/riscv/kernel/setup.c
+++ b/arch/riscv/kernel/setup.c
@@ -88,15 +88,20 @@ static void __init setup_initrd(void)
extern unsigned long __initramfs_size;
unsigned long size;
+ if (initrd_start)
+ goto found;
+
if (__initramfs_size > 0) {
initrd_start = (unsigned long)(&__initramfs_start);
initrd_end = initrd_start + __initramfs_size;
}
+ initrd_below_start_ok = 1;
if (initrd_start >= initrd_end) {
printk(KERN_INFO "initrd not found or empty");
goto disable;
}
+found:
if (__pa(initrd_end) > PFN_PHYS(max_low_pfn)) {
printk(KERN_ERR "initrd extends beyond end of memory");
goto disable;
@@ -104,13 +109,13 @@ static void __init setup_initrd(void)
size = initrd_end - initrd_start;
memblock_reserve(__pa(initrd_start), size);
- initrd_below_start_ok = 1;
printk(KERN_INFO "Initial ramdisk at: 0x%p (%lu bytes)\n",
(void *)(initrd_start), size);
return;
disable:
pr_cont(" - disabling initrd\n");
+ initrd_below_start_ok = 0;
initrd_start = 0;
initrd_end = 0;
}

View File

@ -13118,7 +13118,13 @@ with pkgs;
kernelPatches = [
kernelPatches.bridge_stp_helper
kernelPatches.modinst_arg_list_too_long
] ++ lib.optionals hostPlatform.isRiscV [ kernelPatches.riscv_modules kernelPatches.riscv_irq_busy kernelPatches.riscv_install ];
] ++ lib.optionals hostPlatform.isRiscV [
kernelPatches.riscv_modules
kernelPatches.riscv_irq_busy
kernelPatches.riscv_install
kernelPatches.riscv_initrd
kernelPatches.riscv_initrd_free
];
};
linux_samus_4_12 = callPackage ../os-specific/linux/kernel/linux-samus-4.12.nix {