diff mbox

[v2,2/2] arm64/efi: esrt: add missing call to efi_esrt_init()

Message ID 1455535953-5056-3-git-send-email-ard.biesheuvel@linaro.org
State New
Headers show

Commit Message

Ard Biesheuvel Feb. 15, 2016, 11:32 a.m. UTC
ESRT support is built by default for all architectures that define
CONFIG_EFI. However, this support was not wired up yet for ARM/arm64,
since efi_esrt_init() was never called. So add the missing call.

Since efi_esrt_init() uses efi_mem_desc_lookup(), which in turn relies
on efi.memmap having been assigned and populated completetely, add the
missing assignments of efi.memmap and efi.memmap->nr_map.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

---
 drivers/firmware/efi/arm-init.c | 3 +++
 1 file changed, 3 insertions(+)

-- 
2.5.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

Comments

Ard Biesheuvel Feb. 17, 2016, 8:32 a.m. UTC | #1
On 16 February 2016 at 21:25, Baicar, Tyler <tbaicar@codeaurora.org> wrote:
> On 2/15/2016 4:32 AM, Ard Biesheuvel wrote:

>>

>> ESRT support is built by default for all architectures that define

>> CONFIG_EFI. However, this support was not wired up yet for ARM/arm64,

>> since efi_esrt_init() was never called. So add the missing call.

>>

>> Since efi_esrt_init() uses efi_mem_desc_lookup(), which in turn relies

>> on efi.memmap having been assigned and populated completetely, add the

>> missing assignments of efi.memmap and efi.memmap->nr_map.

>>

>> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

>> ---

>>   drivers/firmware/efi/arm-init.c | 3 +++

>>   1 file changed, 3 insertions(+)

>>

>> diff --git a/drivers/firmware/efi/arm-init.c

>> b/drivers/firmware/efi/arm-init.c

>> index 9e15d571b53c..5c5e799bdb50 100644

>> --- a/drivers/firmware/efi/arm-init.c

>> +++ b/drivers/firmware/efi/arm-init.c

>> @@ -197,10 +197,13 @@ void __init efi_init(void)

>>         memmap.map_end = memmap.map + params.mmap_size;

>>         memmap.desc_size = params.desc_size;

>>         memmap.desc_version = params.desc_ver;

>> +       memmap.nr_map = params.mmap_size / params.desc_size;

>> +       efi.memmap = &memmap;

>>         if (uefi_init() < 0)

>>                 return;

>>   +     efi_esrt_init();

>

> This call to efi_esrt_init() is failing because efi.flags does not have

> EFI_MEMMAP set. This flag gets set at the end of reserve_regions(). I tested

> moving the set_bit() call from reserve_regions() to just before

> efi_esrt_init() and also tested moving efi_esrt_init() to just after

> reserve_regions(). Both of these options worked.


Thanks for spotting that. I moved the call around for some reason (I
don't remember why, exactly), but it indeed belongs after the call to
reserve_regions()

I will send out a v2

>>

>>         reserve_regions();

>>         early_memunmap(memmap.map, params.mmap_size);

>>         memblock_mark_nomap(params.mmap & PAGE_MASK,

>

> Thanks,

> Tyler

>

> --

> Qualcomm Innovation Center, Inc.

> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,

> a Linux Foundation Collaborative Project

>


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
diff mbox

Patch

diff --git a/drivers/firmware/efi/arm-init.c b/drivers/firmware/efi/arm-init.c
index 9e15d571b53c..5c5e799bdb50 100644
--- a/drivers/firmware/efi/arm-init.c
+++ b/drivers/firmware/efi/arm-init.c
@@ -197,10 +197,13 @@  void __init efi_init(void)
 	memmap.map_end = memmap.map + params.mmap_size;
 	memmap.desc_size = params.desc_size;
 	memmap.desc_version = params.desc_ver;
+	memmap.nr_map = params.mmap_size / params.desc_size;
+	efi.memmap = &memmap;
 
 	if (uefi_init() < 0)
 		return;
 
+	efi_esrt_init();
 	reserve_regions();
 	early_memunmap(memmap.map, params.mmap_size);
 	memblock_mark_nomap(params.mmap & PAGE_MASK,