|
|
@@ -25,6 +25,7 @@
|
|
|
#include <linux/cpu.h>
|
|
|
#include <linux/module.h>
|
|
|
#include <linux/of.h>
|
|
|
+#include <linux/of_device.h>
|
|
|
#include <linux/of_graph.h>
|
|
|
#include <linux/spinlock.h>
|
|
|
#include <linux/slab.h>
|
|
|
@@ -2267,6 +2268,31 @@ struct device_node *of_find_next_cache_node(const struct device_node *np)
|
|
|
return NULL;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * of_find_last_cache_level - Find the level at which the last cache is
|
|
|
+ * present for the given logical cpu
|
|
|
+ *
|
|
|
+ * @cpu: cpu number(logical index) for which the last cache level is needed
|
|
|
+ *
|
|
|
+ * Returns the the level at which the last cache is present. It is exactly
|
|
|
+ * same as the total number of cache levels for the given logical cpu.
|
|
|
+ */
|
|
|
+int of_find_last_cache_level(unsigned int cpu)
|
|
|
+{
|
|
|
+ u32 cache_level = 0;
|
|
|
+ struct device_node *prev = NULL, *np = of_cpu_device_node_get(cpu);
|
|
|
+
|
|
|
+ while (np) {
|
|
|
+ prev = np;
|
|
|
+ of_node_put(np);
|
|
|
+ np = of_find_next_cache_node(np);
|
|
|
+ }
|
|
|
+
|
|
|
+ of_property_read_u32(prev, "cache-level", &cache_level);
|
|
|
+
|
|
|
+ return cache_level;
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* of_graph_parse_endpoint() - parse common endpoint node properties
|
|
|
* @node: pointer to endpoint device_node
|