aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/powerpc/include/asm/prom.h3
-rw-r--r--arch/powerpc/kernel/prom.c31
2 files changed, 34 insertions, 0 deletions
diff --git a/arch/powerpc/include/asm/prom.h b/arch/powerpc/include/asm/prom.h
index eb3bd2e1c7f6..6ff04185d2aa 100644
--- a/arch/powerpc/include/asm/prom.h
+++ b/arch/powerpc/include/asm/prom.h
@@ -253,6 +253,9 @@ extern void kdump_move_device_tree(void);
253/* CPU OF node matching */ 253/* CPU OF node matching */
254struct device_node *of_get_cpu_node(int cpu, unsigned int *thread); 254struct device_node *of_get_cpu_node(int cpu, unsigned int *thread);
255 255
256/* cache lookup */
257struct device_node *of_find_next_cache_node(struct device_node *np);
258
256/* Get the MAC address */ 259/* Get the MAC address */
257extern const void *of_get_mac_address(struct device_node *np); 260extern const void *of_get_mac_address(struct device_node *np);
258 261
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
index 3a2dc7e6586a..d8266dd61dda 100644
--- a/arch/powerpc/kernel/prom.c
+++ b/arch/powerpc/kernel/prom.c
@@ -1271,6 +1271,37 @@ struct device_node *of_find_node_by_phandle(phandle handle)
1271EXPORT_SYMBOL(of_find_node_by_phandle); 1271EXPORT_SYMBOL(of_find_node_by_phandle);
1272 1272
1273/** 1273/**
1274 * of_find_next_cache_node - Find a node's subsidiary cache
1275 * @np: node of type "cpu" or "cache"
1276 *
1277 * Returns a node pointer with refcount incremented, use
1278 * of_node_put() on it when done. Caller should hold a reference
1279 * to np.
1280 */
1281struct device_node *of_find_next_cache_node(struct device_node *np)
1282{
1283 struct device_node *child;
1284 const phandle *handle;
1285
1286 handle = of_get_property(np, "l2-cache", NULL);
1287 if (!handle)
1288 handle = of_get_property(np, "next-level-cache", NULL);
1289
1290 if (handle)
1291 return of_find_node_by_phandle(*handle);
1292
1293 /* OF on pmac has nodes instead of properties named "l2-cache"
1294 * beneath CPU nodes.
1295 */
1296 if (!strcmp(np->type, "cpu"))
1297 for_each_child_of_node(np, child)
1298 if (!strcmp(child->type, "cache"))
1299 return child;
1300
1301 return NULL;
1302}
1303
1304/**
1274 * of_find_all_nodes - Get next node in global list 1305 * of_find_all_nodes - Get next node in global list
1275 * @prev: Previous node or NULL to start iteration 1306 * @prev: Previous node or NULL to start iteration
1276 * of_node_put() will be called on it 1307 * of_node_put() will be called on it