blob: c9bbe6e5529ab529cd3388b81720f259b0f5f18c [file] [log] [blame]
Sandrine Bailleux2b001322018-12-10 13:51:32 +01001#
Alexei Fedorov7cc25872020-06-02 16:35:36 +01002# Copyright (c) 2018-2020, Arm Limited. All rights reserved.
Sandrine Bailleux2b001322018-12-10 13:51:32 +01003#
4# SPDX-License-Identifier: BSD-3-Clause
5#
6
Alexei Fedorov0f305472019-10-29 14:06:54 +00007# Default number of threads per CPU on FVP
Alexei Fedorov7cc25872020-06-02 16:35:36 +01008FVP_MAX_PE_PER_CPU := 1
Alexei Fedorov0f305472019-10-29 14:06:54 +00009
10# Check the PE per core count
11ifneq ($(FVP_MAX_PE_PER_CPU),$(filter $(FVP_MAX_PE_PER_CPU),1 2))
Alexei Fedorov7cc25872020-06-02 16:35:36 +010012$(error "Incorrect FVP_MAX_PE_PER_CPU = ${FVP_MAX_PE_PER_CPU} \
13 specified for FVP port")
Alexei Fedorov0f305472019-10-29 14:06:54 +000014endif
15
Alexei Fedorov7cc25872020-06-02 16:35:36 +010016# Default cluster count and number of CPUs per cluster for FVP
17ifeq ($(FVP_MAX_PE_PER_CPU),1)
18FVP_CLUSTER_COUNT := 2
19FVP_MAX_CPUS_PER_CLUSTER := 4
20else
21FVP_CLUSTER_COUNT := 1
22FVP_MAX_CPUS_PER_CLUSTER := 8
23endif
24
25# Check cluster count and number of CPUs per cluster
26ifeq ($(FVP_MAX_PE_PER_CPU),2)
27# Multithreaded CPU: 1 cluster with up to 8 CPUs
28$(eval $(call CREATE_SEQ,CLS,1))
29$(eval $(call CREATE_SEQ,CPU,8))
30else
Alexei Fedorov250fccc2020-10-05 13:48:26 +010031# CPU inside DynamIQ Shared Unit: 1 cluster with up to 8 CPUs
32ifeq ($(FVP_CLUSTER_COUNT),1)
33$(eval $(call CREATE_SEQ,CLS,1))
34$(eval $(call CREATE_SEQ,CPU,8))
35else
Alexei Fedorov7cc25872020-06-02 16:35:36 +010036# CPU with single thread: max 4 clusters with up to 4 CPUs
37$(eval $(call CREATE_SEQ,CLS,4))
38$(eval $(call CREATE_SEQ,CPU,4))
39endif
Alexei Fedorov250fccc2020-10-05 13:48:26 +010040endif
Alexei Fedorov7cc25872020-06-02 16:35:36 +010041
42# Check cluster count
43ifneq ($(FVP_CLUSTER_COUNT),$(filter $(FVP_CLUSTER_COUNT),$(CLS)))
44 $(error "Incorrect FVP_CLUSTER_COUNT = ${FVP_CLUSTER_COUNT} \
Alexei Fedorov250fccc2020-10-05 13:48:26 +010045 specified for FVP port with \
46 FVP_MAX_CPUS_PER_CLUSTER = ${FVP_MAX_CPUS_PER_CLUSTER} \
47 FVP_MAX_PE_PER_CPU = ${FVP_MAX_PE_PER_CPU}")
Alexei Fedorov7cc25872020-06-02 16:35:36 +010048endif
49
50# Check number of CPUs per cluster
51ifneq ($(FVP_MAX_CPUS_PER_CLUSTER),$(filter $(FVP_MAX_CPUS_PER_CLUSTER),$(CPU)))
52 $(error "Incorrect FVP_MAX_CPUS_PER_CLUSTER = ${FVP_MAX_CPUS_PER_CLUSTER} \
Alexei Fedorov250fccc2020-10-05 13:48:26 +010053 specified for FVP port with \
54 FVP_CLUSTER_COUNT = ${FVP_CLUSTER_COUNT} \
55 FVP_MAX_PE_PER_CPU = ${FVP_MAX_PE_PER_CPU}")
Alexei Fedorov7cc25872020-06-02 16:35:36 +010056endif
57
58# Pass FVP topology definitions to the build system
Max Shvetsov0b7d25f2021-03-05 13:46:42 +000059$(eval $(call add_define,CACTUS_DEFINES,FVP_CLUSTER_COUNT))
60$(eval $(call add_define,CACTUS_DEFINES,FVP_MAX_CPUS_PER_CLUSTER))
61$(eval $(call add_define,CACTUS_DEFINES,FVP_MAX_PE_PER_CPU))
62
63$(eval $(call add_define,CACTUS_MM_DEFINES,FVP_CLUSTER_COUNT))
64$(eval $(call add_define,CACTUS_MM_DEFINES,FVP_MAX_CPUS_PER_CLUSTER))
65$(eval $(call add_define,CACTUS_MM_DEFINES,FVP_MAX_PE_PER_CPU))
66
67$(eval $(call add_define,IVY_DEFINES,FVP_CLUSTER_COUNT))
68$(eval $(call add_define,IVY_DEFINES,FVP_MAX_CPUS_PER_CLUSTER))
69$(eval $(call add_define,IVY_DEFINES,FVP_MAX_PE_PER_CPU))
Alexei Fedorov7cc25872020-06-02 16:35:36 +010070
71$(eval $(call add_define,NS_BL1U_DEFINES,FVP_CLUSTER_COUNT))
72$(eval $(call add_define,NS_BL1U_DEFINES,FVP_MAX_CPUS_PER_CLUSTER))
Alexei Fedorov0f305472019-10-29 14:06:54 +000073$(eval $(call add_define,NS_BL1U_DEFINES,FVP_MAX_PE_PER_CPU))
Alexei Fedorov7cc25872020-06-02 16:35:36 +010074
75$(eval $(call add_define,NS_BL2U_DEFINES,FVP_CLUSTER_COUNT))
76$(eval $(call add_define,NS_BL2U_DEFINES,FVP_MAX_CPUS_PER_CLUSTER))
Alexei Fedorov0f305472019-10-29 14:06:54 +000077$(eval $(call add_define,NS_BL2U_DEFINES,FVP_MAX_PE_PER_CPU))
78
Max Shvetsov0b7d25f2021-03-05 13:46:42 +000079$(eval $(call add_define,TFTF_DEFINES,FVP_CLUSTER_COUNT))
80$(eval $(call add_define,TFTF_DEFINES,FVP_MAX_CPUS_PER_CLUSTER))
81$(eval $(call add_define,TFTF_DEFINES,FVP_MAX_PE_PER_CPU))
82
Arunachalam Ganapathy51be1fe2020-09-22 13:25:21 +010083PLAT_INCLUDES += -Iplat/arm/fvp/include/
Sandrine Bailleux2b001322018-12-10 13:51:32 +010084
85PLAT_SOURCES := drivers/arm/gic/arm_gic_v2v3.c \
86 drivers/arm/gic/gic_v2.c \
87 drivers/arm/gic/gic_v3.c \
88 drivers/arm/sp805/sp805.c \
89 drivers/arm/timer/private_timer.c \
90 drivers/arm/timer/system_timer.c \
91 plat/arm/fvp/${ARCH}/plat_helpers.S \
92 plat/arm/fvp/fvp_pwr_state.c \
93 plat/arm/fvp/fvp_topology.c \
94 plat/arm/fvp/fvp_mem_prot.c \
95 plat/arm/fvp/plat_setup.c
96
97CACTUS_SOURCES += plat/arm/fvp/${ARCH}/plat_helpers.S
Ruari Phipps9f1952c2020-08-24 11:32:32 +010098IVY_SOURCES += plat/arm/fvp/${ARCH}/plat_helpers.S
Sandrine Bailleux2b001322018-12-10 13:51:32 +010099
100# Firmware update is implemented on FVP.
101FIRMWARE_UPDATE := 1
102
Sandrine Bailleuxac992f32020-03-02 11:05:15 +0100103PLAT_TESTS_SKIP_LIST := plat/arm/fvp/fvp_tests_to_skip.txt
104
Sandrine Bailleux2b001322018-12-10 13:51:32 +0100105include plat/arm/common/arm_common.mk