03 Dec, 2018

1 commit

  • All our handles point to a struct efi_object. So let's define the
    efi_handle_t accordingly. This helps us to discover coding errors much
    more easily. This becomes evident by the corrections to the usage of
    handles in this patch.

    Rename variable image_handle to image_obj where applicable.

    Signed-off-by: Heinrich Schuchardt
    Signed-off-by: Alexander Graf

    Heinrich Schuchardt
     

15 Nov, 2018

1 commit

  • When a driver declares DM_FLAG_PRE_RELOC flag, it wishes to be
    bound before relocation. However due to a bug in the DM core,
    the flag only takes effect when devices are statically declared
    via U_BOOT_DEVICE(). This bug has been fixed recently by commit
    "dm: core: Respect drivers with the DM_FLAG_PRE_RELOC flag in
    lists_bind_fdt()", but with the fix, it has a side effect that
    all existing drivers that declared DM_FLAG_PRE_RELOC flag will
    be bound before relocation now. This may expose potential boot
    failure on some boards due to insufficient memory during the
    pre-relocation stage.

    To mitigate this potential impact, the following changes are
    implemented:

    - Remove DM_FLAG_PRE_RELOC flag in the driver, if the driver
    only supports configuration from device tree (OF_CONTROL)
    - Keep DM_FLAG_PRE_RELOC flag in the driver only if the device
    is statically declared via U_BOOT_DEVICE()
    - Surround DM_FLAG_PRE_RELOC flag with OF_CONTROL check, for
    drivers that support both statically declared devices and
    configuration from device tree

    Signed-off-by: Bin Meng
    Reviewed-by: Simon Glass

    Bin Meng
     

30 Aug, 2018

1 commit


20 Jul, 2018

1 commit


24 Jun, 2018

2 commits

  • The use_uart assignment should follow immediately after the call to
    exit_boot_services(), in case we want some debug output after that.

    Signed-off-by: Bin Meng
    Reviewed-by: Simon Glass

    Bin Meng
     
  • Currently efi.h determines a few bits of its environment according to
    config options. This falls apart with the efi stub support which may
    result in efi.h getting pulled into the stub as well as real U-Boot
    code. In that case, one may be 32bit while the other one is 64bit.

    This patch changes the conditionals to use compiler provided defines
    instead. That way we always adhere to the build environment we're in
    and the definitions adjust automatically.

    Signed-off-by: Alexander Graf
    Reviewed-by: Bin Meng
    Tested-by: Bin Meng
    [bmeng: added some comments to describe the __x86_64__ check]
    Signed-off-by: Bin Meng
    Reviewed-by: Simon Glass

    Alexander Graf
     

17 Jun, 2018

2 commits

  • If UEFI BIOS has the graphics output protocol (GOP), let's pass its
    information to U-Boot payload so that U-Boot can utilize it (eg:
    an EFI framebuffer driver).

    Signed-off-by: Bin Meng
    Reviewed-by: Simon Glass

    Bin Meng
     
  • UEFI specifies the calling convention used in Microsoft compilers;
    first arguments of a function are passed in (%rcx, %rdx, %r8, %r9).

    All other compilers use System V ABI by default, passing first integer
    arguments of a function in (%rdi, %rsi, %rdx, %rcx, %r8, %r9).

    These ABI also specify different sets of registers that must be preserved
    across function calls (callee-saved).

    GCC allows using the Microsoft calling convention by adding the ms_abi
    attribute to a function declaration.

    Current EFI implementation in U-Boot specifies EFIAPI for efi_main()
    in the test apps but uses default calling convention in lib/efi.

    Save efi_main() arguments in the startup code on x86_64;
    use EFI calling convention for _relocate() on x86_64;
    consistently use EFI calling convention for efi_main() everywhere.

    Signed-off-by: Ivan Gorinov
    Reviewed-by: Alexander Graf
    Reviewed-by: Bin Meng
    Tested-by: Bin Meng

    Ivan Gorinov
     

13 Jun, 2018

2 commits


07 May, 2018

