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
6de8b24f
Commit
6de8b24f
authored
Jun 16, 2017
by
davidcunado-arm
Committed by
GitHub
Jun 16, 2017
Browse files
Merge pull request #953 from vwadekar/tegra-misra-fixes-v1
Tegra misra fixes v1
parents
0dc3c353
ab712fd8
Changes
61
Hide whitespace changes
Inline
Side-by-side
lib/cpus/aarch32/cortex_a53.S
View file @
6de8b24f
...
@@ -15,9 +15,9 @@
...
@@ -15,9 +15,9 @@
*
---------------------------------------------
*
---------------------------------------------
*/
*/
func
cortex_a53_disable_smp
func
cortex_a53_disable_smp
ldcopr16
r0
,
r1
,
C
PU
ECTLR
ldcopr16
r0
,
r1
,
C
ORTEX_A53_
ECTLR
bic64_imm
r0
,
r1
,
C
PU
ECTLR_SMP_BIT
bic64_imm
r0
,
r1
,
C
ORTEX_A53_
ECTLR_SMP_BIT
stcopr16
r0
,
r1
,
C
PU
ECTLR
stcopr16
r0
,
r1
,
C
ORTEX_A53_
ECTLR
isb
isb
dsb
sy
dsb
sy
bx
lr
bx
lr
...
@@ -32,9 +32,9 @@ func cortex_a53_reset_func
...
@@ -32,9 +32,9 @@ func cortex_a53_reset_func
*
Enable
the
SMP
bit
.
*
Enable
the
SMP
bit
.
*
---------------------------------------------
*
---------------------------------------------
*/
*/
ldcopr16
r0
,
r1
,
C
PU
ECTLR
ldcopr16
r0
,
r1
,
C
ORTEX_A53_
ECTLR
orr64_imm
r0
,
r1
,
C
PU
ECTLR_SMP_BIT
orr64_imm
r0
,
r1
,
C
ORTEX_A53_
ECTLR_SMP_BIT
stcopr16
r0
,
r1
,
C
PU
ECTLR
stcopr16
r0
,
r1
,
C
ORTEX_A53_
ECTLR
isb
isb
bx
lr
bx
lr
endfunc
cortex_a53_reset_func
endfunc
cortex_a53_reset_func
...
...
lib/cpus/aarch32/cortex_a57.S
View file @
6de8b24f
...
@@ -16,9 +16,9 @@
...
@@ -16,9 +16,9 @@
*
---------------------------------------------
*
---------------------------------------------
*/
*/
func
cortex_a57_disable_smp
func
cortex_a57_disable_smp
ldcopr16
r0
,
r1
,
C
PU
ECTLR
ldcopr16
r0
,
r1
,
C
ORTEX_A57_
ECTLR
bic64_imm
r0
,
r1
,
C
PU
ECTLR_SMP_BIT
bic64_imm
r0
,
r1
,
C
ORTEX_A57_
ECTLR_SMP_BIT
stcopr16
r0
,
r1
,
C
PU
ECTLR
stcopr16
r0
,
r1
,
C
ORTEX_A57_
ECTLR
bx
lr
bx
lr
endfunc
cortex_a57_disable_smp
endfunc
cortex_a57_disable_smp
...
@@ -28,11 +28,11 @@ endfunc cortex_a57_disable_smp
...
@@ -28,11 +28,11 @@ endfunc cortex_a57_disable_smp
*
---------------------------------------------
*
---------------------------------------------
*/
*/
func
cortex_a57_disable_l2_prefetch
func
cortex_a57_disable_l2_prefetch
ldcopr16
r0
,
r1
,
C
PU
ECTLR
ldcopr16
r0
,
r1
,
C
ORTEX_A57_
ECTLR
orr64_imm
r0
,
r1
,
C
PU
ECTLR_DIS_TWD_ACC_PFTCH_BIT
orr64_imm
r0
,
r1
,
C
ORTEX_A57_
ECTLR_DIS_TWD_ACC_PFTCH_BIT
bic64_imm
r0
,
r1
,
(
C
PU
ECTLR_L2_IPFTCH_DIST_MASK
|
\
bic64_imm
r0
,
r1
,
(
C
ORTEX_A57_
ECTLR_L2_IPFTCH_DIST_MASK
|
\
CPU
ECTLR_L2_DPFTCH_DIST_MASK
)
CORTEX_A57_
ECTLR_L2_DPFTCH_DIST_MASK
)
stcopr16
r0
,
r1
,
C
PU
ECTLR
stcopr16
r0
,
r1
,
C
ORTEX_A57_
ECTLR
isb
isb
dsb
ish
dsb
ish
bx
lr
bx
lr
...
@@ -59,9 +59,9 @@ func cortex_a57_reset_func
...
@@ -59,9 +59,9 @@ func cortex_a57_reset_func
*
Enable
the
SMP
bit
.
*
Enable
the
SMP
bit
.
*
---------------------------------------------
*
---------------------------------------------
*/
*/
ldcopr16
r0
,
r1
,
C
PU
ECTLR
ldcopr16
r0
,
r1
,
C
ORTEX_A57_
ECTLR
orr64_imm
r0
,
r1
,
C
PU
ECTLR_SMP_BIT
orr64_imm
r0
,
r1
,
C
ORTEX_A57_
ECTLR_SMP_BIT
stcopr16
r0
,
r1
,
C
PU
ECTLR
stcopr16
r0
,
r1
,
C
ORTEX_A57_
ECTLR
isb
isb
bx
lr
bx
lr
endfunc
cortex_a57_reset_func
endfunc
cortex_a57_reset_func
...
...
lib/cpus/aarch32/cortex_a72.S
View file @
6de8b24f
...
@@ -15,11 +15,11 @@
...
@@ -15,11 +15,11 @@
*
---------------------------------------------
*
---------------------------------------------
*/
*/
func
cortex_a72_disable_l2_prefetch
func
cortex_a72_disable_l2_prefetch
ldcopr16
r0
,
r1
,
C
PU
ECTLR
ldcopr16
r0
,
r1
,
C
ORTEX_A72_
ECTLR
orr64_imm
r0
,
r1
,
C
PU
ECTLR_DIS_TWD_ACC_PFTCH_BIT
orr64_imm
r0
,
r1
,
C
ORTEX_A72_
ECTLR_DIS_TWD_ACC_PFTCH_BIT
bic64_imm
r0
,
r1
,
(
C
PU
ECTLR_L2_IPFTCH_DIST_MASK
|
\
bic64_imm
r0
,
r1
,
(
C
ORTEX_A72_
ECTLR_L2_IPFTCH_DIST_MASK
|
\
C
PU
ECTLR_L2_DPFTCH_DIST_MASK
)
C
ORTEX_A72_
ECTLR_L2_DPFTCH_DIST_MASK
)
stcopr16
r0
,
r1
,
C
PU
ECTLR
stcopr16
r0
,
r1
,
C
ORTEX_A72_
ECTLR
isb
isb
bx
lr
bx
lr
endfunc
cortex_a72_disable_l2_prefetch
endfunc
cortex_a72_disable_l2_prefetch
...
@@ -29,9 +29,9 @@ endfunc cortex_a72_disable_l2_prefetch
...
@@ -29,9 +29,9 @@ endfunc cortex_a72_disable_l2_prefetch
*
---------------------------------------------
*
---------------------------------------------
*/
*/
func
cortex_a72_disable_hw_prefetcher
func
cortex_a72_disable_hw_prefetcher
ldcopr16
r0
,
r1
,
C
PU
ACTLR
ldcopr16
r0
,
r1
,
C
ORTEX_A72_
ACTLR
orr64_imm
r0
,
r1
,
C
PU
ACTLR_DISABLE_L1_DCACHE_HW_PFTCH
orr64_imm
r0
,
r1
,
C
ORTEX_A72_
ACTLR_DISABLE_L1_DCACHE_HW_PFTCH
stcopr16
r0
,
r1
,
C
PU
ACTLR
stcopr16
r0
,
r1
,
C
ORTEX_A72_
ACTLR
isb
isb
dsb
ish
dsb
ish
bx
lr
bx
lr
...
@@ -43,9 +43,9 @@ endfunc cortex_a72_disable_hw_prefetcher
...
@@ -43,9 +43,9 @@ endfunc cortex_a72_disable_hw_prefetcher
*
---------------------------------------------
*
---------------------------------------------
*/
*/
func
cortex_a72_disable_smp
func
cortex_a72_disable_smp
ldcopr16
r0
,
r1
,
C
PU
ECTLR
ldcopr16
r0
,
r1
,
C
ORTEX_A72_
ECTLR
bic64_imm
r0
,
r1
,
C
PU
ECTLR_SMP_BIT
bic64_imm
r0
,
r1
,
C
ORTEX_A72_
ECTLR_SMP_BIT
stcopr16
r0
,
r1
,
C
PU
ECTLR
stcopr16
r0
,
r1
,
C
ORTEX_A72_
ECTLR
bx
lr
bx
lr
endfunc
cortex_a72_disable_smp
endfunc
cortex_a72_disable_smp
...
@@ -70,9 +70,9 @@ func cortex_a72_reset_func
...
@@ -70,9 +70,9 @@ func cortex_a72_reset_func
*
Enable
the
SMP
bit
.
*
Enable
the
SMP
bit
.
*
---------------------------------------------
*
---------------------------------------------
*/
*/
ldcopr16
r0
,
r1
,
C
PU
ECTLR
ldcopr16
r0
,
r1
,
C
ORTEX_A72_
ECTLR
orr64_imm
r0
,
r1
,
C
PU
ECTLR_SMP_BIT
orr64_imm
r0
,
r1
,
C
ORTEX_A72_
ECTLR_SMP_BIT
stcopr16
r0
,
r1
,
C
PU
ECTLR
stcopr16
r0
,
r1
,
C
ORTEX_A72_
ECTLR
isb
isb
bx
lr
bx
lr
endfunc
cortex_a72_reset_func
endfunc
cortex_a72_reset_func
...
...
lib/cpus/aarch64/cortex_a53.S
View file @
6de8b24f
...
@@ -33,9 +33,9 @@ endfunc cortex_a53_disable_dcache
...
@@ -33,9 +33,9 @@ endfunc cortex_a53_disable_dcache
*
---------------------------------------------
*
---------------------------------------------
*/
*/
func
cortex_a53_disable_smp
func
cortex_a53_disable_smp
mrs
x0
,
C
PU
ECTLR_EL1
mrs
x0
,
C
ORTEX_A53_
ECTLR_EL1
bic
x0
,
x0
,
#
C
PU
ECTLR_SMP_BIT
bic
x0
,
x0
,
#
C
ORTEX_A53_
ECTLR_SMP_BIT
msr
C
PU
ECTLR_EL1
,
x0
msr
C
ORTEX_A53_
ECTLR_EL1
,
x0
isb
isb
dsb
sy
dsb
sy
ret
ret
...
@@ -56,10 +56,10 @@ func errata_a53_826319_wa
...
@@ -56,10 +56,10 @@ func errata_a53_826319_wa
mov
x17
,
x30
mov
x17
,
x30
bl
check_errata_826319
bl
check_errata_826319
cbz
x0
,
1
f
cbz
x0
,
1
f
mrs
x1
,
L2ACTLR_EL1
mrs
x1
,
CORTEX_A53_
L2ACTLR_EL1
bic
x1
,
x1
,
#
L2ACTLR_ENABLE_UNIQUECLEAN
bic
x1
,
x1
,
#
CORTEX_A53_
L2ACTLR_ENABLE_UNIQUECLEAN
orr
x1
,
x1
,
#
L2ACTLR_DISABLE_CLEAN_PUSH
orr
x1
,
x1
,
#
CORTEX_A53_
L2ACTLR_DISABLE_CLEAN_PUSH
msr
L2ACTLR_EL1
,
x1
msr
CORTEX_A53_
L2ACTLR_EL1
,
x1
1
:
1
:
ret
x17
ret
x17
endfunc
errata_a53_826319_wa
endfunc
errata_a53_826319_wa
...
@@ -93,9 +93,9 @@ func a53_disable_non_temporal_hint
...
@@ -93,9 +93,9 @@ func a53_disable_non_temporal_hint
mov
x17
,
x30
mov
x17
,
x30
bl
check_errata_disable_non_temporal_hint
bl
check_errata_disable_non_temporal_hint
cbz
x0
,
1
f
cbz
x0
,
1
f
mrs
x1
,
C
PU
ACTLR_EL1
mrs
x1
,
C
ORTEX_A53_
ACTLR_EL1
orr
x1
,
x1
,
#
C
PU
ACTLR_DTAH
orr
x1
,
x1
,
#
C
ORTEX_A53_
ACTLR_DTAH
msr
C
PU
ACTLR_EL1
,
x1
msr
C
ORTEX_A53_
ACTLR_EL1
,
x1
1
:
1
:
ret
x17
ret
x17
endfunc
a53_disable_non_temporal_hint
endfunc
a53_disable_non_temporal_hint
...
@@ -126,9 +126,9 @@ func errata_a53_855873_wa
...
@@ -126,9 +126,9 @@ func errata_a53_855873_wa
bl
check_errata_855873
bl
check_errata_855873
cbz
x0
,
1
f
cbz
x0
,
1
f
mrs
x1
,
C
PU
ACTLR_EL1
mrs
x1
,
C
ORTEX_A53_
ACTLR_EL1
orr
x1
,
x1
,
#
C
PU
ACTLR_ENDCCASCI
orr
x1
,
x1
,
#
C
ORTEX_A53_
ACTLR_ENDCCASCI
msr
C
PU
ACTLR_EL1
,
x1
msr
C
ORTEX_A53_
ACTLR_EL1
,
x1
1
:
1
:
ret
x17
ret
x17
endfunc
errata_a53_855873_wa
endfunc
errata_a53_855873_wa
...
@@ -168,9 +168,9 @@ func cortex_a53_reset_func
...
@@ -168,9 +168,9 @@ func cortex_a53_reset_func
*
Enable
the
SMP
bit
.
*
Enable
the
SMP
bit
.
*
---------------------------------------------
*
---------------------------------------------
*/
*/
mrs
x0
,
C
PU
ECTLR_EL1
mrs
x0
,
C
ORTEX_A53_
ECTLR_EL1
orr
x0
,
x0
,
#
C
PU
ECTLR_SMP_BIT
orr
x0
,
x0
,
#
C
ORTEX_A53_
ECTLR_SMP_BIT
msr
C
PU
ECTLR_EL1
,
x0
msr
C
ORTEX_A53_
ECTLR_EL1
,
x0
isb
isb
ret
x19
ret
x19
endfunc
cortex_a53_reset_func
endfunc
cortex_a53_reset_func
...
@@ -275,10 +275,10 @@ cortex_a53_regs: /* The ascii list of register names to be reported */
...
@@ -275,10 +275,10 @@ cortex_a53_regs: /* The ascii list of register names to be reported */
func
cortex_a53_cpu_reg_dump
func
cortex_a53_cpu_reg_dump
adr
x6
,
cortex_a53_regs
adr
x6
,
cortex_a53_regs
mrs
x8
,
C
PU
ECTLR_EL1
mrs
x8
,
C
ORTEX_A53_
ECTLR_EL1
mrs
x9
,
C
PU
MERRSR_EL1
mrs
x9
,
C
ORTEX_A53_
MERRSR_EL1
mrs
x10
,
L2MERRSR_EL1
mrs
x10
,
CORTEX_A53_
L2MERRSR_EL1
mrs
x11
,
C
PU
ACTLR_EL1
mrs
x11
,
C
ORTEX_A53_
ACTLR_EL1
ret
ret
endfunc
cortex_a53_cpu_reg_dump
endfunc
cortex_a53_cpu_reg_dump
...
...
lib/cpus/aarch64/cortex_a57.S
View file @
6de8b24f
...
@@ -29,12 +29,12 @@ endfunc cortex_a57_disable_dcache
...
@@ -29,12 +29,12 @@ endfunc cortex_a57_disable_dcache
*
---------------------------------------------
*
---------------------------------------------
*/
*/
func
cortex_a57_disable_l2_prefetch
func
cortex_a57_disable_l2_prefetch
mrs
x0
,
C
PU
ECTLR_EL1
mrs
x0
,
C
ORTEX_A57_
ECTLR_EL1
orr
x0
,
x0
,
#
C
PU
ECTLR_DIS_TWD_ACC_PFTCH_BIT
orr
x0
,
x0
,
#
C
ORTEX_A57_
ECTLR_DIS_TWD_ACC_PFTCH_BIT
mov
x1
,
#
C
PU
ECTLR_L2_IPFTCH_DIST_MASK
mov
x1
,
#
C
ORTEX_A57_
ECTLR_L2_IPFTCH_DIST_MASK
orr
x1
,
x1
,
#
C
PU
ECTLR_L2_DPFTCH_DIST_MASK
orr
x1
,
x1
,
#
C
ORTEX_A57_
ECTLR_L2_DPFTCH_DIST_MASK
bic
x0
,
x0
,
x1
bic
x0
,
x0
,
x1
msr
C
PU
ECTLR_EL1
,
x0
msr
C
ORTEX_A57_
ECTLR_EL1
,
x0
isb
isb
dsb
ish
dsb
ish
ret
ret
...
@@ -45,9 +45,9 @@ endfunc cortex_a57_disable_l2_prefetch
...
@@ -45,9 +45,9 @@ endfunc cortex_a57_disable_l2_prefetch
*
---------------------------------------------
*
---------------------------------------------
*/
*/
func
cortex_a57_disable_smp
func
cortex_a57_disable_smp
mrs
x0
,
C
PU
ECTLR_EL1
mrs
x0
,
C
ORTEX_A57_
ECTLR_EL1
bic
x0
,
x0
,
#
C
PU
ECTLR_SMP_BIT
bic
x0
,
x0
,
#
C
ORTEX_A57_
ECTLR_SMP_BIT
msr
C
PU
ECTLR_EL1
,
x0
msr
C
ORTEX_A57_
ECTLR_EL1
,
x0
ret
ret
endfunc
cortex_a57_disable_smp
endfunc
cortex_a57_disable_smp
...
@@ -78,9 +78,9 @@ func errata_a57_806969_wa
...
@@ -78,9 +78,9 @@ func errata_a57_806969_wa
mov
x17
,
x30
mov
x17
,
x30
bl
check_errata_806969
bl
check_errata_806969
cbz
x0
,
1
f
cbz
x0
,
1
f
mrs
x1
,
C
PU
ACTLR_EL1
mrs
x1
,
C
ORTEX_A57_
ACTLR_EL1
orr
x1
,
x1
,
#
C
PU
ACTLR_NO_ALLOC_WBWA
orr
x1
,
x1
,
#
C
ORTEX_A57_
ACTLR_NO_ALLOC_WBWA
msr
C
PU
ACTLR_EL1
,
x1
msr
C
ORTEX_A57_
ACTLR_EL1
,
x1
1
:
1
:
ret
x17
ret
x17
endfunc
errata_a57_806969_wa
endfunc
errata_a57_806969_wa
...
@@ -120,9 +120,9 @@ func errata_a57_813420_wa
...
@@ -120,9 +120,9 @@ func errata_a57_813420_wa
mov
x17
,
x30
mov
x17
,
x30
bl
check_errata_813420
bl
check_errata_813420
cbz
x0
,
1
f
cbz
x0
,
1
f
mrs
x1
,
C
PU
ACTLR_EL1
mrs
x1
,
C
ORTEX_A57_
ACTLR_EL1
orr
x1
,
x1
,
#
C
PU
ACTLR_DCC_AS_DCCI
orr
x1
,
x1
,
#
C
ORTEX_A57_
ACTLR_DCC_AS_DCCI
msr
C
PU
ACTLR_EL1
,
x1
msr
C
ORTEX_A57_
ACTLR_EL1
,
x1
1
:
1
:
ret
x17
ret
x17
endfunc
errata_a57_813420_wa
endfunc
errata_a57_813420_wa
...
@@ -150,9 +150,9 @@ func a57_disable_ldnp_overread
...
@@ -150,9 +150,9 @@ func a57_disable_ldnp_overread
mov
x17
,
x30
mov
x17
,
x30
bl
check_errata_disable_ldnp_overread
bl
check_errata_disable_ldnp_overread
cbz
x0
,
1
f
cbz
x0
,
1
f
mrs
x1
,
C
PU
ACTLR_EL1
mrs
x1
,
C
ORTEX_A57_
ACTLR_EL1
orr
x1
,
x1
,
#
C
PU
ACTLR_DIS_OVERREAD
orr
x1
,
x1
,
#
C
ORTEX_A57_
ACTLR_DIS_OVERREAD
msr
C
PU
ACTLR_EL1
,
x1
msr
C
ORTEX_A57_
ACTLR_EL1
,
x1
1
:
1
:
ret
x17
ret
x17
endfunc
a57_disable_ldnp_overread
endfunc
a57_disable_ldnp_overread
...
@@ -177,9 +177,9 @@ func errata_a57_826974_wa
...
@@ -177,9 +177,9 @@ func errata_a57_826974_wa
mov
x17
,
x30
mov
x17
,
x30
bl
check_errata_826974
bl
check_errata_826974
cbz
x0
,
1
f
cbz
x0
,
1
f
mrs
x1
,
C
PU
ACTLR_EL1
mrs
x1
,
C
ORTEX_A57_
ACTLR_EL1
orr
x1
,
x1
,
#
C
PU
ACTLR_DIS_LOAD_PASS_DMB
orr
x1
,
x1
,
#
C
ORTEX_A57_
ACTLR_DIS_LOAD_PASS_DMB
msr
C
PU
ACTLR_EL1
,
x1
msr
C
ORTEX_A57_
ACTLR_EL1
,
x1
1
:
1
:
ret
x17
ret
x17
endfunc
errata_a57_826974_wa
endfunc
errata_a57_826974_wa
...
@@ -204,9 +204,9 @@ func errata_a57_826977_wa
...
@@ -204,9 +204,9 @@ func errata_a57_826977_wa
mov
x17
,
x30
mov
x17
,
x30
bl
check_errata_826977
bl
check_errata_826977
cbz
x0
,
1
f
cbz
x0
,
1
f
mrs
x1
,
C
PU
ACTLR_EL1
mrs
x1
,
C
ORTEX_A57_
ACTLR_EL1
orr
x1
,
x1
,
#
C
PU
ACTLR_GRE_NGRE_AS_NGNRE
orr
x1
,
x1
,
#
C
ORTEX_A57_
ACTLR_GRE_NGRE_AS_NGNRE
msr
C
PU
ACTLR_EL1
,
x1
msr
C
ORTEX_A57_
ACTLR_EL1
,
x1
1
:
1
:
ret
x17
ret
x17
endfunc
errata_a57_826977_wa
endfunc
errata_a57_826977_wa
...
@@ -231,15 +231,16 @@ func errata_a57_828024_wa
...
@@ -231,15 +231,16 @@ func errata_a57_828024_wa
mov
x17
,
x30
mov
x17
,
x30
bl
check_errata_828024
bl
check_errata_828024
cbz
x0
,
1
f
cbz
x0
,
1
f
mrs
x1
,
C
PU
ACTLR_EL1
mrs
x1
,
C
ORTEX_A57_
ACTLR_EL1
/
*
/
*
*
Setting
the
relevant
bits
in
CPUACTLR_EL1
has
to
be
done
in
2
*
Setting
the
relevant
bits
in
CPUACTLR_EL1
has
to
be
done
in
2
*
instructions
here
because
the
resulting
bitmask
doesn
't fit in a
*
instructions
here
because
the
resulting
bitmask
doesn
't fit in a
*
16
-
bit
value
so
it
cannot
be
encoded
in
a
single
instruction
.
*
16
-
bit
value
so
it
cannot
be
encoded
in
a
single
instruction
.
*/
*/
orr
x1
,
x1
,
#
CPUACTLR_NO_ALLOC_WBWA
orr
x1
,
x1
,
#
CORTEX_A57_ACTLR_NO_ALLOC_WBWA
orr
x1
,
x1
,
#(
CPUACTLR_DIS_L1_STREAMING
|
CPUACTLR_DIS_STREAMING
)
orr
x1
,
x1
,
#(
CORTEX_A57_ACTLR_DIS_L1_STREAMING
|
\
msr
CPUACTLR_EL1
,
x1
CORTEX_A57_ACTLR_DIS_STREAMING
)
msr
CORTEX_A57_ACTLR_EL1
,
x1
1
:
1
:
ret
x17
ret
x17
endfunc
errata_a57_828024_wa
endfunc
errata_a57_828024_wa
...
@@ -264,9 +265,9 @@ func errata_a57_829520_wa
...
@@ -264,9 +265,9 @@ func errata_a57_829520_wa
mov
x17
,
x30
mov
x17
,
x30
bl
check_errata_829520
bl
check_errata_829520
cbz
x0
,
1
f
cbz
x0
,
1
f
mrs
x1
,
C
PU
ACTLR_EL1
mrs
x1
,
C
ORTEX_A57_
ACTLR_EL1
orr
x1
,
x1
,
#
C
PU
ACTLR_DIS_INDIRECT_PREDICTOR
orr
x1
,
x1
,
#
C
ORTEX_A57_
ACTLR_DIS_INDIRECT_PREDICTOR
msr
C
PU
ACTLR_EL1
,
x1
msr
C
ORTEX_A57_
ACTLR_EL1
,
x1
1
:
1
:
ret
x17
ret
x17
endfunc
errata_a57_829520_wa
endfunc
errata_a57_829520_wa
...
@@ -291,9 +292,9 @@ func errata_a57_833471_wa
...
@@ -291,9 +292,9 @@ func errata_a57_833471_wa
mov
x17
,
x30
mov
x17
,
x30
bl
check_errata_833471
bl
check_errata_833471
cbz
x0
,
1
f
cbz
x0
,
1
f
mrs
x1
,
C
PU
ACTLR_EL1
mrs
x1
,
C
ORTEX_A57_
ACTLR_EL1
orr
x1
,
x1
,
#
C
PU
ACTLR_FORCE_FPSCR_FLUSH
orr
x1
,
x1
,
#
C
ORTEX_A57_
ACTLR_FORCE_FPSCR_FLUSH
msr
C
PU
ACTLR_EL1
,
x1
msr
C
ORTEX_A57_
ACTLR_EL1
,
x1
1
:
1
:
ret
x17
ret
x17
endfunc
errata_a57_833471_wa
endfunc
errata_a57_833471_wa
...
@@ -357,9 +358,9 @@ func cortex_a57_reset_func
...
@@ -357,9 +358,9 @@ func cortex_a57_reset_func
*
Enable
the
SMP
bit
.
*
Enable
the
SMP
bit
.
*
---------------------------------------------
*
---------------------------------------------
*/
*/
mrs
x0
,
C
PU
ECTLR_EL1
mrs
x0
,
C
ORTEX_A57_
ECTLR_EL1
orr
x0
,
x0
,
#
C
PU
ECTLR_SMP_BIT
orr
x0
,
x0
,
#
C
ORTEX_A57_
ECTLR_SMP_BIT
msr
C
PU
ECTLR_EL1
,
x0
msr
C
ORTEX_A57_
ECTLR_EL1
,
x0
isb
isb
ret
x19
ret
x19
endfunc
cortex_a57_reset_func
endfunc
cortex_a57_reset_func
...
@@ -503,9 +504,9 @@ cortex_a57_regs: /* The ascii list of register names to be reported */
...
@@ -503,9 +504,9 @@ cortex_a57_regs: /* The ascii list of register names to be reported */
func
cortex_a57_cpu_reg_dump
func
cortex_a57_cpu_reg_dump
adr
x6
,
cortex_a57_regs
adr
x6
,
cortex_a57_regs
mrs
x8
,
C
PU
ECTLR_EL1
mrs
x8
,
C
ORTEX_A57_
ECTLR_EL1
mrs
x9
,
C
PU
MERRSR_EL1
mrs
x9
,
C
ORTEX_A57_
MERRSR_EL1
mrs
x10
,
L2MERRSR_EL1
mrs
x10
,
CORTEX_A57_
L2MERRSR_EL1
ret
ret
endfunc
cortex_a57_cpu_reg_dump
endfunc
cortex_a57_cpu_reg_dump
...
...
lib/cpus/aarch64/cortex_a72.S
View file @
6de8b24f
...
@@ -27,12 +27,12 @@ endfunc cortex_a72_disable_dcache
...
@@ -27,12 +27,12 @@ endfunc cortex_a72_disable_dcache
*
---------------------------------------------
*
---------------------------------------------
*/
*/
func
cortex_a72_disable_l2_prefetch
func
cortex_a72_disable_l2_prefetch
mrs
x0
,
C
PU
ECTLR_EL1
mrs
x0
,
C
ORTEX_A72_
ECTLR_EL1
orr
x0
,
x0
,
#
C
PU
ECTLR_DIS_TWD_ACC_PFTCH_BIT
orr
x0
,
x0
,
#
C
ORTEX_A72_
ECTLR_DIS_TWD_ACC_PFTCH_BIT
mov
x1
,
#
C
PU
ECTLR_L2_IPFTCH_DIST_MASK
mov
x1
,
#
C
ORTEX_A72_
ECTLR_L2_IPFTCH_DIST_MASK
orr
x1
,
x1
,
#
C
PU
ECTLR_L2_DPFTCH_DIST_MASK
orr
x1
,
x1
,
#
C
ORTEX_A72_
ECTLR_L2_DPFTCH_DIST_MASK
bic
x0
,
x0
,
x1
bic
x0
,
x0
,
x1
msr
C
PU
ECTLR_EL1
,
x0
msr
C
ORTEX_A72_
ECTLR_EL1
,
x0
isb
isb
ret
ret
endfunc
cortex_a72_disable_l2_prefetch
endfunc
cortex_a72_disable_l2_prefetch
...
@@ -42,9 +42,9 @@ endfunc cortex_a72_disable_l2_prefetch
...
@@ -42,9 +42,9 @@ endfunc cortex_a72_disable_l2_prefetch
*
---------------------------------------------
*
---------------------------------------------
*/
*/
func
cortex_a72_disable_hw_prefetcher
func
cortex_a72_disable_hw_prefetcher
mrs
x0
,
C
PU
ACTLR_EL1
mrs
x0
,
C
ORTEX_A72_
ACTLR_EL1
orr
x0
,
x0
,
#
C
PU
ACTLR_DISABLE_L1_DCACHE_HW_PFTCH
orr
x0
,
x0
,
#
C
ORTEX_A72_
ACTLR_DISABLE_L1_DCACHE_HW_PFTCH
msr
C
PU
ACTLR_EL1
,
x0
msr
C
ORTEX_A72_
ACTLR_EL1
,
x0
isb
isb
dsb
ish
dsb
ish
ret
ret
...
@@ -55,9 +55,9 @@ endfunc cortex_a72_disable_hw_prefetcher
...
@@ -55,9 +55,9 @@ endfunc cortex_a72_disable_hw_prefetcher
*
---------------------------------------------
*
---------------------------------------------
*/
*/
func
cortex_a72_disable_smp
func
cortex_a72_disable_smp
mrs
x0
,
C
PU
ECTLR_EL1
mrs
x0
,
C
ORTEX_A72_
ECTLR_EL1
bic
x0
,
x0
,
#
C
PU
ECTLR_SMP_BIT
bic
x0
,
x0
,
#
C
ORTEX_A72_
ECTLR_SMP_BIT
msr
C
PU
ECTLR_EL1
,
x0
msr
C
ORTEX_A72_
ECTLR_EL1
,
x0
ret
ret
endfunc
cortex_a72_disable_smp
endfunc
cortex_a72_disable_smp
...
@@ -82,9 +82,9 @@ func cortex_a72_reset_func
...
@@ -82,9 +82,9 @@ func cortex_a72_reset_func
*
As
a
bare
minimum
enable
the
SMP
bit
.
*
As
a
bare
minimum
enable
the
SMP
bit
.
*
---------------------------------------------
*
---------------------------------------------
*/
*/
mrs
x0
,
C
PU
ECTLR_EL1
mrs
x0
,
C
ORTEX_A72_
ECTLR_EL1
orr
x0
,
x0
,
#
C
PU
ECTLR_SMP_BIT
orr
x0
,
x0
,
#
C
ORTEX_A72_
ECTLR_SMP_BIT
msr
C
PU
ECTLR_EL1
,
x0
msr
C
ORTEX_A72_
ECTLR_EL1
,
x0
isb
isb
ret
ret
endfunc
cortex_a72_reset_func
endfunc
cortex_a72_reset_func
...
@@ -211,9 +211,9 @@ cortex_a72_regs: /* The ascii list of register names to be reported */
...
@@ -211,9 +211,9 @@ cortex_a72_regs: /* The ascii list of register names to be reported */
func
cortex_a72_cpu_reg_dump
func
cortex_a72_cpu_reg_dump
adr
x6
,
cortex_a72_regs
adr
x6
,
cortex_a72_regs
mrs
x8
,
C
PU
ECTLR_EL1
mrs
x8
,
C
ORTEX_A72_
ECTLR_EL1
mrs
x9
,
C
PU
MERRSR_EL1
mrs
x9
,
C
ORTEX_A72_
MERRSR_EL1
mrs
x10
,
L2MERRSR_EL1
mrs
x10
,
CORTEX_A72_
L2MERRSR_EL1
ret
ret
endfunc
cortex_a72_cpu_reg_dump
endfunc
cortex_a72_cpu_reg_dump
...
...
lib/cpus/errata_report.c
View file @
6de8b24f
...
@@ -60,7 +60,7 @@ int errata_needs_reporting(spinlock_t *lock, uint32_t *reported)
...
@@ -60,7 +60,7 @@ int errata_needs_reporting(spinlock_t *lock, uint32_t *reported)
* Applied: INFO
* Applied: INFO
* Not applied: VERBOSE
* Not applied: VERBOSE
*/
*/
void
errata_print_msg
(
int
status
,
const
char
*
cpu
,
const
char
*
id
)
void
errata_print_msg
(
unsigned
int
status
,
const
char
*
cpu
,
const
char
*
id
)
{
{
/* Errata status strings */
/* Errata status strings */
static
const
char
*
const
errata_status_str
[]
=
{
static
const
char
*
const
errata_status_str
[]
=
{
...
...
lib/psci/psci_common.c
View file @
6de8b24f
...
@@ -332,7 +332,7 @@ void psci_get_parent_pwr_domain_nodes(unsigned int cpu_idx,
...
@@ -332,7 +332,7 @@ void psci_get_parent_pwr_domain_nodes(unsigned int cpu_idx,
unsigned
int
node_index
[])
unsigned
int
node_index
[])
{
{
unsigned
int
parent_node
=
psci_cpu_pd_nodes
[
cpu_idx
].
parent_node
;
unsigned
int
parent_node
=
psci_cpu_pd_nodes
[
cpu_idx
].
parent_node
;
int
i
;
unsigned
int
i
;
for
(
i
=
PSCI_CPU_PWR_LVL
+
1
;
i
<=
end_lvl
;
i
++
)
{
for
(
i
=
PSCI_CPU_PWR_LVL
+
1
;
i
<=
end_lvl
;
i
++
)
{
*
node_index
++
=
parent_node
;
*
node_index
++
=
parent_node
;
...
@@ -901,7 +901,7 @@ void psci_print_power_domain_map(void)
...
@@ -901,7 +901,7 @@ void psci_print_power_domain_map(void)
*****************************************************************************/
*****************************************************************************/
int
psci_secondaries_brought_up
(
void
)
int
psci_secondaries_brought_up
(
void
)
{
{
int
idx
,
n_valid
=
0
;
unsigned
int
idx
,
n_valid
=
0
;
for
(
idx
=
0
;
idx
<
ARRAY_SIZE
(
psci_cpu_pd_nodes
);
idx
++
)
{
for
(
idx
=
0
;
idx
<
ARRAY_SIZE
(
psci_cpu_pd_nodes
);
idx
++
)
{
if
(
psci_cpu_pd_nodes
[
idx
].
mpidr
!=
PSCI_INVALID_MPIDR
)
if
(
psci_cpu_pd_nodes
[
idx
].
mpidr
!=
PSCI_INVALID_MPIDR
)
...
...
lib/psci/psci_main.c
View file @
6de8b24f
...
@@ -209,7 +209,7 @@ int psci_cpu_off(void)
...
@@ -209,7 +209,7 @@ int psci_cpu_off(void)
int
psci_affinity_info
(
u_register_t
target_affinity
,
int
psci_affinity_info
(
u_register_t
target_affinity
,
unsigned
int
lowest_affinity_level
)
unsigned
int
lowest_affinity_level
)
{
{
unsigned
int
target_idx
;
int
target_idx
;
/* We dont support level higher than PSCI_CPU_PWR_LVL */
/* We dont support level higher than PSCI_CPU_PWR_LVL */
if
(
lowest_affinity_level
>
PSCI_CPU_PWR_LVL
)
if
(
lowest_affinity_level
>
PSCI_CPU_PWR_LVL
)
...
...
lib/psci/psci_off.c
View file @
6de8b24f
...
@@ -19,7 +19,7 @@
...
@@ -19,7 +19,7 @@
******************************************************************************/
******************************************************************************/
static
void
psci_set_power_off_state
(
psci_power_state_t
*
state_info
)
static
void
psci_set_power_off_state
(
psci_power_state_t
*
state_info
)
{
{
int
lvl
;
unsigned
int
lvl
;
for
(
lvl
=
PSCI_CPU_PWR_LVL
;
lvl
<=
PLAT_MAX_PWR_LVL
;
lvl
++
)
for
(
lvl
=
PSCI_CPU_PWR_LVL
;
lvl
<=
PLAT_MAX_PWR_LVL
;
lvl
++
)
state_info
->
pwr_domain_state
[
lvl
]
=
PLAT_MAX_OFF_STATE
;
state_info
->
pwr_domain_state
[
lvl
]
=
PLAT_MAX_OFF_STATE
;
...
...
lib/xlat_tables_v2/xlat_tables_internal.c
View file @
6de8b24f
...
@@ -37,7 +37,7 @@
...
@@ -37,7 +37,7 @@
*/
*/
static
int
xlat_table_get_index
(
xlat_ctx_t
*
ctx
,
const
uint64_t
*
table
)
static
int
xlat_table_get_index
(
xlat_ctx_t
*
ctx
,
const
uint64_t
*
table
)
{
{
for
(
int
i
=
0
;
i
<
ctx
->
tables_num
;
i
++
)
for
(
unsigned
int
i
=
0
;
i
<
ctx
->
tables_num
;
i
++
)
if
(
ctx
->
tables
[
i
]
==
table
)
if
(
ctx
->
tables
[
i
]
==
table
)
return
i
;
return
i
;
...
@@ -53,7 +53,7 @@ static int xlat_table_get_index(xlat_ctx_t *ctx, const uint64_t *table)
...
@@ -53,7 +53,7 @@ static int xlat_table_get_index(xlat_ctx_t *ctx, const uint64_t *table)
/* Returns a pointer to an empty translation table. */
/* Returns a pointer to an empty translation table. */
static
uint64_t
*
xlat_table_get_empty
(
xlat_ctx_t
*
ctx
)
static
uint64_t
*
xlat_table_get_empty
(
xlat_ctx_t
*
ctx
)
{
{
for
(
int
i
=
0
;
i
<
ctx
->
tables_num
;
i
++
)
for
(
unsigned
int
i
=
0
;
i
<
ctx
->
tables_num
;
i
++
)
if
(
ctx
->
tables_mapped_regions
[
i
]
==
0
)
if
(
ctx
->
tables_mapped_regions
[
i
]
==
0
)
return
ctx
->
tables
[
i
];
return
ctx
->
tables
[
i
];
...
@@ -203,7 +203,7 @@ static void xlat_tables_unmap_region(xlat_ctx_t *ctx, mmap_region_t *mm,
...
@@ -203,7 +203,7 @@ static void xlat_tables_unmap_region(xlat_ctx_t *ctx, mmap_region_t *mm,
const
uintptr_t
table_base_va
,
const
uintptr_t
table_base_va
,
uint64_t
*
const
table_base
,
uint64_t
*
const
table_base
,
const
int
table_entries
,
const
int
table_entries
,
const
int
level
)
const
unsigned
int
level
)
{
{
assert
(
level
>=
ctx
->
base_level
&&
level
<=
XLAT_TABLE_LEVEL_MAX
);
assert
(
level
>=
ctx
->
base_level
&&
level
<=
XLAT_TABLE_LEVEL_MAX
);
...
@@ -468,7 +468,7 @@ static uintptr_t xlat_tables_map_region(xlat_ctx_t *ctx, mmap_region_t *mm,
...
@@ -468,7 +468,7 @@ static uintptr_t xlat_tables_map_region(xlat_ctx_t *ctx, mmap_region_t *mm,
const
uintptr_t
table_base_va
,
const
uintptr_t
table_base_va
,
uint64_t
*
const
table_base
,
uint64_t
*
const
table_base
,
const
int
table_entries
,
const
int
table_entries
,
const
int
level
)
const
unsigned
int
level
)
{
{
assert
(
level
>=
ctx
->
base_level
&&
level
<=
XLAT_TABLE_LEVEL_MAX
);
assert
(
level
>=
ctx
->
base_level
&&
level
<=
XLAT_TABLE_LEVEL_MAX
);
...
@@ -1053,14 +1053,14 @@ void init_xlation_table(xlat_ctx_t *ctx)
...
@@ -1053,14 +1053,14 @@ void init_xlation_table(xlat_ctx_t *ctx)
/* All tables must be zeroed before mapping any region. */
/* All tables must be zeroed before mapping any region. */
for
(
int
i
=
0
;
i
<
ctx
->
base_table_entries
;
i
++
)
for
(
unsigned
int
i
=
0
;
i
<
ctx
->
base_table_entries
;
i
++
)
ctx
->
base_table
[
i
]
=
INVALID_DESC
;
ctx
->
base_table
[
i
]
=
INVALID_DESC
;
for
(
int
j
=
0
;
j
<
ctx
->
tables_num
;
j
++
)
{
for
(
unsigned
int
j
=
0
;
j
<
ctx
->
tables_num
;
j
++
)
{
#if PLAT_XLAT_TABLES_DYNAMIC
#if PLAT_XLAT_TABLES_DYNAMIC
ctx
->
tables_mapped_regions
[
j
]
=
0
;
ctx
->
tables_mapped_regions
[
j
]
=
0
;
#endif
#endif
for
(
int
i
=
0
;
i
<
XLAT_TABLE_ENTRIES
;
i
++
)
for
(
unsigned
int
i
=
0
;
i
<
XLAT_TABLE_ENTRIES
;
i
++
)
ctx
->
tables
[
j
][
i
]
=
INVALID_DESC
;
ctx
->
tables
[
j
][
i
]
=
INVALID_DESC
;
}
}
...
...
lib/xlat_tables_v2/xlat_tables_private.h
View file @
6de8b24f
...
@@ -52,7 +52,7 @@ typedef struct {
...
@@ -52,7 +52,7 @@ typedef struct {
* null entry.
* null entry.
*/
*/
mmap_region_t
*
mmap
;
mmap_region_t
*
mmap
;
int
mmap_num
;
unsigned
int
mmap_num
;
/*
/*
* Array of finer-grain translation tables.
* Array of finer-grain translation tables.
...
@@ -60,7 +60,7 @@ typedef struct {
...
@@ -60,7 +60,7 @@ typedef struct {
* contain both level-2 and level-3 entries.
* contain both level-2 and level-3 entries.
*/
*/
uint64_t
(
*
tables
)[
XLAT_TABLE_ENTRIES
];
uint64_t
(
*
tables
)[
XLAT_TABLE_ENTRIES
];
int
tables_num
;
unsigned
int
tables_num
;
/*
/*
* Keep track of how many regions are mapped in each table. The base
* Keep track of how many regions are mapped in each table. The base
* table can't be unmapped so it isn't needed to keep track of it.
* table can't be unmapped so it isn't needed to keep track of it.
...
@@ -69,14 +69,14 @@ typedef struct {
...
@@ -69,14 +69,14 @@ typedef struct {
int
*
tables_mapped_regions
;
int
*
tables_mapped_regions
;
#endif
/* PLAT_XLAT_TABLES_DYNAMIC */
#endif
/* PLAT_XLAT_TABLES_DYNAMIC */
int
next_table
;
unsigned
int
next_table
;
/*
/*
* Base translation table. It doesn't need to have the same amount of
* Base translation table. It doesn't need to have the same amount of
* entries as the ones used for other levels.
* entries as the ones used for other levels.
*/
*/
uint64_t
*
base_table
;
uint64_t
*
base_table
;
int
base_table_entries
;
unsigned
int
base_table_entries
;
/*
/*
* Max Physical and Virtual addresses currently in use by the
* Max Physical and Virtual addresses currently in use by the
...
@@ -87,10 +87,10 @@ typedef struct {
...
@@ -87,10 +87,10 @@ typedef struct {
uintptr_t
max_va
;
uintptr_t
max_va
;
/* Level of the base translation table. */
/* Level of the base translation table. */
int
base_level
;
unsigned
int
base_level
;
/* Set to 1 when the translation tables are initialized. */
/* Set to 1 when the translation tables are initialized. */
int
initialized
;
unsigned
int
initialized
;
/*
/*
* Bit mask that has to be ORed to the rest of a translation table
* Bit mask that has to be ORed to the rest of a translation table
...
...
plat/arm/board/juno/aarch64/juno_helpers.S
View file @
6de8b24f
...
@@ -86,9 +86,9 @@ func JUNO_HANDLER(0)
...
@@ -86,9 +86,9 @@ func JUNO_HANDLER(0)
*
Cortex
-
A57
specific
settings
*
Cortex
-
A57
specific
settings
*
--------------------------------------------------------------------
*
--------------------------------------------------------------------
*/
*/
mov
x0
,
#((
L2_DATA_RAM_LATENCY_3_CYCLES
<<
L2CTLR_DATA_RAM_LATENCY_SHIFT
)
|
\
mov
x0
,
#((
CORTEX_A57_
L2_DATA_RAM_LATENCY_3_CYCLES
<<
CORTEX_A57_
L2CTLR_DATA_RAM_LATENCY_SHIFT
)
|
\
(
L2_TAG_RAM_LATENCY_3_CYCLES
<<
L2CTLR_TAG_RAM_LATENCY_SHIFT
))
(
CORTEX_A57_
L2_TAG_RAM_LATENCY_3_CYCLES
<<
CORTEX_A57_
L2CTLR_TAG_RAM_LATENCY_SHIFT
))
msr
L2CTLR_EL1
,
x0
msr
CORTEX_A57_
L2CTLR_EL1
,
x0
1
:
1
:
isb
isb
ret
ret
...
@@ -123,8 +123,8 @@ A57:
...
@@ -123,8 +123,8 @@ A57:
*
Cortex
-
A57
specific
settings
*
Cortex
-
A57
specific
settings
*
--------------------------------------------------------------------
*
--------------------------------------------------------------------
*/
*/
mov
x0
,
#(
L2_DATA_RAM_LATENCY_3_CYCLES
<<
L2CTLR_DATA_RAM_LATENCY_SHIFT
)
mov
x0
,
#(
CORTEX_A57_
L2_DATA_RAM_LATENCY_3_CYCLES
<<
CORTEX_A57_
L2CTLR_DATA_RAM_LATENCY_SHIFT
)
msr
L2CTLR_EL1
,
x0
msr
CORTEX_A57_
L2CTLR_EL1
,
x0
isb
isb
ret
ret
endfunc
JUNO_HANDLER
(1)
endfunc
JUNO_HANDLER
(1)
...
@@ -157,9 +157,9 @@ A72:
...
@@ -157,9 +157,9 @@ A72:
*
Cortex
-
A72
specific
settings
*
Cortex
-
A72
specific
settings
*
--------------------------------------------------------------------
*
--------------------------------------------------------------------
*/
*/
mov
x0
,
#((
L2_DATA_RAM_LATENCY_3_CYCLES
<<
L2CTLR_DATA_RAM_LATENCY_SHIFT
)
|
\
mov
x0
,
#((
CORTEX_A72_
L2_DATA_RAM_LATENCY_3_CYCLES
<<
CORTEX_A72_
L2CTLR_DATA_RAM_LATENCY_SHIFT
)
|
\
(
L2_TAG_RAM_LATENCY_2_CYCLES
<<
L2CTLR_TAG_RAM_LATENCY_SHIFT
))
(
CORTEX_A72_
L2_TAG_RAM_LATENCY_2_CYCLES
<<
CORTEX_A72_
L2CTLR_TAG_RAM_LATENCY_SHIFT
))
msr
L2CTLR_EL1
,
x0
msr
CORTEX_A57_
L2CTLR_EL1
,
x0
isb
isb
ret
ret
endfunc
JUNO_HANDLER
(2)
endfunc
JUNO_HANDLER
(2)
...
...
plat/hisilicon/hikey/hisi_pwrc_sram.S
View file @
6de8b24f
...
@@ -20,11 +20,11 @@ func pm_asm_code
...
@@ -20,11 +20,11 @@ func pm_asm_code
mov
x0
,
0
mov
x0
,
0
msr
oslar_el1
,
x0
msr
oslar_el1
,
x0
mrs
x0
,
C
PU
ACTLR_EL1
mrs
x0
,
C
ORTEX_A53_
ACTLR_EL1
bic
x0
,
x0
,
#(
C
PU
ACTLR_RADIS
|
C
PU
ACTLR_L1RADIS
)
bic
x0
,
x0
,
#(
C
ORTEX_A53_
ACTLR_RADIS
|
C
ORTEX_A53_
ACTLR_L1RADIS
)
orr
x0
,
x0
,
#
0x180000
orr
x0
,
x0
,
#
0x180000
orr
x0
,
x0
,
#
0xe000
orr
x0
,
x0
,
#
0xe000
msr
C
PU
ACTLR_EL1
,
x0
msr
C
ORTEX_A53_
ACTLR_EL1
,
x0
mrs
x3
,
actlr_el3
mrs
x3
,
actlr_el3
orr
x3
,
x3
,
#
ACTLR_EL3_L2ECTLR_BIT
orr
x3
,
x3
,
#
ACTLR_EL3_L2ECTLR_BIT
...
...
plat/nvidia/tegra/common/aarch64/tegra_helpers.S
View file @
6de8b24f
...
@@ -68,18 +68,18 @@
...
@@ -68,18 +68,18 @@
*
Enable
processor
retention
*
Enable
processor
retention
*
---------------------------
*
---------------------------
*/
*/
mrs
x0
,
L2ECTLR_EL1
mrs
x0
,
CORTEX_A57_
L2ECTLR_EL1
mov
x1
,
#
RETENTION_ENTRY_TICKS_512
<<
L2ECTLR_RET_CTRL_SHIFT
mov
x1
,
#
RETENTION_ENTRY_TICKS_512
bic
x0
,
x0
,
#
L2ECTLR_RET_CTRL_MASK
bic
x0
,
x0
,
#
CORTEX_A57_
L2ECTLR_RET_CTRL_MASK
orr
x0
,
x0
,
x1
orr
x0
,
x0
,
x1
msr
L2ECTLR_EL1
,
x0
msr
CORTEX_A57_
L2ECTLR_EL1
,
x0
isb
isb
mrs
x0
,
C
PU
ECTLR_EL1
mrs
x0
,
C
ORTEX_A57_
ECTLR_EL1
mov
x1
,
#
RETENTION_ENTRY_TICKS_512
<<
CPUECTLR_CPU_RET_CTRL_SHIFT
mov
x1
,
#
RETENTION_ENTRY_TICKS_512
bic
x0
,
x0
,
#
C
PU
ECTLR_CPU_RET_CTRL_MASK
bic
x0
,
x0
,
#
C
ORTEX_A57_
ECTLR_CPU_RET_CTRL_MASK
orr
x0
,
x0
,
x1
orr
x0
,
x0
,
x1
msr
C
PU
ECTLR_EL1
,
x0
msr
C
ORTEX_A57_
ECTLR_EL1
,
x0
isb
isb
/
*
-------------------------------------------------------
/
*
-------------------------------------------------------
...
@@ -98,11 +98,11 @@
...
@@ -98,11 +98,11 @@
adr
x0
,
tegra_enable_l2_ecc_parity_prot
adr
x0
,
tegra_enable_l2_ecc_parity_prot
ldr
x0
,
[
x0
]
ldr
x0
,
[
x0
]
cbz
x0
,
1
f
cbz
x0
,
1
f
mrs
x0
,
L2CTLR_EL1
mrs
x0
,
CORTEX_A57_
L2CTLR_EL1
and
x1
,
x0
,
#
L2_ECC_PARITY_PROTECTION_BIT
and
x1
,
x0
,
#
CORTEX_A57_
L2_ECC_PARITY_PROTECTION_BIT
cbnz
x1
,
1
f
cbnz
x1
,
1
f
orr
x0
,
x0
,
#
L2_ECC_PARITY_PROTECTION_BIT
orr
x0
,
x0
,
#
CORTEX_A57_
L2_ECC_PARITY_PROTECTION_BIT
msr
L2CTLR_EL1
,
x0
msr
CORTEX_A57_
L2CTLR_EL1
,
x0
isb
isb
/
*
--------------------------------
/
*
--------------------------------
...
@@ -317,18 +317,18 @@ func tegra_secure_entrypoint
...
@@ -317,18 +317,18 @@ func tegra_secure_entrypoint
*
entries
from
the
branch
predictor
array
.
*
entries
from
the
branch
predictor
array
.
*
-------------------------------------------------------
*
-------------------------------------------------------
*/
*/
mrs
x0
,
C
PU
ACTLR_EL1
mrs
x0
,
C
ORTEX_A57_
ACTLR_EL1
orr
x0
,
x0
,
#
1
orr
x0
,
x0
,
#
1
msr
C
PU
ACTLR_EL1
,
x0
/*
invalidate
BTB
and
I
$
together
*/
msr
C
ORTEX_A57_
ACTLR_EL1
,
x0
/*
invalidate
BTB
and
I
$
together
*/
dsb
sy
dsb
sy
isb
isb
ic
iallu
/*
actual
invalidate
*/
ic
iallu
/*
actual
invalidate
*/
dsb
sy
dsb
sy
isb
isb
mrs
x0
,
C
PU
ACTLR_EL1
mrs
x0
,
C
ORTEX_A57_
ACTLR_EL1
bic
x0
,
x0
,
#
1
bic
x0
,
x0
,
#
1
msr
C
PU
ACTLR_EL1
,
X0
/*
restore
original
CPUACTLR_EL1
*/
msr
C
ORTEX_A57_
ACTLR_EL1
,
X0
/*
restore
original
CPUACTLR_EL1
*/
dsb
sy
dsb
sy
isb
isb
...
@@ -352,7 +352,7 @@ func tegra_secure_entrypoint
...
@@ -352,7 +352,7 @@ func tegra_secure_entrypoint
msr
oslar_el1
,
x0
/*
os
lock
stays
0
across
warm
reset
*/
msr
oslar_el1
,
x0
/*
os
lock
stays
0
across
warm
reset
*/
mov
x3
,
#
3
mov
x3
,
#
3
movz
x4
,
#
0x8000
,
lsl
#
48
movz
x4
,
#
0x8000
,
lsl
#
48
msr
C
PU
ACTLR_EL1
,
x4
/*
turn
off
RCG
*/
msr
C
ORTEX_A57_
ACTLR_EL1
,
x4
/*
turn
off
RCG
*/
isb
isb
msr
rmr_el3
,
x3
/*
request
warm
reset
*/
msr
rmr_el3
,
x3
/*
request
warm
reset
*/
isb
isb
...
...
plat/nvidia/tegra/common/drivers/memctrl/memctrl_v1.c
View file @
6de8b24f
...
@@ -15,9 +15,6 @@
...
@@ -15,9 +15,6 @@
#include <utils.h>
#include <utils.h>
#include <xlat_tables_v2.h>
#include <xlat_tables_v2.h>
#define TEGRA_GPU_RESET_REG_OFFSET 0x28c
#define GPU_RESET_BIT (1 << 24)
/* Video Memory base and size (live values) */
/* Video Memory base and size (live values) */
static
uint64_t
video_mem_base
;
static
uint64_t
video_mem_base
;
static
uint64_t
video_mem_size
;
static
uint64_t
video_mem_size
;
...
@@ -135,20 +132,8 @@ void tegra_memctrl_videomem_setup(uint64_t phys_base, uint32_t size_in_bytes)
...
@@ -135,20 +132,8 @@ void tegra_memctrl_videomem_setup(uint64_t phys_base, uint32_t size_in_bytes)
{
{
uintptr_t
vmem_end_old
=
video_mem_base
+
(
video_mem_size
<<
20
);
uintptr_t
vmem_end_old
=
video_mem_base
+
(
video_mem_size
<<
20
);
uintptr_t
vmem_end_new
=
phys_base
+
size_in_bytes
;
uintptr_t
vmem_end_new
=
phys_base
+
size_in_bytes
;
uint32_t
regval
;
unsigned
long
long
non_overlap_area_size
;
unsigned
long
long
non_overlap_area_size
;
/*
* The GPU is the user of the Video Memory region. In order to
* transition to the new memory region smoothly, we program the
* new base/size ONLY if the GPU is in reset mode.
*/
regval
=
mmio_read_32
(
TEGRA_CAR_RESET_BASE
+
TEGRA_GPU_RESET_REG_OFFSET
);
if
((
regval
&
GPU_RESET_BIT
)
==
0
)
{
ERROR
(
"GPU not in reset! Video Memory setup failed
\n
"
);
return
;
}
/*
/*
* Setup the Memory controller to restrict CPU accesses to the Video
* Setup the Memory controller to restrict CPU accesses to the Video
* Memory region
* Memory region
...
...
plat/nvidia/tegra/common/drivers/memctrl/memctrl_v2.c
View file @
6de8b24f
...
@@ -19,9 +19,6 @@
...
@@ -19,9 +19,6 @@
#include <utils.h>
#include <utils.h>
#include <xlat_tables_v2.h>
#include <xlat_tables_v2.h>
#define TEGRA_GPU_RESET_REG_OFFSET 0x30
#define GPU_RESET_BIT (1 << 0)
/* Video Memory base and size (live values) */
/* Video Memory base and size (live values) */
static
uint64_t
video_mem_base
;
static
uint64_t
video_mem_base
;
static
uint64_t
video_mem_size_mb
;
static
uint64_t
video_mem_size_mb
;
...
@@ -254,32 +251,12 @@ static void tegra_memctrl_reconfig_mss_clients(void)
...
@@ -254,32 +251,12 @@ static void tegra_memctrl_reconfig_mss_clients(void)
wdata_0
=
MC_CLIENT_HOTRESET_CTRL0_RESET_VAL
;
wdata_0
=
MC_CLIENT_HOTRESET_CTRL0_RESET_VAL
;
tegra_mc_write_32
(
MC_CLIENT_HOTRESET_CTRL0
,
wdata_0
);
tegra_mc_write_32
(
MC_CLIENT_HOTRESET_CTRL0
,
wdata_0
);
/* Wait for HOTRESET STATUS to indicate FLUSH_DONE */
do
{
val
=
tegra_mc_read_32
(
MC_CLIENT_HOTRESET_STATUS0
);
}
while
((
val
&
wdata_0
)
!=
wdata_0
);
/* Wait one more time due to SW WAR for known legacy issue */
do
{
val
=
tegra_mc_read_32
(
MC_CLIENT_HOTRESET_STATUS0
);
}
while
((
val
&
wdata_0
)
!=
wdata_0
);
val
=
tegra_mc_read_32
(
MC_CLIENT_HOTRESET_CTRL1
);
val
=
tegra_mc_read_32
(
MC_CLIENT_HOTRESET_CTRL1
);
assert
(
val
==
wdata_1
);
assert
(
val
==
wdata_1
);
wdata_1
=
MC_CLIENT_HOTRESET_CTRL1_RESET_VAL
;
wdata_1
=
MC_CLIENT_HOTRESET_CTRL1_RESET_VAL
;
tegra_mc_write_32
(
MC_CLIENT_HOTRESET_CTRL1
,
wdata_1
);
tegra_mc_write_32
(
MC_CLIENT_HOTRESET_CTRL1
,
wdata_1
);
/* Wait for HOTRESET STATUS to indicate FLUSH_DONE */
do
{
val
=
tegra_mc_read_32
(
MC_CLIENT_HOTRESET_STATUS1
);
}
while
((
val
&
wdata_1
)
!=
wdata_1
);
/* Wait one more time due to SW WAR for known legacy issue */
do
{
val
=
tegra_mc_read_32
(
MC_CLIENT_HOTRESET_STATUS1
);
}
while
((
val
&
wdata_1
)
!=
wdata_1
);
#endif
#endif
}
}
...
@@ -623,20 +600,8 @@ void tegra_memctrl_videomem_setup(uint64_t phys_base, uint32_t size_in_bytes)
...
@@ -623,20 +600,8 @@ void tegra_memctrl_videomem_setup(uint64_t phys_base, uint32_t size_in_bytes)
{
{
uintptr_t
vmem_end_old
=
video_mem_base
+
(
video_mem_size_mb
<<
20
);
uintptr_t
vmem_end_old
=
video_mem_base
+
(
video_mem_size_mb
<<
20
);
uintptr_t
vmem_end_new
=
phys_base
+
size_in_bytes
;
uintptr_t
vmem_end_new
=
phys_base
+
size_in_bytes
;
uint32_t
regval
;
unsigned
long
long
non_overlap_area_size
;
unsigned
long
long
non_overlap_area_size
;
/*
* The GPU is the user of the Video Memory region. In order to
* transition to the new memory region smoothly, we program the
* new base/size ONLY if the GPU is in reset mode.
*/
regval
=
mmio_read_32
(
TEGRA_CAR_RESET_BASE
+
TEGRA_GPU_RESET_REG_OFFSET
);
if
((
regval
&
GPU_RESET_BIT
)
==
0U
)
{
ERROR
(
"GPU not in reset! Video Memory setup failed
\n
"
);
return
;
}
/*
/*
* Setup the Memory controller to restrict CPU accesses to the Video
* Setup the Memory controller to restrict CPU accesses to the Video
* Memory region
* Memory region
...
...
plat/nvidia/tegra/common/drivers/pmc/pmc.c
View file @
6de8b24f
...
@@ -11,8 +11,10 @@
...
@@ -11,8 +11,10 @@
#include <pmc.h>
#include <pmc.h>
#include <tegra_def.h>
#include <tegra_def.h>
#define RESET_ENABLE 0x10U
/* Module IDs used during power ungate procedure */
/* Module IDs used during power ungate procedure */
static
const
int
pmc_cpu_powergate_id
[
4
]
=
{
static
const
u
int
32_t
pmc_cpu_powergate_id
[
4
]
=
{
0
,
/* CPU 0 */
0
,
/* CPU 0 */
9
,
/* CPU 1 */
9
,
/* CPU 1 */
10
,
/* CPU 2 */
10
,
/* CPU 2 */
...
@@ -23,7 +25,7 @@ static const int pmc_cpu_powergate_id[4] = {
...
@@ -23,7 +25,7 @@ static const int pmc_cpu_powergate_id[4] = {
* Power ungate CPU to start the boot process. CPU reset vectors must be
* Power ungate CPU to start the boot process. CPU reset vectors must be
* populated before calling this function.
* populated before calling this function.
******************************************************************************/
******************************************************************************/
void
tegra_pmc_cpu_on
(
int
cpu
)
void
tegra_pmc_cpu_on
(
int
32_t
cpu
)
{
{
uint32_t
val
;
uint32_t
val
;
...
@@ -31,35 +33,34 @@ void tegra_pmc_cpu_on(int cpu)
...
@@ -31,35 +33,34 @@ void tegra_pmc_cpu_on(int cpu)
* Check if CPU is already power ungated
* Check if CPU is already power ungated
*/
*/
val
=
tegra_pmc_read_32
(
PMC_PWRGATE_STATUS
);
val
=
tegra_pmc_read_32
(
PMC_PWRGATE_STATUS
);
if
(
val
&
(
1
<<
pmc_cpu_powergate_id
[
cpu
]))
if
((
val
&
(
1U
<<
pmc_cpu_powergate_id
[
cpu
]))
==
0U
)
{
return
;
/*
* The PMC deasserts the START bit when it starts the power
/*
* ungate process. Loop till no power toggle is in progress.
* The PMC deasserts the START bit when it starts the power
*/
* ungate process. Loop till no power toggle is in progress.
do
{
*/
val
=
tegra_pmc_read_32
(
PMC_PWRGATE_TOGGLE
);
do
{
}
while
((
val
&
PMC_TOGGLE_START
)
!=
0U
);
val
=
tegra_pmc_read_32
(
PMC_PWRGATE_TOGGLE
);
}
while
(
val
&
PMC_TOGGLE_START
);
/*
* Start the power ungate procedure
/*
*/
* Start the power ungate procedure
val
=
pmc_cpu_powergate_id
[
cpu
]
|
PMC_TOGGLE_START
;
*/
tegra_pmc_write_32
(
PMC_PWRGATE_TOGGLE
,
val
);
val
=
pmc_cpu_powergate_id
[
cpu
]
|
PMC_TOGGLE_START
;
tegra_pmc_write_32
(
PMC_PWRGATE_TOGGLE
,
val
);
/*
* The PMC deasserts the START bit when it starts the power
/*
* ungate process. Loop till powergate START bit is asserted.
* The PMC deasserts the START bit when it starts the power
*/
* ungate process. Loop till powergate START bit is asserted.
do
{
*/
val
=
tegra_pmc_read_32
(
PMC_PWRGATE_TOGGLE
);
do
{
}
while
((
val
&
(
1U
<<
8
))
!=
0U
);
val
=
tegra_pmc_read_32
(
PMC_PWRGATE_TOGGLE
);
}
while
(
val
&
(
1
<<
8
));
/* loop till the CPU is power ungated */
do
{
/* loop till the CPU is power ungated */
val
=
tegra_pmc_read_32
(
PMC_PWRGATE_STATUS
);
do
{
}
while
((
val
&
(
1U
<<
pmc_cpu_powergate_id
[
cpu
]))
==
0U
);
val
=
tegra_pmc_read_32
(
PMC_PWRGATE_STATUS
);
}
}
while
((
val
&
(
1
<<
pmc_cpu_powergate_id
[
cpu
]))
==
0
);
}
}
/*******************************************************************************
/*******************************************************************************
...
@@ -69,9 +70,10 @@ void tegra_pmc_cpu_setup(uint64_t reset_addr)
...
@@ -69,9 +70,10 @@ void tegra_pmc_cpu_setup(uint64_t reset_addr)
{
{
uint32_t
val
;
uint32_t
val
;
tegra_pmc_write_32
(
PMC_SECURE_SCRATCH34
,
(
reset_addr
&
0xFFFFFFFF
)
|
1
);
tegra_pmc_write_32
(
PMC_SECURE_SCRATCH34
,
val
=
reset_addr
>>
32
;
((
uint32_t
)
reset_addr
&
0xFFFFFFFFU
)
|
1U
);
tegra_pmc_write_32
(
PMC_SECURE_SCRATCH35
,
val
&
0x7FF
);
val
=
(
uint32_t
)(
reset_addr
>>
32U
);
tegra_pmc_write_32
(
PMC_SECURE_SCRATCH35
,
val
&
0x7FFU
);
}
}
/*******************************************************************************
/*******************************************************************************
...
@@ -101,7 +103,7 @@ __dead2 void tegra_pmc_system_reset(void)
...
@@ -101,7 +103,7 @@ __dead2 void tegra_pmc_system_reset(void)
uint32_t
reg
;
uint32_t
reg
;
reg
=
tegra_pmc_read_32
(
PMC_CONFIG
);
reg
=
tegra_pmc_read_32
(
PMC_CONFIG
);
reg
|=
0x10
;
/* restart */
reg
|=
RESET_ENABLE
;
/* restart */
tegra_pmc_write_32
(
PMC_CONFIG
,
reg
);
tegra_pmc_write_32
(
PMC_CONFIG
,
reg
);
wfi
();
wfi
();
...
...
plat/nvidia/tegra/common/tegra_delay_timer.c
View file @
6de8b24f
/*
/*
* Copyright (c) 2015, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2015
-2017
, ARM Limited and Contributors. All rights reserved.
*
*
* SPDX-License-Identifier: BSD-3-Clause
* SPDX-License-Identifier: BSD-3-Clause
*/
*/
...
@@ -7,23 +7,24 @@
...
@@ -7,23 +7,24 @@
#include <delay_timer.h>
#include <delay_timer.h>
#include <mmio.h>
#include <mmio.h>
#include <tegra_def.h>
#include <tegra_def.h>
#include <tegra_private.h>
static
uint32_t
tegra_timerus_get_value
(
void
)
static
uint32_t
tegra_timerus_get_value
(
void
)
{
{
return
mmio_read_32
(
TEGRA_TMRUS_BASE
);
return
mmio_read_32
(
TEGRA_TMRUS_BASE
);
}
}
static
const
timer_ops_t
tegra_timer_ops
=
{
.
get_timer_value
=
tegra_timerus_get_value
,
.
clk_mult
=
1
,
.
clk_div
=
1
,
};
/*
/*
* Initialise the on-chip free rolling us counter as the delay
* Initialise the on-chip free rolling us counter as the delay
* timer.
* timer.
*/
*/
void
tegra_delay_timer_init
(
void
)
void
tegra_delay_timer_init
(
void
)
{
{
static
const
timer_ops_t
tegra_timer_ops
=
{
.
get_timer_value
=
tegra_timerus_get_value
,
.
clk_mult
=
1
,
.
clk_div
=
1
,
};
timer_init
(
&
tegra_timer_ops
);
timer_init
(
&
tegra_timer_ops
);
}
}
plat/nvidia/tegra/common/tegra_fiq_glue.c
View file @
6de8b24f
...
@@ -18,13 +18,13 @@
...
@@ -18,13 +18,13 @@
#include <tegra_def.h>
#include <tegra_def.h>
#include <tegra_private.h>
#include <tegra_private.h>
DEFINE_BAKERY_LOCK
(
tegra_fiq_lock
);
static
DEFINE_BAKERY_LOCK
(
tegra_fiq_lock
);
/*******************************************************************************
/*******************************************************************************
* Static variables
* Static variables
******************************************************************************/
******************************************************************************/
static
uint64_t
ns_fiq_handler_addr
;
static
uint64_t
ns_fiq_handler_addr
;
static
u
nsigned
in
t
fiq_handler_active
;
static
u
int32_
t
fiq_handler_active
;
static
pcpu_fiq_state_t
fiq_state
[
PLATFORM_CORE_COUNT
];
static
pcpu_fiq_state_t
fiq_state
[
PLATFORM_CORE_COUNT
];
/*******************************************************************************
/*******************************************************************************
...
@@ -37,7 +37,7 @@ static uint64_t tegra_fiq_interrupt_handler(uint32_t id,
...
@@ -37,7 +37,7 @@ static uint64_t tegra_fiq_interrupt_handler(uint32_t id,
{
{
cpu_context_t
*
ctx
=
cm_get_context
(
NON_SECURE
);
cpu_context_t
*
ctx
=
cm_get_context
(
NON_SECURE
);
el3_state_t
*
el3state_ctx
=
get_el3state_ctx
(
ctx
);
el3_state_t
*
el3state_ctx
=
get_el3state_ctx
(
ctx
);
int
cpu
=
plat_my_core_pos
();
u
int
32_t
cpu
=
plat_my_core_pos
();
uint32_t
irq
;
uint32_t
irq
;
bakery_lock_get
(
&
tegra_fiq_lock
);
bakery_lock_get
(
&
tegra_fiq_lock
);
...
@@ -52,22 +52,23 @@ static uint64_t tegra_fiq_interrupt_handler(uint32_t id,
...
@@ -52,22 +52,23 @@ static uint64_t tegra_fiq_interrupt_handler(uint32_t id,
* Save elr_el3 and spsr_el3 from the saved context, and overwrite
* Save elr_el3 and spsr_el3 from the saved context, and overwrite
* the context with the NS fiq_handler_addr and SPSR value.
* the context with the NS fiq_handler_addr and SPSR value.
*/
*/
fiq_state
[
cpu
].
elr_el3
=
read_ctx_reg
(
el3state_ctx
,
CTX_ELR_EL3
);
fiq_state
[
cpu
].
elr_el3
=
read_ctx_reg
(
(
el3state_ctx
)
,
(
uint32_t
)(
CTX_ELR_EL3
)
)
;
fiq_state
[
cpu
].
spsr_el3
=
read_ctx_reg
(
el3state_ctx
,
CTX_SPSR_EL3
);
fiq_state
[
cpu
].
spsr_el3
=
read_ctx_reg
(
(
el3state_ctx
)
,
(
uint32_t
)(
CTX_SPSR_EL3
)
)
;
/*
/*
* Set the new ELR to continue execution in the NS world using the
* Set the new ELR to continue execution in the NS world using the
* FIQ handler registered earlier.
* FIQ handler registered earlier.
*/
*/
assert
(
ns_fiq_handler_addr
);
assert
(
ns_fiq_handler_addr
);
write_ctx_reg
(
el3state_ctx
,
CTX_ELR_EL3
,
ns_fiq_handler_addr
);
write_ctx_reg
(
(
el3state_ctx
)
,
(
uint32_t
)(
CTX_ELR_EL3
)
,
(
ns_fiq_handler_addr
)
)
;
/*
/*
* Mark this interrupt as complete to avoid a FIQ storm.
* Mark this interrupt as complete to avoid a FIQ storm.
*/
*/
irq
=
plat_ic_acknowledge_interrupt
();
irq
=
plat_ic_acknowledge_interrupt
();
if
(
irq
<
1022
)
if
(
irq
<
1022
U
)
{
plat_ic_end_of_interrupt
(
irq
);
plat_ic_end_of_interrupt
(
irq
);
}
bakery_lock_release
(
&
tegra_fiq_lock
);
bakery_lock_release
(
&
tegra_fiq_lock
);
...
@@ -79,27 +80,27 @@ static uint64_t tegra_fiq_interrupt_handler(uint32_t id,
...
@@ -79,27 +80,27 @@ static uint64_t tegra_fiq_interrupt_handler(uint32_t id,
******************************************************************************/
******************************************************************************/
void
tegra_fiq_handler_setup
(
void
)
void
tegra_fiq_handler_setup
(
void
)
{
{
uint
64
_t
flags
;
uint
32
_t
flags
;
int
rc
;
int
32_t
rc
;
/* return if already registered */
/* return if already registered */
if
(
fiq_handler_active
)
if
(
fiq_handler_active
==
0U
)
{
return
;
/*
* Register an interrupt handler for FIQ interrupts generated for
/*
* NS interrupt sources
*
Register an interrupt handler for FIQ interrupts generated for
*
/
* NS interrupt sources
flags
=
0U
;
*/
set_interrupt_rm_flag
((
flags
),
(
NON_SECURE
));
flags
=
0
;
rc
=
register_interrupt_type_handler
(
INTR_TYPE_EL3
,
set_interrupt_rm_flag
(
flags
,
NON_SECURE
);
tegra_fiq_interrupt_handler
,
rc
=
register_interrupt_type_handler
(
INTR_TYPE_EL3
,
flags
);
tegra_fiq_interrupt_handler
,
if
(
rc
!=
0
)
{
flags
);
panic
(
);
if
(
rc
)
}
panic
();
/* handler is now active */
/*
handler
is now
active
*/
fiq_
handler
_
active
=
1
;
fiq_handler_active
=
1
;
}
}
}
/*******************************************************************************
/*******************************************************************************
...
@@ -113,26 +114,26 @@ void tegra_fiq_set_ns_entrypoint(uint64_t entrypoint)
...
@@ -113,26 +114,26 @@ void tegra_fiq_set_ns_entrypoint(uint64_t entrypoint)
/*******************************************************************************
/*******************************************************************************
* Handler to return the NS EL1/EL0 CPU context
* Handler to return the NS EL1/EL0 CPU context
******************************************************************************/
******************************************************************************/
int
tegra_fiq_get_intr_context
(
void
)
int
32_t
tegra_fiq_get_intr_context
(
void
)
{
{
cpu_context_t
*
ctx
=
cm_get_context
(
NON_SECURE
);
cpu_context_t
*
ctx
=
cm_get_context
(
NON_SECURE
);
gp_regs_t
*
gpregs_ctx
=
get_gpregs_ctx
(
ctx
);
gp_regs_t
*
gpregs_ctx
=
get_gpregs_ctx
(
ctx
);
el1_sys_regs_t
*
el1state_ctx
=
get_sysregs_ctx
(
ctx
);
const
el1_sys_regs_t
*
el1state_ctx
=
get_sysregs_ctx
(
ctx
);
int
cpu
=
plat_my_core_pos
();
u
int
32_t
cpu
=
plat_my_core_pos
();
uint64_t
val
;
uint64_t
val
;
/*
/*
* We store the ELR_EL3, SPSR_EL3, SP_EL0 and SP_EL1 registers so
* We store the ELR_EL3, SPSR_EL3, SP_EL0 and SP_EL1 registers so
* that el3_exit() sends these values back to the NS world.
* that el3_exit() sends these values back to the NS world.
*/
*/
write_ctx_reg
(
gpregs_ctx
,
CTX_GPREG_X0
,
fiq_state
[
cpu
].
elr_el3
);
write_ctx_reg
(
(
gpregs_ctx
)
,
(
uint32_t
)(
CTX_GPREG_X0
)
,
(
fiq_state
[
cpu
].
elr_el3
)
)
;
write_ctx_reg
(
gpregs_ctx
,
CTX_GPREG_X1
,
fiq_state
[
cpu
].
spsr_el3
);
write_ctx_reg
(
(
gpregs_ctx
)
,
(
uint32_t
)(
CTX_GPREG_X1
)
,
(
fiq_state
[
cpu
].
spsr_el3
)
)
;
val
=
read_ctx_reg
(
gpregs_ctx
,
CTX_GPREG_SP_EL0
);
val
=
read_ctx_reg
(
(
gpregs_ctx
)
,
(
uint32_t
)(
CTX_GPREG_SP_EL0
)
)
;
write_ctx_reg
(
gpregs_ctx
,
CTX_GPREG_X2
,
val
);
write_ctx_reg
(
(
gpregs_ctx
)
,
(
uint32_t
)(
CTX_GPREG_X2
)
,
(
val
)
)
;
val
=
read_ctx_reg
(
el1state_ctx
,
CTX_SP_EL1
);
val
=
read_ctx_reg
(
(
el1state_ctx
)
,
(
uint32_t
)(
CTX_SP_EL1
)
)
;
write_ctx_reg
(
gpregs_ctx
,
CTX_GPREG_X3
,
val
);
write_ctx_reg
(
(
gpregs_ctx
)
,
(
uint32_t
)(
CTX_GPREG_X3
)
,
(
val
)
)
;
return
0
;
return
0
;
}
}
Prev
1
2
3
4
Next
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