Re: [PATCH V6 6/8] Add EFI stub for ARM

From: Roy Franz
Date: Tue Jan 14 2014 - 21:17:19 EST


On Tue, Jan 14, 2014 at 5:47 PM, Roy Franz <roy.franz@xxxxxxxxxx> wrote:
> On Tue, Jan 14, 2014 at 1:05 AM, Ard Biesheuvel
> <ard.biesheuvel@xxxxxxxxxx> wrote:
>> On 10 January 2014 17:30, Roy Franz <roy.franz@xxxxxxxxxx> wrote:
>>> This patch adds EFI stub support for the ARM Linux kernel. The EFI stub
>>> operates similarly to the x86 stub: it is a shim between the EFI firmware
>>> and the normal zImage entry point, and sets up the environment that the
>>> zImage is expecting. This includes loading the initrd (optionaly) and
>>> device tree from the system partition based on the kernel command line.
>>> The stub updates the device tree as necessary, adding entries for EFI
>>> runtime services. The PE/COFF "MZ" header at offset 0 results in the
>>> first instruction being an add that corrupts r5, which is not used by
>>> the zImage interface.
>>>
>>> Signed-off-by: Roy Franz <roy.franz@xxxxxxxxxx>
>>> Acked-by: Grant Likely <grant.likely@xxxxxxxxxx>
>>> ---
>>
>> [...]
>>
>>> diff --git a/arch/arm/boot/compressed/efi-header.S b/arch/arm/boot/compressed/efi-header.S
>>> new file mode 100644
>>> index 0000000..dbb7101
>>> --- /dev/null
>>> +++ b/arch/arm/boot/compressed/efi-header.S
>>> @@ -0,0 +1,117 @@
>>> +@ Copyright (C) 2013 Linaro Ltd; <roy.franz@xxxxxxxxxx>
>>> +@
>>> +@ This file contains the PE/COFF header that is part of the
>>> +@ EFI stub.
>>> +@
>>> +
>>> + .org 0x3c
>>> + @
>>> + @ The PE header can be anywhere in the file, but for
>>> + @ simplicity we keep it together with the MSDOS header
>>> + @ The offset to the PE/COFF header needs to be at offset
>>> + @ 0x3C in the MSDOS header.
>>> + @ The only 2 fields of the MSDOS header that are used are this
>>> + @ PE/COFF offset, and the "MZ" bytes at offset 0x0.
>>> + @
>>> + .long pe_header @ Offset to the PE header.
>>> +
>>> + .align 3
>>> +pe_header:
>>> + .ascii "PE"
>>> + .short 0
>>> +
>>> +coff_header:
>>> + .short 0x01c2 @ ARM or Thumb
>>
>> Could you explain why you are using 0x1c2 (Thumb) here and not 0x1c0 (ARM) ?
>>
>> Cheers,
>> Ard.
>
> Nope. It should be 0x1c0.
>
> Roy

OK, now I resolved the nagging feeling that I had already fixed
this... Right now, the EDK2 UEFI implementation
requires the machine type for ARM to be "0x1c2". I don't think that
this is correct, but correcting this in EDK2 slipped through
the cracks, but is now back on my todo list.

I think that for now we should leave this as 0x1c2 so that the
unpatched EDK2 builds will boot it, and some time after EDK2 is
updated
this can be changed. I'll work on a patch for EDK2 and get the
discussion going on that list to resolve this in EDK2.


Roy
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/