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
29bb973d
Commit
29bb973d
authored
Mar 12, 2014
by
Sandrine Bailleux
Browse files
juno: BL2: Load BL30
Signed-off-by:
Ryan Harkin
<
ryan.harkin@linaro.org
>
parent
3c74eb6c
Changes
3
Hide whitespace changes
Inline
Side-by-side
plat/juno/bl2_plat_setup.c
View file @
29bb973d
...
...
@@ -28,11 +28,15 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <arch_helpers.h>
#include <platform.h>
#include <bl2.h>
#include <bl_common.h>
#include <scp_bootloader.h>
#include <debug.h>
/*******************************************************************************
* Declarations of linker defined symbols which will help us find the layout
...
...
@@ -102,6 +106,54 @@ void bl2_early_platform_setup(meminfo *mem_layout,
bl2_tzram_layout
.
next
=
0
;
}
/*******************************************************************************
* Load BL3-0 into Trusted RAM, then transfer it using the SCP Download
* protocol. The image is loaded into RAM in the same place that BL3-1 will be
* loaded later so here, we copy the RAM layout structure and use it to load
* the image into. When this function exits, the RAM layout remains untouched
* so the BL2 can load BL3-1 as normal.
******************************************************************************/
static
int
load_bl30
(
void
)
{
meminfo
*
bl2_tzram_layout
;
meminfo
tzram_layout
;
meminfo
*
tmp_tzram_layout
=
&
tzram_layout
;
unsigned
long
bl30_base
;
unsigned
int
image_len
;
unsigned
int
bl2_load
,
bl30_load
;
int
ret
=
-
1
;
/* Find out how much free trusted ram remains after BL2 load */
bl2_tzram_layout
=
bl2_plat_sec_mem_layout
();
/* copy the TZRAM layout and use it */
memcpy
(
tmp_tzram_layout
,
bl2_tzram_layout
,
sizeof
(
meminfo
));
/* Work out where to load BL3-0 before transferring to SCP */
bl2_load
=
tmp_tzram_layout
->
attr
&
LOAD_MASK
;
assert
((
bl2_load
==
TOP_LOAD
)
||
(
bl2_load
==
BOT_LOAD
));
bl30_load
=
(
bl2_load
==
TOP_LOAD
)
?
BOT_LOAD
:
TOP_LOAD
;
/* Load the BL3-0 image */
bl30_base
=
load_image
(
tmp_tzram_layout
,
BL30_IMAGE_NAME
,
bl30_load
,
BL30_BASE
);
if
(
bl30_base
!=
0
)
{
image_len
=
image_size
(
BL30_IMAGE_NAME
);
INFO
(
"BL2: BL3-0 loaded at 0x%lx, len=%d (0x%x)
\n\r
"
,
bl30_base
,
image_len
,
image_len
);
flush_dcache_range
(
bl30_base
,
image_len
);
ret
=
scp_bootloader_transfer
((
void
*
)
bl30_base
,
image_len
);
}
if
(
ret
==
0
)
INFO
(
"BL2: BL3-0 loaded and transferred to SCP
\n\r
"
);
else
ERROR
(
"BL2: BL3-0 load and transfer failure
\n\r
"
);
return
ret
;
}
/*******************************************************************************
* Perform platform specific setup, i.e. initialize the IO layer, load BL3-0
* image and initialise the memory location to use for passing arguments to
...
...
@@ -112,6 +164,10 @@ void bl2_platform_setup()
/* Initialise the IO layer and register platform IO devices */
io_setup
();
/* Load BL3-0 */
if
(
load_bl30
()
!=
0
)
panic
();
/* Populate the extents of memory available for loading BL3-3 */
bl2_to_bl31_args
.
bl33_meminfo
.
total_base
=
DRAM_BASE
;
bl2_to_bl31_args
.
bl33_meminfo
.
total_size
=
DRAM_SIZE
;
...
...
plat/juno/plat_io_storage.c
View file @
29bb973d
...
...
@@ -58,6 +58,11 @@ static io_file_spec bl2_file_spec = {
.
mode
=
FOPEN_MODE_R
};
static
io_file_spec
bl30_file_spec
=
{
.
path
=
BL30_IMAGE_NAME
,
.
mode
=
FOPEN_MODE_R
};
static
io_file_spec
bl31_file_spec
=
{
.
path
=
BL31_IMAGE_NAME
,
.
mode
=
FOPEN_MODE_R
...
...
@@ -81,6 +86,7 @@ typedef struct {
static
plat_io_policy
policies
[]
=
{
{
FIP_IMAGE_NAME
,
&
memmap_dev_handle
,
&
fip_block_spec
,
open_memmap
},
{
BL2_IMAGE_NAME
,
&
fip_dev_handle
,
&
bl2_file_spec
,
open_fip
},
{
BL30_IMAGE_NAME
,
&
fip_dev_handle
,
&
bl30_file_spec
,
open_fip
},
{
BL31_IMAGE_NAME
,
&
fip_dev_handle
,
&
bl31_file_spec
,
open_fip
},
{
BL33_IMAGE_NAME
,
&
fip_dev_handle
,
&
bl33_file_spec
,
open_fip
},
{
0
,
0
,
0
}
...
...
plat/juno/platform.h
View file @
29bb973d
...
...
@@ -54,6 +54,9 @@
/* Trusted Boot Firmware BL2 */
#define BL2_IMAGE_NAME "bl2.bin"
/* SCP Firmware BL3-0 */
#define BL30_IMAGE_NAME "bl30.bin"
/* EL3 Runtime Firmware BL3-1 */
#define BL31_IMAGE_NAME "bl31.bin"
...
...
@@ -155,6 +158,13 @@
******************************************************************************/
#define BL31_BASE 0x0400C000
/*******************************************************************************
* BL3-0 specific defines.
* BL3-0 is loaded to the same place as BL3-1. Once BL3-0 is transferred to the
* SCP, it is discarded and BL3-1 is loaded over the top.
******************************************************************************/
#define BL30_BASE BL31_BASE
/*******************************************************************************
* Platform specific page table and MMU setup constants
******************************************************************************/
...
...
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