| /* |
| * Copyright (c) 2020, Arm Limited and Contributors. All rights reserved. |
| * |
| * SPDX-License-Identifier: BSD-3-Clause |
| */ |
| |
| #ifndef FVP_DEFS_DYNAMIQ_DTSI |
| #define FVP_DEFS_DYNAMIQ_DTSI |
| |
| /* Set default topology values if not passed from platform's makefile */ |
| #ifdef FVP_CLUSTER_COUNT |
| #define CLUSTER_COUNT FVP_CLUSTER_COUNT |
| #else |
| #define CLUSTER_COUNT 1 |
| #endif |
| |
| #ifdef FVP_MAX_CPUS_PER_CLUSTER |
| #define CPUS_PER_CLUSTER FVP_MAX_CPUS_PER_CLUSTER |
| #else |
| #define CPUS_PER_CLUSTER 8 |
| #endif |
| |
| #define CONCAT(x, y) x##y |
| #define CONC(x, y) CONCAT(x, y) |
| |
| /* |
| * n - CPU number |
| * r - MPID |
| */ |
| #define CPU(n, r) \ |
| CPU##n:cpu@r## { \ |
| device_type = "cpu"; \ |
| compatible = "arm,armv8"; \ |
| reg = <0x0 0x##r>; \ |
| enable-method = "psci"; \ |
| cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>; \ |
| next-level-cache = <&L2_0>; \ |
| }; |
| |
| #if (PE_PER_CPU == 2) |
| #define THREAD(n) \ |
| thread##n { \ |
| cpu = <&CONC(CPU, __COUNTER__)>; \ |
| }; |
| |
| #define CORE(n) \ |
| core##n { \ |
| THREAD(0) \ |
| THREAD(1) \ |
| }; |
| |
| #else /* PE_PER_CPU == 1 */ |
| #define CORE(n) \ |
| core##n { \ |
| cpu = <&CPU##n>;\ |
| }; |
| #endif /* PE_PER_CORE */ |
| |
| #if (CPUS_PER_CLUSTER == 1) |
| #if (PE_PER_CPU == 1) |
| #define CPUS \ |
| CPU(0, 0) |
| #else |
| #define CPUS \ |
| CPU(0, 0) \ |
| CPU(1, 1) |
| #endif |
| #define CLUSTER(n) \ |
| cluster##n { \ |
| CORE(0) \ |
| }; |
| |
| #elif (CPUS_PER_CLUSTER == 2) |
| #if (PE_PER_CPU == 1) |
| #define CPUS \ |
| CPU(0, 0) \ |
| CPU(1, 100) |
| #else |
| #define CPUS \ |
| CPU(0, 0) \ |
| CPU(1, 1) \ |
| CPU(2, 100) \ |
| CPU(3, 101) |
| #endif |
| #define CLUSTER(n) \ |
| cluster##n { \ |
| CORE(0) \ |
| CORE(1) \ |
| }; |
| |
| #elif (CPUS_PER_CLUSTER == 3) |
| #if (PE_PER_CPU == 1) |
| #define CPUS \ |
| CPU(0, 0) \ |
| CPU(1, 100) \ |
| CPU(2, 200) |
| #else |
| #define CPUS \ |
| CPU(0, 0) \ |
| CPU(1, 1) \ |
| CPU(2, 100) \ |
| CPU(3, 101) \ |
| CPU(4, 200) \ |
| CPU(5, 201) |
| #endif |
| #define CLUSTER(n) \ |
| cluster##n { \ |
| CORE(0) \ |
| CORE(1) \ |
| CORE(2) \ |
| }; |
| |
| #elif (CPUS_PER_CLUSTER == 4) |
| #if (PE_PER_CPU == 1) |
| #define CPUS \ |
| CPU(0, 0) \ |
| CPU(1, 100) \ |
| CPU(2, 200) \ |
| CPU(3, 300) |
| #else |
| #define CPUS \ |
| CPU(0, 0) \ |
| CPU(1, 1) \ |
| CPU(2, 100) \ |
| CPU(3, 101) \ |
| CPU(4, 200) \ |
| CPU(5, 201) \ |
| CPU(6, 300) \ |
| CPU(7, 301) |
| #endif |
| #define CLUSTER(n) \ |
| cluster##n { \ |
| CORE(0) \ |
| CORE(1) \ |
| CORE(2) \ |
| CORE(3) \ |
| }; |
| |
| #elif (CPUS_PER_CLUSTER == 5) |
| #if (PE_PER_CPU == 1) |
| #define CPUS \ |
| CPU(0, 0) \ |
| CPU(1, 100) \ |
| CPU(2, 200) \ |
| CPU(3, 300) \ |
| CPU(4, 400) |
| #else |
| #define CPUS \ |
| CPU(0, 0) \ |
| CPU(1, 1) \ |
| CPU(2, 100) \ |
| CPU(3, 101) \ |
| CPU(4, 200) \ |
| CPU(5, 201) \ |
| CPU(6, 300) \ |
| CPU(7, 301) \ |
| CPU(8, 400) \ |
| CPU(9, 401) |
| #endif |
| #define CLUSTER(n) \ |
| cluster##n { \ |
| CORE(0) \ |
| CORE(1) \ |
| CORE(2) \ |
| CORE(3) \ |
| CORE(4) \ |
| }; |
| |
| #elif (CPUS_PER_CLUSTER == 6) |
| #if (PE_PER_CPU == 1) |
| #define CPUS \ |
| CPU(0, 0) \ |
| CPU(1, 100) \ |
| CPU(2, 200) \ |
| CPU(3, 300) \ |
| CPU(4, 400) \ |
| CPU(5, 500) |
| #else |
| #define CPUS \ |
| CPU(0, 0) \ |
| CPU(1, 1) \ |
| CPU(2, 100) \ |
| CPU(3, 101) \ |
| CPU(4, 200) \ |
| CPU(5, 201) \ |
| CPU(6, 300) \ |
| CPU(7, 301) \ |
| CPU(8, 400) \ |
| CPU(9, 401) \ |
| CPU(10, 500) \ |
| CPU(11, 501) |
| #endif |
| #define CLUSTER(n) \ |
| cluster##n { \ |
| CORE(0) \ |
| CORE(1) \ |
| CORE(2) \ |
| CORE(3) \ |
| CORE(4) \ |
| CORE(5) \ |
| }; |
| |
| #elif (CPUS_PER_CLUSTER == 7) |
| #if (PE_PER_CPU == 1) |
| #define CPUS \ |
| CPU(0, 0) \ |
| CPU(1, 100) \ |
| CPU(2, 200) \ |
| CPU(3, 300) \ |
| CPU(4, 400) \ |
| CPU(5, 500) \ |
| CPU(6, 600) |
| #else |
| #define CPUS \ |
| CPU(0, 0) \ |
| CPU(1, 1) \ |
| CPU(2, 100) \ |
| CPU(3, 101) \ |
| CPU(4, 200) \ |
| CPU(5, 201) \ |
| CPU(6, 300) \ |
| CPU(7, 301) \ |
| CPU(8, 400) \ |
| CPU(9, 401) \ |
| CPU(10, 500) \ |
| CPU(11, 501) \ |
| CPU(12, 600) \ |
| CPU(13, 601) |
| #endif |
| #define CLUSTER(n) \ |
| cluster##n { \ |
| CORE(0) \ |
| CORE(1) \ |
| CORE(2) \ |
| CORE(3) \ |
| CORE(4) \ |
| CORE(5) \ |
| CORE(6) \ |
| }; |
| |
| #else |
| #if (PE_PER_CPU == 1) |
| #define CPUS \ |
| CPU(0, 0) \ |
| CPU(1, 100) \ |
| CPU(2, 200) \ |
| CPU(3, 300) \ |
| CPU(4, 400) \ |
| CPU(5, 500) \ |
| CPU(6, 600) \ |
| CPU(7, 700) |
| #else |
| #define CPUS \ |
| CPU(0, 0) \ |
| CPU(1, 1) \ |
| CPU(2, 100) \ |
| CPU(3, 101) \ |
| CPU(4, 200) \ |
| CPU(5, 201) \ |
| CPU(6, 300) \ |
| CPU(7, 301) \ |
| CPU(8, 400) \ |
| CPU(9, 401) \ |
| CPU(10, 500) \ |
| CPU(11, 501) \ |
| CPU(12, 600) \ |
| CPU(13, 601) \ |
| CPU(14, 700) \ |
| CPU(15, 701) |
| #endif |
| #define CLUSTER(n) \ |
| cluster##n { \ |
| CORE(0) \ |
| CORE(1) \ |
| CORE(2) \ |
| CORE(3) \ |
| CORE(4) \ |
| CORE(5) \ |
| CORE(6) \ |
| CORE(7) \ |
| }; |
| #endif /* CPUS_PER_CLUSTER */ |
| |
| #define CPU_MAP \ |
| cpu-map { \ |
| CLUSTER(0) \ |
| }; |
| |
| #endif /* FVP_DEFS_DYNAMIQ_DTSI */ |