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
8067ae3f
Commit
8067ae3f
authored
May 08, 2014
by
danh-arm
Browse files
Merge pull request #61 from athoelke/use-mrs-msr-from-assembler-v2
Use MRS/MSR instructions in assembler code v2
parents
a1ec2f4c
228a9f0b
Changes
11
Hide whitespace changes
Inline
Side-by-side
bl1/aarch64/bl1_entrypoint.S
View file @
8067ae3f
...
...
@@ -97,10 +97,10 @@ _wait_for_entrypoint:
*
their
turn
to
be
woken
up
*
---------------------------------------------
*/
bl
read_
mpidr
mrs
x0
,
mpidr
_el1
bl
platform_get_entrypoint
cbnz
x0
,
_do_warm_boot
bl
read_
mpidr
mrs
x0
,
mpidr
_el1
bl
platform_is_primary_cpu
cbnz
x0
,
_do_cold_boot
...
...
bl1/aarch64/bl1_exceptions.S
View file @
8067ae3f
...
...
@@ -189,7 +189,7 @@ func process_exception
mov
x0
,
#
SYNC_EXCEPTION_AARCH64
bl
plat_report_exception
bl
read_
esr_el3
mrs
x0
,
esr_el3
ubfx
x1
,
x0
,
#
ESR_EC_SHIFT
,
#
ESR_EC_LENGTH
cmp
x1
,
#
EC_AARCH64_SMC
b.ne
panic
...
...
@@ -201,10 +201,8 @@ func process_exception
mov
x2
,
x3
mov
x3
,
x4
bl
display_boot_progress
mov
x0
,
x20
bl
write_elr
mov
x0
,
x21
bl
write_spsr
msr
elr_el3
,
x20
msr
spsr_el3
,
x21
ubfx
x0
,
x21
,
#
MODE_EL_SHIFT
,
#
2
cmp
x0
,
#
MODE_EL3
b.ne
skip_mmu_teardown
...
...
@@ -216,7 +214,7 @@ func process_exception
*
---------------------------------------------
*/
bl
disable_mmu_icache_el3
bl
tlbialle3
tlbi
alle3
skip_mmu_teardown
:
ldp
x6
,
x7
,
[
sp
,
#
0x30
]
ldp
x4
,
x5
,
[
sp
,
#
0x20
]
...
...
bl2/aarch64/bl2_entrypoint.S
View file @
8067ae3f
...
...
@@ -54,8 +54,7 @@ func bl2_entrypoint
*
So
,
make
sure
no
secondary
has
lost
its
way
.
*
---------------------------------------------
*/
bl
read_mpidr
mov
x19
,
x0
mrs
x0
,
mpidr_el1
bl
platform_is_primary_cpu
cbz
x0
,
_panic
...
...
@@ -102,7 +101,7 @@ func bl2_entrypoint
*
ease
the
pain
of
initializing
the
MMU
*
--------------------------------------------
*/
m
ov
x0
,
x19
m
rs
x0
,
mpidr_el1
bl
platform_set_coherent_stack
/
*
---------------------------------------------
...
...
@@ -120,7 +119,7 @@ func bl2_entrypoint
*
-
IS
-
WBWA
memory
*
---------------------------------------------
*/
m
ov
x0
,
x19
m
rs
x0
,
mpidr_el1
bl
platform_set_stack
/
*
---------------------------------------------
...
...
bl31/aarch64/bl31_entrypoint.S
View file @
8067ae3f
...
...
@@ -107,8 +107,7 @@ func bl31_entrypoint
*
So
,
make
sure
no
secondary
has
lost
its
way
.
*
---------------------------------------------
*/
bl
read_mpidr
mov
x19
,
x0
mrs
x0
,
mpidr_el1
bl
platform_is_primary_cpu
cbz
x0
,
_panic
...
...
@@ -137,7 +136,7 @@ func bl31_entrypoint
*
ease
the
pain
of
initializing
the
MMU
*
--------------------------------------------
*/
m
ov
x0
,
x19
m
rs
x0
,
mpidr_el1
bl
platform_set_coherent_stack
/
*
---------------------------------------------
...
...
@@ -154,7 +153,7 @@ func bl31_entrypoint
*
-
IS
-
WBWA
memory
*
---------------------------------------------
*/
m
ov
x0
,
x19
m
rs
x0
,
mpidr_el1
bl
platform_set_stack
/
*
---------------------------------------------
...
...
include/common/asm_macros.S
View file @
8067ae3f
...
...
@@ -58,7 +58,7 @@
.
macro
smc_check
label
bl
read_esr
mrs
x0
,
esr_el3
ubfx
x0
,
x0
,
#
ESR_EC_SHIFT
,
#
ESR_EC_LENGTH
cmp
x0
,
#
EC_AARCH64_SMC
b.ne
$label
...
...
include/lib/aarch64/arch_helpers.h
View file @
8067ae3f
...
...
@@ -194,9 +194,7 @@ extern unsigned long read_ttbr0_el1(void);
extern
unsigned
long
read_ttbr0_el2
(
void
);
extern
unsigned
long
read_ttbr0_el3
(
void
);
extern
unsigned
long
read_ttbr1
(
void
);
extern
unsigned
long
read_ttbr1_el1
(
void
);
extern
unsigned
long
read_ttbr1_el2
(
void
);
extern
unsigned
long
read_cptr_el2
(
void
);
extern
unsigned
long
read_cptr_el3
(
void
);
...
...
@@ -228,12 +226,10 @@ extern void write_esr_el1(unsigned long);
extern
void
write_esr_el2
(
unsigned
long
);
extern
void
write_esr_el3
(
unsigned
long
);
extern
void
write_afsr0
(
unsigned
long
);
extern
void
write_afsr0_el1
(
unsigned
long
);
extern
void
write_afsr0_el2
(
unsigned
long
);
extern
void
write_afsr0_el3
(
unsigned
long
);
extern
void
write_afsr1
(
unsigned
long
);
extern
void
write_afsr1_el1
(
unsigned
long
);
extern
void
write_afsr1_el2
(
unsigned
long
);
extern
void
write_afsr1_el3
(
unsigned
long
);
...
...
@@ -263,7 +259,6 @@ extern void write_ttbr0_el2(unsigned long);
extern
void
write_ttbr0_el3
(
unsigned
long
);
extern
void
write_ttbr1_el1
(
unsigned
long
);
extern
void
write_ttbr1_el2
(
unsigned
long
);
extern
void
write_cpuectlr
(
unsigned
long
);
extern
void
write_cptr_el2
(
unsigned
long
);
...
...
lib/aarch64/cpu_helpers.S
View file @
8067ae3f
...
...
@@ -35,13 +35,11 @@
func
cpu_reset_handler
mov
x19
,
x30
//
lr
/
*
---------------------------------------------
*
As
a
bare
minimal
enable
the
SMP
bit
.
*
---------------------------------------------
*/
bl
read_midr
mrs
x0
,
midr_el1
lsr
x0
,
x0
,
#
MIDR_PN_SHIFT
and
x0
,
x0
,
#
MIDR_PN_MASK
cmp
x0
,
#
MIDR_PN_A57
...
...
@@ -49,9 +47,9 @@ func cpu_reset_handler
cmp
x0
,
#
MIDR_PN_A53
b.ne
smp_setup_end
smp_setup_begin
:
bl
read_cpuectlr
mrs
x0
,
CPUECTLR_EL1
orr
x0
,
x0
,
#
CPUECTLR_SMP_BIT
bl
write_cpuectlr
msr
CPUECTLR_EL1
,
x0
isb
smp_setup_end
:
ret
x19
ret
lib/aarch64/misc_helpers.S
View file @
8067ae3f
...
...
@@ -46,22 +46,18 @@
.
globl
read_daif
.
globl
write_daif
.
globl
read_spsr
.
globl
read_spsr_el1
.
globl
read_spsr_el2
.
globl
read_spsr_el3
.
globl
write_spsr
.
globl
write_spsr_el1
.
globl
write_spsr_el2
.
globl
write_spsr_el3
.
globl
read_elr
.
globl
read_elr_el1
.
globl
read_elr_el2
.
globl
read_elr_el3
.
globl
write_elr
.
globl
write_elr_el1
.
globl
write_elr_el2
.
globl
write_elr_el3
...
...
@@ -153,16 +149,6 @@ func write_daif
ret
func
read_spsr
mrs
x0
,
CurrentEl
cmp
x0
,
#(
MODE_EL1
<<
MODE_EL_SHIFT
)
b.eq
read_spsr_el1
cmp
x0
,
#(
MODE_EL2
<<
MODE_EL_SHIFT
)
b.eq
read_spsr_el2
cmp
x0
,
#(
MODE_EL3
<<
MODE_EL_SHIFT
)
b.eq
read_spsr_el3
func
read_spsr_el1
mrs
x0
,
spsr_el1
ret
...
...
@@ -178,16 +164,6 @@ func read_spsr_el3
ret
func
write_spsr
mrs
x1
,
CurrentEl
cmp
x1
,
#(
MODE_EL1
<<
MODE_EL_SHIFT
)
b.eq
write_spsr_el1
cmp
x1
,
#(
MODE_EL2
<<
MODE_EL_SHIFT
)
b.eq
write_spsr_el2
cmp
x1
,
#(
MODE_EL3
<<
MODE_EL_SHIFT
)
b.eq
write_spsr_el3
func
write_spsr_el1
msr
spsr_el1
,
x0
ret
...
...
@@ -203,16 +179,6 @@ func write_spsr_el3
ret
func
read_elr
mrs
x0
,
CurrentEl
cmp
x0
,
#(
MODE_EL1
<<
MODE_EL_SHIFT
)
b.eq
read_elr_el1
cmp
x0
,
#(
MODE_EL2
<<
MODE_EL_SHIFT
)
b.eq
read_elr_el2
cmp
x0
,
#(
MODE_EL3
<<
MODE_EL_SHIFT
)
b.eq
read_elr_el3
func
read_elr_el1
mrs
x0
,
elr_el1
ret
...
...
@@ -228,16 +194,6 @@ func read_elr_el3
ret
func
write_elr
mrs
x1
,
CurrentEl
cmp
x1
,
#(
MODE_EL1
<<
MODE_EL_SHIFT
)
b.eq
write_elr_el1
cmp
x1
,
#(
MODE_EL2
<<
MODE_EL_SHIFT
)
b.eq
write_elr_el2
cmp
x1
,
#(
MODE_EL3
<<
MODE_EL_SHIFT
)
b.eq
write_elr_el3
func
write_elr_el1
msr
elr_el1
,
x0
ret
...
...
lib/aarch64/sysreg_helpers.S
View file @
8067ae3f
...
...
@@ -125,10 +125,7 @@
.
globl
write_ttbr0_el3
.
globl
read_ttbr1_el1
.
globl
read_ttbr1_el2
.
globl
write_ttbr1
.
globl
write_ttbr1_el1
.
globl
write_ttbr1_el2
.
globl
read_cpacr
.
globl
write_cpacr
...
...
@@ -160,8 +157,6 @@
#if SUPPORT_VFP
.
globl
enable_vfp
.
globl
read_fpexc
.
globl
write_fpexc
#endif
...
...
@@ -577,11 +572,6 @@ func write_tcr_el3
*
CPTR
accessors
*
-----------------------------------------------------
*/
func
read_cptr_el1
b
read_cptr_el1
ret
func
read_cptr_el2
mrs
x0
,
cptr_el2
ret
...
...
@@ -592,10 +582,6 @@ func read_cptr_el3
ret
func
write_cptr_el1
b
write_cptr_el1
func
write_cptr_el2
msr
cptr_el2
,
x0
ret
...
...
@@ -649,27 +635,11 @@ func read_ttbr1_el1
ret
func
read_ttbr1_el2
b
read_ttbr1_el2
func
read_ttbr1_el3
b
read_ttbr1_el3
func
write_ttbr1_el1
msr
ttbr1_el1
,
x0
ret
func
write_ttbr1_el2
b
write_ttbr1_el2
func
write_ttbr1_el3
b
write_ttbr1_el3
func
read_hcr
mrs
x0
,
hcr_el2
ret
...
...
@@ -762,14 +732,4 @@ func enable_vfp
isb
ret
func
read_fpexc
b
read_fpexc
ret
func
write_fpexc
b
write_fpexc
ret
#endif
plat/fvp/aarch64/bl1_plat_helpers.S
View file @
8067ae3f
...
...
@@ -67,7 +67,7 @@ func plat_secondary_cold_boot_setup
*
loader
zeroes
out
the
zi
section
.
*
---------------------------------------------
*/
bl
read_
mpidr
mrs
x0
,
mpidr
_el1
ldr
x1
,
=
PWRC_BASE
str
w0
,
[
x1
,
#
PPOFFR_OFF
]
...
...
@@ -173,8 +173,6 @@ func platform_mem_init
func
platform_cold_boot_init
mov
x20
,
x0
bl
platform_mem_init
bl
read_mpidr
mov
x19
,
x0
/
*
---------------------------------------------
*
Give
ourselves
a
small
coherent
stack
to
...
...
@@ -182,6 +180,7 @@ func platform_cold_boot_init
*
CCI
in
assembler
*
---------------------------------------------
*/
mrs
x0
,
mpidr_el1
bl
platform_set_coherent_stack
/
*
---------------------------------------------
...
...
@@ -200,7 +199,7 @@ func platform_cold_boot_init
*
-
IS
-
WBWA
memory
*
---------------------------------------------
*/
m
ov
x0
,
x19
m
rs
x0
,
mpidr_el1
bl
platform_set_stack
/
*
---------------------------------------------
...
...
services/std_svc/psci/psci_entry.S
View file @
8067ae3f
...
...
@@ -76,8 +76,7 @@ psci_aff_common_finish_entry:
*/
msr
spsel
,
#
0
bl
read_mpidr
mov
x19
,
x0
mrs
x0
,
mpidr_el1
bl
platform_set_coherent_stack
/
*
---------------------------------------------
...
...
@@ -85,14 +84,14 @@ psci_aff_common_finish_entry:
*
level
0
.
*
---------------------------------------------
*/
m
ov
x0
,
x19
m
rs
x0
,
mpidr_el1
bl
get_power_on_target_afflvl
cmp
x0
,
xzr
b.lt
_panic
mov
x3
,
x23
mov
x2
,
x0
mov
x0
,
x19
mov
x1
,
#
MPIDR_AFFLVL0
mrs
x0
,
mpidr_el1
blr
x22
/
*
--------------------------------------------
...
...
@@ -100,7 +99,7 @@ psci_aff_common_finish_entry:
*
-
IS
-
WBWA
memory
*
--------------------------------------------
*/
m
ov
x0
,
x19
m
rs
x0
,
mpidr_el1
bl
platform_set_stack
zero_callee_saved_regs
...
...
@@ -119,7 +118,7 @@ func __psci_cpu_off
sub
sp
,
sp
,
#
0x10
stp
x19
,
x20
,
[
sp
,
#
0
]
mov
x19
,
sp
bl
read_
mpidr
mrs
x0
,
mpidr
_el1
bl
platform_set_coherent_stack
bl
psci_cpu_off
mov
x1
,
#
PSCI_E_SUCCESS
...
...
@@ -140,7 +139,7 @@ func __psci_cpu_suspend
mov
x20
,
x0
mov
x21
,
x1
mov
x22
,
x2
bl
read_
mpidr
mrs
x0
,
mpidr
_el1
bl
platform_set_coherent_stack
mov
x0
,
x20
mov
x1
,
x21
...
...
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