blob: c9c6a9cc5a5c42c492805525bcc65e7f28761516 [file] [log] [blame]
Jiafei Pan46367ad2018-03-02 07:23:30 +00001/*
2 * Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#include <arch.h>
Antonio Nino Diaze0f90632018-12-14 00:18:21 +00008
9#include <lib/cassert.h>
10
Jiafei Pan46367ad2018-03-02 07:23:30 +000011#include "plat_ls.h"
12#include "platform_def.h"
13
14unsigned char ls1043_power_domain_tree_desc[LS1043_CLUSTER_COUNT + 1];
15
16
17CASSERT(LS1043_CLUSTER_COUNT && LS1043_CLUSTER_COUNT <= 256,
18 assert_invalid_ls1043_cluster_count);
19
20/*******************************************************************************
21 * This function dynamically constructs the topology according to
22 * LS1043_CLUSTER_COUNT and returns it.
23 ******************************************************************************/
24const unsigned char *plat_get_power_domain_tree_desc(void)
25{
26 int i;
27
28 ls1043_power_domain_tree_desc[0] = LS1043_CLUSTER_COUNT;
29
30 for (i = 0; i < LS1043_CLUSTER_COUNT; i++)
31 ls1043_power_domain_tree_desc[i + 1] =
32 LS1043_MAX_CPUS_PER_CLUSTER;
33
34 return ls1043_power_domain_tree_desc;
35}
36
37/*******************************************************************************
38 * This function returns the core count within the cluster corresponding to
39 * `mpidr`.
40 ******************************************************************************/
41unsigned int plat_ls_get_cluster_core_count(u_register_t mpidr)
42{
43 return LS1043_MAX_CPUS_PER_CLUSTER;
44}
45
46/*******************************************************************************
47 * This function implements a part of the critical interface between the psci
48 * generic layer and the platform that allows the former to query the platform
49 * to convert an MPIDR to a unique linear index. An error code (-1) is returned
50 * in case the MPIDR is invalid.
51 ******************************************************************************/
52int plat_core_pos_by_mpidr(u_register_t mpidr)
53{
54 if (ls_check_mpidr(mpidr) == -1)
55 return -1;
56
57 return plat_ls_calc_core_pos(mpidr);
58}