Add Broadcom's code for bcm63xx support
[project/bcm63xx/atf.git] / make_helpers / armv7-a-cpus.mk
1 #
2 # Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
3 #
4 # SPDX-License-Identifier: BSD-3-Clause
5 #
6
7 ifneq (${ARCH},aarch32)
8 $(error ARM_ARCH_MAJOR=7 mandates ARCH=aarch32)
9 endif
10
11 # For ARMv7, set march32 from platform directive ARMV7_CORTEX_Ax=yes
12 # and ARM_WITH_NEON=yes/no.
13 #
14 # GCC and Clang require -march=armv7-a for C-A9 and -march=armv7ve for C-A15.
15 # armClang requires -march=armv7-a for all ARMv7 Cortex-A. To comply with
16 # all, just drop -march and supply only -mcpu.
17
18 # Platform can override march32-directive through MARCH32_DIRECTIVE
19 ifdef MARCH32_DIRECTIVE
20 march32-directive := $(MARCH32_DIRECTIVE)
21 else
22 march32-set-${ARM_CORTEX_A5} := -mcpu=cortex-a5
23 march32-set-${ARM_CORTEX_A7} := -mcpu=cortex-a7
24 march32-set-${ARM_CORTEX_A9} := -mcpu=cortex-a9
25 march32-set-${ARM_CORTEX_A12} := -mcpu=cortex-a12
26 march32-set-${ARM_CORTEX_A15} := -mcpu=cortex-a15
27 march32-set-${ARM_CORTEX_A17} := -mcpu=cortex-a17
28 march32-neon-$(ARM_WITH_NEON) := -mfpu=neon
29
30 # default to -march=armv7-a as target directive
31 march32-set-yes ?= -march=armv7-a
32 march32-directive := ${march32-set-yes} ${march32-neon-yes}
33 endif
34
35 # Platform may override these extension support directives:
36 #
37 # ARMV7_SUPPORTS_LARGE_PAGE_ADDRESSING
38 # Defined if core supports the Large Page Addressing extension.
39 #
40 # ARMV7_SUPPORTS_VIRTUALIZATION
41 # Defined if ARMv7 core supports the Virtualization extension.
42 #
43 # ARMV7_SUPPORTS_GENERIC_TIMER
44 # Defined if ARMv7 core supports the Generic Timer extension.
45
46 ifeq ($(filter yes,$(ARM_CORTEX_A7) $(ARM_CORTEX_A12) $(ARM_CORTEX_A15) $(ARM_CORTEX_A17)),yes)
47 $(eval $(call add_define,ARMV7_SUPPORTS_LARGE_PAGE_ADDRESSING))
48 $(eval $(call add_define,ARMV7_SUPPORTS_VIRTUALIZATION))
49 $(eval $(call add_define,ARMV7_SUPPORTS_GENERIC_TIMER))
50 $(eval $(call add_define,ARMV7_SUPPORTS_VFP))
51 endif
52
53 # BRCM_PATCH: 1. BCM63138 (Cortex-A9) does have NEON.
54 # 2. Even though A9 does not support LARGE_PAGE_ADDRESSING
55 # needed to enable it to get compilation going.
56 ifeq ($(filter yes,$(ARM_CORTEX_A9)),yes)
57 $(eval $(call add_define,ARMV7_SUPPORTS_LARGE_PAGE_ADDRESSING))
58 $(eval $(call add_define,ARMV7_SUPPORTS_VFP))
59 endif
60
61 ifeq ($(ARM_CORTEX_A5),yes)
62 $(eval $(call add_define,ARM_CORTEX_A5))
63 endif