summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorHeinrich Schuchardt <xypron.glpk@gmx.de>2018-07-29 10:49:04 +0300
committerAlexander Graf <agraf@suse.de>2018-08-20 15:43:12 +0300
commita39f39cdd8be5cd3e7a8b696a463b621e3d827e0 (patch)
treec56fdf1df31c2b16e8f8f6c8b85728a83bbb9530 /lib
parent483dbab9f9318149e5ea97daacbfae320f53e35a (diff)
downloadu-boot-a39f39cdd8be5cd3e7a8b696a463b621e3d827e0.tar.xz
efi_loader: update runtime services table crc32
The crc32 of the runtime services table must be updated after detaching. efi_update_table_header_crc32() must be __efi_runtime. So move it to efi_runtime.c Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de> Signed-off-by: Alexander Graf <agraf@suse.de>
Diffstat (limited to 'lib')
-rw-r--r--lib/efi_loader/efi_boottime.c12
-rw-r--r--lib/efi_loader/efi_runtime.c15
2 files changed, 15 insertions, 12 deletions
diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c
index 1192bdb5f5..3935e4f1ce 100644
--- a/lib/efi_loader/efi_boottime.c
+++ b/lib/efi_loader/efi_boottime.c
@@ -154,18 +154,6 @@ const char *__efi_nesting_dec(void)
}
/**
- * efi_update_table_header_crc32() - Update CRC32 in table header
- *
- * @table: EFI table
- */
-static void efi_update_table_header_crc32(struct efi_table_hdr *table)
-{
- table->crc32 = 0;
- table->crc32 = crc32(0, (const unsigned char *)table,
- table->headersize);
-}
-
-/**
* efi_queue_event() - queue an EFI event
* @event: event to signal
* @check_tpl: check the TPL level
diff --git a/lib/efi_loader/efi_runtime.c b/lib/efi_loader/efi_runtime.c
index 45b7809dec..633e4cc3e5 100644
--- a/lib/efi_loader/efi_runtime.c
+++ b/lib/efi_loader/efi_runtime.c
@@ -84,6 +84,18 @@ struct elf_rela {
* handle a good number of runtime callbacks
*/
+/**
+ * efi_update_table_header_crc32() - Update crc32 in table header
+ *
+ * @table: EFI table
+ */
+void __efi_runtime efi_update_table_header_crc32(struct efi_table_hdr *table)
+{
+ table->crc32 = 0;
+ table->crc32 = crc32(0, (const unsigned char *)table,
+ table->headersize);
+}
+
static void EFIAPI efi_reset_system_boottime(
enum efi_reset_type reset_type,
efi_status_t reset_status,
@@ -273,6 +285,9 @@ static void efi_runtime_detach(ulong offset)
debug("%s: Setting %p to %lx\n", __func__, p, newaddr);
*p = newaddr;
}
+
+ /* Update crc32 */
+ efi_update_table_header_crc32(&efi_runtime_services.hdr);
}
/* Relocate EFI runtime to uboot_reloc_base = offset */