xref: /rk3399_ARM-atf/docs/design/cpu-specific-build-macros.rst (revision 40d553cfde38d4f68449c62967cd1ce0d6478750)
1*40d553cfSPaul BeesleyArm CPU Specific Build Macros
2*40d553cfSPaul Beesley=============================
3*40d553cfSPaul Beesley
4*40d553cfSPaul Beesley
5*40d553cfSPaul Beesley
6*40d553cfSPaul Beesley
7*40d553cfSPaul Beesley.. contents::
8*40d553cfSPaul Beesley
9*40d553cfSPaul BeesleyThis document describes the various build options present in the CPU specific
10*40d553cfSPaul Beesleyoperations framework to enable errata workarounds and to enable optimizations
11*40d553cfSPaul Beesleyfor a specific CPU on a platform.
12*40d553cfSPaul Beesley
13*40d553cfSPaul BeesleySecurity Vulnerability Workarounds
14*40d553cfSPaul Beesley----------------------------------
15*40d553cfSPaul Beesley
16*40d553cfSPaul BeesleyTF-A exports a series of build flags which control which security
17*40d553cfSPaul Beesleyvulnerability workarounds should be applied at runtime.
18*40d553cfSPaul Beesley
19*40d553cfSPaul Beesley-  ``WORKAROUND_CVE_2017_5715``: Enables the security workaround for
20*40d553cfSPaul Beesley   `CVE-2017-5715`_. This flag can be set to 0 by the platform if none
21*40d553cfSPaul Beesley   of the PEs in the system need the workaround. Setting this flag to 0 provides
22*40d553cfSPaul Beesley   no performance benefit for non-affected platforms, it just helps to comply
23*40d553cfSPaul Beesley   with the recommendation in the spec regarding workaround discovery.
24*40d553cfSPaul Beesley   Defaults to 1.
25*40d553cfSPaul Beesley
26*40d553cfSPaul Beesley-  ``WORKAROUND_CVE_2018_3639``: Enables the security workaround for
27*40d553cfSPaul Beesley   `CVE-2018-3639`_. Defaults to 1. The TF-A project recommends to keep
28*40d553cfSPaul Beesley   the default value of 1 even on platforms that are unaffected by
29*40d553cfSPaul Beesley   CVE-2018-3639, in order to comply with the recommendation in the spec
30*40d553cfSPaul Beesley   regarding workaround discovery.
31*40d553cfSPaul Beesley
32*40d553cfSPaul Beesley-  ``DYNAMIC_WORKAROUND_CVE_2018_3639``: Enables dynamic mitigation for
33*40d553cfSPaul Beesley   `CVE-2018-3639`_. This build option should be set to 1 if the target
34*40d553cfSPaul Beesley   platform contains at least 1 CPU that requires dynamic mitigation.
35*40d553cfSPaul Beesley   Defaults to 0.
36*40d553cfSPaul Beesley
37*40d553cfSPaul BeesleyCPU Errata Workarounds
38*40d553cfSPaul Beesley----------------------
39*40d553cfSPaul Beesley
40*40d553cfSPaul BeesleyTF-A exports a series of build flags which control the errata workarounds that
41*40d553cfSPaul Beesleyare applied to each CPU by the reset handler. The errata details can be found
42*40d553cfSPaul Beesleyin the CPU specific errata documents published by Arm:
43*40d553cfSPaul Beesley
44*40d553cfSPaul Beesley-  `Cortex-A53 MPCore Software Developers Errata Notice`_
45*40d553cfSPaul Beesley-  `Cortex-A57 MPCore Software Developers Errata Notice`_
46*40d553cfSPaul Beesley-  `Cortex-A72 MPCore Software Developers Errata Notice`_
47*40d553cfSPaul Beesley
48*40d553cfSPaul BeesleyThe errata workarounds are implemented for a particular revision or a set of
49*40d553cfSPaul Beesleyprocessor revisions. This is checked by the reset handler at runtime. Each
50*40d553cfSPaul Beesleyerrata workaround is identified by its ``ID`` as specified in the processor's
51*40d553cfSPaul Beesleyerrata notice document. The format of the define used to enable/disable the
52*40d553cfSPaul Beesleyerrata workaround is ``ERRATA_<Processor name>_<ID>``, where the ``Processor name``
53*40d553cfSPaul Beesleyis for example ``A57`` for the ``Cortex_A57`` CPU.
54*40d553cfSPaul Beesley
55*40d553cfSPaul BeesleyRefer to the section *CPU errata status reporting* in
56*40d553cfSPaul Beesley`Firmware Design guide`_ for information on how to write errata workaround
57*40d553cfSPaul Beesleyfunctions.
58*40d553cfSPaul Beesley
59*40d553cfSPaul BeesleyAll workarounds are disabled by default. The platform is responsible for
60*40d553cfSPaul Beesleyenabling these workarounds according to its requirement by defining the
61*40d553cfSPaul Beesleyerrata workaround build flags in the platform specific makefile. In case
62*40d553cfSPaul Beesleythese workarounds are enabled for the wrong CPU revision then the errata
63*40d553cfSPaul Beesleyworkaround is not applied. In the DEBUG build, this is indicated by
64*40d553cfSPaul Beesleyprinting a warning to the crash console.
65*40d553cfSPaul Beesley
66*40d553cfSPaul BeesleyIn the current implementation, a platform which has more than 1 variant
67*40d553cfSPaul Beesleywith different revisions of a processor has no runtime mechanism available
68*40d553cfSPaul Beesleyfor it to specify which errata workarounds should be enabled or not.
69*40d553cfSPaul Beesley
70*40d553cfSPaul BeesleyThe value of the build flags is 0 by default, that is, disabled. A value of 1
71*40d553cfSPaul Beesleywill enable it.
72*40d553cfSPaul Beesley
73*40d553cfSPaul BeesleyFor Cortex-A9, the following errata build flags are defined :
74*40d553cfSPaul Beesley
75*40d553cfSPaul Beesley-  ``ERRATA_A9_794073``: This applies errata 794073 workaround to Cortex-A9
76*40d553cfSPaul Beesley   CPU. This needs to be enabled for all revisions of the CPU.
77*40d553cfSPaul Beesley
78*40d553cfSPaul BeesleyFor Cortex-A15, the following errata build flags are defined :
79*40d553cfSPaul Beesley
80*40d553cfSPaul Beesley-  ``ERRATA_A15_816470``: This applies errata 816470 workaround to Cortex-A15
81*40d553cfSPaul Beesley   CPU. This needs to be enabled only for revision >= r3p0 of the CPU.
82*40d553cfSPaul Beesley
83*40d553cfSPaul Beesley-  ``ERRATA_A15_827671``: This applies errata 827671 workaround to Cortex-A15
84*40d553cfSPaul Beesley   CPU. This needs to be enabled only for revision >= r3p0 of the CPU.
85*40d553cfSPaul Beesley
86*40d553cfSPaul BeesleyFor Cortex-A17, the following errata build flags are defined :
87*40d553cfSPaul Beesley
88*40d553cfSPaul Beesley-  ``ERRATA_A17_852421``: This applies errata 852421 workaround to Cortex-A17
89*40d553cfSPaul Beesley   CPU. This needs to be enabled only for revision <= r1p2 of the CPU.
90*40d553cfSPaul Beesley
91*40d553cfSPaul Beesley-  ``ERRATA_A17_852423``: This applies errata 852423 workaround to Cortex-A17
92*40d553cfSPaul Beesley   CPU. This needs to be enabled only for revision <= r1p2 of the CPU.
93*40d553cfSPaul Beesley
94*40d553cfSPaul BeesleyFor Cortex-A35, the following errata build flags are defined :
95*40d553cfSPaul Beesley
96*40d553cfSPaul Beesley-  ``ERRATA_A35_855472``: This applies errata 855472 workaround to Cortex-A35
97*40d553cfSPaul Beesley   CPUs. This needs to be enabled only for revision r0p0 of Cortex-A35.
98*40d553cfSPaul Beesley
99*40d553cfSPaul BeesleyFor Cortex-A53, the following errata build flags are defined :
100*40d553cfSPaul Beesley
101*40d553cfSPaul Beesley-  ``ERRATA_A53_819472``: This applies errata 819472 workaround to all
102*40d553cfSPaul Beesley   CPUs. This needs to be enabled only for revision <= r0p1 of Cortex-A53.
103*40d553cfSPaul Beesley
104*40d553cfSPaul Beesley-  ``ERRATA_A53_824069``: This applies errata 824069 workaround to all
105*40d553cfSPaul Beesley   CPUs. This needs to be enabled only for revision <= r0p2 of Cortex-A53.
106*40d553cfSPaul Beesley
107*40d553cfSPaul Beesley-  ``ERRATA_A53_826319``: This applies errata 826319 workaround to Cortex-A53
108*40d553cfSPaul Beesley   CPU. This needs to be enabled only for revision <= r0p2 of the CPU.
109*40d553cfSPaul Beesley
110*40d553cfSPaul Beesley-  ``ERRATA_A53_827319``: This applies errata 827319 workaround to all
111*40d553cfSPaul Beesley   CPUs. This needs to be enabled only for revision <= r0p2 of Cortex-A53.
112*40d553cfSPaul Beesley
113*40d553cfSPaul Beesley-  ``ERRATA_A53_835769``: This applies erratum 835769 workaround at compile and
114*40d553cfSPaul Beesley   link time to Cortex-A53 CPU. This needs to be enabled for some variants of
115*40d553cfSPaul Beesley   revision <= r0p4. This workaround can lead the linker to create ``*.stub``
116*40d553cfSPaul Beesley   sections.
117*40d553cfSPaul Beesley
118*40d553cfSPaul Beesley-  ``ERRATA_A53_836870``: This applies errata 836870 workaround to Cortex-A53
119*40d553cfSPaul Beesley   CPU. This needs to be enabled only for revision <= r0p3 of the CPU. From
120*40d553cfSPaul Beesley   r0p4 and onwards, this errata is enabled by default in hardware.
121*40d553cfSPaul Beesley
122*40d553cfSPaul Beesley-  ``ERRATA_A53_843419``: This applies erratum 843419 workaround at link time
123*40d553cfSPaul Beesley   to Cortex-A53 CPU.  This needs to be enabled for some variants of revision
124*40d553cfSPaul Beesley   <= r0p4. This workaround can lead the linker to emit ``*.stub`` sections
125*40d553cfSPaul Beesley   which are 4kB aligned.
126*40d553cfSPaul Beesley
127*40d553cfSPaul Beesley-  ``ERRATA_A53_855873``: This applies errata 855873 workaround to Cortex-A53
128*40d553cfSPaul Beesley   CPUs. Though the erratum is present in every revision of the CPU,
129*40d553cfSPaul Beesley   this workaround is only applied to CPUs from r0p3 onwards, which feature
130*40d553cfSPaul Beesley   a chicken bit in CPUACTLR_EL1 to enable a hardware workaround.
131*40d553cfSPaul Beesley   Earlier revisions of the CPU have other errata which require the same
132*40d553cfSPaul Beesley   workaround in software, so they should be covered anyway.
133*40d553cfSPaul Beesley
134*40d553cfSPaul BeesleyFor Cortex-A55, the following errata build flags are defined :
135*40d553cfSPaul Beesley
136*40d553cfSPaul Beesley-  ``ERRATA_A55_768277``: This applies errata 768277 workaround to Cortex-A55
137*40d553cfSPaul Beesley   CPU. This needs to be enabled only for revision r0p0 of the CPU.
138*40d553cfSPaul Beesley
139*40d553cfSPaul Beesley-  ``ERRATA_A55_778703``: This applies errata 778703 workaround to Cortex-A55
140*40d553cfSPaul Beesley   CPU. This needs to be enabled only for revision r0p0 of the CPU.
141*40d553cfSPaul Beesley
142*40d553cfSPaul Beesley-  ``ERRATA_A55_798797``: This applies errata 798797 workaround to Cortex-A55
143*40d553cfSPaul Beesley   CPU. This needs to be enabled only for revision r0p0 of the CPU.
144*40d553cfSPaul Beesley
145*40d553cfSPaul Beesley-  ``ERRATA_A55_846532``: This applies errata 846532 workaround to Cortex-A55
146*40d553cfSPaul Beesley   CPU. This needs to be enabled only for revision <= r0p1 of the CPU.
147*40d553cfSPaul Beesley
148*40d553cfSPaul Beesley-  ``ERRATA_A55_903758``: This applies errata 903758 workaround to Cortex-A55
149*40d553cfSPaul Beesley   CPU. This needs to be enabled only for revision <= r0p1 of the CPU.
150*40d553cfSPaul Beesley
151*40d553cfSPaul BeesleyFor Cortex-A57, the following errata build flags are defined :
152*40d553cfSPaul Beesley
153*40d553cfSPaul Beesley-  ``ERRATA_A57_806969``: This applies errata 806969 workaround to Cortex-A57
154*40d553cfSPaul Beesley   CPU. This needs to be enabled only for revision r0p0 of the CPU.
155*40d553cfSPaul Beesley
156*40d553cfSPaul Beesley-  ``ERRATA_A57_813419``: This applies errata 813419 workaround to Cortex-A57
157*40d553cfSPaul Beesley   CPU. This needs to be enabled only for revision r0p0 of the CPU.
158*40d553cfSPaul Beesley
159*40d553cfSPaul Beesley-  ``ERRATA_A57_813420``: This applies errata 813420 workaround to Cortex-A57
160*40d553cfSPaul Beesley   CPU. This needs to be enabled only for revision r0p0 of the CPU.
161*40d553cfSPaul Beesley
162*40d553cfSPaul Beesley-  ``ERRATA_A57_814670``: This applies errata 814670 workaround to Cortex-A57
163*40d553cfSPaul Beesley   CPU. This needs to be enabled only for revision r0p0 of the CPU.
164*40d553cfSPaul Beesley
165*40d553cfSPaul Beesley-  ``ERRATA_A57_817169``: This applies errata 817169 workaround to Cortex-A57
166*40d553cfSPaul Beesley   CPU. This needs to be enabled only for revision <= r0p1 of the CPU.
167*40d553cfSPaul Beesley
168*40d553cfSPaul Beesley-  ``ERRATA_A57_826974``: This applies errata 826974 workaround to Cortex-A57
169*40d553cfSPaul Beesley   CPU. This needs to be enabled only for revision <= r1p1 of the CPU.
170*40d553cfSPaul Beesley
171*40d553cfSPaul Beesley-  ``ERRATA_A57_826977``: This applies errata 826977 workaround to Cortex-A57
172*40d553cfSPaul Beesley   CPU. This needs to be enabled only for revision <= r1p1 of the CPU.
173*40d553cfSPaul Beesley
174*40d553cfSPaul Beesley-  ``ERRATA_A57_828024``: This applies errata 828024 workaround to Cortex-A57
175*40d553cfSPaul Beesley   CPU. This needs to be enabled only for revision <= r1p1 of the CPU.
176*40d553cfSPaul Beesley
177*40d553cfSPaul Beesley-  ``ERRATA_A57_829520``: This applies errata 829520 workaround to Cortex-A57
178*40d553cfSPaul Beesley   CPU. This needs to be enabled only for revision <= r1p2 of the CPU.
179*40d553cfSPaul Beesley
180*40d553cfSPaul Beesley-  ``ERRATA_A57_833471``: This applies errata 833471 workaround to Cortex-A57
181*40d553cfSPaul Beesley   CPU. This needs to be enabled only for revision <= r1p2 of the CPU.
182*40d553cfSPaul Beesley
183*40d553cfSPaul Beesley-  ``ERRATA_A57_859972``: This applies errata 859972 workaround to Cortex-A57
184*40d553cfSPaul Beesley   CPU. This needs to be enabled only for revision <= r1p3 of the CPU.
185*40d553cfSPaul Beesley
186*40d553cfSPaul Beesley
187*40d553cfSPaul BeesleyFor Cortex-A72, the following errata build flags are defined :
188*40d553cfSPaul Beesley
189*40d553cfSPaul Beesley-  ``ERRATA_A72_859971``: This applies errata 859971 workaround to Cortex-A72
190*40d553cfSPaul Beesley   CPU. This needs to be enabled only for revision <= r0p3 of the CPU.
191*40d553cfSPaul Beesley
192*40d553cfSPaul BeesleyFor Cortex-A73, the following errata build flags are defined :
193*40d553cfSPaul Beesley
194*40d553cfSPaul Beesley-  ``ERRATA_A73_852427``: This applies errata 852427 workaround to Cortex-A73
195*40d553cfSPaul Beesley   CPU. This needs to be enabled only for revision r0p0 of the CPU.
196*40d553cfSPaul Beesley
197*40d553cfSPaul Beesley-  ``ERRATA_A73_855423``: This applies errata 855423 workaround to Cortex-A73
198*40d553cfSPaul Beesley   CPU. This needs to be enabled only for revision <= r0p1 of the CPU.
199*40d553cfSPaul Beesley
200*40d553cfSPaul BeesleyFor Cortex-A75, the following errata build flags are defined :
201*40d553cfSPaul Beesley
202*40d553cfSPaul Beesley-  ``ERRATA_A75_764081``: This applies errata 764081 workaround to Cortex-A75
203*40d553cfSPaul Beesley   CPU. This needs to be enabled only for revision r0p0 of the CPU.
204*40d553cfSPaul Beesley
205*40d553cfSPaul Beesley-  ``ERRATA_A75_790748``: This applies errata 790748 workaround to Cortex-A75
206*40d553cfSPaul Beesley    CPU. This needs to be enabled only for revision r0p0 of the CPU.
207*40d553cfSPaul Beesley
208*40d553cfSPaul BeesleyFor Cortex-A76, the following errata build flags are defined :
209*40d553cfSPaul Beesley
210*40d553cfSPaul Beesley-  ``ERRATA_A76_1073348``: This applies errata 1073348 workaround to Cortex-A76
211*40d553cfSPaul Beesley   CPU. This needs to be enabled only for revision <= r1p0 of the CPU.
212*40d553cfSPaul Beesley
213*40d553cfSPaul Beesley-  ``ERRATA_A76_1130799``: This applies errata 1130799 workaround to Cortex-A76
214*40d553cfSPaul Beesley   CPU. This needs to be enabled only for revision <= r2p0 of the CPU.
215*40d553cfSPaul Beesley
216*40d553cfSPaul Beesley-  ``ERRATA_A76_1220197``: This applies errata 1220197 workaround to Cortex-A76
217*40d553cfSPaul Beesley   CPU. This needs to be enabled only for revision <= r2p0 of the CPU.
218*40d553cfSPaul Beesley
219*40d553cfSPaul Beesley-  ``ERRATA_A76_1257314``: This applies errata 1257314 workaround to Cortex-A76
220*40d553cfSPaul Beesley   CPU. This needs to be enabled only for revision <= r3p0 of the CPU.
221*40d553cfSPaul Beesley
222*40d553cfSPaul Beesley-  ``ERRATA_A76_1262606``: This applies errata 1262606 workaround to Cortex-A76
223*40d553cfSPaul Beesley   CPU. This needs to be enabled only for revision <= r3p0 of the CPU.
224*40d553cfSPaul Beesley
225*40d553cfSPaul Beesley-  ``ERRATA_A76_1262888``: This applies errata 1262888 workaround to Cortex-A76
226*40d553cfSPaul Beesley   CPU. This needs to be enabled only for revision <= r3p0 of the CPU.
227*40d553cfSPaul Beesley
228*40d553cfSPaul Beesley-  ``ERRATA_A76_1275112``: This applies errata 1275112 workaround to Cortex-A76
229*40d553cfSPaul Beesley   CPU. This needs to be enabled only for revision <= r3p0 of the CPU.
230*40d553cfSPaul Beesley
231*40d553cfSPaul BeesleyDSU Errata Workarounds
232*40d553cfSPaul Beesley----------------------
233*40d553cfSPaul Beesley
234*40d553cfSPaul BeesleySimilar to CPU errata, TF-A also implements workarounds for DSU (DynamIQ
235*40d553cfSPaul BeesleyShared Unit) errata. The DSU errata details can be found in the respective Arm
236*40d553cfSPaul Beesleydocumentation:
237*40d553cfSPaul Beesley
238*40d553cfSPaul Beesley- `Arm DSU Software Developers Errata Notice`_.
239*40d553cfSPaul Beesley
240*40d553cfSPaul BeesleyEach erratum is identified by an ``ID``, as defined in the DSU errata notice
241*40d553cfSPaul Beesleydocument. Thus, the build flags which enable/disable the errata workarounds
242*40d553cfSPaul Beesleyhave the format ``ERRATA_DSU_<ID>``. The implementation and application logic
243*40d553cfSPaul Beesleyof DSU errata workarounds are similar to `CPU errata workarounds`_.
244*40d553cfSPaul Beesley
245*40d553cfSPaul BeesleyFor DSU errata, the following build flags are defined:
246*40d553cfSPaul Beesley
247*40d553cfSPaul Beesley-  ``ERRATA_DSU_798953``: This applies errata 798953 workaround for the
248*40d553cfSPaul Beesley   affected DSU configurations. This errata applies only for those DSUs that
249*40d553cfSPaul Beesley   revision is r0p0 (on r0p1 it is fixed). However, please note that this
250*40d553cfSPaul Beesley   workaround results in increased DSU power consumption on idle.
251*40d553cfSPaul Beesley
252*40d553cfSPaul Beesley-  ``ERRATA_DSU_936184``: This applies errata 936184 workaround for the
253*40d553cfSPaul Beesley   affected DSU configurations. This errata applies only for those DSUs that
254*40d553cfSPaul Beesley   contain the ACP interface **and** the DSU revision is older than r2p0 (on
255*40d553cfSPaul Beesley   r2p0 it is fixed). However, please note that this workaround results in
256*40d553cfSPaul Beesley   increased DSU power consumption on idle.
257*40d553cfSPaul Beesley
258*40d553cfSPaul BeesleyCPU Specific optimizations
259*40d553cfSPaul Beesley--------------------------
260*40d553cfSPaul Beesley
261*40d553cfSPaul BeesleyThis section describes some of the optimizations allowed by the CPU micro
262*40d553cfSPaul Beesleyarchitecture that can be enabled by the platform as desired.
263*40d553cfSPaul Beesley
264*40d553cfSPaul Beesley-  ``SKIP_A57_L1_FLUSH_PWR_DWN``: This flag enables an optimization in the
265*40d553cfSPaul Beesley   Cortex-A57 cluster power down sequence by not flushing the Level 1 data
266*40d553cfSPaul Beesley   cache. The L1 data cache and the L2 unified cache are inclusive. A flush
267*40d553cfSPaul Beesley   of the L2 by set/way flushes any dirty lines from the L1 as well. This
268*40d553cfSPaul Beesley   is a known safe deviation from the Cortex-A57 TRM defined power down
269*40d553cfSPaul Beesley   sequence. Each Cortex-A57 based platform must make its own decision on
270*40d553cfSPaul Beesley   whether to use the optimization.
271*40d553cfSPaul Beesley
272*40d553cfSPaul Beesley-  ``A53_DISABLE_NON_TEMPORAL_HINT``: This flag disables the cache non-temporal
273*40d553cfSPaul Beesley   hint. The LDNP/STNP instructions as implemented on Cortex-A53 do not behave
274*40d553cfSPaul Beesley   in a way most programmers expect, and will most probably result in a
275*40d553cfSPaul Beesley   significant speed degradation to any code that employs them. The Armv8-A
276*40d553cfSPaul Beesley   architecture (see Arm DDI 0487A.h, section D3.4.3) allows cores to ignore
277*40d553cfSPaul Beesley   the non-temporal hint and treat LDNP/STNP as LDP/STP instead. Enabling this
278*40d553cfSPaul Beesley   flag enforces this behaviour. This needs to be enabled only for revisions
279*40d553cfSPaul Beesley   <= r0p3 of the CPU and is enabled by default.
280*40d553cfSPaul Beesley
281*40d553cfSPaul Beesley-  ``A57_DISABLE_NON_TEMPORAL_HINT``: This flag has the same behaviour as
282*40d553cfSPaul Beesley   ``A53_DISABLE_NON_TEMPORAL_HINT`` but for Cortex-A57. This needs to be
283*40d553cfSPaul Beesley   enabled only for revisions <= r1p2 of the CPU and is enabled by default,
284*40d553cfSPaul Beesley   as recommended in section "4.7 Non-Temporal Loads/Stores" of the
285*40d553cfSPaul Beesley   `Cortex-A57 Software Optimization Guide`_.
286*40d553cfSPaul Beesley
287*40d553cfSPaul Beesley--------------
288*40d553cfSPaul Beesley
289*40d553cfSPaul Beesley*Copyright (c) 2014-2019, Arm Limited and Contributors. All rights reserved.*
290*40d553cfSPaul Beesley
291*40d553cfSPaul Beesley.. _CVE-2017-5715: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5715
292*40d553cfSPaul Beesley.. _CVE-2018-3639: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-3639
293*40d553cfSPaul Beesley.. _Cortex-A53 MPCore Software Developers Errata Notice: http://infocenter.arm.com/help/topic/com.arm.doc.epm048406/index.html
294*40d553cfSPaul Beesley.. _Cortex-A57 MPCore Software Developers Errata Notice: http://infocenter.arm.com/help/topic/com.arm.doc.epm049219/index.html
295*40d553cfSPaul Beesley.. _Cortex-A72 MPCore Software Developers Errata Notice: http://infocenter.arm.com/help/topic/com.arm.doc.epm012079/index.html
296*40d553cfSPaul Beesley.. _Firmware Design guide: firmware-design.rst
297*40d553cfSPaul Beesley.. _Cortex-A57 Software Optimization Guide: http://infocenter.arm.com/help/topic/com.arm.doc.uan0015b/Cortex_A57_Software_Optimization_Guide_external.pdf
298*40d553cfSPaul Beesley.. _Arm DSU Software Developers Errata Notice: http://infocenter.arm.com/help/topic/com.arm.doc.epm138168/index.html
299