Pull request for UEFI sub-system for efi-2020-10-rc5 (2)

The following bugs are fixed:
 
 * incorrect online help for setenv and env
 * description of function efi_mem_carve_out()
 * replace printf() by log_err() in stm32mp1_rng driver
 
 A unit test is provided to check that the boot hart id is provided in the
 RISC-V device-tree.
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEEbcT5xx8ppvoGt20zxIHbvCwFGsQFAl9lGSsACgkQxIHbvCwF
 GsRXKQ//b4cX6tfXy5PFbNf59bTCy4TdCR2/7c0vjMwNbSpemjVDqms8iOrtwaFB
 /dPYC9sJoXXnoY8yq/TZpbamT9rY8f42ZlB+OlWdDXH5v5EJJjw/blaZRMS8z46/
 NYjHfKZC5LafsfWOzcA403g4Bk2rlJEvAcruz15aLa3hACZ4T7s4C1zBZW87t2KD
 57AGWagcyfGbd1oBzJWlSJSpjff8g4yC9XAn4yNtyCKTn5vy0FSXWp6M3wGfK+rG
 KISHmdUsm92cU3z41NIXkaWNfhpkI1krpFyblJEUnjpErvBxxCUecCmd65NNYk4P
 Xus1D4tS6vQGZc5Xmq+RskyPl6o2qtpowno/UpcpQUkdCucfldTsSYWufR7txebf
 H3KAQC/TMJ7WKlSMz3xqVIhRvtWxXazIh4os07EOU2F99OdNcOFvCEUJc4kBmgZk
 TwDv1Z/Iz2stMdRNCFCJpZKVVuwj7qjZ+R83FzUBC8ueWMqERLAhdMwes9CK3N3b
 vz4fBBNfml3UludIaCbNcQk2d8kTDZLWokRqRjE3j3McMQnSU1ffipRWUy+4qJ9q
 6Py82OpUT3g1x5S4lD/Z5jdxS2kYqpZAOHfQpcWs1RMmF8NtW0MOoWXZvYOkxOX7
 DjBysIkls4jB/Wn9z+oiqHkVV4yCh0ZrGhNFSzDgWSF4jbAqnlc=
 =vhkz
 -----END PGP SIGNATURE-----

Merge tag 'efi-2020-10-rc5-2' of https://gitlab.denx.de/u-boot/custodians/u-boot-efi

Pull request for UEFI sub-system for efi-2020-10-rc5 (2)

The following bugs are fixed:

* incorrect online help for setenv and env
* description of function efi_mem_carve_out()
* replace printf() by log_err() in stm32mp1_rng driver

A unit test is provided to check that the boot hart id is provided in the
RISC-V device-tree.
This commit is contained in:
Tom Rini 2020-09-19 08:35:20 -04:00
commit 400f84c5ba
4 changed files with 60 additions and 18 deletions

View file

