oweals/u-boot.git
5 years agoefi_loader: create fdt reservation before copy
Heinrich Schuchardt [Sun, 18 Nov 2018 16:58:53 +0000 (17:58 +0100)]
efi_loader: create fdt reservation before copy

When copying the device we must ensure that the copy does not fall into a
memory area reserved by the same.

So let's change the sequence: first create memory reservations and then
copy the device tree.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi_loader: fix memory mapping for sandbox
Heinrich Schuchardt [Sun, 18 Nov 2018 16:58:52 +0000 (17:58 +0100)]
efi_loader: fix memory mapping for sandbox

The sandbox is using a virtual address space which is neither the physical
address space of the operating system nor the virtual address space in
which Linux aplications live. The addresses used insided the flattened
device tree use this sandbox virtual address space. The EFI subsystem uses
the virtual address space of the operating system and this is where the fdt
is stored.

Fix all incorrect addresses for the fdt in cmd/bootefi.cmd.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agofdt_support: fdt reservations on the sandbox
Heinrich Schuchardt [Sun, 18 Nov 2018 16:58:51 +0000 (17:58 +0100)]
fdt_support: fdt reservations on the sandbox

On the sandbox the memory addresses in the device tree refer to the virtual
address space of the sandbox. This implies that the memory reservations for
the fdt also have to be converted to this address space.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agofdt: sandbox: correct use of ${fdtcontroladdr}
Heinrich Schuchardt [Sun, 18 Nov 2018 16:58:50 +0000 (17:58 +0100)]
fdt: sandbox: correct use of ${fdtcontroladdr}

The sandbox uses a virtual address space that is neither the physical nor
the virtual address space of the operating system. All address used on the
command line live in this address space. So also the environment variable
${fdtcontroladdr} has to be in this address space.

Commands like bootefi and booti receive the fdt address as parameter.
Without the patch ${fdtcontroladdr} cannot be used as parameter value on
the sandbox.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi_loader: macro efi_size_in_pages()
Heinrich Schuchardt [Sun, 18 Nov 2018 16:58:49 +0000 (17:58 +0100)]
efi_loader: macro efi_size_in_pages()

When allocating EFI memory pages the size in bytes has to be converted to
pages.

Provide a macro efi_size_in_pages() for this conversion.
Use it in the EFI subsystem and correct related comments.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi_selftest: building sandbox with EFI_SELFTEST
Heinrich Schuchardt [Sun, 18 Nov 2018 16:58:48 +0000 (17:58 +0100)]
efi_selftest: building sandbox with EFI_SELFTEST

Enable building the sandbox with CONFIG_EFI_SELFTEST.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi_selftest: add test for memory allocation
Heinrich Schuchardt [Sun, 18 Nov 2018 16:58:47 +0000 (17:58 +0100)]
efi_selftest: add test for memory allocation

This unit test checks the following runtime services:
AllocatePages, FreePages, GetMemoryMap

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi_loader: eliminate sandbox addresses
Heinrich Schuchardt [Sun, 18 Nov 2018 16:58:46 +0000 (17:58 +0100)]
efi_loader: eliminate sandbox addresses

Do not use the sandbox's virtual address space for the internal structures
of the memory map. This way we can eliminate a whole lot of unnecessary
conversions.

The only conversion remaining is the one when adding known memory.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi: Rename bootefi_test_finish() to bootefi_run_finish()
Simon Glass [Mon, 26 Nov 2018 03:14:39 +0000 (20:14 -0700)]
efi: Rename bootefi_test_finish() to bootefi_run_finish()

This function can be used from do_bootefi_exec() so that we use mostly the
same code for a normal EFI application and an EFI test.

Rename the function and use it in both places.

Signed-off-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi: Create a function to set up for running EFI code
Simon Glass [Mon, 26 Nov 2018 03:14:38 +0000 (20:14 -0700)]
efi: Create a function to set up for running EFI code

There is still duplicated code in efi_loader for tests and normal
operation.

Add a new bootefi_run_prepare() function which holds common code used to
set up U-Boot to run EFI code. Make use of this from the existing
bootefi_test_prepare() function, as well as do_bootefi_exec().

Also shorten a few variable names.

Signed-off-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi: Split out test init/uninit into functions
Simon Glass [Mon, 26 Nov 2018 03:14:37 +0000 (20:14 -0700)]
efi: Split out test init/uninit into functions

The functions in bootefi are very long because they mix high-level code
and control with the low-level implementation. To help with this, create
functions which handle preparing for running the test and cleaning up
afterwards.

Also shorten the awfully long variable names here.

Signed-off-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi: Check for failure to create objects in selftest
Simon Glass [Mon, 26 Nov 2018 03:14:36 +0000 (20:14 -0700)]
efi: Check for failure to create objects in selftest

At present a few error conditions are not checked. Before refactoring
this code, add some basic checks. Note that this code still leaks memory
in the event of error. This will be tackled after the refactor.

Signed-off-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi_loader: Reserve unaccessible memory
Alexander Graf [Fri, 30 Nov 2018 20:24:56 +0000 (21:24 +0100)]
efi_loader: Reserve unaccessible memory

On some systems, not all RAM may be usable within U-Boot. Maybe the
memory maps are incomplete, maybe it's used as workaround for broken
DMA. But whatever the reason may be, a platform can say that it does
not wish to have its RAM accessed above a certain address by defining
board_get_usable_ram_top().

In the efi_loader world, we ignored that hint, mostly because very few
boards actually have real restrictions around this.

So let's honor the board's wish to not access high addresses during
boot time. The best way to do so is by indicating the respective pages
as "allocated by firmware". That way, Operating Systems will still
use the pages after boot, but before boot no allocation will use them.

Reported-by: Baruch Siach <baruch@tkos.co.il>
Signed-off-by: Alexander Graf <agraf@suse.de>
Reviewed-by: Stephen Warren <swarren@nvidia.com>
Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Tested-by: Baruch Siach <baruch@tkos.co.il>
5 years agoefi_selftest: incorrect use of bitwise or
Heinrich Schuchardt [Sun, 25 Nov 2018 14:21:40 +0000 (15:21 +0100)]
efi_selftest: incorrect use of bitwise or

