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.
This commit is contained in:
Tom Rini
2026-05-18 09:12:11 -06:00
6 changed files with 66 additions and 35 deletions

View File

@@ -60,8 +60,11 @@ 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"
);

View File

@@ -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
------------

View File

@@ -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);

View File

@@ -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;

View File

@@ -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 */

View File

@@ -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);