summary refs log tree commit diff
path: root/pkgs/os-specific
diff options
context:
space:
mode:
authorShea Levy <shea@shealevy.com>2018-02-20 09:18:17 -0500
committerShea Levy <shea@shealevy.com>2018-02-20 09:18:17 -0500
commitf8b5b93b8871a1fc3bbcea92cab7a13d2f02e1bb (patch)
treee1407d209e440a2026d632d8923f311c3bacec2a /pkgs/os-specific
parent0022708d6d369527aa4ff5da07806203c21533d5 (diff)
downloadnixpkgs-f8b5b93b8871a1fc3bbcea92cab7a13d2f02e1bb.tar
nixpkgs-f8b5b93b8871a1fc3bbcea92cab7a13d2f02e1bb.tar.gz
nixpkgs-f8b5b93b8871a1fc3bbcea92cab7a13d2f02e1bb.tar.bz2
nixpkgs-f8b5b93b8871a1fc3bbcea92cab7a13d2f02e1bb.tar.lz
nixpkgs-f8b5b93b8871a1fc3bbcea92cab7a13d2f02e1bb.tar.xz
nixpkgs-f8b5b93b8871a1fc3bbcea92cab7a13d2f02e1bb.tar.zst
nixpkgs-f8b5b93b8871a1fc3bbcea92cab7a13d2f02e1bb.zip
linux_riscv: Add patches for initrd support
Diffstat (limited to 'pkgs/os-specific')
-rw-r--r--pkgs/os-specific/linux/kernel/patches.nix10
-rw-r--r--pkgs/os-specific/linux/kernel/riscv-initrd-free.patch21
-rw-r--r--pkgs/os-specific/linux/kernel/riscv-initrd.patch48
3 files changed, 79 insertions, 0 deletions
diff --git a/pkgs/os-specific/linux/kernel/patches.nix b/pkgs/os-specific/linux/kernel/patches.nix
index 39af0a67936..e0494c6c535 100644
--- a/pkgs/os-specific/linux/kernel/patches.nix
+++ b/pkgs/os-specific/linux/kernel/patches.nix
@@ -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;
+  };
+
 }
diff --git a/pkgs/os-specific/linux/kernel/riscv-initrd-free.patch b/pkgs/os-specific/linux/kernel/riscv-initrd-free.patch
new file mode 100644
index 00000000000..68044838524
--- /dev/null
+++ b/pkgs/os-specific/linux/kernel/riscv-initrd-free.patch
@@ -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 */
diff --git a/pkgs/os-specific/linux/kernel/riscv-initrd.patch b/pkgs/os-specific/linux/kernel/riscv-initrd.patch
new file mode 100644
index 00000000000..2313e764584
--- /dev/null
+++ b/pkgs/os-specific/linux/kernel/riscv-initrd.patch
@@ -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;
+ }