Two fixes for the EFI subsystem coming via the TPM tree as agreed by Heinrich

The LMB patch fixes a failure in SystemReady testing. Nothing bad happens
 without the patch in the device operation, but the return values are wrong
 and SCT tests fail for MemoryAllocationServicesTest category.
 
 The second is a shielding the device against mistakes in the definition of
 struct fields needed by the capsule update mechanism. Instead of crashing,
 print a humna readable message of what's wrong.
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEgWII69YpahbL5iK5gS8AYozs+qIFAmdRUagACgkQgS8AYozs
 +qLquhAAlwztI8nUZMf5nu1XixScFlu+VtjkRHCoQb9dEhvVbVpTZWtzVhPocx2y
 4W6iZ/ICyv1UAn/rFMbqVykDzLn6cJ0zdifB75VLNonil1nnnkdvhz7nuWOe5GVE
 L//nn4Nea+glqahkUBopUqOMGPEqIw18t7Gke4lPfNow2rqHlumLcPxNzOGX5z+9
 IQg9F8is11SrFIbjY9fMw1ad94Y9x3Ae5xI3ilxCyLeY2jc7hOjd7vwnH+JH145R
 uCw/US1vvjjAUin8NcoX2oVxgQRibdzak89qZ4OM1M60DRSoatCgPLKH6TOOsXm9
 Jt3PQuA/UaeCM7BDxW9dDY81WmiiyexanDAg1iH5ZJDPME2/BJ9zFdPGStZKxEo8
 UudNl8BU6pF9jNM1fcxaqHrVcGpJSDFm6TDg9yb7JChWJeC33ENzjKx/CLVCaGnZ
 1mi9z75y9vUI3U2VVRnXxMxSzgjn4SVhEYMx2vnOTEbHvRyCe8zk6EhET/uHQqhm
 8zmeWv1ygItg/+8qn4v/GAntOYXNTxCCnyGb4OcTEKQVU2UOYDXLyVM/sdIaQKwH
 ctRi48jbV+KEAXawoq4N4N01BoaR24RWuV6AI/uGoJq8DObCLe4l05D3LeFuah22
 PchgehG+Dze/ckAHiQ24t6hDVUkEu2pfv9mJveOV2+oAUbn1Puc=
 =GonQ
 -----END PGP SIGNATURE-----

Merge tag 'efi-master-05122024' of https://source.denx.de/u-boot/custodians/u-boot-tpm

CI: https://source.denx.de/u-boot/custodians/u-boot-tpm/-/pipelines/23719

Two fixes for the EFI subsystem coming via the TPM tree as agreed by Heinrich

The LMB patch fixes a failure in SystemReady testing. Nothing bad happens
without the patch in the device operation, but the return values are wrong
and SCT tests fail for MemoryAllocationServicesTest category.

The second is a shielding the device against mistakes in the definition of
struct fields needed by the capsule update mechanism. Instead of crashing,
print a humna readable message of what's wrong.
This commit is contained in:
Tom Rini 2024-12-05 08:10:51 -06:00
commit ac3428fcc7
3 changed files with 25 additions and 10 deletions

View File

@ -281,6 +281,10 @@ static efi_status_t efi_gen_capsule_guids(void)
}
for (i = 0; i < update_info.num_images; i++) {
if (!fw_array[i].fw_name) {
log_err("fw_name is not defined. Not generating capsule GUIDs\n");
return EFI_INVALID_PARAMETER;
}
gen_v5_guid(&namespace,
&fw_array[i].image_type_id,
compatible, strlen(compatible),

View File

@ -201,15 +201,6 @@ static long lmb_add_region_flags(struct alist *lmb_rgn_lst, phys_addr_t base,
phys_addr_t rgnbase = rgn[i].base;
phys_size_t rgnsize = rgn[i].size;
phys_size_t rgnflags = rgn[i].flags;
phys_addr_t end = base + size - 1;
phys_addr_t rgnend = rgnbase + rgnsize - 1;
if (rgnbase <= base && end <= rgnend) {
if (flags == rgnflags)
/* Already have this region, so we're done */
return 0;
else
return -1; /* regions with new flags */
}
ret = lmb_addrs_adjacent(base, size, rgnbase, rgnsize);
if (ret > 0) {

View File

@ -529,6 +529,26 @@ static int test_alloc_addr(struct unit_test_state *uts, const phys_addr_t ram)
ret = lmb_add(ram, ram_size);
ut_asserteq(ret, 0);
/* Try to allocate a page twice */
b = lmb_alloc_addr_flags(alloc_addr_a, 0x1000, LMB_NONE);
ut_asserteq(b, alloc_addr_a);
b = lmb_alloc_addr_flags(alloc_addr_a, 0x1000, LMB_NOOVERWRITE);
ut_asserteq(b, 0);
b = lmb_alloc_addr_flags(alloc_addr_a, 0x1000, LMB_NONE);
ut_asserteq(b, alloc_addr_a);
b = lmb_alloc_addr_flags(alloc_addr_a, 0x2000, LMB_NONE);
ut_asserteq(b, alloc_addr_a);
ret = lmb_free(alloc_addr_a, 0x2000);
ut_asserteq(ret, 0);
b = lmb_alloc_addr_flags(alloc_addr_a, 0x1000, LMB_NOOVERWRITE);
ut_asserteq(b, alloc_addr_a);
b = lmb_alloc_addr_flags(alloc_addr_a, 0x1000, LMB_NONE);
ut_asserteq(b, 0);
b = lmb_alloc_addr_flags(alloc_addr_a, 0x1000, LMB_NOOVERWRITE);
ut_asserteq(b, 0);
ret = lmb_free(alloc_addr_a, 0x1000);
ut_asserteq(ret, 0);
/* reserve 3 blocks */
ret = lmb_reserve(alloc_addr_a, 0x10000);
ut_asserteq(ret, 0);
@ -734,7 +754,7 @@ static int lib_test_lmb_flags(struct unit_test_state *uts)
/* reserve again, same flag */
ret = lmb_reserve_flags(0x40010000, 0x10000, LMB_NOMAP);
ut_asserteq(ret, 0);
ut_asserteq(ret, -1L);
ASSERT_LMB(mem_lst, used_lst, ram, ram_size, 1, 0x40010000, 0x10000,
0, 0, 0, 0);