Blame view
cmd/booti.c
3.22 KB
83d290c56 SPDX: Convert all... |
1 |
// SPDX-License-Identifier: GPL-2.0+ |
5db28905c cmd: Split 'bootz... |
2 3 4 |
/* * (C) Copyright 2000-2009 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. |
5db28905c cmd: Split 'bootz... |
5 6 7 8 9 10 |
*/ #include <common.h> #include <bootm.h> #include <command.h> #include <image.h> |
36bf446b6 common: Move enab... |
11 |
#include <irq_func.h> |
5db28905c cmd: Split 'bootz... |
12 13 |
#include <lmb.h> #include <mapmem.h> |
280857649 arm64: booti: all... |
14 15 |
#include <linux/kernel.h> #include <linux/sizes.h> |
5db28905c cmd: Split 'bootz... |
16 |
|
5db28905c cmd: Split 'bootz... |
17 18 19 20 21 22 23 |
/* * Image booting support */ static int booti_start(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[], bootm_headers_t *images) { int ret; |
6808ef9ac move booti_setup ... |
24 25 26 |
ulong ld; ulong relocated_addr; ulong image_size; |
5db28905c cmd: Split 'bootz... |
27 28 29 30 31 32 |
ret = do_bootm_states(cmdtp, flag, argc, argv, BOOTM_STATE_START, images, 1); /* Setup Linux kernel Image entry point */ if (!argc) { |
bb872dd93 image: Rename loa... |
33 |
ld = image_load_addr; |
5db28905c cmd: Split 'bootz... |
34 35 |
debug("* kernel: default image load address = 0x%08lx ", |
bb872dd93 image: Rename loa... |
36 |
image_load_addr); |
5db28905c cmd: Split 'bootz... |
37 |
} else { |
6808ef9ac move booti_setup ... |
38 |
ld = simple_strtoul(argv[0], NULL, 16); |
bf14d9a7e cmd: booti: fix i... |
39 40 |
debug("* kernel: cmdline image address = 0x%08lx ", ld); |
5db28905c cmd: Split 'bootz... |
41 |
} |
7f13b374f ARM: image: Add o... |
42 |
ret = booti_setup(ld, &relocated_addr, &image_size, false); |
5db28905c cmd: Split 'bootz... |
43 44 |
if (ret != 0) return 1; |
f9f6ae742 MA-16877 Skip ker... |
45 |
#if defined(CONFIG_IMX_HAB) && !defined(CONFIG_AVB_SUPPORT) |
2cd26c924 MLK-17044-3 booti... |
46 47 48 49 50 51 52 53 54 |
extern int authenticate_image( uint32_t ddr_start, uint32_t raw_image_size); if (authenticate_image(ld, image_size) != 0) { printf("Authenticate Image Fail, Please check "); return 1; } #endif |
6808ef9ac move booti_setup ... |
55 56 57 58 59 60 |
/* Handle BOOTM_STATE_LOADOS */ if (relocated_addr != ld) { debug("Moving Image from 0x%lx to 0x%lx ", ld, relocated_addr); memmove((void *)relocated_addr, (void *)ld, image_size); } |
5db28905c cmd: Split 'bootz... |
61 |
|
6808ef9ac move booti_setup ... |
62 |
images->ep = relocated_addr; |
683cdd683 cmd: booti: Store... |
63 64 |
images->os.start = relocated_addr; images->os.end = relocated_addr + image_size; |
6808ef9ac move booti_setup ... |
65 |
lmb_reserve(&images->lmb, images->ep, le32_to_cpu(image_size)); |
5db28905c cmd: Split 'bootz... |
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
/* * Handle the BOOTM_STATE_FINDOTHER state ourselves as we do not * have a header that provide this informaiton. */ if (bootm_find_images(flag, argc, argv)) return 1; return 0; } int do_booti(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { int ret; /* Consume 'booti' */ argc--; argv++; if (booti_start(cmdtp, flag, argc, argv, &images)) return 1; /* * We are doing the BOOTM_STATE_LOADOS state ourselves, so must * disable interrupts ourselves */ bootm_disable_interrupts(); images.os.os = IH_OS_LINUX; |
3cedc9747 RISCV: image: Add... |
94 95 96 |
#ifdef CONFIG_RISCV_SMODE images.os.arch = IH_ARCH_RISCV; #elif CONFIG_ARM64 |
0fff19a67 booti: Set images... |
97 |
images.os.arch = IH_ARCH_ARM64; |
3cedc9747 RISCV: image: Add... |
98 |
#endif |
5db28905c cmd: Split 'bootz... |
99 |
ret = do_bootm_states(cmdtp, flag, argc, argv, |
4943dc2f1 bootz/booti: relo... |
100 101 102 |
#ifdef CONFIG_SYS_BOOT_RAMDISK_HIGH BOOTM_STATE_RAMDISK | #endif |
5db28905c cmd: Split 'bootz... |
103 104 105 106 107 108 109 110 111 112 113 |
BOOTM_STATE_OS_PREP | BOOTM_STATE_OS_FAKE_GO | BOOTM_STATE_OS_GO, &images, 1); return ret; } #ifdef CONFIG_SYS_LONGHELP static char booti_help_text[] = "[addr [initrd[:size]] [fdt]] " |
3cedc9747 RISCV: image: Add... |
114 115 |
" - boot Linux 'Image' stored at 'addr' " |
5db28905c cmd: Split 'bootz... |
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
"\tThe argument 'initrd' is optional and specifies the address " "\tof an initrd in memory. The optional parameter ':size' allows " "\tspecifying the size of a RAW initrd. " #if defined(CONFIG_OF_LIBFDT) "\tSince booting a Linux kernel requires a flat device-tree, a " "\tthird argument providing the address of the device-tree blob " "\tis required. To boot a kernel with a device-tree blob but " "\twithout an initrd image, use a '-' for the initrd argument. " #endif ""; #endif U_BOOT_CMD( booti, CONFIG_SYS_MAXARGS, 1, do_booti, |
3cedc9747 RISCV: image: Add... |
137 |
"boot Linux kernel 'Image' format from memory", booti_help_text |
5db28905c cmd: Split 'bootz... |
138 |
); |