@ -1477,7 +1477,7 @@ static char env_help_text[] =
"env select [target] - select environment target\n" "env select [target] - select environment target\n"
#endif #endif
#if defined(CONFIG_CMD_NVEDIT_EFI) #if defined(CONFIG_CMD_NVEDIT_EFI)
"env set -e [-nv][-bs][-rt][-at][-a][-i addr,size][-v] name [arg ...]\n" "env set -e [-nv][-bs][-rt][-at][-a][-i addr:size][-v] name [arg ...]\n"
" - set UEFI variable; unset if '-i' or 'arg' not specified\n" " - set UEFI variable; unset if '-i' or 'arg' not specified\n"
#endif #endif
"env set [-f] name [arg ...]\n"; "env set [-f] name [arg ...]\n";
@ -1541,7 +1541,7 @@ U_BOOT_CMD_COMPLETE(
"set environment variables", "set environment variables",
#if defined(CONFIG_CMD_NVEDIT_EFI) #if defined(CONFIG_CMD_NVEDIT_EFI)
"-e [-guid guid][-nv][-bs][-rt][-at][-a][-v]\n" "-e [-guid guid][-nv][-bs][-rt][-at][-a][-v]\n"
" [-i addr,size name], or [name [value ...]]\n" " [-i addr:size name], or [name [value ...]]\n"
" - set UEFI variable 'name' to 'value' ...'\n" " - set UEFI variable 'name' to 'value' ...'\n"
" \"-guid\": GUID xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n" " \"-guid\": GUID xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\n"
" \"-nv\": set non-volatile attribute\n" " \"-nv\": set non-volatile attribute\n"

View file

@ -3,6 +3,8 @@
* Copyright (c) 2019, Linaro Limited * Copyright (c) 2019, Linaro Limited
*/ */
#define LOG_CATEGORY UCLASS_RNG
#include <common.h> #include <common.h>
#include <clk.h> #include <clk.h>
#include <dm.h> #include <dm.h>
@ -53,7 +55,7 @@ static int stm32_rng_read(struct udevice *dev, void *data, size_t len)
for (i = 0; i < 12; i++) for (i = 0; i < 12; i++)
readl(pdata->base + RNG_DR); readl(pdata->base + RNG_DR);
if (readl(pdata->base + RNG_SR) & RNG_SR_SEIS) { if (readl(pdata->base + RNG_SR) & RNG_SR_SEIS) {
printf("RNG Noise"); log_err("RNG Noise");
return -EIO; return -EIO;
} }
/* start again */ /* start again */

View file

@ -235,7 +235,7 @@ static s64 efi_mem_carve_out(struct efi_mem_list *map,
* @start: start address, must be a multiple of EFI_PAGE_SIZE * @start: start address, must be a multiple of EFI_PAGE_SIZE
* @pages: number of pages to add * @pages: number of pages to add
* @memory_type: type of memory added * @memory_type: type of memory added
* @overlap_only_ram: the memory area must overlap existing * @overlap_only_ram: region may only overlap RAM
* Return: status code * Return: status code
*/ */
static efi_status_t efi_add_memory_map_pg(u64 start, u64 pages, static efi_status_t efi_add_memory_map_pg(u64 start, u64 pages,

View file

@ -42,35 +42,48 @@ static uint32_t f2h(fdt32_t val)
return *(uint32_t *)buf; return *(uint32_t *)buf;
} }
/* /**
* Return the value of a property of the FDT root node. * get_property() - return value of a property of an FDT node
* *
* @name name of the property * A property of the root node or one of its direct children can be
* retrieved.
*
* @property name of the property
* @node name of the node or NULL for root node
* @return value of the property * @return value of the property
*/ */
static char *get_property(const u16 *property) static char *get_property(const u16 *property, const u16 *node)
{ {
struct fdt_header *header = (struct fdt_header *)fdt; struct fdt_header *header = (struct fdt_header *)fdt;
const fdt32_t *end;
const fdt32_t *pos; const fdt32_t *pos;
const char *strings; const char *strings;
size_t level = 0;
const char *nodelabel = NULL;
if (!header) if (!header) {
efi_st_error("Missing device tree\n");
return NULL; return NULL;
}
if (f2h(header->magic) != FDT_MAGIC) { if (f2h(header->magic) != FDT_MAGIC) {
printf("Wrong magic\n"); efi_st_error("Wrong device tree magic\n");
return NULL; return NULL;
} }
pos = (fdt32_t *)(fdt + f2h(header->off_dt_struct)); pos = (fdt32_t *)(fdt + f2h(header->off_dt_struct));
end = &pos[f2h(header->totalsize) >> 2];
strings = fdt + f2h(header->off_dt_strings); strings = fdt + f2h(header->off_dt_strings);
for (;;) { for (; pos < end;) {
switch (f2h(pos[0])) { switch (f2h(pos[0])) {
case FDT_BEGIN_NODE: { case FDT_BEGIN_NODE: {
char *c = (char *)&pos[1]; const char *c = (char *)&pos[1];
size_t i; size_t i;
if (level == 1)
nodelabel = c;
++level;
for (i = 0; c[i]; ++i) for (i = 0; c[i]; ++i)
; ;
pos = &pos[2 + (i >> 2)]; pos = &pos[2 + (i >> 2)];
@ -82,7 +95,10 @@ static char *get_property(const u16 *property)
efi_status_t ret; efi_status_t ret;
/* Check if this is the property to be returned */ /* Check if this is the property to be returned */
if (!efi_st_strcmp_16_8(property, label)) { if (!efi_st_strcmp_16_8(property, label) &&
((level == 1 && !node) ||
(level == 2 && node &&
!efi_st_strcmp_16_8(node, nodelabel)))) {
char *str; char *str;
efi_uintn_t len = f2h(prop->len); efi_uintn_t len = f2h(prop->len);
@ -96,7 +112,7 @@ static char *get_property(const u16 *property)
EFI_LOADER_DATA, len + 1, EFI_LOADER_DATA, len + 1,
(void **)&str); (void **)&str);
if (ret != EFI_SUCCESS) { if (ret != EFI_SUCCESS) {
efi_st_printf("AllocatePool failed\n"); efi_st_error("AllocatePool failed\n");
return NULL; return NULL;
} }
boottime->copy_mem(str, &pos[3], len); boottime->copy_mem(str, &pos[3], len);
@ -109,12 +125,21 @@ static char *get_property(const u16 *property)
break; break;
} }
case FDT_NOP: case FDT_NOP:
pos = &pos[1]; ++pos;
break; break;
case FDT_END_NODE:
--level;
++pos;
break;
case FDT_END:
return NULL;
default: default:
efi_st_error("Invalid device tree token\n");
return NULL; return NULL;
} }
} }
efi_st_error("Missing FDT_END token\n");
return NULL;
} }
/** /**
@ -173,7 +198,7 @@ static int execute(void)
char *str; char *str;
efi_status_t ret; efi_status_t ret;
str = get_property(L"compatible"); str = get_property(L"compatible", NULL);
if (str) { if (str) {
efi_st_printf("compatible: %s\n", str); efi_st_printf("compatible: %s\n", str);
ret = boottime->free_pool(str); ret = boottime->free_pool(str);
@ -182,10 +207,10 @@ static int execute(void)
return EFI_ST_FAILURE; return EFI_ST_FAILURE;
} }
} else { } else {
efi_st_printf("Missing property 'compatible'\n"); efi_st_error("Missing property 'compatible'\n");
return EFI_ST_FAILURE; return EFI_ST_FAILURE;
} }
str = get_property(L"serial-number"); str = get_property(L"serial-number", NULL);
if (str) { if (str) {
efi_st_printf("serial-number: %s\n", str); efi_st_printf("serial-number: %s\n", str);
ret = boottime->free_pool(str); ret = boottime->free_pool(str);
@ -194,6 +219,21 @@ static int execute(void)
return EFI_ST_FAILURE; return EFI_ST_FAILURE;
} }
} }
str = get_property(L"boot-hartid", L"chosen");
if (IS_ENABLED(CONFIG_RISCV)) {
if (str) {
efi_st_printf("boot-hartid: %u\n",
f2h(*(fdt32_t *)str));
ret = boottime->free_pool(str);
if (ret != EFI_SUCCESS) {
efi_st_error("FreePool failed\n");
return EFI_ST_FAILURE;
}
} else {
efi_st_error("boot-hartid not found\n");
return EFI_ST_FAILURE;
}
}
return EFI_ST_SUCCESS; return EFI_ST_SUCCESS;
} }