nxp: image loader for loading fip image
function load_img(), is dependent on: - Recursively calling load_image() defined in common/bl_common.c - for each image in the fip. Signed-off-by: Pankaj Gupta <pankaj.gupta@nxp.com> Change-Id: I57ca4b666cd1b0b992b7c0fc2a4260b558c0e2a9
This commit is contained in:
parent
c2d621db58
commit
ed7cf3bff0
|
@ -0,0 +1,21 @@
|
|||
#
|
||||
# Copyright 2020 NXP
|
||||
#
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
#
|
||||
|
||||
IMG_LOADR_DRIVERS_PATH := ${PLAT_COMMON_PATH}/img_loadr
|
||||
|
||||
IMG_LOADR_SOURCES := $(IMG_LOADR_DRIVERS_PATH)/load_img.c
|
||||
PLAT_INCLUDES += -I$(IMG_LOADR_DRIVERS_PATH)
|
||||
|
||||
ifeq (${BL_COMM_IMG_LOADR_NEEDED},yes)
|
||||
BL_COMMON_SOURCES += ${IMG_LOADR_SOURCES}
|
||||
else
|
||||
ifeq (${BL2_IMG_LOADR_NEEDED},yes)
|
||||
BL2_SOURCES += ${IMG_LOADR_SOURCES}
|
||||
endif
|
||||
ifeq (${BL31_IMG_LOADR_NEEDED},yes)
|
||||
BL31_SOURCES += ${IMG_LOADR_SOURCES}
|
||||
endif
|
||||
endif
|
|
@ -0,0 +1,79 @@
|
|||
/*
|
||||
* Copyright 2018-2020 NXP
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#include <common/bl_common.h>
|
||||
#include <common/desc_image_load.h>
|
||||
#include <lib/xlat_tables/xlat_tables_v2.h>
|
||||
|
||||
#include "load_img.h"
|
||||
|
||||
/******************************************************************************
|
||||
* This function can be used to load DDR PHY/FUSE Images
|
||||
*
|
||||
* @param [in] image_id Image ID to be loaded
|
||||
*
|
||||
* @param [in,out] image_base Location at which the image should be loaded
|
||||
* In case image is prepended by a CSF header,
|
||||
* image_base is pointer to actual image after
|
||||
* the header
|
||||
*
|
||||
* @param [in,out] image_size User should pass the maximum size of the image
|
||||
* possible.(Buffer size starting from image_base)
|
||||
* Actual size of the image loaded is returned
|
||||
* back.
|
||||
*****************************************************************************/
|
||||
int load_img(unsigned int image_id, uintptr_t *image_base,
|
||||
uint32_t *image_size)
|
||||
{
|
||||
int err = 0;
|
||||
|
||||
image_desc_t img_info = {
|
||||
.image_id = image_id,
|
||||
SET_STATIC_PARAM_HEAD(image_info, PARAM_IMAGE_BINARY,
|
||||
VERSION_2, image_info_t, 0),
|
||||
#ifdef CSF_HEADER_PREPENDED
|
||||
.image_info.image_base = *image_base - CSF_HDR_SZ,
|
||||
.image_info.image_max_size = *image_size + CSF_HDR_SZ,
|
||||
#else
|
||||
.image_info.image_base = *image_base,
|
||||
.image_info.image_max_size = *image_size,
|
||||
#endif
|
||||
};
|
||||
|
||||
/* Create MMU entry for the CSF header */
|
||||
#if PLAT_XLAT_TABLES_DYNAMIC
|
||||
#ifdef CSF_HEADER_PREPENDED
|
||||
mmap_add_dynamic_region(img_info.image_info.image_base,
|
||||
img_info.image_info.image_base,
|
||||
CSF_HDR_SZ,
|
||||
MT_MEMORY | MT_RW | MT_SECURE);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
VERBOSE("BL2: Loading IMG %d\n", image_id);
|
||||
err = load_auth_image(image_id, &img_info.image_info);
|
||||
if (err != 0) {
|
||||
VERBOSE("Failed to load IMG %d\n", image_id);
|
||||
return err;
|
||||
}
|
||||
|
||||
#ifdef CSF_HEADER_PREPENDED
|
||||
*image_base = img_info.image_info.image_base + CSF_HDR_SZ;
|
||||
*image_size = img_info.image_info.image_size - CSF_HDR_SZ;
|
||||
#if PLAT_XLAT_TABLES_DYNAMIC
|
||||
mmap_remove_dynamic_region(img_info.image_info.image_base,
|
||||
CSF_HDR_SZ);
|
||||
#endif
|
||||
#else
|
||||
*image_base = img_info.image_info.image_base;
|
||||
*image_size = img_info.image_info.image_size;
|
||||
#endif
|
||||
|
||||
return err;
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
/*
|
||||
* Copyright 2018-2020 NXP
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef LOAD_IMAGE_H
|
||||
#define LOAD_IMAGE_H
|
||||
|
||||
int load_img(unsigned int image_id, uintptr_t *image_base,
|
||||
uint32_t *image_size);
|
||||
|
||||
#endif /* LOAD_IMAGE_H */
|
Loading…
Reference in New Issue