diff options
author | davidcunado-arm <david.cunado@arm.com> | 2017-09-07 00:40:59 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-07 00:40:59 +0100 |
commit | 413115e1529a2c2211bac5d3cd1249070e0a8a88 (patch) | |
tree | 552cd80dbdf682f4b17af3c1703db733a48480fb /include | |
parent | e524d78f9fc904b0e831855145320384e9656a46 (diff) | |
parent | 86606eb51e81b4189579e2b429f1c8f26f5c804c (diff) |
Merge pull request #1019 from etienne-lms/log-size
CPU_DATA_LOG2SIZE depends on cache line size
Diffstat (limited to 'include')
-rw-r--r-- | include/common/aarch32/asm_macros.S | 13 | ||||
-rw-r--r-- | include/lib/el3_runtime/cpu_data.h | 15 |
2 files changed, 24 insertions, 4 deletions
diff --git a/include/common/aarch32/asm_macros.S b/include/common/aarch32/asm_macros.S index 3adcbf51..f5737449 100644 --- a/include/common/aarch32/asm_macros.S +++ b/include/common/aarch32/asm_macros.S @@ -80,6 +80,19 @@ .endm /* + * Helper macro to generate the best mov/movw/movt combinations + * according to the value to be moved. + */ + .macro mov_imm _reg, _val + .if ((\_val) & 0xffff0000) == 0 + mov \_reg, #(\_val) + .else + movw \_reg, #((\_val) & 0xffff) + movt \_reg, #((\_val) >> 16) + .endif + .endm + + /* * Macro to mark instances where we're jumping to a function and don't * expect a return. To provide the function being jumped to with * additional information, we use 'bl' instruction to jump rather than diff --git a/include/lib/el3_runtime/cpu_data.h b/include/lib/el3_runtime/cpu_data.h index 1e8bfa7e..c0c3a199 100644 --- a/include/lib/el3_runtime/cpu_data.h +++ b/include/lib/el3_runtime/cpu_data.h @@ -7,12 +7,15 @@ #ifndef __CPU_DATA_H__ #define __CPU_DATA_H__ +#include <platform_def.h> /* CACHE_WRITEBACK_GRANULE required */ + #ifdef AARCH32 #if CRASH_REPORTING #error "Crash reporting is not supported in AArch32" #endif #define CPU_DATA_CPU_OPS_PTR 0x0 +#define CPU_DATA_CRASH_BUF_OFFSET 0x4 #else /* AARCH32 */ @@ -25,14 +28,18 @@ #endif /* AARCH32 */ #if CRASH_REPORTING -#define CPU_DATA_LOG2SIZE 7 #define CPU_DATA_CRASH_BUF_END (CPU_DATA_CRASH_BUF_OFFSET + \ CPU_DATA_CRASH_BUF_SIZE) #else -#define CPU_DATA_LOG2SIZE 6 #define CPU_DATA_CRASH_BUF_END CPU_DATA_CRASH_BUF_OFFSET #endif +/* cpu_data size is the data size rounded up to the platform cache line size */ +#define CPU_DATA_SIZE (((CPU_DATA_CRASH_BUF_END + \ + CACHE_WRITEBACK_GRANULE - 1) / \ + CACHE_WRITEBACK_GRANULE) * \ + CACHE_WRITEBACK_GRANULE) + #if ENABLE_RUNTIME_INSTRUMENTATION /* Temporary space to store PMF timestamps from assembly code */ #define CPU_DATA_PMF_TS_COUNT 1 @@ -98,8 +105,8 @@ CASSERT(CPU_DATA_CRASH_BUF_OFFSET == __builtin_offsetof assert_cpu_data_crash_stack_offset_mismatch); #endif -CASSERT((1 << CPU_DATA_LOG2SIZE) == sizeof(cpu_data_t), - assert_cpu_data_log2size_mismatch); +CASSERT(CPU_DATA_SIZE == sizeof(cpu_data_t), + assert_cpu_data_size_mismatch); CASSERT(CPU_DATA_CPU_OPS_PTR == __builtin_offsetof (cpu_data_t, cpu_ops_ptr), |