1*f180a3b7SHieu Nguyen /* 2*f180a3b7SHieu Nguyen * Copyright (c) 2025, Renesas Electronics Corporation. All rights reserved. 3*f180a3b7SHieu Nguyen * 4*f180a3b7SHieu Nguyen * SPDX-License-Identifier: BSD-3-Clause 5*f180a3b7SHieu Nguyen */ 6*f180a3b7SHieu Nguyen 7*f180a3b7SHieu Nguyen #include <common/debug.h> 8*f180a3b7SHieu Nguyen #include <lib/psci/psci.h> 9*f180a3b7SHieu Nguyen 10*f180a3b7SHieu Nguyen #include <plat_helpers.h> 11*f180a3b7SHieu Nguyen #include <platform_def.h> 12*f180a3b7SHieu Nguyen #include "rcar_private.h" 13*f180a3b7SHieu Nguyen #include "rcar_scmi_id.h" 14*f180a3b7SHieu Nguyen 15*f180a3b7SHieu Nguyen const unsigned char *plat_get_power_domain_tree_desc(void) 16*f180a3b7SHieu Nguyen { 17*f180a3b7SHieu Nguyen static const unsigned char rcar_power_domain_tree_desc[] = { 18*f180a3b7SHieu Nguyen 1, 19*f180a3b7SHieu Nguyen PLATFORM_CLUSTER_COUNT, 20*f180a3b7SHieu Nguyen PLATFORM_CLUSTER0_CORE_COUNT, 21*f180a3b7SHieu Nguyen PLATFORM_CLUSTER1_CORE_COUNT, 22*f180a3b7SHieu Nguyen PLATFORM_CLUSTER2_CORE_COUNT, 23*f180a3b7SHieu Nguyen PLATFORM_CLUSTER3_CORE_COUNT, 24*f180a3b7SHieu Nguyen PLATFORM_CLUSTER4_CORE_COUNT, 25*f180a3b7SHieu Nguyen PLATFORM_CLUSTER5_CORE_COUNT, 26*f180a3b7SHieu Nguyen PLATFORM_CLUSTER6_CORE_COUNT, 27*f180a3b7SHieu Nguyen PLATFORM_CLUSTER7_CORE_COUNT 28*f180a3b7SHieu Nguyen }; 29*f180a3b7SHieu Nguyen 30*f180a3b7SHieu Nguyen return rcar_power_domain_tree_desc; 31*f180a3b7SHieu Nguyen } 32*f180a3b7SHieu Nguyen 33*f180a3b7SHieu Nguyen /******************************************************************************* 34*f180a3b7SHieu Nguyen * The array mapping platform core position (implemented by plat_my_core_pos()) 35*f180a3b7SHieu Nguyen * to the SCMI power domain ID implemented by SCP. 36*f180a3b7SHieu Nguyen ******************************************************************************/ 37*f180a3b7SHieu Nguyen const uint32_t plat_css_core_pos_to_scmi_dmn_id_map[] = { 38*f180a3b7SHieu Nguyen (SET_SCMI_CHANNEL_ID(0x0) | SCP_POWER_DOMAIN_ID_PD_P_APU_CORE00), 39*f180a3b7SHieu Nguyen (SET_SCMI_CHANNEL_ID(0x0) | SCP_POWER_DOMAIN_ID_PD_P_APU_CORE01), 40*f180a3b7SHieu Nguyen (SET_SCMI_CHANNEL_ID(0x0) | SCP_POWER_DOMAIN_ID_PD_P_APU_CORE02), 41*f180a3b7SHieu Nguyen (SET_SCMI_CHANNEL_ID(0x0) | SCP_POWER_DOMAIN_ID_PD_P_APU_CORE03), 42*f180a3b7SHieu Nguyen (SET_SCMI_CHANNEL_ID(0x0) | SCP_POWER_DOMAIN_ID_PD_P_APU_CORE04), 43*f180a3b7SHieu Nguyen (SET_SCMI_CHANNEL_ID(0x0) | SCP_POWER_DOMAIN_ID_PD_P_APU_CORE05), 44*f180a3b7SHieu Nguyen (SET_SCMI_CHANNEL_ID(0x0) | SCP_POWER_DOMAIN_ID_PD_P_APU_CORE06), 45*f180a3b7SHieu Nguyen (SET_SCMI_CHANNEL_ID(0x0) | SCP_POWER_DOMAIN_ID_PD_P_APU_CORE07), 46*f180a3b7SHieu Nguyen (SET_SCMI_CHANNEL_ID(0x0) | SCP_POWER_DOMAIN_ID_PD_P_APU_CORE08), 47*f180a3b7SHieu Nguyen (SET_SCMI_CHANNEL_ID(0x0) | SCP_POWER_DOMAIN_ID_PD_P_APU_CORE09), 48*f180a3b7SHieu Nguyen (SET_SCMI_CHANNEL_ID(0x0) | SCP_POWER_DOMAIN_ID_PD_P_APU_CORE10), 49*f180a3b7SHieu Nguyen (SET_SCMI_CHANNEL_ID(0x0) | SCP_POWER_DOMAIN_ID_PD_P_APU_CORE11), 50*f180a3b7SHieu Nguyen (SET_SCMI_CHANNEL_ID(0x0) | SCP_POWER_DOMAIN_ID_PD_P_APU_CORE12), 51*f180a3b7SHieu Nguyen (SET_SCMI_CHANNEL_ID(0x0) | SCP_POWER_DOMAIN_ID_PD_P_APU_CORE13), 52*f180a3b7SHieu Nguyen (SET_SCMI_CHANNEL_ID(0x0) | SCP_POWER_DOMAIN_ID_PD_P_APU_CORE14), 53*f180a3b7SHieu Nguyen (SET_SCMI_CHANNEL_ID(0x0) | SCP_POWER_DOMAIN_ID_PD_P_APU_CORE15), 54*f180a3b7SHieu Nguyen (SET_SCMI_CHANNEL_ID(0x0) | SCP_POWER_DOMAIN_ID_PD_P_APU_CORE16), 55*f180a3b7SHieu Nguyen (SET_SCMI_CHANNEL_ID(0x0) | SCP_POWER_DOMAIN_ID_PD_P_APU_CORE17), 56*f180a3b7SHieu Nguyen (SET_SCMI_CHANNEL_ID(0x0) | SCP_POWER_DOMAIN_ID_PD_P_APU_CORE18), 57*f180a3b7SHieu Nguyen (SET_SCMI_CHANNEL_ID(0x0) | SCP_POWER_DOMAIN_ID_PD_P_APU_CORE19), 58*f180a3b7SHieu Nguyen (SET_SCMI_CHANNEL_ID(0x0) | SCP_POWER_DOMAIN_ID_PD_P_APU_CORE20), 59*f180a3b7SHieu Nguyen (SET_SCMI_CHANNEL_ID(0x0) | SCP_POWER_DOMAIN_ID_PD_P_APU_CORE21), 60*f180a3b7SHieu Nguyen (SET_SCMI_CHANNEL_ID(0x0) | SCP_POWER_DOMAIN_ID_PD_P_APU_CORE22), 61*f180a3b7SHieu Nguyen (SET_SCMI_CHANNEL_ID(0x0) | SCP_POWER_DOMAIN_ID_PD_P_APU_CORE23), 62*f180a3b7SHieu Nguyen (SET_SCMI_CHANNEL_ID(0x0) | SCP_POWER_DOMAIN_ID_PD_P_APU_CORE24), 63*f180a3b7SHieu Nguyen (SET_SCMI_CHANNEL_ID(0x0) | SCP_POWER_DOMAIN_ID_PD_P_APU_CORE25), 64*f180a3b7SHieu Nguyen (SET_SCMI_CHANNEL_ID(0x0) | SCP_POWER_DOMAIN_ID_PD_P_APU_CORE26), 65*f180a3b7SHieu Nguyen (SET_SCMI_CHANNEL_ID(0x0) | SCP_POWER_DOMAIN_ID_PD_P_APU_CORE27), 66*f180a3b7SHieu Nguyen (SET_SCMI_CHANNEL_ID(0x0) | SCP_POWER_DOMAIN_ID_PD_P_APU_CORE28), 67*f180a3b7SHieu Nguyen (SET_SCMI_CHANNEL_ID(0x0) | SCP_POWER_DOMAIN_ID_PD_P_APU_CORE29), 68*f180a3b7SHieu Nguyen (SET_SCMI_CHANNEL_ID(0x0) | SCP_POWER_DOMAIN_ID_PD_P_APU_CORE30), 69*f180a3b7SHieu Nguyen (SET_SCMI_CHANNEL_ID(0x0) | SCP_POWER_DOMAIN_ID_PD_P_APU_CORE31), 70*f180a3b7SHieu Nguyen }; 71*f180a3b7SHieu Nguyen 72*f180a3b7SHieu Nguyen 73*f180a3b7SHieu Nguyen int plat_core_pos_by_mpidr(u_register_t mpidr) 74*f180a3b7SHieu Nguyen { 75*f180a3b7SHieu Nguyen u_register_t cpu; 76*f180a3b7SHieu Nguyen 77*f180a3b7SHieu Nguyen /* ARMv8.2 arch */ 78*f180a3b7SHieu Nguyen if ((mpidr & (MPIDR_AFFLVL_MASK << MPIDR_AFF0_SHIFT)) != 0U) { 79*f180a3b7SHieu Nguyen return -1; 80*f180a3b7SHieu Nguyen } 81*f180a3b7SHieu Nguyen 82*f180a3b7SHieu Nguyen cpu = plat_renesas_calc_core_pos(mpidr); 83*f180a3b7SHieu Nguyen if (cpu >= PLATFORM_CORE_COUNT) { 84*f180a3b7SHieu Nguyen return -1; 85*f180a3b7SHieu Nguyen } 86*f180a3b7SHieu Nguyen 87*f180a3b7SHieu Nguyen return (int)cpu; 88*f180a3b7SHieu Nguyen } 89*f180a3b7SHieu Nguyen 90*f180a3b7SHieu Nguyen int32_t rcar_cluster_pos_by_mpidr(u_register_t mpidr) 91*f180a3b7SHieu Nguyen { 92*f180a3b7SHieu Nguyen u_register_t cluster; 93*f180a3b7SHieu Nguyen 94*f180a3b7SHieu Nguyen /* ARMv8.2 arch */ 95*f180a3b7SHieu Nguyen if ((mpidr & (MPIDR_AFFLVL_MASK << MPIDR_AFF0_SHIFT)) != 0U) { 96*f180a3b7SHieu Nguyen return -1; 97*f180a3b7SHieu Nguyen } 98*f180a3b7SHieu Nguyen 99*f180a3b7SHieu Nguyen cluster = MPIDR_AFFLVL2_VAL(mpidr); 100*f180a3b7SHieu Nguyen if (cluster >= PLATFORM_CLUSTER_COUNT) { 101*f180a3b7SHieu Nguyen return -1; 102*f180a3b7SHieu Nguyen } 103*f180a3b7SHieu Nguyen 104*f180a3b7SHieu Nguyen return (int32_t)cluster; 105*f180a3b7SHieu Nguyen } 106*f180a3b7SHieu Nguyen 107*f180a3b7SHieu Nguyen /* FIXME: Selective counter enablement is mandatory here ! */ 108*f180a3b7SHieu Nguyen uint16_t plat_amu_aux_enables[PLATFORM_CORE_COUNT] = { 109*f180a3b7SHieu Nguyen 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 110*f180a3b7SHieu Nguyen 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 111*f180a3b7SHieu Nguyen 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 112*f180a3b7SHieu Nguyen 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 113*f180a3b7SHieu Nguyen }; 114