Commit c61cf58f authored by Haojian Zhuang's avatar Haojian Zhuang
Browse files

hikey960: fix to load FIP by partition table



Avoid to load FIP by hacking address. Load it by partition table instead.
Signed-off-by: default avatarHaojian Zhuang <haojian.zhuang@linaro.org>
Change-Id: Ib476d024a51e4b9705441a0007d78f9fdf0ca078
parent f8631f51
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include <drivers/delay_timer.h> #include <drivers/delay_timer.h>
#include <drivers/dw_ufs.h> #include <drivers/dw_ufs.h>
#include <drivers/generic_delay_timer.h> #include <drivers/generic_delay_timer.h>
#include <drivers/partition/partition.h>
#include <drivers/ufs.h> #include <drivers/ufs.h>
#include <lib/mmio.h> #include <lib/mmio.h>
#ifdef SPD_opteed #ifdef SPD_opteed
...@@ -263,6 +264,11 @@ int hikey960_bl2_handle_post_image_load(unsigned int image_id) ...@@ -263,6 +264,11 @@ int hikey960_bl2_handle_post_image_load(unsigned int image_id)
* This function can be used by the platforms to update/use image * This function can be used by the platforms to update/use image
* information for given `image_id`. * information for given `image_id`.
******************************************************************************/ ******************************************************************************/
int bl2_plat_handle_pre_image_load(unsigned int image_id)
{
return hikey960_set_fip_addr(image_id, "fip");
}
int bl2_plat_handle_post_image_load(unsigned int image_id) int bl2_plat_handle_post_image_load(unsigned int image_id)
{ {
return hikey960_bl2_handle_post_image_load(image_id); return hikey960_bl2_handle_post_image_load(image_id);
......
...@@ -44,9 +44,6 @@ ...@@ -44,9 +44,6 @@
#define PL011_UART_CLK_IN_HZ 19200000 #define PL011_UART_CLK_IN_HZ 19200000
#define UFS_BASE 0 #define UFS_BASE 0
/* FIP partition */
#define HIKEY960_FIP_BASE (UFS_BASE + 0x1400000)
#define HIKEY960_FIP_MAX_SIZE (12 << 20)
#define HIKEY960_UFS_DESC_BASE 0x20000000 #define HIKEY960_UFS_DESC_BASE 0x20000000
#define HIKEY960_UFS_DESC_SIZE 0x00200000 /* 2MB */ #define HIKEY960_UFS_DESC_SIZE 0x00200000 /* 2MB */
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include <drivers/io/io_fip.h> #include <drivers/io/io_fip.h>
#include <drivers/io/io_memmap.h> #include <drivers/io/io_memmap.h>
#include <drivers/io/io_storage.h> #include <drivers/io/io_storage.h>
#include <drivers/partition/partition.h>
#include <lib/mmio.h> #include <lib/mmio.h>
#include <lib/semihosting.h> #include <lib/semihosting.h>
#include <tools_share/firmware_image_package.h> #include <tools_share/firmware_image_package.h>
...@@ -36,9 +37,12 @@ static int check_fip(const uintptr_t spec); ...@@ -36,9 +37,12 @@ static int check_fip(const uintptr_t spec);
size_t ufs_read_lun3_blks(int lba, uintptr_t buf, size_t size); size_t ufs_read_lun3_blks(int lba, uintptr_t buf, size_t size);
size_t ufs_write_lun3_blks(int lba, const uintptr_t buf, size_t size); size_t ufs_write_lun3_blks(int lba, const uintptr_t buf, size_t size);
static const io_block_spec_t ufs_fip_spec = { static io_block_spec_t ufs_fip_spec;
.offset = HIKEY960_FIP_BASE,
.length = HIKEY960_FIP_MAX_SIZE, static const io_block_spec_t ufs_gpt_spec = {
.offset = 0,
.length = PLAT_PARTITION_BLOCK_SIZE *
(PLAT_PARTITION_MAX_ENTRIES / 4 + 2),
}; };
static const io_block_dev_spec_t ufs_dev_spec = { static const io_block_dev_spec_t ufs_dev_spec = {
...@@ -199,6 +203,11 @@ static const struct plat_io_policy policies[] = { ...@@ -199,6 +203,11 @@ static const struct plat_io_policy policies[] = {
check_fip check_fip
}, },
#endif /* TRUSTED_BOARD_BOOT */ #endif /* TRUSTED_BOARD_BOOT */
[GPT_IMAGE_ID] = {
&ufs_dev_handle,
(uintptr_t)&ufs_gpt_spec,
check_ufs
},
}; };
static int check_ufs(const uintptr_t spec) static int check_ufs(const uintptr_t spec)
...@@ -253,6 +262,23 @@ void hikey960_io_setup(void) ...@@ -253,6 +262,23 @@ void hikey960_io_setup(void)
(void)result; (void)result;
} }
int hikey960_set_fip_addr(unsigned int image_id, const char *name)
{
const partition_entry_t *entry;
if (ufs_fip_spec.length == 0) {
partition_init(GPT_IMAGE_ID);
entry = get_partition_entry(name);
if (entry == NULL) {
ERROR("Could NOT find the %s partition!\n", name);
return -ENOENT;
}
ufs_fip_spec.offset = entry->start;
ufs_fip_spec.length = entry->length;
}
return 0;
}
/* Return an IO device handle and specification which can be used to access /* Return an IO device handle and specification which can be used to access
* an image. Use this to enforce platform load policy * an image. Use this to enforce platform load policy
*/ */
......
...@@ -26,6 +26,7 @@ void hikey960_init_mmu_el3(unsigned long total_base, ...@@ -26,6 +26,7 @@ void hikey960_init_mmu_el3(unsigned long total_base,
unsigned long coh_limit); unsigned long coh_limit);
void hikey960_io_setup(void); void hikey960_io_setup(void);
int hikey960_read_boardid(unsigned int *id); int hikey960_read_boardid(unsigned int *id);
int hikey960_set_fip_addr(unsigned int image_id, const char *name);
void hikey960_clk_init(void); void hikey960_clk_init(void);
void hikey960_pmu_init(void); void hikey960_pmu_init(void);
void hikey960_regulator_enable(void); void hikey960_regulator_enable(void);
......
...@@ -22,11 +22,13 @@ COLD_BOOT_SINGLE_CPU := 1 ...@@ -22,11 +22,13 @@ COLD_BOOT_SINGLE_CPU := 1
PLAT_PL061_MAX_GPIOS := 176 PLAT_PL061_MAX_GPIOS := 176
PROGRAMMABLE_RESET_ADDRESS := 1 PROGRAMMABLE_RESET_ADDRESS := 1
ENABLE_SVE_FOR_NS := 0 ENABLE_SVE_FOR_NS := 0
PLAT_PARTITION_BLOCK_SIZE := 4096
# Process flags # Process flags
$(eval $(call add_define,HIKEY960_TSP_RAM_LOCATION_ID)) $(eval $(call add_define,HIKEY960_TSP_RAM_LOCATION_ID))
$(eval $(call add_define,CRASH_CONSOLE_BASE)) $(eval $(call add_define,CRASH_CONSOLE_BASE))
$(eval $(call add_define,PLAT_PL061_MAX_GPIOS)) $(eval $(call add_define,PLAT_PL061_MAX_GPIOS))
$(eval $(call add_define,PLAT_PARTITION_BLOCK_SIZE))
# Add the build options to pack Trusted OS Extra1 and Trusted OS Extra2 images # Add the build options to pack Trusted OS Extra1 and Trusted OS Extra2 images
# in the FIP if the platform requires. # in the FIP if the platform requires.
...@@ -75,6 +77,8 @@ BL2_SOURCES += common/desc_image_load.c \ ...@@ -75,6 +77,8 @@ BL2_SOURCES += common/desc_image_load.c \
drivers/io/io_block.c \ drivers/io/io_block.c \
drivers/io/io_fip.c \ drivers/io/io_fip.c \
drivers/io/io_storage.c \ drivers/io/io_storage.c \
drivers/partition/gpt.c \
drivers/partition/partition.c \
drivers/synopsys/ufs/dw_ufs.c \ drivers/synopsys/ufs/dw_ufs.c \
drivers/ufs/ufs.c \ drivers/ufs/ufs.c \
lib/cpus/aarch64/cortex_a53.S \ lib/cpus/aarch64/cortex_a53.S \
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment