diff --git a/plat/nvidia/tegra/common/tegra_topology.c b/plat/nvidia/tegra/common/tegra_topology.c index 893f28ff24137b6f5b8a434ab54301b485f6ecc3..c423d8c3ebfd341e97c9f8df4ed87fb343ecc3a8 100644 --- a/plat/nvidia/tegra/common/tegra_topology.c +++ b/plat/nvidia/tegra/common/tegra_topology.c @@ -7,19 +7,11 @@ #include <platform_def.h> #include <arch.h> +#include <platform.h> #include <lib/psci/psci.h> -extern const unsigned char tegra_power_domain_tree_desc[]; #pragma weak plat_core_pos_by_mpidr -/******************************************************************************* - * This function returns the Tegra default topology tree information. - ******************************************************************************/ -const unsigned char *plat_get_power_domain_tree_desc(void) -{ - return tegra_power_domain_tree_desc; -} - /******************************************************************************* * This function implements a part of the critical interface between the psci * generic layer and the platform that allows the former to query the platform @@ -28,20 +20,25 @@ const unsigned char *plat_get_power_domain_tree_desc(void) ******************************************************************************/ int plat_core_pos_by_mpidr(u_register_t mpidr) { - unsigned int cluster_id, cpu_id; + u_register_t cluster_id, cpu_id; + int result; + + cluster_id = (mpidr >> (u_register_t)MPIDR_AFF1_SHIFT) & (u_register_t)MPIDR_AFFLVL_MASK; + cpu_id = (mpidr >> (u_register_t)MPIDR_AFF0_SHIFT) & (u_register_t)MPIDR_AFFLVL_MASK; - cluster_id = (mpidr >> MPIDR_AFF1_SHIFT) & MPIDR_AFFLVL_MASK; - cpu_id = (mpidr >> MPIDR_AFF0_SHIFT) & MPIDR_AFFLVL_MASK; + result = (int)cpu_id + ((int)cluster_id * 4); - if (cluster_id >= PLATFORM_CLUSTER_COUNT) - return PSCI_E_NOT_PRESENT; + if (cluster_id >= (u_register_t)PLATFORM_CLUSTER_COUNT) { + result = PSCI_E_NOT_PRESENT; + } /* * Validate cpu_id by checking whether it represents a CPU in * one of the two clusters present on the platform. */ - if (cpu_id >= PLATFORM_MAX_CPUS_PER_CLUSTER) - return PSCI_E_NOT_PRESENT; + if (cpu_id >= (u_register_t)PLATFORM_MAX_CPUS_PER_CLUSTER) { + result = PSCI_E_NOT_PRESENT; + } - return (cpu_id + (cluster_id * 4)); + return result; } diff --git a/plat/nvidia/tegra/soc/t132/plat_setup.c b/plat/nvidia/tegra/soc/t132/plat_setup.c index f72b73ed52d4f2c495ca033b47b59dcbc175de4c..3f9cda965fa3c062d1645a148a9c02b335ed3329 100644 --- a/plat/nvidia/tegra/soc/t132/plat_setup.c +++ b/plat/nvidia/tegra/soc/t132/plat_setup.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015-2016, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -7,25 +7,10 @@ #include <arch_helpers.h> #include <common/bl_common.h> #include <lib/xlat_tables/xlat_tables_v2.h> - +#include <platform.h> #include <tegra_def.h> #include <tegra_private.h> -/******************************************************************************* - * The Tegra power domain tree has a single system level power domain i.e. a - * single root node. The first entry in the power domain descriptor specifies - * the number of power domains at the highest power level. - ******************************************************************************* - */ -const unsigned char tegra_power_domain_tree_desc[] = { - /* No of root nodes */ - 1, - /* No of clusters */ - PLATFORM_CLUSTER_COUNT, - /* No of CPU cores */ - PLATFORM_CORE_COUNT, -}; - /* sets of MMIO ranges setup */ #define MMIO_RANGE_0_ADDR 0x50000000 #define MMIO_RANGE_1_ADDR 0x60000000 @@ -54,6 +39,29 @@ const mmap_region_t *plat_get_mmio_map(void) return tegra_mmap; } +/******************************************************************************* + * The Tegra power domain tree has a single system level power domain i.e. a + * single root node. The first entry in the power domain descriptor specifies + * the number of power domains at the highest power level. + ******************************************************************************* + */ +const unsigned char tegra_power_domain_tree_desc[] = { + /* No of root nodes */ + 1, + /* No of clusters */ + PLATFORM_CLUSTER_COUNT, + /* No of CPU cores */ + PLATFORM_CORE_COUNT, +}; + +/******************************************************************************* + * This function returns the Tegra default topology tree information. + ******************************************************************************/ +const unsigned char *plat_get_power_domain_tree_desc(void) +{ + return tegra_power_domain_tree_desc; +} + unsigned int plat_get_syscnt_freq2(void) { return 12000000; diff --git a/plat/nvidia/tegra/soc/t186/plat_setup.c b/plat/nvidia/tegra/soc/t186/plat_setup.c index 15dbd163907db3f12c54baddbebb6afb55460b30..d6513ebc7341a82dc335e1575dcc3fb922b46139 100644 --- a/plat/nvidia/tegra/soc/t186/plat_setup.c +++ b/plat/nvidia/tegra/soc/t186/plat_setup.c @@ -54,6 +54,14 @@ const unsigned char tegra_power_domain_tree_desc[] = { PLATFORM_MAX_CPUS_PER_CLUSTER }; +/******************************************************************************* + * This function returns the Tegra default topology tree information. + ******************************************************************************/ +const unsigned char *plat_get_power_domain_tree_desc(void) +{ + return tegra_power_domain_tree_desc; +} + /* * Table of regions to map using the MMU. */ diff --git a/plat/nvidia/tegra/soc/t210/plat_setup.c b/plat/nvidia/tegra/soc/t210/plat_setup.c index c7f7165c0a7fdcdc29ef4cfb66f31ee1da25c818..7841f84f8c64e0badb0f9c9e8c51a1d79871264a 100644 --- a/plat/nvidia/tegra/soc/t210/plat_setup.c +++ b/plat/nvidia/tegra/soc/t210/plat_setup.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015-2016, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -8,27 +8,10 @@ #include <common/bl_common.h> #include <drivers/console.h> #include <lib/xlat_tables/xlat_tables_v2.h> - +#include <platform.h> #include <tegra_def.h> #include <tegra_private.h> -/******************************************************************************* - * The Tegra power domain tree has a single system level power domain i.e. a - * single root node. The first entry in the power domain descriptor specifies - * the number of power domains at the highest power level. - ******************************************************************************* - */ -const unsigned char tegra_power_domain_tree_desc[] = { - /* No of root nodes */ - 1, - /* No of clusters */ - PLATFORM_CLUSTER_COUNT, - /* No of CPU cores - cluster0 */ - PLATFORM_MAX_CPUS_PER_CLUSTER, - /* No of CPU cores - cluster1 */ - PLATFORM_MAX_CPUS_PER_CLUSTER -}; - /* sets of MMIO ranges setup */ #define MMIO_RANGE_0_ADDR 0x50000000 #define MMIO_RANGE_1_ADDR 0x60000000 @@ -57,6 +40,31 @@ const mmap_region_t *plat_get_mmio_map(void) return tegra_mmap; } +/******************************************************************************* + * The Tegra power domain tree has a single system level power domain i.e. a + * single root node. The first entry in the power domain descriptor specifies + * the number of power domains at the highest power level. + ******************************************************************************* + */ +const unsigned char tegra_power_domain_tree_desc[] = { + /* No of root nodes */ + 1, + /* No of clusters */ + PLATFORM_CLUSTER_COUNT, + /* No of CPU cores - cluster0 */ + PLATFORM_MAX_CPUS_PER_CLUSTER, + /* No of CPU cores - cluster1 */ + PLATFORM_MAX_CPUS_PER_CLUSTER +}; + +/******************************************************************************* + * This function returns the Tegra default topology tree information. + ******************************************************************************/ +const unsigned char *plat_get_power_domain_tree_desc(void) +{ + return tegra_power_domain_tree_desc; +} + /******************************************************************************* * Handler to get the System Counter Frequency ******************************************************************************/