Skip to content

Commit

Permalink
Merge tag 'efi-2022-07-rc5-2' of https://source.denx.de/u-boot/custod…
Browse files Browse the repository at this point in the history
…ians/u-boot-efi

Pull request for efi-2020-07-rc5-2

Documentation:

* man-pages for booti and printenv

UEFI

* correct return value for printenv -e command
* initialize console size late
  • Loading branch information
trini committed Jun 19, 2022
2 parents aad77c2 + 68edbed commit 700cff2
Show file tree
Hide file tree
Showing 9 changed files with 183 additions and 8 deletions.
4 changes: 3 additions & 1 deletion cmd/nvedit_efi.c
Original file line number Diff line number Diff line change
Expand Up @@ -182,8 +182,10 @@ static int efi_dump_var_all(int argc, char *const argv[],
}
free(var_name16);

if (!match && argc == 1)
if (!match && argc == 1) {
printf("Error: \"%s\" not defined\n", argv[0]);
return CMD_RET_FAILURE;
}

return CMD_RET_SUCCESS;
}
Expand Down
66 changes: 66 additions & 0 deletions doc/usage/cmd/bootz.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
.. SPDX-License-Identifier: GPL-2.0+:
bootz command
=============

Synopsis
--------

::

bootz [<addr> [<initrd>[:<size>]] [<fdt>]]

Description
-----------

The bootz command is used to boot a Linux kernel in 'zImage' format.

addr
address of kernel image, defaults to the value of the environment
variable $loadaddr.

initrd
address of the initial RAM disk. Use '-' to boot a kernel with a device
tree but without an initial RAM disk.

size
size of the initial RAM disk. This parameter must be specified for raw
initial RAM disks.

fdt
address of the device tree.

Example
-------

This is the boot log of an OrangePi PC board:

::

=> load mmc 0:2 $fdt_addr_r dtb
23093 bytes read in 7 ms (3.1 MiB/s)
=> load mmc 0:2 $kernel_addr_r vmlinuz
5079552 bytes read in 215 ms (22.5 MiB/s)
=> load mmc 0:2 $ramdisk_addr_r initrd.img
23854965 bytes read in 995 ms (22.9 MiB/s)
=> bootz $kernel_addr_r $ramdisk_addr_r:$filesize $fdt_addr_r
Kernel image @ 0x42000000 [ 0x000000 - 0x4d8200 ]
## Flattened Device Tree blob at 43000000
Booting using the fdt blob at 0x43000000
EHCI failed to shut down host controller.
Loading Ramdisk to 48940000, end 49ffff75 ... OK
Loading Device Tree to 48937000, end 4893fa34 ... OK

Starting kernel ...

Configuration
-------------

The bootz command is only available if CONFIG_CMD_BOOTZ=y.

Return value
------------

Normally this command does not return. If an error occurs, the return value $?
is set to 1 (false). If the operating system returns to U-Boot, the system is
reset.
90 changes: 90 additions & 0 deletions doc/usage/cmd/printenv.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
.. SPDX-License-Identifier: GPL-2.0+:
printenv command
================

Synopsis
--------

::

printenv [-a] [name ...]
printenv -e [-guid guid][-n] [name]

Description
-----------

The printenv command is used to print environment or UEFI variables.

\-a
Print environment variables starting with a period ('.').

\-e
Print UEFI variables. Without -e environment variables are printed.

\-guid *guid*
Specify vendor GUID *guid*. If none is specified, all UEFI variables with
the specified name are printed irrespective of their vendor GUID.

\-n
don't show hexadecimal dump of value

name
Variable name. If no name is provided, all variables are printed.
Multiple environment variable names may be specified.

Examples
--------

The following examples demonstrates the effect of the *-a* flag when displaying
environment variables:

::

=> setenv .foo bar
=> printenv
arch=sandbox
baudrate=115200
board=sandbox
...
stdout=serial,vidconsole

Environment size: 644/8188 bytes
=> printenv -a
.foo=bar
arch=sandbox
baudrate=115200
board=sandbox
...
stdout=serial,vidconsole

Environment size: 653/8188 bytes
=>

The next example shows the effect of the *-n* flag when displaying an UEFI
variable and how to specify a vendor GUID:

::

=> printenv -e -guid 8be4df61-93ca-11d2-aa0d-00e098032b8c PlatformLangCodes
PlatformLangCodes:
8be4df61-93ca-11d2-aa0d-00e098032b8c (EFI_GLOBAL_VARIABLE_GUID)
BS|RT|RO, DataSize = 0x6
00000000: 65 6e 2d 55 53 00 en-US.
=> printenv -e -n PlatformLangCodes
PlatformLangCodes:
8be4df61-93ca-11d2-aa0d-00e098032b8c (EFI_GLOBAL_VARIABLE_GUID)
BS|RT|RO, DataSize = 0x6
=>

Configuration
=============

UEFI variables are only supported if CONFIG_CMD_NVEDIT_EFI=y. The value of UEFI
variables can only be displayed if CONFIG_HEXDUMP=y.

Return value
------------

