Compare commits

...

22 Commits
loado ... loadp

Author SHA1 Message Date
Simon Glass
76a1a9ce8f efi: app: Enable the cat command
This can be handy for looking at extlinux.conf files, so enable it for
the app.

Series-to: concept
Series-cc: heinrich
Cover-letter:
efi: Improvements for the EFI app on ARM
This series provides a number of minor improvements for the EFI app when
running on ARM machines (on top of Tianocore, for example):

- Tidy up various comments
- Show the ARM exception level in bdinfo
- Tidy up the output of 'meminfo'
- Get the addr_find command running
- Reduce verbosity when not debugging
- Show the model at the top of the diplay when using vidconsole
- Allow faking the boot right into the actual OS jump (for debugging)
END

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-08-15 16:35:41 -06:00
Simon Glass
e923d25a78 efi: app: Show the model when the vidconsole starts
When running with a vidconsole we only see the prompt at the top of
the display. Set the option to show the model as well.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-08-15 16:35:41 -06:00
Simon Glass
2b025c6c1c efi: arm: Increase the cyclic timeout again
The video sync sometimes takes 20ms on this board when running under
emulation, so increase the limit to 50ms.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-08-15 16:35:41 -06:00
Simon Glass
0c3dc93542 efi: app: Add a simplefb node to the devicetree
Use simplefb on ARM devices so that we see a console earlier, assuming
that 'console=tty0' is passed to Linux.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-08-15 16:35:41 -06:00
Simon Glass
9f9bff17eb efi: app: Only show the memory map when debugging
This is quite a long dump and is only useful when debugging. Show it
only if LOG_DEBUG is defined in this file.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-08-15 16:35:41 -06:00
Simon Glass
a305d76c6e efi: app: Use the relocated global_data
The new global_data is set up by the app but it never uses it. Switch to
the new value after board_init_f(), so that the output of the 'meminfo'
command is more contiguous.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-08-15 16:35:41 -06:00
Simon Glass
5e2b63b8b8 efi: app: Print the final message before freeing memory
Printing may make use of tables which could go away when freed, so do
the free as the last thing before exiting the app.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-08-15 16:35:41 -06:00
Simon Glass
ff97664455 efi: app: Use EFI_PAGE_SHIFT instead of 12 in free_memory()
Use the constant intended for this purpose, instead of open-coding the
value.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-08-15 16:35:41 -06:00
Simon Glass
7118db7ae9 efi: app: Pick up the SMBIOS table
If an SMBIOS table is available, pick it up so that it can be parsed, or
examined with the 'smbios' command.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-08-15 16:35:41 -06:00
Simon Glass
4a07ed2d83 efi: app: Allocate pages in any region
Rather than immediately falling back to the pool allocator when we
cannot get enough memory below 4GB, try the page allocator first. This
provides 4K-aligned memory, which is nicer to look at when debugging.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-08-15 16:35:41 -06:00
Simon Glass
742e122069 efi: app: Tidy up some stale comments in setup_memory()
A few comments are out of date. Drop the one about global_data_ptr and
reword the one about memory above 4GB.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-08-15 16:35:41 -06:00
Simon Glass
92523bdee6 efi: Fix up the addr_find command
This command was written before the lmb unification, so does not
currently build. Tidy it up and enable it for the EFI app, by default.

Also allow it to search any partition, not just a FAT one, since we may
have the kernel on ext4

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-08-15 16:35:41 -06:00
Simon Glass
03937028db efi: app: Show only a summary of disks and partitions
The EFI app shows a list of every disk and partition it can find. On
Qualcomm x1e laptops this can fill the screen. The information is not
that useful, so just show a summary.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-08-15 16:35:41 -06:00
Simon Glass
eb69e2e498 fdt: Add debugging for fdt_simplefb
Add some simple debug output to see what it is doing.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-08-15 16:35:41 -06:00
Simon Glass
fe5a8bf044 boot: Pass flags to the bootm_final event
For a fake go, we should tell the event not to actually do anything
irreversable, so pass the flag along.

Move the enum into a separate event_decl.h header file since otherwise
we must include bootm.h which causes a breakage with qemu-ppce500

We also don't want to pull event.h into the tools build, since it uses
types like u8 which are not available outside U-Boot

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-08-15 16:34:38 -06:00
Simon Glass
bd61bd5bdd boot: Improve debugging in bootm_load_os()
This shows an image type as an OS, which is not correct. Fix it up to
show both.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-08-15 16:10:35 -06:00
Simon Glass
75583b2c9f event: Add a dummy function for event_notify()
When CONFIG_EVENT is disabled, we should not try to send an event. This
is already handled for events without parameters, so handle it for
events that do have parameters, too.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-08-15 16:10:35 -06:00
Simon Glass
c173a64651 meminfo: Allow for up to 10 hex digits
On platforms where most of the memory is above 4GB, the EFI app may find
itself using addresses with 9 or even 10 digits. Expand the width of the
columns to cope with this.

Add some double bars across digits 9 and 8 so that it is easier to make
the value.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-08-15 15:11:49 -06:00
Simon Glass
c5286fae66 arm: Drop kernel_entry for arm64
This variable is tricky to set up and is only used to show an address.
Drop it and use the source variable instead.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-08-15 15:11:49 -06:00
Simon Glass
6ae03fbd9b arm: Show the exception level with bdinfo
Some machines start U-Boot in a different exception level, so provide a
way to view it.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-08-15 15:11:48 -06:00
Simon Glass
5fd8ea61aa arm: Fix swtiching typo
This should say 'switching', so fix it.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-08-15 15:11:11 -06:00
Simon Glass
9dedbc9738 arm: bootm: Add some debugging
Provides some debugging info while doing bootm processing.

Signed-off-by: Simon Glass <sjg@chromium.org>
2025-08-15 15:11:11 -06:00
17 changed files with 139 additions and 75 deletions

View File

@@ -61,4 +61,11 @@ void arch_print_bdinfo(void)
printf("Early malloc usage: %x / %x\n", gd->malloc_ptr,
CONFIG_VAL(SYS_MALLOC_F_LEN));
#endif
#ifdef CONFIG_ARM64
ulong el;
/* the CurrentEL register holds the current Exception Level in bits 3:2 */
asm volatile("mrs %0, CurrentEL" : "=r" (el));
lprint_num_l("CurrentEL", el);
#endif
}

View File

@@ -11,6 +11,8 @@
* Copyright (C) 2001 Erik Mouw (J.A.K.Mouw@its.tudelft.nl)
*/
#define LOG_CATEGORY LOGC_BOOT
#include <bootm.h>
#include <bootstage.h>
#include <command.h>
@@ -154,7 +156,7 @@ static void do_nonsec_virt_switch(void)
{
if (ll_boot_init()) {
smp_kick_all_cpus();
dcache_disable(); /* flush cache before swtiching to EL2 */
dcache_disable(); /* flush cache before switching to EL2 */
}
}
#endif
@@ -258,15 +260,10 @@ static void switch_to_el1(void)
static void boot_jump_linux(struct bootm_headers *images, int flag)
{
#ifdef CONFIG_ARM64
void (*kernel_entry)(void *fdt_addr, void *res0, void *res1,
void *res2);
int fake = (flag & BOOTM_STATE_OS_FAKE_GO);
kernel_entry = (void (*)(void *fdt_addr, void *res0, void *res1,
void *res2))images->ep;
debug("## Transferring control to Linux (at address %lx)...\n",
(ulong) kernel_entry);
(ulong)images->ep);
bootstage_mark(BOOTSTAGE_ID_RUN_OS);
bootm_final(fake ? BOOTM_FINAL_FAKE : 0);
@@ -349,20 +346,24 @@ int do_bootm_linux(int flag, struct bootm_info *bmi)
{
struct bootm_headers *images = bmi->images;
log_debug("boot linux flag %x\n", flag);
/* No need for those on ARM */
if (flag & BOOTM_STATE_OS_BD_T || flag & BOOTM_STATE_OS_CMDLINE)
return -1;
if (flag & BOOTM_STATE_OS_PREP) {
log_debug("linux prep\n");
boot_prep_linux(images);
return 0;
}
if (flag & (BOOTM_STATE_OS_GO | BOOTM_STATE_OS_FAKE_GO)) {
log_debug("go/fake\n");
boot_jump_linux(images, flag);
return 0;
}
log_debug("cont\n");
boot_prep_linux(images);
boot_jump_linux(images, flag);
return 0;

View File

@@ -30,6 +30,10 @@ int board_exit_boot_services(void *ctx, struct event *evt)
uint key;
int ret;
if (evt->data.bootm_final.flags & BOOTM_FINAL_FAKE) {
printf("Not exiting EFI (fake go)\n");
return 0;
}
printf("Exiting EFI\n");
ret = efi_get_mmap(&desc, &size, &key, &desc_size, &version);
if (ret) {

View File

@@ -773,7 +773,8 @@ static int bootm_load_os(struct bootm_info *bmi, int boot_progress)
ulong decomp_len;
int err;
log_debug("load_os type '%s' comp '%s'\n",
log_debug("load_os type '%s' os '%s' comp '%s'\n",
genimg_get_type_short_name(os.type),
genimg_get_os_short_name(os.type),
genimg_get_comp_short_name(os.comp));
/*

View File

@@ -17,6 +17,7 @@ __weak void board_quiesce_devices(void)
void bootm_final(enum bootm_final_t flags)
{
struct event_bootm_final final;
int ret;
printf("\nStarting kernel ...%s\n\n", flags & BOOTM_FINAL_FAKE ?
@@ -43,15 +44,17 @@ void bootm_final(enum bootm_final_t flags)
*/
dm_remove_devices_active();
ret = event_notify_null(EVT_BOOTM_FINAL);
final.flags = flags;
ret = event_notify(EVT_BOOTM_FINAL, &final, sizeof(final));
if (ret) {
printf("Event handler failed to finalise (err %dE\n",
ret);
return;
}
if (!(flags & BOOTM_FINAL_FAKE)) {
bootm_disable_interrupts();
bootm_disable_interrupts();
if (!(flags & BOOTM_FINAL_NO_CLEANUP))
cleanup_before_linux();
if (!(flags & BOOTM_FINAL_NO_CLEANUP))
cleanup_before_linux();
}
}

View File

@@ -6,6 +6,8 @@
* Stephen Warren <swarren@wwwdotorg.org>
*/
#define LOG_CATEGORY LOGC_BOOT
#include <dm.h>
#include <fdt_support.h>
#include <asm/global_data.h>
@@ -48,6 +50,8 @@ static int fdt_simplefb_configure_node(void *blob, int off)
ysize = uc_priv->ysize;
bpix = uc_priv->bpix;
fb_base = plat->base;
log_debug("simplefb: fb %lx x %d y %d bpix %x\n", fb_base,
xsize, ysize, bpix);
}
switch (bpix) {

View File

@@ -129,7 +129,8 @@ config CMD_ACPI
want to make hardware changes without the OS needing to be adjusted.
config CMD_ADDR_FIND
bool "addr_find"
bool "addr_find"
default y if EFI_APP
help
This command searches for an unused region of address space
sufficiently large to hold a file. If successful, it sets the

View File

@@ -16,19 +16,17 @@ DECLARE_GLOBAL_DATA_PTR;
int do_addr_find(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
{
struct lmb_region *mem, *reserved;
const char *filename;
struct lmb lmb;
loff_t size;
ulong addr;
int ret;
int i, j;
if (!gd->fdt_blob) {
log_err("No FDT setup\n");
return CMD_RET_FAILURE;
}
if (fs_set_blk_dev(argv[1], argc >= 3 ? argv[2] : NULL, FS_TYPE_FAT)) {
if (fs_set_blk_dev(argv[1], argc >= 3 ? argv[2] : NULL, FS_TYPE_ANY)) {
log_err("Can't set block device\n");
return CMD_RET_FAILURE;
}
@@ -49,32 +47,20 @@ int do_addr_find(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
return CMD_RET_FAILURE;
}
lmb_init_and_reserve(&lmb, gd->bd, (void *)gd->fdt_blob);
mem = &lmb.memory;
reserved = &lmb.reserved;
for (i = 0; i < mem->cnt; i++) {
unsigned long long start, end;
start = mem->region[i].base;
end = mem->region[i].base + mem->region[i].size - 1;
if ((start + size) > end)
continue;
for (j = 0; j < reserved->cnt; j++) {
if ((reserved->region[j].base + reserved->region[j].size) < start)
continue;
if ((start + size) > reserved->region[j].base)
start = reserved->region[j].base + reserved->region[j].size;
}
if ((start + size) <= end) {
env_set_hex("loadaddr", start);
debug("Set loadaddr to 0x%llx\n", start);
return CMD_RET_SUCCESS;
}
addr = lmb_alloc(size, SZ_1M);
if (!addr) {
log_err("Failed to find enough RAM for 0x%llx bytes\n", size);
return CMD_RET_FAILURE;
}
log_err("Failed to find enough RAM for 0x%llx bytes\n", size);
return CMD_RET_FAILURE;
if (env_set_hex("loadaddr", addr)) {
log_err("Could not set loadaddr\n");
return CMD_RET_FAILURE;
}
log_debug("Set loadaddr to %lx\n", addr);
return CMD_RET_SUCCESS;
}
U_BOOT_CMD(

View File

@@ -19,9 +19,9 @@ static void print_region(const char *name, ulong base, ulong size, ulong *uptop)
{
ulong end = base + size;
printf("%-12s %8lx %8lx %8lx", name, base, size, end);
printf("%-12s %10lx %10lx %10lx", name, base, size, end);
if (*uptop)
printf(" %8lx", *uptop - end);
printf(" %10lx", *uptop - end);
putc('\n');
*uptop = base;
}
@@ -58,9 +58,10 @@ static int do_meminfo(struct cmd_tbl *cmdtp, int flag, int argc,
if (!IS_ENABLED(CONFIG_CMD_MEMINFO_MAP))
return 0;
printf("\n%-12s %8s %8s %8s %8s\n", "Region", "Base", "Size", "End",
printf("\n%-12s %10s %10s %10s %10s\n", "Region", "|| Base",
"|| Size", "|| End",
"Gap");
printf("------------------------------------------------\n");
printf("--------------------------------------------------------\n");
upto = 0;
if (IS_ENABLED(CONFIG_VIDEO))
print_region("video", gd_video_bottom(),

View File

@@ -15,18 +15,21 @@ CONFIG_FIT=y
CONFIG_BOOTSTD_FULL=y
CONFIG_SHOW_BOOT_PROGRESS=y
CONFIG_OF_SYSTEM_SETUP=y
CONFIG_FDT_SIMPLEFB=y
CONFIG_USE_BOOTARGS=y
CONFIG_BOOTCOMMAND="bootflow scan -lbp"
CONFIG_SYS_PBSIZE=532
CONFIG_SYS_CONSOLE_INFO_QUIET=y
CONFIG_LOG=y
CONFIG_CYCLIC_MAX_CPU_TIME_US=15000
CONFIG_DISPLAY_BOARDINFO_LATE=y
CONFIG_CYCLIC_MAX_CPU_TIME_US=50000
CONFIG_BOARD_EARLY_INIT_R=y
CONFIG_CMD_BOOTZ=y
CONFIG_CMD_MEMINFO=y
CONFIG_CMD_MEMINFO_MAP=y
CONFIG_CMD_DM=y
CONFIG_CMD_LSBLK=y
CONFIG_CMD_CAT=y
CONFIG_CMD_CACHE=y
CONFIG_CMD_TIME=y
CONFIG_CMD_EXT4_WRITE=y

View File

@@ -7,6 +7,7 @@
#ifndef _BOOTM_H
#define _BOOTM_H
#include <event_decl.h>
#include <image.h>
struct boot_params;
@@ -16,18 +17,6 @@ struct cmd_tbl;
#define BOOTM_ERR_OVERLAP (-2)
#define BOOTM_ERR_UNIMPLEMENTED (-3)
/**
* enum bootm_final_t - flags to control bootm_final()
*
* @BOOTM_FINAL_FAKE: true to do everything except actually boot; it then
* returns to the caller
* @BOOTM_FINAL_NO_CLEANUP: true to skip calling cleanup_before_linux()
*/
enum bootm_final_t {
BOOTM_FINAL_FAKE = BIT(0),
BOOTM_FINAL_NO_CLEANUP = BIT(1),
};
/**
* struct bootm_info() - information used when processing images to boot
*

View File

@@ -12,6 +12,7 @@
#include <dm/ofnode_decl.h>
#include <linux/types.h>
#include <event_decl.h>
/**
* enum event_t - Types of events supported by U-Boot
@@ -260,6 +261,15 @@ union event_data {
struct event_ft_fixup_f {
oftree tree;
} ft_fixup_f;
/**
* struct event_bootm_final - State information
*
* @flags: Flags passed to bootm_final()
*/
struct event_bootm_final {
enum bootm_final_t flags;
} bootm_final;
};
/**
@@ -402,6 +412,7 @@ void event_show_spy_list(void);
*/
const char *event_type_name(enum event_t type);
#if CONFIG_IS_ENABLED(EVENT)
/**
* event_notify() - notify spies about an event
*
@@ -416,7 +427,6 @@ const char *event_type_name(enum event_t type);
*/
int event_notify(enum event_t type, void *data, int size);
#if CONFIG_IS_ENABLED(EVENT)
/**
* event_notify_null() - notify spies about an event
*
@@ -431,6 +441,11 @@ static inline int event_notify_null(enum event_t type)
{
return 0;
}
static inline int event_notify(enum event_t type, void *data, int size)
{
return 0;
}
#endif
#if CONFIG_IS_ENABLED(EVENT_DYNAMIC)

27
include/event_decl.h Normal file
View File

@@ -0,0 +1,27 @@
/* SPDX-License-Identifier: GPL-2.0+ */
/*
* Declarations needed by events
*
* Copyright 2025 Simon Glass <sjg@chromium.org>
*/
#ifndef __event_decl_h
#define __event_decl_h
#include <linux/bitops.h>
/**
* enum bootm_final_t - flags to control bootm_final()
*
* Note that this is defined in event.h since it is used by events
*
* @BOOTM_FINAL_FAKE: true to do everything except actually boot; it then
* returns to the caller
* @BOOTM_FINAL_NO_CLEANUP: true to skip calling cleanup_before_linux()
*/
enum bootm_final_t {
BOOTM_FINAL_FAKE = BIT(0),
BOOTM_FINAL_NO_CLEANUP = BIT(1),
};
#endif

View File

@@ -1168,7 +1168,7 @@ config SPL_OID_REGISTRY
config SMBIOS
bool "SMBIOS support"
depends on X86 || EFI_LOADER
depends on X86 || EFI_LOADER || EFI_APP
default y
select LAST_STAGE_INIT
imply CMD_SMBIOS if X86
@@ -1183,6 +1183,7 @@ config SMBIOS
config SMBIOS_PARSER
bool "SMBIOS parser"
default y if EFI_APP
help
A simple parser for SMBIOS data.

View File

@@ -8,6 +8,8 @@
* This file implements U-Boot running as an EFI application.
*/
#define LOG_CATEGORY LOGC_EFI
#include <cpu_func.h>
#include <debug_uart.h>
#include <dm.h>
@@ -15,6 +17,7 @@
#include <efi_api.h>
#include <efi_stub.h>
#include <errno.h>
#include <fdt_simplefb.h>
#include <image.h>
#include <init.h>
#include <malloc.h>
@@ -92,11 +95,6 @@ static efi_status_t setup_memory(struct efi_priv *priv)
efi_status_t ret;
int pages;
/*
* Use global_data_ptr instead of gd since it is an assignment. There
* are very few assignments to global_data in U-Boot and this makes
* it easier to find them.
*/
ptr = efi_malloc(priv, sizeof(*ptr), &ret);
if (!ptr)
return ret;
@@ -111,12 +109,17 @@ static efi_status_t setup_memory(struct efi_priv *priv)
pages = CONFIG_EFI_RAM_SIZE >> 12;
/*
* Don't allocate any memory above 4GB. U-Boot is a 32-bit application
* so we want it to load below 4GB.
* Try not to allocate any memory above 4GB, just for ease of looking at
* addresses.
*/
addr = 1ULL << 32;
ret = boot->allocate_pages(EFI_ALLOCATE_MAX_ADDRESS,
priv->image_data_type, pages, &addr);
if (ret) {
log_info("(any address) ");
ret = boot->allocate_pages(EFI_ALLOCATE_ANY_PAGES,
priv->image_data_type, pages, &addr);
}
if (ret) {
log_info("(using pool %lx) ", ret);
priv->ram_base = (ulong)efi_malloc(priv, CONFIG_EFI_RAM_SIZE,
@@ -128,6 +131,7 @@ static efi_status_t setup_memory(struct efi_priv *priv)
log_info("(using allocated RAM address %lx) ", (ulong)addr);
priv->ram_base = addr;
}
gd->ram_base = addr;
gd->ram_size = pages << 12;
return 0;
@@ -148,7 +152,8 @@ static void free_memory(struct efi_priv *priv)
if (priv->use_pool_for_malloc)
efi_free(priv, (void *)priv->ram_base);
else
boot->free_pages(priv->ram_base, gd->ram_size >> 12);
boot->free_pages(priv->ram_base,
gd->ram_size >> EFI_PAGE_SHIFT);
efi_free(priv, (void *)gd->malloc_base);
efi_free(priv, (void *)gd);
@@ -158,6 +163,7 @@ static void free_memory(struct efi_priv *priv)
static void scan_tables(struct efi_system_table *sys_table)
{
efi_guid_t acpi = EFI_ACPI_TABLE_GUID;
efi_guid_t smbios = SMBIOS3_TABLE_GUID;
uint i;
for (i = 0; i < sys_table->nr_tables; i++) {
@@ -165,6 +171,8 @@ static void scan_tables(struct efi_system_table *sys_table)
if (!memcmp(&tab->guid, &acpi, sizeof(efi_guid_t)))
gd_set_acpi_start(map_to_sysmem(tab->table));
else if (!memcmp(&tab->guid, &smbios, sizeof(efi_guid_t)))
gd->arch.smbios_start = map_to_sysmem(tab->table);
}
}
@@ -216,6 +224,7 @@ efi_status_t EFIAPI efi_main(efi_handle_t image,
printf("starting\n");
board_init_f(GD_FLG_SKIP_RELOC);
gd = gd->new_gd;
board_init_r(NULL, 0);
free_memory(priv);
@@ -226,8 +235,8 @@ static void efi_exit(void)
{
struct efi_priv *priv = efi_get_priv();
free_memory(priv);
printf("U-Boot EFI exiting\n");
free_memory(priv);
priv->boot->exit(priv->parent_image, EFI_SUCCESS, 0, NULL);
}
@@ -301,7 +310,9 @@ int ft_system_setup(void *fdt, struct bd_info *bd)
if (ret)
return log_msg_ret("erm", ret);
efi_dump_mem_table(map, size, desc_size, false);
if (_DEBUG)
efi_dump_mem_table(map, size, desc_size, false);
ram_start = -1ULL;
ram_end = -1ULL;
end = (void *)map + size;
@@ -329,6 +340,12 @@ int ft_system_setup(void *fdt, struct bd_info *bd)
return ret;
}
ret = fdt_simplefb_add_node(fdt);
if (ret) {
printf("failed to set up simplefb\n");
return ret;
}
free(map);
return 0;

View File

@@ -128,6 +128,7 @@ static int setup_block(void)
struct efi_device_path_to_text_protocol *text;
struct efi_device_path *path;
struct efi_block_io *blkio;
int num_disks, num_parts;
efi_uintn_t num_handles;
efi_handle_t *handle;
int ret, i;
@@ -150,7 +151,7 @@ static int setup_block(void)
if (ret)
return log_msg_ret("text", -ENOTSUPP);
for (i = 0; i < num_handles; i++) {
for (num_disks = 0, num_parts = 0, i = 0; i < num_handles; i++) {
struct udevice *dev;
const u16 *name;
bool is_part;
@@ -174,6 +175,7 @@ static int setup_block(void)
is_part = devpath_is_partition(path);
if (!is_part) {
num_disks++;
len = util->get_device_path_size(path);
ret = efi_bind_block(handle[i], blkio, path, len, &dev);
if (ret) {
@@ -183,15 +185,17 @@ static int setup_block(void)
}
} else {
dev = NULL;
num_parts++;
}
/*
* Show the device name if we created one. Otherwise indicate
* that it is a partition.
*/
printf("%2d: %-12s %ls\n", i, dev ? dev->name : "<partition>",
name);
log_debug("%2d: %-12s %ls\n", i,
dev ? dev->name : "<partition>", name);
}
log_info("EFI: disks %d, partitions %d\n", num_disks, num_parts);
boot->free_pool(handle);
return 0;

View File

@@ -17,7 +17,7 @@ static int cmd_test_meminfo(struct unit_test_state *uts)
ut_assert_nextline("DRAM: 256 MiB");
ut_assert_nextline_empty();
ut_assert_nextline("Region Base Size End Gap");
ut_assert_nextline("Region || Base || Size || End Gap");
ut_assert_nextlinen("-");
/* For now we don't worry about checking the values */