diff options
author | Grant Likely <grant.likely@secretlab.ca> | 2009-11-24 05:27:10 -0500 |
---|---|---|
committer | Grant Likely <grant.likely@secretlab.ca> | 2009-12-10 17:23:15 -0500 |
commit | f00abd94918c9780f9d2d961fc0e419c11457922 (patch) | |
tree | 47238d5fbfa609ecbf54edf3092eade902aa9ec6 | |
parent | f7b3a8355ba6cad251297844a0bdd08898ea36e0 (diff) |
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>
-rw-r--r-- | arch/microblaze/kernel/prom.c | 23 | ||||
-rw-r--r-- | arch/powerpc/kernel/prom.c | 24 | ||||
-rw-r--r-- | drivers/of/fdt.c | 26 | ||||
-rw-r--r-- | include/linux/of_fdt.h | 6 |
4 files changed, 32 insertions, 47 deletions
diff --git a/arch/microblaze/kernel/prom.c b/arch/microblaze/kernel/prom.c index 7959495b1d00..189179a9b554 100644 --- a/arch/microblaze/kernel/prom.c +++ b/arch/microblaze/kernel/prom.c | |||
@@ -42,9 +42,6 @@ | |||
42 | #include <asm/sections.h> | 42 | #include <asm/sections.h> |
43 | #include <asm/pci-bridge.h> | 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 | typedef u32 cell_t; | 45 | typedef u32 cell_t; |
49 | 46 | ||
50 | /* export that to outside world */ | 47 | /* export that to outside world */ |
@@ -158,26 +155,6 @@ static int __init early_init_dt_scan_chosen(unsigned long node, | |||
158 | return 1; | 155 | return 1; |
159 | } | 156 | } |
160 | 157 | ||
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 | |||
177 | /* break now */ | ||
178 | return 1; | ||
179 | } | ||
180 | |||
181 | static u64 __init dt_mem_next_cell(int s, cell_t **cellp) | 158 | static u64 __init dt_mem_next_cell(int s, cell_t **cellp) |
182 | { | 159 | { |
183 | cell_t *p = *cellp; | 160 | cell_t *p = *cellp; |
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c index 1ecd6c6ecabd..78f65a4d8b03 100644 --- a/arch/powerpc/kernel/prom.c +++ b/arch/powerpc/kernel/prom.c | |||
@@ -61,10 +61,6 @@ | |||
61 | #define DBG(fmt...) | 61 | #define DBG(fmt...) |
62 | #endif | 62 | #endif |
63 | 63 | ||
64 | |||
65 | static int __initdata dt_root_addr_cells; | ||
66 | static int __initdata dt_root_size_cells; | ||
67 | |||
68 | #ifdef CONFIG_PPC64 | 64 | #ifdef CONFIG_PPC64 |
69 | int __initdata iommu_is_off; | 65 | int __initdata iommu_is_off; |
70 | int __initdata iommu_force_on; | 66 | int __initdata iommu_force_on; |
@@ -436,26 +432,6 @@ static int __init early_init_dt_scan_chosen(unsigned long node, | |||
436 | return 1; | 432 | return 1; |
437 | } | 433 | } |
438 | 434 | ||
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 | /* break now */ | ||
456 | return 1; | ||
457 | } | ||
458 | |||
459 | static u64 __init dt_mem_next_cell(int s, cell_t **cellp) | 435 | static u64 __init dt_mem_next_cell(int s, cell_t **cellp) |
460 | { | 436 | { |
461 | cell_t *p = *cellp; | 437 | cell_t *p = *cellp; |
diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c index 6ad98e85dc93..be200be47269 100644 --- a/drivers/of/fdt.c +++ b/drivers/of/fdt.c | |||
@@ -15,6 +15,9 @@ | |||
15 | #include <linux/of.h> | 15 | #include <linux/of.h> |
16 | #include <linux/of_fdt.h> | 16 | #include <linux/of_fdt.h> |
17 | 17 | ||
18 | int __initdata dt_root_addr_cells; | ||
19 | int __initdata dt_root_size_cells; | ||
20 | |||
18 | struct boot_param_header *initial_boot_params; | 21 | struct boot_param_header *initial_boot_params; |
19 | 22 | ||
20 | char *find_flat_dt_string(u32 offset) | 23 | char *find_flat_dt_string(u32 offset) |
@@ -407,6 +410,29 @@ inline void early_init_dt_check_for_initrd(unsigned long node) | |||
407 | #endif /* CONFIG_BLK_DEV_INITRD */ | 410 | #endif /* CONFIG_BLK_DEV_INITRD */ |
408 | 411 | ||
409 | /** | 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 | } | ||
434 | |||
435 | /** | ||
410 | * unflatten_device_tree - create tree of device_nodes from flat blob | 436 | * unflatten_device_tree - create tree of device_nodes from flat blob |
411 | * | 437 | * |
412 | * unflattens the device-tree passed by the firmware, creating the | 438 | * unflattens the device-tree passed by the firmware, creating the |
diff --git a/include/linux/of_fdt.h b/include/linux/of_fdt.h index ec2db8278c3f..828c3cdaea78 100644 --- a/include/linux/of_fdt.h +++ b/include/linux/of_fdt.h | |||
@@ -58,6 +58,8 @@ struct boot_param_header { | |||
58 | }; | 58 | }; |
59 | 59 | ||
60 | /* TBD: Temporary export of fdt globals - remove when code fully merged */ | 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 | extern struct boot_param_header *initial_boot_params; | 63 | extern struct boot_param_header *initial_boot_params; |
62 | 64 | ||
63 | /* For scanning the flat device-tree at boot time */ | 65 | /* For scanning the flat device-tree at boot time */ |
@@ -71,6 +73,10 @@ extern int of_flat_dt_is_compatible(unsigned long node, const char *name); | |||
71 | extern unsigned long of_get_flat_dt_root(void); | 73 | extern unsigned long of_get_flat_dt_root(void); |
72 | extern void early_init_dt_check_for_initrd(unsigned long node); | 74 | extern void early_init_dt_check_for_initrd(unsigned long node); |
73 | 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); | ||
79 | |||
74 | /* Other Prototypes */ | 80 | /* Other Prototypes */ |
75 | extern void finish_device_tree(void); | 81 | extern void finish_device_tree(void); |
76 | extern void unflatten_device_tree(void); | 82 | extern void unflatten_device_tree(void); |