1*54fd6939SJiyong Park/* 2*54fd6939SJiyong Park * Copyright (c) 2020, Arm Limited and Contributors. All rights reserved. 3*54fd6939SJiyong Park * 4*54fd6939SJiyong Park * SPDX-License-Identifier: BSD-3-Clause 5*54fd6939SJiyong Park */ 6*54fd6939SJiyong Park 7*54fd6939SJiyong Park#ifndef FVP_DEFS_DYNAMIQ_DTSI 8*54fd6939SJiyong Park#define FVP_DEFS_DYNAMIQ_DTSI 9*54fd6939SJiyong Park 10*54fd6939SJiyong Park/* Set default topology values if not passed from platform's makefile */ 11*54fd6939SJiyong Park#ifdef FVP_CLUSTER_COUNT 12*54fd6939SJiyong Park#define CLUSTER_COUNT FVP_CLUSTER_COUNT 13*54fd6939SJiyong Park#else 14*54fd6939SJiyong Park#define CLUSTER_COUNT 1 15*54fd6939SJiyong Park#endif 16*54fd6939SJiyong Park 17*54fd6939SJiyong Park#ifdef FVP_MAX_CPUS_PER_CLUSTER 18*54fd6939SJiyong Park#define CPUS_PER_CLUSTER FVP_MAX_CPUS_PER_CLUSTER 19*54fd6939SJiyong Park#else 20*54fd6939SJiyong Park#define CPUS_PER_CLUSTER 8 21*54fd6939SJiyong Park#endif 22*54fd6939SJiyong Park 23*54fd6939SJiyong Park#define CONCAT(x, y) x##y 24*54fd6939SJiyong Park#define CONC(x, y) CONCAT(x, y) 25*54fd6939SJiyong Park 26*54fd6939SJiyong Park/* 27*54fd6939SJiyong Park * n - CPU number 28*54fd6939SJiyong Park * r - MPID 29*54fd6939SJiyong Park */ 30*54fd6939SJiyong Park#define CPU(n, r) \ 31*54fd6939SJiyong Park CPU##n:cpu@r## { \ 32*54fd6939SJiyong Park device_type = "cpu"; \ 33*54fd6939SJiyong Park compatible = "arm,armv8"; \ 34*54fd6939SJiyong Park reg = <0x0 0x##r>; \ 35*54fd6939SJiyong Park enable-method = "psci"; \ 36*54fd6939SJiyong Park cpu-idle-states = <&CPU_SLEEP_0 &CLUSTER_SLEEP_0>; \ 37*54fd6939SJiyong Park next-level-cache = <&L2_0>; \ 38*54fd6939SJiyong Park }; 39*54fd6939SJiyong Park 40*54fd6939SJiyong Park#if (PE_PER_CPU == 2) 41*54fd6939SJiyong Park#define THREAD(n) \ 42*54fd6939SJiyong Park thread##n { \ 43*54fd6939SJiyong Park cpu = <&CONC(CPU, __COUNTER__)>; \ 44*54fd6939SJiyong Park }; 45*54fd6939SJiyong Park 46*54fd6939SJiyong Park#define CORE(n) \ 47*54fd6939SJiyong Park core##n { \ 48*54fd6939SJiyong Park THREAD(0) \ 49*54fd6939SJiyong Park THREAD(1) \ 50*54fd6939SJiyong Park }; 51*54fd6939SJiyong Park 52*54fd6939SJiyong Park#else /* PE_PER_CPU == 1 */ 53*54fd6939SJiyong Park#define CORE(n) \ 54*54fd6939SJiyong Park core##n { \ 55*54fd6939SJiyong Park cpu = <&CPU##n>;\ 56*54fd6939SJiyong Park }; 57*54fd6939SJiyong Park#endif /* PE_PER_CORE */ 58*54fd6939SJiyong Park 59*54fd6939SJiyong Park#if (CPUS_PER_CLUSTER == 1) 60*54fd6939SJiyong Park#if (PE_PER_CPU == 1) 61*54fd6939SJiyong Park#define CPUS \ 62*54fd6939SJiyong Park CPU(0, 0) 63*54fd6939SJiyong Park#else 64*54fd6939SJiyong Park#define CPUS \ 65*54fd6939SJiyong Park CPU(0, 0) \ 66*54fd6939SJiyong Park CPU(1, 1) 67*54fd6939SJiyong Park#endif 68*54fd6939SJiyong Park#define CLUSTER(n) \ 69*54fd6939SJiyong Park cluster##n { \ 70*54fd6939SJiyong Park CORE(0) \ 71*54fd6939SJiyong Park }; 72*54fd6939SJiyong Park 73*54fd6939SJiyong Park#elif (CPUS_PER_CLUSTER == 2) 74*54fd6939SJiyong Park#if (PE_PER_CPU == 1) 75*54fd6939SJiyong Park#define CPUS \ 76*54fd6939SJiyong Park CPU(0, 0) \ 77*54fd6939SJiyong Park CPU(1, 100) 78*54fd6939SJiyong Park#else 79*54fd6939SJiyong Park#define CPUS \ 80*54fd6939SJiyong Park CPU(0, 0) \ 81*54fd6939SJiyong Park CPU(1, 1) \ 82*54fd6939SJiyong Park CPU(2, 100) \ 83*54fd6939SJiyong Park CPU(3, 101) 84*54fd6939SJiyong Park#endif 85*54fd6939SJiyong Park#define CLUSTER(n) \ 86*54fd6939SJiyong Park cluster##n { \ 87*54fd6939SJiyong Park CORE(0) \ 88*54fd6939SJiyong Park CORE(1) \ 89*54fd6939SJiyong Park }; 90*54fd6939SJiyong Park 91*54fd6939SJiyong Park#elif (CPUS_PER_CLUSTER == 3) 92*54fd6939SJiyong Park#if (PE_PER_CPU == 1) 93*54fd6939SJiyong Park#define CPUS \ 94*54fd6939SJiyong Park CPU(0, 0) \ 95*54fd6939SJiyong Park CPU(1, 100) \ 96*54fd6939SJiyong Park CPU(2, 200) 97*54fd6939SJiyong Park#else 98*54fd6939SJiyong Park#define CPUS \ 99*54fd6939SJiyong Park CPU(0, 0) \ 100*54fd6939SJiyong Park CPU(1, 1) \ 101*54fd6939SJiyong Park CPU(2, 100) \ 102*54fd6939SJiyong Park CPU(3, 101) \ 103*54fd6939SJiyong Park CPU(4, 200) \ 104*54fd6939SJiyong Park CPU(5, 201) 105*54fd6939SJiyong Park#endif 106*54fd6939SJiyong Park#define CLUSTER(n) \ 107*54fd6939SJiyong Park cluster##n { \ 108*54fd6939SJiyong Park CORE(0) \ 109*54fd6939SJiyong Park CORE(1) \ 110*54fd6939SJiyong Park CORE(2) \ 111*54fd6939SJiyong Park }; 112*54fd6939SJiyong Park 113*54fd6939SJiyong Park#elif (CPUS_PER_CLUSTER == 4) 114*54fd6939SJiyong Park#if (PE_PER_CPU == 1) 115*54fd6939SJiyong Park#define CPUS \ 116*54fd6939SJiyong Park CPU(0, 0) \ 117*54fd6939SJiyong Park CPU(1, 100) \ 118*54fd6939SJiyong Park CPU(2, 200) \ 119*54fd6939SJiyong Park CPU(3, 300) 120*54fd6939SJiyong Park#else 121*54fd6939SJiyong Park#define CPUS \ 122*54fd6939SJiyong Park CPU(0, 0) \ 123*54fd6939SJiyong Park CPU(1, 1) \ 124*54fd6939SJiyong Park CPU(2, 100) \ 125*54fd6939SJiyong Park CPU(3, 101) \ 126*54fd6939SJiyong Park CPU(4, 200) \ 127*54fd6939SJiyong Park CPU(5, 201) \ 128*54fd6939SJiyong Park CPU(6, 300) \ 129*54fd6939SJiyong Park CPU(7, 301) 130*54fd6939SJiyong Park#endif 131*54fd6939SJiyong Park#define CLUSTER(n) \ 132*54fd6939SJiyong Park cluster##n { \ 133*54fd6939SJiyong Park CORE(0) \ 134*54fd6939SJiyong Park CORE(1) \ 135*54fd6939SJiyong Park CORE(2) \ 136*54fd6939SJiyong Park CORE(3) \ 137*54fd6939SJiyong Park }; 138*54fd6939SJiyong Park 139*54fd6939SJiyong Park#elif (CPUS_PER_CLUSTER == 5) 140*54fd6939SJiyong Park#if (PE_PER_CPU == 1) 141*54fd6939SJiyong Park#define CPUS \ 142*54fd6939SJiyong Park CPU(0, 0) \ 143*54fd6939SJiyong Park CPU(1, 100) \ 144*54fd6939SJiyong Park CPU(2, 200) \ 145*54fd6939SJiyong Park CPU(3, 300) \ 146*54fd6939SJiyong Park CPU(4, 400) 147*54fd6939SJiyong Park#else 148*54fd6939SJiyong Park#define CPUS \ 149*54fd6939SJiyong Park CPU(0, 0) \ 150*54fd6939SJiyong Park CPU(1, 1) \ 151*54fd6939SJiyong Park CPU(2, 100) \ 152*54fd6939SJiyong Park CPU(3, 101) \ 153*54fd6939SJiyong Park CPU(4, 200) \ 154*54fd6939SJiyong Park CPU(5, 201) \ 155*54fd6939SJiyong Park CPU(6, 300) \ 156*54fd6939SJiyong Park CPU(7, 301) \ 157*54fd6939SJiyong Park CPU(8, 400) \ 158*54fd6939SJiyong Park CPU(9, 401) 159*54fd6939SJiyong Park#endif 160*54fd6939SJiyong Park#define CLUSTER(n) \ 161*54fd6939SJiyong Park cluster##n { \ 162*54fd6939SJiyong Park CORE(0) \ 163*54fd6939SJiyong Park CORE(1) \ 164*54fd6939SJiyong Park CORE(2) \ 165*54fd6939SJiyong Park CORE(3) \ 166*54fd6939SJiyong Park CORE(4) \ 167*54fd6939SJiyong Park }; 168*54fd6939SJiyong Park 169*54fd6939SJiyong Park#elif (CPUS_PER_CLUSTER == 6) 170*54fd6939SJiyong Park#if (PE_PER_CPU == 1) 171*54fd6939SJiyong Park#define CPUS \ 172*54fd6939SJiyong Park CPU(0, 0) \ 173*54fd6939SJiyong Park CPU(1, 100) \ 174*54fd6939SJiyong Park CPU(2, 200) \ 175*54fd6939SJiyong Park CPU(3, 300) \ 176*54fd6939SJiyong Park CPU(4, 400) \ 177*54fd6939SJiyong Park CPU(5, 500) 178*54fd6939SJiyong Park#else 179*54fd6939SJiyong Park#define CPUS \ 180*54fd6939SJiyong Park CPU(0, 0) \ 181*54fd6939SJiyong Park CPU(1, 1) \ 182*54fd6939SJiyong Park CPU(2, 100) \ 183*54fd6939SJiyong Park CPU(3, 101) \ 184*54fd6939SJiyong Park CPU(4, 200) \ 185*54fd6939SJiyong Park CPU(5, 201) \ 186*54fd6939SJiyong Park CPU(6, 300) \ 187*54fd6939SJiyong Park CPU(7, 301) \ 188*54fd6939SJiyong Park CPU(8, 400) \ 189*54fd6939SJiyong Park CPU(9, 401) \ 190*54fd6939SJiyong Park CPU(10, 500) \ 191*54fd6939SJiyong Park CPU(11, 501) 192*54fd6939SJiyong Park#endif 193*54fd6939SJiyong Park#define CLUSTER(n) \ 194*54fd6939SJiyong Park cluster##n { \ 195*54fd6939SJiyong Park CORE(0) \ 196*54fd6939SJiyong Park CORE(1) \ 197*54fd6939SJiyong Park CORE(2) \ 198*54fd6939SJiyong Park CORE(3) \ 199*54fd6939SJiyong Park CORE(4) \ 200*54fd6939SJiyong Park CORE(5) \ 201*54fd6939SJiyong Park }; 202*54fd6939SJiyong Park 203*54fd6939SJiyong Park#elif (CPUS_PER_CLUSTER == 7) 204*54fd6939SJiyong Park#if (PE_PER_CPU == 1) 205*54fd6939SJiyong Park#define CPUS \ 206*54fd6939SJiyong Park CPU(0, 0) \ 207*54fd6939SJiyong Park CPU(1, 100) \ 208*54fd6939SJiyong Park CPU(2, 200) \ 209*54fd6939SJiyong Park CPU(3, 300) \ 210*54fd6939SJiyong Park CPU(4, 400) \ 211*54fd6939SJiyong Park CPU(5, 500) \ 212*54fd6939SJiyong Park CPU(6, 600) 213*54fd6939SJiyong Park#else 214*54fd6939SJiyong Park#define CPUS \ 215*54fd6939SJiyong Park CPU(0, 0) \ 216*54fd6939SJiyong Park CPU(1, 1) \ 217*54fd6939SJiyong Park CPU(2, 100) \ 218*54fd6939SJiyong Park CPU(3, 101) \ 219*54fd6939SJiyong Park CPU(4, 200) \ 220*54fd6939SJiyong Park CPU(5, 201) \ 221*54fd6939SJiyong Park CPU(6, 300) \ 222*54fd6939SJiyong Park CPU(7, 301) \ 223*54fd6939SJiyong Park CPU(8, 400) \ 224*54fd6939SJiyong Park CPU(9, 401) \ 225*54fd6939SJiyong Park CPU(10, 500) \ 226*54fd6939SJiyong Park CPU(11, 501) \ 227*54fd6939SJiyong Park CPU(12, 600) \ 228*54fd6939SJiyong Park CPU(13, 601) 229*54fd6939SJiyong Park#endif 230*54fd6939SJiyong Park#define CLUSTER(n) \ 231*54fd6939SJiyong Park cluster##n { \ 232*54fd6939SJiyong Park CORE(0) \ 233*54fd6939SJiyong Park CORE(1) \ 234*54fd6939SJiyong Park CORE(2) \ 235*54fd6939SJiyong Park CORE(3) \ 236*54fd6939SJiyong Park CORE(4) \ 237*54fd6939SJiyong Park CORE(5) \ 238*54fd6939SJiyong Park CORE(6) \ 239*54fd6939SJiyong Park }; 240*54fd6939SJiyong Park 241*54fd6939SJiyong Park#else 242*54fd6939SJiyong Park#if (PE_PER_CPU == 1) 243*54fd6939SJiyong Park#define CPUS \ 244*54fd6939SJiyong Park CPU(0, 0) \ 245*54fd6939SJiyong Park CPU(1, 100) \ 246*54fd6939SJiyong Park CPU(2, 200) \ 247*54fd6939SJiyong Park CPU(3, 300) \ 248*54fd6939SJiyong Park CPU(4, 400) \ 249*54fd6939SJiyong Park CPU(5, 500) \ 250*54fd6939SJiyong Park CPU(6, 600) \ 251*54fd6939SJiyong Park CPU(7, 700) 252*54fd6939SJiyong Park#else 253*54fd6939SJiyong Park#define CPUS \ 254*54fd6939SJiyong Park CPU(0, 0) \ 255*54fd6939SJiyong Park CPU(1, 1) \ 256*54fd6939SJiyong Park CPU(2, 100) \ 257*54fd6939SJiyong Park CPU(3, 101) \ 258*54fd6939SJiyong Park CPU(4, 200) \ 259*54fd6939SJiyong Park CPU(5, 201) \ 260*54fd6939SJiyong Park CPU(6, 300) \ 261*54fd6939SJiyong Park CPU(7, 301) \ 262*54fd6939SJiyong Park CPU(8, 400) \ 263*54fd6939SJiyong Park CPU(9, 401) \ 264*54fd6939SJiyong Park CPU(10, 500) \ 265*54fd6939SJiyong Park CPU(11, 501) \ 266*54fd6939SJiyong Park CPU(12, 600) \ 267*54fd6939SJiyong Park CPU(13, 601) \ 268*54fd6939SJiyong Park CPU(14, 700) \ 269*54fd6939SJiyong Park CPU(15, 701) 270*54fd6939SJiyong Park#endif 271*54fd6939SJiyong Park#define CLUSTER(n) \ 272*54fd6939SJiyong Park cluster##n { \ 273*54fd6939SJiyong Park CORE(0) \ 274*54fd6939SJiyong Park CORE(1) \ 275*54fd6939SJiyong Park CORE(2) \ 276*54fd6939SJiyong Park CORE(3) \ 277*54fd6939SJiyong Park CORE(4) \ 278*54fd6939SJiyong Park CORE(5) \ 279*54fd6939SJiyong Park CORE(6) \ 280*54fd6939SJiyong Park CORE(7) \ 281*54fd6939SJiyong Park }; 282*54fd6939SJiyong Park#endif /* CPUS_PER_CLUSTER */ 283*54fd6939SJiyong Park 284*54fd6939SJiyong Park#define CPU_MAP \ 285*54fd6939SJiyong Park cpu-map { \ 286*54fd6939SJiyong Park CLUSTER(0) \ 287*54fd6939SJiyong Park }; 288*54fd6939SJiyong Park 289*54fd6939SJiyong Park#endif /* FVP_DEFS_DYNAMIQ_DTSI */ 290