summaryrefslogtreecommitdiff
path: root/plat/arm/fvp/platform.mk
blob: 864e0088eeaa9afc7af70f39a81bf4a9ddc98051 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#
# Copyright (c) 2018-2022, Arm Limited. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#

# If not specified as build arguments, set default to 10 MB
TFTF_MAX_IMAGE_SIZE:=10485760

# Default number of threads per CPU on FVP
FVP_MAX_PE_PER_CPU		:= 1

# Check the PE per core count
ifneq ($(FVP_MAX_PE_PER_CPU),$(filter $(FVP_MAX_PE_PER_CPU),1 2))
$(error "Incorrect FVP_MAX_PE_PER_CPU = ${FVP_MAX_PE_PER_CPU} \
	specified for FVP port")
endif

# Default cluster count and number of CPUs per cluster for FVP
ifeq ($(FVP_MAX_PE_PER_CPU),1)
FVP_CLUSTER_COUNT		:= 2
FVP_MAX_CPUS_PER_CLUSTER	:= 4
else
FVP_CLUSTER_COUNT		:= 1
FVP_MAX_CPUS_PER_CLUSTER	:= 8
endif

# Check cluster count and number of CPUs per cluster
ifeq ($(FVP_MAX_PE_PER_CPU),2)
# Multithreaded CPU: 1 cluster with up to 8 CPUs
$(eval $(call CREATE_SEQ,CLS,1))
$(eval $(call CREATE_SEQ,CPU,8))
else
# CPU inside DynamIQ Shared Unit: 1 cluster with up to 8 CPUs
ifeq ($(FVP_CLUSTER_COUNT),1)
$(eval $(call CREATE_SEQ,CLS,1))
$(eval $(call CREATE_SEQ,CPU,8))
else
# CPU with single thread: max 4 clusters with up to 4 CPUs
$(eval $(call CREATE_SEQ,CLS,4))
$(eval $(call CREATE_SEQ,CPU,4))
endif
endif

# Check cluster count
ifneq ($(FVP_CLUSTER_COUNT),$(filter $(FVP_CLUSTER_COUNT),$(CLS)))
  $(error "Incorrect FVP_CLUSTER_COUNT = ${FVP_CLUSTER_COUNT} \
  specified for FVP port with \
  FVP_MAX_CPUS_PER_CLUSTER = ${FVP_MAX_CPUS_PER_CLUSTER} \
  FVP_MAX_PE_PER_CPU = ${FVP_MAX_PE_PER_CPU}")
endif

# Check number of CPUs per cluster
ifneq ($(FVP_MAX_CPUS_PER_CLUSTER),$(filter $(FVP_MAX_CPUS_PER_CLUSTER),$(CPU)))
  $(error "Incorrect FVP_MAX_CPUS_PER_CLUSTER = ${FVP_MAX_CPUS_PER_CLUSTER} \
  specified for FVP port with \
  FVP_CLUSTER_COUNT = ${FVP_CLUSTER_COUNT} \
  FVP_MAX_PE_PER_CPU = ${FVP_MAX_PE_PER_CPU}")
endif

# Pass FVP topology definitions to the build system
$(eval $(call add_define,CACTUS_DEFINES,FVP_CLUSTER_COUNT))
$(eval $(call add_define,CACTUS_DEFINES,FVP_MAX_CPUS_PER_CLUSTER))
$(eval $(call add_define,CACTUS_DEFINES,FVP_MAX_PE_PER_CPU))

$(eval $(call add_define,CACTUS_MM_DEFINES,FVP_CLUSTER_COUNT))
$(eval $(call add_define,CACTUS_MM_DEFINES,FVP_MAX_CPUS_PER_CLUSTER))
$(eval $(call add_define,CACTUS_MM_DEFINES,FVP_MAX_PE_PER_CPU))

$(eval $(call add_define,IVY_DEFINES,FVP_CLUSTER_COUNT))
$(eval $(call add_define,IVY_DEFINES,FVP_MAX_CPUS_PER_CLUSTER))
$(eval $(call add_define,IVY_DEFINES,FVP_MAX_PE_PER_CPU))

$(eval $(call add_define,NS_BL1U_DEFINES,FVP_CLUSTER_COUNT))
$(eval $(call add_define,NS_BL1U_DEFINES,FVP_MAX_CPUS_PER_CLUSTER))
$(eval $(call add_define,NS_BL1U_DEFINES,FVP_MAX_PE_PER_CPU))

$(eval $(call add_define,NS_BL2U_DEFINES,FVP_CLUSTER_COUNT))
$(eval $(call add_define,NS_BL2U_DEFINES,FVP_MAX_CPUS_PER_CLUSTER))
$(eval $(call add_define,NS_BL2U_DEFINES,FVP_MAX_PE_PER_CPU))

$(eval $(call add_define,TFTF_DEFINES,FVP_CLUSTER_COUNT))
$(eval $(call add_define,TFTF_DEFINES,FVP_MAX_CPUS_PER_CLUSTER))
$(eval $(call add_define,TFTF_DEFINES,FVP_MAX_PE_PER_CPU))
$(eval $(call add_define,TFTF_DEFINES,TFTF_MAX_IMAGE_SIZE))

# Default PA size for FVP platform
PA_SIZE := 36

$(eval $(call add_define,CACTUS_DEFINES,PA_SIZE))
$(eval $(call add_define,IVY_DEFINES,PA_SIZE))
$(eval $(call add_define,NS_BL1U_DEFINES,PA_SIZE))
$(eval $(call add_define,NS_BL2U_DEFINES,PA_SIZE))
$(eval $(call add_define,TFTF_DEFINES,PA_SIZE))
$(eval $(call add_define,REALM_DEFINES,PA_SIZE))

PLAT_INCLUDES	+=	-Iplat/arm/fvp/include/

PLAT_SOURCES	:=	drivers/arm/gic/arm_gic_v2v3.c			\
			drivers/arm/gic/gic_v2.c			\
			drivers/arm/gic/gic_v3.c			\
			drivers/arm/sp805/sp805.c			\
			drivers/arm/timer/private_timer.c		\
			drivers/arm/timer/system_timer.c		\
			plat/arm/fvp/${ARCH}/plat_helpers.S		\
			plat/arm/fvp/fvp_pwr_state.c			\
			plat/arm/fvp/fvp_topology.c			\
			plat/arm/fvp/fvp_mem_prot.c			\
			plat/arm/fvp/plat_setup.c

CACTUS_SOURCES	+=	plat/arm/fvp/${ARCH}/plat_helpers.S
IVY_SOURCES	+=	plat/arm/fvp/${ARCH}/plat_helpers.S

# Firmware update is implemented on FVP.
FIRMWARE_UPDATE := 1

PLAT_TESTS_SKIP_LIST	:=	plat/arm/fvp/fvp_tests_to_skip.txt

include plat/arm/common/arm_common.mk