diff options
Diffstat (limited to 'arch/arm/mm/init.c')
-rw-r--r-- | arch/arm/mm/init.c | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c index 30a69d67d673..c70fb1d18903 100644 --- a/arch/arm/mm/init.c +++ b/arch/arm/mm/init.c | |||
@@ -27,8 +27,43 @@ | |||
27 | #include "mm.h" | 27 | #include "mm.h" |
28 | 28 | ||
29 | extern void _text, _etext, __data_start, _end, __init_begin, __init_end; | 29 | extern void _text, _etext, __data_start, _end, __init_begin, __init_end; |
30 | extern unsigned long phys_initrd_start; | 30 | |
31 | extern unsigned long phys_initrd_size; | 31 | static unsigned long phys_initrd_start __initdata = 0; |
32 | static unsigned long phys_initrd_size __initdata = 0; | ||
33 | |||
34 | static void __init early_initrd(char **p) | ||
35 | { | ||
36 | unsigned long start, size; | ||
37 | |||
38 | start = memparse(*p, p); | ||
39 | if (**p == ',') { | ||
40 | size = memparse((*p) + 1, p); | ||
41 | |||
42 | phys_initrd_start = start; | ||
43 | phys_initrd_size = size; | ||
44 | } | ||
45 | } | ||
46 | __early_param("initrd=", early_initrd); | ||
47 | |||
48 | static int __init parse_tag_initrd(const struct tag *tag) | ||
49 | { | ||
50 | printk(KERN_WARNING "ATAG_INITRD is deprecated; " | ||
51 | "please update your bootloader.\n"); | ||
52 | phys_initrd_start = __virt_to_phys(tag->u.initrd.start); | ||
53 | phys_initrd_size = tag->u.initrd.size; | ||
54 | return 0; | ||
55 | } | ||
56 | |||
57 | __tagtable(ATAG_INITRD, parse_tag_initrd); | ||
58 | |||
59 | static int __init parse_tag_initrd2(const struct tag *tag) | ||
60 | { | ||
61 | phys_initrd_start = tag->u.initrd.start; | ||
62 | phys_initrd_size = tag->u.initrd.size; | ||
63 | return 0; | ||
64 | } | ||
65 | |||
66 | __tagtable(ATAG_INITRD2, parse_tag_initrd2); | ||
32 | 67 | ||
33 | /* | 68 | /* |
34 | * This is used to pass memory configuration data from paging_init | 69 | * This is used to pass memory configuration data from paging_init |