xref: /rk3399_ARM-atf/plat/qti/common/src/qti_topology.c (revision 37a12f04be9f7b5006abe89bef693d1c3c834f29)
1*5bd9c17dSSaurabh Gorecha /*
2*5bd9c17dSSaurabh Gorecha  * Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved.
3*5bd9c17dSSaurabh Gorecha  * Copyright (c) 2018,2020 The Linux Foundation. All rights reserved.
4*5bd9c17dSSaurabh Gorecha  *
5*5bd9c17dSSaurabh Gorecha  * SPDX-License-Identifier: BSD-3-Clause
6*5bd9c17dSSaurabh Gorecha  */
7*5bd9c17dSSaurabh Gorecha 
8*5bd9c17dSSaurabh Gorecha #include <arch.h>
9*5bd9c17dSSaurabh Gorecha 
10*5bd9c17dSSaurabh Gorecha #include <platform_def.h>
11*5bd9c17dSSaurabh Gorecha #include <qti_plat.h>
12*5bd9c17dSSaurabh Gorecha 
13*5bd9c17dSSaurabh Gorecha /* The QTI power domain tree descriptor */
14*5bd9c17dSSaurabh Gorecha const unsigned char qti_power_domain_tree_desc[] = {
15*5bd9c17dSSaurabh Gorecha 	/* One domain to represent PDC */
16*5bd9c17dSSaurabh Gorecha 	PLAT_PDC_COUNT,
17*5bd9c17dSSaurabh Gorecha 	/* One domain to represent RSC */
18*5bd9c17dSSaurabh Gorecha 	PLAT_RSC_COUNT,
19*5bd9c17dSSaurabh Gorecha 	/* There is one top-level FCM cluster */
20*5bd9c17dSSaurabh Gorecha 	PLAT_CLUSTER_COUNT,
21*5bd9c17dSSaurabh Gorecha 	/* No. of cores in the FCM cluster */
22*5bd9c17dSSaurabh Gorecha 	PLAT_CLUSTER0_CORE_COUNT
23*5bd9c17dSSaurabh Gorecha };
24*5bd9c17dSSaurabh Gorecha 
25*5bd9c17dSSaurabh Gorecha /*******************************************************************************
26*5bd9c17dSSaurabh Gorecha  * This function returns the ARM default topology tree information.
27*5bd9c17dSSaurabh Gorecha  ******************************************************************************/
plat_get_power_domain_tree_desc(void)28*5bd9c17dSSaurabh Gorecha const unsigned char *plat_get_power_domain_tree_desc(void)
29*5bd9c17dSSaurabh Gorecha {
30*5bd9c17dSSaurabh Gorecha 	return qti_power_domain_tree_desc;
31*5bd9c17dSSaurabh Gorecha }
32*5bd9c17dSSaurabh Gorecha 
33*5bd9c17dSSaurabh Gorecha /** Function: plat_core_pos_by_mpidr
34*5bd9c17dSSaurabh Gorecha  * This function implements a part of the critical interface between the psci
35*5bd9c17dSSaurabh Gorecha  * generic layer and the platform that allows the former to query the platform
36*5bd9c17dSSaurabh Gorecha  * to convert an MPIDR to a unique linear index. An error code (-1) is returned
37*5bd9c17dSSaurabh Gorecha  * in case the MPIDR is invalid.
38*5bd9c17dSSaurabh Gorecha  */
plat_core_pos_by_mpidr(u_register_t mpidr)39*5bd9c17dSSaurabh Gorecha int plat_core_pos_by_mpidr(u_register_t mpidr)
40*5bd9c17dSSaurabh Gorecha {
41*5bd9c17dSSaurabh Gorecha 	int core_linear_index = plat_qti_core_pos_by_mpidr(mpidr);
42*5bd9c17dSSaurabh Gorecha 
43*5bd9c17dSSaurabh Gorecha 	if (core_linear_index < PLATFORM_CORE_COUNT) {
44*5bd9c17dSSaurabh Gorecha 		return core_linear_index;
45*5bd9c17dSSaurabh Gorecha 	} else {
46*5bd9c17dSSaurabh Gorecha 		return -1;
47*5bd9c17dSSaurabh Gorecha 	}
48*5bd9c17dSSaurabh Gorecha }
49