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
b9d20d0e
Unverified
Commit
b9d20d0e
authored
Mar 13, 2019
by
Soby Mathew
Committed by
GitHub
Mar 13, 2019
Browse files
Merge pull request #1882 from ambroise-arm/av/a15-errata
Apply workarounds for errata of Cortex-A15
parents
046c21c2
5f2c690d
Changes
4
Hide whitespace changes
Inline
Side-by-side
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
...
...
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
******************************************************************************/
...
...
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
...
...
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))
...
...
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