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

Roy Franz roy.franz at linaro.org
Fri Aug 16 20:16:09 EDT 2013


On Tue, Aug 13, 2013 at 10:58 AM, Roy Franz <roy.franz at linaro.org> wrote:
> On Fri, Aug 9, 2013 at 4:26 PM, Roy Franz <roy.franz at linaro.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 at linaro.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



More information about the linux-arm-kernel mailing list