
Hi Alex,
On Sun, Jun 10, 2018 at 9:25 PM, Bin Meng bmeng.cn@gmail.com wrote:
Since commit bb0bb91cf0aa ("efi_stub: Use efi_uintn_t"), EFI x86 64-bit payload does not work anymore. The call to GetMemoryMap() in efi_stub.c fails with return code EFI_INVALID_PARAMETER. Since the payload itself is still 32-bit U-Boot, efi_uintn_t gets wrongly interpreted as int, but it should actually be long in a 64-bit EFI environment.
Fixes: bb0bb91cf0aa ("efi_stub: Use efi_uintn_t") Signed-off-by: Bin Meng bmeng.cn@gmail.com
include/efi_api.h | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/include/efi_api.h b/include/efi_api.h index 64c27e4..d1158de 100644 --- a/include/efi_api.h +++ b/include/efi_api.h @@ -28,7 +28,11 @@ enum efi_timer_delay { EFI_TIMER_RELATIVE = 2 };
+#if defined(CONFIG_EFI_STUB_64BIT) && defined(EFI_STUB) +#define efi_uintn_t unsigned long +#else #define efi_uintn_t size_t +#endif typedef uint16_t *efi_string_t;
#define EVT_TIMER 0x80000000
With your proposed changes to efi.h in [1], do you think we should also fix this by:
#ifdef __x86_64__ #define efi_uintn_t unsigned long #else #define efi_uintn_t size_t
[1] https://lists.denx.de/pipermail/u-boot/2018-June/331193.html
Regards, Bin