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 819472 workaround during reset. This erratum applies 57# only to revision <= r0p1 of the Cortex A53 cpu. 58ERRATA_A53_819472 ?=0 59 60# Flag to apply erratum 824069 workaround during reset. This erratum applies 61# only to revision <= r0p2 of the Cortex A53 cpu. 62ERRATA_A53_824069 ?=0 63 64# Flag to apply erratum 826319 workaround during reset. This erratum applies 65# only to revision <= r0p2 of the Cortex A53 cpu. 66ERRATA_A53_826319 ?=0 67 68# Flag to apply erratum 827319 workaround during reset. This erratum applies 69# only to revision <= r0p2 of the Cortex A53 cpu. 70ERRATA_A53_827319 ?=0 71 72# Flag to apply erratum 835769 workaround at compile and link time. This 73# erratum applies to revision <= r0p4 of the Cortex A53 cpu. Enabling this 74# workaround can lead the linker to create "*.stub" sections. 75ERRATA_A53_835769 ?=0 76 77# Flag to apply erratum 836870 workaround during reset. This erratum applies 78# only to revision <= r0p3 of the Cortex A53 cpu. From r0p4 and onwards, this 79# erratum workaround is enabled by default in hardware. 80ERRATA_A53_836870 ?=0 81 82# Flag to apply erratum 843419 workaround at link time. 83# This erratum applies to revision <= r0p4 of the Cortex A53 cpu. Enabling this 84# workaround could lead the linker to emit "*.stub" sections which are 4kB 85# aligned. 86ERRATA_A53_843419 ?=0 87 88# Flag to apply errata 855873 during reset. This errata applies to all 89# revisions of the Cortex A53 CPU, but this firmware workaround only works 90# for revisions r0p3 and higher. Earlier revisions are taken care 91# of by the rich OS. 92ERRATA_A53_855873 ?=0 93 94# Flag to apply erratum 768277 workaround during reset. This erratum applies 95# only to revision r0p0 of the Cortex A55 cpu. 96ERRATA_A55_768277 ?=0 97 98# Flag to apply erratum 778703 workaround during reset. This erratum applies 99# only to revision r0p0 of the Cortex A55 cpu. 100ERRATA_A55_778703 ?=0 101 102# Flag to apply erratum 798797 workaround during reset. This erratum applies 103# only to revision r0p0 of the Cortex A55 cpu. 104ERRATA_A55_798797 ?=0 105 106# Flag to apply erratum 846532 workaround during reset. This erratum applies 107# only to revision <= r0p1 of the Cortex A55 cpu. 108ERRATA_A55_846532 ?=0 109 110# Flag to apply erratum 903758 workaround during reset. This erratum applies 111# only to revision <= r0p1 of the Cortex A55 cpu. 112ERRATA_A55_903758 ?=0 113 114# Flag to apply erratum 806969 workaround during reset. This erratum applies 115# only to revision r0p0 of the Cortex A57 cpu. 116ERRATA_A57_806969 ?=0 117 118# Flag to apply erratum 813419 workaround during reset. This erratum applies 119# only to revision r0p0 of the Cortex A57 cpu. 120ERRATA_A57_813419 ?=0 121 122# Flag to apply erratum 813420 workaround during reset. This erratum applies 123# only to revision r0p0 of the Cortex A57 cpu. 124ERRATA_A57_813420 ?=0 125 126# Flag to apply erratum 814670 workaround during reset. This erratum applies 127# only to revision r0p0 of the Cortex A57 cpu. 128ERRATA_A57_814670 ?=0 129 130# Flag to apply erratum 817169 workaround during power down. This erratum 131# applies only to revision <= r0p1 of the Cortex A57 cpu. 132ERRATA_A57_817169 ?=0 133 134# Flag to apply erratum 826974 workaround during reset. This erratum applies 135# only to revision <= r1p1 of the Cortex A57 cpu. 136ERRATA_A57_826974 ?=0 137 138# Flag to apply erratum 826977 workaround during reset. This erratum applies 139# only to revision <= r1p1 of the Cortex A57 cpu. 140ERRATA_A57_826977 ?=0 141 142# Flag to apply erratum 828024 workaround during reset. This erratum applies 143# only to revision <= r1p1 of the Cortex A57 cpu. 144ERRATA_A57_828024 ?=0 145 146# Flag to apply erratum 829520 workaround during reset. This erratum applies 147# only to revision <= r1p2 of the Cortex A57 cpu. 148ERRATA_A57_829520 ?=0 149 150# Flag to apply erratum 833471 workaround during reset. This erratum applies 151# only to revision <= r1p2 of the Cortex A57 cpu. 152ERRATA_A57_833471 ?=0 153 154# Flag to apply erratum 855972 workaround during reset. This erratum applies 155# only to revision <= r1p3 of the Cortex A57 cpu. 156ERRATA_A57_859972 ?=0 157 158# Flag to apply erratum 855971 workaround during reset. This erratum applies 159# only to revision <= r0p3 of the Cortex A72 cpu. 160ERRATA_A72_859971 ?=0 161 162# Flag to apply T32 CLREX workaround during reset. This erratum applies 163# only to r0p0 and r1p0 of the Neoverse N1 cpu. 164ERRATA_N1_1043202 ?=1 165 166# Flag to apply DSU erratum 936184. This erratum applies to DSUs containing 167# the ACP interface and revision < r2p0. Applying the workaround results in 168# higher DSU power consumption on idle. 169ERRATA_DSU_936184 ?=0 170 171# Process ERRATA_A53_819472 flag 172$(eval $(call assert_boolean,ERRATA_A53_819472)) 173$(eval $(call add_define,ERRATA_A53_819472)) 174 175# Process ERRATA_A53_824069 flag 176$(eval $(call assert_boolean,ERRATA_A53_824069)) 177$(eval $(call add_define,ERRATA_A53_824069)) 178 179# Process ERRATA_A53_826319 flag 180$(eval $(call assert_boolean,ERRATA_A53_826319)) 181$(eval $(call add_define,ERRATA_A53_826319)) 182 183# Process ERRATA_A53_827319 flag 184$(eval $(call assert_boolean,ERRATA_A53_827319)) 185$(eval $(call add_define,ERRATA_A53_827319)) 186 187# Process ERRATA_A53_835769 flag 188$(eval $(call assert_boolean,ERRATA_A53_835769)) 189$(eval $(call add_define,ERRATA_A53_835769)) 190 191# Process ERRATA_A53_836870 flag 192$(eval $(call assert_boolean,ERRATA_A53_836870)) 193$(eval $(call add_define,ERRATA_A53_836870)) 194 195# Process ERRATA_A53_843419 flag 196$(eval $(call assert_boolean,ERRATA_A53_843419)) 197$(eval $(call add_define,ERRATA_A53_843419)) 198 199# Process ERRATA_A53_855873 flag 200$(eval $(call assert_boolean,ERRATA_A53_855873)) 201$(eval $(call add_define,ERRATA_A53_855873)) 202 203# Process ERRATA_A55_768277 flag 204$(eval $(call assert_boolean,ERRATA_A55_768277)) 205$(eval $(call add_define,ERRATA_A55_768277)) 206 207# Process ERRATA_A55_778703 flag 208$(eval $(call assert_boolean,ERRATA_A55_778703)) 209$(eval $(call add_define,ERRATA_A55_778703)) 210 211# Process ERRATA_A55_798797 flag 212$(eval $(call assert_boolean,ERRATA_A55_798797)) 213$(eval $(call add_define,ERRATA_A55_798797)) 214 215# Process ERRATA_A55_846532 flag 216$(eval $(call assert_boolean,ERRATA_A55_846532)) 217$(eval $(call add_define,ERRATA_A55_846532)) 218 219# Process ERRATA_A55_903758 flag 220$(eval $(call assert_boolean,ERRATA_A55_903758)) 221$(eval $(call add_define,ERRATA_A55_903758)) 222 223# Process ERRATA_A57_806969 flag 224$(eval $(call assert_boolean,ERRATA_A57_806969)) 225$(eval $(call add_define,ERRATA_A57_806969)) 226 227# Process ERRATA_A57_813419 flag 228$(eval $(call assert_boolean,ERRATA_A57_813419)) 229$(eval $(call add_define,ERRATA_A57_813419)) 230 231# Process ERRATA_A57_813420 flag 232$(eval $(call assert_boolean,ERRATA_A57_813420)) 233$(eval $(call add_define,ERRATA_A57_813420)) 234 235# Process ERRATA_A57_814670 flag 236$(eval $(call assert_boolean,ERRATA_A57_814670)) 237$(eval $(call add_define,ERRATA_A57_814670)) 238 239# Process ERRATA_A57_817169 flag 240$(eval $(call assert_boolean,ERRATA_A57_817169)) 241$(eval $(call add_define,ERRATA_A57_817169)) 242 243# Process ERRATA_A57_826974 flag 244$(eval $(call assert_boolean,ERRATA_A57_826974)) 245$(eval $(call add_define,ERRATA_A57_826974)) 246 247# Process ERRATA_A57_826977 flag 248$(eval $(call assert_boolean,ERRATA_A57_826977)) 249$(eval $(call add_define,ERRATA_A57_826977)) 250 251# Process ERRATA_A57_828024 flag 252$(eval $(call assert_boolean,ERRATA_A57_828024)) 253$(eval $(call add_define,ERRATA_A57_828024)) 254 255# Process ERRATA_A57_829520 flag 256$(eval $(call assert_boolean,ERRATA_A57_829520)) 257$(eval $(call add_define,ERRATA_A57_829520)) 258 259# Process ERRATA_A57_833471 flag 260$(eval $(call assert_boolean,ERRATA_A57_833471)) 261$(eval $(call add_define,ERRATA_A57_833471)) 262 263# Process ERRATA_A57_859972 flag 264$(eval $(call assert_boolean,ERRATA_A57_859972)) 265$(eval $(call add_define,ERRATA_A57_859972)) 266 267# Process ERRATA_A72_859971 flag 268$(eval $(call assert_boolean,ERRATA_A72_859971)) 269$(eval $(call add_define,ERRATA_A72_859971)) 270 271# Process ERRATA_N1_1043202 flag 272$(eval $(call assert_boolean,ERRATA_N1_1043202)) 273$(eval $(call add_define,ERRATA_N1_1043202)) 274 275# Process ERRATA_DSU_936184 flag 276$(eval $(call assert_boolean,ERRATA_DSU_936184)) 277$(eval $(call add_define,ERRATA_DSU_936184)) 278 279# Errata build flags 280ifneq (${ERRATA_A53_843419},0) 281TF_LDFLAGS_aarch64 += --fix-cortex-a53-843419 282endif 283 284ifneq (${ERRATA_A53_835769},0) 285TF_CFLAGS_aarch64 += -mfix-cortex-a53-835769 286TF_LDFLAGS_aarch64 += --fix-cortex-a53-835769 287endif 288