summaryrefslogtreecommitdiffstats
path: root/bsps/arm/shared
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2018-12-21 11:57:26 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2018-12-21 11:57:49 +0100
commitc37807e97ca8371e90be41b24c8801800c591cc3 (patch)
tree5c0bf91a3840f219f5fd290a8c57de45409267c9 /bsps/arm/shared
parentbsps/arm: Add ARMv7-AR disable data cache (diff)
downloadrtems-c37807e97ca8371e90be41b24c8801800c591cc3.tar.bz2
bsps/arm: Add cache size support for CP15
Diffstat (limited to 'bsps/arm/shared')
-rw-r--r--bsps/arm/shared/cache/cache-cp15.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/bsps/arm/shared/cache/cache-cp15.c b/bsps/arm/shared/cache/cache-cp15.c
index 148d78d1fe..cdce02425f 100644
--- a/bsps/arm/shared/cache/cache-cp15.c
+++ b/bsps/arm/shared/cache/cache-cp15.c
@@ -29,6 +29,8 @@
#define CPU_CACHE_SUPPORT_PROVIDES_RANGE_FUNCTIONS
+#define CPU_CACHE_SUPPORT_PROVIDES_CACHE_SIZE_FUNCTIONS
+
#if __ARM_ARCH >= 7 && (__ARM_ARCH_PROFILE == 65 || __ARM_ARCH_PROFILE == 82)
#define CPU_CACHE_SUPPORT_PROVIDES_DISABLE_DATA
#endif
@@ -180,4 +182,43 @@ static inline void _CPU_cache_disable_instruction(void)
rtems_interrupt_local_enable(level);
}
+static inline size_t arm_cp15_get_cache_size(
+ uint32_t level,
+ uint32_t which
+)
+{
+ uint32_t clidr;
+ uint32_t loc;
+ uint32_t ccsidr;
+
+ clidr = arm_cp15_get_cache_level_id();
+ loc = arm_clidr_get_level_of_coherency(clidr);
+
+ if (level >= loc) {
+ return 0;
+ }
+
+ if (level == 0) {
+ level = loc - 1;
+ }
+
+ ccsidr = arm_cp15_get_cache_size_id_for_level(
+ ARM_CP15_CACHE_CSS_LEVEL(level) | which
+ );
+
+ return (1U << arm_ccsidr_get_line_power(ccsidr))
+ * arm_ccsidr_get_associativity(ccsidr)
+ * arm_ccsidr_get_num_sets(ccsidr);
+}
+
+static inline size_t _CPU_cache_get_data_cache_size(uint32_t level)
+{
+ return arm_cp15_get_cache_size(level, ARM_CP15_CACHE_CSS_ID_DATA);
+}
+
+static inline size_t _CPU_cache_get_instruction_cache_size(uint32_t level)
+{
+ return arm_cp15_get_cache_size(level, ARM_CP15_CACHE_CSS_ID_INSTRUCTION);
+}
+
#include "../../shared/cache/cacheimpl.h"