diff options
-rw-r--r-- | arch/microblaze/kernel/prom.c | 10 | ||||
-rw-r--r-- | arch/powerpc/kernel/prom.c | 10 | ||||
-rw-r--r-- | drivers/of/fdt.c | 27 | ||||
-rw-r--r-- | include/linux/of_fdt.h | 10 |
4 files changed, 41 insertions, 16 deletions
diff --git a/arch/microblaze/kernel/prom.c b/arch/microblaze/kernel/prom.c index 459c32e4a5fe..050b7993c51c 100644 --- a/arch/microblaze/kernel/prom.c +++ b/arch/microblaze/kernel/prom.c | |||
@@ -118,6 +118,16 @@ void __init early_init_devtree(void *params) | |||
118 | pr_debug(" <- early_init_devtree()\n"); | 118 | pr_debug(" <- early_init_devtree()\n"); |
119 | } | 119 | } |
120 | 120 | ||
121 | #ifdef CONFIG_BLK_DEV_INITRD | ||
122 | void __init early_init_dt_setup_initrd_arch(unsigned long start, | ||
123 | unsigned long end) | ||
124 | { | ||
125 | initrd_start = (unsigned long)__va(start); | ||
126 | initrd_end = (unsigned long)__va(end); | ||
127 | initrd_below_start_ok = 1; | ||
128 | } | ||
129 | #endif | ||
130 | |||
121 | /******* | 131 | /******* |
122 | * | 132 | * |
123 | * New implementation of the OF "find" APIs, return a refcounted | 133 | * New implementation of the OF "find" APIs, return a refcounted |
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c index e0f368ff8d12..40fce1c2f33b 100644 --- a/arch/powerpc/kernel/prom.c +++ b/arch/powerpc/kernel/prom.c | |||
@@ -510,6 +510,16 @@ void __init early_init_dt_add_memory_arch(u64 base, u64 size) | |||
510 | memstart_addr = min((u64)memstart_addr, base); | 510 | memstart_addr = min((u64)memstart_addr, base); |
511 | } | 511 | } |
512 | 512 | ||
513 | #ifdef CONFIG_BLK_DEV_INITRD | ||
514 | void __init early_init_dt_setup_initrd_arch(unsigned long start, | ||
515 | unsigned long end) | ||
516 | { | ||
517 | initrd_start = (unsigned long)__va(start); | ||
518 | initrd_end = (unsigned long)__va(end); | ||
519 | initrd_below_start_ok = 1; | ||
520 | } | ||
521 | #endif | ||
522 | |||
513 | static void __init early_reserve_mem(void) | 523 | static void __init early_reserve_mem(void) |
514 | { | 524 | { |
515 | u64 base, size; | 525 | u64 base, size; |
diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c index f84152d112b0..9290ca5aa892 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c | |||
@@ -384,28 +384,23 @@ unsigned long __init unflatten_dt_node(unsigned long mem, | |||
384 | */ | 384 | */ |
385 | void __init early_init_dt_check_for_initrd(unsigned long node) | 385 | void __init early_init_dt_check_for_initrd(unsigned long node) |
386 | { | 386 | { |
387 | unsigned long len; | 387 | unsigned long start, end, len; |
388 | u32 *prop; | 388 | u32 *prop; |
389 | 389 | ||
390 | pr_debug("Looking for initrd properties... "); | 390 | pr_debug("Looking for initrd properties... "); |
391 | 391 | ||
392 | prop = of_get_flat_dt_prop(node, "linux,initrd-start", &len); | 392 | prop = of_get_flat_dt_prop(node, "linux,initrd-start", &len); |
393 | if (prop) { | 393 | if (!prop) |
394 | initrd_start = (unsigned long) | 394 | return; |
395 | __va(of_read_ulong(prop, len/4)); | 395 | start = of_read_ulong(prop, len/4); |
396 | 396 | ||
397 | prop = of_get_flat_dt_prop(node, "linux,initrd-end", &len); | 397 | prop = of_get_flat_dt_prop(node, "linux,initrd-end", &len); |
398 | if (prop) { | 398 | if (!prop) |
399 | initrd_end = (unsigned long) | 399 | return; |
400 | __va(of_read_ulong(prop, len/4)); | 400 | end = of_read_ulong(prop, len/4); |
401 | initrd_below_start_ok = 1; | ||
402 | } else { | ||
403 | initrd_start = 0; | ||
404 | } | ||
405 | } | ||
406 | 401 | ||
407 | pr_debug("initrd_start=0x%lx initrd_end=0x%lx\n", | 402 | early_init_dt_setup_initrd_arch(start, end); |
408 | initrd_start, initrd_end); | 403 | pr_debug("initrd_start=0x%lx initrd_end=0x%lx\n", start, end); |
409 | } | 404 | } |
410 | #else | 405 | #else |
411 | inline void early_init_dt_check_for_initrd(unsigned long node) | 406 | inline void early_init_dt_check_for_initrd(unsigned long node) |
diff --git a/include/linux/of_fdt.h b/include/linux/of_fdt.h index bf26bd5df9f1..f32f0fc5314a 100644 --- a/include/linux/of_fdt.h +++ b/include/linux/of_fdt.h | |||
@@ -80,6 +80,16 @@ extern int early_init_dt_scan_memory(unsigned long node, const char *uname, | |||
80 | extern void early_init_dt_add_memory_arch(u64 base, u64 size); | 80 | extern void early_init_dt_add_memory_arch(u64 base, u64 size); |
81 | extern u64 dt_mem_next_cell(int s, u32 **cellp); | 81 | extern u64 dt_mem_next_cell(int s, u32 **cellp); |
82 | 82 | ||
83 | /* | ||
84 | * If BLK_DEV_INITRD, the fdt early init code will call this function, | ||
85 | * to be provided by the arch code. start and end are specified as | ||
86 | * physical addresses. | ||
87 | */ | ||
88 | #ifdef CONFIG_BLK_DEV_INITRD | ||
89 | extern void early_init_dt_setup_initrd_arch(unsigned long start, | ||
90 | unsigned long end); | ||
91 | #endif | ||
92 | |||
83 | /* Early flat tree scan hooks */ | 93 | /* Early flat tree scan hooks */ |
84 | extern int early_init_dt_scan_root(unsigned long node, const char *uname, | 94 | extern int early_init_dt_scan_root(unsigned long node, const char *uname, |
85 | int depth, void *data); | 95 | int depth, void *data); |