mirror of
https://github.com/CTCaer/switch-l4t-atf.git
synced 2025-03-04 00:18:18 +00:00
Merge changes from topics "rddaniel", "rdn1edge_dual" into integration
* changes: plat/arm: add board support for rd-daniel platform plat/arm/sgi: move GIC related constants to board files platform/arm/sgi: add multi-chip mode parameter in HW_CONFIG dts board/rdn1edge: add support for dual-chip configuration drivers/arm/scmi: allow use of multiple SCMI channels drivers/mhu: derive doorbell base address plat/arm/sgi: include AFF3 affinity in core position calculation plat/arm/sgi: add macros for remote chip device region plat/arm/sgi: add chip_id and multi_chip_mode to platform variant info plat/arm/sgi: move bl31_platform_setup to board file
This commit is contained in:
commit
d232ca5f7b
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2014-2019, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2014-2020, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
@ -20,11 +20,13 @@ void mhu_ring_doorbell(struct scmi_channel_plat_info *plat_info)
|
||||
|
||||
void mhuv2_ring_doorbell(struct scmi_channel_plat_info *plat_info)
|
||||
{
|
||||
uintptr_t mhuv2_base = plat_info->db_reg_addr & MHU_V2_FRAME_BASE_MASK;
|
||||
|
||||
/* wake receiver */
|
||||
MHU_V2_ACCESS_REQUEST(MHUV2_BASE_ADDR);
|
||||
MHU_V2_ACCESS_REQUEST(mhuv2_base);
|
||||
|
||||
/* wait for receiver to acknowledge its ready */
|
||||
while (MHU_V2_IS_ACCESS_READY(MHUV2_BASE_ADDR) == 0)
|
||||
while (MHU_V2_IS_ACCESS_READY(mhuv2_base) == 0)
|
||||
;
|
||||
|
||||
MHU_RING_DOORBELL(plat_info->db_reg_addr,
|
||||
@ -32,7 +34,7 @@ void mhuv2_ring_doorbell(struct scmi_channel_plat_info *plat_info)
|
||||
plat_info->db_preserve_mask);
|
||||
|
||||
/* clear the access request for the receiver */
|
||||
MHU_V2_CLEAR_REQUEST(MHUV2_BASE_ADDR);
|
||||
MHU_V2_CLEAR_REQUEST(mhuv2_base);
|
||||
|
||||
return;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2017-2019, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2017-2020, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
@ -63,16 +63,44 @@ typedef enum {
|
||||
} scmi_power_state_t;
|
||||
|
||||
/*
|
||||
* The global handle for invoking the SCMI driver APIs after the driver
|
||||
* The global handles for invoking the SCMI driver APIs after the driver
|
||||
* has been initialized.
|
||||
*/
|
||||
static void *scmi_handle;
|
||||
static void *scmi_handles[PLAT_ARM_SCMI_CHANNEL_COUNT];
|
||||
|
||||
/* The SCMI channel global object */
|
||||
static scmi_channel_t channel;
|
||||
/* The global SCMI channels array */
|
||||
static scmi_channel_t scmi_channels[PLAT_ARM_SCMI_CHANNEL_COUNT];
|
||||
|
||||
/*
|
||||
* Channel ID for the default SCMI channel.
|
||||
* The default channel is used to issue SYSTEM level SCMI requests and is
|
||||
* initialized to the channel which has the boot cpu as its resource.
|
||||
*/
|
||||
static uint32_t default_scmi_channel_id;
|
||||
|
||||
/*
|
||||
* TODO: Allow use of channel specific lock instead of using a single lock for
|
||||
* all the channels.
|
||||
*/
|
||||
ARM_SCMI_INSTANTIATE_LOCK;
|
||||
|
||||
/*
|
||||
* Function to obtain the SCMI Domain ID and SCMI Channel number from the linear
|
||||
* core position. The SCMI Channel number is encoded in the upper 16 bits and
|
||||
* the Domain ID is encoded in the lower 16 bits in each entry of the mapping
|
||||
* array exported by the platform.
|
||||
*/
|
||||
static void css_scp_core_pos_to_scmi_channel(unsigned int core_pos,
|
||||
unsigned int *scmi_domain_id, unsigned int *scmi_channel_id)
|
||||
{
|
||||
unsigned int composite_id;
|
||||
|
||||
composite_id = plat_css_core_pos_to_scmi_dmn_id_map[core_pos];
|
||||
|
||||
*scmi_channel_id = GET_SCMI_CHANNEL_ID(composite_id);
|
||||
*scmi_domain_id = GET_SCMI_DOMAIN_ID(composite_id);
|
||||
}
|
||||
|
||||
/*
|
||||
* Helper function to suspend a CPU power domain and its parent power domains
|
||||
* if applicable.
|
||||
@ -87,10 +115,10 @@ void css_scp_suspend(const struct psci_power_state *target_state)
|
||||
|
||||
/* Check if power down at system power domain level is requested */
|
||||
if (css_system_pwr_state(target_state) == ARM_LOCAL_STATE_OFF) {
|
||||
/* Issue SCMI command for SYSTEM_SUSPEND */
|
||||
ret = scmi_sys_pwr_state_set(scmi_handle,
|
||||
SCMI_SYS_PWR_FORCEFUL_REQ,
|
||||
SCMI_SYS_PWR_SUSPEND);
|
||||
/* Issue SCMI command for SYSTEM_SUSPEND on all SCMI channels */
|
||||
ret = scmi_sys_pwr_state_set(
|
||||
scmi_handles[default_scmi_channel_id],
|
||||
SCMI_SYS_PWR_FORCEFUL_REQ, SCMI_SYS_PWR_SUSPEND);
|
||||
if (ret != SCMI_E_SUCCESS) {
|
||||
ERROR("SCMI system power domain suspend return 0x%x unexpected\n",
|
||||
ret);
|
||||
@ -99,7 +127,7 @@ void css_scp_suspend(const struct psci_power_state *target_state)
|
||||
return;
|
||||
}
|
||||
#if !HW_ASSISTED_COHERENCY
|
||||
unsigned int lvl;
|
||||
unsigned int lvl, channel_id, domain_id;
|
||||
uint32_t scmi_pwr_state = 0;
|
||||
/*
|
||||
* If we reach here, then assert that power down at system power domain
|
||||
@ -127,9 +155,10 @@ void css_scp_suspend(const struct psci_power_state *target_state)
|
||||
|
||||
SCMI_SET_PWR_STATE_MAX_PWR_LVL(scmi_pwr_state, lvl - 1);
|
||||
|
||||
ret = scmi_pwr_state_set(scmi_handle,
|
||||
plat_css_core_pos_to_scmi_dmn_id_map[plat_my_core_pos()],
|
||||
scmi_pwr_state);
|
||||
css_scp_core_pos_to_scmi_channel(plat_my_core_pos(),
|
||||
&domain_id, &channel_id);
|
||||
ret = scmi_pwr_state_set(scmi_handles[channel_id],
|
||||
domain_id, scmi_pwr_state);
|
||||
|
||||
if (ret != SCMI_E_SUCCESS) {
|
||||
ERROR("SCMI set power state command return 0x%x unexpected\n",
|
||||
@ -145,7 +174,7 @@ void css_scp_suspend(const struct psci_power_state *target_state)
|
||||
*/
|
||||
void css_scp_off(const struct psci_power_state *target_state)
|
||||
{
|
||||
unsigned int lvl = 0;
|
||||
unsigned int lvl = 0, channel_id, domain_id;
|
||||
int ret;
|
||||
uint32_t scmi_pwr_state = 0;
|
||||
|
||||
@ -168,10 +197,10 @@ void css_scp_off(const struct psci_power_state *target_state)
|
||||
|
||||
SCMI_SET_PWR_STATE_MAX_PWR_LVL(scmi_pwr_state, lvl - 1);
|
||||
|
||||
ret = scmi_pwr_state_set(scmi_handle,
|
||||
plat_css_core_pos_to_scmi_dmn_id_map[plat_my_core_pos()],
|
||||
scmi_pwr_state);
|
||||
|
||||
css_scp_core_pos_to_scmi_channel(plat_my_core_pos(),
|
||||
&domain_id, &channel_id);
|
||||
ret = scmi_pwr_state_set(scmi_handles[channel_id],
|
||||
domain_id, scmi_pwr_state);
|
||||
if (ret != SCMI_E_QUEUED && ret != SCMI_E_SUCCESS) {
|
||||
ERROR("SCMI set power state command return 0x%x unexpected\n",
|
||||
ret);
|
||||
@ -185,8 +214,8 @@ void css_scp_off(const struct psci_power_state *target_state)
|
||||
*/
|
||||
void css_scp_on(u_register_t mpidr)
|
||||
{
|
||||
unsigned int lvl = 0;
|
||||
int core_pos, ret;
|
||||
unsigned int lvl = 0, channel_id, core_pos, domain_id;
|
||||
int ret;
|
||||
uint32_t scmi_pwr_state = 0;
|
||||
|
||||
for (; lvl <= PLAT_MAX_PWR_LVL; lvl++)
|
||||
@ -196,13 +225,12 @@ void css_scp_on(u_register_t mpidr)
|
||||
SCMI_SET_PWR_STATE_MAX_PWR_LVL(scmi_pwr_state, lvl - 1);
|
||||
|
||||
core_pos = plat_core_pos_by_mpidr(mpidr);
|
||||
assert((core_pos >= 0) &&
|
||||
(((unsigned int)core_pos) < PLATFORM_CORE_COUNT));
|
||||
|
||||
ret = scmi_pwr_state_set(scmi_handle,
|
||||
plat_css_core_pos_to_scmi_dmn_id_map[core_pos],
|
||||
scmi_pwr_state);
|
||||
assert(core_pos >= 0 && (core_pos < PLATFORM_CORE_COUNT));
|
||||
|
||||
css_scp_core_pos_to_scmi_channel(core_pos, &domain_id,
|
||||
&channel_id);
|
||||
ret = scmi_pwr_state_set(scmi_handles[channel_id],
|
||||
domain_id, scmi_pwr_state);
|
||||
if (ret != SCMI_E_QUEUED && ret != SCMI_E_SUCCESS) {
|
||||
ERROR("SCMI set power state command return 0x%x unexpected\n",
|
||||
ret);
|
||||
@ -216,8 +244,9 @@ void css_scp_on(u_register_t mpidr)
|
||||
*/
|
||||
int css_scp_get_power_state(u_register_t mpidr, unsigned int power_level)
|
||||
{
|
||||
int ret, cpu_idx;
|
||||
int ret;
|
||||
uint32_t scmi_pwr_state = 0, lvl_state;
|
||||
unsigned int channel_id, cpu_idx, domain_id;
|
||||
|
||||
/* We don't support get power state at the system power domain level */
|
||||
if ((power_level > PLAT_MAX_PWR_LVL) ||
|
||||
@ -230,9 +259,9 @@ int css_scp_get_power_state(u_register_t mpidr, unsigned int power_level)
|
||||
cpu_idx = plat_core_pos_by_mpidr(mpidr);
|
||||
assert(cpu_idx > -1);
|
||||
|
||||
ret = scmi_pwr_state_get(scmi_handle,
|
||||
plat_css_core_pos_to_scmi_dmn_id_map[cpu_idx],
|
||||
&scmi_pwr_state);
|
||||
css_scp_core_pos_to_scmi_channel(cpu_idx, &domain_id, &channel_id);
|
||||
ret = scmi_pwr_state_get(scmi_handles[channel_id],
|
||||
domain_id, &scmi_pwr_state);
|
||||
|
||||
if (ret != SCMI_E_SUCCESS) {
|
||||
WARN("SCMI get power state command return 0x%x unexpected\n",
|
||||
@ -271,7 +300,7 @@ void __dead2 css_scp_system_off(int state)
|
||||
* Issue SCMI command. First issue a graceful
|
||||
* request and if that fails force the request.
|
||||
*/
|
||||
ret = scmi_sys_pwr_state_set(scmi_handle,
|
||||
ret = scmi_sys_pwr_state_set(scmi_handles[default_scmi_channel_id],
|
||||
SCMI_SYS_PWR_FORCEFUL_REQ,
|
||||
state);
|
||||
|
||||
@ -325,17 +354,28 @@ static int scmi_ap_core_init(scmi_channel_t *ch)
|
||||
|
||||
void __init plat_arm_pwrc_setup(void)
|
||||
{
|
||||
channel.info = plat_css_get_scmi_info();
|
||||
channel.lock = ARM_SCMI_LOCK_GET_INSTANCE;
|
||||
scmi_handle = scmi_init(&channel);
|
||||
if (scmi_handle == NULL) {
|
||||
ERROR("SCMI Initialization failed\n");
|
||||
panic();
|
||||
}
|
||||
if (scmi_ap_core_init(&channel) < 0) {
|
||||
ERROR("SCMI AP core protocol initialization failed\n");
|
||||
panic();
|
||||
unsigned int composite_id, idx;
|
||||
|
||||
for (idx = 0; idx < PLAT_ARM_SCMI_CHANNEL_COUNT; idx++) {
|
||||
INFO("Initializing driver on Channel %d\n", idx);
|
||||
|
||||
scmi_channels[idx].info = plat_css_get_scmi_info(idx);
|
||||
scmi_channels[idx].lock = ARM_SCMI_LOCK_GET_INSTANCE;
|
||||
scmi_handles[idx] = scmi_init(&scmi_channels[idx]);
|
||||
|
||||
if (scmi_handles[idx] == NULL) {
|
||||
ERROR("SCMI Initialization failed on channel %d\n", idx);
|
||||
panic();
|
||||
}
|
||||
|
||||
if (scmi_ap_core_init(&scmi_channels[idx]) < 0) {
|
||||
ERROR("SCMI AP core protocol initialization failed\n");
|
||||
panic();
|
||||
}
|
||||
}
|
||||
|
||||
composite_id = plat_css_core_pos_to_scmi_dmn_id_map[plat_my_core_pos()];
|
||||
default_scmi_channel_id = GET_SCMI_CHANNEL_ID(composite_id);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
@ -347,6 +387,7 @@ const plat_psci_ops_t *css_scmi_override_pm_ops(plat_psci_ops_t *ops)
|
||||
{
|
||||
uint32_t msg_attr;
|
||||
int ret;
|
||||
void *scmi_handle = scmi_handles[default_scmi_channel_id];
|
||||
|
||||
assert(scmi_handle);
|
||||
|
||||
@ -411,14 +452,17 @@ int css_system_reset2(int is_vendor, int reset_type, u_register_t cookie)
|
||||
#if PROGRAMMABLE_RESET_ADDRESS
|
||||
void plat_arm_program_trusted_mailbox(uintptr_t address)
|
||||
{
|
||||
int ret;
|
||||
int ret, i;
|
||||
|
||||
assert(scmi_handle);
|
||||
ret = scmi_ap_core_set_reset_addr(scmi_handle, address,
|
||||
SCMI_AP_CORE_LOCK_ATTR);
|
||||
if (ret != SCMI_E_SUCCESS) {
|
||||
ERROR("CSS: Failed to program reset address: %d\n", ret);
|
||||
panic();
|
||||
for (i = 0; i < PLAT_ARM_SCMI_CHANNEL_COUNT; i++) {
|
||||
assert(scmi_handles[i]);
|
||||
|
||||
ret = scmi_ap_core_set_reset_addr(scmi_handles[i], address,
|
||||
SCMI_AP_CORE_LOCK_ATTR);
|
||||
if (ret != SCMI_E_SUCCESS) {
|
||||
ERROR("CSS: Failed to program reset address: %d\n", ret);
|
||||
panic();
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2014-2018, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2014-2020, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
@ -11,13 +11,13 @@
|
||||
|
||||
#include <lib/mmio.h>
|
||||
|
||||
/* MHUv2 Base Address */
|
||||
#define MHUV2_BASE_ADDR PLAT_MHUV2_BASE
|
||||
/* MHUv2 Frame Base Mask */
|
||||
#define MHU_V2_FRAME_BASE_MASK UL(~0xFFF)
|
||||
|
||||
/* MHUv2 Control Registers Offsets */
|
||||
#define MHU_V2_MSG_NO_CAP_OFFSET 0xF80
|
||||
#define MHU_V2_ACCESS_REQ_OFFSET 0xF88
|
||||
#define MHU_V2_ACCESS_READY_OFFSET 0xF8C
|
||||
#define MHU_V2_MSG_NO_CAP_OFFSET UL(0xF80)
|
||||
#define MHU_V2_ACCESS_REQ_OFFSET UL(0xF88)
|
||||
#define MHU_V2_ACCESS_READY_OFFSET UL(0xF8C)
|
||||
|
||||
#define SENDER_REG_STAT(_channel) (0x20 * (_channel))
|
||||
#define SENDER_REG_SET(_channel) ((0x20 * (_channel)) + 0xC)
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2017-2019, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2017-2020, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
@ -162,7 +162,7 @@ int scmi_ap_core_set_reset_addr(void *p, uint64_t reset_addr, uint32_t attr);
|
||||
int scmi_ap_core_get_reset_addr(void *p, uint64_t *reset_addr, uint32_t *attr);
|
||||
|
||||
/* API to get the platform specific SCMI channel information. */
|
||||
scmi_channel_plat_info_t *plat_css_get_scmi_info(void);
|
||||
scmi_channel_plat_info_t *plat_css_get_scmi_info(int channel_id);
|
||||
|
||||
/* API to override default PSCI callbacks for platforms that support SCMI. */
|
||||
const plat_psci_ops_t *css_scmi_override_pm_ops(plat_psci_ops_t *ops);
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2015-2020, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
@ -29,6 +29,10 @@
|
||||
#define SID_REG_BASE 0x2a4a0000
|
||||
#define SID_SYSTEM_ID_OFFSET 0x40
|
||||
#define SID_SYSTEM_CFG_OFFSET 0x70
|
||||
#define SID_NODE_ID_OFFSET 0x60
|
||||
#define SID_CHIP_ID_MASK 0xFF
|
||||
#define SID_MULTI_CHIP_MODE_MASK 0x100
|
||||
#define SID_MULTI_CHIP_MODE_SHIFT 8
|
||||
|
||||
/* The slave_bootsecure controls access to GPU, DMC and CS. */
|
||||
#define CSS_NIC400_SLAVE_BOOTSECURE 8
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015-2018, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2015-2020, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
@ -44,4 +44,15 @@ int css_node_hw_state(u_register_t mpidr, unsigned int power_level);
|
||||
*/
|
||||
extern const uint32_t plat_css_core_pos_to_scmi_dmn_id_map[];
|
||||
|
||||
#define SCMI_DOMAIN_ID_MASK U(0xFFFF)
|
||||
#define SCMI_CHANNEL_ID_MASK U(0xFFFF)
|
||||
#define SCMI_CHANNEL_ID_SHIFT U(16)
|
||||
|
||||
#define SET_SCMI_CHANNEL_ID(n) (((n) & SCMI_CHANNEL_ID_MASK) << \
|
||||
SCMI_CHANNEL_ID_SHIFT)
|
||||
#define SET_SCMI_DOMAIN_ID(n) ((n) & SCMI_DOMAIN_ID_MASK)
|
||||
#define GET_SCMI_CHANNEL_ID(n) (((n) >> SCMI_CHANNEL_ID_SHIFT) & \
|
||||
SCMI_CHANNEL_ID_MASK)
|
||||
#define GET_SCMI_DOMAIN_ID(n) ((n) & SCMI_DOMAIN_ID_MASK)
|
||||
|
||||
#endif /* CSS_PM_H */
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2014-2019, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2014-2020, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
@ -224,7 +224,6 @@
|
||||
|
||||
/* MHU related constants */
|
||||
#define PLAT_CSS_MHU_BASE UL(0x2b1f0000)
|
||||
#define PLAT_MHUV2_BASE PLAT_CSS_MHU_BASE
|
||||
|
||||
/*
|
||||
* Base address of the first memory region used for communication between AP
|
||||
@ -301,4 +300,7 @@
|
||||
#define PLAT_VIRT_ADDR_SPACE_SIZE (1ULL << 32)
|
||||
#endif
|
||||
|
||||
/* Number of SCMI channels on the platform */
|
||||
#define PLAT_ARM_SCMI_CHANNEL_COUNT U(1)
|
||||
|
||||
#endif /* PLATFORM_DEF_H */
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2016-2019, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2016-2020, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
@ -20,7 +20,7 @@ static scmi_channel_plat_info_t juno_scmi_plat_info = {
|
||||
.ring_doorbell = &mhu_ring_doorbell,
|
||||
};
|
||||
|
||||
scmi_channel_plat_info_t *plat_css_get_scmi_info(void)
|
||||
scmi_channel_plat_info_t *plat_css_get_scmi_info(int channel_id)
|
||||
{
|
||||
return &juno_scmi_plat_info;
|
||||
}
|
||||
|
@ -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
|
||||
*/
|
||||
@ -90,7 +90,6 @@
|
||||
|
||||
#define PLAT_ARM_NSTIMER_FRAME_ID 0
|
||||
#define PLAT_CSS_MHU_BASE 0x45000000
|
||||
#define PLAT_MHUV2_BASE PLAT_CSS_MHU_BASE
|
||||
#define PLAT_MAX_PWR_LVL 2
|
||||
|
||||
#define PLAT_ARM_G1S_IRQS ARM_G1S_IRQS, \
|
||||
@ -144,4 +143,7 @@
|
||||
#define SBSA_SECURE_WDOG_BASE UL(0x2A480000)
|
||||
#define SBSA_SECURE_WDOG_TIMEOUT UL(100)
|
||||
|
||||
/* Number of SCMI channels on the platform */
|
||||
#define PLAT_ARM_SCMI_CHANNEL_COUNT U(1)
|
||||
|
||||
#endif /* PLATFORM_DEF_H */
|
||||
|
@ -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
|
||||
*/
|
||||
@ -74,7 +74,7 @@ static uintptr_t n1sdp_multichip_gicr_frames[3] = {
|
||||
0
|
||||
};
|
||||
|
||||
scmi_channel_plat_info_t *plat_css_get_scmi_info()
|
||||
scmi_channel_plat_info_t *plat_css_get_scmi_info(int channel_id)
|
||||
{
|
||||
return &n1sdp_scmi_plat_info;
|
||||
}
|
||||
|
22
plat/arm/board/rddaniel/fdts/rddaniel_nt_fw_config.dts
Normal file
22
plat/arm/board/rddaniel/fdts/rddaniel_nt_fw_config.dts
Normal file
@ -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>;
|
||||
};
|
||||
};
|
26
plat/arm/board/rddaniel/fdts/rddaniel_tb_fw_config.dts
Normal file
26
plat/arm/board/rddaniel/fdts/rddaniel_tb_fw_config.dts
Normal file
@ -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>;
|
||||
};
|
40
plat/arm/board/rddaniel/include/platform_def.h
Normal file
40
plat/arm/board/rddaniel/include/platform_def.h
Normal file
@ -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 */
|
43
plat/arm/board/rddaniel/platform.mk
Normal file
43
plat/arm/board/rddaniel/platform.mk
Normal file
@ -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
|
17
plat/arm/board/rddaniel/rddaniel_err.c
Normal file
17
plat/arm/board/rddaniel/rddaniel_err.c
Normal file
@ -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();
|
||||
}
|
||||
}
|
30
plat/arm/board/rddaniel/rddaniel_plat.c
Normal file
30
plat/arm/board/rddaniel/rddaniel_plat.c
Normal file
@ -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();
|
||||
}
|
12
plat/arm/board/rddaniel/rddaniel_security.c
Normal file
12
plat/arm/board/rddaniel/rddaniel_security.c
Normal file
@ -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)
|
||||
{
|
||||
}
|
62
plat/arm/board/rddaniel/rddaniel_topology.c
Normal file
62
plat/arm/board/rddaniel/rddaniel_topology.c
Normal file
@ -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. All rights reserved.
|
||||
* Copyright (c) 2018-2020, Arm Limited. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
@ -17,6 +17,7 @@
|
||||
system-id {
|
||||
platform-id = <0x0>;
|
||||
config-id = <0x0>;
|
||||
multi-chip-mode = <0x0>;
|
||||
};
|
||||
|
||||
};
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2018-2019, Arm Limited. All rights reserved.
|
||||
* Copyright (c) 2018-2020, Arm Limited. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
@ -16,7 +16,6 @@
|
||||
#define CSS_SGI_MAX_PE_PER_CPU U(2)
|
||||
|
||||
#define PLAT_CSS_MHU_BASE UL(0x45400000)
|
||||
#define PLAT_MHUV2_BASE PLAT_CSS_MHU_BASE
|
||||
|
||||
/* Base address of DMC-620 instances */
|
||||
#define RDE1EDGE_DMC620_BASE0 UL(0x4e000000)
|
||||
@ -37,4 +36,9 @@
|
||||
#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(0x300C0000)
|
||||
|
||||
#endif /* PLATFORM_DEF_H */
|
||||
|
@ -1,10 +1,11 @@
|
||||
/*
|
||||
* Copyright (c) 2018, Arm Limited. All rights reserved.
|
||||
* Copyright (c) 2018-2020, Arm Limited. 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)
|
||||
{
|
||||
@ -16,3 +17,13 @@ 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 0;
|
||||
}
|
||||
|
||||
void bl31_platform_setup(void)
|
||||
{
|
||||
sgi_bl31_common_platform_setup();
|
||||
}
|
||||
|
@ -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
|
||||
*/
|
||||
@ -17,5 +17,6 @@
|
||||
system-id {
|
||||
platform-id = <0x0>;
|
||||
config-id = <0x0>;
|
||||
multi-chip-mode = <0x0>;
|
||||
};
|
||||
};
|
||||
|
@ -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
|
||||
*/
|
||||
@ -16,7 +16,6 @@
|
||||
#define CSS_SGI_MAX_PE_PER_CPU U(1)
|
||||
|
||||
#define PLAT_CSS_MHU_BASE UL(0x45400000)
|
||||
#define PLAT_MHUV2_BASE PLAT_CSS_MHU_BASE
|
||||
|
||||
/* Base address of DMC-620 instances */
|
||||
#define RDN1EDGE_DMC620_BASE0 UL(0x4e000000)
|
||||
@ -27,15 +26,23 @@
|
||||
|
||||
#define PLAT_MAX_PWR_LVL ARM_PWR_LVL1
|
||||
|
||||
/* Virtual address used by dynamic mem_protect for chunk_base */
|
||||
#define PLAT_ARM_MEM_PROTEC_VA_FRAME UL(0xc0000000)
|
||||
|
||||
/*
|
||||
* Physical and virtual address space limits for MMU in AARCH64 & AARCH32 modes
|
||||
*/
|
||||
#ifdef __aarch64__
|
||||
#define PLAT_PHY_ADDR_SPACE_SIZE (1ULL << 36)
|
||||
#define PLAT_VIRT_ADDR_SPACE_SIZE (1ULL << 36)
|
||||
#define PLAT_PHY_ADDR_SPACE_SIZE (1ULL << 43)
|
||||
#define PLAT_VIRT_ADDR_SPACE_SIZE (1ULL << 43)
|
||||
#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(0x300C0000)
|
||||
|
||||
#endif /* PLATFORM_DEF_H */
|
||||
|
@ -26,6 +26,7 @@ BL31_SOURCES += ${SGI_CPU_SOURCES} \
|
||||
${RDN1EDGE_BASE}/rdn1edge_plat.c \
|
||||
${RDN1EDGE_BASE}/rdn1edge_topology.c \
|
||||
drivers/cfi/v2m/v2m_flash.c \
|
||||
drivers/arm/gic/v3/gic600_multichip.c \
|
||||
lib/utils/mem_region.c \
|
||||
plat/arm/common/arm_nor_psci_mem_protect.c
|
||||
|
||||
@ -34,6 +35,9 @@ BL1_SOURCES += ${RDN1EDGE_BASE}/rdn1edge_trusted_boot.c
|
||||
BL2_SOURCES += ${RDN1EDGE_BASE}/rdn1edge_trusted_boot.c
|
||||
endif
|
||||
|
||||
# Enable dynamic addition of MMAP regions in BL31
|
||||
BL31_CFLAGS += -DPLAT_XLAT_TABLES_DYNAMIC=1
|
||||
|
||||
# Add the FDT_SOURCES and options for Dynamic Config
|
||||
FDT_SOURCES += ${RDN1EDGE_BASE}/fdts/${PLAT}_tb_fw_config.dts
|
||||
TB_FW_CONFIG := ${BUILD_PLAT}/fdts/${PLAT}_tb_fw_config.dtb
|
||||
@ -47,9 +51,9 @@ 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))
|
||||
|
||||
ifneq ($(CSS_SGI_CHIP_COUNT),1)
|
||||
$(error "Chip count for RDN1Edge should be 1, currently set to \
|
||||
${CSS_SGI_CHIP_COUNT}.")
|
||||
ifneq ($(CSS_SGI_CHIP_COUNT),$(filter $(CSS_SGI_CHIP_COUNT),1 2))
|
||||
$(error "Chip count for RDN1Edge platform should either 1 or 2, currently \
|
||||
set to ${CSS_SGI_CHIP_COUNT}.")
|
||||
endif
|
||||
|
||||
override CTX_INCLUDE_AARCH32_REGS := 0
|
||||
|
@ -1,10 +1,44 @@
|
||||
/*
|
||||
* Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2018-2020, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <common/debug.h>
|
||||
#include <drivers/arm/gic600_multichip.h>
|
||||
#include <plat/arm/common/plat_arm.h>
|
||||
#include <plat/common/platform.h>
|
||||
#include <sgi_base_platform_def.h>
|
||||
#include <sgi_plat.h>
|
||||
|
||||
#if defined(IMAGE_BL31)
|
||||
static const mmap_region_t rdn1edge_dynamic_mmap[] = {
|
||||
ARM_MAP_SHARED_RAM_REMOTE_CHIP(1),
|
||||
CSS_SGI_MAP_DEVICE_REMOTE_CHIP(1),
|
||||
SOC_CSS_MAP_DEVICE_REMOTE_CHIP(1)
|
||||
};
|
||||
|
||||
static struct gic600_multichip_data rdn1e1_multichip_data __init = {
|
||||
.rt_owner_base = PLAT_ARM_GICD_BASE,
|
||||
.rt_owner = 0,
|
||||
.chip_count = CSS_SGI_CHIP_COUNT,
|
||||
.chip_addrs = {
|
||||
PLAT_ARM_GICD_BASE >> 16,
|
||||
(PLAT_ARM_GICD_BASE + CSS_SGI_REMOTE_CHIP_MEM_OFFSET(1)) >> 16
|
||||
},
|
||||
.spi_ids = {
|
||||
{32, 255},
|
||||
{0, 0}
|
||||
}
|
||||
};
|
||||
|
||||
static uintptr_t rdn1e1_multichip_gicr_frames[] = {
|
||||
PLAT_ARM_GICR_BASE, /* Chip 0's GICR Base */
|
||||
PLAT_ARM_GICR_BASE +
|
||||
CSS_SGI_REMOTE_CHIP_MEM_OFFSET(1), /* Chip 1's GICR BASE */
|
||||
UL(0) /* Zero Termination */
|
||||
};
|
||||
#endif /* IMAGE_BL31 */
|
||||
|
||||
unsigned int plat_arm_sgi_get_platform_id(void)
|
||||
{
|
||||
@ -16,3 +50,48 @@ 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;
|
||||
}
|
||||
|
||||
/*
|
||||
* IMAGE_BL31 macro is added to build bl31_platform_setup function only for BL31
|
||||
* because PLAT_XLAT_TABLES_DYNAMIC macro is set to build only for BL31 and not
|
||||
* for other stages.
|
||||
*/
|
||||
#if defined(IMAGE_BL31)
|
||||
void bl31_platform_setup(void)
|
||||
{
|
||||
int i, ret;
|
||||
|
||||
if (plat_arm_sgi_get_multi_chip_mode() == 0 && CSS_SGI_CHIP_COUNT > 1) {
|
||||
ERROR("Chip Count is set to %d but multi-chip mode not enabled\n",
|
||||
CSS_SGI_CHIP_COUNT);
|
||||
panic();
|
||||
} else if (plat_arm_sgi_get_multi_chip_mode() == 1 &&
|
||||
CSS_SGI_CHIP_COUNT > 1) {
|
||||
INFO("Enabling support for multi-chip in RD-N1-Edge\n");
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(rdn1edge_dynamic_mmap); i++) {
|
||||
ret = mmap_add_dynamic_region(
|
||||
rdn1edge_dynamic_mmap[i].base_pa,
|
||||
rdn1edge_dynamic_mmap[i].base_va,
|
||||
rdn1edge_dynamic_mmap[i].size,
|
||||
rdn1edge_dynamic_mmap[i].attr
|
||||
);
|
||||
if (ret != 0) {
|
||||
ERROR("Failed to add dynamic mmap entry\n");
|
||||
panic();
|
||||
}
|
||||
}
|
||||
|
||||
plat_arm_override_gicr_frames(rdn1e1_multichip_gicr_frames);
|
||||
gic600_multichip_init(&rdn1e1_multichip_data);
|
||||
}
|
||||
|
||||
sgi_bl31_common_platform_setup();
|
||||
}
|
||||
#endif /* IMAGE_BL31 */
|
||||
|
@ -5,14 +5,19 @@
|
||||
*/
|
||||
|
||||
#include <plat/arm/common/plat_arm.h>
|
||||
#include <plat/arm/css/common/css_pm.h>
|
||||
|
||||
/******************************************************************************
|
||||
* The power domain tree descriptor.
|
||||
******************************************************************************/
|
||||
static const unsigned char rdn1edge_pd_tree_desc[] = {
|
||||
PLAT_ARM_CLUSTER_COUNT,
|
||||
(PLAT_ARM_CLUSTER_COUNT) * (CSS_SGI_CHIP_COUNT),
|
||||
CSS_SGI_MAX_CPUS_PER_CLUSTER,
|
||||
CSS_SGI_MAX_CPUS_PER_CLUSTER,
|
||||
#if (CSS_SGI_CHIP_COUNT > 1)
|
||||
CSS_SGI_MAX_CPUS_PER_CLUSTER,
|
||||
CSS_SGI_MAX_CPUS_PER_CLUSTER
|
||||
#endif
|
||||
};
|
||||
|
||||
/*******************************************************************************
|
||||
@ -28,5 +33,22 @@ const unsigned char *plat_get_power_domain_tree_desc(void)
|
||||
* to the SCMI power domain ID implemented by SCP.
|
||||
******************************************************************************/
|
||||
const uint32_t plat_css_core_pos_to_scmi_dmn_id_map[] = {
|
||||
0, 1, 2, 3, 4, 5, 6, 7
|
||||
(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)),
|
||||
#if (CSS_SGI_CHIP_COUNT > 1)
|
||||
(SET_SCMI_CHANNEL_ID(0x1) | SET_SCMI_DOMAIN_ID(0x0)),
|
||||
(SET_SCMI_CHANNEL_ID(0x1) | SET_SCMI_DOMAIN_ID(0x1)),
|
||||
(SET_SCMI_CHANNEL_ID(0x1) | SET_SCMI_DOMAIN_ID(0x2)),
|
||||
(SET_SCMI_CHANNEL_ID(0x1) | SET_SCMI_DOMAIN_ID(0x3)),
|
||||
(SET_SCMI_CHANNEL_ID(0x1) | SET_SCMI_DOMAIN_ID(0x4)),
|
||||
(SET_SCMI_CHANNEL_ID(0x1) | SET_SCMI_DOMAIN_ID(0x5)),
|
||||
(SET_SCMI_CHANNEL_ID(0x1) | SET_SCMI_DOMAIN_ID(0x6)),
|
||||
(SET_SCMI_CHANNEL_ID(0x1) | SET_SCMI_DOMAIN_ID(0x7)),
|
||||
#endif
|
||||
};
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2018-2020, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
@ -17,5 +17,6 @@
|
||||
system-id {
|
||||
platform-id = <0x0>;
|
||||
config-id = <0x0>;
|
||||
multi-chip-mode = <0x0>;
|
||||
};
|
||||
};
|
||||
|
@ -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
|
||||
*/
|
||||
@ -16,7 +16,6 @@
|
||||
#define CSS_SGI_MAX_PE_PER_CPU U(1)
|
||||
|
||||
#define PLAT_CSS_MHU_BASE UL(0x45000000)
|
||||
#define PLAT_MHUV2_BASE PLAT_CSS_MHU_BASE
|
||||
|
||||
/* Base address of DMC-620 instances */
|
||||
#define SGI575_DMC620_BASE0 UL(0x4e000000)
|
||||
@ -38,4 +37,9 @@
|
||||
#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(0x300C0000)
|
||||
|
||||
#endif /* PLATFORM_DEF_H */
|
||||
|
@ -1,11 +1,11 @@
|
||||
/*
|
||||
* 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
|
||||
*/
|
||||
|
||||
#include <plat/common/platform.h>
|
||||
|
||||
#include <sgi_plat.h>
|
||||
#include <sgi_variant.h>
|
||||
|
||||
unsigned int plat_arm_sgi_get_platform_id(void)
|
||||
@ -18,3 +18,13 @@ unsigned int plat_arm_sgi_get_config_id(void)
|
||||
return (mmio_read_32(SSC_VERSION) >> SSC_VERSION_CONFIG_SHIFT)
|
||||
& SSC_VERSION_CONFIG_MASK;
|
||||
}
|
||||
|
||||
unsigned int plat_arm_sgi_get_multi_chip_mode(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void bl31_platform_setup(void)
|
||||
{
|
||||
sgi_bl31_common_platform_setup();
|
||||
}
|
||||
|
@ -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
|
||||
*/
|
||||
@ -18,19 +18,22 @@
|
||||
* unsigned int plat_arm_calc_core_pos(u_register_t mpidr)
|
||||
*
|
||||
* Helper function to calculate the core position.
|
||||
* (ChipId * PLAT_ARM_CLUSTER_COUNT *
|
||||
* CSS_SGI_MAX_CPUS_PER_CLUSTER * CSS_SGI_MAX_PE_PER_CPU) +
|
||||
* (ClusterId * CSS_SGI_MAX_CPUS_PER_CLUSTER * CSS_SGI_MAX_PE_PER_CPU) +
|
||||
* (CPUId * CSS_SGI_MAX_PE_PER_CPU) +
|
||||
* ThreadId
|
||||
*
|
||||
* which can be simplified as:
|
||||
*
|
||||
* ((ClusterId * CSS_SGI_MAX_CPUS_PER_CLUSTER + CPUId) *
|
||||
* CSS_SGI_MAX_PE_PER_CPU) + ThreadId
|
||||
* ((((ChipId * PLAT_ARM_CLUSTER_COUNT) + ClusterId) *
|
||||
* CSS_SGI_MAX_CPUS_PER_CLUSTER) + CPUId) * CSS_SGI_MAX_PE_PER_CPU +
|
||||
* ThreadId
|
||||
* ------------------------------------------------------
|
||||
*/
|
||||
|
||||
func plat_arm_calc_core_pos
|
||||
mov x3, x0
|
||||
mov x4, x0
|
||||
|
||||
/*
|
||||
* The MT bit in MPIDR is always set for SGI platforms
|
||||
@ -38,15 +41,18 @@ func plat_arm_calc_core_pos
|
||||
*/
|
||||
|
||||
/* Extract individual affinity fields from MPIDR */
|
||||
ubfx x0, x3, #MPIDR_AFF0_SHIFT, #MPIDR_AFFINITY_BITS
|
||||
ubfx x1, x3, #MPIDR_AFF1_SHIFT, #MPIDR_AFFINITY_BITS
|
||||
ubfx x2, x3, #MPIDR_AFF2_SHIFT, #MPIDR_AFFINITY_BITS
|
||||
ubfx x0, x4, #MPIDR_AFF0_SHIFT, #MPIDR_AFFINITY_BITS
|
||||
ubfx x1, x4, #MPIDR_AFF1_SHIFT, #MPIDR_AFFINITY_BITS
|
||||
ubfx x2, x4, #MPIDR_AFF2_SHIFT, #MPIDR_AFFINITY_BITS
|
||||
ubfx x3, x4, #MPIDR_AFF3_SHIFT, #MPIDR_AFFINITY_BITS
|
||||
|
||||
/* Compute linear position */
|
||||
mov x4, #PLAT_ARM_CLUSTER_COUNT
|
||||
madd x2, x3, x4, x2
|
||||
mov x4, #CSS_SGI_MAX_CPUS_PER_CLUSTER
|
||||
madd x1, x2, x4, x1
|
||||
mov x5, #CSS_SGI_MAX_PE_PER_CPU
|
||||
madd x0, x1, x5, x0
|
||||
mov x4, #CSS_SGI_MAX_PE_PER_CPU
|
||||
madd x0, x1, x4, x0
|
||||
ret
|
||||
endfunc plat_arm_calc_core_pos
|
||||
|
||||
|
@ -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
|
||||
*/
|
||||
@ -17,12 +17,16 @@
|
||||
#include <plat/arm/soc/common/soc_css_def.h>
|
||||
#include <plat/common/common_def.h>
|
||||
|
||||
#define PLATFORM_CORE_COUNT (PLAT_ARM_CLUSTER_COUNT * \
|
||||
CSS_SGI_MAX_CPUS_PER_CLUSTER * \
|
||||
#define PLATFORM_CORE_COUNT (CSS_SGI_CHIP_COUNT * \
|
||||
PLAT_ARM_CLUSTER_COUNT * \
|
||||
CSS_SGI_MAX_CPUS_PER_CLUSTER * \
|
||||
CSS_SGI_MAX_PE_PER_CPU)
|
||||
|
||||
#define PLAT_ARM_TRUSTED_SRAM_SIZE 0x00040000 /* 256 KB */
|
||||
|
||||
/* Remote chip address offset (4TB per chip) */
|
||||
#define CSS_SGI_REMOTE_CHIP_MEM_OFFSET(n) ((ULL(1) << 42) * (n))
|
||||
|
||||
/*
|
||||
* PLAT_ARM_MMAP_ENTRIES depends on the number of entries in the
|
||||
* plat_arm_mmap array defined for each BL stage.
|
||||
@ -35,14 +39,14 @@
|
||||
# define PLAT_SP_IMAGE_MAX_XLAT_TABLES 10
|
||||
# else
|
||||
# define PLAT_ARM_MMAP_ENTRIES 8
|
||||
# define MAX_XLAT_TABLES 5
|
||||
# define MAX_XLAT_TABLES 8
|
||||
# endif
|
||||
#elif defined(IMAGE_BL32)
|
||||
# define PLAT_ARM_MMAP_ENTRIES 8
|
||||
# define MAX_XLAT_TABLES 5
|
||||
#elif !USE_ROMLIB
|
||||
# define PLAT_ARM_MMAP_ENTRIES 11
|
||||
# define MAX_XLAT_TABLES 5
|
||||
# define MAX_XLAT_TABLES 7
|
||||
#else
|
||||
# define PLAT_ARM_MMAP_ENTRIES 12
|
||||
# define MAX_XLAT_TABLES 6
|
||||
@ -129,10 +133,29 @@
|
||||
CSS_SGI_DEVICE_SIZE, \
|
||||
MT_DEVICE | MT_RW | MT_SECURE)
|
||||
|
||||
/* GIC related constants */
|
||||
#define PLAT_ARM_GICD_BASE 0x30000000
|
||||
#define PLAT_ARM_GICC_BASE 0x2C000000
|
||||
#define PLAT_ARM_GICR_BASE 0x300C0000
|
||||
#define ARM_MAP_SHARED_RAM_REMOTE_CHIP(n) \
|
||||
MAP_REGION_FLAT( \
|
||||
CSS_SGI_REMOTE_CHIP_MEM_OFFSET(n) + \
|
||||
ARM_SHARED_RAM_BASE, \
|
||||
ARM_SHARED_RAM_SIZE, \
|
||||
MT_MEMORY | MT_RW | MT_SECURE \
|
||||
)
|
||||
|
||||
#define CSS_SGI_MAP_DEVICE_REMOTE_CHIP(n) \
|
||||
MAP_REGION_FLAT( \
|
||||
CSS_SGI_REMOTE_CHIP_MEM_OFFSET(n) + \
|
||||
CSS_SGI_DEVICE_BASE, \
|
||||
CSS_SGI_DEVICE_SIZE, \
|
||||
MT_DEVICE | MT_RW | MT_SECURE \
|
||||
)
|
||||
|
||||
#define SOC_CSS_MAP_DEVICE_REMOTE_CHIP(n) \
|
||||
MAP_REGION_FLAT( \
|
||||
CSS_SGI_REMOTE_CHIP_MEM_OFFSET(n) + \
|
||||
SOC_CSS_DEVICE_BASE, \
|
||||
SOC_CSS_DEVICE_SIZE, \
|
||||
MT_DEVICE | MT_RW | MT_SECURE \
|
||||
)
|
||||
|
||||
/* Map the secure region for access from S-EL0 */
|
||||
#define PLAT_ARM_SECURE_MAP_DEVICE MAP_REGION_FLAT( \
|
||||
@ -212,4 +235,7 @@
|
||||
#define SBSA_SECURE_WDOG_BASE UL(0x2A480000)
|
||||
#define SBSA_SECURE_WDOG_TIMEOUT UL(100)
|
||||
|
||||
/* Number of SCMI channels on the platform */
|
||||
#define PLAT_ARM_SCMI_CHANNEL_COUNT CSS_SGI_CHIP_COUNT
|
||||
|
||||
#endif /* SGI_BASE_PLATFORM_DEF_H */
|
||||
|
13
plat/arm/css/sgi/include/sgi_plat.h
Normal file
13
plat/arm/css/sgi/include/sgi_plat.h
Normal file
@ -0,0 +1,13 @@
|
||||
/*
|
||||
* Copyright (c) 2020, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#ifndef SGI_PLAT_H
|
||||
#define SGI_PLAT_H
|
||||
|
||||
/* BL31 platform setup common to all SGI based platforms */
|
||||
void sgi_bl31_common_platform_setup(void);
|
||||
|
||||
#endif /* SGI_PLAT_H */
|
@ -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
|
||||
*/
|
||||
@ -8,16 +8,21 @@
|
||||
#define SGI_VARIANT_H
|
||||
|
||||
/* 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 */
|
||||
#define RD_N1E1_EDGE_SID_VER_PART_NUM 0x0786
|
||||
#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 */
|
||||
typedef struct sgi_platform_info {
|
||||
unsigned int platform_id; /* Part Number of the platform */
|
||||
unsigned int config_id; /* Config Id of the platform */
|
||||
unsigned int chip_id; /* Chip Id or Node number */
|
||||
unsigned int multi_chip_mode; /* Multi-chip mode availability */
|
||||
} sgi_platform_info_t;
|
||||
|
||||
extern sgi_platform_info_t sgi_plat_info;
|
||||
@ -28,4 +33,7 @@ unsigned int plat_arm_sgi_get_platform_id(void);
|
||||
/* returns the configuration id of the platform */
|
||||
unsigned int plat_arm_sgi_get_config_id(void);
|
||||
|
||||
/* returns true if operating in multi-chip configuration */
|
||||
unsigned int plat_arm_sgi_get_multi_chip_mode(void);
|
||||
|
||||
#endif /* SGI_VARIANT_H */
|
||||
|
@ -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
|
||||
*/
|
||||
@ -28,18 +28,57 @@ static scmi_channel_plat_info_t sgi575_scmi_plat_info = {
|
||||
.ring_doorbell = &mhu_ring_doorbell,
|
||||
};
|
||||
|
||||
static scmi_channel_plat_info_t rd_n1e1_edge_scmi_plat_info = {
|
||||
static scmi_channel_plat_info_t rd_n1e1_edge_scmi_plat_info[] = {
|
||||
{
|
||||
.scmi_mbx_mem = CSS_SCMI_PAYLOAD_BASE,
|
||||
.db_reg_addr = PLAT_CSS_MHU_BASE + SENDER_REG_SET(0),
|
||||
.db_preserve_mask = 0xfffffffe,
|
||||
.db_modify_mask = 0x1,
|
||||
.ring_doorbell = &mhuv2_ring_doorbell,
|
||||
},
|
||||
#if (CSS_SGI_CHIP_COUNT > 1)
|
||||
{
|
||||
.scmi_mbx_mem = CSS_SCMI_PAYLOAD_BASE +
|
||||
CSS_SGI_REMOTE_CHIP_MEM_OFFSET(1),
|
||||
.db_reg_addr = PLAT_CSS_MHU_BASE
|
||||
+ CSS_SGI_REMOTE_CHIP_MEM_OFFSET(1) + SENDER_REG_SET(0),
|
||||
.db_preserve_mask = 0xfffffffe,
|
||||
.db_modify_mask = 0x1,
|
||||
.ring_doorbell = &mhuv2_ring_doorbell,
|
||||
},
|
||||
#endif
|
||||
#if (CSS_SGI_CHIP_COUNT > 2)
|
||||
{
|
||||
.scmi_mbx_mem = CSS_SCMI_PAYLOAD_BASE +
|
||||
CSS_SGI_REMOTE_CHIP_MEM_OFFSET(2),
|
||||
.db_reg_addr = PLAT_CSS_MHU_BASE +
|
||||
CSS_SGI_REMOTE_CHIP_MEM_OFFSET(2) + SENDER_REG_SET(0),
|
||||
.db_preserve_mask = 0xfffffffe,
|
||||
.db_modify_mask = 0x1,
|
||||
.ring_doorbell = &mhuv2_ring_doorbell,
|
||||
},
|
||||
#endif
|
||||
#if (CSS_SGI_CHIP_COUNT > 3)
|
||||
{
|
||||
.scmi_mbx_mem = CSS_SCMI_PAYLOAD_BASE +
|
||||
CSS_SGI_REMOTE_CHIP_MEM_OFFSET(3),
|
||||
.db_reg_addr = PLAT_CSS_MHU_BASE +
|
||||
CSS_SGI_REMOTE_CHIP_MEM_OFFSET(3) + SENDER_REG_SET(0),
|
||||
.db_preserve_mask = 0xfffffffe,
|
||||
.db_modify_mask = 0x1,
|
||||
.ring_doorbell = &mhuv2_ring_doorbell,
|
||||
},
|
||||
#endif
|
||||
};
|
||||
|
||||
scmi_channel_plat_info_t *plat_css_get_scmi_info(void)
|
||||
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)
|
||||
return &rd_n1e1_edge_scmi_plat_info;
|
||||
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))
|
||||
panic();
|
||||
return &rd_n1e1_edge_scmi_plat_info[channel_id];
|
||||
}
|
||||
else if (sgi_plat_info.platform_id == SGI575_SSC_VER_PART_NUM)
|
||||
return &sgi575_scmi_plat_info;
|
||||
else
|
||||
@ -51,11 +90,12 @@ void bl31_early_platform_setup2(u_register_t arg0, u_register_t arg1,
|
||||
{
|
||||
sgi_plat_info.platform_id = plat_arm_sgi_get_platform_id();
|
||||
sgi_plat_info.config_id = plat_arm_sgi_get_config_id();
|
||||
sgi_plat_info.multi_chip_mode = plat_arm_sgi_get_multi_chip_mode();
|
||||
|
||||
arm_bl31_early_platform_setup((void *)arg0, arg1, arg2, (void *)arg3);
|
||||
}
|
||||
|
||||
void bl31_platform_setup(void)
|
||||
void sgi_bl31_common_platform_setup(void)
|
||||
{
|
||||
arm_bl31_platform_setup();
|
||||
|
||||
@ -66,9 +106,13 @@ void bl31_platform_setup(void)
|
||||
|
||||
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) &&
|
||||
(sgi_plat_info.config_id == RD_E1_EDGE_CONFIG_ID)) {
|
||||
/*
|
||||
* For RD-E1-Edge and RD-Daniel platforms, only CPU power ON/OFF
|
||||
* 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->system_off = NULL;
|
||||
ops->system_reset = NULL;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2018-2020, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
@ -62,6 +62,13 @@ static int plat_sgi_append_config_node(void)
|
||||
return -1;
|
||||
}
|
||||
|
||||
platcfg = plat_arm_sgi_get_multi_chip_mode();
|
||||
err = fdt_setprop_u32(fdt, nodeoffset, "multi-chip-mode", platcfg);
|
||||
if (err < 0) {
|
||||
ERROR("Failed to set multi-chip-mode\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
flush_dcache_range((uintptr_t)fdt, mem_params->image_info.image_size);
|
||||
|
||||
return 0;
|
||||
|
@ -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
|
||||
*/
|
||||
@ -86,7 +86,6 @@
|
||||
|
||||
/* MHU related constants */
|
||||
#define PLAT_CSS_MHU_BASE 0x2b1f0000
|
||||
#define PLAT_MHUV2_BASE PLAT_CSS_MHU_BASE
|
||||
|
||||
#define PLAT_ARM_TRUSTED_ROM_BASE 0x00000000
|
||||
#define PLAT_ARM_TRUSTED_ROM_SIZE 0x00080000
|
||||
@ -239,4 +238,7 @@
|
||||
/* System power domain level */
|
||||
#define CSS_SYSTEM_PWR_DMN_LVL ARM_PWR_LVL2
|
||||
|
||||
/* Number of SCMI channels on the platform */
|
||||
#define PLAT_ARM_SCMI_CHANNEL_COUNT U(1)
|
||||
|
||||
#endif /* SGM_BASE_PLATFORM_DEF_H */
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2018-2020, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
@ -20,7 +20,7 @@ static scmi_channel_plat_info_t sgm775_scmi_plat_info = {
|
||||
.ring_doorbell = &mhu_ring_doorbell,
|
||||
};
|
||||
|
||||
scmi_channel_plat_info_t *plat_css_get_scmi_info()
|
||||
scmi_channel_plat_info_t *plat_css_get_scmi_info(int channel_id)
|
||||
{
|
||||
return &sgm775_scmi_plat_info;
|
||||
}
|
||||
|
@ -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
|
||||
*/
|
||||
@ -80,7 +80,6 @@
|
||||
#define DRAMINFO_BASE 0x2E00FFC0
|
||||
|
||||
#define PLAT_SQ_MHU_BASE 0x45000000
|
||||
#define PLAT_MHUV2_BASE 0xFFFFFFFF /* MHUV2 is not supported */
|
||||
|
||||
#define PLAT_SQ_SCP_COM_SHARED_MEM_BASE 0x45400000
|
||||
#define SCPI_CMD_GET_DRAMINFO 0x1
|
||||
|
Loading…
x
Reference in New Issue
Block a user