diff options
| -rw-r--r-- | arch/x86/platform/olpc/olpc_dt.c | 3 | ||||
| -rw-r--r-- | drivers/of/pdt.c | 112 | ||||
| -rw-r--r-- | drivers/usb/host/ehci-xilinx-of.c | 1 | ||||
| -rw-r--r-- | fs/proc/proc_devtree.c | 2 |
4 files changed, 45 insertions, 73 deletions
diff --git a/arch/x86/platform/olpc/olpc_dt.c b/arch/x86/platform/olpc/olpc_dt.c index dab874647530..044bda5b3174 100644 --- a/arch/x86/platform/olpc/olpc_dt.c +++ b/arch/x86/platform/olpc/olpc_dt.c | |||
| @@ -140,8 +140,7 @@ void * __init prom_early_alloc(unsigned long size) | |||
| 140 | * wasted bootmem) and hand off chunks of it to callers. | 140 | * wasted bootmem) and hand off chunks of it to callers. |
| 141 | */ | 141 | */ |
| 142 | res = alloc_bootmem(chunk_size); | 142 | res = alloc_bootmem(chunk_size); |
| 143 | if (!res) | 143 | BUG_ON(!res); |
| 144 | return NULL; | ||
| 145 | prom_early_allocated += chunk_size; | 144 | prom_early_allocated += chunk_size; |
| 146 | memset(res, 0, chunk_size); | 145 | memset(res, 0, chunk_size); |
| 147 | free_mem = chunk_size; | 146 | free_mem = chunk_size; |
diff --git a/drivers/of/pdt.c b/drivers/of/pdt.c index 28295d0a50f6..4d87b5dc9284 100644 --- a/drivers/of/pdt.c +++ b/drivers/of/pdt.c | |||
| @@ -36,19 +36,55 @@ unsigned int of_pdt_unique_id __initdata; | |||
| 36 | (p)->unique_id = of_pdt_unique_id++; \ | 36 | (p)->unique_id = of_pdt_unique_id++; \ |
| 37 | } while (0) | 37 | } while (0) |
| 38 | 38 | ||
| 39 | static inline const char *of_pdt_node_name(struct device_node *dp) | 39 | static char * __init of_pdt_build_full_name(struct device_node *dp) |
| 40 | { | 40 | { |
| 41 | return dp->path_component_name; | 41 | int len, ourlen, plen; |
| 42 | char *n; | ||
| 43 | |||
| 44 | dp->path_component_name = build_path_component(dp); | ||
| 45 | |||
| 46 | plen = strlen(dp->parent->full_name); | ||
| 47 | ourlen = strlen(dp->path_component_name); | ||
| 48 | len = ourlen + plen + 2; | ||
| 49 | |||
| 50 | n = prom_early_alloc(len); | ||
| 51 | strcpy(n, dp->parent->full_name); | ||
| 52 | if (!of_node_is_root(dp->parent)) { | ||
| 53 | strcpy(n + plen, "/"); | ||
| 54 | plen++; | ||
| 55 | } | ||
| 56 | strcpy(n + plen, dp->path_component_name); | ||
| 57 | |||
| 58 | return n; | ||
| 42 | } | 59 | } |
| 43 | 60 | ||
| 44 | #else | 61 | #else /* CONFIG_SPARC */ |
| 45 | 62 | ||
| 46 | static inline void of_pdt_incr_unique_id(void *p) { } | 63 | static inline void of_pdt_incr_unique_id(void *p) { } |
| 47 | static inline void irq_trans_init(struct device_node *dp) { } | 64 | static inline void irq_trans_init(struct device_node *dp) { } |
| 48 | 65 | ||
| 49 | static inline const char *of_pdt_node_name(struct device_node *dp) | 66 | static char * __init of_pdt_build_full_name(struct device_node *dp) |
| 50 | { | 67 | { |
| 51 | return dp->name; | 68 | static int failsafe_id = 0; /* for generating unique names on failure */ |
| 69 | char *buf; | ||
| 70 | int len; | ||
| 71 | |||
| 72 | if (of_pdt_prom_ops->pkg2path(dp->phandle, NULL, 0, &len)) | ||
| 73 | goto failsafe; | ||
| 74 | |||
| 75 | buf = prom_early_alloc(len + 1); | ||
| 76 | if (of_pdt_prom_ops->pkg2path(dp->phandle, buf, len, &len)) | ||
| 77 | goto failsafe; | ||
| 78 | return buf; | ||
| 79 | |||
| 80 | failsafe: | ||
| 81 | buf = prom_early_alloc(strlen(dp->parent->full_name) + | ||
| 82 | strlen(dp->name) + 16); | ||
| 83 | sprintf(buf, "%s/%s@unknown%i", | ||
| 84 | of_node_is_root(dp->parent) ? "" : dp->parent->full_name, | ||
| 85 | dp->name, failsafe_id++); | ||
| 86 | pr_err("%s: pkg2path failed; assigning %s\n", __func__, buf); | ||
| 87 | return buf; | ||
| 52 | } | 88 | } |
| 53 | 89 | ||
| 54 | #endif /* !CONFIG_SPARC */ | 90 | #endif /* !CONFIG_SPARC */ |
| @@ -132,47 +168,6 @@ static char * __init of_pdt_get_one_property(phandle node, const char *name) | |||
| 132 | return buf; | 168 | return buf; |
| 133 | } | 169 | } |
| 134 | 170 | ||
| 135 | static char * __init of_pdt_try_pkg2path(phandle node) | ||
| 136 | { | ||
| 137 | char *res, *buf = NULL; | ||
| 138 | int len; | ||
| 139 | |||
| 140 | if (!of_pdt_prom_ops->pkg2path) | ||
| 141 | return NULL; | ||
| 142 | |||
| 143 | if (of_pdt_prom_ops->pkg2path(node, buf, 0, &len)) | ||
| 144 | return NULL; | ||
| 145 | buf = prom_early_alloc(len + 1); | ||
| 146 | if (of_pdt_prom_ops->pkg2path(node, buf, len, &len)) { | ||
| 147 | pr_err("%s: package-to-path failed\n", __func__); | ||
| 148 | return NULL; | ||
| 149 | } | ||
| 150 | |||
| 151 | res = strrchr(buf, '/'); | ||
| 152 | if (!res) { | ||
| 153 | pr_err("%s: couldn't find / in %s\n", __func__, buf); | ||
| 154 | return NULL; | ||
| 155 | } | ||
| 156 | return res+1; | ||
| 157 | } | ||
| 158 | |||
| 159 | /* | ||
| 160 | * When fetching the node's name, first try using package-to-path; if | ||
| 161 | * that fails (either because the arch hasn't supplied a PROM callback, | ||
| 162 | * or some other random failure), fall back to just looking at the node's | ||
| 163 | * 'name' property. | ||
| 164 | */ | ||
| 165 | static char * __init of_pdt_build_name(phandle node) | ||
| 166 | { | ||
| 167 | char *buf; | ||
| 168 | |||
| 169 | buf = of_pdt_try_pkg2path(node); | ||
| 170 | if (!buf) | ||
| 171 | buf = of_pdt_get_one_property(node, "name"); | ||
| 172 | |||
| 173 | return buf; | ||
| 174 | } | ||
| 175 | |||
| 176 | static struct device_node * __init of_pdt_create_node(phandle node, | 171 | static struct device_node * __init of_pdt_create_node(phandle node, |
| 177 | struct device_node *parent) | 172 | struct device_node *parent) |
| 178 | { | 173 | { |
| @@ -187,7 +182,7 @@ static struct device_node * __init of_pdt_create_node(phandle node, | |||
| 187 | 182 | ||
| 188 | kref_init(&dp->kref); | 183 | kref_init(&dp->kref); |
| 189 | 184 | ||
| 190 | dp->name = of_pdt_build_name(node); | 185 | dp->name = of_pdt_get_one_property(node, "name"); |
| 191 | dp->type = of_pdt_get_one_property(node, "device_type"); | 186 | dp->type = of_pdt_get_one_property(node, "device_type"); |
| 192 | dp->phandle = node; | 187 | dp->phandle = node; |
| 193 | 188 | ||
| @@ -198,26 +193,6 @@ static struct device_node * __init of_pdt_create_node(phandle node, | |||
| 198 | return dp; | 193 | return dp; |
| 199 | } | 194 | } |
| 200 | 195 | ||
| 201 | static char * __init of_pdt_build_full_name(struct device_node *dp) | ||
| 202 | { | ||
| 203 | int len, ourlen, plen; | ||
| 204 | char *n; | ||
| 205 | |||
| 206 | plen = strlen(dp->parent->full_name); | ||
| 207 | ourlen = strlen(of_pdt_node_name(dp)); | ||
| 208 | len = ourlen + plen + 2; | ||
| 209 | |||
| 210 | n = prom_early_alloc(len); | ||
| 211 | strcpy(n, dp->parent->full_name); | ||
| 212 | if (!of_node_is_root(dp->parent)) { | ||
| 213 | strcpy(n + plen, "/"); | ||
| 214 | plen++; | ||
| 215 | } | ||
| 216 | strcpy(n + plen, of_pdt_node_name(dp)); | ||
| 217 | |||
| 218 | return n; | ||
| 219 | } | ||
| 220 | |||
| 221 | static struct device_node * __init of_pdt_build_tree(struct device_node *parent, | 196 | static struct device_node * __init of_pdt_build_tree(struct device_node *parent, |
| 222 | phandle node, | 197 | phandle node, |
| 223 | struct device_node ***nextp) | 198 | struct device_node ***nextp) |
| @@ -240,9 +215,6 @@ static struct device_node * __init of_pdt_build_tree(struct device_node *parent, | |||
| 240 | *(*nextp) = dp; | 215 | *(*nextp) = dp; |
| 241 | *nextp = &dp->allnext; | 216 | *nextp = &dp->allnext; |
| 242 | 217 | ||
| 243 | #if defined(CONFIG_SPARC) | ||
| 244 | dp->path_component_name = build_path_component(dp); | ||
| 245 | #endif | ||
| 246 | dp->full_name = of_pdt_build_full_name(dp); | 218 | dp->full_name = of_pdt_build_full_name(dp); |
| 247 | 219 | ||
| 248 | dp->child = of_pdt_build_tree(dp, | 220 | dp->child = of_pdt_build_tree(dp, |
diff --git a/drivers/usb/host/ehci-xilinx-of.c b/drivers/usb/host/ehci-xilinx-of.c index e8f4f36fdf0b..a6f21b891f68 100644 --- a/drivers/usb/host/ehci-xilinx-of.c +++ b/drivers/usb/host/ehci-xilinx-of.c | |||
| @@ -29,6 +29,7 @@ | |||
| 29 | 29 | ||
| 30 | #include <linux/of.h> | 30 | #include <linux/of.h> |
| 31 | #include <linux/of_platform.h> | 31 | #include <linux/of_platform.h> |
| 32 | #include <linux/of_address.h> | ||
| 32 | 33 | ||
| 33 | /** | 34 | /** |
| 34 | * ehci_xilinx_of_setup - Initialize the device for ehci_reset() | 35 | * ehci_xilinx_of_setup - Initialize the device for ehci_reset() |
diff --git a/fs/proc/proc_devtree.c b/fs/proc/proc_devtree.c index d9396a4fc7ff..927cbd115e53 100644 --- a/fs/proc/proc_devtree.c +++ b/fs/proc/proc_devtree.c | |||
| @@ -233,7 +233,7 @@ void __init proc_device_tree_init(void) | |||
| 233 | return; | 233 | return; |
| 234 | root = of_find_node_by_path("/"); | 234 | root = of_find_node_by_path("/"); |
| 235 | if (root == NULL) { | 235 | if (root == NULL) { |
| 236 | printk(KERN_ERR "/proc/device-tree: can't find root\n"); | 236 | pr_debug("/proc/device-tree: can't find root\n"); |
| 237 | return; | 237 | return; |
| 238 | } | 238 | } |
| 239 | proc_device_tree_add_node(root, proc_device_tree); | 239 | proc_device_tree_add_node(root, proc_device_tree); |
