|
@@ -32,46 +32,6 @@ struct cpu_cacheinfo *get_cpu_cacheinfo(unsigned int cpu)
|
|
}
|
|
}
|
|
|
|
|
|
#ifdef CONFIG_OF
|
|
#ifdef CONFIG_OF
|
|
-static int cache_setup_of_node(unsigned int cpu)
|
|
|
|
-{
|
|
|
|
- struct device_node *np;
|
|
|
|
- struct cacheinfo *this_leaf;
|
|
|
|
- struct device *cpu_dev = get_cpu_device(cpu);
|
|
|
|
- struct cpu_cacheinfo *this_cpu_ci = get_cpu_cacheinfo(cpu);
|
|
|
|
- unsigned int index = 0;
|
|
|
|
-
|
|
|
|
- /* skip if of_node is already populated */
|
|
|
|
- if (this_cpu_ci->info_list->of_node)
|
|
|
|
- return 0;
|
|
|
|
-
|
|
|
|
- if (!cpu_dev) {
|
|
|
|
- pr_err("No cpu device for CPU %d\n", cpu);
|
|
|
|
- return -ENODEV;
|
|
|
|
- }
|
|
|
|
- np = cpu_dev->of_node;
|
|
|
|
- if (!np) {
|
|
|
|
- pr_err("Failed to find cpu%d device node\n", cpu);
|
|
|
|
- return -ENOENT;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- while (index < cache_leaves(cpu)) {
|
|
|
|
- this_leaf = this_cpu_ci->info_list + index;
|
|
|
|
- if (this_leaf->level != 1)
|
|
|
|
- np = of_find_next_cache_node(np);
|
|
|
|
- else
|
|
|
|
- np = of_node_get(np);/* cpu node itself */
|
|
|
|
- if (!np)
|
|
|
|
- break;
|
|
|
|
- this_leaf->of_node = np;
|
|
|
|
- index++;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (index != cache_leaves(cpu)) /* not all OF nodes populated */
|
|
|
|
- return -ENOENT;
|
|
|
|
-
|
|
|
|
- return 0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
static inline bool cache_leaves_are_shared(struct cacheinfo *this_leaf,
|
|
static inline bool cache_leaves_are_shared(struct cacheinfo *this_leaf,
|
|
struct cacheinfo *sib_leaf)
|
|
struct cacheinfo *sib_leaf)
|
|
{
|
|
{
|
|
@@ -202,6 +162,46 @@ static void cache_of_override_properties(unsigned int cpu)
|
|
cache_associativity(this_leaf);
|
|
cache_associativity(this_leaf);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+static int cache_setup_of_node(unsigned int cpu)
|
|
|
|
+{
|
|
|
|
+ struct device_node *np;
|
|
|
|
+ struct cacheinfo *this_leaf;
|
|
|
|
+ struct device *cpu_dev = get_cpu_device(cpu);
|
|
|
|
+ struct cpu_cacheinfo *this_cpu_ci = get_cpu_cacheinfo(cpu);
|
|
|
|
+ unsigned int index = 0;
|
|
|
|
+
|
|
|
|
+ /* skip if of_node is already populated */
|
|
|
|
+ if (this_cpu_ci->info_list->of_node)
|
|
|
|
+ return 0;
|
|
|
|
+
|
|
|
|
+ if (!cpu_dev) {
|
|
|
|
+ pr_err("No cpu device for CPU %d\n", cpu);
|
|
|
|
+ return -ENODEV;
|
|
|
|
+ }
|
|
|
|
+ np = cpu_dev->of_node;
|
|
|
|
+ if (!np) {
|
|
|
|
+ pr_err("Failed to find cpu%d device node\n", cpu);
|
|
|
|
+ return -ENOENT;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ while (index < cache_leaves(cpu)) {
|
|
|
|
+ this_leaf = this_cpu_ci->info_list + index;
|
|
|
|
+ if (this_leaf->level != 1)
|
|
|
|
+ np = of_find_next_cache_node(np);
|
|
|
|
+ else
|
|
|
|
+ np = of_node_get(np);/* cpu node itself */
|
|
|
|
+ if (!np)
|
|
|
|
+ break;
|
|
|
|
+ this_leaf->of_node = np;
|
|
|
|
+ index++;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (index != cache_leaves(cpu)) /* not all OF nodes populated */
|
|
|
|
+ return -ENOENT;
|
|
|
|
+
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
#else
|
|
#else
|
|
static void cache_of_override_properties(unsigned int cpu) { }
|
|
static void cache_of_override_properties(unsigned int cpu) { }
|
|
static inline int cache_setup_of_node(unsigned int cpu) { return 0; }
|
|
static inline int cache_setup_of_node(unsigned int cpu) { return 0; }
|