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