20 Aug, 2018

1 commit

  • Move the A/B slot check to SPL, the A/B slot switch
    workflow is just like what we have in libavb_ab.

    Test: A/B select works fine on imx8m.

    Change-Id: Ie3d827a9be0298b491bf2bc8d48833597fd70e90
    Signed-off-by: Luo Ji

    Luo Ji
     

13 Jun, 2018

1 commit


09 Feb, 2018

2 commits

  • config_fallbacks.h has some logic that sets HAVE_BLOCK_DEVICE
    based on a list of enabled options. Moving HAVE_BLOCK_DEVICE to
    Kconfig allows us to drastically shrink the logic in
    config_fallbacks.h

    Signed-off-by: Adam Ford
    [trini: Rename HAVE_BLOCK_DEVICE to CONFIG_BLOCK_DEVICE]
    Signed-off-by: Tom Rini

    Adam Ford
     
  • config_fallback.h has some logic that checks a variety of options
    and selects LIB_UUID if it hasn't already been selected. This
    will all LIB_UUID in Kconfig and select this option for the list
    of options to allow us to remove the logic from fallbacks

    Signed-off-by: Adam Ford

    Adam Ford
     

08 Feb, 2018

1 commit

  • Commit ff98cb90514d ("part: extract MBR signature from partitions")
    blindly switched allocated by ALLOC_CACHE_ALIGN_BUFFER buffer type from
    "unsigned char" to "legacy_mbr" which caused allocation of size =
    (typeof(legacy_mbr) * dev_desc->blksize) instead of just space enough
    for "legacy_mbr" structure.

    Signed-off-by: Alexey Brodkin
    Cc: Rob Clark
    Cc: Peter Jones
    Cc: Alexander Graf
    Cc: Tom Rini

    Alexey Brodkin
     

19 Dec, 2017

1 commit


07 Dec, 2017

2 commits


30 Nov, 2017

1 commit


06 Nov, 2017

2 commits

  • The check in part_get_info_extended() for a successful partition
    searching misses a condition for extended partition. In case of
    (ext_part_sector == 0), we should anyway mark the partition as found,
    even if it's an extended partition, i.e. (is_extended(pt->sys_ind) == 0).
    Otherwise, the extended partition (type 0x0f) will never be identified,
    and the following recursive call to part_get_info_extended() will get a
    wrong 'part_num' and 'which_part' parameter. In the end, all those
    partitions in extended table will not be identified.

    Let's add the missing OR condition of (ext_part_sector == 0) for
    is_extended() check to fix the problem.

    The issue is discovered by running fastboot flash to an extended
    partition on eMMC.

    $ fastboot flash mmcsda5 cache.img
    target reported max download size of 536870912 bytes
    sending 'mmcsda5' (18796 KB)...
    OKAY [ 2.144s]
    writing 'mmcsda5'...
    FAILED (remote: cannot find partition)
    finished. total time: 2.261s

    Signed-off-by: Shawn Guo

    Shawn Guo
     
  • Before this patch one could receive following errors when executing
    "gpt write" command on machine with cache enabled:

    display5 factory > gpt write mmc ${mmcdev} ${partitions}
    Writing GPT:
    CACHE: Misaligned operation at range [4ef8f7f0, 4ef8f9f0]
    CACHE: Misaligned operation at range [4ef8f9f8, 4ef939f8]
    CACHE: Misaligned operation at range [4ef8f9f8, 4ef939f8]
    CACHE: Misaligned operation at range [4ef8f7f0, 4ef8f9f0]
    success!

    To alleviate this problem - the calloc()s have been replaced with
    malloc_cache_aligned() and memset().

    After those changes the buffers are properly aligned (with both start
    address and size) to SoC cache line.

    Signed-off-by: Lukasz Majewski

    Lukasz Majewski
     

24 Oct, 2017

1 commit

  • the partition starting at 0x4400 is refused with overlap error:
    $> gpt write mmc 0 "name=test,start=0x4400,size=0"
    Writing GPT: Partition overlap
    error!

    even if the 0x4400 is the first available offset for LBA35 with default
    value:
    - MBR=LBA1
    - GPT header=LBA2
    - PTE= 32 LBAs (128 entry), 3 to 34

    And the command to have one partition for all the disk failed also :
    $> gpt write mmc 0 "name=test,size=0"

    After the patch :

    $> gpt write mmc 0 "name=test,size=0"
    Writing GPT: success!
    $> part list mmc 0

    Partition Map for MMC device 0 -- Partition Type: EFI

    Part Start LBA End LBA Name
    Attributes
    Type GUID
    Partition GUID
    1 0x00000022 0x01ce9fde "test"
    attrs: 0x0000000000000000
    type: ebd0a0a2-b9e5-4433-87c0-68b6b72699c7
    type: data
    guid: b4b84b8a-04e3-4000-0036-aff5c9c495b1

    And 0x22 = 34 LBA => offset = 0x4400 is accepted as expected

    Reviewed-by: Łukasz Majewski
    Tested-by: Stephen Warren
    Signed-off-by: Patrick Delaunay

    Patrick Delaunay
     