We should use a logical or when combining logical values.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agosandbox: smbios: Update to support sandbox
Simon Glass [Thu, 22 Nov 2018 20:46:37 +0000 (13:46 -0700)]
sandbox: smbios: Update to support sandbox

At present this code casts addresses to pointers so cannot be used with
sandbox. Update it to use mapmem instead.

Signed-off-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoRevert "efi_loader: remove efi_exit_caches()"
Alexander Graf [Thu, 15 Nov 2018 20:23:47 +0000 (21:23 +0100)]
Revert "efi_loader: remove efi_exit_caches()"

This reverts commit 3170db63c41a2eda6ee6573353bb4de8c7c1b9d5.

It reportedly breaks OpenBSD/armv7 booting and I've already received
complaints from people that it breaks some Linux armv7 systems as well.

We'll have to give this whole caching story a good bit more thought.

Reported-by: Jonathan Gray <jsg@jsg.id.au>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi_loader: use u16* for UTF16 strings
Heinrich Schuchardt [Mon, 5 Nov 2018 19:22:12 +0000 (20:22 +0100)]
efi_loader: use u16* for UTF16 strings

We should be consistent in the types that we use to store Unicode strings.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi_loader: SetVirtualAddressMap() should return EFI_UNSUPPORTED
AKASHI Takahiro [Wed, 14 Nov 2018 07:18:07 +0000 (16:18 +0900)]
efi_loader: SetVirtualAddressMap() should return EFI_UNSUPPORTED

See UEFI specification 2.7, section 8.4.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi_loader: correct a function prototype of QueryCapsuleCapabilities()
AKASHI Takahiro [Wed, 14 Nov 2018 07:18:53 +0000 (16:18 +0900)]
efi_loader: correct a function prototype of QueryCapsuleCapabilities()

See UEFI specification v2.7, section 8.5.3.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi_loader: correct efi_add_known_memory()
Heinrich Schuchardt [Mon, 12 Nov 2018 17:55:24 +0000 (18:55 +0100)]
efi_loader: correct efi_add_known_memory()

If a memory bank is not EFI_PAGE_SIZE aligned efi_add_known_memory() the
number of memory pages may be incorrectly calculated.

We have to round up the start address and to round down the end address
to determine which complete pages are provided by the memory bank.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi_loader: carving out memory reservations
Heinrich Schuchardt [Mon, 12 Nov 2018 17:55:23 +0000 (18:55 +0100)]
efi_loader: carving out memory reservations

The "Devicetree Specification 0.2" does not prescribe that memory
reservations must be EFI page aligned. So let's not make such an
assumption in our code.

Do not carve out the pages for the device tree. This memory area is
already marked as EFI_RUNTIME_SERVICES_DATA.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi_loader: memory reservation for fdt
Heinrich Schuchardt [Mon, 12 Nov 2018 17:55:22 +0000 (18:55 +0100)]
efi_loader: memory reservation for fdt

In copy_fdt() we allocate EFI pages for the fdt plus extra 12 KiB as
EFI_RUNTIME_SERVICES_DATA. Afterwards in efi_install_fdt() we overwrite
part of this memory allocation by marking it as EFI_BOOT_SERVICES_DATA.

Remove the code marking the fdt as EFI_BOOT_SERVICES_DATA.

