AArch32: Fix SCTLR context initialization
This patch fixes a bug in context management library when writing SCTLR register during context initialization. The write happened prior to initialization of the register context pointer. This resulted in the compiler optimizing the write sequence from the final binary and hence SCTLR remains uninitialized when entering normal world. The bug is fixed by doing the initialization of the register context pointer earlier in the sequence. Change-Id: Ic7465593a74534046b79f40446ffa1165c52ed76
This commit is contained in:
parent
51c79b7351
commit
9e3b4cbbad
|
@ -86,6 +86,8 @@ static void cm_init_context_common(cpu_context_t *ctx, const entry_point_info_t
|
|||
/* Clear any residual register values from the context */
|
||||
memset(ctx, 0, sizeof(*ctx));
|
||||
|
||||
reg_ctx = get_regs_ctx(ctx);
|
||||
|
||||
/*
|
||||
* Base the context SCR on the current value, adjust for entry point
|
||||
* specific requirements
|
||||
|
@ -121,8 +123,6 @@ static void cm_init_context_common(cpu_context_t *ctx, const entry_point_info_t
|
|||
if (GET_M32(ep->spsr) == MODE32_hyp)
|
||||
scr |= SCR_HCE_BIT;
|
||||
|
||||
reg_ctx = get_regs_ctx(ctx);
|
||||
|
||||
write_ctx_reg(reg_ctx, CTX_SCR, scr);
|
||||
write_ctx_reg(reg_ctx, CTX_LR, ep->pc);
|
||||
write_ctx_reg(reg_ctx, CTX_SPSR, ep->spsr);
|
||||
|
|
Loading…
Reference in New Issue