xref: /rk3399_ARM-atf/plat/arm/board/automotive_rd/platform/rdaspen/rdaspen_topology.c (revision c076475173c067cdfb7d6dd26657a49eef22cf21)
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