Commit f00abd94918c9780f9d2d961fc0e419c11457922
1 parent
f7b3a8355b
Exists in
master
and in
4 other branches
of/flattree: Merge earlyinit_dt_scan_root()
Merge common code between PowerPC and Microblaze Signed-off-by: Grant Likely <grant.likely@secretlab.ca> Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Tested-by: Wolfram Sang <w.sang@pengutronix.de>
Showing 4 changed files with 32 additions and 47 deletions Side-by-side Diff
arch/microblaze/kernel/prom.c
... | ... | @@ -42,9 +42,6 @@ |
42 | 42 | #include <asm/sections.h> |
43 | 43 | #include <asm/pci-bridge.h> |
44 | 44 | |
45 | -static int __initdata dt_root_addr_cells; | |
46 | -static int __initdata dt_root_size_cells; | |
47 | - | |
48 | 45 | typedef u32 cell_t; |
49 | 46 | |
50 | 47 | /* export that to outside world */ |
... | ... | @@ -153,26 +150,6 @@ |
153 | 150 | #endif /* CONFIG_CMDLINE */ |
154 | 151 | |
155 | 152 | pr_debug("Command line is: %s\n", cmd_line); |
156 | - | |
157 | - /* break now */ | |
158 | - return 1; | |
159 | -} | |
160 | - | |
161 | -static int __init early_init_dt_scan_root(unsigned long node, | |
162 | - const char *uname, int depth, void *data) | |
163 | -{ | |
164 | - u32 *prop; | |
165 | - | |
166 | - if (depth != 0) | |
167 | - return 0; | |
168 | - | |
169 | - prop = of_get_flat_dt_prop(node, "#size-cells", NULL); | |
170 | - dt_root_size_cells = (prop == NULL) ? 1 : *prop; | |
171 | - pr_debug("dt_root_size_cells = %x\n", dt_root_size_cells); | |
172 | - | |
173 | - prop = of_get_flat_dt_prop(node, "#address-cells", NULL); | |
174 | - dt_root_addr_cells = (prop == NULL) ? 2 : *prop; | |
175 | - pr_debug("dt_root_addr_cells = %x\n", dt_root_addr_cells); | |
176 | 153 | |
177 | 154 | /* break now */ |
178 | 155 | return 1; |
arch/powerpc/kernel/prom.c
... | ... | @@ -61,10 +61,6 @@ |
61 | 61 | #define DBG(fmt...) |
62 | 62 | #endif |
63 | 63 | |
64 | - | |
65 | -static int __initdata dt_root_addr_cells; | |
66 | -static int __initdata dt_root_size_cells; | |
67 | - | |
68 | 64 | #ifdef CONFIG_PPC64 |
69 | 65 | int __initdata iommu_is_off; |
70 | 66 | int __initdata iommu_force_on; |
... | ... | @@ -432,26 +428,6 @@ |
432 | 428 | |
433 | 429 | DBG("Command line is: %s\n", cmd_line); |
434 | 430 | |
435 | - /* break now */ | |
436 | - return 1; | |
437 | -} | |
438 | - | |
439 | -static int __init early_init_dt_scan_root(unsigned long node, | |
440 | - const char *uname, int depth, void *data) | |
441 | -{ | |
442 | - u32 *prop; | |
443 | - | |
444 | - if (depth != 0) | |
445 | - return 0; | |
446 | - | |
447 | - prop = of_get_flat_dt_prop(node, "#size-cells", NULL); | |
448 | - dt_root_size_cells = (prop == NULL) ? 1 : *prop; | |
449 | - DBG("dt_root_size_cells = %x\n", dt_root_size_cells); | |
450 | - | |
451 | - prop = of_get_flat_dt_prop(node, "#address-cells", NULL); | |
452 | - dt_root_addr_cells = (prop == NULL) ? 2 : *prop; | |
453 | - DBG("dt_root_addr_cells = %x\n", dt_root_addr_cells); | |
454 | - | |
455 | 431 | /* break now */ |
456 | 432 | return 1; |
457 | 433 | } |
drivers/of/fdt.c
... | ... | @@ -15,6 +15,9 @@ |
15 | 15 | #include <linux/of.h> |
16 | 16 | #include <linux/of_fdt.h> |
17 | 17 | |
18 | +int __initdata dt_root_addr_cells; | |
19 | +int __initdata dt_root_size_cells; | |
20 | + | |
18 | 21 | struct boot_param_header *initial_boot_params; |
19 | 22 | |
20 | 23 | char *find_flat_dt_string(u32 offset) |
... | ... | @@ -405,6 +408,29 @@ |
405 | 408 | { |
406 | 409 | } |
407 | 410 | #endif /* CONFIG_BLK_DEV_INITRD */ |
411 | + | |
412 | +/** | |
413 | + * early_init_dt_scan_root - fetch the top level address and size cells | |
414 | + */ | |
415 | +int __init early_init_dt_scan_root(unsigned long node, const char *uname, | |
416 | + int depth, void *data) | |
417 | +{ | |
418 | + u32 *prop; | |
419 | + | |
420 | + if (depth != 0) | |
421 | + return 0; | |
422 | + | |
423 | + prop = of_get_flat_dt_prop(node, "#size-cells", NULL); | |
424 | + dt_root_size_cells = (prop == NULL) ? 1 : *prop; | |
425 | + pr_debug("dt_root_size_cells = %x\n", dt_root_size_cells); | |
426 | + | |
427 | + prop = of_get_flat_dt_prop(node, "#address-cells", NULL); | |
428 | + dt_root_addr_cells = (prop == NULL) ? 2 : *prop; | |
429 | + pr_debug("dt_root_addr_cells = %x\n", dt_root_addr_cells); | |
430 | + | |
431 | + /* break now */ | |
432 | + return 1; | |
433 | +} | |
408 | 434 | |
409 | 435 | /** |
410 | 436 | * unflatten_device_tree - create tree of device_nodes from flat blob |
include/linux/of_fdt.h
... | ... | @@ -58,6 +58,8 @@ |
58 | 58 | }; |
59 | 59 | |
60 | 60 | /* TBD: Temporary export of fdt globals - remove when code fully merged */ |
61 | +extern int __initdata dt_root_addr_cells; | |
62 | +extern int __initdata dt_root_size_cells; | |
61 | 63 | extern struct boot_param_header *initial_boot_params; |
62 | 64 | |
63 | 65 | /* For scanning the flat device-tree at boot time */ |
... | ... | @@ -70,6 +72,10 @@ |
70 | 72 | extern int of_flat_dt_is_compatible(unsigned long node, const char *name); |
71 | 73 | extern unsigned long of_get_flat_dt_root(void); |
72 | 74 | extern void early_init_dt_check_for_initrd(unsigned long node); |
75 | + | |
76 | +/* Early flat tree scan hooks */ | |
77 | +extern int early_init_dt_scan_root(unsigned long node, const char *uname, | |
78 | + int depth, void *data); | |
73 | 79 | |
74 | 80 | /* Other Prototypes */ |
75 | 81 | extern void finish_device_tree(void); |