xref: /aosp_15_r20/external/arm-trusted-firmware/docs/design/cpu-specific-build-macros.rst (revision 54fd6939e177f8ff529b10183254802c76df6d08)
1*54fd6939SJiyong ParkArm CPU Specific Build Macros
2*54fd6939SJiyong Park=============================
3*54fd6939SJiyong Park
4*54fd6939SJiyong ParkThis document describes the various build options present in the CPU specific
5*54fd6939SJiyong Parkoperations framework to enable errata workarounds and to enable optimizations
6*54fd6939SJiyong Parkfor a specific CPU on a platform.
7*54fd6939SJiyong Park
8*54fd6939SJiyong ParkSecurity Vulnerability Workarounds
9*54fd6939SJiyong Park----------------------------------
10*54fd6939SJiyong Park
11*54fd6939SJiyong ParkTF-A exports a series of build flags which control which security
12*54fd6939SJiyong Parkvulnerability workarounds should be applied at runtime.
13*54fd6939SJiyong Park
14*54fd6939SJiyong Park-  ``WORKAROUND_CVE_2017_5715``: Enables the security workaround for
15*54fd6939SJiyong Park   `CVE-2017-5715`_. This flag can be set to 0 by the platform if none
16*54fd6939SJiyong Park   of the PEs in the system need the workaround. Setting this flag to 0 provides
17*54fd6939SJiyong Park   no performance benefit for non-affected platforms, it just helps to comply
18*54fd6939SJiyong Park   with the recommendation in the spec regarding workaround discovery.
19*54fd6939SJiyong Park   Defaults to 1.
20*54fd6939SJiyong Park
21*54fd6939SJiyong Park-  ``WORKAROUND_CVE_2018_3639``: Enables the security workaround for
22*54fd6939SJiyong Park   `CVE-2018-3639`_. Defaults to 1. The TF-A project recommends to keep
23*54fd6939SJiyong Park   the default value of 1 even on platforms that are unaffected by
24*54fd6939SJiyong Park   CVE-2018-3639, in order to comply with the recommendation in the spec
25*54fd6939SJiyong Park   regarding workaround discovery.
26*54fd6939SJiyong Park
27*54fd6939SJiyong Park-  ``DYNAMIC_WORKAROUND_CVE_2018_3639``: Enables dynamic mitigation for
28*54fd6939SJiyong Park   `CVE-2018-3639`_. This build option should be set to 1 if the target
29*54fd6939SJiyong Park   platform contains at least 1 CPU that requires dynamic mitigation.
30*54fd6939SJiyong Park   Defaults to 0.
31*54fd6939SJiyong Park
32*54fd6939SJiyong Park.. _arm_cpu_macros_errata_workarounds:
33*54fd6939SJiyong Park
34*54fd6939SJiyong ParkCPU Errata Workarounds
35*54fd6939SJiyong Park----------------------
36*54fd6939SJiyong Park
37*54fd6939SJiyong ParkTF-A exports a series of build flags which control the errata workarounds that
38*54fd6939SJiyong Parkare applied to each CPU by the reset handler. The errata details can be found
39*54fd6939SJiyong Parkin the CPU specific errata documents published by Arm:
40*54fd6939SJiyong Park
41*54fd6939SJiyong Park-  `Cortex-A53 MPCore Software Developers Errata Notice`_
42*54fd6939SJiyong Park-  `Cortex-A57 MPCore Software Developers Errata Notice`_
43*54fd6939SJiyong Park-  `Cortex-A72 MPCore Software Developers Errata Notice`_
44*54fd6939SJiyong Park
45*54fd6939SJiyong ParkThe errata workarounds are implemented for a particular revision or a set of
46*54fd6939SJiyong Parkprocessor revisions. This is checked by the reset handler at runtime. Each
47*54fd6939SJiyong Parkerrata workaround is identified by its ``ID`` as specified in the processor's
48*54fd6939SJiyong Parkerrata notice document. The format of the define used to enable/disable the
49*54fd6939SJiyong Parkerrata workaround is ``ERRATA_<Processor name>_<ID>``, where the ``Processor name``
50*54fd6939SJiyong Parkis for example ``A57`` for the ``Cortex_A57`` CPU.
51*54fd6939SJiyong Park
52*54fd6939SJiyong ParkRefer to :ref:`firmware_design_cpu_errata_reporting` for information on how to
53*54fd6939SJiyong Parkwrite errata workaround functions.
54*54fd6939SJiyong Park
55*54fd6939SJiyong ParkAll workarounds are disabled by default. The platform is responsible for
56*54fd6939SJiyong Parkenabling these workarounds according to its requirement by defining the
57*54fd6939SJiyong Parkerrata workaround build flags in the platform specific makefile. In case
58*54fd6939SJiyong Parkthese workarounds are enabled for the wrong CPU revision then the errata
59*54fd6939SJiyong Parkworkaround is not applied. In the DEBUG build, this is indicated by
60*54fd6939SJiyong Parkprinting a warning to the crash console.
61*54fd6939SJiyong Park
62*54fd6939SJiyong ParkIn the current implementation, a platform which has more than 1 variant
63*54fd6939SJiyong Parkwith different revisions of a processor has no runtime mechanism available
64*54fd6939SJiyong Parkfor it to specify which errata workarounds should be enabled or not.
65*54fd6939SJiyong Park
66*54fd6939SJiyong ParkThe value of the build flags is 0 by default, that is, disabled. A value of 1
67*54fd6939SJiyong Parkwill enable it.
68*54fd6939SJiyong Park
69*54fd6939SJiyong ParkFor Cortex-A9, the following errata build flags are defined :
70*54fd6939SJiyong Park
71*54fd6939SJiyong Park-  ``ERRATA_A9_794073``: This applies errata 794073 workaround to Cortex-A9
72*54fd6939SJiyong Park   CPU. This needs to be enabled for all revisions of the CPU.
73*54fd6939SJiyong Park
74*54fd6939SJiyong ParkFor Cortex-A15, the following errata build flags are defined :
75*54fd6939SJiyong Park
76*54fd6939SJiyong Park-  ``ERRATA_A15_816470``: This applies errata 816470 workaround to Cortex-A15
77*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision >= r3p0 of the CPU.
78*54fd6939SJiyong Park
79*54fd6939SJiyong Park-  ``ERRATA_A15_827671``: This applies errata 827671 workaround to Cortex-A15
80*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision >= r3p0 of the CPU.
81*54fd6939SJiyong Park
82*54fd6939SJiyong ParkFor Cortex-A17, the following errata build flags are defined :
83*54fd6939SJiyong Park
84*54fd6939SJiyong Park-  ``ERRATA_A17_852421``: This applies errata 852421 workaround to Cortex-A17
85*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r1p2 of the CPU.
86*54fd6939SJiyong Park
87*54fd6939SJiyong Park-  ``ERRATA_A17_852423``: This applies errata 852423 workaround to Cortex-A17
88*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r1p2 of the CPU.
89*54fd6939SJiyong Park
90*54fd6939SJiyong ParkFor Cortex-A35, the following errata build flags are defined :
91*54fd6939SJiyong Park
92*54fd6939SJiyong Park-  ``ERRATA_A35_855472``: This applies errata 855472 workaround to Cortex-A35
93*54fd6939SJiyong Park   CPUs. This needs to be enabled only for revision r0p0 of Cortex-A35.
94*54fd6939SJiyong Park
95*54fd6939SJiyong ParkFor Cortex-A53, the following errata build flags are defined :
96*54fd6939SJiyong Park
97*54fd6939SJiyong Park-  ``ERRATA_A53_819472``: This applies errata 819472 workaround to all
98*54fd6939SJiyong Park   CPUs. This needs to be enabled only for revision <= r0p1 of Cortex-A53.
99*54fd6939SJiyong Park
100*54fd6939SJiyong Park-  ``ERRATA_A53_824069``: This applies errata 824069 workaround to all
101*54fd6939SJiyong Park   CPUs. This needs to be enabled only for revision <= r0p2 of Cortex-A53.
102*54fd6939SJiyong Park
103*54fd6939SJiyong Park-  ``ERRATA_A53_826319``: This applies errata 826319 workaround to Cortex-A53
104*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r0p2 of the CPU.
105*54fd6939SJiyong Park
106*54fd6939SJiyong Park-  ``ERRATA_A53_827319``: This applies errata 827319 workaround to all
107*54fd6939SJiyong Park   CPUs. This needs to be enabled only for revision <= r0p2 of Cortex-A53.
108*54fd6939SJiyong Park
109*54fd6939SJiyong Park-  ``ERRATA_A53_835769``: This applies erratum 835769 workaround at compile and
110*54fd6939SJiyong Park   link time to Cortex-A53 CPU. This needs to be enabled for some variants of
111*54fd6939SJiyong Park   revision <= r0p4. This workaround can lead the linker to create ``*.stub``
112*54fd6939SJiyong Park   sections.
113*54fd6939SJiyong Park
114*54fd6939SJiyong Park-  ``ERRATA_A53_836870``: This applies errata 836870 workaround to Cortex-A53
115*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r0p3 of the CPU. From
116*54fd6939SJiyong Park   r0p4 and onwards, this errata is enabled by default in hardware.
117*54fd6939SJiyong Park
118*54fd6939SJiyong Park-  ``ERRATA_A53_843419``: This applies erratum 843419 workaround at link time
119*54fd6939SJiyong Park   to Cortex-A53 CPU.  This needs to be enabled for some variants of revision
120*54fd6939SJiyong Park   <= r0p4. This workaround can lead the linker to emit ``*.stub`` sections
121*54fd6939SJiyong Park   which are 4kB aligned.
122*54fd6939SJiyong Park
123*54fd6939SJiyong Park-  ``ERRATA_A53_855873``: This applies errata 855873 workaround to Cortex-A53
124*54fd6939SJiyong Park   CPUs. Though the erratum is present in every revision of the CPU,
125*54fd6939SJiyong Park   this workaround is only applied to CPUs from r0p3 onwards, which feature
126*54fd6939SJiyong Park   a chicken bit in CPUACTLR_EL1 to enable a hardware workaround.
127*54fd6939SJiyong Park   Earlier revisions of the CPU have other errata which require the same
128*54fd6939SJiyong Park   workaround in software, so they should be covered anyway.
129*54fd6939SJiyong Park
130*54fd6939SJiyong Park-  ``ERRATA_A53_1530924``: This applies errata 1530924 workaround to all
131*54fd6939SJiyong Park   revisions of Cortex-A53 CPU.
132*54fd6939SJiyong Park
133*54fd6939SJiyong ParkFor Cortex-A55, the following errata build flags are defined :
134*54fd6939SJiyong Park
135*54fd6939SJiyong Park-  ``ERRATA_A55_768277``: This applies errata 768277 workaround to Cortex-A55
136*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision r0p0 of the CPU.
137*54fd6939SJiyong Park
138*54fd6939SJiyong Park-  ``ERRATA_A55_778703``: This applies errata 778703 workaround to Cortex-A55
139*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision r0p0 of the CPU.
140*54fd6939SJiyong Park
141*54fd6939SJiyong Park-  ``ERRATA_A55_798797``: This applies errata 798797 workaround to Cortex-A55
142*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision r0p0 of the CPU.
143*54fd6939SJiyong Park
144*54fd6939SJiyong Park-  ``ERRATA_A55_846532``: This applies errata 846532 workaround to Cortex-A55
145*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r0p1 of the CPU.
146*54fd6939SJiyong Park
147*54fd6939SJiyong Park-  ``ERRATA_A55_903758``: This applies errata 903758 workaround to Cortex-A55
148*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r0p1 of the CPU.
149*54fd6939SJiyong Park
150*54fd6939SJiyong Park-  ``ERRATA_A55_1221012``: This applies errata 1221012 workaround to Cortex-A55
151*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r1p0 of the CPU.
152*54fd6939SJiyong Park
153*54fd6939SJiyong Park-  ``ERRATA_A55_1530923``: This applies errata 1530923 workaround to all
154*54fd6939SJiyong Park   revisions of Cortex-A55 CPU.
155*54fd6939SJiyong Park
156*54fd6939SJiyong ParkFor Cortex-A57, the following errata build flags are defined :
157*54fd6939SJiyong Park
158*54fd6939SJiyong Park-  ``ERRATA_A57_806969``: This applies errata 806969 workaround to Cortex-A57
159*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision r0p0 of the CPU.
160*54fd6939SJiyong Park
161*54fd6939SJiyong Park-  ``ERRATA_A57_813419``: This applies errata 813419 workaround to Cortex-A57
162*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision r0p0 of the CPU.
163*54fd6939SJiyong Park
164*54fd6939SJiyong Park-  ``ERRATA_A57_813420``: This applies errata 813420 workaround to Cortex-A57
165*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision r0p0 of the CPU.
166*54fd6939SJiyong Park
167*54fd6939SJiyong Park-  ``ERRATA_A57_814670``: This applies errata 814670 workaround to Cortex-A57
168*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision r0p0 of the CPU.
169*54fd6939SJiyong Park
170*54fd6939SJiyong Park-  ``ERRATA_A57_817169``: This applies errata 817169 workaround to Cortex-A57
171*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r0p1 of the CPU.
172*54fd6939SJiyong Park
173*54fd6939SJiyong Park-  ``ERRATA_A57_826974``: This applies errata 826974 workaround to Cortex-A57
174*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r1p1 of the CPU.
175*54fd6939SJiyong Park
176*54fd6939SJiyong Park-  ``ERRATA_A57_826977``: This applies errata 826977 workaround to Cortex-A57
177*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r1p1 of the CPU.
178*54fd6939SJiyong Park
179*54fd6939SJiyong Park-  ``ERRATA_A57_828024``: This applies errata 828024 workaround to Cortex-A57
180*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r1p1 of the CPU.
181*54fd6939SJiyong Park
182*54fd6939SJiyong Park-  ``ERRATA_A57_829520``: This applies errata 829520 workaround to Cortex-A57
183*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r1p2 of the CPU.
184*54fd6939SJiyong Park
185*54fd6939SJiyong Park-  ``ERRATA_A57_833471``: This applies errata 833471 workaround to Cortex-A57
186*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r1p2 of the CPU.
187*54fd6939SJiyong Park
188*54fd6939SJiyong Park-  ``ERRATA_A57_859972``: This applies errata 859972 workaround to Cortex-A57
189*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r1p3 of the CPU.
190*54fd6939SJiyong Park
191*54fd6939SJiyong Park-  ``ERRATA_A57_1319537``: This applies errata 1319537 workaround to all
192*54fd6939SJiyong Park   revisions of Cortex-A57 CPU.
193*54fd6939SJiyong Park
194*54fd6939SJiyong ParkFor Cortex-A72, the following errata build flags are defined :
195*54fd6939SJiyong Park
196*54fd6939SJiyong Park-  ``ERRATA_A72_859971``: This applies errata 859971 workaround to Cortex-A72
197*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r0p3 of the CPU.
198*54fd6939SJiyong Park
199*54fd6939SJiyong Park-  ``ERRATA_A72_1319367``: This applies errata 1319367 workaround to all
200*54fd6939SJiyong Park   revisions of Cortex-A72 CPU.
201*54fd6939SJiyong Park
202*54fd6939SJiyong ParkFor Cortex-A73, the following errata build flags are defined :
203*54fd6939SJiyong Park
204*54fd6939SJiyong Park-  ``ERRATA_A73_852427``: This applies errata 852427 workaround to Cortex-A73
205*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision r0p0 of the CPU.
206*54fd6939SJiyong Park
207*54fd6939SJiyong Park-  ``ERRATA_A73_855423``: This applies errata 855423 workaround to Cortex-A73
208*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r0p1 of the CPU.
209*54fd6939SJiyong Park
210*54fd6939SJiyong ParkFor Cortex-A75, the following errata build flags are defined :
211*54fd6939SJiyong Park
212*54fd6939SJiyong Park-  ``ERRATA_A75_764081``: This applies errata 764081 workaround to Cortex-A75
213*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision r0p0 of the CPU.
214*54fd6939SJiyong Park
215*54fd6939SJiyong Park-  ``ERRATA_A75_790748``: This applies errata 790748 workaround to Cortex-A75
216*54fd6939SJiyong Park    CPU. This needs to be enabled only for revision r0p0 of the CPU.
217*54fd6939SJiyong Park
218*54fd6939SJiyong ParkFor Cortex-A76, the following errata build flags are defined :
219*54fd6939SJiyong Park
220*54fd6939SJiyong Park-  ``ERRATA_A76_1073348``: This applies errata 1073348 workaround to Cortex-A76
221*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r1p0 of the CPU.
222*54fd6939SJiyong Park
223*54fd6939SJiyong Park-  ``ERRATA_A76_1130799``: This applies errata 1130799 workaround to Cortex-A76
224*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r2p0 of the CPU.
225*54fd6939SJiyong Park
226*54fd6939SJiyong Park-  ``ERRATA_A76_1220197``: This applies errata 1220197 workaround to Cortex-A76
227*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r2p0 of the CPU.
228*54fd6939SJiyong Park
229*54fd6939SJiyong Park-  ``ERRATA_A76_1257314``: This applies errata 1257314 workaround to Cortex-A76
230*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r3p0 of the CPU.
231*54fd6939SJiyong Park
232*54fd6939SJiyong Park-  ``ERRATA_A76_1262606``: This applies errata 1262606 workaround to Cortex-A76
233*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r3p0 of the CPU.
234*54fd6939SJiyong Park
235*54fd6939SJiyong Park-  ``ERRATA_A76_1262888``: This applies errata 1262888 workaround to Cortex-A76
236*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r3p0 of the CPU.
237*54fd6939SJiyong Park
238*54fd6939SJiyong Park-  ``ERRATA_A76_1275112``: This applies errata 1275112 workaround to Cortex-A76
239*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r3p0 of the CPU.
240*54fd6939SJiyong Park
241*54fd6939SJiyong Park-  ``ERRATA_A76_1791580``: This applies errata 1791580 workaround to Cortex-A76
242*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r4p0 of the CPU.
243*54fd6939SJiyong Park
244*54fd6939SJiyong Park-  ``ERRATA_A76_1165522``: This applies errata 1165522 workaround to all
245*54fd6939SJiyong Park   revisions of Cortex-A76 CPU. This errata is fixed in r3p0 but due to
246*54fd6939SJiyong Park   limitation of errata framework this errata is applied to all revisions
247*54fd6939SJiyong Park   of Cortex-A76 CPU.
248*54fd6939SJiyong Park
249*54fd6939SJiyong Park-  ``ERRATA_A76_1868343``: This applies errata 1868343 workaround to Cortex-A76
250*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r4p0 of the CPU.
251*54fd6939SJiyong Park
252*54fd6939SJiyong Park-  ``ERRATA_A76_1946160``: This applies errata 1946160 workaround to Cortex-A76
253*54fd6939SJiyong Park   CPU. This needs to be enabled only for revisions r3p0 - r4p1 of the CPU.
254*54fd6939SJiyong Park
255*54fd6939SJiyong ParkFor Cortex-A77, the following errata build flags are defined :
256*54fd6939SJiyong Park
257*54fd6939SJiyong Park-  ``ERRATA_A77_1508412``: This applies errata 1508412 workaround to Cortex-A77
258*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r1p0 of the CPU.
259*54fd6939SJiyong Park
260*54fd6939SJiyong Park-  ``ERRATA_A77_1925769``: This applies errata 1925769 workaround to Cortex-A77
261*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r1p1 of the CPU.
262*54fd6939SJiyong Park
263*54fd6939SJiyong Park-  ``ERRATA_A77_1946167``: This applies errata 1946167 workaround to Cortex-A77
264*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r1p1 of the CPU.
265*54fd6939SJiyong Park
266*54fd6939SJiyong Park-  ``ERRATA_A77_1791578``: This applies errata 1791578 workaround to Cortex-A77
267*54fd6939SJiyong Park   CPU. This needs to be enabled for r0p0, r1p0, and r1p1, it is still open.
268*54fd6939SJiyong Park
269*54fd6939SJiyong ParkFor Cortex-A78, the following errata build flags are defined :
270*54fd6939SJiyong Park
271*54fd6939SJiyong Park-  ``ERRATA_A78_1688305``: This applies errata 1688305 workaround to Cortex-A78
272*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision r0p0 - r1p0 of the CPU.
273*54fd6939SJiyong Park
274*54fd6939SJiyong Park-  ``ERRATA_A78_1941498``: This applies errata 1941498 workaround to Cortex-A78
275*54fd6939SJiyong Park   CPU. This needs to be enabled for revisions r0p0, r1p0, and r1p1 of the CPU.
276*54fd6939SJiyong Park
277*54fd6939SJiyong Park-  ``ERRATA_A78_1951500``: This applies errata 1951500 workaround to Cortex-A78
278*54fd6939SJiyong Park   CPU. This needs to be enabled for revisions r1p0 and r1p1, r0p0 has the same
279*54fd6939SJiyong Park   issue but there is no workaround for that revision.
280*54fd6939SJiyong Park
281*54fd6939SJiyong Park-  ``ERRATA_A78_1821534``: This applies errata 1821534 workaround to Cortex-A78
282*54fd6939SJiyong Park   CPU. This needs to be enabled for revisions r0p0 and r1p0.
283*54fd6939SJiyong Park
284*54fd6939SJiyong Park-  ``ERRATA_A78_1952683``: This applies errata 1952683 workaround to Cortex-A78
285*54fd6939SJiyong Park   CPU. This needs to be enabled for revision r0p0, it is fixed in r1p0.
286*54fd6939SJiyong Park
287*54fd6939SJiyong Park-  ``ERRATA_A78_2132060``: This applies errata 2132060 workaround to Cortex-A78
288*54fd6939SJiyong Park   CPU. This needs to be enabled for revisions r0p0, r1p0, r1p1, and r1p2. It
289*54fd6939SJiyong Park   is still open.
290*54fd6939SJiyong Park
291*54fd6939SJiyong Park-  ``ERRATA_A78_2242635``: This applies errata 2242635 workaround to Cortex-A78
292*54fd6939SJiyong Park   CPU. This needs to be enabled for revisions r1p0, r1p1, and r1p2. The issue
293*54fd6939SJiyong Park   is present in r0p0 but there is no workaround. It is still open.
294*54fd6939SJiyong Park
295*54fd6939SJiyong ParkFor Cortex-A78 AE, the following errata build flags are defined :
296*54fd6939SJiyong Park
297*54fd6939SJiyong Park- ``ERRATA_A78_AE_1941500`` : This applies errata 1941500 workaround to Cortex-A78
298*54fd6939SJiyong Park   AE CPU. This needs to be enabled for revisions r0p0 and r0p1. This erratum is
299*54fd6939SJiyong Park   still open.
300*54fd6939SJiyong Park
301*54fd6939SJiyong Park- ``ERRATA_A78_AE_1951502`` : This applies errata 1951502 workaround to Cortex-A78
302*54fd6939SJiyong Park  AE CPU. This needs to be enabled for revisions r0p0 and r0p1. This erratum is
303*54fd6939SJiyong Park  still open.
304*54fd6939SJiyong Park
305*54fd6939SJiyong ParkFor Neoverse N1, the following errata build flags are defined :
306*54fd6939SJiyong Park
307*54fd6939SJiyong Park-  ``ERRATA_N1_1073348``: This applies errata 1073348 workaround to Neoverse-N1
308*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision r0p0 and r1p0 of the CPU.
309*54fd6939SJiyong Park
310*54fd6939SJiyong Park-  ``ERRATA_N1_1130799``: This applies errata 1130799 workaround to Neoverse-N1
311*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r2p0 of the CPU.
312*54fd6939SJiyong Park
313*54fd6939SJiyong Park-  ``ERRATA_N1_1165347``: This applies errata 1165347 workaround to Neoverse-N1
314*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r2p0 of the CPU.
315*54fd6939SJiyong Park
316*54fd6939SJiyong Park-  ``ERRATA_N1_1207823``: This applies errata 1207823 workaround to Neoverse-N1
317*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r2p0 of the CPU.
318*54fd6939SJiyong Park
319*54fd6939SJiyong Park-  ``ERRATA_N1_1220197``: This applies errata 1220197 workaround to Neoverse-N1
320*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r2p0 of the CPU.
321*54fd6939SJiyong Park
322*54fd6939SJiyong Park-  ``ERRATA_N1_1257314``: This applies errata 1257314 workaround to Neoverse-N1
323*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r3p0 of the CPU.
324*54fd6939SJiyong Park
325*54fd6939SJiyong Park-  ``ERRATA_N1_1262606``: This applies errata 1262606 workaround to Neoverse-N1
326*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r3p0 of the CPU.
327*54fd6939SJiyong Park
328*54fd6939SJiyong Park-  ``ERRATA_N1_1262888``: This applies errata 1262888 workaround to Neoverse-N1
329*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r3p0 of the CPU.
330*54fd6939SJiyong Park
331*54fd6939SJiyong Park-  ``ERRATA_N1_1275112``: This applies errata 1275112 workaround to Neoverse-N1
332*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r3p0 of the CPU.
333*54fd6939SJiyong Park
334*54fd6939SJiyong Park-  ``ERRATA_N1_1315703``: This applies errata 1315703 workaround to Neoverse-N1
335*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r3p0 of the CPU.
336*54fd6939SJiyong Park
337*54fd6939SJiyong Park-  ``ERRATA_N1_1542419``: This applies errata 1542419 workaround to Neoverse-N1
338*54fd6939SJiyong Park   CPU. This needs to be enabled only for revisions r3p0 - r4p0 of the CPU.
339*54fd6939SJiyong Park
340*54fd6939SJiyong Park-  ``ERRATA_N1_1868343``: This applies errata 1868343 workaround to Neoverse-N1
341*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision <= r4p0 of the CPU.
342*54fd6939SJiyong Park
343*54fd6939SJiyong Park-  ``ERRATA_N1_1946160``: This applies errata 1946160 workaround to Neoverse-N1
344*54fd6939SJiyong Park   CPU. This needs to be enabled for revisions r3p0, r3p1, r4p0, and r4p1, for
345*54fd6939SJiyong Park   revisions r0p0, r1p0, and r2p0 there is no workaround.
346*54fd6939SJiyong Park
347*54fd6939SJiyong ParkFor Neoverse V1, the following errata build flags are defined :
348*54fd6939SJiyong Park
349*54fd6939SJiyong Park-  ``ERRATA_V1_1774420``: This applies errata 1774420 workaround to Neoverse-V1
350*54fd6939SJiyong Park   CPU. This needs to be enabled only for revisions r0p0 and r1p0, it is fixed
351*54fd6939SJiyong Park   in r1p1.
352*54fd6939SJiyong Park
353*54fd6939SJiyong Park-  ``ERRATA_V1_1791573``: This applies errata 1791573 workaround to Neoverse-V1
354*54fd6939SJiyong Park   CPU. This needs to be enabled only for revisions r0p0 and r1p0, it is fixed
355*54fd6939SJiyong Park   in r1p1.
356*54fd6939SJiyong Park
357*54fd6939SJiyong Park-  ``ERRATA_V1_1852267``: This applies errata 1852267 workaround to Neoverse-V1
358*54fd6939SJiyong Park   CPU. This needs to be enabled only for revisions r0p0 and r1p0, it is fixed
359*54fd6939SJiyong Park   in r1p1.
360*54fd6939SJiyong Park
361*54fd6939SJiyong Park-  ``ERRATA_V1_1925756``: This applies errata 1925756 workaround to Neoverse-V1
362*54fd6939SJiyong Park   CPU. This needs to be enabled for r0p0, r1p0, and r1p1, it is still open.
363*54fd6939SJiyong Park
364*54fd6939SJiyong Park-  ``ERRATA_V1_1940577``: This applies errata 1940577 workaround to Neoverse-V1
365*54fd6939SJiyong Park   CPU. This needs to be enabled only for revision r1p0 and r1p1 of the
366*54fd6939SJiyong Park   CPU.
367*54fd6939SJiyong Park
368*54fd6939SJiyong Park-  ``ERRATA_V1_1966096``: This applies errata 1966096 workaround to Neoverse-V1
369*54fd6939SJiyong Park   CPU. This needs to be enabled for revisions r1p0 and r1p1 of the CPU, the
370*54fd6939SJiyong Park   issue is present in r0p0 as well but there is no workaround for that
371*54fd6939SJiyong Park   revision.  It is still open.
372*54fd6939SJiyong Park
373*54fd6939SJiyong Park-  ``ERRATA_V1_2139242``: This applies errata 2139242 workaround to Neoverse-V1
374*54fd6939SJiyong Park   CPU. This needs to be enabled for revisions r0p0, r1p0, and r1p1 of the
375*54fd6939SJiyong Park   CPU.  It is still open.
376*54fd6939SJiyong Park
377*54fd6939SJiyong Park-  ``ERRATA_V1_2108267``: This applies errata 2108267 workaround to Neoverse-V1
378*54fd6939SJiyong Park   CPU. This needs to be enabled for revisions r0p0, r1p0, and r1p1 of the CPU.
379*54fd6939SJiyong Park   It is still open.
380*54fd6939SJiyong Park
381*54fd6939SJiyong Park-  ``ERRATA_V1_2216392``: This applies errata 2216392 workaround to Neoverse-V1
382*54fd6939SJiyong Park   CPU. This needs to be enabled for revisions r1p0 and r1p1 of the CPU, the
383*54fd6939SJiyong Park   issue is present in r0p0 as well but there is no workaround for that
384*54fd6939SJiyong Park   revision.  It is still open.
385*54fd6939SJiyong Park
386*54fd6939SJiyong ParkFor Cortex-A710, the following errata build flags are defined :
387*54fd6939SJiyong Park
388*54fd6939SJiyong Park-  ``ERRATA_A710_1987031``: This applies errata 1987031 workaround to
389*54fd6939SJiyong Park   Cortex-A710 CPU. This needs to be enabled only for revisions r0p0, r1p0 and
390*54fd6939SJiyong Park   r2p0 of the CPU. It is still open.
391*54fd6939SJiyong Park
392*54fd6939SJiyong Park-  ``ERRATA_A710_2081180``: This applies errata 2081180 workaround to
393*54fd6939SJiyong Park   Cortex-A710 CPU. This needs to be enabled only for revisions r0p0, r1p0 and
394*54fd6939SJiyong Park   r2p0 of the CPU. It is still open.
395*54fd6939SJiyong Park
396*54fd6939SJiyong Park-  ``ERRATA_A710_2055002``: This applies errata 2055002 workaround to
397*54fd6939SJiyong Park   Cortex-A710 CPU. This needs to be enabled for revisions r1p0, r2p0 of the CPU
398*54fd6939SJiyong Park   and is still open.
399*54fd6939SJiyong Park
400*54fd6939SJiyong Park-  ``ERRATA_A710_2017096``: This applies errata 2017096 workaround to
401*54fd6939SJiyong Park   Cortex-A710 CPU. This needs to be enabled for revisions r0p0, r1p0 and r2p0
402*54fd6939SJiyong Park   of the CPU and is still open.
403*54fd6939SJiyong Park
404*54fd6939SJiyong Park-  ``ERRATA_A710_2083908``: This applies errata 2083908 workaround to
405*54fd6939SJiyong Park   Cortex-A710 CPU. This needs to be enabled for revision r2p0 of the CPU and
406*54fd6939SJiyong Park   is still open.
407*54fd6939SJiyong Park
408*54fd6939SJiyong Park-  ``ERRATA_A710_2058056``: This applies errata 2058056 workaround to
409*54fd6939SJiyong Park   Cortex-A710 CPU. This needs to be enabled for revisions r0p0, r1p0 and r2p0
410*54fd6939SJiyong Park   of the CPU and is still open.
411*54fd6939SJiyong Park
412*54fd6939SJiyong ParkFor Neoverse N2, the following errata build flags are defined :
413*54fd6939SJiyong Park
414*54fd6939SJiyong Park-  ``ERRATA_N2_2002655``: This applies errata 2002655 workaround to Neoverse-N2
415*54fd6939SJiyong Park   CPU. This needs to be enabled for revision r0p0 of the CPU, it is still open.
416*54fd6939SJiyong Park
417*54fd6939SJiyong Park-  ``ERRATA_N2_2067956``: This applies errata 2067956 workaround to Neoverse-N2
418*54fd6939SJiyong Park   CPU. This needs to be enabled for revision r0p0 of the CPU and is still open.
419*54fd6939SJiyong Park
420*54fd6939SJiyong Park-  ``ERRATA_N2_2025414``: This applies errata 2025414 workaround to Neoverse-N2
421*54fd6939SJiyong Park   CPU. This needs to be enabled for revision r0p0 of the CPU and is still open.
422*54fd6939SJiyong Park
423*54fd6939SJiyong Park-  ``ERRATA_N2_2189731``: This applies errata 2189731 workaround to Neoverse-N2
424*54fd6939SJiyong Park   CPU. This needs to be enabled for revision r0p0 of the CPU and is still open.
425*54fd6939SJiyong Park
426*54fd6939SJiyong Park-  ``ERRATA_N2_2138956``: This applies errata 2138956 workaround to Neoverse-N2
427*54fd6939SJiyong Park   CPU. This needs to be enabled for revision r0p0 of the CPU and is still open.
428*54fd6939SJiyong Park
429*54fd6939SJiyong Park-  ``ERRATA_N2_2138953``: This applies errata 2138953 workaround to Neoverse-N2
430*54fd6939SJiyong Park   CPU. This needs to be enabled for revision r0p0 of the CPU and is still open.
431*54fd6939SJiyong Park
432*54fd6939SJiyong Park-  ``ERRATA_N2_2242415``: This applies errata 2242415 workaround to Neoverse-N2
433*54fd6939SJiyong Park   CPU. This needs to be enabled for revision r0p0 of the CPU and is still open.
434*54fd6939SJiyong Park
435*54fd6939SJiyong Park-  ``ERRATA_N2_2138958``: This applies errata 2138958 workaround to Neoverse-N2
436*54fd6939SJiyong Park   CPU. This needs to be enabled for revision r0p0 of the CPU and is still open.
437*54fd6939SJiyong Park
438*54fd6939SJiyong Park-  ``ERRATA_N2_2242400``: This applies errata 2242400 workaround to Neoverse-N2
439*54fd6939SJiyong Park   CPU. This needs to be enabled for revision r0p0 of the CPU and is still open.
440*54fd6939SJiyong Park
441*54fd6939SJiyong Park-  ``ERRATA_N2_2280757``: This applies errata 2280757 workaround to Neoverse-N2
442*54fd6939SJiyong Park   CPU. This needs to be enabled for revision r0p0 of the CPU and is still open.
443*54fd6939SJiyong Park
444*54fd6939SJiyong ParkDSU Errata Workarounds
445*54fd6939SJiyong Park----------------------
446*54fd6939SJiyong Park
447*54fd6939SJiyong ParkSimilar to CPU errata, TF-A also implements workarounds for DSU (DynamIQ
448*54fd6939SJiyong ParkShared Unit) errata. The DSU errata details can be found in the respective Arm
449*54fd6939SJiyong Parkdocumentation:
450*54fd6939SJiyong Park
451*54fd6939SJiyong Park- `Arm DSU Software Developers Errata Notice`_.
452*54fd6939SJiyong Park
453*54fd6939SJiyong ParkEach erratum is identified by an ``ID``, as defined in the DSU errata notice
454*54fd6939SJiyong Parkdocument. Thus, the build flags which enable/disable the errata workarounds
455*54fd6939SJiyong Parkhave the format ``ERRATA_DSU_<ID>``. The implementation and application logic
456*54fd6939SJiyong Parkof DSU errata workarounds are similar to `CPU errata workarounds`_.
457*54fd6939SJiyong Park
458*54fd6939SJiyong ParkFor DSU errata, the following build flags are defined:
459*54fd6939SJiyong Park
460*54fd6939SJiyong Park-  ``ERRATA_DSU_798953``: This applies errata 798953 workaround for the
461*54fd6939SJiyong Park   affected DSU configurations. This errata applies only for those DSUs that
462*54fd6939SJiyong Park   revision is r0p0 (on r0p1 it is fixed). However, please note that this
463*54fd6939SJiyong Park   workaround results in increased DSU power consumption on idle.
464*54fd6939SJiyong Park
465*54fd6939SJiyong Park-  ``ERRATA_DSU_936184``: This applies errata 936184 workaround for the
466*54fd6939SJiyong Park   affected DSU configurations. This errata applies only for those DSUs that
467*54fd6939SJiyong Park   contain the ACP interface **and** the DSU revision is older than r2p0 (on
468*54fd6939SJiyong Park   r2p0 it is fixed). However, please note that this workaround results in
469*54fd6939SJiyong Park   increased DSU power consumption on idle.
470*54fd6939SJiyong Park
471*54fd6939SJiyong ParkCPU Specific optimizations
472*54fd6939SJiyong Park--------------------------
473*54fd6939SJiyong Park
474*54fd6939SJiyong ParkThis section describes some of the optimizations allowed by the CPU micro
475*54fd6939SJiyong Parkarchitecture that can be enabled by the platform as desired.
476*54fd6939SJiyong Park
477*54fd6939SJiyong Park-  ``SKIP_A57_L1_FLUSH_PWR_DWN``: This flag enables an optimization in the
478*54fd6939SJiyong Park   Cortex-A57 cluster power down sequence by not flushing the Level 1 data
479*54fd6939SJiyong Park   cache. The L1 data cache and the L2 unified cache are inclusive. A flush
480*54fd6939SJiyong Park   of the L2 by set/way flushes any dirty lines from the L1 as well. This
481*54fd6939SJiyong Park   is a known safe deviation from the Cortex-A57 TRM defined power down
482*54fd6939SJiyong Park   sequence. Each Cortex-A57 based platform must make its own decision on
483*54fd6939SJiyong Park   whether to use the optimization.
484*54fd6939SJiyong Park
485*54fd6939SJiyong Park-  ``A53_DISABLE_NON_TEMPORAL_HINT``: This flag disables the cache non-temporal
486*54fd6939SJiyong Park   hint. The LDNP/STNP instructions as implemented on Cortex-A53 do not behave
487*54fd6939SJiyong Park   in a way most programmers expect, and will most probably result in a
488*54fd6939SJiyong Park   significant speed degradation to any code that employs them. The Armv8-A
489*54fd6939SJiyong Park   architecture (see Arm DDI 0487A.h, section D3.4.3) allows cores to ignore
490*54fd6939SJiyong Park   the non-temporal hint and treat LDNP/STNP as LDP/STP instead. Enabling this
491*54fd6939SJiyong Park   flag enforces this behaviour. This needs to be enabled only for revisions
492*54fd6939SJiyong Park   <= r0p3 of the CPU and is enabled by default.
493*54fd6939SJiyong Park
494*54fd6939SJiyong Park-  ``A57_DISABLE_NON_TEMPORAL_HINT``: This flag has the same behaviour as
495*54fd6939SJiyong Park   ``A53_DISABLE_NON_TEMPORAL_HINT`` but for Cortex-A57. This needs to be
496*54fd6939SJiyong Park   enabled only for revisions <= r1p2 of the CPU and is enabled by default,
497*54fd6939SJiyong Park   as recommended in section "4.7 Non-Temporal Loads/Stores" of the
498*54fd6939SJiyong Park   `Cortex-A57 Software Optimization Guide`_.
499*54fd6939SJiyong Park
500*54fd6939SJiyong Park- ''A57_ENABLE_NON_CACHEABLE_LOAD_FWD'': This flag enables non-cacheable
501*54fd6939SJiyong Park   streaming enhancement feature for Cortex-A57 CPUs. Platforms can set
502*54fd6939SJiyong Park   this bit only if their memory system meets the requirement that cache
503*54fd6939SJiyong Park   line fill requests from the Cortex-A57 processor are atomic. Each
504*54fd6939SJiyong Park   Cortex-A57 based platform must make its own decision on whether to use
505*54fd6939SJiyong Park   the optimization. This flag is disabled by default.
506*54fd6939SJiyong Park
507*54fd6939SJiyong Park-  ``NEOVERSE_Nx_EXTERNAL_LLC``: This flag indicates that an external last
508*54fd6939SJiyong Park   level cache(LLC) is present in the system, and that the DataSource field
509*54fd6939SJiyong Park   on the master CHI interface indicates when data is returned from the LLC.
510*54fd6939SJiyong Park   This is used to control how the LL_CACHE* PMU events count.
511*54fd6939SJiyong Park   Default value is 0 (Disabled).
512*54fd6939SJiyong Park
513*54fd6939SJiyong Park--------------
514*54fd6939SJiyong Park
515*54fd6939SJiyong Park*Copyright (c) 2014-2021, Arm Limited and Contributors. All rights reserved.*
516*54fd6939SJiyong Park
517*54fd6939SJiyong Park.. _CVE-2017-5715: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-5715
518*54fd6939SJiyong Park.. _CVE-2018-3639: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-3639
519*54fd6939SJiyong Park.. _Cortex-A53 MPCore Software Developers Errata Notice: http://infocenter.arm.com/help/topic/com.arm.doc.epm048406/index.html
520*54fd6939SJiyong Park.. _Cortex-A57 MPCore Software Developers Errata Notice: http://infocenter.arm.com/help/topic/com.arm.doc.epm049219/index.html
521*54fd6939SJiyong Park.. _Cortex-A72 MPCore Software Developers Errata Notice: http://infocenter.arm.com/help/topic/com.arm.doc.epm012079/index.html
522*54fd6939SJiyong Park.. _Cortex-A57 Software Optimization Guide: http://infocenter.arm.com/help/topic/com.arm.doc.uan0015b/Cortex_A57_Software_Optimization_Guide_external.pdf
523*54fd6939SJiyong Park.. _Arm DSU Software Developers Errata Notice: http://infocenter.arm.com/help/topic/com.arm.doc.epm138168/index.html
524