diff options
Diffstat (limited to 'plat/arm/fvp/fvp_topology.c')
-rw-r--r-- | plat/arm/fvp/fvp_topology.c | 66 |
1 files changed, 63 insertions, 3 deletions
diff --git a/plat/arm/fvp/fvp_topology.c b/plat/arm/fvp/fvp_topology.c index e13e80144..6dece2865 100644 --- a/plat/arm/fvp/fvp_topology.c +++ b/plat/arm/fvp/fvp_topology.c @@ -22,13 +22,60 @@ #define CPU_DEF(cluster, cpu) \ { cluster, cpu, 0 }, \ { cluster, cpu, 1 } - #else +/* ST: 1 thread per CPU */ #define CPU_DEF(cluster, cpu) \ { cluster, cpu } -#endif +#endif /* FVP_MAX_PE_PER_CPU */ -/* 8 CPUs per cluster */ +/* + * Max CPUs per cluster: + * ST: 4 + * SMT: 8 + */ +#if (FVP_MAX_CPUS_PER_CLUSTER == 1) +#define CLUSTER_DEF(cluster) \ + CPU_DEF(cluster, 0) +#elif (FVP_MAX_CPUS_PER_CLUSTER == 2) +#define CLUSTER_DEF(cluster) \ + CPU_DEF(cluster, 0), \ + CPU_DEF(cluster, 1) +#elif (FVP_MAX_CPUS_PER_CLUSTER == 3) +#define CLUSTER_DEF(cluster) \ + CPU_DEF(cluster, 0), \ + CPU_DEF(cluster, 1), \ + CPU_DEF(cluster, 2) +#elif (FVP_MAX_CPUS_PER_CLUSTER == 4) +#define CLUSTER_DEF(cluster) \ + CPU_DEF(cluster, 0), \ + CPU_DEF(cluster, 1), \ + CPU_DEF(cluster, 2), \ + CPU_DEF(cluster, 3) +#elif (FVP_MAX_CPUS_PER_CLUSTER == 5) +#define CLUSTER_DEF(cluster) \ + CPU_DEF(cluster, 0), \ + CPU_DEF(cluster, 1), \ + CPU_DEF(cluster, 2), \ + CPU_DEF(cluster, 3), \ + CPU_DEF(cluster, 4) +#elif (FVP_MAX_CPUS_PER_CLUSTER == 6) +#define CLUSTER_DEF(cluster) \ + CPU_DEF(cluster, 0), \ + CPU_DEF(cluster, 1), \ + CPU_DEF(cluster, 2), \ + CPU_DEF(cluster, 3), \ + CPU_DEF(cluster, 4), \ + CPU_DEF(cluster, 5) +#elif (FVP_MAX_CPUS_PER_CLUSTER == 7) +#define CLUSTER_DEF(cluster) \ + CPU_DEF(cluster, 0), \ + CPU_DEF(cluster, 1), \ + CPU_DEF(cluster, 2), \ + CPU_DEF(cluster, 3), \ + CPU_DEF(cluster, 4), \ + CPU_DEF(cluster, 5), \ + CPU_DEF(cluster, 6) +#else #define CLUSTER_DEF(cluster) \ CPU_DEF(cluster, 0), \ CPU_DEF(cluster, 1), \ @@ -38,6 +85,7 @@ CPU_DEF(cluster, 5), \ CPU_DEF(cluster, 6), \ CPU_DEF(cluster, 7) +#endif /* FVP_MAX_CPUS_PER_CLUSTER */ static const struct { unsigned int cluster_id; @@ -48,9 +96,15 @@ static const struct { } fvp_base_aemv8a_aemv8a_cores[] = { /* Clusters 0...3 */ CLUSTER_DEF(0), +#if (FVP_CLUSTER_COUNT > 1) CLUSTER_DEF(1), +#if (FVP_CLUSTER_COUNT > 2) CLUSTER_DEF(2), +#if (FVP_CLUSTER_COUNT > 3) CLUSTER_DEF(3) +#endif +#endif +#endif }; /* @@ -70,12 +124,18 @@ static const unsigned char fvp_power_domain_tree_desc[] = { FVP_CLUSTER_COUNT, /* Number of children for the first node */ FVP_MAX_CPUS_PER_CLUSTER * FVP_MAX_PE_PER_CPU, +#if (FVP_CLUSTER_COUNT > 1) /* Number of children for the second node */ FVP_MAX_CPUS_PER_CLUSTER * FVP_MAX_PE_PER_CPU, +#if (FVP_CLUSTER_COUNT > 2) /* Number of children for the third node */ FVP_MAX_CPUS_PER_CLUSTER * FVP_MAX_PE_PER_CPU, +#if (FVP_CLUSTER_COUNT > 3) /* Number of children for the fourth node */ FVP_MAX_CPUS_PER_CLUSTER * FVP_MAX_PE_PER_CPU +#endif +#endif +#endif }; const unsigned char *tftf_plat_get_pwr_domain_tree_desc(void) |