Thread (31 messages) 31 messages, 6 authors, 2016-03-21
STALE3733d

[PATCH 8/8] efi/arm: populate screen_info based on data provided by the UEFI stub

From: Ard Biesheuvel <hidden>
Date: 2016-03-18 11:57:18
Also in: linux-efi

On 18 March 2016 at 12:53, Matt Fleming [off-list ref] wrote:
On Thu, 10 Mar, at 12:40:08PM, Ard Biesheuvel wrote:
quoted
Unlike on arm64, where we can simply access the screen_info struct directly,
ARM requires an intermediate step to get the information discovered by the
GOP code in the UEFI stub into the screen_info struct.

So retrieve the dedicated config table we invented for this purpose, and
put its contents into the core kernel's copy of struct screen_info.

Signed-off-by: Ard Biesheuvel <redacted>
---
 arch/arm/kernel/efi.c           | 24 ++++++++++++++++++++
 drivers/firmware/efi/arm-init.c |  6 +++++
 2 files changed, 30 insertions(+)
[...]
quoted
diff --git a/drivers/firmware/efi/arm-init.c b/drivers/firmware/efi/arm-init.c
index eca9b4f826ee..689bf65f8ddf 100644
--- a/drivers/firmware/efi/arm-init.c
+++ b/drivers/firmware/efi/arm-init.c
@@ -112,6 +112,12 @@ static int __init uefi_init(void)
      retval = efi_config_parse_tables(config_tables, efi.systab->nr_tables,
                                       sizeof(efi_config_table_t), NULL);

+     if (IS_ENABLED(CONFIG_ARM)) {
+             extern void efi_find_screen_info(efi_config_table_t *, u32);
+
+             efi_find_screen_info(config_tables, efi.systab->nr_tables);
+     }
+
      early_memunmap(config_tables, table_size);
 out:
      early_memunmap(efi.systab,  sizeof(efi_system_table_t));
It's unfortunate that this is the first example of putting
arch-specific things in arm-init.c. Is there anyway we can move it out
into arch/arm?

If not, because efi_find_screen_info() uses all standard data types
and function calls, I wouldn't be opposed to just sticking this in
efi_config_parse_tables() like we do for EFI_PROPERTIES_TABLE. It's
certainly nice to have all config table code in one place.

Also, it would save ARM the effort of looping over the config tables
twice.
I'd actually prefer that, especially since -at some point- we may
expose the stub-to-kernel interface as an ABI, for things like Xen
dom0 that expose a 'sanitized' EFI environment, and don't boot the
dom0 kernel via the stub. There, this config table would be the only
way to populate screen_info, and the fact that arm64 *may* do it
directly becomes an implementation detail of the stub.

So in v2, I will rename the GUID to drop the ARMxx part, and move its
handling into the generic code.

-- 
Ard.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help