diff options
Diffstat (limited to 'arch/powerpc/kernel/prom.c')
-rw-r--r-- | arch/powerpc/kernel/prom.c | 31 |
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) | |||
1271 | EXPORT_SYMBOL(of_find_node_by_phandle); | 1271 | EXPORT_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 | */ | ||
1281 | struct 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 |