plat/arm: add board support for rd-daniel platform
Add the initial board support for RD-Daniel Config-M platform. Change-Id: I36df16c745bfe4bc817e275ad4722e5de57733cd Signed-off-by: Jagadeesh Ujja <jagadeesh.ujja@arm.com> Signed-off-by: Aditya Angadi <aditya.angadi@arm.com>
This commit is contained in:
parent
fe2293df83
commit
2103a73bf2
|
@ -0,0 +1,22 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2020, ARM Limited and Contributors. All rights reserved.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
/ {
|
||||||
|
/* compatible string */
|
||||||
|
compatible = "arm,rd-daniel";
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Place holder for system-id node with default values. The
|
||||||
|
* value of platform-id and config-id will be set to the
|
||||||
|
* correct values during the BL2 stage of boot.
|
||||||
|
*/
|
||||||
|
system-id {
|
||||||
|
platform-id = <0x0>;
|
||||||
|
config-id = <0x0>;
|
||||||
|
multi-chip-mode = <0x0>;
|
||||||
|
};
|
||||||
|
};
|
|
@ -0,0 +1,26 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2020, ARM Limited and Contributors. All rights reserved.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
/* Platform Config */
|
||||||
|
compatible = "arm,tb_fw";
|
||||||
|
nt_fw_config_addr = <0x0 0xFEF00000>;
|
||||||
|
nt_fw_config_max_size = <0x0100000>;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The following two entries are placeholders for Mbed TLS
|
||||||
|
* heap information. The default values don't matter since
|
||||||
|
* they will be overwritten by BL1.
|
||||||
|
* In case of having shared Mbed TLS heap between BL1 and BL2,
|
||||||
|
* BL1 will populate these two properties with the respective
|
||||||
|
* info about the shared heap. This info will be available for
|
||||||
|
* BL2 in order to locate and re-use the heap.
|
||||||
|
*/
|
||||||
|
mbedtls_heap_addr = <0x0 0x0>;
|
||||||
|
mbedtls_heap_size = <0x0>;
|
||||||
|
};
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2020, ARM Limited and Contributors. All rights reserved.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef PLATFORM_DEF_H
|
||||||
|
#define PLATFORM_DEF_H
|
||||||
|
|
||||||
|
#include <lib/utils_def.h>
|
||||||
|
|
||||||
|
#include <sgi_base_platform_def.h>
|
||||||
|
|
||||||
|
#define PLAT_ARM_CLUSTER_COUNT U(16)
|
||||||
|
#define CSS_SGI_MAX_CPUS_PER_CLUSTER U(1)
|
||||||
|
#define CSS_SGI_MAX_PE_PER_CPU U(1)
|
||||||
|
|
||||||
|
#define PLAT_CSS_MHU_BASE UL(0x45400000)
|
||||||
|
#define PLAT_MHUV2_BASE PLAT_CSS_MHU_BASE
|
||||||
|
|
||||||
|
#define CSS_SYSTEM_PWR_DMN_LVL ARM_PWR_LVL2
|
||||||
|
#define PLAT_MAX_PWR_LVL ARM_PWR_LVL1
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Physical and virtual address space limits for MMU in AARCH64 & AARCH32 modes
|
||||||
|
*/
|
||||||
|
#ifdef __aarch64__
|
||||||
|
#define PLAT_PHY_ADDR_SPACE_SIZE (1ULL << 42)
|
||||||
|
#define PLAT_VIRT_ADDR_SPACE_SIZE (1ULL << 42)
|
||||||
|
#else
|
||||||
|
#define PLAT_PHY_ADDR_SPACE_SIZE (1ULL << 32)
|
||||||
|
#define PLAT_VIRT_ADDR_SPACE_SIZE (1ULL << 32)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* GIC related constants */
|
||||||
|
#define PLAT_ARM_GICD_BASE UL(0x30000000)
|
||||||
|
#define PLAT_ARM_GICC_BASE UL(0x2C000000)
|
||||||
|
#define PLAT_ARM_GICR_BASE UL(0x30140000)
|
||||||
|
|
||||||
|
#endif /* PLATFORM_DEF_H */
|
|
@ -0,0 +1,43 @@
|
||||||
|
# Copyright (c) 2020, ARM Limited and Contributors. All rights reserved.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
#
|
||||||
|
|
||||||
|
include plat/arm/css/sgi/sgi-common.mk
|
||||||
|
|
||||||
|
RDDANIEL_BASE = plat/arm/board/rddaniel
|
||||||
|
|
||||||
|
PLAT_INCLUDES += -I${RDDANIEL_BASE}/include/
|
||||||
|
|
||||||
|
SGI_CPU_SOURCES := lib/cpus/aarch64/neoverse_zeus.S
|
||||||
|
|
||||||
|
BL1_SOURCES += ${SGI_CPU_SOURCES} \
|
||||||
|
${RDDANIEL_BASE}/rddaniel_err.c
|
||||||
|
|
||||||
|
BL2_SOURCES += ${RDDANIEL_BASE}/rddaniel_plat.c \
|
||||||
|
${RDDANIEL_BASE}/rddaniel_security.c \
|
||||||
|
${RDDANIEL_BASE}/rddaniel_err.c \
|
||||||
|
lib/utils/mem_region.c \
|
||||||
|
plat/arm/common/arm_nor_psci_mem_protect.c
|
||||||
|
|
||||||
|
BL31_SOURCES += ${SGI_CPU_SOURCES} \
|
||||||
|
${RDDANIEL_BASE}/rddaniel_plat.c \
|
||||||
|
${RDDANIEL_BASE}/rddaniel_topology.c \
|
||||||
|
drivers/cfi/v2m/v2m_flash.c \
|
||||||
|
lib/utils/mem_region.c \
|
||||||
|
plat/arm/common/arm_nor_psci_mem_protect.c
|
||||||
|
|
||||||
|
# Add the FDT_SOURCES and options for Dynamic Config
|
||||||
|
FDT_SOURCES += ${RDDANIEL_BASE}/fdts/${PLAT}_tb_fw_config.dts
|
||||||
|
TB_FW_CONFIG := ${BUILD_PLAT}/fdts/${PLAT}_tb_fw_config.dtb
|
||||||
|
|
||||||
|
# Add the TB_FW_CONFIG to FIP and specify the same to certtool
|
||||||
|
$(eval $(call TOOL_ADD_PAYLOAD,${TB_FW_CONFIG},--tb-fw-config))
|
||||||
|
|
||||||
|
FDT_SOURCES += ${RDDANIEL_BASE}/fdts/${PLAT}_nt_fw_config.dts
|
||||||
|
NT_FW_CONFIG := ${BUILD_PLAT}/fdts/${PLAT}_nt_fw_config.dtb
|
||||||
|
|
||||||
|
# Add the NT_FW_CONFIG to FIP and specify the same to certtool
|
||||||
|
$(eval $(call TOOL_ADD_PAYLOAD,${NT_FW_CONFIG},--nt-fw-config))
|
||||||
|
|
||||||
|
override CTX_INCLUDE_AARCH32_REGS := 0
|
|
@ -0,0 +1,17 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2020, ARM Limited and Contributors. All rights reserved.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <plat/arm/common/plat_arm.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* rddaniel error handler
|
||||||
|
*/
|
||||||
|
void __dead2 plat_arm_error_handler(int err)
|
||||||
|
{
|
||||||
|
while (1) {
|
||||||
|
wfi();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2020, ARM Limited and Contributors. All rights reserved.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <plat/common/platform.h>
|
||||||
|
#include <sgi_plat.h>
|
||||||
|
|
||||||
|
unsigned int plat_arm_sgi_get_platform_id(void)
|
||||||
|
{
|
||||||
|
return mmio_read_32(SID_REG_BASE + SID_SYSTEM_ID_OFFSET)
|
||||||
|
& SID_SYSTEM_ID_PART_NUM_MASK;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int plat_arm_sgi_get_config_id(void)
|
||||||
|
{
|
||||||
|
return mmio_read_32(SID_REG_BASE + SID_SYSTEM_CFG_OFFSET);
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned int plat_arm_sgi_get_multi_chip_mode(void)
|
||||||
|
{
|
||||||
|
return (mmio_read_32(SID_REG_BASE + SID_NODE_ID_OFFSET) &
|
||||||
|
SID_MULTI_CHIP_MODE_MASK) >> SID_MULTI_CHIP_MODE_SHIFT;
|
||||||
|
}
|
||||||
|
|
||||||
|
void bl31_platform_setup(void)
|
||||||
|
{
|
||||||
|
sgi_bl31_common_platform_setup();
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2020, ARM Limited and Contributors. All rights reserved.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <platform_def.h>
|
||||||
|
|
||||||
|
/* Initialize the secure environment */
|
||||||
|
void plat_arm_security_setup(void)
|
||||||
|
{
|
||||||
|
}
|
|
@ -0,0 +1,62 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2020, ARM Limited and Contributors. All rights reserved.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <plat/arm/common/plat_arm.h>
|
||||||
|
#include <plat/arm/css/common/css_pm.h>
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* The power domain tree descriptor.
|
||||||
|
******************************************************************************/
|
||||||
|
const unsigned char rd_daniel_pd_tree_desc[] = {
|
||||||
|
PLAT_ARM_CLUSTER_COUNT,
|
||||||
|
CSS_SGI_MAX_CPUS_PER_CLUSTER,
|
||||||
|
CSS_SGI_MAX_CPUS_PER_CLUSTER,
|
||||||
|
CSS_SGI_MAX_CPUS_PER_CLUSTER,
|
||||||
|
CSS_SGI_MAX_CPUS_PER_CLUSTER,
|
||||||
|
CSS_SGI_MAX_CPUS_PER_CLUSTER,
|
||||||
|
CSS_SGI_MAX_CPUS_PER_CLUSTER,
|
||||||
|
CSS_SGI_MAX_CPUS_PER_CLUSTER,
|
||||||
|
CSS_SGI_MAX_CPUS_PER_CLUSTER,
|
||||||
|
CSS_SGI_MAX_CPUS_PER_CLUSTER,
|
||||||
|
CSS_SGI_MAX_CPUS_PER_CLUSTER,
|
||||||
|
CSS_SGI_MAX_CPUS_PER_CLUSTER,
|
||||||
|
CSS_SGI_MAX_CPUS_PER_CLUSTER,
|
||||||
|
CSS_SGI_MAX_CPUS_PER_CLUSTER,
|
||||||
|
CSS_SGI_MAX_CPUS_PER_CLUSTER,
|
||||||
|
CSS_SGI_MAX_CPUS_PER_CLUSTER,
|
||||||
|
CSS_SGI_MAX_CPUS_PER_CLUSTER
|
||||||
|
};
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* This function returns the topology tree information.
|
||||||
|
******************************************************************************/
|
||||||
|
const unsigned char *plat_get_power_domain_tree_desc(void)
|
||||||
|
{
|
||||||
|
return rd_daniel_pd_tree_desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* The array mapping platform core position (implemented by plat_my_core_pos())
|
||||||
|
* to the SCMI power domain ID implemented by SCP.
|
||||||
|
******************************************************************************/
|
||||||
|
const uint32_t plat_css_core_pos_to_scmi_dmn_id_map[] = {
|
||||||
|
(SET_SCMI_CHANNEL_ID(0x0) | SET_SCMI_DOMAIN_ID(0x0)),
|
||||||
|
(SET_SCMI_CHANNEL_ID(0x0) | SET_SCMI_DOMAIN_ID(0x1)),
|
||||||
|
(SET_SCMI_CHANNEL_ID(0x0) | SET_SCMI_DOMAIN_ID(0x2)),
|
||||||
|
(SET_SCMI_CHANNEL_ID(0x0) | SET_SCMI_DOMAIN_ID(0x3)),
|
||||||
|
(SET_SCMI_CHANNEL_ID(0x0) | SET_SCMI_DOMAIN_ID(0x4)),
|
||||||
|
(SET_SCMI_CHANNEL_ID(0x0) | SET_SCMI_DOMAIN_ID(0x5)),
|
||||||
|
(SET_SCMI_CHANNEL_ID(0x0) | SET_SCMI_DOMAIN_ID(0x6)),
|
||||||
|
(SET_SCMI_CHANNEL_ID(0x0) | SET_SCMI_DOMAIN_ID(0x7)),
|
||||||
|
(SET_SCMI_CHANNEL_ID(0x0) | SET_SCMI_DOMAIN_ID(0x8)),
|
||||||
|
(SET_SCMI_CHANNEL_ID(0x0) | SET_SCMI_DOMAIN_ID(0x9)),
|
||||||
|
(SET_SCMI_CHANNEL_ID(0x0) | SET_SCMI_DOMAIN_ID(0xA)),
|
||||||
|
(SET_SCMI_CHANNEL_ID(0x0) | SET_SCMI_DOMAIN_ID(0xB)),
|
||||||
|
(SET_SCMI_CHANNEL_ID(0x0) | SET_SCMI_DOMAIN_ID(0xC)),
|
||||||
|
(SET_SCMI_CHANNEL_ID(0x0) | SET_SCMI_DOMAIN_ID(0xD)),
|
||||||
|
(SET_SCMI_CHANNEL_ID(0x0) | SET_SCMI_DOMAIN_ID(0xE)),
|
||||||
|
(SET_SCMI_CHANNEL_ID(0x0) | SET_SCMI_DOMAIN_ID(0xF))
|
||||||
|
};
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved.
|
* Copyright (c) 2018-2020, ARM Limited and Contributors. All rights reserved.
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -8,12 +8,15 @@
|
||||||
#define SGI_VARIANT_H
|
#define SGI_VARIANT_H
|
||||||
|
|
||||||
/* SSC_VERSION values for SGI575 */
|
/* SSC_VERSION values for SGI575 */
|
||||||
#define SGI575_SSC_VER_PART_NUM 0x0783
|
#define SGI575_SSC_VER_PART_NUM 0x0783
|
||||||
|
|
||||||
/* SID Version values for RD-N1E1-Edge */
|
/* SID Version values for RD-N1E1-Edge */
|
||||||
#define RD_N1E1_EDGE_SID_VER_PART_NUM 0x0786
|
#define RD_N1E1_EDGE_SID_VER_PART_NUM 0x0786
|
||||||
#define RD_E1_EDGE_CONFIG_ID 0x2
|
#define RD_E1_EDGE_CONFIG_ID 0x2
|
||||||
|
|
||||||
|
/* SID Version values for RD-Daniel */
|
||||||
|
#define RD_DANIEL_SID_VER_PART_NUM 0x078a
|
||||||
|
|
||||||
/* Structure containing SGI platform variant information */
|
/* Structure containing SGI platform variant information */
|
||||||
typedef struct sgi_platform_info {
|
typedef struct sgi_platform_info {
|
||||||
unsigned int platform_id; /* Part Number of the platform */
|
unsigned int platform_id; /* Part Number of the platform */
|
||||||
|
|
|
@ -73,7 +73,8 @@ static scmi_channel_plat_info_t rd_n1e1_edge_scmi_plat_info[] = {
|
||||||
|
|
||||||
scmi_channel_plat_info_t *plat_css_get_scmi_info(int channel_id)
|
scmi_channel_plat_info_t *plat_css_get_scmi_info(int channel_id)
|
||||||
{
|
{
|
||||||
if (sgi_plat_info.platform_id == RD_N1E1_EDGE_SID_VER_PART_NUM) {
|
if (sgi_plat_info.platform_id == RD_N1E1_EDGE_SID_VER_PART_NUM ||
|
||||||
|
sgi_plat_info.platform_id == RD_DANIEL_SID_VER_PART_NUM) {
|
||||||
if (channel_id >= sizeof(rd_n1e1_edge_scmi_plat_info))
|
if (channel_id >= sizeof(rd_n1e1_edge_scmi_plat_info))
|
||||||
panic();
|
panic();
|
||||||
return &rd_n1e1_edge_scmi_plat_info[channel_id];
|
return &rd_n1e1_edge_scmi_plat_info[channel_id];
|
||||||
|
@ -105,9 +106,13 @@ void sgi_bl31_common_platform_setup(void)
|
||||||
|
|
||||||
const plat_psci_ops_t *plat_arm_psci_override_pm_ops(plat_psci_ops_t *ops)
|
const plat_psci_ops_t *plat_arm_psci_override_pm_ops(plat_psci_ops_t *ops)
|
||||||
{
|
{
|
||||||
/* For RD-E1-Edge platform only CPU ON/OFF is supported */
|
/*
|
||||||
if ((sgi_plat_info.platform_id == RD_N1E1_EDGE_SID_VER_PART_NUM) &&
|
* For RD-E1-Edge and RD-Daniel platforms, only CPU power ON/OFF
|
||||||
(sgi_plat_info.config_id == RD_E1_EDGE_CONFIG_ID)) {
|
* PSCI platform callbacks are supported.
|
||||||
|
*/
|
||||||
|
if (((sgi_plat_info.platform_id == RD_N1E1_EDGE_SID_VER_PART_NUM) &&
|
||||||
|
(sgi_plat_info.config_id == RD_E1_EDGE_CONFIG_ID)) ||
|
||||||
|
(sgi_plat_info.platform_id == RD_DANIEL_SID_VER_PART_NUM)) {
|
||||||
ops->cpu_standby = NULL;
|
ops->cpu_standby = NULL;
|
||||||
ops->system_off = NULL;
|
ops->system_off = NULL;
|
||||||
ops->system_reset = NULL;
|
ops->system_reset = NULL;
|
||||||
|
|
Loading…
Reference in New Issue