diff options
author | Grant Likely <grant.likely@secretlab.ca> | 2009-11-23 22:07:01 -0500 |
---|---|---|
committer | Grant Likely <grant.likely@secretlab.ca> | 2009-11-23 22:07:01 -0500 |
commit | 41f880091c15b039ffcc8b3d831656b81517a6d3 (patch) | |
tree | a9919151491356b6445ecd9c613a60f69d207927 /arch/microblaze/kernel | |
parent | bbd33931a08362f78266a4016211a35947b91041 (diff) |
of/flattree: Merge unflatten_device_tree
Merge common code between PowerPC and MicroBlaze
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Reviewed-by: Wolfram Sang <w.sang@pengutronix.de>
Tested-by: Michal Simek <monstr@monstr.eu>
Diffstat (limited to 'arch/microblaze/kernel')
-rw-r--r-- | arch/microblaze/kernel/prom.c | 49 |
1 files changed, 0 insertions, 49 deletions
diff --git a/arch/microblaze/kernel/prom.c b/arch/microblaze/kernel/prom.c index 021770abfbd7..901d538c15ef 100644 --- a/arch/microblaze/kernel/prom.c +++ b/arch/microblaze/kernel/prom.c | |||
@@ -50,55 +50,6 @@ typedef u32 cell_t; | |||
50 | /* export that to outside world */ | 50 | /* export that to outside world */ |
51 | struct device_node *of_chosen; | 51 | struct device_node *of_chosen; |
52 | 52 | ||
53 | /** | ||
54 | * unflattens the device-tree passed by the firmware, creating the | ||
55 | * tree of struct device_node. It also fills the "name" and "type" | ||
56 | * pointers of the nodes so the normal device-tree walking functions | ||
57 | * can be used (this used to be done by finish_device_tree) | ||
58 | */ | ||
59 | void __init unflatten_device_tree(void) | ||
60 | { | ||
61 | unsigned long start, mem, size; | ||
62 | struct device_node **allnextp = &allnodes; | ||
63 | |||
64 | pr_debug(" -> unflatten_device_tree()\n"); | ||
65 | |||
66 | /* First pass, scan for size */ | ||
67 | start = ((unsigned long)initial_boot_params) + | ||
68 | initial_boot_params->off_dt_struct; | ||
69 | size = unflatten_dt_node(0, &start, NULL, NULL, 0); | ||
70 | size = (size | 3) + 1; | ||
71 | |||
72 | pr_debug(" size is %lx, allocating...\n", size); | ||
73 | |||
74 | /* Allocate memory for the expanded device tree */ | ||
75 | mem = lmb_alloc(size + 4, __alignof__(struct device_node)); | ||
76 | mem = (unsigned long) __va(mem); | ||
77 | |||
78 | ((u32 *)mem)[size / 4] = 0xdeadbeef; | ||
79 | |||
80 | pr_debug(" unflattening %lx...\n", mem); | ||
81 | |||
82 | /* Second pass, do actual unflattening */ | ||
83 | start = ((unsigned long)initial_boot_params) + | ||
84 | initial_boot_params->off_dt_struct; | ||
85 | unflatten_dt_node(mem, &start, NULL, &allnextp, 0); | ||
86 | if (*((u32 *)start) != OF_DT_END) | ||
87 | printk(KERN_WARNING "Weird tag at end of tree: %08x\n", | ||
88 | *((u32 *)start)); | ||
89 | if (((u32 *)mem)[size / 4] != 0xdeadbeef) | ||
90 | printk(KERN_WARNING "End of tree marker overwritten: %08x\n", | ||
91 | ((u32 *)mem)[size / 4]); | ||
92 | *allnextp = NULL; | ||
93 | |||
94 | /* Get pointer to OF "/chosen" node for use everywhere */ | ||
95 | of_chosen = of_find_node_by_path("/chosen"); | ||
96 | if (of_chosen == NULL) | ||
97 | of_chosen = of_find_node_by_path("/chosen@0"); | ||
98 | |||
99 | pr_debug(" <- unflatten_device_tree()\n"); | ||
100 | } | ||
101 | |||
102 | #define early_init_dt_scan_drconf_memory(node) 0 | 53 | #define early_init_dt_scan_drconf_memory(node) 0 |
103 | 54 | ||
104 | static int __init early_init_dt_scan_cpus(unsigned long node, | 55 | static int __init early_init_dt_scan_cpus(unsigned long node, |