Blame view
cmd/booti.c
3.04 KB
5db28905c
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/* * (C) Copyright 2000-2009 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. * * SPDX-License-Identifier: GPL-2.0+ */ #include <common.h> #include <bootm.h> #include <command.h> #include <image.h> #include <lmb.h> #include <mapmem.h> |
280857649
|
14 15 |
#include <linux/kernel.h> #include <linux/sizes.h> |
5db28905c
|
16 17 |
DECLARE_GLOBAL_DATA_PTR; |
5db28905c
|
18 19 20 21 22 23 24 |
/* * 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
|
25 26 27 |
ulong ld; ulong relocated_addr; ulong image_size; |
5db28905c
|
28 29 30 31 32 33 |
ret = do_bootm_states(cmdtp, flag, argc, argv, BOOTM_STATE_START, images, 1); /* Setup Linux kernel Image entry point */ if (!argc) { |
6808ef9ac
|
34 |
ld = load_addr; |
5db28905c
|
35 36 37 38 |
debug("* kernel: default image load address = 0x%08lx ", load_addr); } else { |
6808ef9ac
|
39 |
ld = simple_strtoul(argv[0], NULL, 16); |
bf14d9a7e
|
40 41 |
debug("* kernel: cmdline image address = 0x%08lx ", ld); |
5db28905c
|
42 |
} |
6808ef9ac
|
43 |
ret = booti_setup(ld, &relocated_addr, &image_size); |
5db28905c
|
44 45 |
if (ret != 0) return 1; |
17a0dd734
|
46 |
#if defined(CONFIG_SECURE_BOOT) && !defined(CONFIG_AVB_SUPPORT) |
1e33f493a
|
47 48 49 50 51 52 53 54 55 |
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
|
56 57 58 59 60 61 |
/* 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
|
62 |
|
6808ef9ac
|
63 64 |
images->ep = relocated_addr; lmb_reserve(&images->lmb, images->ep, le32_to_cpu(image_size)); |
5db28905c
|
65 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 |
/* * 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; |
0fff19a67
|
93 |
images.os.arch = IH_ARCH_ARM64; |
5db28905c
|
94 |
ret = do_bootm_states(cmdtp, flag, argc, argv, |
4943dc2f1
|
95 96 97 |
#ifdef CONFIG_SYS_BOOT_RAMDISK_HIGH BOOTM_STATE_RAMDISK | #endif |
5db28905c
|
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
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]] " " - boot arm64 Linux Image stored in memory " "\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, "boot arm64 Linux Image image from memory", booti_help_text ); |