xref: /rk3399_ARM-atf/plat/nxp/s32/s32g274ardb2/s32g2_soc.c (revision e73c3c3a6cbc1e81de4c9d73a5d713e6b37ae3b2)
1*e73c3c3aSGhennadi Procopciuc /*
2*e73c3c3aSGhennadi Procopciuc  * Copyright 2024 NXP
3*e73c3c3aSGhennadi Procopciuc  *
4*e73c3c3aSGhennadi Procopciuc  * SPDX-License-Identifier: BSD-3-Clause
5*e73c3c3aSGhennadi Procopciuc  */
6*e73c3c3aSGhennadi Procopciuc 
7*e73c3c3aSGhennadi Procopciuc #include <plat/common/platform.h>
8*e73c3c3aSGhennadi Procopciuc #include <plat_helpers.h>
9*e73c3c3aSGhennadi Procopciuc 
10*e73c3c3aSGhennadi Procopciuc const unsigned char *plat_get_power_domain_tree_desc(void)
11*e73c3c3aSGhennadi Procopciuc {
12*e73c3c3aSGhennadi Procopciuc 	static const unsigned char s32g_power_domain_tree_desc[] = {
13*e73c3c3aSGhennadi Procopciuc 		PLATFORM_SYSTEM_COUNT,
14*e73c3c3aSGhennadi Procopciuc 		PLATFORM_CLUSTER_COUNT,
15*e73c3c3aSGhennadi Procopciuc 		PLATFORM_CORE_COUNT / U(2),
16*e73c3c3aSGhennadi Procopciuc 		PLATFORM_CORE_COUNT / U(2),
17*e73c3c3aSGhennadi Procopciuc 	};
18*e73c3c3aSGhennadi Procopciuc 
19*e73c3c3aSGhennadi Procopciuc 	return s32g_power_domain_tree_desc;
20*e73c3c3aSGhennadi Procopciuc }
21*e73c3c3aSGhennadi Procopciuc 
22*e73c3c3aSGhennadi Procopciuc int plat_core_pos_by_mpidr(u_register_t mpidr)
23*e73c3c3aSGhennadi Procopciuc {
24*e73c3c3aSGhennadi Procopciuc 	unsigned int cluster_id, cpu_id, core_id;
25*e73c3c3aSGhennadi Procopciuc 	u_register_t mpidr_priv = mpidr;
26*e73c3c3aSGhennadi Procopciuc 
27*e73c3c3aSGhennadi Procopciuc 	mpidr_priv &= MPIDR_AFFINITY_MASK;
28*e73c3c3aSGhennadi Procopciuc 
29*e73c3c3aSGhennadi Procopciuc 	if ((mpidr_priv & ~(MPIDR_CLUSTER_MASK | MPIDR_CPU_MASK)) != 0) {
30*e73c3c3aSGhennadi Procopciuc 		return -1;
31*e73c3c3aSGhennadi Procopciuc 	}
32*e73c3c3aSGhennadi Procopciuc 
33*e73c3c3aSGhennadi Procopciuc 	cluster_id = MPIDR_AFFLVL1_VAL(mpidr_priv);
34*e73c3c3aSGhennadi Procopciuc 	cpu_id = MPIDR_AFFLVL0_VAL(mpidr_priv);
35*e73c3c3aSGhennadi Procopciuc 
36*e73c3c3aSGhennadi Procopciuc 	if ((cluster_id >= PLATFORM_CLUSTER_COUNT) ||
37*e73c3c3aSGhennadi Procopciuc 	    (cpu_id >= PLATFORM_MAX_CPUS_PER_CLUSTER)) {
38*e73c3c3aSGhennadi Procopciuc 		return -1;
39*e73c3c3aSGhennadi Procopciuc 	}
40*e73c3c3aSGhennadi Procopciuc 
41*e73c3c3aSGhennadi Procopciuc 	core_id = s32g2_core_pos_by_mpidr(mpidr_priv);
42*e73c3c3aSGhennadi Procopciuc 	if (core_id >= PLATFORM_CORE_COUNT) {
43*e73c3c3aSGhennadi Procopciuc 		return -1;
44*e73c3c3aSGhennadi Procopciuc 	}
45*e73c3c3aSGhennadi Procopciuc 
46*e73c3c3aSGhennadi Procopciuc 	return (int)core_id;
47*e73c3c3aSGhennadi Procopciuc }
48*e73c3c3aSGhennadi Procopciuc 
49*e73c3c3aSGhennadi Procopciuc unsigned int plat_get_syscnt_freq2(void)
50*e73c3c3aSGhennadi Procopciuc {
51*e73c3c3aSGhennadi Procopciuc 	return COUNTER_FREQUENCY;
52*e73c3c3aSGhennadi Procopciuc }
53