1 /*
2 * Copyright (c) 2025, Arm Limited. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7 #include <plat/arm/common/plat_arm.h>
8 #include <plat/arm/css/common/css_pm.h>
9 #include <platform_def.h>
10
11 const unsigned char rdaspen_pd_tree_desc[] = {
12 PLAT_ARM_CLUSTER_COUNT,
13 PLATFORM_CLUSTER_0_CORE_COUNT,
14 PLATFORM_CLUSTER_1_CORE_COUNT,
15 PLATFORM_CLUSTER_2_CORE_COUNT,
16 PLATFORM_CLUSTER_3_CORE_COUNT,
17 };
18
19 static const unsigned char cluster_id_core_count_map[] = {
20 PLATFORM_CLUSTER_0_CORE_COUNT,
21 PLATFORM_CLUSTER_1_CORE_COUNT,
22 PLATFORM_CLUSTER_2_CORE_COUNT,
23 PLATFORM_CLUSTER_3_CORE_COUNT,
24 };
25
26 const uint32_t plat_css_core_pos_to_scmi_dmn_id_map[] = {
27 /* Primary core. */
28 (SET_SCMI_CHANNEL_ID(0x0) | SET_SCMI_DOMAIN_ID(0x0)),
29 #if PLATFORM_CORE_COUNT > 1
30 (SET_SCMI_CHANNEL_ID(0x0) | SET_SCMI_DOMAIN_ID(0x1)),
31 #endif
32 #if PLATFORM_CORE_COUNT > 2
33 (SET_SCMI_CHANNEL_ID(0x0) | SET_SCMI_DOMAIN_ID(0x2)),
34 #endif
35 #if PLATFORM_CORE_COUNT > 3
36 (SET_SCMI_CHANNEL_ID(0x0) | SET_SCMI_DOMAIN_ID(0x3)),
37 #endif
38 #if PLATFORM_CORE_COUNT > 4
39 (SET_SCMI_CHANNEL_ID(0x0) | SET_SCMI_DOMAIN_ID(0x4)),
40 #endif
41 #if PLATFORM_CORE_COUNT > 5
42 (SET_SCMI_CHANNEL_ID(0x0) | SET_SCMI_DOMAIN_ID(0x5)),
43 #endif
44 #if PLATFORM_CORE_COUNT > 6
45 (SET_SCMI_CHANNEL_ID(0x0) | SET_SCMI_DOMAIN_ID(0x6)),
46 #endif
47 #if PLATFORM_CORE_COUNT > 7
48 (SET_SCMI_CHANNEL_ID(0x0) | SET_SCMI_DOMAIN_ID(0x7)),
49 #endif
50 #if PLATFORM_CORE_COUNT > 8
51 (SET_SCMI_CHANNEL_ID(0x0) | SET_SCMI_DOMAIN_ID(0x8)),
52 #endif
53 #if PLATFORM_CORE_COUNT > 9
54 (SET_SCMI_CHANNEL_ID(0x0) | SET_SCMI_DOMAIN_ID(0x9)),
55 #endif
56 #if PLATFORM_CORE_COUNT > 10
57 (SET_SCMI_CHANNEL_ID(0x0) | SET_SCMI_DOMAIN_ID(0xA)),
58 #endif
59 #if PLATFORM_CORE_COUNT > 11
60 (SET_SCMI_CHANNEL_ID(0x0) | SET_SCMI_DOMAIN_ID(0xB)),
61 #endif
62 #if PLATFORM_CORE_COUNT > 12
63 (SET_SCMI_CHANNEL_ID(0x0) | SET_SCMI_DOMAIN_ID(0xC)),
64 #endif
65 #if PLATFORM_CORE_COUNT > 13
66 (SET_SCMI_CHANNEL_ID(0x0) | SET_SCMI_DOMAIN_ID(0xD)),
67 #endif
68 #if PLATFORM_CORE_COUNT > 14
69 (SET_SCMI_CHANNEL_ID(0x0) | SET_SCMI_DOMAIN_ID(0xE)),
70 #endif
71 #if PLATFORM_CORE_COUNT > 15
72 (SET_SCMI_CHANNEL_ID(0x0) | SET_SCMI_DOMAIN_ID(0xF))
73 #endif
74 };
75
76 /*******************************************************************************
77 * This function returns the topology tree information.
78 ******************************************************************************/
plat_get_power_domain_tree_desc(void)79 const unsigned char *plat_get_power_domain_tree_desc(void)
80 {
81 return rdaspen_pd_tree_desc;
82 }
83
84 /*******************************************************************************
85 * This function returns the platform total core count.
86 ******************************************************************************/
plat_arm_get_cluster_core_count(u_register_t mpidr)87 unsigned int plat_arm_get_cluster_core_count(u_register_t mpidr)
88 {
89 unsigned int cluster_id = MPIDR_AFFLVL2_VAL(mpidr);
90
91 if (cluster_id >= PLAT_ARM_CLUSTER_COUNT) {
92 ERROR("Unexpected cluster id %u\n", cluster_id);
93 panic();
94 }
95
96 return cluster_id_core_count_map[cluster_id];
97 }
98
99 /******************************************************************************
100 * Return the cluster ID of current CPU
101 *****************************************************************************/
plat_cluster_id_by_mpidr(u_register_t mpidr)102 unsigned int plat_cluster_id_by_mpidr(u_register_t mpidr)
103 {
104 return MPIDR_AFFLVL2_VAL(mpidr);
105 }
106