diff options
author | Grant Likely <grant.likely@secretlab.ca> | 2009-11-23 20:54:23 -0500 |
---|---|---|
committer | Grant Likely <grant.likely@secretlab.ca> | 2009-11-23 20:54:23 -0500 |
commit | c8cb7a59842c0b512b44f6f818cdb0b5a3ddc89e (patch) | |
tree | 74d7b5c8dac3d5167b0394b5967bad52681dc28e /arch/powerpc/kernel/prom.c | |
parent | e169cfbef46d62e042614ffafa8880eed1d894bb (diff) |
of/flattree: merge of_scan_flat_dt
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 | 61 |
1 files changed, 0 insertions, 61 deletions
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c index fccf7e49bb28..14a07b9e00d1 100644 --- a/arch/powerpc/kernel/prom.c +++ b/arch/powerpc/kernel/prom.c | |||
@@ -80,67 +80,6 @@ extern rwlock_t devtree_lock; /* temporary while merging */ | |||
80 | /* export that to outside world */ | 80 | /* export that to outside world */ |
81 | struct device_node *of_chosen; | 81 | struct device_node *of_chosen; |
82 | 82 | ||
83 | /** | ||
84 | * This function is used to scan the flattened device-tree, it is | ||
85 | * used to extract the memory informations at boot before we can | ||
86 | * unflatten the tree | ||
87 | */ | ||
88 | int __init of_scan_flat_dt(int (*it)(unsigned long node, | ||
89 | const char *uname, int depth, | ||
90 | void *data), | ||
91 | void *data) | ||
92 | { | ||
93 | unsigned long p = ((unsigned long)initial_boot_params) + | ||
94 | initial_boot_params->off_dt_struct; | ||
95 | int rc = 0; | ||
96 | int depth = -1; | ||
97 | |||
98 | do { | ||
99 | u32 tag = *((u32 *)p); | ||
100 | char *pathp; | ||
101 | |||
102 | p += 4; | ||
103 | if (tag == OF_DT_END_NODE) { | ||
104 | depth --; | ||
105 | continue; | ||
106 | } | ||
107 | if (tag == OF_DT_NOP) | ||
108 | continue; | ||
109 | if (tag == OF_DT_END) | ||
110 | break; | ||
111 | if (tag == OF_DT_PROP) { | ||
112 | u32 sz = *((u32 *)p); | ||
113 | p += 8; | ||
114 | if (initial_boot_params->version < 0x10) | ||
115 | p = _ALIGN(p, sz >= 8 ? 8 : 4); | ||
116 | p += sz; | ||
117 | p = _ALIGN(p, 4); | ||
118 | continue; | ||
119 | } | ||
120 | if (tag != OF_DT_BEGIN_NODE) { | ||
121 | printk(KERN_WARNING "Invalid tag %x scanning flattened" | ||
122 | " device tree !\n", tag); | ||
123 | return -EINVAL; | ||
124 | } | ||
125 | depth++; | ||
126 | pathp = (char *)p; | ||
127 | p = _ALIGN(p + strlen(pathp) + 1, 4); | ||
128 | if ((*pathp) == '/') { | ||
129 | char *lp, *np; | ||
130 | for (lp = NULL, np = pathp; *np; np++) | ||
131 | if ((*np) == '/') | ||
132 | lp = np+1; | ||
133 | if (lp != NULL) | ||
134 | pathp = lp; | ||
135 | } | ||
136 | rc = it(p, pathp, depth, data); | ||
137 | if (rc != 0) | ||
138 | break; | ||
139 | } while(1); | ||
140 | |||
141 | return rc; | ||
142 | } | ||
143 | |||
144 | unsigned long __init of_get_flat_dt_root(void) | 83 | unsigned long __init of_get_flat_dt_root(void) |
145 | { | 84 | { |
146 | unsigned long p = ((unsigned long)initial_boot_params) + | 85 | unsigned long p = ((unsigned long)initial_boot_params) + |