Commit 663db206 authored by Soby Mathew's avatar Soby Mathew
Browse files

Derive stack alignment from CACHE_WRITEBACK_GRANULE

The per-cpu stacks should be aligned to the cache-line size and
the `declare_stack` helper in asm_macros.S macro assumed a
cache-line size of 64 bytes. The platform defines the cache-line
size via CACHE_WRITEBACK_GRANULE macro. This patch modifies
`declare_stack` helper macro to derive stack alignment from the
platform defined macro.

Change-Id: I1e1b00fc8806ecc88190ed169f4c8d3dd25fe95b
parent 6f511c47
...@@ -147,18 +147,34 @@ ...@@ -147,18 +147,34 @@
.endm .endm
#endif #endif
/*
* Helper assembler macro to count trailing zeros. The output is
* populated in the `TZ_COUNT` symbol.
*/
.macro count_tz _value, _tz_count
.if \_value
count_tz "(\_value >> 1)", "(\_tz_count + 1)"
.else
.equ TZ_COUNT, (\_tz_count - 1)
.endif
.endm
/* /*
* This macro declares an array of 1 or more stacks, properly * This macro declares an array of 1 or more stacks, properly
* aligned and in the requested section * aligned and in the requested section
*/ */
#define STACK_ALIGN 6 #define DEFAULT_STACK_ALIGN (1 << 6) /* In case the caller doesnt provide alignment */
.macro declare_stack _name, _section, _size, _count .macro declare_stack _name, _section, _size, _count, _align=DEFAULT_STACK_ALIGN
.if ((\_size & ((1 << STACK_ALIGN) - 1)) <> 0) count_tz \_align, 0
.if (\_align - (1 << TZ_COUNT))
.error "Incorrect stack alignment specified (Must be a power of 2)."
.endif
.if ((\_size & ((1 << TZ_COUNT) - 1)) <> 0)
.error "Stack size not correctly aligned" .error "Stack size not correctly aligned"
.endif .endif
.section \_section, "aw", %nobits .section \_section, "aw", %nobits
.align STACK_ALIGN .align TZ_COUNT
\_name: \_name:
.space ((\_count) * (\_size)), 0 .space ((\_count) * (\_size)), 0
.endm .endm
......
...@@ -193,4 +193,5 @@ endfunc plat_set_my_stack ...@@ -193,4 +193,5 @@ endfunc plat_set_my_stack
* ----------------------------------------------------- * -----------------------------------------------------
*/ */
declare_stack platform_normal_stacks, tzfw_normal_stacks, \ declare_stack platform_normal_stacks, tzfw_normal_stacks, \
PLATFORM_STACK_SIZE, PLATFORM_CORE_COUNT PLATFORM_STACK_SIZE, PLATFORM_CORE_COUNT, \
CACHE_WRITEBACK_GRANULE
...@@ -99,4 +99,4 @@ endfunc_deprecated platform_set_stack ...@@ -99,4 +99,4 @@ endfunc_deprecated platform_set_stack
* ----------------------------------------------------- * -----------------------------------------------------
*/ */
declare_stack platform_normal_stacks, tzfw_normal_stacks, \ declare_stack platform_normal_stacks, tzfw_normal_stacks, \
PLATFORM_STACK_SIZE, 1 PLATFORM_STACK_SIZE, 1, CACHE_WRITEBACK_GRANULE
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment