mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-26 07:17:10 +00:00
x86: zboot: Move kernel-version code into a function
To help reduce the size and complexity of load_zimage(), move the code that reads the kernel version into a separate function. Update get_boot_protocol() to allow printing the 'Magic signature' message only once, under control of its callers. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Wolfgang Wallner <wolfgang.wallner@br-automation.com> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
This commit is contained in:
parent
30b372d419
commit
c038f3be3b
1 changed files with 27 additions and 16 deletions
|
@ -103,21 +103,23 @@ static int kernel_magic_ok(struct setup_header *hdr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int get_boot_protocol(struct setup_header *hdr)
|
static int get_boot_protocol(struct setup_header *hdr, bool verbose)
|
||||||
{
|
{
|
||||||
if (hdr->header == KERNEL_V2_MAGIC) {
|
if (hdr->header == KERNEL_V2_MAGIC) {
|
||||||
printf("Magic signature found\n");
|
if (verbose)
|
||||||
|
printf("Magic signature found\n");
|
||||||
return hdr->version;
|
return hdr->version;
|
||||||
} else {
|
} else {
|
||||||
/* Very old kernel */
|
/* Very old kernel */
|
||||||
printf("Magic signature not found\n");
|
if (verbose)
|
||||||
|
printf("Magic signature not found\n");
|
||||||
return 0x0100;
|
return 0x0100;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int setup_device_tree(struct setup_header *hdr, const void *fdt_blob)
|
static int setup_device_tree(struct setup_header *hdr, const void *fdt_blob)
|
||||||
{
|
{
|
||||||
int bootproto = get_boot_protocol(hdr);
|
int bootproto = get_boot_protocol(hdr, false);
|
||||||
struct setup_data *sd;
|
struct setup_data *sd;
|
||||||
int size;
|
int size;
|
||||||
|
|
||||||
|
@ -147,10 +149,24 @@ static int setup_device_tree(struct setup_header *hdr, const void *fdt_blob)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char *get_kernel_version(struct boot_params *params,
|
||||||
|
void *kernel_base)
|
||||||
|
{
|
||||||
|
struct setup_header *hdr = ¶ms->hdr;
|
||||||
|
int bootproto;
|
||||||
|
|
||||||
|
bootproto = get_boot_protocol(hdr, false);
|
||||||
|
if (bootproto < 0x0200 || hdr->setup_sects < 15)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return kernel_base + hdr->kernel_version + 0x200;
|
||||||
|
}
|
||||||
|
|
||||||
struct boot_params *load_zimage(char *image, unsigned long kernel_size,
|
struct boot_params *load_zimage(char *image, unsigned long kernel_size,
|
||||||
ulong *load_addressp)
|
ulong *load_addressp)
|
||||||
{
|
{
|
||||||
struct boot_params *setup_base;
|
struct boot_params *setup_base;
|
||||||
|
const char *version;
|
||||||
int setup_size;
|
int setup_size;
|
||||||
int bootproto;
|
int bootproto;
|
||||||
int big_image;
|
int big_image;
|
||||||
|
@ -178,21 +194,16 @@ struct boot_params *load_zimage(char *image, unsigned long kernel_size,
|
||||||
printf("Error: Setup is too large (%d bytes)\n", setup_size);
|
printf("Error: Setup is too large (%d bytes)\n", setup_size);
|
||||||
|
|
||||||
/* determine boot protocol version */
|
/* determine boot protocol version */
|
||||||
bootproto = get_boot_protocol(hdr);
|
bootproto = get_boot_protocol(hdr, true);
|
||||||
|
|
||||||
printf("Using boot protocol version %x.%02x\n",
|
printf("Using boot protocol version %x.%02x\n",
|
||||||
(bootproto & 0xff00) >> 8, bootproto & 0xff);
|
(bootproto & 0xff00) >> 8, bootproto & 0xff);
|
||||||
|
|
||||||
if (bootproto >= 0x0200) {
|
version = get_kernel_version(params, image);
|
||||||
if (hdr->setup_sects >= 15) {
|
if (version)
|
||||||
printf("Linux kernel version %s\n",
|
printf("Linux kernel version %s\n", version);
|
||||||
(char *)params +
|
else
|
||||||
hdr->kernel_version + 0x200);
|
printf("Setup Sectors < 15 - Cannot print kernel version\n");
|
||||||
} else {
|
|
||||||
printf("Setup Sectors < 15 - "
|
|
||||||
"Cannot print kernel version.\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Determine image type */
|
/* Determine image type */
|
||||||
big_image = (bootproto >= 0x0200) &&
|
big_image = (bootproto >= 0x0200) &&
|
||||||
|
@ -261,7 +272,7 @@ int setup_zimage(struct boot_params *setup_base, char *cmd_line, int auto_boot,
|
||||||
unsigned long initrd_addr, unsigned long initrd_size)
|
unsigned long initrd_addr, unsigned long initrd_size)
|
||||||
{
|
{
|
||||||
struct setup_header *hdr = &setup_base->hdr;
|
struct setup_header *hdr = &setup_base->hdr;
|
||||||
int bootproto = get_boot_protocol(hdr);
|
int bootproto = get_boot_protocol(hdr, false);
|
||||||
|
|
||||||
setup_base->e820_entries = install_e820_map(
|
setup_base->e820_entries = install_e820_map(
|
||||||
ARRAY_SIZE(setup_base->e820_map), setup_base->e820_map);
|
ARRAY_SIZE(setup_base->e820_map), setup_base->e820_map);
|
||||||
|
|
Loading…
Add table
Reference in a new issue