xref: /rk3399_ARM-atf/plat/renesas/rcar_gen4/plat_topology.c (revision e47c7a163cb9ddd18a83b7cff37fe76a040d0f80)
1*b45b5bacSMarek Vasut /*
2*b45b5bacSMarek Vasut  * Copyright (c) 2021-2025, Renesas Electronics Corporation. All rights reserved.
3*b45b5bacSMarek Vasut  *
4*b45b5bacSMarek Vasut  * SPDX-License-Identifier: BSD-3-Clause
5*b45b5bacSMarek Vasut  */
6*b45b5bacSMarek Vasut 
7*b45b5bacSMarek Vasut #include <common/debug.h>
8*b45b5bacSMarek Vasut #include <lib/psci/psci.h>
9*b45b5bacSMarek Vasut #include <plat_helpers.h>
10*b45b5bacSMarek Vasut #include <platform_def.h>
11*b45b5bacSMarek Vasut 
12*b45b5bacSMarek Vasut #include "rcar_private.h"
13*b45b5bacSMarek Vasut 
plat_get_power_domain_tree_desc(void)14*b45b5bacSMarek Vasut const unsigned char *plat_get_power_domain_tree_desc(void)
15*b45b5bacSMarek Vasut {
16*b45b5bacSMarek Vasut 	static const unsigned char rcar_power_domain_tree_desc[] = {
17*b45b5bacSMarek Vasut 		1,
18*b45b5bacSMarek Vasut 		PLATFORM_CLUSTER_COUNT,
19*b45b5bacSMarek Vasut 		PLATFORM_CLUSTER0_CORE_COUNT,
20*b45b5bacSMarek Vasut 		PLATFORM_CLUSTER1_CORE_COUNT,
21*b45b5bacSMarek Vasut 		PLATFORM_CLUSTER2_CORE_COUNT,
22*b45b5bacSMarek Vasut 		PLATFORM_CLUSTER3_CORE_COUNT
23*b45b5bacSMarek Vasut 	};
24*b45b5bacSMarek Vasut 
25*b45b5bacSMarek Vasut 	return rcar_power_domain_tree_desc;
26*b45b5bacSMarek Vasut }
27*b45b5bacSMarek Vasut 
plat_core_pos_by_mpidr(u_register_t mpidr)28*b45b5bacSMarek Vasut int plat_core_pos_by_mpidr(u_register_t mpidr)
29*b45b5bacSMarek Vasut {
30*b45b5bacSMarek Vasut 	u_register_t cpu;
31*b45b5bacSMarek Vasut 
32*b45b5bacSMarek Vasut 	/* ARMv8.2 arch */
33*b45b5bacSMarek Vasut 	if ((mpidr & (MPIDR_AFFLVL_MASK << MPIDR_AFF0_SHIFT)) != 0)
34*b45b5bacSMarek Vasut 		return -1;
35*b45b5bacSMarek Vasut 
36*b45b5bacSMarek Vasut 	cpu = plat_renesas_calc_core_pos(mpidr);
37*b45b5bacSMarek Vasut 	if (cpu >= PLATFORM_CORE_COUNT)
38*b45b5bacSMarek Vasut 		return -1;
39*b45b5bacSMarek Vasut 
40*b45b5bacSMarek Vasut 	return (int)cpu;
41*b45b5bacSMarek Vasut }
42*b45b5bacSMarek Vasut 
rcar_cluster_pos_by_mpidr(u_register_t mpidr)43*b45b5bacSMarek Vasut int32_t rcar_cluster_pos_by_mpidr(u_register_t mpidr)
44*b45b5bacSMarek Vasut {
45*b45b5bacSMarek Vasut 	u_register_t cluster;
46*b45b5bacSMarek Vasut 
47*b45b5bacSMarek Vasut 	/* ARMv8.2 arch */
48*b45b5bacSMarek Vasut 	if ((mpidr & (MPIDR_AFFLVL_MASK << MPIDR_AFF0_SHIFT)) != 0)
49*b45b5bacSMarek Vasut 		return -1;
50*b45b5bacSMarek Vasut 
51*b45b5bacSMarek Vasut 	cluster = MPIDR_AFFLVL2_VAL(mpidr);
52*b45b5bacSMarek Vasut 	if (cluster >= PLATFORM_CLUSTER_COUNT)
53*b45b5bacSMarek Vasut 		return -1;
54*b45b5bacSMarek Vasut 
55*b45b5bacSMarek Vasut 	return (int32_t)cluster;
56*b45b5bacSMarek Vasut }
57