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
0348ee49
Commit
0348ee49
authored
Dec 30, 2019
by
Manish Pandey
Committed by
TrustedFirmware Code Review
Dec 30, 2019
Browse files
Merge "Workaround for Hercules erratum 1688305" into integration
parents
2b4c5e4b
83e95524
Changes
4
Hide whitespace changes
Inline
Side-by-side
docs/design/cpu-specific-build-macros.rst
View file @
0348ee49
...
...
@@ -227,6 +227,12 @@ For Cortex-A76, the following errata build flags are defined :
- ``ERRATA_A76_1275112``: This applies errata 1275112 workaround to Cortex-A76
CPU. This needs to be enabled only for revision <= r3p0 of the CPU.
For Hercules, the following errata build flags are defined :
- ``ERRATA_HERCULES_1688305``: This applies errata 1688305 workaround to
Hercules CPU. This needs to be enabled only for revision r0p0 - r1p0 of
the CPU.
For Neoverse N1, the following errata build flags are defined :
- ``ERRATA_N1_1073348``: This applies errata 1073348 workaround to Neoverse-N1
...
...
include/lib/cpus/aarch64/cortex_hercules.h
View file @
0348ee49
...
...
@@ -27,6 +27,9 @@
******************************************************************************/
#define CORTEX_HERCULES_ACTLR_TAM_BIT (ULL(1) << 30)
#define CORTEX_HERCULES_ACTLR2_EL1 S3_0_C15_C1_1
#define CORTEX_HERCULES_ACTLR2_EL1_BIT_1 (ULL(1) << 1)
/*******************************************************************************
* CPU Activity Monitor Unit register specific definitions.
******************************************************************************/
...
...
lib/cpus/aarch64/cortex_hercules.S
View file @
0348ee49
...
...
@@ -16,12 +16,49 @@
#error "cortex_hercules must be compiled with HW_ASSISTED_COHERENCY enabled"
#endif
/*
--------------------------------------------------
*
Errata
Workaround
for
Hercules
Erratum
1688305
.
*
This
applies
to
revision
r0p0
and
r1p0
of
Hercules
.
*
Inputs
:
*
x0
:
variant
[
4
:
7
]
and
revision
[
0
:
3
]
of
current
cpu
.
*
Shall
clobber
:
x0
-
x17
*
--------------------------------------------------
*/
func
errata_hercules_1688305_wa
/
*
Compare
x0
against
revision
r1p0
*/
mov
x17
,
x30
bl
check_errata_1688305
cbz
x0
,
1
f
mrs
x1
,
CORTEX_HERCULES_ACTLR2_EL1
orr
x1
,
x1
,
CORTEX_HERCULES_ACTLR2_EL1_BIT_1
msr
CORTEX_HERCULES_ACTLR2_EL1
,
x1
isb
1
:
ret
x17
endfunc
errata_hercules_1688305_wa
func
check_errata_1688305
/
*
Applies
to
r0p0
and
r1p0
*/
mov
x1
,
#
0x10
b
cpu_rev_var_ls
endfunc
check_errata_1688305
/
*
-------------------------------------------------
*
The
CPU
Ops
reset
function
for
Cortex
-
Hercules
*
-------------------------------------------------
*/
#if ENABLE_AMU
func
cortex_hercules_reset_func
mov
x19
,
x30
bl
cpu_get_rev_var
mov
x18
,
x0
#if ERRATA_HERCULES_1688305
mov
x0
,
x18
bl
errata_hercules_1688305_wa
#endif
#if ENABLE_AMU
/
*
Make
sure
accesses
from
EL0
/
EL1
and
EL2
are
not
trapped
to
EL3
*/
mrs
x0
,
actlr_el3
bic
x0
,
x0
,
#
CORTEX_HERCULES_ACTLR_TAM_BIT
...
...
@@ -39,11 +76,11 @@ func cortex_hercules_reset_func
/
*
Enable
group1
counters
*/
mov
x0
,
#
CORTEX_HERCULES_AMU_GROUP1_MASK
msr
CPUAMCNTENSET1_EL0
,
x0
isb
#endif
ret
isb
ret
x19
endfunc
cortex_hercules_reset_func
#endif
/
*
---------------------------------------------
*
HW
will
do
the
cache
maintenance
while
powering
down
...
...
@@ -66,6 +103,18 @@ endfunc cortex_hercules_core_pwr_dwn
*/
#if REPORT_ERRATA
func
cortex_hercules_errata_report
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_HERCULES_1688305
,
cortex_hercules
,
1688305
ldp
x8
,
x30
,
[
sp
],
#
16
ret
endfunc
cortex_hercules_errata_report
#endif
...
...
@@ -89,12 +138,6 @@ func cortex_hercules_cpu_reg_dump
ret
endfunc
cortex_hercules_cpu_reg_dump
#if ENABLE_AMU
#define HERCULES_RESET_FUNC cortex_hercules_reset_func
#else
#define HERCULES_RESET_FUNC CPU_NO_RESET_FUNC
#endif
declare_cpu_ops
cortex_hercules
,
CORTEX_HERCULES_MIDR
,
\
HERCULES_RESET_FUNC
,
\
cortex_hercules_reset_func
,
\
cortex_hercules_core_pwr_dwn
lib/cpus/cpu-ops.mk
View file @
0348ee49
...
...
@@ -234,6 +234,10 @@ ERRATA_A76_1275112 ?=0
# only to revision <= r3p0 of the Cortex A76 cpu.
ERRATA_A76_1286807
?=
0
# Flag to apply erratum 1688305 workaround during reset. This erratum applies
# to revisions r0p0 - r1p0 of the Hercules cpu.
ERRATA_HERCULES_1688305
?=
0
# Flag to apply T32 CLREX workaround during reset. This erratum applies
# only to r0p0 and r1p0 of the Neoverse N1 cpu.
ERRATA_N1_1043202
?=
1
...
...
@@ -467,6 +471,10 @@ $(eval $(call add_define,ERRATA_A76_1275112))
$(eval
$(call
assert_boolean,ERRATA_A76_1286807))
$(eval
$(call
add_define,ERRATA_A76_1286807))
# Process ERRATA_HERCULES_1688305 flag
$(eval
$(call
assert_boolean,ERRATA_HERCULES_1688305))
$(eval
$(call
add_define,ERRATA_HERCULES_1688305))
# Process ERRATA_N1_1043202 flag
$(eval
$(call
assert_boolean,ERRATA_N1_1043202))
$(eval
$(call
add_define,ERRATA_N1_1043202))
...
...
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