Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Arm Trusted Firmware
Commits
9509f4f6
Commit
9509f4f6
authored
Dec 14, 2016
by
danh-arm
Committed by
GitHub
Dec 14, 2016
Browse files
Merge pull request #775 from soby-mathew/sm/AArch32_stack_align
AArch32: Fix the stack alignment issue
parents
1b5fa6ef
9f3ee61c
Changes
7
Hide whitespace changes
Inline
Side-by-side
bl32/sp_min/aarch32/entrypoint.S
View file @
9509f4f6
...
...
@@ -168,8 +168,11 @@ func handle_smc
mov
r2
,
r0
/*
handle
*/
ldcopr
r0
,
SCR
/
*
Save
SCR
in
stack
*/
push
{
r0
}
/
*
*
Save
SCR
in
stack
.
r1
is
pushed
to
meet
the
8
byte
*
stack
alignment
requirement
.
*/
push
{
r0
,
r1
}
and
r3
,
r0
,
#
SCR_NS_BIT
/*
flags
*/
/
*
Switch
to
Secure
Mode
*/
...
...
@@ -191,7 +194,7 @@ func handle_smc
/
*
r0
points
to
smc
context
*/
/
*
Restore
SCR
from
stack
*/
pop
{
r1
}
pop
{
r1
,
r2
}
stcopr
r1
,
SCR
isb
...
...
include/lib/aarch32/smcc_helpers.h
View file @
9509f4f6
...
...
@@ -39,6 +39,7 @@
#define SMC_CTX_GPREG_R2 0x8
#define SMC_CTX_GPREG_R3 0xC
#define SMC_CTX_GPREG_R4 0x10
#define SMC_CTX_GPREG_R5 0x14
#define SMC_CTX_SP_USR 0x34
#define SMC_CTX_SPSR_MON 0x78
#define SMC_CTX_LR_MON 0x7C
...
...
include/lib/aarch32/smcc_macros.S
View file @
9509f4f6
...
...
@@ -38,22 +38,22 @@
*
contains
the
pointer
to
the
`
smc_context_t
`
.
*/
.
macro
smcc_save_gp_mode_regs
push
{
r0
-
r
3
,
lr
}
push
{
r0
-
r
4
,
lr
}
ldcopr
r0
,
SCR
and
r0
,
r0
,
#
SCR_NS_BIT
bl
smc_get_ctx
/
*
Save
r
4
-
r12
in
the
SMC
context
*/
add
r1
,
r0
,
#
SMC_CTX_GPREG_R
4
stm
r1
!,
{
r
4
-
r12
}
/
*
Save
r
5
-
r12
in
the
SMC
context
*/
add
r1
,
r0
,
#
SMC_CTX_GPREG_R
5
stm
r1
!,
{
r
5
-
r12
}
/
*
*
Pop
r0
-
r
3
,
lr
to
r4
-
r
7
,
lr
from
stack
and
then
save
*
Pop
r0
-
r
4
,
lr
to
r4
-
r
8
,
lr
from
stack
and
then
save
*
it
to
SMC
context
.
*/
pop
{
r4
-
r
7
,
lr
}
stm
r0
,
{
r4
-
r
7
}
pop
{
r4
-
r
8
,
lr
}
stm
r0
,
{
r4
-
r
8
}
/
*
Save
the
banked
registers
including
the
current
SPSR
and
LR
*/
mrs
r4
,
sp_usr
...
...
lib/cpus/aarch32/cortex_a32.S
View file @
9509f4f6
...
...
@@ -72,7 +72,8 @@ endfunc cortex_a32_reset_func
*
----------------------------------------------------
*/
func
cortex_a32_core_pwr_dwn
push
{
lr
}
/
*
r12
is
pushed
to
meet
the
8
byte
stack
alignment
requirement
*/
push
{
r12
,
lr
}
/
*
Assert
if
cache
is
enabled
*/
#if ASM_ASSERTION
...
...
@@ -92,7 +93,7 @@ func cortex_a32_core_pwr_dwn
*
Come
out
of
intra
cluster
coherency
*
---------------------------------------------
*/
pop
{
lr
}
pop
{
r12
,
lr
}
b
cortex_a32_disable_smp
endfunc
cortex_a32_core_pwr_dwn
...
...
@@ -102,7 +103,8 @@ endfunc cortex_a32_core_pwr_dwn
*
-------------------------------------------------------
*/
func
cortex_a32_cluster_pwr_dwn
push
{
lr
}
/
*
r12
is
pushed
to
meet
the
8
byte
stack
alignment
requirement
*/
push
{
r12
,
lr
}
/
*
Assert
if
cache
is
enabled
*/
#if ASM_ASSERTION
...
...
@@ -135,7 +137,7 @@ func cortex_a32_cluster_pwr_dwn
*
Come
out
of
intra
cluster
coherency
*
---------------------------------------------
*/
pop
{
lr
}
pop
{
r12
,
lr
}
b
cortex_a32_disable_smp
endfunc
cortex_a32_cluster_pwr_dwn
...
...
lib/cpus/aarch32/cpu_helpers.S
View file @
9509f4f6
...
...
@@ -76,9 +76,10 @@ endfunc reset_handler
*/
.
globl
prepare_core_pwr_dwn
func
prepare_core_pwr_dwn
push
{
lr
}
/
*
r12
is
pushed
to
meet
the
8
byte
stack
alignment
requirement
*/
push
{
r12
,
lr
}
bl
_cpu_data
pop
{
lr
}
pop
{
r12
,
lr
}
ldr
r1
,
[
r0
,
#
CPU_DATA_CPU_OPS_PTR
]
#if ASM_ASSERTION
...
...
@@ -98,9 +99,10 @@ endfunc prepare_core_pwr_dwn
*/
.
globl
prepare_cluster_pwr_dwn
func
prepare_cluster_pwr_dwn
push
{
lr
}
/
*
r12
is
pushed
to
meet
the
8
byte
stack
alignment
requirement
*/
push
{
r12
,
lr
}
bl
_cpu_data
pop
{
lr
}
pop
{
r12
,
lr
}
ldr
r1
,
[
r0
,
#
CPU_DATA_CPU_OPS_PTR
]
#if ASM_ASSERTION
...
...
lib/el3_runtime/aarch32/cpu_data.S
View file @
9509f4f6
...
...
@@ -41,9 +41,10 @@
*
-----------------------------------------------------------------
*/
func
_cpu_data
push
{
lr
}
/
*
r12
is
pushed
to
meet
the
8
byte
stack
alignment
requirement
*/
push
{
r12
,
lr
}
bl
plat_my_core_pos
pop
{
lr
}
pop
{
r12
,
lr
}
b
_cpu_data_by_index
endfunc
_cpu_data
...
...
lib/psci/aarch32/psci_helpers.S
View file @
9509f4f6
...
...
@@ -93,7 +93,8 @@ endfunc psci_do_pwrdown_cache_maintenance
*
-----------------------------------------------------------------------
*/
func
psci_do_pwrup_cache_maintenance
push
{
lr
}
/
*
r12
is
pushed
to
meet
the
8
byte
stack
alignment
requirement
*/
push
{
r12
,
lr
}
/
*
---------------------------------------------
*
Ensure
any
inflight
stack
writes
have
made
it
...
...
@@ -123,7 +124,7 @@ func psci_do_pwrup_cache_maintenance
stcopr
r0
,
SCTLR
isb
pop
{
pc
}
pop
{
r12
,
pc
}
endfunc
psci_do_pwrup_cache_maintenance
/
*
---------------------------------------------
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment