Browse Source
This patch adds support for Firmware update in BL2U for ARM platforms such that TZC initialization is performed on all ARM platforms and (optionally) transfer of SCP_BL2U image on ARM CSS platforms. BL2U specific functions are added to handle early_platform and plat_arch setup. The MMU is configured to map in the BL2U code/data area and other required memory. Change-Id: I57863295a608cc06e6cbf078b7ce34cbd9733e4fpull/453/head
Yatharth Kochar
9 years ago
12 changed files with 290 additions and 0 deletions
@ -0,0 +1,41 @@ |
|||||
|
/*
|
||||
|
* Copyright (c) 2013-2015, ARM Limited and Contributors. All rights reserved. |
||||
|
* |
||||
|
* Redistribution and use in source and binary forms, with or without |
||||
|
* modification, are permitted provided that the following conditions are met: |
||||
|
* |
||||
|
* Redistributions of source code must retain the above copyright notice, this |
||||
|
* list of conditions and the following disclaimer. |
||||
|
* |
||||
|
* Redistributions in binary form must reproduce the above copyright notice, |
||||
|
* this list of conditions and the following disclaimer in the documentation |
||||
|
* and/or other materials provided with the distribution. |
||||
|
* |
||||
|
* Neither the name of ARM nor the names of its contributors may be used |
||||
|
* to endorse or promote products derived from this software without specific |
||||
|
* prior written permission. |
||||
|
* |
||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
||||
|
* POSSIBILITY OF SUCH DAMAGE. |
||||
|
*/ |
||||
|
|
||||
|
#include <plat_arm.h> |
||||
|
#include "fvp_def.h" |
||||
|
#include "fvp_private.h" |
||||
|
|
||||
|
void bl2u_early_platform_setup(meminfo_t *mem_layout, void *plat_info) |
||||
|
{ |
||||
|
arm_bl2u_early_platform_setup(mem_layout, plat_info); |
||||
|
|
||||
|
/* Initialize the platform config for future decision making */ |
||||
|
fvp_config_setup(); |
||||
|
} |
@ -0,0 +1,120 @@ |
|||||
|
/*
|
||||
|
* Copyright (c) 2015, ARM Limited and Contributors. All rights reserved. |
||||
|
* |
||||
|
* Redistribution and use in source and binary forms, with or without |
||||
|
* modification, are permitted provided that the following conditions are met: |
||||
|
* |
||||
|
* Redistributions of source code must retain the above copyright notice, this |
||||
|
* list of conditions and the following disclaimer. |
||||
|
* |
||||
|
* Redistributions in binary form must reproduce the above copyright notice, |
||||
|
* this list of conditions and the following disclaimer in the documentation |
||||
|
* and/or other materials provided with the distribution. |
||||
|
* |
||||
|
* Neither the name of ARM nor the names of its contributors may be used |
||||
|
* to endorse or promote products derived from this software without specific |
||||
|
* prior written permission. |
||||
|
* |
||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
||||
|
* POSSIBILITY OF SUCH DAMAGE. |
||||
|
*/ |
||||
|
|
||||
|
#include <arch_helpers.h> |
||||
|
#include <arm_def.h> |
||||
|
#include <bl_common.h> |
||||
|
#include <console.h> |
||||
|
#include <platform_def.h> |
||||
|
#include <plat_arm.h> |
||||
|
#include <string.h> |
||||
|
|
||||
|
|
||||
|
/*
|
||||
|
* The next 2 constants identify the extents of the code & RO data region. |
||||
|
* These addresses are used by the MMU setup code and therefore they must be |
||||
|
* page-aligned. It is the responsibility of the linker script to ensure that |
||||
|
* __RO_START__ and __RO_END__ linker symbols refer to page-aligned addresses. |
||||
|
*/ |
||||
|
#define BL2U_RO_BASE (unsigned long)(&__RO_START__) |
||||
|
#define BL2U_RO_LIMIT (unsigned long)(&__RO_END__) |
||||
|
|
||||
|
#if USE_COHERENT_MEM |
||||
|
/*
|
||||
|
* The next 2 constants identify the extents of the coherent memory region. |
||||
|
* These addresses are used by the MMU setup code and therefore they must be |
||||
|
* page-aligned. It is the responsibility of the linker script to ensure that |
||||
|
* __COHERENT_RAM_START__ and __COHERENT_RAM_END__ linker symbols refer to |
||||
|
* page-aligned addresses. |
||||
|
*/ |
||||
|
#define BL2U_COHERENT_RAM_BASE (unsigned long)(&__COHERENT_RAM_START__) |
||||
|
#define BL2U_COHERENT_RAM_LIMIT (unsigned long)(&__COHERENT_RAM_END__) |
||||
|
#endif |
||||
|
|
||||
|
/* Weak definitions may be overridden in specific ARM standard platform */ |
||||
|
#pragma weak bl2u_platform_setup |
||||
|
#pragma weak bl2u_early_platform_setup |
||||
|
#pragma weak bl2u_plat_arch_setup |
||||
|
|
||||
|
/*
|
||||
|
* Perform ARM standard platform setup for BL2U |
||||
|
*/ |
||||
|
void arm_bl2u_platform_setup(void) |
||||
|
{ |
||||
|
/* Initialize the secure environment */ |
||||
|
plat_arm_security_setup(); |
||||
|
} |
||||
|
|
||||
|
void bl2u_platform_setup(void) |
||||
|
{ |
||||
|
arm_bl2u_platform_setup(); |
||||
|
} |
||||
|
|
||||
|
void arm_bl2u_early_platform_setup(meminfo_t *mem_layout, void *plat_info) |
||||
|
{ |
||||
|
/* Initialize the console to provide early debug support */ |
||||
|
console_init(PLAT_ARM_BOOT_UART_BASE, PLAT_ARM_BOOT_UART_CLK_IN_HZ, |
||||
|
ARM_CONSOLE_BAUDRATE); |
||||
|
} |
||||
|
|
||||
|
/*******************************************************************************
|
||||
|
* BL1 can pass platform dependent information to BL2U in x1. |
||||
|
* In case of ARM CSS platforms x1 contains SCP_BL2U image info. |
||||
|
* In case of ARM FVP platforms x1 is not used. |
||||
|
* In both cases, x0 contains the extents of the memory available to BL2U |
||||
|
******************************************************************************/ |
||||
|
void bl2u_early_platform_setup(meminfo_t *mem_layout, void *plat_info) |
||||
|
{ |
||||
|
arm_bl2u_early_platform_setup(mem_layout, plat_info); |
||||
|
} |
||||
|
|
||||
|
/*******************************************************************************
|
||||
|
* Perform the very early platform specific architectural setup here. At the |
||||
|
* moment this is only initializes the mmu in a quick and dirty way. |
||||
|
* The memory that is used by BL2U is only mapped. |
||||
|
******************************************************************************/ |
||||
|
void arm_bl2u_plat_arch_setup(void) |
||||
|
{ |
||||
|
arm_configure_mmu_el1(BL2U_RO_LIMIT, |
||||
|
BL31_LIMIT, |
||||
|
BL2U_RO_BASE, |
||||
|
BL2U_RO_LIMIT |
||||
|
#if USE_COHERENT_MEM |
||||
|
, |
||||
|
BL2U_COHERENT_RAM_BASE, |
||||
|
BL2U_COHERENT_RAM_LIMIT |
||||
|
#endif |
||||
|
); |
||||
|
} |
||||
|
|
||||
|
void bl2u_plat_arch_setup(void) |
||||
|
{ |
||||
|
arm_bl2u_plat_arch_setup(); |
||||
|
} |
@ -0,0 +1,76 @@ |
|||||
|
/*
|
||||
|
* Copyright (c) 2015, ARM Limited and Contributors. All rights reserved. |
||||
|
* |
||||
|
* Redistribution and use in source and binary forms, with or without |
||||
|
* modification, are permitted provided that the following conditions are met: |
||||
|
* |
||||
|
* Redistributions of source code must retain the above copyright notice, this |
||||
|
* list of conditions and the following disclaimer. |
||||
|
* |
||||
|
* Redistributions in binary form must reproduce the above copyright notice, |
||||
|
* this list of conditions and the following disclaimer in the documentation |
||||
|
* and/or other materials provided with the distribution. |
||||
|
* |
||||
|
* Neither the name of ARM nor the names of its contributors may be used |
||||
|
* to endorse or promote products derived from this software without specific |
||||
|
* prior written permission. |
||||
|
* |
||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
||||
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
||||
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
||||
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
||||
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
||||
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
||||
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
||||
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
||||
|
* POSSIBILITY OF SUCH DAMAGE. |
||||
|
*/ |
||||
|
|
||||
|
#include <bl_common.h> |
||||
|
#include <debug.h> |
||||
|
#include <plat_arm.h> |
||||
|
#include "css_scp_bootloader.h" |
||||
|
|
||||
|
/* Weak definition may be overridden in specific CSS based platform */ |
||||
|
#pragma weak bl2u_plat_handle_scp_bl2u |
||||
|
|
||||
|
/* Data structure which holds the SCP_BL2U image info for BL2U */ |
||||
|
static image_info_t scp_bl2u_image_info; |
||||
|
|
||||
|
/*******************************************************************************
|
||||
|
* BL1 can pass platform dependent information to BL2U in x1. |
||||
|
* In case of ARM CSS platforms x1 contains SCP_BL2U image info. |
||||
|
* In case of ARM FVP platforms x1 is not used. |
||||
|
* In both cases, x0 contains the extents of the memory available to BL2U |
||||
|
******************************************************************************/ |
||||
|
void bl2u_early_platform_setup(meminfo_t *mem_layout, void *plat_info) |
||||
|
{ |
||||
|
if (!plat_info) |
||||
|
panic(); |
||||
|
|
||||
|
arm_bl2u_early_platform_setup(mem_layout, plat_info); |
||||
|
|
||||
|
scp_bl2u_image_info = *(image_info_t *)plat_info; |
||||
|
} |
||||
|
|
||||
|
/*******************************************************************************
|
||||
|
* Transfer SCP_BL2U from Trusted RAM using the SCP Download protocol. |
||||
|
******************************************************************************/ |
||||
|
int bl2u_plat_handle_scp_bl2u(void) |
||||
|
{ |
||||
|
int ret; |
||||
|
|
||||
|
INFO("BL2U: Initiating SCP_BL2U transfer to SCP\n"); |
||||
|
|
||||
|
ret = scp_bootloader_transfer((void *)scp_bl2u_image_info.image_base, |
||||
|
scp_bl2u_image_info.image_size); |
||||
|
|
||||
|
if (ret == 0) |
||||
|
INFO("BL2U: SCP_BL2U transferred to SCP\n"); |
||||
|
else |
||||
|
ERROR("BL2U: SCP_BL2U transfer failure\n"); |
||||
|
|
||||
|
return ret; |
||||
|
} |
Loading…
Reference in new issue