Signed-off-by: Alexandru Elisei <alexandru.elisei@xxxxxxx>
---
arm/cstart.S | 6 ++++++
arm/cstart64.S | 3 +++
lib/arm/processor.c | 1 -
lib/arm64/processor.c | 1 -
4 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/arm/cstart.S b/arm/cstart.S
index 39260e0fa470..39e70f40986a 100644
--- a/arm/cstart.S
+++ b/arm/cstart.S
@@ -151,7 +151,13 @@ secondary_entry:
*/
ldr r1, =secondary_data
ldr r0, [r1]
+ mov r2, r0
+ lsr r2, #THREAD_SHIFT
+ lsl r2, #THREAD_SHIFT
+ add r3, r2, #THREAD_SIZE
+ zero_range r2, r3, r4, r5
mov sp, r0
+
bl exceptions_init
bl enable_vfp
diff --git a/arm/cstart64.S b/arm/cstart64.S
index d62360cf3859..54773676d1d5 100644
--- a/arm/cstart64.S
+++ b/arm/cstart64.S
@@ -156,6 +156,9 @@ secondary_entry:
/* set the stack */
adrp x0, secondary_data
ldr x0, [x0, :lo12:secondary_data]
+ and x1, x0, #THREAD_MASK
+ add x2, x1, #THREAD_SIZE
+ zero_range x1, x2
mov sp, x0
/* finish init in C code */
diff --git a/lib/arm/processor.c b/lib/arm/processor.c
index 9d5759686b73..ceff1c0a1bd2 100644
--- a/lib/arm/processor.c
+++ b/lib/arm/processor.c
@@ -117,7 +117,6 @@ void do_handle_exception(enum vector v, struct pt_regs *regs)
void thread_info_init(struct thread_info *ti, unsigned int flags)
{
- memset(ti, 0, sizeof(struct thread_info));
ti->cpu = mpidr_to_cpu(get_mpidr());
ti->flags = flags;
}
diff --git a/lib/arm64/processor.c b/lib/arm64/processor.c
index 831207c16587..268b2858f0be 100644
--- a/lib/arm64/processor.c
+++ b/lib/arm64/processor.c
@@ -232,7 +232,6 @@ void install_vector_handler(enum vector v, vector_fn fn)
static void __thread_info_init(struct thread_info *ti, unsigned int flags)
{
- memset(ti, 0, sizeof(struct thread_info));
ti->cpu = mpidr_to_cpu(get_mpidr());
ti->flags = flags;
}