The return value $? is 1 (false) if a specified variable is not found.
Otherwise $? is set to 0 (true).
2 changes: 2 additions & 0 deletions doc/usage/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ Shell commands
cmd/bootmenu
cmd/bootmeth
cmd/button
cmd/bootz
cmd/cbsysinfo
cmd/conitrace
cmd/echo
Expand All @@ -48,6 +49,7 @@ Shell commands
cmd/md
cmd/mmc
cmd/pinmux
cmd/printenv
cmd/pstore
cmd/qfw
cmd/reset
Expand Down
2 changes: 2 additions & 0 deletions include/efi_loader.h
Original file line number Diff line number Diff line change
Expand Up @@ -499,6 +499,8 @@ extern struct list_head efi_register_notify_events;
int efi_init_early(void);
/* Initialize efi execution environment */
efi_status_t efi_init_obj_list(void);
/* Set up console modes */
void efi_setup_console_size(void);
/* Install device tree */
efi_status_t efi_install_fdt(void *fdt);
/* Run loaded UEFI image */
Expand Down
20 changes: 13 additions & 7 deletions lib/efi_loader/efi_console.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,16 @@
* Copyright (c) 2016 Alexander Graf
*/

#define LOG_CATEGORY LOGC_EFI

#include <common.h>
#include <charset.h>
#include <malloc.h>
#include <time.h>
#include <dm/device.h>
#include <efi_loader.h>
#include <env.h>
#include <log.h>
#include <stdio_dev.h>
#include <video_console.h>
#include <linux/delay.h>
Expand Down Expand Up @@ -58,7 +61,12 @@ const efi_guid_t efi_guid_text_output_protocol =
#define cESC '\x1b'
#define ESC "\x1b"

/* Default to mode 0 */
/*
* efi_con_mode - mode information of the Simple Text Output Protocol
*
* Use safe settings before efi_setup_console_size() is called.
* By default enable only the 80x25 mode which must always exist.
*/
static struct simple_text_output_mode efi_con_mode = {
.max_mode = 1,
.mode = 0,
Expand Down Expand Up @@ -333,13 +341,13 @@ static int __maybe_unused query_vidconsole(int *rows, int *cols)
}

/**
* query_console_size() - update the mode table.
* efi_setup_console_size() - update the mode table.
*
* By default the only mode available is 80x25. If the console has at least 50
* lines, enable mode 80x50. If we can query the console size and it is neither
* 80x25 nor 80x50, set it as an additional mode.
*/
static void query_console_size(void)
void efi_setup_console_size(void)
{
int rows = 25, cols = 80;
int ret = -ENODEV;
Expand All @@ -351,6 +359,8 @@ static void query_console_size(void)
if (ret)
return;

log_debug("Console size %dx%d\n", rows, cols);

/* Test if we can have Mode 1 */
if (cols >= 80 && rows >= 50) {
efi_cout_modes[1].present = 1;
Expand All @@ -371,7 +381,6 @@ static void query_console_size(void)
}
}


/**
* efi_cout_query_mode() - get terminal size for a text mode
*
Expand Down Expand Up @@ -1262,9 +1271,6 @@ efi_status_t efi_console_register(void)
efi_status_t r;
struct efi_device_path *dp;

/* Set up mode information */
query_console_size();

/* Install protocols on root node */
r = EFI_CALL(efi_install_multiple_protocol_interfaces
(&efi_root,
Expand Down
4 changes: 4 additions & 0 deletions lib/efi_loader/efi_setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,10 @@ efi_status_t efi_init_obj_list(void)
goto out;
}

/* Set up console modes */
efi_setup_console_size();

/* Install EFI_RNG_PROTOCOL */
if (IS_ENABLED(CONFIG_EFI_RNG_PROTOCOL)) {
ret = efi_rng_register();
if (ret != EFI_SUCCESS)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ def test_efi_capsule_fw2(
with u_boot_console.log.section('Test Case 2-a, before reboot'):
output = u_boot_console.run_command_list([
'host bind 0 %s' % disk_img,
'printenv -e PlatformLangCodes', # workaround for terminal size determination
'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi -s ""',
'efidebug boot order 1',
'env set -e -nv -bs -rt OsIndications =0x0000000000000004',
Expand Down
2 changes: 2 additions & 0 deletions test/py/tests/test_efi_capsule/test_capsule_firmware_raw.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@ def test_efi_capsule_fw2(
with u_boot_console.log.section('Test Case 2-a, before reboot'):
output = u_boot_console.run_command_list([
'host bind 0 %s' % disk_img,
'printenv -e PlatformLangCodes', # workaround for terminal size determination
'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi -s ""',
'efidebug boot order 1',
'env set -e OsIndications',
Expand Down Expand Up @@ -197,6 +198,7 @@ def test_efi_capsule_fw3(
with u_boot_console.log.section('Test Case 3-a, before reboot'):
output = u_boot_console.run_command_list([
'host bind 0 %s' % disk_img,
'printenv -e PlatformLangCodes', # workaround for terminal size determination
'efidebug boot add -b 1 TEST host 0:1 /helloworld.efi -s ""',
'efidebug boot order 1',
'env set -e -nv -bs -rt OsIndications =0x0000000000000004',
Expand Down

0 comments on commit 700cff2

Please sign in to comment.