summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Rini <[email protected]>2026-05-18 09:12:11 -0600
committerTom Rini <[email protected]>2026-05-18 09:12:11 -0600
commit38dbe637c9dfcadbd1bc201bfbb27f96b2ad525a (patch)
treec71ada65af872f9f110e410670611470359c7b3b
parent78319e074d0351e32edf70207c1aca500fe34201 (diff)
parent5824ed13bcdf4726c13ef76e8186bc145d8e43f9 (diff)
Merge tag 'efi-2026-07-rc3' of https://source.denx.de/u-boot/custodians/u-boot-efiHEADmaster
Pull request efi-2026-07-rc3 CI: https://source.denx.de/u-boot/custodians/u-boot-efi/-/pipelines/30152 Documentation: * For reset command describe when the -edl option is available and fix a typo. UEFI: * If efi_allocate_pages() is with EFI_ALLOCATE_ADDRESS fails, return EFI_NOT_FOUND. * Fix HII keyboard layout pointer computation and extend HII keyboard layout tests. Others: * In reset command online help show -edl option only when enabled.
-rw-r--r--cmd/boot.c3
-rw-r--r--doc/usage/cmd/reset.rst12
-rw-r--r--lib/efi_loader/efi_hii.c3
-rw-r--r--lib/efi_loader/efi_memory.c4
-rw-r--r--lib/efi_selftest/efi_selftest_hii.c67
-rw-r--r--lib/efi_selftest/efi_selftest_hii_data.c12
6 files changed, 66 insertions, 35 deletions
diff --git a/cmd/boot.c b/cmd/boot.c
index d80f9d8c05d..29cdf4a9a81 100644
--- a/cmd/boot.c
+++ b/cmd/boot.c
@@ -60,9 +60,12 @@ U_BOOT_CMD(
reset, 2, 0, do_reset,
"Perform RESET of the CPU",
"- cold boot without level specifier\n"
+#if IS_ENABLED(CONFIG_SYSRESET_CMD_RESET_ARGS)
+// All options handled by sysreset drivers via their sysreset_ops.request_arg callback
#ifdef CONFIG_SYSRESET_QCOM_PSCI
"reset -edl - Boot to Emergency DownLoad mode\n"
#endif
+#endif
"reset -w - warm reset if implemented"
);
diff --git a/doc/usage/cmd/reset.rst b/doc/usage/cmd/reset.rst
index 366b17eea16..79bc8b9deca 100644
--- a/doc/usage/cmd/reset.rst
+++ b/doc/usage/cmd/reset.rst
@@ -11,7 +11,9 @@ Synopsis
::
- reset [-w]
+ reset
+ reset -w
+ reset -edl
Description
-----------
@@ -20,10 +22,14 @@ Perform reset of the CPU. By default does COLD reset, which resets CPU,
DDR and peripherals, on some boards also resets external PMIC.
-w
- Do warm WARM, reset CPU but keep peripheral/DDR/PMIC active.
+ Do WARM reset: reset CPU but keep peripheral/DDR/PMIC active.
+
+All other options require CONFIG_SYSRESET_CMD_RESET_ARGS=y.
-edl
- Boot to Emergency DownLoad mode on supported Qualcomm platforms.
+ Boot to Emergency DownLoad mode on supported Qualcomm platforms. Unsupported
+ platforms will print an error message but the command will successfully
+ return (having done nothing). Requires CONFIG_SYSRESET_QCOM_PSCI=y.
Return value
------------
diff --git a/lib/efi_loader/efi_hii.c b/lib/efi_loader/efi_hii.c
index 330d7c5830b..7bf51ad43d1 100644
--- a/lib/efi_loader/efi_hii.c
+++ b/lib/efi_loader/efi_hii.c
@@ -324,7 +324,8 @@ add_keyboard_package(struct efi_hii_packagelist *hii,
list_add_tail(&layout_data->link_sys,
&efi_keyboard_layout_list);
- layout += layout_length;
+ layout = (struct efi_hii_keyboard_layout *)
+ ((uintptr_t)layout + layout_length);
}
list_add_tail(&package_data->link, &hii->keyboard_packages);
diff --git a/lib/efi_loader/efi_memory.c b/lib/efi_loader/efi_memory.c
index 046a2bb4641..2feb29f0a2c 100644
--- a/lib/efi_loader/efi_memory.c
+++ b/lib/efi_loader/efi_memory.c
@@ -495,7 +495,9 @@ efi_status_t efi_allocate_pages(enum efi_allocate_type type,
/* Map would overlap, bail out */
lmb_free(addr, (u64)pages << EFI_PAGE_SHIFT, flags);
unmap_sysmem((void *)(uintptr_t)efi_addr);
- return EFI_OUT_OF_RESOURCES;
+ if (type == EFI_ALLOCATE_ADDRESS)
+ return EFI_NOT_FOUND;
+ return EFI_OUT_OF_RESOURCES;
}
*memory = efi_addr;
diff --git a/lib/efi_selftest/efi_selftest_hii.c b/lib/efi_selftest/efi_selftest_hii.c
index 228dc296950..fdbb08fb417 100644
--- a/lib/efi_selftest/efi_selftest_hii.c
+++ b/lib/efi_selftest/efi_selftest_hii.c
@@ -452,8 +452,7 @@ out:
* test_hii_database_get_keyboard_layout() - test retrieval of keyboard layout
*
* This test adds two package lists, each of which has two keyboard layouts
- * and then tries to get a handle to keyboard layout with a specific guid
- * and the current one.
+ * and then tries to get a handle to every keyboard layout and the current one.
*
* @Return: status code
*/
@@ -463,7 +462,11 @@ static int test_hii_database_get_keyboard_layout(void)
struct efi_hii_keyboard_layout *kb_layout;
u16 kb_layout_size;
efi_status_t ret;
- int result = EFI_ST_FAILURE;
+ int result = EFI_ST_FAILURE, i;
+ static efi_guid_t *const kb_layout_guids[] = {
+ &kb_layout_guid11, &kb_layout_guid12,
+ &kb_layout_guid21, &kb_layout_guid22
+ };
PRINT_TESTNAME;
ret = hii_database_protocol->new_package_list(hii_database_protocol,
@@ -484,33 +487,37 @@ static int test_hii_database_get_keyboard_layout(void)
goto out;
}
- /* specific keyboard_layout(guid11) */
- kb_layout = NULL;
- kb_layout_size = 0;
- ret = hii_database_protocol->get_keyboard_layout(hii_database_protocol,
- &kb_layout_guid11, &kb_layout_size, kb_layout);
- if (ret != EFI_BUFFER_TOO_SMALL) {
- efi_st_error("get_keyboard_layout returned %u\n",
- (unsigned int)ret);
- goto out;
- }
- ret = boottime->allocate_pool(EFI_LOADER_DATA, kb_layout_size,
- (void **)&kb_layout);
- if (ret != EFI_SUCCESS) {
- efi_st_error("AllocatePool failed\n");
- goto out;
- }
- ret = hii_database_protocol->get_keyboard_layout(hii_database_protocol,
- &kb_layout_guid11, &kb_layout_size, kb_layout);
- if (ret != EFI_SUCCESS) {
- efi_st_error("get_keyboard_layout returned %u\n",
- (unsigned int)ret);
- goto out;
- }
- ret = boottime->free_pool(kb_layout);
- if (ret != EFI_SUCCESS) {
- efi_st_error("FreePool failed\n");
- goto out;
+ /* Verify all keyboard layouts */
+ for (i = 0; i < ARRAY_SIZE(kb_layout_guids); i++) {
+ efi_guid_t *kb_layout_guid = kb_layout_guids[i];
+
+ kb_layout = NULL;
+ kb_layout_size = 0;
+ ret = hii_database_protocol->get_keyboard_layout(hii_database_protocol,
+ kb_layout_guid, &kb_layout_size, kb_layout);
+ if (ret != EFI_BUFFER_TOO_SMALL) {
+ efi_st_error("get_keyboard_layout returned %u\n",
+ (unsigned int)ret);
+ goto out;
+ }
+ ret = boottime->allocate_pool(EFI_LOADER_DATA, kb_layout_size,
+ (void **)&kb_layout);
+ if (ret != EFI_SUCCESS) {
+ efi_st_error("AllocatePool failed\n");
+ goto out;
+ }
+ ret = hii_database_protocol->get_keyboard_layout(hii_database_protocol,
+ kb_layout_guid, &kb_layout_size, kb_layout);
+ if (ret != EFI_SUCCESS) {
+ efi_st_error("get_keyboard_layout returned %u\n",
+ (unsigned int)ret);
+ goto out;
+ }
+ ret = boottime->free_pool(kb_layout);
+ if (ret != EFI_SUCCESS) {
+ efi_st_error("FreePool failed\n");
+ goto out;
+ }
}
/* current */
diff --git a/lib/efi_selftest/efi_selftest_hii_data.c b/lib/efi_selftest/efi_selftest_hii_data.c
index 5fc890112b4..2d29bb045d3 100644
--- a/lib/efi_selftest/efi_selftest_hii_data.c
+++ b/lib/efi_selftest/efi_selftest_hii_data.c
@@ -428,6 +428,18 @@ static efi_guid_t kb_layout_guid11 =
EFI_GUID(0x8d40e495, 0xe2aa, 0x4c6f,
0x89, 0x70, 0x68, 0x85, 0x09, 0xee, 0xc7, 0xd2);
+static efi_guid_t kb_layout_guid12 =
+ EFI_GUID(0x2ae60b3e, 0xb9d6, 0x49d8,
+ 0x9a, 0x16, 0xc2, 0x48, 0xf1, 0xeb, 0xa8, 0xdb);
+
+static efi_guid_t kb_layout_guid21 =
+ EFI_GUID(0xe0f56a1f, 0xdf6b, 0x4a7e,
+ 0xa3, 0x9a, 0xe7, 0xa5, 0x19, 0x15, 0x45, 0xd6);
+
+static efi_guid_t kb_layout_guid22 =
+ EFI_GUID(0x47be6ac9, 0x54cc, 0x46f9,
+ 0xa2, 0x62, 0xd5, 0x3b, 0x25, 0x6a, 0x0c, 0x34);
+
static efi_guid_t package_guid =
EFI_GUID(0x0387c95a, 0xd703, 0x2346,
0xb2, 0xab, 0xd0, 0xc7, 0xdd, 0x90, 0x44, 0xf8);