aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/kernel')
-rw-r--r--arch/powerpc/kernel/prom.c31
1 files changed, 31 insertions, 0 deletions
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