summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
Diffstat (limited to 'common')
-rw-r--r--common/board_f.c13
-rw-r--r--common/board_r.c4
-rw-r--r--common/bootm.c29
-rw-r--r--common/bootm_os.c12
-rw-r--r--common/image-fdt.c2
-rw-r--r--common/image.c8
-rw-r--r--common/spl/spl.c2
-rw-r--r--common/spl/spl_ext.c2
8 files changed, 50 insertions, 22 deletions
diff --git a/common/board_f.c b/common/board_f.c
index b61036577a5..88ff0424a7b 100644
--- a/common/board_f.c
+++ b/common/board_f.c
@@ -502,11 +502,12 @@ static int reserve_malloc(void)
static int reserve_board(void)
{
if (!gd->bd) {
- gd->start_addr_sp = reserve_stack_aligned(sizeof(bd_t));
- gd->bd = (bd_t *)map_sysmem(gd->start_addr_sp, sizeof(bd_t));
- memset(gd->bd, '\0', sizeof(bd_t));
+ gd->start_addr_sp = reserve_stack_aligned(sizeof(struct bd_info));
+ gd->bd = (struct bd_info *)map_sysmem(gd->start_addr_sp,
+ sizeof(struct bd_info));
+ memset(gd->bd, '\0', sizeof(struct bd_info));
debug("Reserving %zu Bytes for Board Info at: %08lx\n",
- sizeof(bd_t), gd->start_addr_sp);
+ sizeof(struct bd_info), gd->start_addr_sp);
}
return 0;
}
@@ -601,7 +602,7 @@ static int display_new_sp(void)
defined(CONFIG_SH)
static int setup_board_part1(void)
{
- bd_t *bd = gd->bd;
+ struct bd_info *bd = gd->bd;
/*
* Save local variables to board info struct
@@ -631,7 +632,7 @@ static int setup_board_part1(void)
#if defined(CONFIG_PPC) || defined(CONFIG_M68K)
static int setup_board_part2(void)
{
- bd_t *bd = gd->bd;
+ struct bd_info *bd = gd->bd;
bd->bi_intfreq = gd->cpu_clk; /* Internal Freq, in Hz */
bd->bi_busfreq = gd->bus_clk; /* Bus Freq, in Hz */
diff --git a/common/board_r.c b/common/board_r.c
index 5e924322b2f..67dc25c7d28 100644
--- a/common/board_r.c
+++ b/common/board_r.c
@@ -381,7 +381,7 @@ __weak int is_flash_available(void)
static int initr_flash(void)
{
ulong flash_size = 0;
- bd_t *bd = gd->bd;
+ struct bd_info *bd = gd->bd;
if (!is_flash_available())
return 0;
@@ -533,7 +533,7 @@ static int initr_api(void)
#ifdef CONFIG_CMD_NET
static int initr_ethaddr(void)
{
- bd_t *bd = gd->bd;
+ struct bd_info *bd = gd->bd;
/* kept around for legacy kernels only ... ignore the next section */
eth_env_get_enetaddr("ethaddr", bd->bi_enetaddr);
diff --git a/common/bootm.c b/common/bootm.c
index 2ed7521520a..247b600d9c6 100644
--- a/common/bootm.c
+++ b/common/bootm.c
@@ -228,6 +228,8 @@ static int bootm_find_os(struct cmd_tbl *cmdtp, int flag, int argc,
* @flag: Ignored Argument
* @argc: command argument count
* @argv: command argument list
+ * @start: OS image start address
+ * @size: OS image size
*
* boot_find_images() will attempt to load an available ramdisk,
* flattened device tree, as well as specifically marked
@@ -239,7 +241,8 @@ static int bootm_find_os(struct cmd_tbl *cmdtp, int flag, int argc,
* 0, if all existing images were loaded correctly
* 1, if an image is found but corrupted, or invalid
*/
-int bootm_find_images(int flag, int argc, char *const argv[])
+int bootm_find_images(int flag, int argc, char *const argv[], ulong start,
+ ulong size)
{
int ret;
@@ -251,6 +254,16 @@ int bootm_find_images(int flag, int argc, char *const argv[])
return 1;
}
+ /* check if ramdisk overlaps OS image */
+ if (images.rd_start && (((ulong)images.rd_start >= start &&
+ (ulong)images.rd_start <= start + size) ||
+ ((ulong)images.rd_end >= start &&
+ (ulong)images.rd_end <= start + size))) {
+ printf("ERROR: RD image overlaps OS image (OS=0x%lx..0x%lx)\n",
+ start, start + size);
+ return 1;
+ }
+
#if IMAGE_ENABLE_OF_LIBFDT
/* find flattened device tree */
ret = boot_get_fdt(flag, argc, argv, IH_ARCH_DEFAULT, &images,
@@ -259,6 +272,18 @@ int bootm_find_images(int flag, int argc, char *const argv[])
puts("Could not find a valid device tree\n");
return 1;
}
+
+ /* check if FDT overlaps OS image */
+ if (images.ft_addr &&
+ (((ulong)images.ft_addr >= start &&
+ (ulong)images.ft_addr <= start + size) ||
+ ((ulong)images.ft_addr + images.ft_len >= start &&
+ (ulong)images.ft_addr + images.ft_len <= start + size))) {
+ printf("ERROR: FDT image overlaps OS image (OS=0x%lx..0x%lx)\n",
+ start, start + size);
+ return 1;
+ }
+
if (CONFIG_IS_ENABLED(CMD_FDT))
set_working_fdt_addr(map_to_sysmem(images.ft_addr));
#endif
@@ -294,7 +319,7 @@ static int bootm_find_other(struct cmd_tbl *cmdtp, int flag, int argc,
(images.os.type == IH_TYPE_MULTI)) &&
(images.os.os == IH_OS_LINUX ||
images.os.os == IH_OS_VXWORKS))
- return bootm_find_images(flag, argc, argv);
+ return bootm_find_images(flag, argc, argv, 0, 0);
return 0;
}
diff --git a/common/bootm_os.c b/common/bootm_os.c
index 55296483f76..6a95e0de338 100644
--- a/common/bootm_os.c
+++ b/common/bootm_os.c
@@ -61,7 +61,7 @@ static void copy_args(char *dest, int argc, char *const argv[], char delim)
static int do_bootm_netbsd(int flag, int argc, char *const argv[],
bootm_headers_t *images)
{
- void (*loader)(bd_t *, image_header_t *, char *, char *);
+ void (*loader)(struct bd_info *, image_header_t *, char *, char *);
image_header_t *os_hdr, *hdr;
ulong kernel_data, kernel_len;
char *cmdline;
@@ -109,7 +109,7 @@ static int do_bootm_netbsd(int flag, int argc, char *const argv[],
cmdline = "";
}
- loader = (void (*)(bd_t *, image_header_t *, char *, char *))images->ep;
+ loader = (void (*)(struct bd_info *, image_header_t *, char *, char *))images->ep;
printf("## Transferring control to NetBSD stage-2 loader (at address %08lx) ...\n",
(ulong)loader);
@@ -155,7 +155,7 @@ static int do_bootm_lynxkdi(int flag, int argc, char *const argv[],
static int do_bootm_rtems(int flag, int argc, char *const argv[],
bootm_headers_t *images)
{
- void (*entry_point)(bd_t *);
+ void (*entry_point)(struct bd_info *);
if (flag != BOOTM_STATE_OS_GO)
return 0;
@@ -167,7 +167,7 @@ static int do_bootm_rtems(int flag, int argc, char *const argv[],
}
#endif
- entry_point = (void (*)(bd_t *))images->ep;
+ entry_point = (void (*)(struct bd_info *))images->ep;
printf("## Transferring control to RTEMS (at address %08lx) ...\n",
(ulong)entry_point);
@@ -495,7 +495,7 @@ static int do_bootm_tee(int flag, int argc, char *const argv[],
return ret;
/* Locate FDT etc */
- ret = bootm_find_images(flag, argc, argv);
+ ret = bootm_find_images(flag, argc, argv, 0, 0);
if (ret)
return ret;
@@ -516,7 +516,7 @@ static int do_bootm_efi(int flag, int argc, char *const argv[],
return 0;
/* Locate FDT, if provided */
- ret = bootm_find_images(flag, argc, argv);
+ ret = bootm_find_images(flag, argc, argv, 0, 0);
if (ret)
return ret;
diff --git a/common/image-fdt.c b/common/image-fdt.c
index b63e772bd6e..7005b349666 100644
--- a/common/image-fdt.c
+++ b/common/image-fdt.c
@@ -426,7 +426,7 @@ int boot_get_fdt(int flag, int argc, char *const argv[], uint8_t arch,
break;
default:
puts("ERROR: Did not find a cmdline Flattened Device Tree\n");
- goto no_fdt;
+ goto error;
}
printf(" Booting using the fdt blob at %#08lx\n", fdt_addr);
diff --git a/common/image.c b/common/image.c
index ff16f5afb0a..9d7d5c17d12 100644
--- a/common/image.c
+++ b/common/image.c
@@ -1665,10 +1665,12 @@ int boot_get_cmdline(struct lmb *lmb, ulong *cmd_start, ulong *cmd_end)
* 0 - success
* -1 - failure
*/
-int boot_get_kbd(struct lmb *lmb, bd_t **kbd)
+int boot_get_kbd(struct lmb *lmb, struct bd_info **kbd)
{
- *kbd = (bd_t *)(ulong)lmb_alloc_base(lmb, sizeof(bd_t), 0xf,
- env_get_bootm_mapsize() + env_get_bootm_low());
+ *kbd = (struct bd_info *)(ulong)lmb_alloc_base(lmb,
+ sizeof(struct bd_info),
+ 0xf,
+ env_get_bootm_mapsize() + env_get_bootm_low());
if (*kbd == NULL)
return -1;
diff --git a/common/spl/spl.c b/common/spl/spl.c
index 0e96a8cd104..4840d1d3670 100644
--- a/common/spl/spl.c
+++ b/common/spl/spl.c
@@ -54,7 +54,7 @@ binman_sym_declare(ulong, spl, size);
#endif
/* Define board data structure */
-static bd_t bdata __attribute__ ((section(".data")));
+static struct bd_info bdata __attribute__ ((section(".data")));
/*
* Board-specific Platform code can reimplement show_boot_progress () if needed
diff --git a/common/spl/spl_ext.c b/common/spl/spl_ext.c
index 3898041d106..d73f0627621 100644
--- a/common/spl/spl_ext.c
+++ b/common/spl/spl_ext.c
@@ -32,7 +32,7 @@ int spl_load_image_ext(struct spl_image_info *spl_image,
#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
printf("%s: ext4fs mount err - %d\n", __func__, err);
#endif
- goto end;
+ return -1;
}
err = ext4fs_open(filename, &filelen);