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
401e4911
Commit
401e4911
authored
Jul 26, 2017
by
davidcunado-arm
Committed by
GitHub
Jul 26, 2017
Browse files
Merge pull request #1032 from soby-mathew/sm/css_scp_reorg
Reorganise CSS SCP bootloader layer
parents
881cf374
1ea63d77
Changes
9
Hide whitespace changes
Inline
Side-by-side
include/plat/arm/css/common/css_def.h
View file @
401e4911
...
...
@@ -128,16 +128,22 @@
* an SCP_BL2/SCP_BL2U image.
*/
#if CSS_LOAD_SCP_IMAGES
#if ARM_BL31_IN_DRAM
#error "SCP_BL2 is not expected to be loaded by BL2 for ARM_BL31_IN_DRAM config"
#endif
/*
* Load address of SCP_BL2 in CSS platform ports
* SCP_BL2 is loaded to the same place as BL31. Once SCP_BL2 is transferred to the
* SCP, it is discarded and BL31 is loaded over the top.
* SCP_BL2 is loaded to the same place as BL31 but it shouldn't overwrite BL1
* rw data. Once SCP_BL2 is transferred to the SCP, it is discarded and BL31
* is loaded over the top.
*/
#define SCP_BL2_BASE BL
3
1_BASE
#define SCP_BL2_LIMIT
(SCP_BL2_BASE + PLAT_CSS_MAX_SCP_BL2_SIZE)
#define SCP_BL2_BASE
(
BL1
_RW
_BASE
- PLAT_CSS_MAX_SCP_BL2_SIZE)
#define SCP_BL2_LIMIT
BL1_RW_BASE
#define SCP_BL2U_BASE BL
3
1_BASE
#define SCP_BL2U_LIMIT
(SCP_BL2U_BASE + PLAT_CSS_MAX_SCP_BL2U_SIZE)
#define SCP_BL2U_BASE
(
BL1
_RW
_BASE
- PLAT_CSS_MAX_SCP_BL2U_SIZE)
#define SCP_BL2U_LIMIT
BL1_RW_BASE
#endif
/* CSS_LOAD_SCP_IMAGES */
/* Load address of Non-Secure Image for CSS platform ports */
...
...
plat/arm/board/juno/include/platform_def.h
View file @
401e4911
/*
* Copyright (c) 2014-201
6
, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2014-201
7
, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
...
...
@@ -106,7 +106,7 @@
* little space for growth.
*/
#if TRUSTED_BOARD_BOOT
# define PLAT_ARM_MAX_BL2_SIZE 0x1
D
000
# define PLAT_ARM_MAX_BL2_SIZE 0x1
8
000
#else
# define PLAT_ARM_MAX_BL2_SIZE 0xC000
#endif
...
...
@@ -172,13 +172,13 @@
* PLAT_CSS_MAX_SCP_BL2_SIZE is calculated using the current
* SCP_BL2 size plus a little space for growth.
*/
#define PLAT_CSS_MAX_SCP_BL2_SIZE 0x1
D
000
#define PLAT_CSS_MAX_SCP_BL2_SIZE 0x1
4
000
/*
* PLAT_CSS_MAX_SCP_BL2U_SIZE is calculated using the current
* SCP_BL2U size plus a little space for growth.
*/
#define PLAT_CSS_MAX_SCP_BL2U_SIZE 0x1
D
000
#define PLAT_CSS_MAX_SCP_BL2U_SIZE 0x1
4
000
/*
* Define a list of Group 1 Secure and Group 0 interrupts as per GICv3
...
...
plat/arm/css/common/css_bl2_setup.c
View file @
401e4911
...
...
@@ -11,7 +11,7 @@
#include <plat_arm.h>
#include <string.h>
#include <utils.h>
#include "
css_scp_bootloader
.h"
#include "
../drivers/scp/css_scp
.h"
/* Weak definition may be overridden in specific CSS based platform */
#if LOAD_IMAGE_V2
...
...
@@ -34,9 +34,12 @@ int bl2_plat_handle_scp_bl2(image_info_t *scp_bl2_image_info)
INFO
(
"BL2: Initiating SCP_BL2 transfer to SCP
\n
"
);
ret
=
scp_boot
loader_trans
fer
((
void
*
)
scp_bl2_image_info
->
image_base
,
ret
=
css_
scp_boot
_image_x
fer
((
void
*
)
scp_bl2_image_info
->
image_base
,
scp_bl2_image_info
->
image_size
);
if
(
ret
==
0
)
ret
=
css_scp_boot_ready
();
if
(
ret
==
0
)
INFO
(
"BL2: SCP_BL2 transferred to SCP
\n
"
);
else
...
...
plat/arm/css/common/css_bl2u_setup.c
View file @
401e4911
/*
* Copyright (c) 2015, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2015
-2017
, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
...
...
@@ -7,7 +7,7 @@
#include <bl_common.h>
#include <debug.h>
#include <plat_arm.h>
#include "
css_scp_bootloader
.h"
#include "
../drivers/scp/css_scp
.h"
/* Weak definition may be overridden in specific CSS based platform */
#pragma weak bl2u_plat_handle_scp_bl2u
...
...
@@ -40,9 +40,12 @@ int bl2u_plat_handle_scp_bl2u(void)
INFO
(
"BL2U: Initiating SCP_BL2U transfer to SCP
\n
"
);
ret
=
scp_boot
loader_trans
fer
((
void
*
)
scp_bl2u_image_info
.
image_base
,
ret
=
css_
scp_boot
_image_x
fer
((
void
*
)
scp_bl2u_image_info
.
image_base
,
scp_bl2u_image_info
.
image_size
);
if
(
ret
==
0
)
ret
=
css_scp_boot_ready
();
if
(
ret
==
0
)
INFO
(
"BL2U: SCP_BL2U transferred to SCP
\n
"
);
else
...
...
plat/arm/css/common/css_common.mk
View file @
401e4911
...
...
@@ -56,8 +56,8 @@ ifeq (${CSS_LOAD_SCP_IMAGES},1)
$(eval
$(call
FWU_FIP_ADD_IMG,SCP_BL2U,--scp-fwu-cfg))
endif
BL2U_SOURCES
+=
plat/arm/css/
common
/css_
scp
_bootloader.c
BL2_SOURCES
+=
plat/arm/css/
common
/css_
scp
_bootloader.c
BL2U_SOURCES
+=
plat/arm/css/
drivers/scp
/css_
bom
_bootloader.c
BL2_SOURCES
+=
plat/arm/css/
drivers/scp
/css_
bom
_bootloader.c
endif
# Enable option to detect whether the SCP ROM firmware in use predates version
...
...
plat/arm/css/common/css_scp_bootloader.h
deleted
100644 → 0
View file @
881cf374
/*
* Copyright (c) 2014, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef __CSS_SCP_BOOTLOADER_H__
#define __CSS_SCP_BOOTLOADER_H__
int
scp_bootloader_transfer
(
void
*
image
,
unsigned
int
image_size
);
#endif
/* __CSS_SCP_BOOTLOADER_H__ */
plat/arm/css/
common
/css_
scp
_bootloader.c
→
plat/arm/css/
drivers/scp
/css_
bom
_bootloader.c
View file @
401e4911
/*
* Copyright (c) 2014-201
6
, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2014-201
7
, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <arch_helpers.h>
#include <assert.h>
#include <cassert.h>
#include <css_def.h>
#include <debug.h>
#include <platform.h>
#include <stdint.h>
#include "../drivers/scpi/css_mhu.h"
#include "../drivers/scpi/css_scpi.h"
#include "css_scp_bootloader.h"
#include "../scpi/css_mhu.h"
/* ID of the MHU slot used for the BOM protocol */
#define BOM_MHU_SLOT_ID 0
...
...
@@ -46,6 +45,18 @@ typedef struct {
uint32_t
block_size
;
}
cmd_data_payload_t
;
/*
* All CSS platforms load SCP_BL2/SCP_BL2U just below BL rw-data and above
* BL2/BL2U (this is where BL31 usually resides except when ARM_BL31_IN_DRAM is
* set. Ensure that SCP_BL2/SCP_BL2U do not overflow into BL1 rw-data nor
* BL2/BL2U.
*/
CASSERT
(
SCP_BL2_LIMIT
<=
BL1_RW_BASE
,
assert_scp_bl2_overwrite_bl1
);
CASSERT
(
SCP_BL2U_LIMIT
<=
BL1_RW_BASE
,
assert_scp_bl2u_overwrite_bl1
);
CASSERT
(
SCP_BL2_BASE
>=
BL2_LIMIT
,
assert_scp_bl2_overwrite_bl2
);
CASSERT
(
SCP_BL2U_BASE
>=
BL2U_LIMIT
,
assert_scp_bl2u_overwrite_bl2u
);
static
void
scp_boot_message_start
(
void
)
{
mhu_secure_message_start
(
BOM_MHU_SLOT_ID
);
...
...
@@ -88,7 +99,7 @@ static void scp_boot_message_end(void)
mhu_secure_message_end
(
BOM_MHU_SLOT_ID
);
}
int
scp_boot
loader_trans
fer
(
void
*
image
,
unsigned
int
image_size
)
int
css_
scp_boot
_image_x
fer
(
void
*
image
,
unsigned
int
image_size
)
{
uint32_t
response
;
uint32_t
checksum
;
...
...
@@ -170,8 +181,5 @@ int scp_bootloader_transfer(void *image, unsigned int image_size)
return
-
1
;
}
VERBOSE
(
"Waiting for SCP to signal it is ready to go on
\n
"
);
/* Wait for SCP to signal it's ready */
return
scpi_wait_ready
();
return
0
;
}
plat/arm/css/drivers/scp/css_scp.h
View file @
401e4911
/*
* Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2016
-2017
, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
...
...
@@ -7,13 +7,31 @@
#ifndef __CSS_SCP_H__
#define __CSS_SCP_H__
#include <psci.h>
#include <types.h>
#include "../scpi/css_scpi.h"
void
css_scp_suspend
(
const
psci_power_state_t
*
target_state
);
void
css_scp_off
(
const
psci_power_state_t
*
target_state
);
/* Forward declarations */
struct
psci_power_state
;
/* API for power management by SCP */
void
css_scp_suspend
(
const
struct
psci_power_state
*
target_state
);
void
css_scp_off
(
const
struct
psci_power_state
*
target_state
);
void
css_scp_on
(
u_register_t
mpidr
);
int
css_scp_get_power_state
(
u_register_t
mpidr
,
unsigned
int
power_level
);
void
__dead2
css_scp_sys_shutdown
(
void
);
void
__dead2
css_scp_sys_reboot
(
void
);
/* API for SCP Boot Image transfer. Return 0 on success, -1 on error */
int
css_scp_boot_image_xfer
(
void
*
image
,
unsigned
int
image_size
);
/*
* API to wait for SCP to signal till it's ready after booting the transferred
* image.
*/
static
inline
int
css_scp_boot_ready
(
void
)
{
VERBOSE
(
"Waiting for SCP to signal it is ready to go on
\n
"
);
return
scpi_wait_ready
();
}
#endif
/* __CSS_SCP_H__ */
plat/arm/css/drivers/scpi/css_scpi.h
View file @
401e4911
/*
* Copyright (c) 2014-201
6
, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2014-201
7
, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
...
...
@@ -97,11 +97,11 @@ typedef enum {
scpi_system_reset
=
2
}
scpi_system_state_t
;
extern
int
scpi_wait_ready
(
void
);
extern
void
scpi_set_css_power_state
(
unsigned
int
mpidr
,
scpi_power_state_t
cpu_state
,
scpi_power_state_t
cluster_state
,
scpi_power_state_t
css_state
);
int
scpi_wait_ready
(
void
);
void
scpi_set_css_power_state
(
unsigned
int
mpidr
,
scpi_power_state_t
cpu_state
,
scpi_power_state_t
cluster_state
,
scpi_power_state_t
css_state
);
int
scpi_get_css_power_state
(
unsigned
int
mpidr
,
unsigned
int
*
cpu_state_p
,
unsigned
int
*
cluster_state_p
);
uint32_t
scpi_sys_power_state
(
scpi_system_state_t
system_state
);
...
...
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