Message ID | 1459955163-15780-1-git-send-email-sjg@chromium.org |
---|---|
State | RFC |
Delegated to: | Bin Meng |
Headers | show |
Hi, On Wed, Apr 6, 2016 at 6:06 PM, Simon Glass <sjg@chromium.org> wrote: > Currently it is not possible to build the 64-bit EFI stub due to changes in > the build. To prevent future bit rot, we should add target for building > qemu-x86 as an EFI stub (with U-Boot as a 32-bit payload). > > This patch provides some hints. > > Reported-by: Nicolae Rosia <nicolae.rosia@gmail.com> > Signed-off-by: Simon Glass <sjg@chromium.org> > --- > > arch/x86/include/asm/types.h | 12 ++++++++---- > configs/qemu-x86_defconfig | 3 +++ > include/efi.h | 2 +- > lib/efi/efi_stub.c | 6 +++--- > 4 files changed, 15 insertions(+), 8 deletions(-) > > diff --git a/arch/x86/include/asm/types.h b/arch/x86/include/asm/types.h > index 766617f..998d70a 100644 > --- a/arch/x86/include/asm/types.h > +++ b/arch/x86/include/asm/types.h > @@ -44,11 +44,15 @@ typedef __INT64_TYPE__ s64; > typedef __UINT64_TYPE__ u64; > #endif > > -#ifdef CONFIG_EFI_STUB_64BIT > -#define BITS_PER_LONG 64 > -#else > +/* > + * This should be defined only when compiling the stub - see the > + * ecmd_u-boot_payload build rule > + */ Are you saying that I should take a look at cmd_u-boot_payload in Makefile? I've looked over it and I don't figure out what I should see. > +// #ifdef CONFIG_EFI_STUB_64BIT > +// #define BITS_PER_LONG 64 > +// #else > #define BITS_PER_LONG 32 > -#endif > +// #endif This fixes the compilation warnings > /* Dma addresses are 32-bits wide. */ > > typedef u32 dma_addr_t; > diff --git a/configs/qemu-x86_defconfig b/configs/qemu-x86_defconfig > index bb9c6cd..2a7087f 100644 > --- a/configs/qemu-x86_defconfig > +++ b/configs/qemu-x86_defconfig > @@ -32,3 +32,6 @@ CONFIG_VIDEO_VESA=y > CONFIG_FRAMEBUFFER_SET_VESA_MODE=y > CONFIG_FRAMEBUFFER_VESA_MODE_111=y > CONFIG_USE_PRIVATE_LIBGCC=y > +CONFIG_EFI=y > +CONFIG_EFI_STUB=y > +CONFIG_EFI_STUB_64BIT=y Should we create an example defconfig for efi stub and not modify the qemu defconfig? > diff --git a/include/efi.h b/include/efi.h > index 1dbc3b7..21921f1 100644 > --- a/include/efi.h > +++ b/include/efi.h > @@ -278,7 +278,7 @@ struct efi_priv { > extern char image_base[]; > > /* Start and end of U-Boot image (for payload) */ > -extern char _binary_u_boot_dtb_bin_start[], _binary_u_boot_dtb_bin_end[]; > +extern char _binary_u_boot_bin_start[], _binary_u_boot_bin_end[]; > > /** > * efi_get_sys_table() - Get access to the main EFI system table > diff --git a/lib/efi/efi_stub.c b/lib/efi/efi_stub.c > index 8b4bb4e..1814960 100644 > --- a/lib/efi/efi_stub.c > +++ b/lib/efi/efi_stub.c > @@ -354,9 +354,9 @@ efi_status_t efi_main(efi_handle_t image, struct efi_system_table *sys_table) > /* The EFI UART won't work now, switch to a debug one */ > use_uart = true; > > - memcpy((void *)CONFIG_SYS_TEXT_BASE, _binary_u_boot_dtb_bin_start, > - (ulong)_binary_u_boot_dtb_bin_end - > - (ulong)_binary_u_boot_dtb_bin_start); > + memcpy((void *)CONFIG_SYS_TEXT_BASE, _binary_u_boot_bin_start, > + (ulong)_binary_u_boot_bin_end - > + (ulong)_binary_u_boot_bin_start); > Thanks, these fixes the compilation errors. > #ifdef DEBUG > puts("EFI table at "); > -- > 2.8.0.rc3.226.g39d4020 > I'll try to boot test. Best regards, Nicolae
Hi Nicolae, On 6 April 2016 at 09:50, Nicolae Rosia <nicolae.rosia@gmail.com> wrote: > Hi, > > On Wed, Apr 6, 2016 at 6:06 PM, Simon Glass <sjg@chromium.org> wrote: >> Currently it is not possible to build the 64-bit EFI stub due to changes in >> the build. To prevent future bit rot, we should add target for building >> qemu-x86 as an EFI stub (with U-Boot as a 32-bit payload). >> >> This patch provides some hints. >> >> Reported-by: Nicolae Rosia <nicolae.rosia@gmail.com> >> Signed-off-by: Simon Glass <sjg@chromium.org> >> --- >> >> arch/x86/include/asm/types.h | 12 ++++++++---- >> configs/qemu-x86_defconfig | 3 +++ >> include/efi.h | 2 +- >> lib/efi/efi_stub.c | 6 +++--- >> 4 files changed, 15 insertions(+), 8 deletions(-) >> >> diff --git a/arch/x86/include/asm/types.h b/arch/x86/include/asm/types.h >> index 766617f..998d70a 100644 >> --- a/arch/x86/include/asm/types.h >> +++ b/arch/x86/include/asm/types.h >> @@ -44,11 +44,15 @@ typedef __INT64_TYPE__ s64; >> typedef __UINT64_TYPE__ u64; >> #endif >> >> -#ifdef CONFIG_EFI_STUB_64BIT >> -#define BITS_PER_LONG 64 >> -#else >> +/* >> + * This should be defined only when compiling the stub - see the >> + * ecmd_u-boot_payload build rule >> + */ > Are you saying that I should take a look at cmd_u-boot_payload in Makefile? > I've looked over it and I don't figure out what I should see. Just the list of files that it builds there (efi.c and efi_stub.c). > >> +// #ifdef CONFIG_EFI_STUB_64BIT >> +// #define BITS_PER_LONG 64 >> +// #else >> #define BITS_PER_LONG 32 >> -#endif >> +// #endif > This fixes the compilation warnings Right, but a correct patch will obey the comment immediately above. > >> /* Dma addresses are 32-bits wide. */ >> >> typedef u32 dma_addr_t; >> diff --git a/configs/qemu-x86_defconfig b/configs/qemu-x86_defconfig >> index bb9c6cd..2a7087f 100644 >> --- a/configs/qemu-x86_defconfig >> +++ b/configs/qemu-x86_defconfig >> @@ -32,3 +32,6 @@ CONFIG_VIDEO_VESA=y >> CONFIG_FRAMEBUFFER_SET_VESA_MODE=y >> CONFIG_FRAMEBUFFER_VESA_MODE_111=y >> CONFIG_USE_PRIVATE_LIBGCC=y >> +CONFIG_EFI=y >> +CONFIG_EFI_STUB=y >> +CONFIG_EFI_STUB_64BIT=y > Should we create an example defconfig for efi stub and not modify the > qemu defconfig? I suggest a new board config called qemu-x86-efi. It can copy qemu, with the addition of the above three options. > >> diff --git a/include/efi.h b/include/efi.h >> index 1dbc3b7..21921f1 100644 >> --- a/include/efi.h >> +++ b/include/efi.h >> @@ -278,7 +278,7 @@ struct efi_priv { >> extern char image_base[]; >> >> /* Start and end of U-Boot image (for payload) */ >> -extern char _binary_u_boot_dtb_bin_start[], _binary_u_boot_dtb_bin_end[]; >> +extern char _binary_u_boot_bin_start[], _binary_u_boot_bin_end[]; >> >> /** >> * efi_get_sys_table() - Get access to the main EFI system table >> diff --git a/lib/efi/efi_stub.c b/lib/efi/efi_stub.c >> index 8b4bb4e..1814960 100644 >> --- a/lib/efi/efi_stub.c >> +++ b/lib/efi/efi_stub.c >> @@ -354,9 +354,9 @@ efi_status_t efi_main(efi_handle_t image, struct efi_system_table *sys_table) >> /* The EFI UART won't work now, switch to a debug one */ >> use_uart = true; >> >> - memcpy((void *)CONFIG_SYS_TEXT_BASE, _binary_u_boot_dtb_bin_start, >> - (ulong)_binary_u_boot_dtb_bin_end - >> - (ulong)_binary_u_boot_dtb_bin_start); >> + memcpy((void *)CONFIG_SYS_TEXT_BASE, _binary_u_boot_bin_start, >> + (ulong)_binary_u_boot_bin_end - >> + (ulong)_binary_u_boot_bin_start); >> > Thanks, these fixes the compilation errors. > >> #ifdef DEBUG >> puts("EFI table at "); >> -- >> 2.8.0.rc3.226.g39d4020 >> > > I'll try to boot test. OK, but it is still broken without the fix mentioned above. > > Best regards, > Nicolae Regards, Simon
diff --git a/arch/x86/include/asm/types.h b/arch/x86/include/asm/types.h index 766617f..998d70a 100644 --- a/arch/x86/include/asm/types.h +++ b/arch/x86/include/asm/types.h @@ -44,11 +44,15 @@ typedef __INT64_TYPE__ s64; typedef __UINT64_TYPE__ u64; #endif -#ifdef CONFIG_EFI_STUB_64BIT -#define BITS_PER_LONG 64 -#else +/* + * This should be defined only when compiling the stub - see the + * ecmd_u-boot_payload build rule + */ +// #ifdef CONFIG_EFI_STUB_64BIT +// #define BITS_PER_LONG 64 +// #else #define BITS_PER_LONG 32 -#endif +// #endif /* Dma addresses are 32-bits wide. */ typedef u32 dma_addr_t; diff --git a/configs/qemu-x86_defconfig b/configs/qemu-x86_defconfig index bb9c6cd..2a7087f 100644 --- a/configs/qemu-x86_defconfig +++ b/configs/qemu-x86_defconfig @@ -32,3 +32,6 @@ CONFIG_VIDEO_VESA=y CONFIG_FRAMEBUFFER_SET_VESA_MODE=y CONFIG_FRAMEBUFFER_VESA_MODE_111=y CONFIG_USE_PRIVATE_LIBGCC=y +CONFIG_EFI=y +CONFIG_EFI_STUB=y +CONFIG_EFI_STUB_64BIT=y diff --git a/include/efi.h b/include/efi.h index 1dbc3b7..21921f1 100644 --- a/include/efi.h +++ b/include/efi.h @@ -278,7 +278,7 @@ struct efi_priv { extern char image_base[]; /* Start and end of U-Boot image (for payload) */ -extern char _binary_u_boot_dtb_bin_start[], _binary_u_boot_dtb_bin_end[]; +extern char _binary_u_boot_bin_start[], _binary_u_boot_bin_end[]; /** * efi_get_sys_table() - Get access to the main EFI system table diff --git a/lib/efi/efi_stub.c b/lib/efi/efi_stub.c index 8b4bb4e..1814960 100644 --- a/lib/efi/efi_stub.c +++ b/lib/efi/efi_stub.c @@ -354,9 +354,9 @@ efi_status_t efi_main(efi_handle_t image, struct efi_system_table *sys_table) /* The EFI UART won't work now, switch to a debug one */ use_uart = true; - memcpy((void *)CONFIG_SYS_TEXT_BASE, _binary_u_boot_dtb_bin_start, - (ulong)_binary_u_boot_dtb_bin_end - - (ulong)_binary_u_boot_dtb_bin_start); + memcpy((void *)CONFIG_SYS_TEXT_BASE, _binary_u_boot_bin_start, + (ulong)_binary_u_boot_bin_end - + (ulong)_binary_u_boot_bin_start); #ifdef DEBUG puts("EFI table at ");
Currently it is not possible to build the 64-bit EFI stub due to changes in the build. To prevent future bit rot, we should add target for building qemu-x86 as an EFI stub (with U-Boot as a 32-bit payload). This patch provides some hints. Reported-by: Nicolae Rosia <nicolae.rosia@gmail.com> Signed-off-by: Simon Glass <sjg@chromium.org> --- arch/x86/include/asm/types.h | 12 ++++++++---- configs/qemu-x86_defconfig | 3 +++ include/efi.h | 2 +- lib/efi/efi_stub.c | 6 +++--- 4 files changed, 15 insertions(+), 8 deletions(-)