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
725912d8
Unverified
Commit
725912d8
authored
7 years ago
by
davidcunado-arm
Committed by
GitHub
7 years ago
Browse files
Options
Download
Plain Diff
Merge pull request #1190 from vchong/poplar_hisi_review2
poplar: Add BL32 (OP-TEE) support and misc updates
parents
842c00eb
f336774b
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
v2.0
v2.0-rc0
v1.6
v1.6-rc1
v1.6-rc0
v1.5
v1.5-rc3
v1.5-rc2
v1.5-rc1
v1.5-rc0
arm_cca_v0.2
arm_cca_v0.1
No related merge requests found
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
plat/hisilicon/poplar/aarch64/platform_common.c
+5
-0
plat/hisilicon/poplar/aarch64/platform_common.c
plat/hisilicon/poplar/bl2_plat_setup.c
+48
-1
plat/hisilicon/poplar/bl2_plat_setup.c
plat/hisilicon/poplar/bl31_plat_setup.c
+31
-1
plat/hisilicon/poplar/bl31_plat_setup.c
plat/hisilicon/poplar/include/hi3798cv200.h
+4
-1
plat/hisilicon/poplar/include/hi3798cv200.h
plat/hisilicon/poplar/include/platform_def.h
+45
-1
plat/hisilicon/poplar/include/platform_def.h
plat/hisilicon/poplar/include/poplar_layout.h
+3
-3
plat/hisilicon/poplar/include/poplar_layout.h
plat/hisilicon/poplar/plat_storage.c
+9
-0
plat/hisilicon/poplar/plat_storage.c
plat/hisilicon/poplar/platform.mk
+11
-0
plat/hisilicon/poplar/platform.mk
with
156 additions
and
7 deletions
+156
-7
plat/hisilicon/poplar/aarch64/platform_common.c
View file @
725912d8
...
...
@@ -25,9 +25,14 @@
DEVICE_SIZE, \
MT_DEVICE | MT_RW | MT_SECURE)
#define MAP_TSP_MEM MAP_REGION_FLAT(TSP_SEC_MEM_BASE, \
TSP_SEC_MEM_SIZE, \
MT_MEMORY | MT_RW | MT_SECURE)
static
const
mmap_region_t
poplar_mmap
[]
=
{
MAP_DDR
,
MAP_DEVICE
,
MAP_TSP_MEM
,
{
0
}
};
...
...
This diff is collapsed.
Click to expand it.
plat/hisilicon/poplar/bl2_plat_setup.c
View file @
725912d8
...
...
@@ -29,8 +29,10 @@
typedef
struct
bl2_to_bl31_params_mem
{
bl31_params_t
bl31_params
;
image_info_t
bl31_image_info
;
image_info_t
bl32_image_info
;
image_info_t
bl33_image_info
;
entry_point_info_t
bl33_ep_info
;
entry_point_info_t
bl32_ep_info
;
entry_point_info_t
bl31_ep_info
;
}
bl2_to_bl31_params_mem_t
;
...
...
@@ -61,6 +63,16 @@ bl31_params_t *bl2_plat_get_bl31_params(void)
SET_PARAM_HEAD
(
bl2_to_bl31_params
->
bl31_image_info
,
PARAM_IMAGE_BINARY
,
VERSION_1
,
0
);
/* Fill BL3-2 related information if it exists */
#ifdef BL32_BASE
bl2_to_bl31_params
->
bl32_ep_info
=
&
bl31_params_mem
.
bl32_ep_info
;
SET_PARAM_HEAD
(
bl2_to_bl31_params
->
bl32_ep_info
,
PARAM_EP
,
VERSION_1
,
0
);
bl2_to_bl31_params
->
bl32_image_info
=
&
bl31_params_mem
.
bl32_image_info
;
SET_PARAM_HEAD
(
bl2_to_bl31_params
->
bl32_image_info
,
PARAM_IMAGE_BINARY
,
VERSION_1
,
0
);
#endif
/* Fill BL3-3 related information */
bl2_to_bl31_params
->
bl33_ep_info
=
&
bl31_params_mem
.
bl33_ep_info
;
SET_PARAM_HEAD
(
bl2_to_bl31_params
->
bl33_ep_info
,
...
...
@@ -89,6 +101,41 @@ void bl2_plat_set_bl31_ep_info(image_info_t *image,
DISABLE_ALL_EXCEPTIONS
);
}
/*******************************************************************************
* Before calling this function BL32 is loaded in memory and its entrypoint
* is set by load_image. This is a placeholder for the platform to change
* the entrypoint of BL32 and set SPSR and security state.
* On Poplar we only set the security state of the entrypoint
******************************************************************************/
#ifdef BL32_BASE
void
bl2_plat_set_bl32_ep_info
(
image_info_t
*
bl32_image_info
,
entry_point_info_t
*
bl32_ep_info
)
{
SET_SECURITY_STATE
(
bl32_ep_info
->
h
.
attr
,
SECURE
);
/*
* The Secure Payload Dispatcher service is responsible for
* setting the SPSR prior to entry into the BL32 image.
*/
bl32_ep_info
->
spsr
=
0
;
}
/*******************************************************************************
* Populate the extents of memory available for loading BL32
******************************************************************************/
void
bl2_plat_get_bl32_meminfo
(
meminfo_t
*
bl32_meminfo
)
{
/*
* Populate the extents of memory available for loading BL32.
*/
bl32_meminfo
->
total_base
=
BL32_BASE
;
bl32_meminfo
->
free_base
=
BL32_BASE
;
bl32_meminfo
->
total_size
=
(
TSP_SEC_MEM_BASE
+
TSP_SEC_MEM_SIZE
)
-
BL32_BASE
;
bl32_meminfo
->
free_size
=
(
TSP_SEC_MEM_BASE
+
TSP_SEC_MEM_SIZE
)
-
BL32_BASE
;
}
#endif
/* BL32_BASE */
static
uint32_t
hisi_get_spsr_for_bl33_entry
(
void
)
{
unsigned
long
el_status
;
...
...
@@ -159,5 +206,5 @@ void bl2_platform_setup(void)
unsigned
long
plat_get_ns_image_entrypoint
(
void
)
{
return
PLAT_AR
M
_NS_IMAGE_OFFSET
;
return
PLAT_
POPL
AR_NS_IMAGE_OFFSET
;
}
This diff is collapsed.
Click to expand it.
plat/hisilicon/poplar/bl31_plat_setup.c
View file @
725912d8
...
...
@@ -32,11 +32,31 @@
#define BL31_COHERENT_RAM_BASE (unsigned long)(&__COHERENT_RAM_START__)
#define BL31_COHERENT_RAM_LIMIT (unsigned long)(&__COHERENT_RAM_END__)
#define TZPC_SEC_ATTR_CTRL_VALUE (0x9DB98D45)
static
entry_point_info_t
bl32_image_ep_info
;
static
entry_point_info_t
bl33_image_ep_info
;
static
void
hisi_tzpc_sec_init
(
void
)
{
mmio_write_32
(
HISI_TZPC_SEC_ATTR_CTRL
,
TZPC_SEC_ATTR_CTRL_VALUE
);
}
entry_point_info_t
*
bl31_plat_get_next_image_ep_info
(
uint32_t
type
)
{
return
&
bl33_image_ep_info
;
entry_point_info_t
*
next_image_info
;
assert
(
sec_state_is_valid
(
type
));
next_image_info
=
(
type
==
NON_SECURE
)
?
&
bl33_image_ep_info
:
&
bl32_image_ep_info
;
/*
* None of the images on the ARM development platforms can have 0x0
* as the entrypoint
*/
if
(
next_image_info
->
pc
)
return
next_image_info
;
else
return
NULL
;
}
void
bl31_early_platform_setup
(
bl31_params_t
*
from_bl2
,
...
...
@@ -47,6 +67,13 @@ void bl31_early_platform_setup(bl31_params_t *from_bl2,
/* Init console for crash report */
plat_crash_console_init
();
/*
* Copy BL32 (if populated by BL2) and BL33 entry point information.
* They are stored in Secure RAM, in BL2's address space.
*/
if
(
from_bl2
->
bl32_ep_info
)
bl32_image_ep_info
=
*
from_bl2
->
bl32_ep_info
;
bl33_image_ep_info
=
*
from_bl2
->
bl33_ep_info
;
}
...
...
@@ -58,6 +85,9 @@ void bl31_platform_setup(void)
/* Init GIC distributor and CPU interface */
plat_arm_gic_driver_init
();
plat_arm_gic_init
();
/* Init security properties of IP blocks */
hisi_tzpc_sec_init
();
}
void
bl31_plat_runtime_setup
(
void
)
...
...
This diff is collapsed.
Click to expand it.
plat/hisilicon/poplar/include/hi3798cv200.h
View file @
725912d8
...
...
@@ -30,7 +30,7 @@
#define TIMER20_BGLOAD (SEC_TIMER2_BASE + 0x018)
/* GPIO */
#define GPIO_MAX (1
2
)
#define GPIO_MAX (1
3
)
#define GPIO_BASE(x) (x != 5 ? \
0xf820000 + x * 0x1000 : 0xf8004000)
...
...
@@ -97,4 +97,7 @@
/* Watchdog */
#define HISI_WDG0_BASE (0xF8A2C000)
#define HISI_TZPC_BASE (0xF8A80000)
#define HISI_TZPC_SEC_ATTR_CTRL (HISI_TZPC_BASE + 0x10)
#endif
/* __HI3798cv200_H__ */
This diff is collapsed.
Click to expand it.
plat/hisilicon/poplar/include/platform_def.h
View file @
725912d8
...
...
@@ -48,11 +48,55 @@
#define TEE_SEC_MEM_BASE (0x70000000)
#define TEE_SEC_MEM_SIZE (0x10000000)
/* Memory location options for TSP */
#define POPLAR_SRAM_ID 0
#define POPLAR_DRAM_ID 1
/*
* DDR for OP-TEE (28MB from 0x02200000 -0x04000000) is divided in several
* regions:
* - Secure DDR (default is the top 16MB) used by OP-TEE
* - Non-secure DDR (4MB) reserved for OP-TEE's future use
* - Secure DDR (4MB aligned on 4MB) for OP-TEE's "Secure Data Path" feature
* - Non-secure DDR used by OP-TEE (shared memory and padding) (4MB)
* - Non-secure DDR (2MB) reserved for OP-TEE's future use
*/
#define DDR_SEC_SIZE 0x01000000
#define DDR_SEC_BASE 0x03000000
#define BL_MEM_BASE (BL1_RO_BASE)
#define BL_MEM_LIMIT (BL31_LIMIT)
#define BL_MEM_SIZE (BL_MEM_LIMIT - BL_MEM_BASE)
#define PLAT_ARM_NS_IMAGE_OFFSET 0x37000000
/*
* BL3-2 specific defines.
*/
/*
* The TSP currently executes from TZC secured area of DRAM.
*/
#define BL32_DRAM_BASE 0x03000000
#define BL32_DRAM_LIMIT 0x04000000
#if (POPLAR_TSP_RAM_LOCATION_ID == POPLAR_DRAM_ID)
#define TSP_SEC_MEM_BASE BL32_DRAM_BASE
#define TSP_SEC_MEM_SIZE (BL32_DRAM_LIMIT - BL32_DRAM_BASE)
#define BL32_BASE BL32_DRAM_BASE
#define BL32_LIMIT BL32_DRAM_LIMIT
#elif (POPLAR_TSP_RAM_LOCATION_ID == POPLAR_SRAM_ID)
#error "SRAM storage of TSP payload is currently unsupported"
#else
#error "Currently unsupported POPLAR_TSP_LOCATION_ID value"
#endif
/* BL32 is mandatory in AArch32 */
#ifndef AARCH32
#ifdef SPD_none
#undef BL32_BASE
#endif
/* SPD_none */
#endif
#define PLAT_POPLAR_NS_IMAGE_OFFSET 0x37000000
/* Page table and MMU setup constants */
#define ADDR_SPACE_SIZE (1ull << 32)
...
...
This diff is collapsed.
Click to expand it.
plat/hisilicon/poplar/include/poplar_layout.h
View file @
725912d8
...
...
@@ -74,16 +74,16 @@
* "OFFSET" is an offset to the start of a region relative to the
* base of the "l-loader" TEXT section (also a multiple of page size).
*/
#define LLOADER_TEXT_BASE 0x0
0
001000
/* page aligned */
#define LLOADER_TEXT_BASE 0x0
2
001000
/* page aligned */
#define BL1_OFFSET 0x0000D000
/* page multiple */
#define FIP_BASE 0x0
0
040000
#define FIP_BASE 0x0
2
040000
#define BL1_RO_SIZE 0x00008000
/* page multiple */
#define BL1_RW_SIZE 0x00008000
/* page multiple */
#define BL1_SIZE (BL1_RO_SIZE + BL1_RW_SIZE)
#define BL2_SIZE 0x0000c000
/* page multiple */
#define BL31_SIZE 0x00014000
#define FIP_SIZE 0x000
68
000
#define FIP_SIZE 0x000
c
000
0
/* absolute max */
/* BL1_OFFSET */
/* (Defined above) */
#define BL1_BASE (LLOADER_TEXT_BASE + BL1_OFFSET)
...
...
This diff is collapsed.
Click to expand it.
plat/hisilicon/poplar/plat_storage.c
View file @
725912d8
...
...
@@ -43,6 +43,10 @@ static const io_uuid_spec_t bl31_uuid_spec = {
.
uuid
=
UUID_EL3_RUNTIME_FIRMWARE_BL31
,
};
static
const
io_uuid_spec_t
bl32_uuid_spec
=
{
.
uuid
=
UUID_SECURE_PAYLOAD_BL32
,
};
static
const
io_uuid_spec_t
bl33_uuid_spec
=
{
.
uuid
=
UUID_NON_TRUSTED_FIRMWARE_BL33
,
};
...
...
@@ -69,6 +73,11 @@ static const struct plat_io_policy policies[] = {
(
uintptr_t
)
&
bl31_uuid_spec
,
open_fip
},
[
BL32_IMAGE_ID
]
=
{
&
fip_dev_handle
,
(
uintptr_t
)
&
bl32_uuid_spec
,
open_fip
},
[
BL33_IMAGE_ID
]
=
{
&
fip_dev_handle
,
(
uintptr_t
)
&
bl33_uuid_spec
,
...
...
This diff is collapsed.
Click to expand it.
plat/hisilicon/poplar/platform.mk
View file @
725912d8
...
...
@@ -4,6 +4,17 @@
# SPDX-License-Identifier: BSD-3-Clause
#
# On Poplar, the TSP can execute from TZC secure area in DRAM.
POPLAR_TSP_RAM_LOCATION
:=
dram
ifeq
(${POPLAR_TSP_RAM_LOCATION}, dram)
POPLAR_TSP_RAM_LOCATION_ID
=
POPLAR_DRAM_ID
else
ifeq
(${HIKEY960_TSP_RAM_LOCATION}, sram)
POPLAR_TSP_RAM_LOCATION_ID
:=
POPLAR_SRAM_ID
else
$(error
"Currently unsupported POPLAR_TSP_RAM_LOCATION value"
)
endif
$(eval
$(call
add_define,POPLAR_TSP_RAM_LOCATION_ID))
NEED_BL33
:=
yes
COLD_BOOT_SINGLE_CPU
:=
1
...
...
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