1878bd5ceSBenjamin Fair /* 2878bd5ceSBenjamin Fair * Copyright (c) 2017-2018, ARM Limited and Contributors. All rights reserved. 3878bd5ceSBenjamin Fair * 4878bd5ceSBenjamin Fair * SPDX-License-Identifier: BSD-3-Clause 5878bd5ceSBenjamin Fair */ 6878bd5ceSBenjamin Fair 7878bd5ceSBenjamin Fair #include <platform_def.h> 809d40e0eSAntonio Nino Diaz 909d40e0eSAntonio Nino Diaz #include <lib/psci/psci.h> 10878bd5ceSBenjamin Fair 11878bd5ceSBenjamin Fair /* The power domain tree descriptor */ 12878bd5ceSBenjamin Fair static unsigned char power_domain_tree_desc[] = { 1379a1a849SAndrew F. Davis PLATFORM_SYSTEM_COUNT, 14878bd5ceSBenjamin Fair PLATFORM_CLUSTER_COUNT, 15878bd5ceSBenjamin Fair K3_CLUSTER0_CORE_COUNT, 16878bd5ceSBenjamin Fair K3_CLUSTER1_CORE_COUNT, 17878bd5ceSBenjamin Fair K3_CLUSTER2_CORE_COUNT, 18878bd5ceSBenjamin Fair K3_CLUSTER3_CORE_COUNT, 19878bd5ceSBenjamin Fair }; 20878bd5ceSBenjamin Fair plat_get_power_domain_tree_desc(void)21878bd5ceSBenjamin Fairconst unsigned char *plat_get_power_domain_tree_desc(void) 22878bd5ceSBenjamin Fair { 23878bd5ceSBenjamin Fair return power_domain_tree_desc; 24878bd5ceSBenjamin Fair } 25878bd5ceSBenjamin Fair plat_core_pos_by_mpidr(u_register_t mpidr)26878bd5ceSBenjamin Fairint plat_core_pos_by_mpidr(u_register_t mpidr) 27878bd5ceSBenjamin Fair { 28*a82bf5adSAndrew F. Davis unsigned int cluster = MPIDR_AFFLVL1_VAL(mpidr); 29*a82bf5adSAndrew F. Davis unsigned int core = MPIDR_AFFLVL0_VAL(mpidr); 30878bd5ceSBenjamin Fair 31*a82bf5adSAndrew F. Davis if (MPIDR_AFFLVL3_VAL(mpidr) > 0 || 32*a82bf5adSAndrew F. Davis MPIDR_AFFLVL2_VAL(mpidr) > 0) { 33878bd5ceSBenjamin Fair return -1; 34878bd5ceSBenjamin Fair } 35*a82bf5adSAndrew F. Davis 36*a82bf5adSAndrew F. Davis if (cluster > 0) 37*a82bf5adSAndrew F. Davis core += K3_CLUSTER0_CORE_COUNT; 38*a82bf5adSAndrew F. Davis if (cluster > 1) 39*a82bf5adSAndrew F. Davis core += K3_CLUSTER1_CORE_COUNT; 40*a82bf5adSAndrew F. Davis if (cluster > 2) 41*a82bf5adSAndrew F. Davis core += K3_CLUSTER2_CORE_COUNT; 42*a82bf5adSAndrew F. Davis if (cluster > 3) 43*a82bf5adSAndrew F. Davis return -1; 44*a82bf5adSAndrew F. Davis 45*a82bf5adSAndrew F. Davis return core; 46878bd5ceSBenjamin Fair } 47