GK SDK 源码库: XMIPCLinuxV100R005C00SPC030 (kernel/tools/open_source excluded)

This commit is contained in:
lai
2026-09-06 03:52:57 +08:00
commit b1928b41c0
21813 changed files with 4413081 additions and 0 deletions
@@ -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,83 @@
/*
* Copyright 2018-2022 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
err = 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);
if (err != 0) {
ERROR("Failed to add dynamic memory region.\n");
return err;
}
#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 */