1*b4315306SDan Handley /* 2*b4315306SDan Handley * Copyright (c) 2015, ARM Limited and Contributors. All rights reserved. 3*b4315306SDan Handley * 4*b4315306SDan Handley * Redistribution and use in source and binary forms, with or without 5*b4315306SDan Handley * modification, are permitted provided that the following conditions are met: 6*b4315306SDan Handley * 7*b4315306SDan Handley * Redistributions of source code must retain the above copyright notice, this 8*b4315306SDan Handley * list of conditions and the following disclaimer. 9*b4315306SDan Handley * 10*b4315306SDan Handley * Redistributions in binary form must reproduce the above copyright notice, 11*b4315306SDan Handley * this list of conditions and the following disclaimer in the documentation 12*b4315306SDan Handley * and/or other materials provided with the distribution. 13*b4315306SDan Handley * 14*b4315306SDan Handley * Neither the name of ARM nor the names of its contributors may be used 15*b4315306SDan Handley * to endorse or promote products derived from this software without specific 16*b4315306SDan Handley * prior written permission. 17*b4315306SDan Handley * 18*b4315306SDan Handley * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19*b4315306SDan Handley * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20*b4315306SDan Handley * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21*b4315306SDan Handley * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 22*b4315306SDan Handley * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23*b4315306SDan Handley * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24*b4315306SDan Handley * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25*b4315306SDan Handley * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26*b4315306SDan Handley * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27*b4315306SDan Handley * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28*b4315306SDan Handley * POSSIBILITY OF SUCH DAMAGE. 29*b4315306SDan Handley */ 30*b4315306SDan Handley 31*b4315306SDan Handley #include <arch.h> 32*b4315306SDan Handley #include <psci.h> 33*b4315306SDan Handley #include <platform_def.h> 34*b4315306SDan Handley 35*b4315306SDan Handley /* 36*b4315306SDan Handley * Weak definitions use fixed topology. Strong definitions could make topology 37*b4315306SDan Handley * configurable 38*b4315306SDan Handley */ 39*b4315306SDan Handley #pragma weak plat_get_aff_count 40*b4315306SDan Handley #pragma weak plat_get_aff_state 41*b4315306SDan Handley #pragma weak plat_arm_topology_setup 42*b4315306SDan Handley 43*b4315306SDan Handley 44*b4315306SDan Handley unsigned int plat_get_aff_count(unsigned int aff_lvl, unsigned long mpidr) 45*b4315306SDan Handley { 46*b4315306SDan Handley /* Report 1 (absent) instance at levels higher that the cluster level */ 47*b4315306SDan Handley if (aff_lvl > MPIDR_AFFLVL1) 48*b4315306SDan Handley return 1; 49*b4315306SDan Handley 50*b4315306SDan Handley if (aff_lvl == MPIDR_AFFLVL1) 51*b4315306SDan Handley return ARM_CLUSTER_COUNT; 52*b4315306SDan Handley 53*b4315306SDan Handley return mpidr & 0x100 ? PLAT_ARM_CLUSTER1_CORE_COUNT : 54*b4315306SDan Handley PLAT_ARM_CLUSTER0_CORE_COUNT; 55*b4315306SDan Handley } 56*b4315306SDan Handley 57*b4315306SDan Handley unsigned int plat_get_aff_state(unsigned int aff_lvl, unsigned long mpidr) 58*b4315306SDan Handley { 59*b4315306SDan Handley return aff_lvl <= MPIDR_AFFLVL1 ? PSCI_AFF_PRESENT : PSCI_AFF_ABSENT; 60*b4315306SDan Handley } 61*b4315306SDan Handley 62*b4315306SDan Handley void plat_arm_topology_setup(void) 63*b4315306SDan Handley { 64*b4315306SDan Handley } 65