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