mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-06-13 15:03:58 +03:00
@@ -67,7 +67,7 @@ config SPL_SIZE_LIMIT_SUBTRACT_MALLOC
|
||||
config SPL_SIZE_LIMIT_PROVIDE_STACK
|
||||
hex "SPL image size check: provide stack space before relocation"
|
||||
depends on SPL_SIZE_LIMIT > 0
|
||||
default 0
|
||||
default 0x0
|
||||
help
|
||||
If set, this size is reserved in SPL_SIZE_LIMIT check to ensure such
|
||||
an image does not overflow SRAM if SPL_SIZE_LIMIT describes the size
|
||||
|
||||
@@ -126,7 +126,7 @@ config TPL_POWER
|
||||
|
||||
config TPL_TEXT_BASE
|
||||
hex "Base address for the .text section of the TPL stage"
|
||||
default 0
|
||||
default 0x0
|
||||
help
|
||||
The base address for the .text section of the TPL stage.
|
||||
|
||||
|
||||
@@ -45,10 +45,6 @@
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
DECLARE_BINMAN_MAGIC_SYM;
|
||||
|
||||
#ifndef CFG_SYS_UBOOT_START
|
||||
#define CFG_SYS_UBOOT_START CONFIG_TEXT_BASE
|
||||
#endif
|
||||
|
||||
u32 *boot_params_ptr = NULL;
|
||||
|
||||
#if CONFIG_IS_ENABLED(BINMAN_UBOOT_SYMBOLS)
|
||||
@@ -252,7 +248,7 @@ void spl_set_header_raw_uboot(struct spl_image_info *spl_image)
|
||||
spl_image->entry_point = u_boot_pos;
|
||||
spl_image->load_addr = u_boot_pos;
|
||||
} else {
|
||||
spl_image->entry_point = CFG_SYS_UBOOT_START;
|
||||
spl_image->entry_point = CONFIG_SYS_UBOOT_START;
|
||||
spl_image->load_addr = CONFIG_TEXT_BASE;
|
||||
}
|
||||
spl_image->os = IH_OS_U_BOOT;
|
||||
@@ -800,7 +796,7 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
|
||||
IS_ENABLED(CONFIG_SPL_ATF))
|
||||
dram_init_banksize();
|
||||
|
||||
if (CONFIG_IS_ENABLED(PCI)) {
|
||||
if (CONFIG_IS_ENABLED(PCI) && !(gd->flags & GD_FLG_DM_DEAD)) {
|
||||
ret = pci_init();
|
||||
if (ret)
|
||||
puts(SPL_TPL_PROMPT "Cannot initialize PCI\n");
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <g_dnl.h>
|
||||
#include <usb.h>
|
||||
#include <dfu.h>
|
||||
#include <linux/printk.h>
|
||||
|
||||
static int run_dfu(int usb_index, char *interface, char *devstring)
|
||||
{
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
#include <asm/cache.h>
|
||||
#include <asm/global_data.h>
|
||||
#include <linux/libfdt.h>
|
||||
#include <linux/printk.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
@@ -816,7 +817,7 @@ int spl_load_simple_fit(struct spl_image_info *spl_image,
|
||||
}
|
||||
|
||||
/*
|
||||
* If a platform does not provide CFG_SYS_UBOOT_START, U-Boot's
|
||||
* If a platform does not provide CONFIG_SYS_UBOOT_START, U-Boot's
|
||||
* Makefile will set it to 0 and it will end up as the entry point
|
||||
* here. What it actually means is: use the load address.
|
||||
*/
|
||||
|
||||
@@ -229,7 +229,7 @@ static int mmc_load_image_raw_os(struct spl_image_info *spl_image,
|
||||
{
|
||||
int ret;
|
||||
|
||||
#if CONFIG_VAL(SYS_MMCSD_RAW_MODE_ARGS_SECTOR)
|
||||
#if defined(CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTOR)
|
||||
unsigned long count;
|
||||
|
||||
count = blk_dread(mmc_get_blk_desc(mmc),
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <asm/smp.h>
|
||||
#include <opensbi.h>
|
||||
#include <linux/libfdt.h>
|
||||
#include <linux/printk.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
|
||||
@@ -20,12 +20,16 @@
|
||||
static ulong spl_ram_load_read(struct spl_load_info *load, ulong sector,
|
||||
ulong count, void *buf)
|
||||
{
|
||||
ulong addr;
|
||||
ulong addr = 0;
|
||||
|
||||
debug("%s: sector %lx, count %lx, buf %lx\n",
|
||||
__func__, sector, count, (ulong)buf);
|
||||
|
||||
addr = (ulong)CONFIG_SPL_LOAD_FIT_ADDRESS + sector;
|
||||
if (IS_ENABLED(CONFIG_SPL_LOAD_FIT)) {
|
||||
addr = IF_ENABLED_INT(CONFIG_SPL_LOAD_FIT,
|
||||
CONFIG_SPL_LOAD_FIT_ADDRESS);
|
||||
}
|
||||
addr += sector;
|
||||
if (CONFIG_IS_ENABLED(IMAGE_PRE_LOAD))
|
||||
addr += image_load_offset;
|
||||
|
||||
@@ -38,20 +42,23 @@ static int spl_ram_load_image(struct spl_image_info *spl_image,
|
||||
struct spl_boot_device *bootdev)
|
||||
{
|
||||
struct legacy_img_hdr *header;
|
||||
ulong addr = 0;
|
||||
int ret;
|
||||
|
||||
header = (struct legacy_img_hdr *)CONFIG_SPL_LOAD_FIT_ADDRESS;
|
||||
if (IS_ENABLED(CONFIG_SPL_LOAD_FIT)) {
|
||||
addr = IF_ENABLED_INT(CONFIG_SPL_LOAD_FIT,
|
||||
CONFIG_SPL_LOAD_FIT_ADDRESS);
|
||||
}
|
||||
|
||||
if (CONFIG_IS_ENABLED(IMAGE_PRE_LOAD)) {
|
||||
unsigned long addr = (unsigned long)header;
|
||||
ret = image_pre_load(addr);
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
addr += image_load_offset;
|
||||
header = (struct legacy_img_hdr *)addr;
|
||||
}
|
||||
header = map_sysmem(addr, 0);
|
||||
|
||||
#if CONFIG_IS_ENABLED(DFU)
|
||||
if (bootdev->boot_device == BOOT_DEVICE_DFU)
|
||||
@@ -84,7 +91,7 @@ static int spl_ram_load_image(struct spl_image_info *spl_image,
|
||||
u_boot_pos = (ulong)spl_get_load_buffer(-sizeof(*header),
|
||||
sizeof(*header));
|
||||
}
|
||||
header = (struct legacy_img_hdr *)map_sysmem(u_boot_pos, 0);
|
||||
header = map_sysmem(u_boot_pos, 0);
|
||||
|
||||
ret = spl_parse_image_header(spl_image, bootdev, header);
|
||||
}
|
||||
|
||||
@@ -10,14 +10,18 @@
|
||||
#include <usb.h>
|
||||
#include <g_dnl.h>
|
||||
#include <sdp.h>
|
||||
#include <linux/printk.h>
|
||||
|
||||
static int spl_sdp_load_image(struct spl_image_info *spl_image,
|
||||
struct spl_boot_device *bootdev)
|
||||
{
|
||||
int ret;
|
||||
const int controller_index = CONFIG_SPL_SDP_USB_DEV;
|
||||
struct udevice *udc;
|
||||
int ret;
|
||||
|
||||
usb_gadget_initialize(controller_index);
|
||||
ret = udc_device_get_by_index(controller_index, &udc);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
board_usb_init(controller_index, USB_INIT_DEVICE);
|
||||
|
||||
@@ -25,13 +29,13 @@ static int spl_sdp_load_image(struct spl_image_info *spl_image,
|
||||
ret = g_dnl_register("usb_dnl_sdp");
|
||||
if (ret) {
|
||||
pr_err("SDP dnl register failed: %d\n", ret);
|
||||
return ret;
|
||||
goto err_detach;
|
||||
}
|
||||
|
||||
ret = sdp_init(controller_index);
|
||||
ret = sdp_init(udc);
|
||||
if (ret) {
|
||||
pr_err("SDP init failed: %d\n", ret);
|
||||
return -ENODEV;
|
||||
goto err_unregister;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -39,10 +43,13 @@ static int spl_sdp_load_image(struct spl_image_info *spl_image,
|
||||
* or it loads a FIT image and returns it to be handled by the SPL
|
||||
* code.
|
||||
*/
|
||||
ret = spl_sdp_handle(controller_index, spl_image, bootdev);
|
||||
ret = spl_sdp_handle(udc, spl_image, bootdev);
|
||||
debug("SDP ended\n");
|
||||
|
||||
usb_gadget_release(controller_index);
|
||||
err_unregister:
|
||||
g_dnl_unregister();
|
||||
err_detach:
|
||||
udc_device_put(udc);
|
||||
return ret;
|
||||
}
|
||||
SPL_LOAD_IMAGE_METHOD("USB SDP", 0, BOOT_DEVICE_BOARD, spl_sdp_load_image);
|
||||
|
||||
@@ -21,6 +21,23 @@ static int smh_read_full(long fd, void *memp, size_t len)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static ulong smh_fit_read(struct spl_load_info *load, ulong file_offset,
|
||||
ulong size, void *buf)
|
||||
{
|
||||
long fd;
|
||||
ulong ret;
|
||||
|
||||
fd = smh_open(load->filename, MODE_READ | MODE_BINARY);
|
||||
if (fd < 0) {
|
||||
log_debug("could not open %s: %ld\n", load->filename, fd);
|
||||
return 0;
|
||||
}
|
||||
ret = smh_read(fd, buf, size);
|
||||
smh_close(fd);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int spl_smh_load_image(struct spl_image_info *spl_image,
|
||||
struct spl_boot_device *bootdev)
|
||||
{
|
||||
@@ -49,6 +66,20 @@ static int spl_smh_load_image(struct spl_image_info *spl_image,
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (IS_ENABLED(CONFIG_SPL_LOAD_FIT) &&
|
||||
image_get_magic(header) == FDT_MAGIC) {
|
||||
struct spl_load_info load;
|
||||
|
||||
debug("Found FIT\n");
|
||||
load.read = smh_fit_read;
|
||||
load.bl_len = 1;
|
||||
load.filename = filename;
|
||||
load.priv = NULL;
|
||||
smh_close(fd);
|
||||
|
||||
return spl_load_simple_fit(spl_image, &load, 0, header);
|
||||
}
|
||||
|
||||
ret = spl_parse_image_header(spl_image, bootdev, header);
|
||||
if (ret) {
|
||||
log_debug("failed to parse image header: %d\n", ret);
|
||||
|
||||
Reference in New Issue
Block a user