1 commit

  • When U-Boot started using SPDX tags we were among the early adopters and
    there weren't a lot of other examples to borrow from. So we picked the
    area of the file that usually had a full license text and replaced it
    with an appropriate SPDX-License-Identifier: entry. Since then, the
    Linux Kernel has adopted SPDX tags and they place it as the very first
    line in a file (except where shebangs are used, then it's second line)
    and with slightly different comment styles than us.

    In part due to community overlap, in part due to better tag visibility
    and in part for other minor reasons, switch over to that style.

    This commit changes all instances where we have a single declared
    license in the tag as both the before and after are identical in tag
    contents. There's also a few places where I found we did not have a tag
    and have introduced one.

    Signed-off-by: Tom Rini

    Tom Rini
     

28 Apr, 2018

1 commit


30 Mar, 2018

1 commit

  • The get_codeseg32() wants to know if a passed in descriptor has
    flag GDT_NOTSYS set (desc & GDT_NOTSYS), not whether desc and
    GDT_NOTSYS are not != 0 (desk && GDT_NOTSYS).

    This is an obvious typo. Fix it up.

    Signed-off-by: Alexander Graf
    Reviewed-by: Bin Meng

    Alexander Graf
     

06 Dec, 2017

1 commit

  • Commit f5a2a93892f ("efi_loader: consistently use efi_uintn_t in boot
    services") changed the internal EFI API header without adapting its existing
    EFI stub users. Let's adapt the EFI stub as well.

    Fixes: f5a2a93892f ("efi_loader: consistently use efi_uintn_t in boot services")
    Signed-off-by: Alexander Graf
    Reviewed-by: Heinrich Schuchardt

    Alexander Graf
     

27 Jul, 2017

1 commit

  • Some platforms have very limited SRAM to run SPL code, so there may
    not be the same amount space for a malloc pool before relocation in
    the SPL stage as the normal U-Boot stage.

    Make SPL and (the full) U-Boot stage use independent SYS_MALLOC_F_LEN,
    so the size of pre-relocation malloc pool can be configured memory
    space independently.

    Signed-off-by: Andy Yan
    Reviewed-by: Tom Rini
    Acked-by: Philipp Tomsich
    Reviewed-by: Philipp Tomsich
    [fixed up commit-message:]
    Signed-off-by: Philipp Tomsich

    Andy Yan
     

15 Nov, 2016

1 commit

  • At present we use a CONFIG option in efi.h to determine whether we are
    building the EFI stub or not. This means that the same header cannot be
    used for EFI_LOADER support. The CONFIG option will be enabled for the
    whole build, even when not building the stub.

    Use a different define instead, set up just for the files that make up the
    stub.

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

    Simon Glass
     

30 Aug, 2016

1 commit


27 Mar, 2016

1 commit


21 Oct, 2015

1 commit


05 Aug, 2015

4 commits

  • The EFI stub can pass a table to U-Boot with information about the memory map
    Potentially other things will follow. Add a way to access this table.

    Signed-off-by: Simon Glass
    Reviewed-by: Bin Meng

    Simon Glass
     
  • Most EFI implementations use 64-bit. Add a way to build U-Boot as a 64-bit
    EFI payload. The payload unpacks a (32-bit) U-Boot and starts it. This can
    be enabled for x86 boards at present.

    Signed-off-by: Simon Glass
    Improvements to how the payload is built:
    Signed-off-by: Bin Meng
    Reviewed-by: Bin Meng
    Tested-by: Bin Meng

    Simon Glass
     
  • It is useful to be able to load U-Boot onto a board even if is it already
    running EFI. This can allow access to the U-Boot command interface, flexible
    booting options and easier development.

    The easiest way to do this is to build U-Boot as a binary blob and have an
    EFI stub copy it into RAM. Add support for this feature, targeting 32-bit
    initially.

    Also add a way to detect when U-Boot has been loaded via a stub. This goes
    in common.h since it needs to be widely available so that we avoid redoing
    initialisation that should be skipped.

    Signed-off-by: Simon Glass
    Improvements to how the payload is built:
    Signed-off-by: Bin Meng
    Reviewed-by: Bin Meng
    Tested-by: Bin Meng

    Simon Glass
     
  • When running as an EFI application, U-Boot must request memory from EFI,
    and provide access to the boot services U-Boot needs.

    Add library code to perform these tasks. This includes efi_main() which is
    the entry point from EFI. U-Boot is built as a shared library.

    Signed-off-by: Simon Glass
    Reviewed-by: Bin Meng

    Simon Glass