Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
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
6 years ago
by
Antonio Niño Díaz
Committed by
GitHub
6 years ago
Browse files
Options
Download
Plain Diff
Merge pull request #1655 from deepan02/deepak-arm/introduce-n1sdp
plat/arm: Introduce the N1SDP.
parents
c5476386
80d37c28
master
v2.5
v2.5-rc1
v2.5-rc0
v2.4
v2.4-rc2
v2.4-rc1
v2.4-rc0
v2.3
v2.3-rc2
v2.3-rc1
v2.3-rc0
v2.2
v2.2-rc2
v2.2-rc1
v2.2-rc0
v2.1
v2.1-rc1
v2.1-rc0
arm_cca_v0.2
arm_cca_v0.1
No related merge requests found
Changes
9
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
plat/arm/board/n1sdp/aarch64/n1sdp_helper.S
+74
-0
plat/arm/board/n1sdp/aarch64/n1sdp_helper.S
plat/arm/board/n1sdp/include/plat_macros.S
+23
-0
plat/arm/board/n1sdp/include/plat_macros.S
plat/arm/board/n1sdp/include/platform_def.h
+71
-0
plat/arm/board/n1sdp/include/platform_def.h
plat/arm/board/n1sdp/n1sdp_bl31_setup.c
+22
-0
plat/arm/board/n1sdp/n1sdp_bl31_setup.c
plat/arm/board/n1sdp/n1sdp_interconnect.c
+33
-0
plat/arm/board/n1sdp/n1sdp_interconnect.c
plat/arm/board/n1sdp/n1sdp_plat.c
+25
-0
plat/arm/board/n1sdp/n1sdp_plat.c
plat/arm/board/n1sdp/n1sdp_security.c
+12
-0
plat/arm/board/n1sdp/n1sdp_security.c
plat/arm/board/n1sdp/n1sdp_topology.c
+55
-0
plat/arm/board/n1sdp/n1sdp_topology.c
plat/arm/board/n1sdp/platform.mk
+67
-0
plat/arm/board/n1sdp/platform.mk
with
382 additions
and
0 deletions
+382
-0
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
This diff is collapsed.
Click to expand it.
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__ */
This diff is collapsed.
Click to expand it.
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__ */
This diff is collapsed.
Click to expand it.
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
;
}
This diff is collapsed.
Click to expand it.
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
)
{
}
This diff is collapsed.
Click to expand it.
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
}
};
This diff is collapsed.
Click to expand it.
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
)
{
}
This diff is collapsed.
Click to expand it.
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
};
This diff is collapsed.
Click to expand it.
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
This diff is collapsed.
Click to expand it.
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
Menu
Projects
Groups
Snippets
Help