Lines Matching +full:cache +full:- +full:level

1 // SPDX-License-Identifier: GPL-2.0-only
22 if (rv_cache_ops && rv_cache_ops->get_priv_group) in cache_get_priv_group()
23 return rv_cache_ops->get_priv_group(this_leaf); in cache_get_priv_group()
27 static struct cacheinfo *get_cacheinfo(u32 level, enum cache_type type) in get_cacheinfo() argument
33 for (index = 0; index < this_cpu_ci->num_leaves; index++) { in get_cacheinfo()
34 this_leaf = this_cpu_ci->info_list + index; in get_cacheinfo()
35 if (this_leaf->level == level && this_leaf->type == type) in get_cacheinfo()
42 uintptr_t get_cache_size(u32 level, enum cache_type type) in get_cache_size() argument
44 struct cacheinfo *this_leaf = get_cacheinfo(level, type); in get_cache_size()
46 return this_leaf ? this_leaf->size : 0; in get_cache_size()
49 uintptr_t get_cache_geometry(u32 level, enum cache_type type) in get_cache_geometry() argument
51 struct cacheinfo *this_leaf = get_cacheinfo(level, type); in get_cache_geometry()
53 return this_leaf ? (this_leaf->ways_of_associativity << 16 | in get_cache_geometry()
54 this_leaf->coherency_line_size) : in get_cache_geometry()
59 unsigned int level, unsigned int size, in ci_leaf_init() argument
62 this_leaf->level = level; in ci_leaf_init()
63 this_leaf->type = type; in ci_leaf_init()
64 this_leaf->size = size; in ci_leaf_init()
65 this_leaf->number_of_sets = sets; in ci_leaf_init()
66 this_leaf->coherency_line_size = line_size; in ci_leaf_init()
69 * If the cache is fully associative, there is no need to in ci_leaf_init()
76 * Set the ways number for n-ways associative, make sure in ci_leaf_init()
80 this_leaf->ways_of_associativity = (size / sets) / line_size; in ci_leaf_init()
84 struct device_node *node, unsigned int level) in fill_cacheinfo() argument
88 if (!of_property_read_u32(node, "cache-size", &size) && in fill_cacheinfo()
89 !of_property_read_u32(node, "cache-block-size", &line_size) && in fill_cacheinfo()
90 !of_property_read_u32(node, "cache-sets", &sets)) { in fill_cacheinfo()
91 ci_leaf_init((*this_leaf)++, CACHE_TYPE_UNIFIED, level, size, sets, line_size); in fill_cacheinfo()
94 if (!of_property_read_u32(node, "i-cache-size", &size) && in fill_cacheinfo()
95 !of_property_read_u32(node, "i-cache-sets", &sets) && in fill_cacheinfo()
96 !of_property_read_u32(node, "i-cache-block-size", &line_size)) { in fill_cacheinfo()
97 ci_leaf_init((*this_leaf)++, CACHE_TYPE_INST, level, size, sets, line_size); in fill_cacheinfo()
100 if (!of_property_read_u32(node, "d-cache-size", &size) && in fill_cacheinfo()
101 !of_property_read_u32(node, "d-cache-sets", &sets) && in fill_cacheinfo()
102 !of_property_read_u32(node, "d-cache-block-size", &line_size)) { in fill_cacheinfo()
103 ci_leaf_init((*this_leaf)++, CACHE_TYPE_DATA, level, size, sets, line_size); in fill_cacheinfo()
112 int levels = 0, leaves = 0, level; in __init_cache_level() local
114 if (of_property_read_bool(np, "cache-size")) in __init_cache_level()
116 if (of_property_read_bool(np, "i-cache-size")) in __init_cache_level()
118 if (of_property_read_bool(np, "d-cache-size")) in __init_cache_level()
127 if (!of_device_is_compatible(np, "cache")) in __init_cache_level()
129 if (of_property_read_u32(np, "cache-level", &level)) in __init_cache_level()
131 if (level <= levels) in __init_cache_level()
133 if (of_property_read_bool(np, "cache-size")) in __init_cache_level()
135 if (of_property_read_bool(np, "i-cache-size")) in __init_cache_level()
137 if (of_property_read_bool(np, "d-cache-size")) in __init_cache_level()
139 levels = level; in __init_cache_level()
143 this_cpu_ci->num_levels = levels; in __init_cache_level()
144 this_cpu_ci->num_leaves = leaves; in __init_cache_level()
152 struct cacheinfo *this_leaf = this_cpu_ci->info_list; in __populate_cache_leaves()
155 int levels = 1, level = 1; in __populate_cache_leaves() local
157 /* Level 1 caches in cpu node */ in __populate_cache_leaves()
158 fill_cacheinfo(&this_leaf, np, level); in __populate_cache_leaves()
160 /* Next level caches in cache nodes */ in __populate_cache_leaves()
166 if (!of_device_is_compatible(np, "cache")) in __populate_cache_leaves()
168 if (of_property_read_u32(np, "cache-level", &level)) in __populate_cache_leaves()
170 if (level <= levels) in __populate_cache_leaves()
173 fill_cacheinfo(&this_leaf, np, level); in __populate_cache_leaves()
175 levels = level; in __populate_cache_leaves()