16 Oct, 2017

2 commits

  • The test and info callbacks into the partition callback struct are
    used by the "part list" command on the command line. That command
    is used by the distro script.

    With verb=1 set, "part list" thus throws a lot of warnings about
    partitions it can't find when an upper layer searches for partitions.

    So let's reduce verbosity to bring it to the same level of noise
    as the other partition targets.

    Signed-off-by: Alexander Graf

    Alexander Graf
     
  • While this goes somewhat against normal coding style we should ensure
    that dev_desc is not NULL before we dereference it in allocation of
    legacy_mbr.

    Reported-by: Coverity (CID: 167292)
    Signed-off-by: Tom Rini

    Tom Rini
     

06 Oct, 2017

1 commit


05 Oct, 2017

1 commit

  • Since commit ff98cb90514d ("part: extract MBR signature from partitions")
    SPL boot on i.MX6 starts to fail:

    U-Boot SPL 2017.09-00221-g0d6ab32 (Oct 02 2017 - 15:13:19)
    Trying to boot from MMC1
    (keep in loop)

    Use the original allocation scheme for the SPL case, so that MX6 boards
    can boot again.

    This is a temporary solution to avoid the boot regression.

    Signed-off-by: Fabio Estevam
    Acked-by: Rob Clark
    Tested-by: Peter Robinson

    Fabio Estevam
     

04 Oct, 2017

