projects
/
oweals
/
u-boot.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
command: Remove the cmd_tbl_t typedef
[oweals/u-boot.git]
/
arch
/
arm
/
lib
/
bootm.c
diff --git
a/arch/arm/lib/bootm.c
b/arch/arm/lib/bootm.c
index b27266c7a1933c625031e8b67ddbb479d1cb74bc..0facd0c989385e2145f6e3cde1a3bb490e304028 100644
(file)
--- a/
arch/arm/lib/bootm.c
+++ b/
arch/arm/lib/bootm.c
@@
-12,9
+12,14
@@
*/
#include <common.h>
*/
#include <common.h>
+#include <bootstage.h>
#include <command.h>
#include <command.h>
+#include <cpu_func.h>
#include <dm.h>
#include <dm.h>
+#include <hang.h>
+#include <lmb.h>
#include <dm/root.h>
#include <dm/root.h>
+#include <env.h>
#include <image.h>
#include <u-boot/zlib.h>
#include <asm/byteorder.h>
#include <image.h>
#include <u-boot/zlib.h>
#include <asm/byteorder.h>
@@
-26,6
+31,7
@@
#include <linux/compiler.h>
#include <bootm.h>
#include <vxworks.h>
#include <linux/compiler.h>
#include <bootm.h>
#include <vxworks.h>
+#include <asm/cache.h>
#ifdef CONFIG_ARMV7_NONSEC
#include <asm/armv7.h>
#ifdef CONFIG_ARMV7_NONSEC
#include <asm/armv7.h>
@@
-64,13
+70,18
@@
void arch_lmb_reserve(struct lmb *lmb)
/* adjust sp by 4K to be safe */
sp -= 4096;
for (bank = 0; bank < CONFIG_NR_DRAM_BANKS; bank++) {
/* adjust sp by 4K to be safe */
sp -= 4096;
for (bank = 0; bank < CONFIG_NR_DRAM_BANKS; bank++) {
- if (sp < gd->bd->bi_dram[bank].start)
+ if (!gd->bd->bi_dram[bank].size ||
+ sp < gd->bd->bi_dram[bank].start)
continue;
continue;
+ /* Watch out for RAM at end of address space! */
bank_end = gd->bd->bi_dram[bank].start +
bank_end = gd->bd->bi_dram[bank].start +
- gd->bd->bi_dram[bank].size;
- if (sp >
=
bank_end)
+ gd->bd->bi_dram[bank].size
- 1
;
+ if (sp > bank_end)
continue;
continue;
- lmb_reserve(lmb, sp, bank_end - sp);
+ if (bank_end > gd->ram_top)
+ bank_end = gd->ram_top - 1;
+
+ lmb_reserve(lmb, sp, bank_end - sp + 1);
break;
}
}
break;
}
}
@@
-86,8
+97,6
@@
__weak void board_quiesce_devices(void)
*/
static void announce_and_cleanup(int fake)
{
*/
static void announce_and_cleanup(int fake)
{
- printf("\nStarting kernel ...%s\n\n", fake ?
- "(fake run for tracing)" : "");
bootstage_mark_name(BOOTSTAGE_ID_BOOTM_HANDOFF, "start_kernel");
#ifdef CONFIG_BOOTSTAGE_FDT
bootstage_fdt_add_report();
bootstage_mark_name(BOOTSTAGE_ID_BOOTM_HANDOFF, "start_kernel");
#ifdef CONFIG_BOOTSTAGE_FDT
bootstage_fdt_add_report();
@@
-102,6
+111,8
@@
static void announce_and_cleanup(int fake)
board_quiesce_devices();
board_quiesce_devices();
+ printf("\nStarting kernel ...%s\n\n", fake ?
+ "(fake run for tracing)" : "");
/*
* Call remove function of all devices with a removal flag set.
* This may be useful for last-stage operations, like cancelling
/*
* Call remove function of all devices with a removal flag set.
* This may be useful for last-stage operations, like cancelling
@@
-221,6
+232,8
@@
static void do_nonsec_virt_switch(void)
}
#endif
}
#endif
+__weak void board_prep_linux(bootm_headers_t *images) { }
+
/* Subcommand: PREP */
static void boot_prep_linux(bootm_headers_t *images)
{
/* Subcommand: PREP */
static void boot_prep_linux(bootm_headers_t *images)
{
@@
-267,6
+280,8
@@
static void boot_prep_linux(bootm_headers_t *images)
printf("FDT and ATAGS support not compiled in - hanging\n");
hang();
}
printf("FDT and ATAGS support not compiled in - hanging\n");
hang();
}
+
+ board_prep_linux(images);
}
__weak bool armv7_boot_nonsec_default(void)
}
__weak bool armv7_boot_nonsec_default(void)
@@
-407,7
+422,7
@@
static void boot_jump_linux(bootm_headers_t *images, int flag)
* DIFFERENCE: Instead of calling prep and go at the end
* they are called if subcommand is equal 0.
*/
* DIFFERENCE: Instead of calling prep and go at the end
* they are called if subcommand is equal 0.
*/
-int do_bootm_linux(int flag, int argc, char *
const argv[],
+int do_bootm_linux(int flag, int argc, char *const argv[],
bootm_headers_t *images)
{
/* No need for those on ARM */
bootm_headers_t *images)
{
/* No need for those on ARM */
@@
-437,7
+452,7
@@
void boot_prep_vxworks(bootm_headers_t *images)
if (images->ft_addr) {
off = fdt_path_offset(images->ft_addr, "/memory");
if (images->ft_addr) {
off = fdt_path_offset(images->ft_addr, "/memory");
- if (off
<
0) {
+ if (off
>
0) {
if (arch_fixup_fdt(images->ft_addr))
puts("## WARNING: fixup memory failed!\n");
}
if (arch_fixup_fdt(images->ft_addr))
puts("## WARNING: fixup memory failed!\n");
}