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