1 commit

  • U-Boot widely uses error() as a bit noisier variant of printf().

    This macro causes name conflict with the following line in
    include/linux/compiler-gcc.h:

    # define __compiletime_error(message) __attribute__((error(message)))

    This prevents us from using __compiletime_error(), and makes it
    difficult to fully sync BUILD_BUG macros with Linux. (Notice
    Linux's BUILD_BUG_ON_MSG is implemented by using compiletime_assert().)

    Let's convert error() into now treewide-available pr_err().

    Done with the help of Coccinelle, excluing tools/ directory.

    The semantic patch I used is as follows:

    //
    @@@@
    -error
    +pr_err
    (...)
    //

    Signed-off-by: Masahiro Yamada
    Reviewed-by: Simon Glass
    [trini: Re-run Coccinelle]
    Signed-off-by: Tom Rini

    Masahiro Yamada
     

20 Sep, 2017

1 commit

  • EFI client programs need the signature information from the partition
    table to determine the disk a partition is on, so we need to fill that
    in here.

    Signed-off-by: Peter Jones
    [separated from efi_loader part, and fixed build-errors for non-
    CONFIG_EFI_PARTITION case]
    Signed-off-by: Rob Clark
    Signed-off-by: Alexander Graf

    Peter Jones
     

19 Sep, 2017

1 commit

  • The UEFI spec allows an EFI system partition (ESP, with the bootloader or
    kernel EFI apps on it) to reside on a disk using a "legacy" MBR
    partitioning scheme.
    But in contrast to actual legacy disks the ESP is not marked as
    "bootable" using bit 7 in byte 0 of the legacy partition entry, but is
    instead using partition *type* 0xef (in contrast to 0x0b or 0x0c for a
    normal FAT partition). The EFI spec isn't 100% clear on this, but it even
    seems to discourage the use of the bootable flag for ESPs.
    Also it seems that some EFI implementations (EDK2?) even seem to ignore
    partitions marked as bootable (probably since they believe they contain
    legacy boot code).
    The Debian installer [1] (*not* mini.iso), for instance, contains such an
    MBR, where none of the two partitions are marked bootable, but the ESP
    has clearly type 0xef.
    Now U-Boot cannot find the ESP on such a disk (USB flash drive) and
    fails to load the EFI grub and thus the installer.

    Since it all boils down to the distro bootcmds eventually calling
    "part list -bootable" to find potential boot partitions, it seems logical
    to just add this "partition type is 0xef" condition to the is_bootable()
    implementation.

    This allows the bog standard arm64 Debian-testing installer to boot from
    an USB pen drive on Allwinner A64 boards (Pine64, BananaPi-M64).
    (Ubuntu and other distribution installers don't have a legacy MBR, so
    U-Boot falls back to El Torito there).

    [1] https://cdimage.debian.org/cdimage/daily-builds/daily/arch-latest/arm64/iso-cd/
    Signed-off-by: Andre Przywara
    Reviewed-by: Alexander Graf
    Signed-off-by: Alexander Graf

    Andre Przywara
     

15 Sep, 2017

1 commit

  • Needed to support efi file protocol. The fallback.efi loader wants
    to be able to read the contents of the /EFI directory to find an OS
    to boot.

    Modelled after POSIX opendir()/readdir()/closedir(). Unlike the other
    fs APIs, this is stateful (ie. state is held in the FS_DIR "directory
    stream"), to avoid re-traversing of the directory structure at each
    step. The directory stream must be released with closedir() when it
    is no longer needed.

    Signed-off-by: Rob Clark
    Reviewed-by: Łukasz Majewski
    Reviewed-by: Simon Glass

    Rob Clark
     

07 Sep, 2017

1 commit


04 Sep, 2017

1 commit


03 Sep, 2017

4 commits

  • The current code checks that no partitions overlap with the GPT partition
    table using the offset of the first LBA usable for that partition.

    This works fine, unless you have a partition entry that is further away
    than it usually is and you want to create partitions in the gap between the
    GPT header and the GPT partition entries, for example to reflash a
    bootloader that needs to be set there.

    Rework the test to something a bit smarter that checks whether a partition
    would overlap with either the GPT header or the partition entries, no
    matter where it is on the disk.

    Partitions that do not have a start LBA specified will still start at the
    first LBA usable set in the GPT header, to avoid weird behaviours.

    Signed-off-by: Maxime Ripard
    Reviewed-by: Tom Rini

    Maxime Ripard
     
  • The gpt_fill_pte will need to access the device block size. Let's pass the
    device descriptor as an argument.

    Signed-off-by: Maxime Ripard
    Reviewed-by: Tom Rini

    Maxime Ripard
     
  • The start variable is only used inside a loop, and is never affected inside
    it, so it's a purely local variable.

    In the same way the partition size is accessed several times, so we can
    store it in a variable.

    Signed-off-by: Maxime Ripard
    Reviewed-by: Tom Rini

    Maxime Ripard
     
  • Both the config option and the DT options specify the offset to set the GPT
    at in bytes, yet the code treats those values as block numbers.

    Fix that.

    Signed-off-by: Maxime Ripard
    Reviewed-by: Tom Rini
    Reviewed-by: Philipp Tomsich

    Maxime Ripard
     

27 Aug, 2017

1 commit


16 Aug, 2017

1 commit

  • We are now using an env_ prefix for environment functions. Rename these
    two functions for consistency. Also add function comments in common.h.

    Quite a few places use getenv() in a condition context, provoking a
    warning from checkpatch. These are fixed up in this patch also.

    Suggested-by: Wolfgang Denk
    Signed-off-by: Simon Glass

    Simon Glass
     

14 Aug, 2017

1 commit


04 Aug, 2017

3 commits


12 May, 2017

1 commit


06 Apr, 2017

1 commit


21 Mar, 2017

1 commit

  • Some architectures require their SPL loader at a fixed address within
    the first 16KB of the disk. To avoid an overlap with the partition
    entries of the EFI partition table, the first safe offset (in bytes,
    from the start of the device) for the entries can be set through
    CONFIG_EFI_PARTITION_ENTRIES_OFF (via Kconfig)

    When formatting a device with an EFI partition table, we may need to
    leave a gap between the GPT header (always in LBA 1) and the partition
    entries. The GPT header already contains a field to specify the
    on-disk location, which has so far always been set to LBA 2. With this
    change, a configurable offset will be translated into a LBA address
    indicating where to put the entries.

    Now also allows an override via device-tree using a config-node (see
    doc/device-tree-bindings/config.txt for documentation).

    Tested (exporting an internal MMC formatted with this) against Linux,
    MacOS X and Windows.

    Signed-off-by: Philipp Tomsich
    Reviewed-by: Simon Glass
    [trini: __maybe_unused on config_offset to avoid warning]
    Signed-off-by: Tom Rini

    Philipp Tomsich
     

18 Mar, 2017

1 commit


18 Feb, 2017

1 commit

  • the socfpga bootrom supports mmc booting from either a raw image
    starting at 0x0, or from a partition of type 0xa2. This patch
    adds support for locating the boot image in the first type 0xa2
    partition found.

    Assigned a partition number of -1 will cause a search for a
    partition of type CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION_TYPE
    and use it to find the u-boot image

    Signed-off-by: Dalon Westergreen

    Dalon Westergreen
     

09 Feb, 2017

1 commit

  • On some cases the first 440 bytes of MBR are used to keep an additional
    information for ROM boot loader. 'gpt write' command doesn't preserve
    that area and makes boot code gone.

    Preserve boot code area when run 'gpt write' command.

    Signed-off-by: Vincent Tinelli
    Signed-off-by: Brennan Ashton
    Signed-off-by: Andy Shevchenko
    Reviewed-by: Simon Glass

    Vincent Tinelli
     

28 Jan, 2017

2 commits