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