Re: [PATCH V3 RFC 00/16] EFI stub for ARM

Roy Franz
2013-08-17T00:16:09Z

On Tue, Aug 13, 2013 at 10:58 AM, Roy Franz <roy.franz-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> wrote:
> On Fri, Aug 9, 2013 at 4:26 PM, Roy Franz <roy.franz-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> wrote:
>>
>> This patch series adds EFI stub support for the ARM architecture.
>> Some code that was previously only used by x86/x86_64 is now shared
>> and has been made more general. The stub for ARM is implemented in
>> a similar manner to x86 in that it is a shim layer between EFI and
>> the normal zImage/bzImage boot process, and that an image with the
>> stub configured is bootable as both a zImage and EFI application.
>>
>> This patch now (new for v3) series depends on the
>> "arm: Add [U]EFI runtime services support" patches by leif.lindholm-QSEj5FYQhm64UlQgPVntAg@public.gmane.org
>> The Kconfig option now depends on the "CONFIG_EFI" option that his series
>> adds, and this option will ensure a little endian configuration. Also, the
>> EFI support is used to handle the EFI memory map the stub passes to the kernel.
>> There are some minor changes to be coordinated with the EFI runtime services
>> patch series, so I have put this back to RFC status. These changes should be
>> minor and relate to final device tree bindings.
>>
>> Changes since v2:
>> * EFI bugfix "correct call to free_pages" that patch series
>> depends on now in mainline
>> * remove "-fno-stack-protector" from decompressor Makefile. The current code doesn't
>> trigger the stack protection, so the decompressor now compiles with it still
>> on. Note that there has never been any stack protection in the decompressor
>> since the stack usage doesn't trigger the heuristic in GCC, so right now
>> the "-fno-stack-protector" is a noop.
>> * Changed EFI command line handling to not have a fixed limit.
>> * Change FDT memory allocation to retry with a larger allocation if
>> first educated guess is inadequate.
>> * Correctly set 'SizeOfCode' in PE/COFF header.
>> * Reviewed ".setup" section that is in x86 PE/COFF header. This is used for x86
>> to account for code that is not in the .text section. We don't need this
>> for ARM, as all of our code is in the .text section, or in the PE/COFF header
>> itself.
>> * Moved EFI_STUB_ERROR #define to header file to share between stub C and ASM.
>> * Variety of cleanups and fixes in head.S.
>> * Changed update_fdt_and_exit_boot() to just update the device tree, and
>> renamed appropriately. Memory allocations moved out of this function as
>> well, which enables the retries if the initial FDT size is too small.
>> Note that in order to do the retried allocations, the original FDT and
>> command line memory regions are left allocated. This is OK since the kernel
>> has the memory map and will free these allocations along with the initrd
>> and new fdt allocations.
>> * Added prefix to all prints, reduced number of prints, and reviewed all
>> messages.
>> * Change mixed usage of dtb/fdt to all be fdt or "device tree" in efi-stub.c
>> * remove unnecessary zimage_size variable from relocate_kernel()
>> * correct return types on EFI functions - should be efi_status_t, not int.
>>
>>
>>
>> Changes since V1:
>> * Updated head.S based on feedback from Dave Martin. ARM/THUMB
>> switches now much cleaner.
>> * Broke up changes to x86 and common code into more patches.
>> 10 more patches in this series.
>>
>> Roy Franz (16):
>> Move common EFI stub code from x86 arch code to common location
>> Add system pointer argument to shared EFI stub related functions
>> so they no longer use global system table pointer as they did
>> when part of eboot.c. This code is now shared, so using a
>> global variable as part of the interface is not that nice.
>> Also, by avoiding any global variables in the ARM EFI stub,
>> this allows the code to be position independent without
>> requiring GOT fixups.
>> Rename memory allocation/free functions
>> Add minimum address parameter to efi_low_alloc()
>> rename __get_map() to efi_get_memory_map(), add parameter to
>> optionally return mmap key. The mmap key is required to exit
>> EFI boot services, and allows efi_get_memory_map() to be used
>> for getting final memory map.
>> Enforce minimum alignment of 1 page on allocations. The
>> efi_high_alloc() and efi_low_alloc() functions use the
>> EFI_ALLOCATE_ADDRESS option to the EFI function
>> allocate_pages(), which requires a minimum of page alignment,
>> and rejects all other requests.
>> Allow efi_free() to be called with size of 0, and do nothing in that
>> case.
>> Generalize handle_ramdisks() and rename to handle_cmdline_files().
>> Renames in handle_cmdline_files() to complete generalization.
>> Move EFI_READ_CHUNK_SIZE define to shared location.
>> Add proper definitions for some EFI function pointers.
>> Fix types in EFI calls to match EFI function definitions.
>> resolve warnings found on ARM compile
>> Add strstr to compressed string.c for ARM.
>> Add EFI stub for ARM
>> Add config EFI_STUB for ARM to Kconfig
>>
>> arch/arm/Kconfig | 11 +
>> arch/arm/boot/compressed/Makefile | 15 +-
>> arch/arm/boot/compressed/efi-header.S | 111 +++++++
>> arch/arm/boot/compressed/efi-stub.c | 448 ++++++++++++++++++++++++++++
>> arch/arm/boot/compressed/efi-stub.h | 5 +
>> arch/arm/boot/compressed/head.S | 90 +++++-
>> arch/arm/boot/compressed/string.c | 21 ++
>> arch/x86/boot/compressed/eboot.c | 490 ++-----------------------------
>> arch/x86/boot/compressed/eboot.h | 9 -
>> drivers/firmware/efi/efi-stub-helper.c | 505 ++++++++++++++++++++++++++++++++
>> include/linux/efi.h | 51 +++-
>> 11 files changed, 1263 insertions(+), 493 deletions(-)
>> create mode 100644 arch/arm/boot/compressed/efi-header.S
>> create mode 100644 arch/arm/boot/compressed/efi-stub.c
>> create mode 100644 arch/arm/boot/compressed/efi-stub.h
>> create mode 100644 drivers/firmware/efi/efi-stub-helper.c
>>
>> --
>> 1.7.10.4
>>
>
> Hi Matt,
>
> Do you have any more feedback on the X86 and common code (patches
> 1-13) that needs to be addressed? Mark Salter has a working ARM64 EFI
> stub implemented based on these patches, so the common code has now
> been tested with another architecture, and he has acked these patches.
> If the current patches are OK, can this be queued for 3.12? (and into
> linux-next, if appropriate)
> The ARM portion may take a little longer based on the EFI runtime
> services patch dependencies, but getting the common code merged would
> allow the ARM64 EFI stub work to go forward independently.
>
> I can resend patches 1-13 as a new series of x86/common only changes
> if you would like.
>
> Thanks,
> Roy

Hi Matt,

Any thoughts on taking the x86/common parts for 3.12?

Thanks,
Roy