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/powerpc/kernel/prom.c | |
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/powerpc/kernel/prom.c')
-rw-r--r-- | arch/powerpc/kernel/prom.c | 50 |
1 files changed, 0 insertions, 50 deletions
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c index a102a0a33ed1..1280f3484ad3 100644 --- a/arch/powerpc/kernel/prom.c +++ b/arch/powerpc/kernel/prom.c | |||
@@ -73,8 +73,6 @@ unsigned long tce_alloc_start, tce_alloc_end; | |||
73 | 73 | ||
74 | typedef u32 cell_t; | 74 | typedef u32 cell_t; |
75 | 75 | ||
76 | extern struct device_node *allnodes; /* temporary while merging */ | ||
77 | |||
78 | extern rwlock_t devtree_lock; /* temporary while merging */ | 76 | extern rwlock_t devtree_lock; /* temporary while merging */ |
79 | 77 | ||
80 | /* export that to outside world */ | 78 | /* export that to outside world */ |
@@ -119,54 +117,6 @@ static void __init move_device_tree(void) | |||
119 | DBG("<- move_device_tree\n"); | 117 | DBG("<- move_device_tree\n"); |
120 | } | 118 | } |
121 | 119 | ||
122 | /** | ||
123 | * unflattens the device-tree passed by the firmware, creating the | ||
124 | * tree of struct device_node. It also fills the "name" and "type" | ||
125 | * pointers of the nodes so the normal device-tree walking functions | ||
126 | * can be used (this used to be done by finish_device_tree) | ||
127 | */ | ||
128 | void __init unflatten_device_tree(void) | ||
129 | { | ||
130 | unsigned long start, mem, size; | ||
131 | struct device_node **allnextp = &allnodes; | ||
132 | |||
133 | DBG(" -> unflatten_device_tree()\n"); | ||
134 | |||
135 | /* First pass, scan for size */ | ||
136 | start = ((unsigned long)initial_boot_params) + | ||
137 | initial_boot_params->off_dt_struct; | ||
138 | size = unflatten_dt_node(0, &start, NULL, NULL, 0); | ||
139 | size = (size | 3) + 1; | ||
140 | |||
141 | DBG(" size is %lx, allocating...\n", size); | ||
142 | |||
143 | /* Allocate memory for the expanded device tree */ | ||
144 | mem = lmb_alloc(size + 4, __alignof__(struct device_node)); | ||
145 | mem = (unsigned long) __va(mem); | ||
146 | |||
147 | ((u32 *)mem)[size / 4] = 0xdeadbeef; | ||
148 | |||
149 | DBG(" unflattening %lx...\n", mem); | ||
150 | |||
151 | /* Second pass, do actual unflattening */ | ||
152 | start = ((unsigned long)initial_boot_params) + | ||
153 | initial_boot_params->off_dt_struct; | ||
154 | unflatten_dt_node(mem, &start, NULL, &allnextp, 0); | ||
155 | if (*((u32 *)start) != OF_DT_END) | ||
156 | printk(KERN_WARNING "Weird tag at end of tree: %08x\n", *((u32 *)start)); | ||
157 | if (((u32 *)mem)[size / 4] != 0xdeadbeef) | ||
158 | printk(KERN_WARNING "End of tree marker overwritten: %08x\n", | ||
159 | ((u32 *)mem)[size / 4] ); | ||
160 | *allnextp = NULL; | ||
161 | |||
162 | /* Get pointer to OF "/chosen" node for use everywhere */ | ||
163 | of_chosen = of_find_node_by_path("/chosen"); | ||
164 | if (of_chosen == NULL) | ||
165 | of_chosen = of_find_node_by_path("/chosen@0"); | ||
166 | |||
167 | DBG(" <- unflatten_device_tree()\n"); | ||
168 | } | ||
169 | |||
170 | /* | 120 | /* |
171 | * ibm,pa-features is a per-cpu property that contains a string of | 121 | * ibm,pa-features is a per-cpu property that contains a string of |
172 | * attribute descriptors, each of which has a 2 byte header plus up | 122 | * attribute descriptors, each of which has a 2 byte header plus up |