[PATCH 2/4] efi-payload: use handoff data to pass data to barebox proper
Ahmad Fatoum
a.fatoum at pengutronix.de
Tue May 21 05:39:07 PDT 2024
On 21.05.24 12:49, Sascha Hauer wrote:
> EFI payload uses custom fields in struct boarddata to pass data from PBL
> to barebox proper. handoff data was created for exactly this purpose.
> Now that we have it, switch EFI payload over to use it.
>
> Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>
Tested-by: Ahmad Fatoum <a.fatoum at pengutronix.de>
Tested with barebox as EFI payload compiled for arm64 with both
Tianocore and barebox as EFI loader.
> ---
> efi/payload/boarddata.c | 12 +++++++-----
> efi/payload/entry-multi.c | 16 +++++++---------
> include/boarddata.h | 4 ----
> include/efi/efi-payload.h | 5 +++++
> include/pbl/handoff-data.h | 1 +
> 5 files changed, 20 insertions(+), 18 deletions(-)
>
> diff --git a/efi/payload/boarddata.c b/efi/payload/boarddata.c
> index 3260e31c7b..d4e4b5ac1d 100644
> --- a/efi/payload/boarddata.c
> +++ b/efi/payload/boarddata.c
> @@ -8,25 +8,27 @@
>
> #include <efi/efi-payload.h>
> #include <efi.h>
> -#include <boarddata.h>
> #include <memory.h>
> #include <linux/kernel.h>
> #include <linux/printk.h>
> #include <debug_ll.h>
> #include <init.h>
> +#include <pbl/handoff-data.h>
>
> static int handle_efi_boarddata(void)
> {
> - const struct barebox_boarddata *bd = barebox_get_boarddata();
> + size_t size;
> + struct barebox_efi_data *efidata;
> efi_status_t efiret;
>
> - if (!barebox_boarddata_is_machine(bd, BAREBOX_MACH_TYPE_EFI))
> + efidata = handoff_data_get_entry(HANDOFF_DATA_EFI, &size);
> + if (!efidata)
> return 0;
>
> barebox_add_memory_bank("ram0", mem_malloc_start(), mem_malloc_size());
>
> - efi_parent_image = bd->image;
> - efi_sys_table = bd->sys_table;
> + efi_parent_image = efidata->image;
> + efi_sys_table = efidata->sys_table;
> BS = efi_sys_table->boottime;
> RT = efi_sys_table->runtime;
>
> diff --git a/efi/payload/entry-multi.c b/efi/payload/entry-multi.c
> index f929ab01ec..26cf2ebfa7 100644
> --- a/efi/payload/entry-multi.c
> +++ b/efi/payload/entry-multi.c
> @@ -3,18 +3,13 @@
> #include <linux/kernel.h>
> #include <linux/linkage.h>
> #include <linux/sizes.h>
> -#include <boarddata.h>
> #include <stdio.h>
> #include <efi.h>
> #include <asm/common.h>
> #include <efi/efi-util.h>
> #include <efi/efi-payload.h>
> #include <pbl.h>
> -
> -static struct barebox_boarddata boarddata = {
> - .magic = BAREBOX_BOARDDATA_MAGIC,
> - .machine = BAREBOX_MACH_TYPE_EFI,
> -};
> +#include <pbl/handoff-data.h>
>
> asmlinkage void __efistub_efi_pe_entry(void *image, struct efi_system_table *sys_table);
>
> @@ -30,16 +25,19 @@ void __efistub_efi_pe_entry(void *image, struct efi_system_table *sys_table)
> {
> size_t memsize;
> efi_physical_addr_t mem;
> + static struct barebox_efi_data efidata;
>
> #ifdef DEBUG
> sys_table->con_out->output_string(sys_table->con_out, L"\nbarebox\n");
> #endif
> pbl_set_putc(efi_putc, sys_table);
>
> - boarddata.image = image;
> - boarddata.sys_table = sys_table;
> + efidata.image = image;
> + efidata.sys_table = sys_table;
> +
> + handoff_data_add(HANDOFF_DATA_EFI, &efidata, sizeof(efidata));
>
> mem = efi_earlymem_alloc(sys_table, &memsize);
>
> - barebox_pbl_entry(mem, memsize, &boarddata);
> + barebox_pbl_entry(mem, memsize, NULL);
> }
> diff --git a/include/boarddata.h b/include/boarddata.h
> index 8c048fd957..6092d5f304 100644
> --- a/include/boarddata.h
> +++ b/include/boarddata.h
> @@ -15,10 +15,6 @@ struct barebox_boarddata {
> * that do not potientially clashes with registered machines,
> * i.e. use a number > 0x10000.
> */
> -#ifdef CONFIG_EFI_STUB
> - void *image;
> - void *sys_table;
> -#endif
> };
>
> /*
> diff --git a/include/efi/efi-payload.h b/include/efi/efi-payload.h
> index 774c069229..73b1b9bd8e 100644
> --- a/include/efi/efi-payload.h
> +++ b/include/efi/efi-payload.h
> @@ -8,6 +8,11 @@
> struct efi_system_table;
> struct efi_loaded_image;
>
> +struct barebox_efi_data {
> + void *image;
> + void *sys_table;
> +};
> +
> extern struct efi_system_table *efi_sys_table;
> extern efi_handle_t efi_parent_image;
> extern struct efi_device_path *efi_device_path;
> diff --git a/include/pbl/handoff-data.h b/include/pbl/handoff-data.h
> index 18ea9e508b..044b4bb884 100644
> --- a/include/pbl/handoff-data.h
> +++ b/include/pbl/handoff-data.h
> @@ -12,6 +12,7 @@ struct handoff_data {
> #define HANDOFF_DATA_INTERNAL_DT_Z HANDOFF_DATA_BAREBOX(1)
> #define HANDOFF_DATA_EXTERNAL_DT HANDOFF_DATA_BAREBOX(2)
> #define HANDOFF_DATA_BOARDDATA HANDOFF_DATA_BAREBOX(3)
> +#define HANDOFF_DATA_EFI HANDOFF_DATA_BAREBOX(4)
>
> #define HANDOFF_DATA_BOARD(n) (0x951726fb + (n))
>
--
Pengutronix e.K. | |
Steuerwalder Str. 21 | http://www.pengutronix.de/ |
31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
More information about the barebox
mailing list