07 Jun, 2016

1 commit

  • We introduced special "DEBUG_EFI" defines when the efi loader
    support was new. After giving it a bit of thought, turns out
    we really didn't have to - the normal #define DEBUG infrastructure
    works well enough for efi loader as well.

    So this patch switches to the common debug() and #define DEBUG
    way of printing debug information.

    Signed-off-by: Alexander Graf

    Alexander Graf
     

28 May, 2016

3 commits

  • For odroid-c2 (arch-meson) for now disable designware eth as meson
    now needs to do some harder GPIO work.

    Signed-off-by: Tom Rini

    Conflicts:
    lib/efi_loader/efi_disk.c

    Modified:
    configs/odroid-c2_defconfig

    Tom Rini
     
  • Some hardware that is supported by U-Boot can not handle DMA above 32bits.
    For these systems, we need to come up with a way to expose the disk interface
    in a safe way.

    This patch implements EFI specific bounce buffers. For non-EFI cases, this
    apparently was no issue so far, since we can just define our environment
    variables conveniently.

    Signed-off-by: Alexander Graf

    Alexander Graf
     
  • This code does not currently build with driver model enabled for block
    devices. Update it to correct this.

    Signed-off-by: Simon Glass
    Reviewed-by: Alexander Graf

    Simon Glass
     

27 May, 2016

1 commit

  • We can now successfully boot EFI applications from disk, but users
    may want to also run them from a PXE setup.

    This patch implements rudimentary network support, allowing a payload
    to send and receive network packets.

    With this patch, I was able to successfully run grub2 with network
    access inside of QEMU's -M xlnx-ep108.

    Signed-off-by: Alexander Graf

    Alexander Graf
     

19 Apr, 2016

1 commit

  • The payload gets information on where it got loaded from. This includes
    the device as well as file path.

    So far we've treated both as the same thing and always gave it the device
    name. However, in some situations grub2 actually wants to find its loading
    path to find its configuration file.

    So let's split the two semantically separte bits into separate structs and
    pass the loaded file name into our payload when we load it using "load".

    Signed-off-by: Alexander Graf

    Alexander Graf
     

27 Mar, 2016

1 commit

  • The EFI standard defines a simple boot protocol that an EFI payload can use
    to access video output.

    This patch adds support to expose exactly that one (and the mode already in
    use) as possible graphical configuration to an EFI payload.

    With this, I can successfully run grub2 with graphical output.

    Signed-off-by: Alexander Graf

    Alexander Graf
     

16 Mar, 2016

7 commits

  • EFI payloads can query for the device they were booted from. Because
    we have a disconnect between loading binaries and running binaries,
    we passed in a dummy device path so far.

    Unfortunately that breaks grub2's logic to find its configuration
    file from the same device it was booted from.

    This patch adds logic to have the "load" command call into our efi
    code to set the device path to the one we last loaded a binary from.

    With this grub2 properly detects where we got booted from and can
    find its configuration file, even when searching by-partition.

    Signed-off-by: Alexander Graf

    Alexander Graf
     
  • The EFI loader needs to maintain views of memory - general system memory
    windows as well as used locations inside those and potential runtime service
    MMIO windows.

    To manage all of these, add a few helpers that maintain an internal
    representation of the map the similar to how the EFI API later on reports
    it to the application.

    For allocations, the scheme is very simple. We basically allow allocations
    to replace chunks of previously done maps, so that a new LOADER_DATA
    allocation for example can remove a piece of the RAM map. When no specific
    address is given, we just take the highest possible address in the lowest
    RAM map that fits the allocation size.

    Signed-off-by: Alexander Graf
    Tested-by: Simon Glass

    Alexander Graf
     
  • A EFI applications usually want to access storage devices to load data from.

    This patch adds support for EFI disk interfaces. It loops through all block
    storage interfaces known to U-Boot and creates an EFI object for each existing
    one. EFI applications can then through these objects call U-Boot's read and
    write functions.

    Signed-off-by: Alexander Graf
    Reviewed-by: Simon Glass
    Tested-by: Simon Glass
    [trini: Update for various DM changes since posting]
    Signed-off-by: Tom Rini

    Alexander Graf
     
  • After booting has finished, EFI allows firmware to still interact with the OS
    using the "runtime services". These callbacks live in a separate address space,
    since they are available long after U-Boot has been overwritten by the OS.

    This patch adds enough framework for arbitrary code inside of U-Boot to become
    a runtime service with the right section attributes set. For now, we don't make
    use of it yet though.

    We could maybe in the future map U-boot environment variables to EFI variables
    here.

    Signed-off-by: Alexander Graf
    Reviewed-by: Simon Glass
    Tested-by: Simon Glass

    Alexander Graf
     
  • One of the basic EFI interfaces is the console interface. Using it an EFI
    application can interface with the user. This patch implements an EFI console
    interface using getc() and putc().

    Today, we only implement text based consoles. We also convert the EFI Unicode
    characters to UTF-8 on the fly, hoping that everyone managed to jump on the
    train by now.

    Signed-off-by: Alexander Graf
    Reviewed-by: Simon Glass
    Tested-by: Simon Glass

    Alexander Graf
     
  • When an EFI application runs, it has access to a few descriptor and callback
    tables to instruct the EFI compliant firmware to do things for it. The bulk
    of those interfaces are "boot time services". They handle all object management,
    and memory allocation.

    This patch adds support for the boot time services and also exposes a system
    table, which is the point of entry descriptor table for EFI payloads.

    Signed-off-by: Alexander Graf
    Reviewed-by: Simon Glass
    Tested-by: Simon Glass

    Alexander Graf
     
  • EFI uses the PE binary format for its application images. Add support to EFI PE
    binaries as well as all necessary bits for the "EFI image loader" interfaces.

    Signed-off-by: Alexander Graf
    Reviewed-by: Simon Glass
    Tested-by: Simon Glass

    Alexander Graf