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
3c9962a1
Commit
3c9962a1
authored
Aug 31, 2021
by
Madhukar Pappireddy
Committed by
TrustedFirmware Code Review
Aug 31, 2021
Browse files
Merge "errata: workaround for Neoverse-N2 errata 2002655" into integration
parents
523569d0
9380f754
Changes
3
Hide whitespace changes
Inline
Side-by-side
docs/design/cpu-specific-build-macros.rst
View file @
3c9962a1
...
...
@@ -333,6 +333,11 @@ For Neoverse N1, the following errata build flags are defined :
CPU. This needs to be enabled for revisions r3p0, r3p1, r4p0, and r4p1, for
revisions r0p0, r1p0, and r2p0 there is no workaround.
For Neoverse N2, the following errata build flags are defined :
- ``ERRATA_N2_2002655``: This applies errata 2002655 workaround to Neoverse-N2
CPU. This needs to be enabled for revision r0p0 of the CPU, it is still open.
For Neoverse V1, the following errata build flags are defined :
- ``ERRATA_V1_1774420``: This applies errata 1774420 workaround to Neoverse-V1
...
...
lib/cpus/aarch64/neoverse_n2.S
View file @
3c9962a1
...
...
@@ -19,11 +19,55 @@
#error "Neoverse-N2 supports only AArch64. Compile with CTX_INCLUDE_AARCH32_REGS=0"
#endif
/*
--------------------------------------------------
*
Errata
Workaround
for
Neoverse
N2
Erratum
2002655
.
*
This
applies
to
revision
r0p0
of
Neoverse
N2
.
it
is
still
open
.
*
Inputs
:
*
x0
:
variant
[
4
:
7
]
and
revision
[
0
:
3
]
of
current
cpu
.
*
Shall
clobber
:
x0
-
x17
*
--------------------------------------------------
*/
func
errata_n2_2002655_wa
/
*
Check
revision
.
*/
mov
x17
,
x30
bl
check_errata_2002655
cbz
x0
,
1
f
/
*
Apply
instruction
patching
sequence
*/
ldr
x0
,=
0x6
msr
S3_6_c15_c8_0
,
x0
ldr
x0
,=
0xF3A08002
msr
S3_6_c15_c8_2
,
x0
ldr
x0
,=
0xFFF0F7FE
msr
S3_6_c15_c8_3
,
x0
ldr
x0
,=
0x40000001003ff
msr
S3_6_c15_c8_1
,
x0
ldr
x0
,=
0x7
msr
S3_6_c15_c8_0
,
x0
ldr
x0
,=
0xBF200000
msr
S3_6_c15_c8_2
,
x0
ldr
x0
,=
0xFFEF0000
msr
S3_6_c15_c8_3
,
x0
ldr
x0
,=
0x40000001003f3
msr
S3_6_c15_c8_1
,
x0
isb
1
:
ret
x17
endfunc
errata_n2_2002655_wa
func
check_errata_2002655
/
*
Applies
to
r0p0
*/
mov
x1
,
#
0x00
b
cpu_rev_var_ls
endfunc
check_errata_2002655
/
*
-------------------------------------------------
*
The
CPU
Ops
reset
function
for
Neoverse
N2
.
*
-------------------------------------------------
*/
func
neoverse_n2_reset_func
mov
x19
,
x30
/
*
Check
if
the
PE
implements
SSBS
*/
mrs
x0
,
id_aa64pfr1_el1
tst
x0
,
#(
ID_AA64PFR1_EL1_SSBS_MASK
<<
ID_AA64PFR1_EL1_SSBS_SHIFT
)
...
...
@@ -58,8 +102,16 @@ func neoverse_n2_reset_func
msr
NEOVERSE_N2_CPUECTLR_EL1
,
x0
#endif
bl
cpu_get_rev_var
mov
x18
,
x0
#if ERRATA_N2_2002655
mov
x0
,
x18
bl
errata_n2_2002655_wa
#endif
isb
ret
ret
x19
endfunc
neoverse_n2_reset_func
func
neoverse_n2_core_pwr_dwn
...
...
@@ -80,7 +132,18 @@ endfunc neoverse_n2_core_pwr_dwn
*
Errata
printing
function
for
Neoverse
N2
cores
.
Must
follow
AAPCS
.
*/
func
neoverse_n2_errata_report
/
*
No
errata
reported
for
Neoverse
N2
cores
*/
stp
x8
,
x30
,
[
sp
,
#-
16
]!
bl
cpu_get_rev_var
mov
x8
,
x0
/
*
*
Report
all
errata
.
The
revision
-
variant
information
is
passed
to
*
checking
functions
of
each
errata
.
*/
report_errata
ERRATA_N2_2002655
,
neoverse_n2
,
2002655
ldp
x8
,
x30
,
[
sp
],
#
16
ret
endfunc
neoverse_n2_errata_report
#endif
...
...
lib/cpus/cpu-ops.mk
View file @
3c9962a1
...
...
@@ -380,6 +380,10 @@ ERRATA_N1_1868343 ?=0
# exists in revisions r0p0, r1p0, and r2p0 as well but there is no workaround.
ERRATA_N1_1946160
?=
0
# Flag to apply erratum 2002655 workaround during reset. This erratum applies
# to revisions r0p0 of the Neoverse-N2 cpu, it is still open.
ERRATA_N2_2002655
?=
0
# Flag to apply erratum 1774420 workaround during reset. This erratum applies
# to revisions r0p0 and r1p0 of the Neoverse V1 core, and was fixed in r1p1.
ERRATA_V1_1774420
?=
0
...
...
@@ -730,6 +734,10 @@ $(eval $(call add_define,ERRATA_N1_1868343))
$(eval
$(call
assert_boolean,ERRATA_N1_1946160))
$(eval
$(call
add_define,ERRATA_N1_1946160))
# Process ERRATA_N2_2002655 flag
$(eval
$(call
assert_boolean,ERRATA_N2_2002655))
$(eval
$(call
add_define,ERRATA_N2_2002655))
# Process ERRATA_V1_1774420 flag
$(eval
$(call
assert_boolean,ERRATA_V1_1774420))
$(eval
$(call
add_define,ERRATA_V1_1774420))
...
...
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