1*499c2713SBiju Das /* 2*499c2713SBiju Das * Copyright (c) 2018, Renesas Electronics Corporation. All rights reserved. 3*499c2713SBiju Das * 4*499c2713SBiju Das * SPDX-License-Identifier: BSD-3-Clause 5*499c2713SBiju Das */ 6*499c2713SBiju Das 7*499c2713SBiju Das #include <platform_def.h> 8*499c2713SBiju Das 9*499c2713SBiju Das #include <common/debug.h> 10*499c2713SBiju Das #include <lib/psci/psci.h> 11*499c2713SBiju Das 12*499c2713SBiju Das static const unsigned char rcar_power_domain_tree_desc[] = { 13*499c2713SBiju Das 1, 14*499c2713SBiju Das PLATFORM_CLUSTER_COUNT, 15*499c2713SBiju Das PLATFORM_CLUSTER0_CORE_COUNT, 16*499c2713SBiju Das PLATFORM_CLUSTER1_CORE_COUNT 17*499c2713SBiju Das }; 18*499c2713SBiju Das 19*499c2713SBiju Das const unsigned char *plat_get_power_domain_tree_desc(void) 20*499c2713SBiju Das { 21*499c2713SBiju Das return rcar_power_domain_tree_desc; 22*499c2713SBiju Das } 23*499c2713SBiju Das 24*499c2713SBiju Das int plat_core_pos_by_mpidr(u_register_t mpidr) 25*499c2713SBiju Das { 26*499c2713SBiju Das unsigned int cluster_id, cpu_id; 27*499c2713SBiju Das 28*499c2713SBiju Das mpidr &= MPIDR_AFFINITY_MASK; 29*499c2713SBiju Das 30*499c2713SBiju Das if (mpidr & ~(MPIDR_CLUSTER_MASK | MPIDR_CPU_MASK)) 31*499c2713SBiju Das return -1; 32*499c2713SBiju Das 33*499c2713SBiju Das cluster_id = (mpidr >> MPIDR_AFF1_SHIFT) & MPIDR_AFFLVL_MASK; 34*499c2713SBiju Das cpu_id = (mpidr >> MPIDR_AFF0_SHIFT) & MPIDR_AFFLVL_MASK; 35*499c2713SBiju Das 36*499c2713SBiju Das if (cluster_id >= PLATFORM_CLUSTER_COUNT) 37*499c2713SBiju Das return -1; 38*499c2713SBiju Das 39*499c2713SBiju Das if (cluster_id == 0 && cpu_id >= PLATFORM_CLUSTER0_CORE_COUNT) 40*499c2713SBiju Das return -1; 41*499c2713SBiju Das 42*499c2713SBiju Das if (cluster_id == 1 && cpu_id >= PLATFORM_CLUSTER1_CORE_COUNT) 43*499c2713SBiju Das return -1; 44*499c2713SBiju Das 45*499c2713SBiju Das return (cpu_id + cluster_id * PLATFORM_CLUSTER0_CORE_COUNT); 46*499c2713SBiju Das } 47*499c2713SBiju Das 48