Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
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
5 years ago
by
Manish Pandey
Committed by
TrustedFirmware Code Review
5 years ago
Browse files
Options
Download
Plain Diff
Merge "Workaround for Hercules erratum 1688305" into integration
parents
2b4c5e4b
83e95524
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
docs/design/cpu-specific-build-macros.rst
+6
-0
docs/design/cpu-specific-build-macros.rst
include/lib/cpus/aarch64/cortex_hercules.h
+3
-0
include/lib/cpus/aarch64/cortex_hercules.h
lib/cpus/aarch64/cortex_hercules.S
+54
-11
lib/cpus/aarch64/cortex_hercules.S
lib/cpus/cpu-ops.mk
+8
-0
lib/cpus/cpu-ops.mk
with
71 additions
and
11 deletions
+71
-11
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
...
...
This diff is collapsed.
Click to expand it.
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.
******************************************************************************/
...
...
This diff is collapsed.
Click to expand it.
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
This diff is collapsed.
Click to expand it.
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))
...
...
This diff is collapsed.
Click to expand it.
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
Menu
Projects
Groups
Snippets
Help