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
b9d20d0e
Unverified
Commit
b9d20d0e
authored
6 years ago
by
Soby Mathew
Committed by
GitHub
6 years ago
Browse files
Options
Download
Plain Diff
Merge pull request #1882 from ambroise-arm/av/a15-errata
Apply workarounds for errata of Cortex-A15
parents
046c21c2
5f2c690d
master
v2.5
v2.5-rc1
v2.5-rc0
v2.4
v2.4-rc2
v2.4-rc1
v2.4-rc0
v2.3
v2.3-rc2
v2.3-rc1
v2.3-rc0
v2.2
v2.2-rc2
v2.2-rc1
v2.2-rc0
v2.1
v2.1-rc1
v2.1-rc0
arm_cca_v0.2
arm_cca_v0.1
No related merge requests found
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
docs/cpu-specific-build-macros.rst
+8
-0
docs/cpu-specific-build-macros.rst
include/lib/cpus/aarch32/cortex_a15.h
+7
-0
include/lib/cpus/aarch32/cortex_a15.h
lib/cpus/aarch32/cortex_a15.S
+62
-1
lib/cpus/aarch32/cortex_a15.S
lib/cpus/cpu-ops.mk
+16
-0
lib/cpus/cpu-ops.mk
with
93 additions
and
1 deletion
+93
-1
docs/cpu-specific-build-macros.rst
View file @
b9d20d0e
...
...
@@ -71,6 +71,14 @@ for it to specify which errata workarounds should be enabled or not.
The value of the build flags is 0 by default, that is, disabled. A value of 1
will enable it.
For Cortex-A15, the following errata build flags are defined :
- ``ERRATA_A15_816470``: This applies errata 816470 workaround to Cortex-A15
CPU. This needs to be enabled only for revision >= r3p0 of the CPU.
- ``ERRATA_A15_827671``: This applies errata 827671 workaround to Cortex-A15
CPU. This needs to be enabled only for revision >= r3p0 of the CPU.
For Cortex-A53, the following errata build flags are defined :
- ``ERRATA_A53_819472``: This applies errata 819472 workaround to all
...
...
This diff is collapsed.
Click to expand it.
include/lib/cpus/aarch32/cortex_a15.h
View file @
b9d20d0e
...
...
@@ -9,6 +9,13 @@
#include <lib/utils_def.h>
/*******************************************************************************
* Auxiliary Control Register 2 specific definitions.
******************************************************************************/
#define CORTEX_A15_ACTLR2 p15, 1, c15, c0, 4
#define CORTEX_A15_ACTLR2_INV_DCC_BIT (U(1) << 0)
/*******************************************************************************
* Cortex-A15 midr with version/revision set to 0
******************************************************************************/
...
...
This diff is collapsed.
Click to expand it.
lib/cpus/aarch32/cortex_a15.S
View file @
b9d20d0e
/*
*
Copyright
(
c
)
2016
-
201
8
,
ARM
Limited
and
Contributors
.
All
rights
reserved
.
*
Copyright
(
c
)
2016
-
201
9
,
ARM
Limited
and
Contributors
.
All
rights
reserved
.
*
*
SPDX
-
License
-
Identifier
:
BSD
-
3
-
Clause
*/
...
...
@@ -29,6 +29,13 @@ func cortex_a15_disable_smp
bic
r0
,
#
CORTEX_A15_ACTLR_SMP_BIT
stcopr
r0
,
ACTLR
isb
#if ERRATA_A15_816470
/
*
*
Invalidate
any
TLB
address
*/
mov
r0
,
#
0
stcopr
r0
,
TLBIMVA
#endif
dsb
sy
bx
lr
endfunc
cortex_a15_disable_smp
...
...
@@ -41,6 +48,49 @@ func cortex_a15_enable_smp
bx
lr
endfunc
cortex_a15_enable_smp
/
*
----------------------------------------------------
*
Errata
Workaround
for
Cortex
A15
Errata
#
816470
.
*
This
applies
only
to
revision
>=
r3p0
of
Cortex
A15
.
*
----------------------------------------------------
*/
func
check_errata_816470
/
*
*
Even
though
this
is
only
needed
for
revision
>=
r3p0
,
it
is
always
*
applied
because
of
the
low
cost
of
the
workaround
.
*/
mov
r0
,
#
ERRATA_APPLIES
bx
lr
endfunc
check_errata_816470
/
*
----------------------------------------------------
*
Errata
Workaround
for
Cortex
A15
Errata
#
827671
.
*
This
applies
only
to
revision
>=
r3p0
of
Cortex
A15
.
*
Inputs
:
*
r0
:
variant
[
4
:
7
]
and
revision
[
0
:
3
]
of
current
cpu
.
*
Shall
clobber
:
r0
-
r3
*
----------------------------------------------------
*/
func
errata_a15_827671_wa
/
*
*
Compare
r0
against
revision
r3p0
*/
mov
r2
,
lr
bl
check_errata_827671
cmp
r0
,
#
ERRATA_NOT_APPLIES
beq
1
f
ldcopr
r0
,
CORTEX_A15_ACTLR2
orr
r0
,
#
CORTEX_A15_ACTLR2_INV_DCC_BIT
stcopr
r0
,
CORTEX_A15_ACTLR2
isb
1
:
bx
r2
endfunc
errata_a15_827671_wa
func
check_errata_827671
mov
r1
,
#
0x30
b
cpu_rev_var_hs
endfunc
check_errata_827671
func
check_errata_cve_2017_5715
#if WORKAROUND_CVE_2017_5715
mov
r0
,
#
ERRATA_APPLIES
...
...
@@ -64,6 +114,8 @@ func cortex_a15_errata_report
*
Report
all
errata
.
The
revision
-
variant
information
is
passed
to
*
checking
functions
of
each
errata
.
*/
report_errata
ERRATA_A15_816470
,
cortex_a15
,
816470
report_errata
ERRATA_A15_827671
,
cortex_a15
,
827671
report_errata
WORKAROUND_CVE_2017_5715
,
cortex_a15
,
cve_2017_5715
pop
{
r12
,
lr
}
...
...
@@ -72,6 +124,13 @@ endfunc cortex_a15_errata_report
#endif
func
cortex_a15_reset_func
mov
r5
,
lr
bl
cpu_get_rev_var
#if ERRATA_A15_827671
bl
errata_a15_827671_wa
#endif
#if IMAGE_BL32 && WORKAROUND_CVE_2017_5715
ldcopr
r0
,
ACTLR
orr
r0
,
#
CORTEX_A15_ACTLR_INV_BTB_BIT
...
...
@@ -81,6 +140,8 @@ func cortex_a15_reset_func
stcopr
r0
,
MVBAR
/
*
isb
will
be
applied
in
the
course
of
the
reset
func
*/
#endif
mov
lr
,
r5
b
cortex_a15_enable_smp
endfunc
cortex_a15_reset_func
...
...
This diff is collapsed.
Click to expand it.
lib/cpus/cpu-ops.mk
View file @
b9d20d0e
...
...
@@ -53,6 +53,14 @@ endif
# These should be enabled by the platform if the erratum workaround needs to be
# applied.
# Flag to apply erratum 816470 workaround during power down. This erratum
# applies only to revision >= r3p0 of the Cortex A15 cpu.
ERRATA_A15_816470
?=
0
# Flag to apply erratum 827671 workaround during reset. This erratum applies
# only to revision >= r3p0 of the Cortex A15 cpu.
ERRATA_A15_827671
?=
0
# Flag to apply erratum 819472 workaround during reset. This erratum applies
# only to revision <= r0p1 of the Cortex A53 cpu.
ERRATA_A53_819472
?=
0
...
...
@@ -196,6 +204,14 @@ ERRATA_N1_1043202 ?=1
# higher DSU power consumption on idle.
ERRATA_DSU_936184
?=
0
# Process ERRATA_A15_816470 flag
$(eval
$(call
assert_boolean,ERRATA_A15_816470))
$(eval
$(call
add_define,ERRATA_A15_816470))
# Process ERRATA_A15_827671 flag
$(eval
$(call
assert_boolean,ERRATA_A15_827671))
$(eval
$(call
add_define,ERRATA_A15_827671))
# Process ERRATA_A53_819472 flag
$(eval
$(call
assert_boolean,ERRATA_A53_819472))
$(eval
$(call
add_define,ERRATA_A53_819472))
...
...
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