Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Arm Trusted Firmware
Commits
b3f7c42d
Unverified
Commit
b3f7c42d
authored
Oct 31, 2018
by
Antonio Niño Díaz
Committed by
GitHub
Oct 31, 2018
Browse files
Merge pull request #1655 from deepan02/deepak-arm/introduce-n1sdp
plat/arm: Introduce the N1SDP.
parents
c5476386
80d37c28
Changes
9
Hide whitespace changes
Inline
Side-by-side
plat/arm/board/n1sdp/aarch64/n1sdp_helper.S
0 → 100644
View file @
b3f7c42d
/*
*
Copyright
(
c
)
2018
,
ARM
Limited
and
Contributors
.
All
rights
reserved
.
*
*
SPDX
-
License
-
Identifier
:
BSD
-
3
-
Clause
*/
#include <arch.h>
#include <asm_macros.S>
#include <cortex_ares.h>
#include <cpu_macros.S>
#include <platform_def.h>
.
globl
plat_arm_calc_core_pos
.
globl
plat_reset_handler
/
*
-----------------------------------------------------
*
unsigned
int
plat_arm_calc_core_pos
(
u_register_t
mpidr
)
*
*
Helper
function
to
calculate
the
core
position
.
*
(
ClusterId
*
N1SDP_MAX_CPUS_PER_CLUSTER
*
N1SDP_MAX_PE_PER_CPU
)
+
*
(
CPUId
*
N1SDP_MAX_PE_PER_CPU
)
+
*
ThreadId
*
*
which
can
be
simplified
as
:
*
*
((
ClusterId
*
N1SDP_MAX_CPUS_PER_CLUSTER
+
CPUId
)
*
*
N1SDP_MAX_PE_PER_CPU
)
+
ThreadId
*
------------------------------------------------------
*/
func
plat_arm_calc_core_pos
mov
x3
,
x0
/
*
*
The
MT
bit
in
MPIDR
is
always
set
for
n1sdp
and
the
*
affinity
level
0
corresponds
to
thread
affinity
level
.
*/
/
*
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
/
*
Compute
linear
position
*/
mov
x4
,
#
N1SDP_MAX_CPUS_PER_CLUSTER
madd
x1
,
x2
,
x4
,
x1
mov
x5
,
#
N1SDP_MAX_PE_PER_CPU
madd
x0
,
x1
,
x5
,
x0
ret
endfunc
plat_arm_calc_core_pos
/
*
-----------------------------------------------------
*
void
plat_reset_handler
(
void
)
;
*
*
Determine
the
CPU
MIDR
and
disable
power
down
bit
for
*
that
CPU
.
*
-----------------------------------------------------
*/
func
plat_reset_handler
jump_if_cpu_midr
CORTEX_ARES_MIDR
,
ARES
ret
/
*
-----------------------------------------------------
*
Disable
CPU
power
down
bit
in
power
control
register
*
-----------------------------------------------------
*/
ARES
:
mrs
x0
,
CORTEX_ARES_CPUPWRCTLR_EL1
bic
x0
,
x0
,
#
CORTEX_ARES_CORE_PWRDN_EN_MASK
msr
CORTEX_ARES_CPUPWRCTLR_EL1
,
x0
isb
ret
endfunc
plat_reset_handler
plat/arm/board/n1sdp/include/plat_macros.S
0 → 100644
View file @
b3f7c42d
/*
*
Copyright
(
c
)
2018
,
ARM
Limited
and
Contributors
.
All
rights
reserved
.
*
*
SPDX
-
License
-
Identifier
:
BSD
-
3
-
Clause
*/
#ifndef __PLAT_MACROS_S__
#define __PLAT_MACROS_S__
#include <css_macros.S>
/*
---------------------------------------------
*
The
below
required
platform
porting
macro
*
prints
out
relevant
platform
registers
*
whenever
an
unhandled
exception
is
taken
in
*
BL31
.
*
*
There
are
currently
no
platform
specific
regs
*
to
print
.
*
---------------------------------------------
*/
.
macro
plat_crash_print_regs
.
endm
#endif /* __PLAT_MACROS_S__ */
plat/arm/board/n1sdp/include/platform_def.h
0 → 100644
View file @
b3f7c42d
/*
* Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef __PLATFORM_DEF_H__
#define __PLATFORM_DEF_H__
#include <arm_def.h>
#include <board_css_def.h>
#include <css_def.h>
#if CSS_USE_SCMI_SDS_DRIVER
#define N1SDP_SCMI_PAYLOAD_BASE 0x45400000
#else
#define PLAT_CSS_SCP_COM_SHARED_MEM_BASE 0x45400000
#endif
#define PLAT_ARM_TRUSTED_SRAM_SIZE 0x00080000
/* 512 KB */
#define PLAT_ARM_MAX_BL31_SIZE 0X20000
/*******************************************************************************
* N1SDP topology related constants
******************************************************************************/
#define N1SDP_MAX_CPUS_PER_CLUSTER 2
#define PLAT_ARM_CLUSTER_COUNT 2
#define N1SDP_MAX_PE_PER_CPU 1
#define PLATFORM_CORE_COUNT (PLAT_ARM_CLUSTER_COUNT * \
N1SDP_MAX_CPUS_PER_CLUSTER * \
N1SDP_MAX_PE_PER_CPU)
/*
* PLAT_ARM_MMAP_ENTRIES depends on the number of entries in the
* plat_arm_mmap array defined for each BL stage.
*/
#define PLAT_ARM_MMAP_ENTRIES 3
#define MAX_XLAT_TABLES 4
#define PLATFORM_STACK_SIZE 0x400
#define PLAT_ARM_NSTIMER_FRAME_ID 0
#define PLAT_CSS_MHU_BASE 0x45000000
#define PLAT_MAX_PWR_LVL 1
#define PLAT_ARM_G1S_IRQS ARM_G1S_IRQS, \
CSS_IRQ_MHU
#define PLAT_ARM_G0_IRQS ARM_G0_IRQS
#define PLAT_ARM_G1S_IRQ_PROPS(grp) CSS_G1S_IRQ_PROPS(grp)
#define PLAT_ARM_G0_IRQ_PROPS(grp) ARM_G0_IRQ_PROPS(grp)
#define N1SDP_DEVICE_BASE (0x20000000)
#define N1SDP_DEVICE_SIZE (0x20000000)
#define N1SDP_MAP_DEVICE MAP_REGION_FLAT( \
N1SDP_DEVICE_BASE, \
N1SDP_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
/* Platform ID address */
#define SSC_VERSION (SSC_REG_BASE + SSC_VERSION_OFFSET)
#endif
/* __PLATFORM_DEF_H__ */
plat/arm/board/n1sdp/n1sdp_bl31_setup.c
0 → 100644
View file @
b3f7c42d
/*
* Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include "../../css/drivers/scmi/scmi.h"
#include "../../css/drivers/mhu/css_mhu_doorbell.h"
#include <platform_def.h>
static
scmi_channel_plat_info_t
n1sdp_scmi_plat_info
=
{
.
scmi_mbx_mem
=
N1SDP_SCMI_PAYLOAD_BASE
,
.
db_reg_addr
=
PLAT_CSS_MHU_BASE
+
CSS_SCMI_MHU_DB_REG_OFF
,
.
db_preserve_mask
=
0xfffffffe
,
.
db_modify_mask
=
0x1
,
.
ring_doorbell
=
&
mhu_ring_doorbell
,
};
scmi_channel_plat_info_t
*
plat_css_get_scmi_info
()
{
return
&
n1sdp_scmi_plat_info
;
}
plat/arm/board/n1sdp/n1sdp_interconnect.c
0 → 100644
View file @
b3f7c42d
/*
* Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
/*
* For N1SDP which support FCM (with automatic interconnect enter/exit),
* we should not do anything in these interface functions.
* They are used to override the weak functions in cci drivers.
*/
/******************************************************************************
* Helper function to initialize ARM interconnect driver.
*****************************************************************************/
void
plat_arm_interconnect_init
(
void
)
{
}
/******************************************************************************
* Helper function to place current master into coherency
*****************************************************************************/
void
plat_arm_interconnect_enter_coherency
(
void
)
{
}
/******************************************************************************
* Helper function to remove current master from coherency
*****************************************************************************/
void
plat_arm_interconnect_exit_coherency
(
void
)
{
}
plat/arm/board/n1sdp/n1sdp_plat.c
0 → 100644
View file @
b3f7c42d
/*
* Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <arm_def.h>
#include <bl_common.h>
#include <debug.h>
#include <plat_arm.h>
#include <platform.h>
#include <platform_def.h>
/*
* Table of regions to map using the MMU.
* Replace or extend the below regions as required
*/
const
mmap_region_t
plat_arm_mmap
[]
=
{
ARM_MAP_SHARED_RAM
,
N1SDP_MAP_DEVICE
,
SOC_CSS_MAP_DEVICE
,
{
0
}
};
plat/arm/board/n1sdp/n1sdp_security.c
0 → 100644
View file @
b3f7c42d
/*
* Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
/*
* TZC programming is currently not done.
*/
void
plat_arm_security_setup
(
void
)
{
}
plat/arm/board/n1sdp/n1sdp_topology.c
0 → 100644
View file @
b3f7c42d
/*
* Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <plat_arm.h>
/* Topology */
typedef
struct
n1sdp_topology
{
const
unsigned
char
*
power_tree
;
unsigned
int
plat_cluster_core_count
;
}
n1sdp_topology_t
;
/*
* The power domain tree descriptor. The cluster power domains are
* arranged so that when the PSCI generic code creates the power domain tree,
* the indices of the CPU power domain nodes it allocates match the linear
* indices returned by plat_core_pos_by_mpidr().
*/
const
unsigned
char
n1sdp_pd_tree_desc
[]
=
{
PLAT_ARM_CLUSTER_COUNT
,
N1SDP_MAX_CPUS_PER_CLUSTER
,
N1SDP_MAX_CPUS_PER_CLUSTER
};
/* Topology configuration for n1sdp */
const
n1sdp_topology_t
n1sdp_topology
=
{
.
power_tree
=
n1sdp_pd_tree_desc
,
.
plat_cluster_core_count
=
N1SDP_MAX_CPUS_PER_CLUSTER
};
/*******************************************************************************
* This function returns the topology tree information.
******************************************************************************/
const
unsigned
char
*
plat_get_power_domain_tree_desc
(
void
)
{
return
n1sdp_topology
.
power_tree
;
}
/*******************************************************************************
* This function returns the core count within the cluster corresponding to
* `mpidr`.
******************************************************************************/
unsigned
int
plat_arm_get_cluster_core_count
(
u_register_t
mpidr
)
{
return
n1sdp_topology
.
plat_cluster_core_count
;
}
/*******************************************************************************
* 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
[
PLATFORM_CORE_COUNT
]
=
{
0
,
1
,
2
,
3
};
plat/arm/board/n1sdp/platform.mk
0 → 100644
View file @
b3f7c42d
#
# Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause
#
N1SDP_BASE
:=
plat/arm/board/n1sdp
INTERCONNECT_SOURCES
:=
${N1SDP_BASE}
/n1sdp_interconnect.c
PLAT_INCLUDES
:=
-I
${N1SDP_BASE}
/include
N1SDP_CPU_SOURCES
:=
lib/cpus/aarch64/cortex_ares.S
N1SDP_GIC_SOURCES
:=
drivers/arm/gic/common/gic_common.c
\
drivers/arm/gic/v3/gicv3_main.c
\
drivers/arm/gic/v3/gicv3_helpers.c
\
plat/common/plat_gicv3.c
\
plat/arm/common/arm_gicv3.c
\
drivers/arm/gic/v3/gic600.c
PLAT_BL_COMMON_SOURCES
:=
${N1SDP_BASE}
/n1sdp_plat.c
\
${N1SDP_BASE}
/aarch64/n1sdp_helper.S
BL31_SOURCES
:=
${N1SDP_CPU_SOURCES}
\
${INTERCONNECT_SOURCES}
\
${N1SDP_GIC_SOURCES}
\
${N1SDP_BASE}
/n1sdp_bl31_setup.c
\
${N1SDP_BASE}
/n1sdp_topology.c
\
${N1SDP_BASE}
/n1sdp_security.c
# TF-A not required to load the SCP Images
override CSS_LOAD_SCP_IMAGES
:
= 0
# BL1/BL2 Image not a part of the capsule Image for n1sdp
override NEED_BL1
:
= no
override NEED_BL2
:
= no
override NEED_BL2U
:
= no
#TFA for n1sdp starts from BL31
override RESET_TO_BL31
:
= 1
# 32 bit mode not supported
override CTX_INCLUDE_AARCH32_REGS
:
= 0
override ARM_PLAT_MT
:
= 1
# Select SCMI/SDS drivers instead of SCPI/BOM driver for communicating with the
# SCP during power management operations and for SCP RAM Firmware transfer.
CSS_USE_SCMI_SDS_DRIVER
:=
1
# System coherency is managed in hardware
HW_ASSISTED_COHERENCY
:=
1
# When building for systems with hardware-assisted coherency, there's no need to
# use USE_COHERENT_MEM. Require that USE_COHERENT_MEM must be set to 0 too.
USE_COHERENT_MEM
:=
0
include
plat/arm/common/arm_common.mk
include
plat/arm/css/common/css_common.mk
include
plat/arm/soc/common/soc_css.mk
include
plat/arm/board/common/board_common.mk
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment