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
031d479d
Commit
031d479d
authored
Jan 12, 2021
by
bipin.ravi
Committed by
TrustedFirmware Code Review
Jan 12, 2021
Browse files
Merge "Workaround for Cortex A78 erratum 1941498" into integration
parents
6e886a47
e26c59d2
Changes
4
Hide whitespace changes
Inline
Side-by-side
docs/design/cpu-specific-build-macros.rst
View file @
031d479d
...
@@ -265,6 +265,9 @@ For Cortex-A78, the following errata build flags are defined :
...
@@ -265,6 +265,9 @@ For Cortex-A78, the following errata build flags are defined :
- ``ERRATA_A78_1688305``: This applies errata 1688305 workaround to Cortex-A78
- ``ERRATA_A78_1688305``: This applies errata 1688305 workaround to Cortex-A78
CPU. This needs to be enabled only for revision r0p0 - r1p0 of the CPU.
CPU. This needs to be enabled only for revision r0p0 - r1p0 of the CPU.
- ``ERRATA_A78_1941498``: This applies errata 1941498 workaround to Cortex-A78
CPU. This needs to be enabled for revisions r0p0, r1p0, and r1p1 of the CPU.
For Neoverse N1, the following errata build flags are defined :
For Neoverse N1, the following errata build flags are defined :
- ``ERRATA_N1_1073348``: This applies errata 1073348 workaround to Neoverse-N1
- ``ERRATA_N1_1073348``: This applies errata 1073348 workaround to Neoverse-N1
...
...
include/lib/cpus/aarch64/cortex_a78.h
View file @
031d479d
/*
/*
* Copyright (c) 2019-202
0
, ARM Limited. All rights reserved.
* Copyright (c) 2019-202
1
, ARM Limited. All rights reserved.
*
*
* SPDX-License-Identifier: BSD-3-Clause
* SPDX-License-Identifier: BSD-3-Clause
*/
*/
...
@@ -15,17 +15,18 @@
...
@@ -15,17 +15,18 @@
* CPU Extended Control register specific definitions.
* CPU Extended Control register specific definitions.
******************************************************************************/
******************************************************************************/
#define CORTEX_A78_CPUECTLR_EL1 S3_0_C15_C1_4
#define CORTEX_A78_CPUECTLR_EL1 S3_0_C15_C1_4
#define CORTEX_A78_CPUECTLR_EL1_BIT_8 (ULL(1) << 8)
/*******************************************************************************
/*******************************************************************************
* CPU Power Control register specific definitions
* CPU Power Control register specific definitions
******************************************************************************/
******************************************************************************/
#define CORTEX_A78_CPUPWRCTLR_EL1
S3_0_C15_C2_7
#define CORTEX_A78_CPUPWRCTLR_EL1 S3_0_C15_C2_7
#define CORTEX_A78_CPUPWRCTLR_EL1_CORE_PWRDN_EN_BIT U(1)
#define CORTEX_A78_CPUPWRCTLR_EL1_CORE_PWRDN_EN_BIT U(1)
/*******************************************************************************
/*******************************************************************************
* CPU Auxiliary Control register specific definitions.
* CPU Auxiliary Control register specific definitions.
******************************************************************************/
******************************************************************************/
#define CORTEX_A78_ACTLR_TAM_BIT
(ULL(1) << 30)
#define CORTEX_A78_ACTLR_TAM_BIT (ULL(1) << 30)
#define CORTEX_A78_ACTLR2_EL1 S3_0_C15_C1_1
#define CORTEX_A78_ACTLR2_EL1 S3_0_C15_C1_1
#define CORTEX_A78_ACTLR2_EL1_BIT_1 (ULL(1) << 1)
#define CORTEX_A78_ACTLR2_EL1_BIT_1 (ULL(1) << 1)
...
@@ -33,12 +34,12 @@
...
@@ -33,12 +34,12 @@
/*******************************************************************************
/*******************************************************************************
* CPU Activity Monitor Unit register specific definitions.
* CPU Activity Monitor Unit register specific definitions.
******************************************************************************/
******************************************************************************/
#define CPUAMCNTENCLR0_EL0
S3_3_C15_C2_4
#define CPUAMCNTENCLR0_EL0 S3_3_C15_C2_4
#define CPUAMCNTENSET0_EL0
S3_3_C15_C2_5
#define CPUAMCNTENSET0_EL0 S3_3_C15_C2_5
#define CPUAMCNTENCLR1_EL0
S3_3_C15_C3_0
#define CPUAMCNTENCLR1_EL0 S3_3_C15_C3_0
#define CPUAMCNTENSET1_EL0
S3_3_C15_C3_1
#define CPUAMCNTENSET1_EL0 S3_3_C15_C3_1
#define CORTEX_A78_AMU_GROUP0_MASK
U(0xF)
#define CORTEX_A78_AMU_GROUP0_MASK U(0xF)
#define CORTEX_A78_AMU_GROUP1_MASK
U(0x7)
#define CORTEX_A78_AMU_GROUP1_MASK U(0x7)
#endif
/* CORTEX_A78_H */
#endif
/* CORTEX_A78_H */
lib/cpus/aarch64/cortex_a78.S
View file @
031d479d
/*
/*
*
Copyright
(
c
)
2019
-
202
0
,
ARM
Limited
.
All
rights
reserved
.
*
Copyright
(
c
)
2019
-
202
1
,
ARM
Limited
.
All
rights
reserved
.
*
*
*
SPDX
-
License
-
Identifier
:
BSD
-
3
-
Clause
*
SPDX
-
License
-
Identifier
:
BSD
-
3
-
Clause
*/
*/
...
@@ -31,7 +31,7 @@ func errata_a78_1688305_wa
...
@@ -31,7 +31,7 @@ func errata_a78_1688305_wa
bl
check_errata_1688305
bl
check_errata_1688305
cbz
x0
,
1
f
cbz
x0
,
1
f
mrs
x1
,
CORTEX_A78_ACTLR2_EL1
mrs
x1
,
CORTEX_A78_ACTLR2_EL1
orr
x1
,
x1
,
CORTEX_A78_ACTLR2_EL1_BIT_1
orr
x1
,
x1
,
#
CORTEX_A78_ACTLR2_EL1_BIT_1
msr
CORTEX_A78_ACTLR2_EL1
,
x1
msr
CORTEX_A78_ACTLR2_EL1
,
x1
isb
isb
1
:
1
:
...
@@ -44,6 +44,34 @@ func check_errata_1688305
...
@@ -44,6 +44,34 @@ func check_errata_1688305
b
cpu_rev_var_ls
b
cpu_rev_var_ls
endfunc
check_errata_1688305
endfunc
check_errata_1688305
/
*
--------------------------------------------------
*
Errata
Workaround
for
Cortex
A78
Errata
#
1941498
.
*
This
applies
to
revisions
r0p0
,
r1p0
,
and
r1p1
.
*
x0
:
variant
[
4
:
7
]
and
revision
[
0
:
3
]
of
current
cpu
.
*
Shall
clobber
:
x0
-
x17
*
--------------------------------------------------
*/
func
errata_a78_1941498_wa
/
*
Compare
x0
against
revision
<=
r1p1
*/
mov
x17
,
x30
bl
check_errata_1941498
cbz
x0
,
1
f
/
*
Set
bit
8
in
ECTLR_EL1
*/
mrs
x1
,
CORTEX_A78_CPUECTLR_EL1
orr
x1
,
x1
,
#
CORTEX_A78_CPUECTLR_EL1_BIT_8
msr
CORTEX_A78_CPUECTLR_EL1
,
x1
isb
1
:
ret
x17
endfunc
errata_a78_1941498_wa
func
check_errata_1941498
/
*
Check
for
revision
<=
r1p1
,
might
need
to
be
updated
later
.
*/
mov
x1
,
#
0x11
b
cpu_rev_var_ls
endfunc
check_errata_1941498
/
*
-------------------------------------------------
/
*
-------------------------------------------------
*
The
CPU
Ops
reset
function
for
Cortex
-
A78
*
The
CPU
Ops
reset
function
for
Cortex
-
A78
*
-------------------------------------------------
*
-------------------------------------------------
...
@@ -58,6 +86,11 @@ func cortex_a78_reset_func
...
@@ -58,6 +86,11 @@ func cortex_a78_reset_func
bl
errata_a78_1688305_wa
bl
errata_a78_1688305_wa
#endif
#endif
#if ERRATA_A78_1941498
mov
x0
,
x18
bl
errata_a78_1941498_wa
#endif
#if ENABLE_AMU
#if ENABLE_AMU
/
*
Make
sure
accesses
from
EL0
/
EL1
and
EL2
are
not
trapped
to
EL3
*/
/
*
Make
sure
accesses
from
EL0
/
EL1
and
EL2
are
not
trapped
to
EL3
*/
mrs
x0
,
actlr_el3
mrs
x0
,
actlr_el3
...
@@ -113,6 +146,7 @@ func cortex_a78_errata_report
...
@@ -113,6 +146,7 @@ func cortex_a78_errata_report
*
checking
functions
of
each
errata
.
*
checking
functions
of
each
errata
.
*/
*/
report_errata
ERRATA_A78_1688305
,
cortex_a78
,
1688305
report_errata
ERRATA_A78_1688305
,
cortex_a78
,
1688305
report_errata
ERRATA_A78_1941498
,
cortex_a78
,
1941498
ldp
x8
,
x30
,
[
sp
],
#
16
ldp
x8
,
x30
,
[
sp
],
#
16
ret
ret
...
...
lib/cpus/cpu-ops.mk
View file @
031d479d
#
#
# Copyright (c) 2014-202
0
, ARM Limited and Contributors. All rights reserved.
# Copyright (c) 2014-202
1
, ARM Limited and Contributors. All rights reserved.
# Copyright (c) 2020, NVIDIA Corporation. All rights reserved.
# Copyright (c) 2020, NVIDIA Corporation. All rights reserved.
#
#
# SPDX-License-Identifier: BSD-3-Clause
# SPDX-License-Identifier: BSD-3-Clause
...
@@ -294,6 +294,10 @@ ERRATA_A77_1925769 ?=0
...
@@ -294,6 +294,10 @@ ERRATA_A77_1925769 ?=0
# to revisions r0p0 - r1p0 of the A78 cpu.
# to revisions r0p0 - r1p0 of the A78 cpu.
ERRATA_A78_1688305
?=
0
ERRATA_A78_1688305
?=
0
# Flag to apply erratum 1941498 workaround during reset. This erratum applies
# to revisions r0p0, r1p0, and r1p1 of the A78 cpu.
ERRATA_A78_1941498
?=
0
# Flag to apply T32 CLREX workaround during reset. This erratum applies
# Flag to apply T32 CLREX workaround during reset. This erratum applies
# only to r0p0 and r1p0 of the Neoverse N1 cpu.
# only to r0p0 and r1p0 of the Neoverse N1 cpu.
ERRATA_N1_1043202
?=
0
ERRATA_N1_1043202
?=
0
...
@@ -575,6 +579,10 @@ $(eval $(call add_define,ERRATA_A77_1925769))
...
@@ -575,6 +579,10 @@ $(eval $(call add_define,ERRATA_A77_1925769))
$(eval
$(call
assert_boolean,ERRATA_A78_1688305))
$(eval
$(call
assert_boolean,ERRATA_A78_1688305))
$(eval
$(call
add_define,ERRATA_A78_1688305))
$(eval
$(call
add_define,ERRATA_A78_1688305))
# Process ERRATA_A78_1941498 flag
$(eval
$(call
assert_boolean,ERRATA_A78_1941498))
$(eval
$(call
add_define,ERRATA_A78_1941498))
# Process ERRATA_N1_1043202 flag
# Process ERRATA_N1_1043202 flag
$(eval
$(call
assert_boolean,ERRATA_N1_1043202))
$(eval
$(call
assert_boolean,ERRATA_N1_1043202))
$(eval
$(call
add_define,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