Cf. commit 17ff6f02f5ad ("efi_loader: store DT in EFI_RUNTIME_SERVICES_DATA
memory")

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi_loader: do not use unsupported printf code
Heinrich Schuchardt [Mon, 12 Nov 2018 02:37:05 +0000 (03:37 +0100)]
efi_loader: do not use unsupported printf code

Using %zu for efi_intn_t (ssize_t) creates a build warning. Anyway %zu is
not supported by efi_st_error(). So let's convert to int.

Our implementation of StriColl() only returns -1, 0, or 1.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi_loader: Ensure memory allocations are page aligned
Alexander Graf [Sun, 4 Nov 2018 23:30:46 +0000 (00:30 +0100)]
efi_loader: Ensure memory allocations are page aligned

When the max_addr parameter of efi_find_free_memory() is within bounds
of an existing map and fits the reservation, we just return that address
as allocation value.

That breaks however if max_addr is not page aligned. So ensure that it
always comes to us page aligned, simplifying the allocation logic.

Without this, I've seen breakage where we were allocating pages at -1U
(32bit) which fits into a region that spans beyond 0x100000000. In that
case, we would return 0xffffffff as a valid memory allocation, although
we usually do guarantee they are all page aligned.

Fix this by aligning the max address argument always.

Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi_loader: Handle RELA absolute relocations properly
Alexander Graf [Sun, 4 Nov 2018 21:25:22 +0000 (22:25 +0100)]
efi_loader: Handle RELA absolute relocations properly

With RELA absolute relocations, the relocation target contains our link
offset which we need to remove from the equation again. We did this
properly in the relative relocation path, but not in the absolute one.

So let's do this for the absolute one as well. That way, u-boot can have
a TEXT_OFFSET of != 0 and still relocate itself properly.

This fixes a bug where efi_loader did not work on the RISC-V QEMU port.
With this patch, I can successfully run UEFI applications on the RISC-V
QEMU port.

Reported-by: Auer, Lukas <lukas.auer@aisec.fraunhofer.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
Tested-by: Bin Meng <bmeng.cn@gmail.com>
Tested-by: Lukas Auer <lukas.auer@aisec.fraunhofer.de>
5 years agodistro: Imply USB_STORAGE when USB is available
Alexander Graf [Thu, 18 Oct 2018 07:33:03 +0000 (09:33 +0200)]
distro: Imply USB_STORAGE when USB is available

When you support distro boot and you support USB, you usually want to
also support booting from USB storage.

Reflect that in the Kconfig, so that we don't have to explicitly add
USB storage support to every defconfig individually.

Reported-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agousb: Do not compile USB_STORAGE with BLK && !DM_USB
Alexander Graf [Fri, 19 Oct 2018 12:41:01 +0000 (14:41 +0200)]
usb: Do not compile USB_STORAGE with BLK && !DM_USB

The USB storage driver does not compile when CONFIG_BLK is set,
but DM_USB is not set, as we're missing the DM device links for
CONFIG_BLK enabled code paths.

So far it looks like nobody fell into this trap, because no board
enabled CONFIG_BLK and CONFIG_USB_STORAGE while not enabling
CONFIG_DM_USB, but we should still reflect that dependency properly
in Kconfig so that implicit enabling of CONFIG_USB_STORAGE works.

Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi_loader: fix typos
Heinrich Schuchardt [Thu, 18 Oct 2018 19:51:38 +0000 (21:51 +0200)]
efi_loader: fix typos

Fix typos in EFI subsystem comments.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi_selftest: do not write to linker generated array
Heinrich Schuchardt [Fri, 19 Oct 2018 05:51:26 +0000 (07:51 +0200)]
efi_selftest: do not write to linker generated array

Linker generated arrays may be stored in code sections of memory that are
not writable. So let's allocate setup_ok as an array at runtime.

This avoids an illegal memory access observed in the sandbox.

Reported-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi_loader: PSCI reset and shutdown
Heinrich Schuchardt [Thu, 18 Oct 2018 10:29:40 +0000 (12:29 +0200)]
efi_loader: PSCI reset and shutdown

When an operating system started via bootefi tries to reset or power off
this is done by calling the EFI runtime ResetSystem(). On most ARMv8 system
the actual reset relies on PSCI. Depending on whether the PSCI firmware
resides the hypervisor (EL2) or in the secure monitor (EL3) either an HVC
or an SMC command has to be issued.

The current implementation always uses SMC. This results in crashes on
systems where the PSCI firmware is implemented in the hypervisor, e.g.
qemu-arm64_defconfig.

The logic to decide which call is needed based on the device tree is
already implemented in the PSCI firmware driver. During the EFI runtime
the device driver model is not available. But we can minimize code
duplication by merging the EFI runtime reset and poweroff code with
the PSCI firmware driver.

As the same HVC/SMC problem is also evident for the ARMv8 do_poweroff
and reset_misc routines let's move them into the same code module.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Sumit Garg <sumit.garg@linaro.org>
Tested-by: Sumit Garg <sumit.garg@linaro.org>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi_loader: fix typos in efi_device_path.c
Heinrich Schuchardt [Wed, 17 Oct 2018 19:55:24 +0000 (21:55 +0200)]
efi_loader: fix typos in efi_device_path.c

Fix some typos in comments.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi_loader: unset CONFIG_EFI_LOADER on vf610twr
Heinrich Schuchardt [Tue, 16 Oct 2018 16:47:58 +0000 (18:47 +0200)]
efi_loader: unset CONFIG_EFI_LOADER on vf610twr

vf610twr_defconfig and vf610twr_nand_defconfig suffer from tight memory
restrictions. Disable CONFIG_EFI_LOADER for these boards.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi_loader: add efi_dp_from_name()
AKASHI Takahiro [Wed, 17 Oct 2018 07:32:03 +0000 (16:32 +0900)]
efi_loader: add efi_dp_from_name()

Factor out efi_set_bootdev() and extract efi_dp_from_name().
This function will be used to set a boot device in efishell command.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agofs: update fs_dev_part in fs_set_blk_dev_with_part()
AKASHI Takahiro [Wed, 17 Oct 2018 07:32:02 +0000 (16:32 +0900)]
fs: update fs_dev_part in fs_set_blk_dev_with_part()

As in the case of fs_set_blk_dev(), fs_set_blk_dev_with_part() should
maintain and update fs_dev_part whenever called.

Without this patch, a problem will come up when an efi binary associated
with efi's BOOTxxxx variable is invoked via "bootefi bootmgr".

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoriscv: efi: Generate Microsoft PE format compliant images
Bin Meng [Tue, 2 Oct 2018 14:39:34 +0000 (07:39 -0700)]
riscv: efi: Generate Microsoft PE format compliant images

Per Microsoft PE Format documentation [1], PointerToSymbolTable and
NumberOfSymbols should be zero for an image in the COFF file header.
Currently the COFF file header is hardcoded on RISC-V and these two
members are not zero.

This updates the hardcoded structure to clear these two members, as
well as setting the flag IMAGE_FILE_LOCAL_SYMS_STRIPPED so that we
can generate compliant *.efi images.

[1] https://docs.microsoft.com/zh-cn/windows/desktop/Debug/pe-format

Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoarm: efi: Generate Microsoft PE format compliant images
Bin Meng [Tue, 2 Oct 2018 14:39:33 +0000 (07:39 -0700)]
arm: efi: Generate Microsoft PE format compliant images

Per Microsoft PE Format documentation [1], PointerToSymbolTable and
NumberOfSymbols should be zero for an image in the COFF file header.
Currently the COFF file header is hardcoded on ARM and these two
members are not zero.

This updates the hardcoded structure to clear these two members, as
well as setting the flag IMAGE_FILE_LOCAL_SYMS_STRIPPED so that we
can generate compliant *.efi images.

[1] https://docs.microsoft.com/zh-cn/windows/desktop/Debug/pe-format

Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agope.h: Add characteristics defines
Bin Meng [Tue, 2 Oct 2018 14:39:32 +0000 (07:39 -0700)]
pe.h: Add characteristics defines

This adds characteristics macros as defined by the Microsoft PE
Format documentation [1].

[1] https://docs.microsoft.com/zh-cn/windows/desktop/Debug/pe-format

Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agox86: efi: app: Generate Microsoft PE format compliant image
Bin Meng [Tue, 2 Oct 2018 14:39:31 +0000 (07:39 -0700)]
x86: efi: app: Generate Microsoft PE format compliant image

Per Microsoft PE Format documentation [1], PointerToSymbolTable and
NumberOfSymbols should be zero for an image in the COFF file header.
Currently U-Boot is generating u-boot-app.efi in which these two
members are not zero.

This updates the build rules to tell linker to remove the symbol
table completely so that we can generate compliant *.efi images.

[1] https://docs.microsoft.com/zh-cn/windows/desktop/Debug/pe-format

Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agox86: efi: payload: Generate Microsoft PE format compliant image
Bin Meng [Tue, 2 Oct 2018 14:39:30 +0000 (07:39 -0700)]
x86: efi: payload: Generate Microsoft PE format compliant image

Per Microsoft PE Format documentation [1], PointerToSymbolTable and
NumberOfSymbols should be zero for an image in the COFF file header.
Currently U-Boot is generating u-boot-payload.efi image in which
these two members are not zero.

This updates the build rules to tell linker to remove the symbol
table completely so that we can generate compliant *.efi images.

[1] https://docs.microsoft.com/zh-cn/windows/desktop/Debug/pe-format

Reported-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi_loader: Generate Microsoft PE format compliant images
Bin Meng [Tue, 2 Oct 2018 14:39:29 +0000 (07:39 -0700)]
efi_loader: Generate Microsoft PE format compliant images

Per Microsoft PE Format documentation [1], PointerToSymbolTable and
NumberOfSymbols should be zero for an image in the COFF file header.
Currently U-Boot is generating *.efi images (eg: helloworld.efi) in
which these two members are not zero.

This updates the build rules to tell linker to remove the symbol
table completely so that we can generate compliant *.efi images.

[1] https://docs.microsoft.com/zh-cn/windows/desktop/Debug/pe-format

Reported-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi_loader: UninstallMultipleProtocolInterfaces error code
Heinrich Schuchardt [Mon, 24 Sep 2018 17:57:27 +0000 (19:57 +0200)]
efi_loader: UninstallMultipleProtocolInterfaces error code

If UninstallMultipleProtocolInterfaces fails, we sometimes return the wrong
status code. The UEFI spec mandates to always return EFI_INVALID_PARAMETER.

Update unit test.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi_selftest: use CR LF in helloworld
Heinrich Schuchardt [Mon, 24 Sep 2018 21:53:51 +0000 (23:53 +0200)]
efi_selftest: use CR LF in helloworld

The UEFI spec defines that a line feed moves the cursor to the next line
and (only) a carriage return moves the cursor to the beginning of the line.

So we should issue CR LF when we want to get to the start of the next line.

Add some comments.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi_loader: rename parent to header
Heinrich Schuchardt [Wed, 26 Sep 2018 03:27:56 +0000 (05:27 +0200)]
efi_loader: rename parent to header

Rename the component parent of some EFI objects to header. This avoids
misunderstandings.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi_loader: eliminate handle member
Heinrich Schuchardt [Wed, 26 Sep 2018 03:27:55 +0000 (05:27 +0200)]
efi_loader: eliminate handle member

A pointer to a struct efi_object is a handle. We do not need any handle
member in this structure. Let's eliminate it.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi_loader: typedef struct efi_object *efi_handle_t
Heinrich Schuchardt [Wed, 26 Sep 2018 03:27:54 +0000 (05:27 +0200)]
efi_loader: typedef struct efi_object *efi_handle_t

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 <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi_selftest: fix typos
Heinrich Schuchardt [Thu, 27 Sep 2018 18:44:40 +0000 (20:44 +0200)]
efi_selftest: fix typos

fix typos
correct the header comment of efi_selftest_variables.c

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi_loader: delete handles
Heinrich Schuchardt [Fri, 28 Sep 2018 20:14:17 +0000 (22:14 +0200)]
efi_loader: delete handles

When the last protocol interface has been uninstalled remove the handle.

Adjust ReinstallProtocol so that it does not remove the handle.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi_loader: implement EFI_RESET_SHUTDOWN at boot time
Heinrich Schuchardt [Tue, 16 Oct 2018 05:44:53 +0000 (07:44 +0200)]
efi_loader: implement EFI_RESET_SHUTDOWN at boot time

Allow an EFI application to shut down the system.

If EFI_RESET_SHUTDOWN is issued call do_poweroff().

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi_selftest: test handling of exceptions
Heinrich Schuchardt [Wed, 26 Sep 2018 17:05:58 +0000 (19:05 +0200)]
efi_selftest: test handling of exceptions

Test the handling of execptions by trying to execute an undefined
instruction. For 32bit ARM we expect \selftest to be listed as loaded
image.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agoefi_selftest: simplify lib/efi_selftest/Makefile
Heinrich Schuchardt [Wed, 26 Sep 2018 17:03:33 +0000 (19:03 +0200)]
efi_selftest: simplify lib/efi_selftest/Makefile

We should not make anything in lib/efi_selftest if
CONFIG_CMD_BOOTEFI_SELFTEST is not defined.

We can make that test in lib/Makefile

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
5 years agodrivers: rtc: correctly convert seconds to time structure
Heinrich Schuchardt [Sat, 1 Dec 2018 22:14:10 +0000 (23:14 +0100)]
drivers: rtc: correctly convert seconds to time structure

Variable 'days' must be defined as signed int. Otherwise the conversion
fails for some dates, e.g. 2004-08-25. Cf function rtc_time64_to_tm() in
the Linux kernel source.

Fixes: 992c1db45591 "drivers: rtc: resolve year 2038 problem in rtc_to_tm"
Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
5 years agoMerge tag 'for-master-20181130' of git://git.denx.de/u-boot-rockchip
Tom Rini [Sat, 1 Dec 2018 19:17:27 +0000 (14:17 -0500)]
Merge tag 'for-master-20181130' of git://git.denx.de/u-boot-rockchip

Improvements:
- RK3188 USB-UART functionality
- errors triggering a hard-stop in SPL on the RK3399 are reported
- Rockchip RV1108 (SoC) support
- MicroCrystal RV3029 (RTC) DM driver

Fixes:
- RK3188 early UART setup
- limit SD-card frequency to 40MHz on the RK3399-Q7
- MIPI fixes
- RK3399 CPUB clock initialisation

5 years agoMerge tag 'pull-30nov18' of git://git.denx.de/u-boot-dm
Tom Rini [Fri, 30 Nov 2018 22:09:50 +0000 (17:09 -0500)]
Merge tag 'pull-30nov18' of git://git.denx.de/u-boot-dm

Fix sound on sandbox
Convert TPM fully to DM
Tidy up sandbox I2C emulation
Add a 'make qcheck' target for faster testing
A few other misc things
(dropped the final patch which breaks clang for some reason)

5 years agoMerge tag 'mips-pull-2018-11-30' of git://git.denx.de/u-boot-mips
Tom Rini [Fri, 30 Nov 2018 22:09:33 +0000 (17:09 -0500)]
Merge tag 'mips-pull-2018-11-30' of git://git.denx.de/u-boot-mips

- MIPS: MT76xx: minor fixes and updates to gardena-smart-gateway board

5 years agorockchip: rk3188: use board_debug_uart_init() for UART io init
Kever Yang [Thu, 29 Nov 2018 02:07:38 +0000 (10:07 +0800)]
rockchip: rk3188: use board_debug_uart_init() for UART io init

Sync with other rockchip SoCs, use board_debug_uart_init() to
init default UART iomux.

Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
Reviewed-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
5 years agorockchip: rk3399: Initialize CPU B clock.
Christoph Muellner [Fri, 30 Nov 2018 19:32:48 +0000 (20:32 +0100)]
rockchip: rk3399: Initialize CPU B clock.

This patch sets the PLL of CPU cluster B (BPLL) to 600 MHz.
This decreases the boot time of Linux 4.19 by about 8%.

The 600 MHz are inspired by the 600 MHz used for LPLL initialization
(came in with commit 9f636a249c1).

Tested on RK3399-Q7 on Haikou base board.

Signed-off-by: Christoph Muellner <christoph.muellner@theobroma-systems.com>
Reviewed-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
5 years agortc: rv3029: update to support DM and sync with Linux 4.17
Philipp Tomsich [Tue, 27 Nov 2018 21:53:58 +0000 (22:53 +0100)]
rtc: rv3029: update to support DM and sync with Linux 4.17

The "Flamingo" carrier-board for the RK3399-Q7 has a RV3029 populated
and the application will use the off-module RV3029 RTC including the
battery backed SRAM.

To support this use case, this commit includes the following changes:
 * updates the rv3029 driver to use DM
 * implements the read8/write8 operations

This syncs the implementation with the Linux code (based on 4.17),
porting the trickle-charger support from there (with improvements to
avoid unnecessary EEPROM updates) and adheres to the Linux DTS
binding.

Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
Tested-by: Klaus Goger <klaus.goger@theobroma-systems.com>
5 years agortc: rv3029: add to Kconfig
Philipp Tomsich [Tue, 27 Nov 2018 21:53:57 +0000 (22:53 +0100)]
rtc: rv3029: add to Kconfig

The MicroCrystal RV3029 driver didn't have a Kconfig entry and was not used
anywhere. Add it to Kconfig to make it selectable.

Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
Tested-by: Klaus Goger <klaus.goger@theobroma-systems.com>
5 years agoARM: rockchip: rv1108: Add support for default distro_bootcmd
Otavio Salvador [Fri, 30 Nov 2018 13:34:17 +0000 (11:34 -0200)]
ARM: rockchip: rv1108: Add support for default distro_bootcmd

This allow easier integration of RV1108 based boards on generic
distributions and build systems.

To avoid behavior change, we make evb-rv1108 to use the existing
environment as it boots from its SPI NOR.

Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
Reviewed-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
5 years agoARM: dts: rockchip: Add rv1108 USB OTG pinctrl
Otavio Salvador [Fri, 30 Nov 2018 13:34:16 +0000 (11:34 -0200)]
ARM: dts: rockchip: Add rv1108 USB OTG pinctrl

This adds the definitions need to use the USB OTG in rv1108
board. This has been tested using USB Mass Storage to export and
program a eMMC device.

Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
Reviewed-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
5 years agoARM: rockchip: rv1108: Add a board_usb_init for USB OTG
Otavio Salvador [Fri, 30 Nov 2018 13:34:15 +0000 (11:34 -0200)]
ARM: rockchip: rv1108: Add a board_usb_init for USB OTG

Like it is done for other Rockchip SoCs, introduce a board_usb_init()
function so that USB OTG can be functional on rv1108 too.

Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
Reviewed-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
5 years agoARM: dts: rockchip: Add rv1108 eMMC pinctrl
Otavio Salvador [Fri, 30 Nov 2018 13:34:14 +0000 (11:34 -0200)]
ARM: dts: rockchip: Add rv1108 eMMC pinctrl

This adds the pinctrl handles to enable the use of eMMC on custom
boards (as minievk) and makes it easier for later addition.

Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
Reviewed-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
5 years agoARM: rockchip: rv1108: Enable BOUNCE_BUFFER
Otavio Salvador [Fri, 30 Nov 2018 13:34:13 +0000 (11:34 -0200)]
ARM: rockchip: rv1108: Enable BOUNCE_BUFFER

In order to be able to build the Rockchip eMMC driver on rv1108, the
BOUNCE_BUFFER option needs to be selected. Select it like it is done
on the other Rockchip SoC common files.

Reviewed-by: Andy Yan <andy.yan@rock-chips.com>
Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
Reviewed-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
5 years agoARM: rockchip: rv1108: Sync clock with vendor tree
Otavio Salvador [Fri, 30 Nov 2018 13:34:12 +0000 (11:34 -0200)]
ARM: rockchip: rv1108: Sync clock with vendor tree

Make adjustments to the rv1108 clock driver in order to align it
with the internal Rockchip version.

Signed-off-by: Otavio Salvador <otavio@ossystems.com.br>
Reviewed-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
5 years agorockchip: rk3399-puma: reduce sd card max-frequency to 40MHz
Philipp Tomsich [Fri, 30 Nov 2018 17:58:58 +0000 (18:58 +0100)]
rockchip: rk3399-puma: reduce sd card max-frequency to 40MHz

Some SanDisk Ultra cards trigger intermittent errors on detection
resulting in an -EOPNOTSUPP, when running at 50MHz.

Waveform analysis suggest that the level shifters that are used on the
RK3399-Q7 module (for voltage translation between the on-module
voltages and the 3.3V required on the card-edge) don't handle clock
rates at or above 48MHz properly. This change reduces the maximum
frequency on the external SD-interface to 40MHz (for a safety margin
of 20%).

Reported-by: Jakob Unterwurzacher <jakob.unterwurzacher@theobroma-systems.com>
Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
Tested-by: Christoph Muellner <christoph.muellner@theobroma-systems.com>
5 years agorockchip: rock: remove TPL_TINY_MEMSET
Kever Yang [Thu, 29 Nov 2018 01:59:41 +0000 (09:59 +0800)]
rockchip: rock: remove TPL_TINY_MEMSET

The RK3188 rock board does not need TPL: remove TPL_TINY_MEMSET from
config.

Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
Reviewed-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
[Fixed up commit message:]
Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
5 years agorockchip: rk3399: spl: always report errors triggering a hard stop
Philipp Tomsich [Mon, 19 Nov 2018 12:03:51 +0000 (13:03 +0100)]
rockchip: rk3399: spl: always report errors triggering a hard stop

The RK3399 SPL has two cases that may end in a hard-stop: if either
the pinctrl can not be initialised or if the DRAM fails to initialise.
Both have previously not triggered an error message unless DEBUG was
defined (i.e. both used debug() to print the error).

This converts both error messages to be printed using pr_err() to
ensure that some output points to the cause of the hard-stop.

Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
5 years agorockchip: video: mipi: Fix phy frequency setting
Richard Röjfors [Wed, 14 Nov 2018 13:13:53 +0000 (14:13 +0100)]
rockchip: video: mipi: Fix phy frequency setting

There was an incorrect check when looping and finding the first
fast enough frequency in the freq_rang table. The code did
actually return the first that was either exactly correct or
too slow.

Signed-off-by: Richard Röjfors <richard@puffinpack.se>
Reviewed-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
5 years agorockchip: video: mipi: Do not write to the version register
Richard Röjfors [Wed, 7 Nov 2018 10:34:44 +0000 (11:34 +0100)]
rockchip: video: mipi: Do not write to the version register

There was a copy and paste error where the data
enable setting was written to the version register.

Signed-off-by: Richard Röjfors <richard@puffinpack.se>
Reviewed-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
5 years agorockchip: rk3188: fix early uart setup
Heiko Stuebner [Mon, 8 Oct 2018 11:01:57 +0000 (13:01 +0200)]
rockchip: rk3188: fix early uart setup

Commit 7a6d7d3e1279 ("rockchip: pinctrl: rk3188: Move the iomux definitions
into pinctrl-driver") moved the iomux settings out of the grf header
to prevent conflicts with the iomux definitions of other rockchip socs.

This also breaks the early uart setup, as the iomux for uart2 are needed.
To fix that just put the tiny amount of needed iomux definitions next to
the early uart code.

Fixes: 7a6d7d3e1279 ("rockchip: pinctrl: rk3188: Move the iomux definitions into pinctrl-driver")
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Reviewed-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
5 years agorockchip: rk3188: add support for usb-uart functionality
Heiko Stuebner [Mon, 8 Oct 2018 11:01:56 +0000 (13:01 +0200)]
rockchip: rk3188: add support for usb-uart functionality

Rockchip socs can route the debug uart pins through the d+ and d- pins
of one specific usbphy per soc. Add a config option and implement the
setting on the rk3188.

Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Reviewed-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
[Fixed up to mark grf as maybe unused:]
Signed-off-by: Philipp Tomsich <philipp.tomsich@theobroma-systems.com>
5 years agomips: mt76xx: gardena-smart-gateway: Add factory data variable handling
Stefan Roese [Fri, 30 Nov 2018 06:46:30 +0000 (07:46 +0100)]
mips: mt76xx: gardena-smart-gateway: Add factory data variable handling

Some factory data is stored in the SPI NOR and needs to get extracted
from there into U-Boot environment variables.

This patch also includes a board-specific command "fd_write" to
provide some dummy / default values for this factory-data in the SPI
NOR flash. This should only be necessary for testing purposes though.

Signed-off-by: Stefan Roese <sr@denx.de>
Cc: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
5 years agomips: mt76xx: gardena-smart-gateway: Misc updates to defconfig
Stefan Roese [Wed, 28 Nov 2018 07:40:49 +0000 (08:40 +0100)]
mips: mt76xx: gardena-smart-gateway: Misc updates to defconfig

The following changes are made:
- Add default bootcmd which can be used for initial start-up
- Setup necessary MTD parts for Linux compatibility

Signed-off-by: Stefan Roese <sr@denx.de>
Cc: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
5 years agomips: mt7628: Change compatible property of the ethernet DT node
Stefan Roese [Wed, 28 Nov 2018 07:40:48 +0000 (08:40 +0100)]
mips: mt7628: Change compatible property of the ethernet DT node

As the driver has been changed to be more specific, the DT compatible
property also needs to be adapted.

Signed-off-by: Stefan Roese <sr@denx.de>
Cc: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
5 years agoMerge git://git.denx.de/u-boot-marvell
Tom Rini [Fri, 30 Nov 2018 16:20:03 +0000 (11:20 -0500)]
Merge git://git.denx.de/u-boot-marvell

- Some Kirkwood boards converted to DM_SPI by Chris
- New Armada-385 SoC revision printed by Chris
- Ethernet enable on mcbin by Baruch
- Support 2 DRAM banks on Armada-8k boards by Baruch

5 years agoARM: mvebu: add revision id for Armada-385 B0
Chris Packham [Tue, 27 Nov 2018 21:32:00 +0000 (10:32 +1300)]
ARM: mvebu: add revision id for Armada-385 B0

Marvell have release a B0 revision of the Armada-385 SoC. This fixes a
hardware errata enabling RGMII to work when the Ethernet voltage is
configured to 3.3V.

Signed-off-by: Chris Packham <judge.packham@gmail.com>
Reviewed-by: Stefan Roese <sr@denx.de>
Signed-off-by: Stefan Roese <sr@denx.de>
5 years agoarm: mvebu: mcbin: configs: enable network driver
Baruch Siach [Thu, 22 Nov 2018 11:42:12 +0000 (13:42 +0200)]
arm: mvebu: mcbin: configs: enable network driver

Enable the mvpp2 Ethernet driver and the Marvell Ethernet PHY driver.
This makes the Macchiatobin 1Gb Ethernet interface usable.

Cc: Konstantin Porotchkin <kostap@marvell.com>
Signed-off-by: Baruch Siach <baruch@tkos.co.il>
Reviewed-by: Stefan Roese <sr@denx.de>
Signed-off-by: Stefan Roese <sr@denx.de>
5 years agoarm: mvebu: mcbin: dts: enable 1G network interface
Baruch Siach [Wed, 21 Nov 2018 11:12:16 +0000 (13:12 +0200)]
arm: mvebu: mcbin: dts: enable 1G network interface

Describe the 1Gb network interface with on-board 88E1512 PHY.

Signed-off-by: Baruch Siach <baruch@tkos.co.il>
Reviewed-by: Stefan Roese <sr@denx.de>
Signed-off-by: Stefan Roese <sr@denx.de>
5 years agoarm: kirkwood: configs: dreamplug: Convert to DM_SPI
Chris Packham [Wed, 21 Nov 2018 09:22:23 +0000 (22:22 +1300)]
arm: kirkwood: configs: dreamplug: Convert to DM_SPI

Enable CONFIG_DM_SPI=y and CONFIG_DM_SPI_FLASH=y in the defconfig.

Signed-off-by: Chris Packham <judge.packham@gmail.com>
Reviewed-by: Stefan Roese <sr@denx.de>
Signed-off-by: Stefan Roese <sr@denx.de>
5 years agoarm: kirkwood: configs: ds109: Convert to DM_SPI
Chris Packham [Wed, 21 Nov 2018 09:22:22 +0000 (22:22 +1300)]
arm: kirkwood: configs: ds109: Convert to DM_SPI

Enable CONFIG_DM_SPI=y and CONFIG_DM_SPI_FLASH=y in the defconfig.

Signed-off-by: Chris Packham <judge.packham@gmail.com>
Reviewed-by: Stefan Roese <sr@denx.de>
Signed-off-by: Stefan Roese <sr@denx.de>
5 years agoarm: kirkwood: configs: Convert Allied Telesis boards to DM_SPI
Chris Packham [Wed, 21 Nov 2018 09:22:21 +0000 (22:22 +1300)]
arm: kirkwood: configs: Convert Allied Telesis boards to DM_SPI

Enable CONFIG_DM_SPI=y and CONFIG_DM_SPI_FLASH=y in the defconfig.

Signed-off-by: Chris Packham <judge.packham@gmail.com>
Reviewed-by: Stefan Roese <sr@denx.de>
Signed-off-by: Stefan Roese <sr@denx.de>
5 years agoarm: mvebu: configs: armada8k: use 2 DRAM banks
Baruch Siach [Wed, 21 Nov 2018 07:59:32 +0000 (09:59 +0200)]
arm: mvebu: configs: armada8k: use 2 DRAM banks

Commit 2b4d964718c0 ("arm64: mvebu: a8k: autodetect RAM size") added an
ATF query to get the detected RAM size on Armada 8K platforms. To be
usable we must have 2 DRAM banks. Set Armada 8K configurations to 2
banks.

Cc: Konstantin Porotchkin <kostap@marvell.com>
Signed-off-by: Baruch Siach <baruch@tkos.co.il>
Reviewed-by: Stefan Roese <sr@denx.de>
Signed-off-by: Stefan Roese <sr@denx.de>
5 years agoMerge branch 'master' of git://git.denx.de/u-boot-socfpga
Tom Rini [Thu, 29 Nov 2018 21:36:53 +0000 (16:36 -0500)]
Merge branch 'master' of git://git.denx.de/u-boot-socfpga

5 years agoMerge tag 'u-boot-amlogic-20181126' of git://git.denx.de/u-boot-amlogic
Tom Rini [Thu, 29 Nov 2018 14:33:33 +0000 (09:33 -0500)]
Merge tag 'u-boot-amlogic-20181126' of git://git.denx.de/u-boot-amlogic

Cleanup and update towards support for Amlogic Meson AXG SoCs :
- mmc: meson-gx: Add AXG compatible
- net: designware: add meson meson compatibles
- Amlogic Meson cleanup for AXG SoC support

5 years agocore: ofnode: Fix ofnode_get_addr_index function
Keerthy [Mon, 19 Nov 2018 06:14:47 +0000 (11:44 +0530)]
core: ofnode: Fix ofnode_get_addr_index function

Currently the else part of ofnode_get_addr_index function
does not fetch addresses based on the index but rather just
returns the base address. Fix that.

Signed-off-by: Keerthy <j-keerthy@ti.com>
5 years agotpm: Convert to use a device parameter
Simon Glass [Sun, 18 Nov 2018 21:22:27 +0000 (14:22 -0700)]
tpm: Convert to use a device parameter

At present many TPM calls assume there is only one TPM in the system and
look up this TPM themselves. This is inconsistent with driver model, which
expects all driver methods to have a device parameter. Update the code to
correct this.

Signed-off-by: Simon Glass <sjg@chromium.org>
5 years agotpm: Export the open/close functions
Simon Glass [Sun, 18 Nov 2018 21:22:26 +0000 (14:22 -0700)]
tpm: Export the open/close functions

At present these functions are not accessible outside the TPM library, but
in some cases we need to call them. Export them in the header file and add
a define for the SHA1 digest size.

Also adjust tpm_open() to call tpm_close() first so that the TPM is in a
known state before opening (e.g. by a previous phase of U-Boot).

Signed-off-by: Simon Glass <sjg@chromium.org>
5 years agotpm: Add a constant for the minimum supported digest size
Simon Glass [Sun, 18 Nov 2018 21:22:25 +0000 (14:22 -0700)]
tpm: Add a constant for the minimum supported digest size

When SHA1 is used we need 20 bytes for the digest size. Add a constant so
that clients can make use of this, e.g. to allocate local buffers.

Signed-off-by: Simon Glass <sjg@chromium.org>
5 years agoofnode: fix comment typo
Baruch Siach [Sun, 18 Nov 2018 12:39:20 +0000 (14:39 +0200)]
ofnode: fix comment typo

Signed-off-by: Baruch Siach <baruch@tkos.co.il>
5 years agocmd, fdt: add subcommand "get" to fdt header
Heiko Schocher [Thu, 15 Nov 2018 05:06:06 +0000 (06:06 +0100)]
cmd, fdt: add subcommand "get" to fdt header

store fdt header member with name <member> in U-Boot
Environment variable with name <var>.

for example to get the total length of the fdt and store
it in filesize, call:

fdt header get filesize totalsize

For membernames look into fdt header definition at
scripts/dtc/libfdt/libfdt.h

Signed-off-by: Heiko Schocher <hs@denx.de>
Reviewed-by: Simon Glass <sjg@chromium.org>
5 years agosandbox: Use memmove() to move overlapping regions
Simon Glass [Tue, 13 Nov 2018 22:55:20 +0000 (15:55 -0700)]
sandbox: Use memmove() to move overlapping regions

The use of strcpy() to remove characters at the start of a string is safe
in U-Boot, since we know the implementation. But in os.c we are using the
C library's strcpy() function, where this behaviour is not permitted.

Update the code to use memmove() instead.

Reported-by: Coverity (CID: 173279)
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Alexander Graf <agraf@suse.de>
5 years agosandbox: Enable sound
Simon Glass [Fri, 16 Nov 2018 02:56:15 +0000 (19:56 -0700)]
sandbox: Enable sound

Now that the buffer-overflow bug is fixed, we can enable sound on sandbox.
Drop the code which exits early.

Signed-off-by: Simon Glass <sjg@chromium.org>
5 years agosound: sandbox: Use the correct frequency
Simon Glass [Fri, 16 Nov 2018 02:56:14 +0000 (19:56 -0700)]
sound: sandbox: Use the correct frequency

At present we request a particular frequency but we may not get the exact
same frequency in response. So use the actual frequency for generation of
the square wave. This ensures that the pitch remains accurate on all host
machines.

Signed-off-by: Simon Glass <sjg@chromium.org>
5 years agosound: Add sample rate as a parameter for square wave
Simon Glass [Fri, 16 Nov 2018 02:56:13 +0000 (19:56 -0700)]
sound: Add sample rate as a parameter for square wave

At present this value is hard-coded in the function that generates a
square wave. Since sample rates vary between different hardware, it makes
more sense to have this as a parameter.

Update the function and its users.

Signed-off-by: Simon Glass <sjg@chromium.org>
5 years agosound: Correct data output in sound_create_square_wave()
Simon Glass [Fri, 16 Nov 2018 02:56:12 +0000 (19:56 -0700)]
sound: Correct data output in sound_create_square_wave()

This function currently outputs twice as much data as it should and
overwrites its buffer as a result. Fix it.

Signed-off-by: Simon Glass <sjg@chromium.org>
5 years agortc: Allow child drivers
Simon Glass [Sun, 18 Nov 2018 15:14:35 +0000 (08:14 -0700)]
rtc: Allow child drivers

Some RTC chips have child drivers, e.g. to provide access to their
non-volatile RAM. Scan for these when binding.

Signed-off-by: Simon Glass <sjg@chromium.org>
5 years agodm: sandbox: i2c: Use new emulator parent uclass
Simon Glass [Sun, 18 Nov 2018 15:14:34 +0000 (08:14 -0700)]
dm: sandbox: i2c: Use new emulator parent uclass

Update the device tree, sandbox i2c driver and tests to use the new
emulation parent to hold emulators.

Signed-off-by: Simon Glass <sjg@chromium.org>
5 years agodm: sandbox: i2c: Add a new 'emulation parent' uclass
Simon Glass [Sun, 18 Nov 2018 15:14:33 +0000 (08:14 -0700)]
dm: sandbox: i2c: Add a new 'emulation parent' uclass

Sandbox i2c works using emulation drivers which are currently children of
the i2c device:

rtc_0: rtc@43 {
reg = <0x43>;
compatible = "sandbox-rtc";
emul {
compatible = "sandbox,i2c-rtc";
};
};

In this case the emulation device is attached to i2c bus on address 0x43
and provides the Real-Time-Clock (RTC) functionality.

However this is not ideal, since every device on an I2C bus has a child
device. This is only really the case for sandbox, but we want to avoid
special-case code for sandbox.

A better approach seems to be to add a separate node on the bus, an
'emulation parent'. This can be given a bogus address (such as 0xff) and
hides all the emulators away. Then we can use a phandle to point from the
device to the correct emualtor, and only on sandbox. The code to find an
emulator does not interfere with normal i2c operation.

Add a new UCLASS_I2C_EMUL_PARENT uclass which allows finding an emulator
given a bus, and finding a bus given an emulator. This will be used in a
follow-on patch.

Signed-off-by: Simon Glass <sjg@chromium.org>
5 years agodm: core: Put UCLASS_SIMPLE_BUS in order
Simon Glass [Sun, 18 Nov 2018 15:14:32 +0000 (08:14 -0700)]
dm: core: Put UCLASS_SIMPLE_BUS in order

This is currently at the top in the space for internal use. But this
uclass is used outside driver model and test code. Move it into the
correct alpha order.

Signed-off-by: Simon Glass <sjg@chromium.org>
5 years agodm: core: Add a few more specific child-finding functions
Simon Glass [Sun, 18 Nov 2018 15:14:31 +0000 (08:14 -0700)]
dm: core: Add a few more specific child-finding functions

Add two functions which can find a child device by uclass or by name.
The first is useful with Multi-Function-Devices (MFDs) to find one of a
particular type. The second is useful when only the name is known.

Signed-off-by: Simon Glass <sjg@chromium.org>