From 7b3b41d6766e61c5b61259dc4ba100befffd2769 Mon Sep 17 00:00:00 2001 From: Varun Wadekar Date: Fri, 28 Apr 2017 08:43:33 -0700 Subject: [PATCH] Tegra: retrieve power domain tree from the platforms The platform code generates the power domain tree. The handler to retrieve the tree should also reside in the platform code. This patch moves the plat_get_power_domain_tree_desc() to the individual platforms. Change-Id: Iaafc83ed381d83129501111ef655e3c58a8a553f Signed-off-by: Anthony Zhou Signed-off-by: Varun Wadekar --- plat/nvidia/tegra/common/tegra_topology.c | 31 +++++++-------- plat/nvidia/tegra/soc/t132/plat_setup.c | 42 ++++++++++++--------- plat/nvidia/tegra/soc/t186/plat_setup.c | 8 ++++ plat/nvidia/tegra/soc/t210/plat_setup.c | 46 +++++++++++++---------- 4 files changed, 74 insertions(+), 53 deletions(-) diff --git a/plat/nvidia/tegra/common/tegra_topology.c b/plat/nvidia/tegra/common/tegra_topology.c index 893f28ff2..c423d8c3e 100644 --- a/plat/nvidia/tegra/common/tegra_topology.c +++ b/plat/nvidia/tegra/common/tegra_topology.c @@ -7,19 +7,11 @@ #include #include +#include #include -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 >> MPIDR_AFF1_SHIFT) & MPIDR_AFFLVL_MASK; - cpu_id = (mpidr >> MPIDR_AFF0_SHIFT) & MPIDR_AFFLVL_MASK; + 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; - if (cluster_id >= PLATFORM_CLUSTER_COUNT) - return PSCI_E_NOT_PRESENT; + result = (int)cpu_id + ((int)cluster_id * 4); + + 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 f72b73ed5..3f9cda965 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 #include #include - +#include #include #include -/******************************************************************************* - * 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 15dbd1639..d6513ebc7 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 c7f7165c0..7841f84f8 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 #include #include - +#include #include #include -/******************************************************************************* - * 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 ******************************************************************************/