1# 2# Copyright (c) 2014-2019, ARM Limited and Contributors. All rights reserved. 3# 4# SPDX-License-Identifier: BSD-3-Clause 5# 6 7# Cortex A57 specific optimisation to skip L1 cache flush when 8# cluster is powered down. 9SKIP_A57_L1_FLUSH_PWR_DWN ?=0 10 11# Flag to disable the cache non-temporal hint. 12# It is enabled by default. 13A53_DISABLE_NON_TEMPORAL_HINT ?=1 14 15# Flag to disable the cache non-temporal hint. 16# It is enabled by default. 17A57_DISABLE_NON_TEMPORAL_HINT ?=1 18 19WORKAROUND_CVE_2017_5715 ?=1 20WORKAROUND_CVE_2018_3639 ?=1 21DYNAMIC_WORKAROUND_CVE_2018_3639 ?=0 22 23# Process SKIP_A57_L1_FLUSH_PWR_DWN flag 24$(eval $(call assert_boolean,SKIP_A57_L1_FLUSH_PWR_DWN)) 25$(eval $(call add_define,SKIP_A57_L1_FLUSH_PWR_DWN)) 26 27# Process A53_DISABLE_NON_TEMPORAL_HINT flag 28$(eval $(call assert_boolean,A53_DISABLE_NON_TEMPORAL_HINT)) 29$(eval $(call add_define,A53_DISABLE_NON_TEMPORAL_HINT)) 30 31# Process A57_DISABLE_NON_TEMPORAL_HINT flag 32$(eval $(call assert_boolean,A57_DISABLE_NON_TEMPORAL_HINT)) 33$(eval $(call add_define,A57_DISABLE_NON_TEMPORAL_HINT)) 34 35# Process WORKAROUND_CVE_2017_5715 flag 36$(eval $(call assert_boolean,WORKAROUND_CVE_2017_5715)) 37$(eval $(call add_define,WORKAROUND_CVE_2017_5715)) 38 39# Process WORKAROUND_CVE_2018_3639 flag 40$(eval $(call assert_boolean,WORKAROUND_CVE_2018_3639)) 41$(eval $(call add_define,WORKAROUND_CVE_2018_3639)) 42 43$(eval $(call assert_boolean,DYNAMIC_WORKAROUND_CVE_2018_3639)) 44$(eval $(call add_define,DYNAMIC_WORKAROUND_CVE_2018_3639)) 45 46ifneq (${DYNAMIC_WORKAROUND_CVE_2018_3639},0) 47 ifeq (${WORKAROUND_CVE_2018_3639},0) 48 $(error "Error: WORKAROUND_CVE_2018_3639 must be 1 if DYNAMIC_WORKAROUND_CVE_2018_3639 is 1") 49 endif 50endif 51 52# CPU Errata Build flags. 53# These should be enabled by the platform if the erratum workaround needs to be 54# applied. 55 56# Flag to apply erratum 816470 workaround during power down. This erratum 57# applies only to revision >= r3p0 of the Cortex A15 cpu. 58ERRATA_A15_816470 ?=0 59 60# Flag to apply erratum 827671 workaround during reset. This erratum applies 61# only to revision >= r3p0 of the Cortex A15 cpu. 62ERRATA_A15_827671 ?=0 63 64# Flag to apply erratum 852421 workaround during reset. This erratum applies 65# only to revision <= r1p2 of the Cortex A17 cpu. 66ERRATA_A17_852421 ?=0 67 68# Flag to apply erratum 852423 workaround during reset. This erratum applies 69# only to revision <= r1p2 of the Cortex A17 cpu. 70ERRATA_A17_852423 ?=0 71 72# Flag to apply erratum 819472 workaround during reset. This erratum applies 73# only to revision <= r0p1 of the Cortex A53 cpu. 74ERRATA_A53_819472 ?=0 75 76# Flag to apply erratum 824069 workaround during reset. This erratum applies 77# only to revision <= r0p2 of the Cortex A53 cpu. 78ERRATA_A53_824069 ?=0 79 80# Flag to apply erratum 826319 workaround during reset. This erratum applies 81# only to revision <= r0p2 of the Cortex A53 cpu. 82ERRATA_A53_826319 ?=0 83 84# Flag to apply erratum 827319 workaround during reset. This erratum applies 85# only to revision <= r0p2 of the Cortex A53 cpu. 86ERRATA_A53_827319 ?=0 87 88# Flag to apply erratum 835769 workaround at compile and link time. This 89# erratum applies to revision <= r0p4 of the Cortex A53 cpu. Enabling this 90# workaround can lead the linker to create "*.stub" sections. 91ERRATA_A53_835769 ?=0 92 93# Flag to apply erratum 836870 workaround during reset. This erratum applies 94# only to revision <= r0p3 of the Cortex A53 cpu. From r0p4 and onwards, this 95# erratum workaround is enabled by default in hardware. 96ERRATA_A53_836870 ?=0 97 98# Flag to apply erratum 843419 workaround at link time. 99# This erratum applies to revision <= r0p4 of the Cortex A53 cpu. Enabling this 100# workaround could lead the linker to emit "*.stub" sections which are 4kB 101# aligned. 102ERRATA_A53_843419 ?=0 103 104# Flag to apply errata 855873 during reset. This errata applies to all 105# revisions of the Cortex A53 CPU, but this firmware workaround only works 106# for revisions r0p3 and higher. Earlier revisions are taken care 107# of by the rich OS. 108ERRATA_A53_855873 ?=0 109 110# Flag to apply erratum 768277 workaround during reset. This erratum applies 111# only to revision r0p0 of the Cortex A55 cpu. 112ERRATA_A55_768277 ?=0 113 114# Flag to apply erratum 778703 workaround during reset. This erratum applies 115# only to revision r0p0 of the Cortex A55 cpu. 116ERRATA_A55_778703 ?=0 117 118# Flag to apply erratum 798797 workaround during reset. This erratum applies 119# only to revision r0p0 of the Cortex A55 cpu. 120ERRATA_A55_798797 ?=0 121 122# Flag to apply erratum 846532 workaround during reset. This erratum applies 123# only to revision <= r0p1 of the Cortex A55 cpu. 124ERRATA_A55_846532 ?=0 125 126# Flag to apply erratum 903758 workaround during reset. This erratum applies 127# only to revision <= r0p1 of the Cortex A55 cpu. 128ERRATA_A55_903758 ?=0 129 130# Flag to apply erratum 806969 workaround during reset. This erratum applies 131# only to revision r0p0 of the Cortex A57 cpu. 132ERRATA_A57_806969 ?=0 133 134# Flag to apply erratum 813419 workaround during reset. This erratum applies 135# only to revision r0p0 of the Cortex A57 cpu. 136ERRATA_A57_813419 ?=0 137 138# Flag to apply erratum 813420 workaround during reset. This erratum applies 139# only to revision r0p0 of the Cortex A57 cpu. 140ERRATA_A57_813420 ?=0 141 142# Flag to apply erratum 814670 workaround during reset. This erratum applies 143# only to revision r0p0 of the Cortex A57 cpu. 144ERRATA_A57_814670 ?=0 145 146# Flag to apply erratum 817169 workaround during power down. This erratum 147# applies only to revision <= r0p1 of the Cortex A57 cpu. 148ERRATA_A57_817169 ?=0 149 150# Flag to apply erratum 826974 workaround during reset. This erratum applies 151# only to revision <= r1p1 of the Cortex A57 cpu. 152ERRATA_A57_826974 ?=0 153 154# Flag to apply erratum 826977 workaround during reset. This erratum applies 155# only to revision <= r1p1 of the Cortex A57 cpu. 156ERRATA_A57_826977 ?=0 157 158# Flag to apply erratum 828024 workaround during reset. This erratum applies 159# only to revision <= r1p1 of the Cortex A57 cpu. 160ERRATA_A57_828024 ?=0 161 162# Flag to apply erratum 829520 workaround during reset. This erratum applies 163# only to revision <= r1p2 of the Cortex A57 cpu. 164ERRATA_A57_829520 ?=0 165 166# Flag to apply erratum 833471 workaround during reset. This erratum applies 167# only to revision <= r1p2 of the Cortex A57 cpu. 168ERRATA_A57_833471 ?=0 169 170# Flag to apply erratum 855972 workaround during reset. This erratum applies 171# only to revision <= r1p3 of the Cortex A57 cpu. 172ERRATA_A57_859972 ?=0 173 174# Flag to apply erratum 855971 workaround during reset. This erratum applies 175# only to revision <= r0p3 of the Cortex A72 cpu. 176ERRATA_A72_859971 ?=0 177 178# Flag to apply erratum 852427 workaround during reset. This erratum applies 179# only to revision r0p0 of the Cortex A73 cpu. 180ERRATA_A73_852427 ?=0 181 182# Flag to apply erratum 855423 workaround during reset. This erratum applies 183# only to revision <= r0p1 of the Cortex A73 cpu. 184ERRATA_A73_855423 ?=0 185 186# Flag to apply erratum 764081 workaround during reset. This erratum applies 187# only to revision <= r0p0 of the Cortex A75 cpu. 188ERRATA_A75_764081 ?=0 189 190# Flag to apply erratum 790748 workaround during reset. This erratum applies 191# only to revision <= r0p0 of the Cortex A75 cpu. 192ERRATA_A75_790748 ?=0 193 194# Flag to apply erratum 1073348 workaround during reset. This erratum applies 195# only to revision <= r1p0 of the Cortex A76 cpu. 196ERRATA_A76_1073348 ?=0 197 198# Flag to apply erratum 1130799 workaround during reset. This erratum applies 199# only to revision <= r2p0 of the Cortex A76 cpu. 200ERRATA_A76_1130799 ?=0 201 202# Flag to apply erratum 1220197 workaround during reset. This erratum applies 203# only to revision <= r2p0 of the Cortex A76 cpu. 204ERRATA_A76_1220197 ?=0 205 206# Flag to apply T32 CLREX workaround during reset. This erratum applies 207# only to r0p0 and r1p0 of the Neoverse N1 cpu. 208ERRATA_N1_1043202 ?=1 209 210# Flag to apply DSU erratum 936184. This erratum applies to DSUs containing 211# the ACP interface and revision < r2p0. Applying the workaround results in 212# higher DSU power consumption on idle. 213ERRATA_DSU_936184 ?=0 214 215# Process ERRATA_A15_816470 flag 216$(eval $(call assert_boolean,ERRATA_A15_816470)) 217$(eval $(call add_define,ERRATA_A15_816470)) 218 219# Process ERRATA_A15_827671 flag 220$(eval $(call assert_boolean,ERRATA_A15_827671)) 221$(eval $(call add_define,ERRATA_A15_827671)) 222 223# Process ERRATA_A17_852421 flag 224$(eval $(call assert_boolean,ERRATA_A17_852421)) 225$(eval $(call add_define,ERRATA_A17_852421)) 226 227# Process ERRATA_A17_852423 flag 228$(eval $(call assert_boolean,ERRATA_A17_852423)) 229$(eval $(call add_define,ERRATA_A17_852423)) 230 231# Process ERRATA_A53_819472 flag 232$(eval $(call assert_boolean,ERRATA_A53_819472)) 233$(eval $(call add_define,ERRATA_A53_819472)) 234 235# Process ERRATA_A53_824069 flag 236$(eval $(call assert_boolean,ERRATA_A53_824069)) 237$(eval $(call add_define,ERRATA_A53_824069)) 238 239# Process ERRATA_A53_826319 flag 240$(eval $(call assert_boolean,ERRATA_A53_826319)) 241$(eval $(call add_define,ERRATA_A53_826319)) 242 243# Process ERRATA_A53_827319 flag 244$(eval $(call assert_boolean,ERRATA_A53_827319)) 245$(eval $(call add_define,ERRATA_A53_827319)) 246 247# Process ERRATA_A53_835769 flag 248$(eval $(call assert_boolean,ERRATA_A53_835769)) 249$(eval $(call add_define,ERRATA_A53_835769)) 250 251# Process ERRATA_A53_836870 flag 252$(eval $(call assert_boolean,ERRATA_A53_836870)) 253$(eval $(call add_define,ERRATA_A53_836870)) 254 255# Process ERRATA_A53_843419 flag 256$(eval $(call assert_boolean,ERRATA_A53_843419)) 257$(eval $(call add_define,ERRATA_A53_843419)) 258 259# Process ERRATA_A53_855873 flag 260$(eval $(call assert_boolean,ERRATA_A53_855873)) 261$(eval $(call add_define,ERRATA_A53_855873)) 262 263# Process ERRATA_A55_768277 flag 264$(eval $(call assert_boolean,ERRATA_A55_768277)) 265$(eval $(call add_define,ERRATA_A55_768277)) 266 267# Process ERRATA_A55_778703 flag 268$(eval $(call assert_boolean,ERRATA_A55_778703)) 269$(eval $(call add_define,ERRATA_A55_778703)) 270 271# Process ERRATA_A55_798797 flag 272$(eval $(call assert_boolean,ERRATA_A55_798797)) 273$(eval $(call add_define,ERRATA_A55_798797)) 274 275# Process ERRATA_A55_846532 flag 276$(eval $(call assert_boolean,ERRATA_A55_846532)) 277$(eval $(call add_define,ERRATA_A55_846532)) 278 279# Process ERRATA_A55_903758 flag 280$(eval $(call assert_boolean,ERRATA_A55_903758)) 281$(eval $(call add_define,ERRATA_A55_903758)) 282 283# Process ERRATA_A57_806969 flag 284$(eval $(call assert_boolean,ERRATA_A57_806969)) 285$(eval $(call add_define,ERRATA_A57_806969)) 286 287# Process ERRATA_A57_813419 flag 288$(eval $(call assert_boolean,ERRATA_A57_813419)) 289$(eval $(call add_define,ERRATA_A57_813419)) 290 291# Process ERRATA_A57_813420 flag 292$(eval $(call assert_boolean,ERRATA_A57_813420)) 293$(eval $(call add_define,ERRATA_A57_813420)) 294 295# Process ERRATA_A57_814670 flag 296$(eval $(call assert_boolean,ERRATA_A57_814670)) 297$(eval $(call add_define,ERRATA_A57_814670)) 298 299# Process ERRATA_A57_817169 flag 300$(eval $(call assert_boolean,ERRATA_A57_817169)) 301$(eval $(call add_define,ERRATA_A57_817169)) 302 303# Process ERRATA_A57_826974 flag 304$(eval $(call assert_boolean,ERRATA_A57_826974)) 305$(eval $(call add_define,ERRATA_A57_826974)) 306 307# Process ERRATA_A57_826977 flag 308$(eval $(call assert_boolean,ERRATA_A57_826977)) 309$(eval $(call add_define,ERRATA_A57_826977)) 310 311# Process ERRATA_A57_828024 flag 312$(eval $(call assert_boolean,ERRATA_A57_828024)) 313$(eval $(call add_define,ERRATA_A57_828024)) 314 315# Process ERRATA_A57_829520 flag 316$(eval $(call assert_boolean,ERRATA_A57_829520)) 317$(eval $(call add_define,ERRATA_A57_829520)) 318 319# Process ERRATA_A57_833471 flag 320$(eval $(call assert_boolean,ERRATA_A57_833471)) 321$(eval $(call add_define,ERRATA_A57_833471)) 322 323# Process ERRATA_A57_859972 flag 324$(eval $(call assert_boolean,ERRATA_A57_859972)) 325$(eval $(call add_define,ERRATA_A57_859972)) 326 327# Process ERRATA_A72_859971 flag 328$(eval $(call assert_boolean,ERRATA_A72_859971)) 329$(eval $(call add_define,ERRATA_A72_859971)) 330 331# Process ERRATA_A73_852427 flag 332$(eval $(call assert_boolean,ERRATA_A73_852427)) 333$(eval $(call add_define,ERRATA_A73_852427)) 334 335# Process ERRATA_A73_855423 flag 336$(eval $(call assert_boolean,ERRATA_A73_855423)) 337$(eval $(call add_define,ERRATA_A73_855423)) 338 339# Process ERRATA_A75_764081 flag 340$(eval $(call assert_boolean,ERRATA_A75_764081)) 341$(eval $(call add_define,ERRATA_A75_764081)) 342 343# Process ERRATA_A75_790748 flag 344$(eval $(call assert_boolean,ERRATA_A75_790748)) 345$(eval $(call add_define,ERRATA_A75_790748)) 346 347# Process ERRATA_A76_1073348 flag 348$(eval $(call assert_boolean,ERRATA_A76_1073348)) 349$(eval $(call add_define,ERRATA_A76_1073348)) 350 351# Process ERRATA_A76_1130799 flag 352$(eval $(call assert_boolean,ERRATA_A76_1130799)) 353$(eval $(call add_define,ERRATA_A76_1130799)) 354 355# Process ERRATA_A76_1220197 flag 356$(eval $(call assert_boolean,ERRATA_A76_1220197)) 357$(eval $(call add_define,ERRATA_A76_1220197)) 358 359# Process ERRATA_N1_1043202 flag 360$(eval $(call assert_boolean,ERRATA_N1_1043202)) 361$(eval $(call add_define,ERRATA_N1_1043202)) 362 363# Process ERRATA_DSU_936184 flag 364$(eval $(call assert_boolean,ERRATA_DSU_936184)) 365$(eval $(call add_define,ERRATA_DSU_936184)) 366 367# Errata build flags 368ifneq (${ERRATA_A53_843419},0) 369TF_LDFLAGS_aarch64 += --fix-cortex-a53-843419 370endif 371 372ifneq (${ERRATA_A53_835769},0) 373TF_CFLAGS_aarch64 += -mfix-cortex-a53-835769 374TF_LDFLAGS_aarch64 += --fix-cortex-a53-835769 375endif 376