[PATCH 03/35] x86: Show some EFI info with the bdinfo command

Heinrich Schuchardt xypron.glpk at gmx.de
Thu Sep 9 11:29:10 CEST 2021



On 9/9/21 10:57 AM, Simon Glass wrote:
> Hi Heinrich,
>
> On Wed, 8 Sept 2021 at 11:34, Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
>>
>>
>>
>> On 9/8/21 3:33 PM, Simon Glass wrote:
>>> It is useful to see some basic EFI info with the command as it forms part
>>> of the information about a board.
>>>
>>> Add a hook for this and show the table address as a start.
>>>
>>> While here, fix an invalid cast in setup_efi_info().
>>>
>>> Signed-off-by: Simon Glass <sjg at chromium.org>
>>> ---
>>>
>>>    arch/x86/cpu/efi/payload.c | 13 +++++++++++--
>>>    arch/x86/include/asm/efi.h |  7 +++++++
>>>    arch/x86/lib/Makefile      |  1 +
>>>    arch/x86/lib/bdinfo.c      | 22 ++++++++++++++++++++++
>>>    4 files changed, 41 insertions(+), 2 deletions(-)
>>>    create mode 100644 arch/x86/lib/bdinfo.c
>>>
>>> diff --git a/arch/x86/cpu/efi/payload.c b/arch/x86/cpu/efi/payload.c
>>> index 9a73b768e9b..3a9f7d72868 100644
>>> --- a/arch/x86/cpu/efi/payload.c
>>> +++ b/arch/x86/cpu/efi/payload.c
>>> @@ -280,15 +280,24 @@ void setup_efi_info(struct efi_info *efi_info)
>>>        }
>>>        efi_info->efi_memdesc_size = map->desc_size;
>>>        efi_info->efi_memdesc_version = map->version;
>>> -     efi_info->efi_memmap = (u32)(map->desc);
>>> +     efi_info->efi_memmap = (ulong)(map->desc);
>>
>> When converting a pointer to integer we use (uintptr_t).
>
> Generally in U-Boot it is ulong so I try to be consistent here.

Currently ulong and uintprt_t are the same technically. But for the sake
of readability uintptr_t is much clearer.

We use uintptr_t in 935 code locations already. Just grep for it.

> Anyway, u32 is clearly not right for a 64-bit build as it gives
> warnings.
>
>>
>> arch/x86/include/asm/bootparam.h defines efi_info->efi_memmap as u32.
>> This type is too small to hold a pointer.
>>
>>>        efi_info->efi_memmap_size = size - sizeof(struct efi_entry_memmap);
>>>
>>>    #ifdef CONFIG_EFI_STUB_64BIT
>>>        efi_info->efi_systab_hi = table->sys_table >> 32;
>>> -     efi_info->efi_memmap_hi = (u64)(u32)(map->desc) >> 32;
>>> +     efi_info->efi_memmap_hi = (u64)(ulong)map->desc >> 32;
>>
>> You should not use two fields to hold a single pointer.
>>
>> Please, replace all of these duplicate fields.
>
> We do need to be compatible with what the kernel expects, otherwise
> there is no point in filling out this information.

Why should we have separate fields for the low and high 32 bits of a
pointer?

Best regards

Heinrich


More information about the U-Boot mailing list