xref: /rk3399_ARM-atf/plat/ti/k3/common/k3_topology.c (revision 9a25f98261c134e3af4c1610c4afc74b01201fa2)
1878bd5ceSBenjamin Fair /*
2878bd5ceSBenjamin Fair  * Copyright (c) 2017-2018, ARM Limited and Contributors. All rights reserved.
3878bd5ceSBenjamin Fair  *
4878bd5ceSBenjamin Fair  * SPDX-License-Identifier: BSD-3-Clause
5878bd5ceSBenjamin Fair  */
6878bd5ceSBenjamin Fair 
7878bd5ceSBenjamin Fair #include <platform_def.h>
809d40e0eSAntonio Nino Diaz 
909d40e0eSAntonio Nino Diaz #include <lib/psci/psci.h>
10878bd5ceSBenjamin Fair 
11878bd5ceSBenjamin Fair /* The power domain tree descriptor */
12878bd5ceSBenjamin Fair static unsigned char power_domain_tree_desc[] = {
1379a1a849SAndrew F. Davis 	PLATFORM_SYSTEM_COUNT,
14878bd5ceSBenjamin Fair 	PLATFORM_CLUSTER_COUNT,
15878bd5ceSBenjamin Fair 	K3_CLUSTER0_CORE_COUNT,
16878bd5ceSBenjamin Fair 	K3_CLUSTER1_CORE_COUNT,
17878bd5ceSBenjamin Fair 	K3_CLUSTER2_CORE_COUNT,
18878bd5ceSBenjamin Fair 	K3_CLUSTER3_CORE_COUNT,
19878bd5ceSBenjamin Fair };
20878bd5ceSBenjamin Fair 
plat_get_power_domain_tree_desc(void)21878bd5ceSBenjamin Fair const unsigned char *plat_get_power_domain_tree_desc(void)
22878bd5ceSBenjamin Fair {
23878bd5ceSBenjamin Fair 	return power_domain_tree_desc;
24878bd5ceSBenjamin Fair }
25878bd5ceSBenjamin Fair 
plat_core_pos_by_mpidr(u_register_t mpidr)26878bd5ceSBenjamin Fair int plat_core_pos_by_mpidr(u_register_t mpidr)
27878bd5ceSBenjamin Fair {
28*a82bf5adSAndrew F. Davis 	unsigned int cluster = MPIDR_AFFLVL1_VAL(mpidr);
29*a82bf5adSAndrew F. Davis 	unsigned int core = MPIDR_AFFLVL0_VAL(mpidr);
30878bd5ceSBenjamin Fair 
31*a82bf5adSAndrew F. Davis 	if (MPIDR_AFFLVL3_VAL(mpidr) > 0 ||
32*a82bf5adSAndrew F. Davis 	    MPIDR_AFFLVL2_VAL(mpidr) > 0) {
33878bd5ceSBenjamin Fair 		return -1;
34878bd5ceSBenjamin Fair 	}
35*a82bf5adSAndrew F. Davis 
36*a82bf5adSAndrew F. Davis 	if (cluster > 0)
37*a82bf5adSAndrew F. Davis 		core += K3_CLUSTER0_CORE_COUNT;
38*a82bf5adSAndrew F. Davis 	if (cluster > 1)
39*a82bf5adSAndrew F. Davis 		core += K3_CLUSTER1_CORE_COUNT;
40*a82bf5adSAndrew F. Davis 	if (cluster > 2)
41*a82bf5adSAndrew F. Davis 		core += K3_CLUSTER2_CORE_COUNT;
42*a82bf5adSAndrew F. Davis 	if (cluster > 3)
43*a82bf5adSAndrew F. Davis 		return -1;
44*a82bf5adSAndrew F. Davis 
45*a82bf5adSAndrew F. Davis 	return core;
46878bd5ceSBenjamin Fair }
47