From 21a83053ab619f00fce457c717c496d3b0dc7b4d Mon Sep 17 00:00:00 2001 From: Michael Olbrich Date: Fri, 17 Jul 2015 21:22:42 +0200 Subject: efi: write volatile EFI variables used by systemd LoaderTimeInitUSec and LoaderTimeExecUSec are used e.g. in systemd-analyze to calculate the time spent in the firmare and barebox. LoaderDevicePartUUID is used to mount the EFI partition to /boot. Signed-off-by: Michael Olbrich Signed-off-by: Sascha Hauer --- arch/efi/efi/efi-image.c | 5 +++++ arch/efi/efi/efi.c | 16 ++++++++++++++++ 2 files changed, 21 insertions(+) (limited to 'arch') diff --git a/arch/efi/efi/efi-image.c b/arch/efi/efi/efi-image.c index de9b277556..b6437f4078 100644 --- a/arch/efi/efi/efi-image.c +++ b/arch/efi/efi/efi-image.c @@ -17,6 +17,7 @@ * */ +#include #include #include #include @@ -242,6 +243,10 @@ static int do_bootm_efi(struct image_data *data) boot_header->ramdisk_image); printf("...\n"); } + + efi_set_variable_usec("LoaderTimeExecUSec", &efi_systemd_vendor_guid, + get_time_ns()/1000); + linux_efi_handover(handle, boot_header); return 0; diff --git a/arch/efi/efi/efi.c b/arch/efi/efi/efi.c index b0e98f95b0..1f0deed577 100644 --- a/arch/efi/efi/efi.c +++ b/arch/efi/efi/efi.c @@ -340,6 +340,7 @@ efi_status_t efi_main(efi_handle_t image, efi_system_table_t *sys_table) efi_physical_addr_t mem; size_t memsize; efi_status_t efiret; + char *uuid; #ifdef DEBUG sys_table->con_out->output_string(sys_table->con_out, L"barebox\n"); @@ -377,6 +378,21 @@ efi_status_t efi_main(efi_handle_t image, efi_system_table_t *sys_table) mem_malloc_init((void *)mem, (void *)mem + memsize); efi_clocksource_init(); + efi_set_variable_usec("LoaderTimeInitUSec", &efi_systemd_vendor_guid, + get_time_ns()/1000); + + uuid = device_path_to_partuuid(device_path_from_handle( + efi_loaded_image->device_handle)); + if (uuid) { + wchar_t *uuid16 = xstrdup_char_to_wchar(uuid); + efi_set_variable("LoaderDevicePartUUID", + &efi_systemd_vendor_guid, + EFI_VARIABLE_BOOTSERVICE_ACCESS | + EFI_VARIABLE_RUNTIME_ACCESS, + uuid16, (strlen(uuid)+1) * sizeof(wchar_t)); + free(uuid); + free(uuid16); + } start_barebox(); -- cgit v1.2.3