platform/kernel/u-boot.git
4 years agoclk: imx: clk-imxrt1050: add set_parent() callback
Giulio Benetti [Wed, 8 Apr 2020 15:10:10 +0000 (17:10 +0200)]
clk: imx: clk-imxrt1050: add set_parent() callback

Need to add set_parent() callback to allow dts assigned-clock-parents to
work so let's add it accordingly.

Signed-off-by: Giulio Benetti <giulio.benetti@benettiengineering.com>
4 years agoclk: imx: clk-imxrt1050: setup PLL5 for video in non-SPL
Giulio Benetti [Wed, 8 Apr 2020 15:10:09 +0000 (17:10 +0200)]
clk: imx: clk-imxrt1050: setup PLL5 for video in non-SPL

mxsfb needs PLL5 as source, so let's setup it at its default frequency
specified in RM(650Mhz).

Signed-off-by: Giulio Benetti <giulio.benetti@benettiengineering.com>
Reviewed-by: Lukasz Majewski <lukma@denx.de>
4 years agoclk: imx: clk-imxrt1050: fix typo in clock name "video:"
Giulio Benetti [Wed, 8 Apr 2020 15:10:08 +0000 (17:10 +0200)]
clk: imx: clk-imxrt1050: fix typo in clock name "video:"

"video:" must be "video", ":" is a typo.

Signed-off-by: Giulio Benetti <giulio.benetti@benettiengineering.com>
Reviewed-by: Lukasz Majewski <lukma@denx.de>
4 years agoclk: imx: pllv3: add enable_bit
Giulio Benetti [Wed, 8 Apr 2020 15:10:07 +0000 (17:10 +0200)]
clk: imx: pllv3: add enable_bit

pllv3 PLLs have powerdown/up bits but enable bits too. Specifically
"enable bit" enable the pll output, so when dis/enabling pll by
setting/clearing power_bit we must also set/clear enable_bit.

Signed-off-by: Giulio Benetti <giulio.benetti@benettiengineering.com>
Reviewed-by: Lukasz Majewski <lukma@denx.de>
4 years agocolibri_imx6: enable relocation of fdt and initrd
Igor Opaniuk [Fri, 27 Mar 2020 10:28:25 +0000 (12:28 +0200)]
colibri_imx6: enable relocation of fdt and initrd

Remove 'fdt_high' and 'initrd_high' environment variables (set to 0xFFFFFFFF)
from default environment which prevents relocation of FDT and initrd.
Rely on 'bootm_size' value instead to safely relocate kernel, device tree and
initrd.

Signed-off-by: Igor Opaniuk <igor.opaniuk@toradex.com>
Reviewed-by: Oleksandr Suvorov <oleksandr.suvorov@toradex.com>
4 years agocolibri-imx6ull: enable relocation of fdt and initrd
Igor Opaniuk [Fri, 27 Mar 2020 10:28:24 +0000 (12:28 +0200)]
colibri-imx6ull: enable relocation of fdt and initrd

Remove 'fdt_high' and 'initrd_high' environment variables (set to 0xFFFFFFFF)
from default environment which prevents relocation of FDT and initrd.
Rely on 'bootm_size' value instead to safely relocate kernel, device tree and
initrd.

Signed-off-by: Igor Opaniuk <igor.opaniuk@toradex.com>
Reviewed-by: Oleksandr Suvorov <oleksandr.suvorov@toradex.com>
4 years agoapalis_imx6: enable relocation of fdt and initrd
Igor Opaniuk [Fri, 27 Mar 2020 10:28:23 +0000 (12:28 +0200)]
apalis_imx6: enable relocation of fdt and initrd

Remove 'fdt_high' and 'initrd_high' environment variables (set to 0xFFFFFFFF)
from default environment which prevents relocation of FDT and initrd.
Rely on 'bootm_size' value instead to safely relocate kernel, device tree and
initrd.

Signed-off-by: Igor Opaniuk <igor.opaniuk@toradex.com>
Reviewed-by: Oleksandr Suvorov <oleksandr.suvorov@toradex.com>
4 years agocolibri_imx7: enable relocation of fdt and initrd
Igor Opaniuk [Fri, 27 Mar 2020 10:28:22 +0000 (12:28 +0200)]
colibri_imx7: enable relocation of fdt and initrd

Remove 'fdt_high' and 'initrd_high' environment variables (set to 0xFFFFFFFF)
from default environment which prevents relocation of FDT and initrd.
Rely on 'bootm_size' value instead to safely relocate kernel, device tree and
initrd.

Signed-off-by: Igor Opaniuk <igor.opaniuk@toradex.com>
Reviewed-by: Oleksandr Suvorov <oleksandr.suvorov@toradex.com>
4 years agocolibri_vf: enable relocation of fdt and initrd
Igor Opaniuk [Fri, 27 Mar 2020 10:28:21 +0000 (12:28 +0200)]
colibri_vf: enable relocation of fdt and initrd

Remove 'fdt_high' and 'initrd_high' environment variables (set to 0xFFFFFFFF)
from default environment which prevents relocation of FDT and initrd.
Rely on 'bootm_size' value instead to safely relocate kernel, device tree and
initrd.

Signed-off-by: Igor Opaniuk <igor.opaniuk@toradex.com>
Reviewed-by: Oleksandr Suvorov <oleksandr.suvorov@toradex.com>
4 years agoverdin-imx8mm: add nfsboot wrapper to env
Igor Opaniuk [Fri, 27 Mar 2020 10:28:20 +0000 (12:28 +0200)]
verdin-imx8mm: add nfsboot wrapper to env

Add nfsboot wrapper to env to boot Linux kernel from TFTP/NFS.

Signed-off-by: Igor Opaniuk <igor.opaniuk@toradex.com>
Reviewed-by: Oleksandr Suvorov <oleksandr.suvorov@toradex.com>
4 years agoimx8mm_evk: adjust dram size in case bl32 is used
Igor Opaniuk [Fri, 27 Mar 2020 10:28:19 +0000 (12:28 +0200)]
imx8mm_evk: adjust dram size in case bl32 is used

Adjust DRAM size in case BL32 secure payload is loaded (OP-TEE/Trusty),
so during MMU initialization U-Boot won't touch this mem area.

BL32 is loaded to the end of DRAM, bl32 payload size is read from
rom_pointer[1]. This relates to the issue described in
59efa6b52b("imx8m: Fix MMU table issue for OPTEE memory").

Signed-off-by: Igor Opaniuk <igor.opaniuk@toradex.com>
4 years agoverdin-imx8mm: adjust dram size in case bl32 is used
Igor Opaniuk [Fri, 27 Mar 2020 10:28:18 +0000 (12:28 +0200)]
verdin-imx8mm: adjust dram size in case bl32 is used

Adjust DRAM size in case BL32 secure payload is loaded (OP-TEE/Trusty),
so during MMU initialization U-Boot won't touch this mem area.

BL32 is loaded to the end of DRAM, bl32 payload size is read from
rom_pointer[1]. This relates to the issue described in
59efa6b52b("imx8m: Fix MMU table issue for OPTEE memory").

Signed-off-by: Igor Opaniuk <igor.opaniuk@toradex.com>
4 years agoimx8qxp_mek: Start with USDHC2 unpowered
Fabio Estevam [Wed, 15 Apr 2020 18:01:34 +0000 (15:01 -0300)]
imx8qxp_mek: Start with USDHC2 unpowered

After triggering a "reboot" command in Linux the following
hang in SPL is observed:

U-Boot SPL 2020.04 (Apr 15 2020 - 10:49:29 -0300)
Normal Boot
WDT:   Not found!
Trying to boot from MMC2_2
spl: mmc init failed with error: -70
SPL: failed to boot from all boot devices
### ERROR ### Please RESET the board ###

This error happens because the CMD_ERR bit is set in the IRQ status
register after booting from Linux.

To ensure a fresh start, force the VMMC supply to get unpowered first.

Signed-off-by: Fabio Estevam <festevam@gmail.com>
Reviewed-by: Peng Fan <peng.fan@nxp.com>
4 years agoboard: tqc: tqma6_mba6: switch to device model
Michael Krummsdorf [Thu, 9 Apr 2020 13:21:42 +0000 (15:21 +0200)]
board: tqc: tqma6_mba6: switch to device model

Ethernet, usdhc2 and i2c1 interfaces are probed by dm drivers.
Therefor init functions in board file are not necessary.

Signed-off-by: Michael Krummsdorf <michael.krummsdorf@ew.tq-group.com>
4 years agoboard: tqc: tqma6: hw init code disabled for device model
Michael Krummsdorf [Thu, 9 Apr 2020 13:21:41 +0000 (15:21 +0200)]
board: tqc: tqma6: hw init code disabled for device model

Keep code for non-dm configuration of baseboard WRU4.
It cannot be upgraded to device model as
we have no suitable device tree for it.
These changes were not run-tested on WRU4,
only compile-tested.

Signed-off-by: Michael Krummsdorf <michael.krummsdorf@ew.tq-group.com>
4 years agoconfigs: tqma6x_mba6x: update default configs for device model
Michael Krummsdorf [Thu, 9 Apr 2020 13:21:40 +0000 (15:21 +0200)]
configs: tqma6x_mba6x: update default configs for device model

Fixes compilation for WRU4 board.

Signed-off-by: Michael Krummsdorf <michael.krummsdorf@ew.tq-group.com>
4 years agoboard: tqc: tqma6: mba6: apply default Kconfig for device model
Michael Krummsdorf [Thu, 9 Apr 2020 13:21:39 +0000 (15:21 +0200)]
board: tqc: tqma6: mba6: apply default Kconfig for device model

Signed-off-by: Michael Krummsdorf <michael.krummsdorf@ew.tq-group.com>
4 years agoarch: arm: tqma6: apply default Kconfig for device model
Michael Krummsdorf [Thu, 9 Apr 2020 13:21:38 +0000 (15:21 +0200)]
arch: arm: tqma6: apply default Kconfig for device model

Signed-off-by: Michael Krummsdorf <michael.krummsdorf@ew.tq-group.com>
4 years agoarm: dt: imx6qdl: add tqma6[qdl] som on mba6 mainboard
Michael Krummsdorf [Thu, 9 Apr 2020 13:21:37 +0000 (15:21 +0200)]
arm: dt: imx6qdl: add tqma6[qdl] som on mba6 mainboard

The device trees for TQMa6x SOM support variations in
- CPU type: imx6dl- or imx6q-
- MBa6 I2C bus access: -mba6a (i2c1) or -mba6b (i2c3)
  (plus the respective common/module include trees)

- USBH1 is directly connected to a hub
- USBOTG is connected to a separate connector
  and can act as host/device or full OTG port.

Signed-off-by: Michael Krummsdorf <michael.krummsdorf@ew.tq-group.com>
4 years agotqma6: resurrect support by supplying correct SYS_TEXT_BASE
Markus Niebel [Thu, 9 Apr 2020 13:21:36 +0000 (15:21 +0200)]
tqma6: resurrect support by supplying correct SYS_TEXT_BASE

reason: SYS_TEXT_BASE was moved to Kconfig. Give reasonable defaults
in board specific Kconfig.

Signed-off-by: Markus Niebel <Markus.Niebel@tq-group.com>
Signed-off-by: Michael Krummsdorf <michael.krummsdorf@ew.tq-group.com>
4 years agoarm: imx6: configure NoC on i.MX6DQP
Bernhard Messerklinger [Mon, 9 Mar 2020 09:55:34 +0000 (10:55 +0100)]
arm: imx6: configure NoC on i.MX6DQP

The i.MX6DP and i.MX6QP incorporate NoC interconnect logic
which needs to be configured in order to use external DDR memory.

This patch enables the SPL to configure the necessary registers
in accordance with the NXP engineering bulletin EB828.

Co-developed-by: Filip Brozović <fbrozovic@gmail.com>
Signed-off-by: Bernhard Messerklinger <bernhard.messerklinger@br-automation.com>
Signed-off-by: Filip Brozovic <fbrozovic@gmail.com>
4 years agomx6ulz_14x14_evk: Disable CONFIG_NET
Fabio Estevam [Mon, 3 Feb 2020 17:46:22 +0000 (14:46 -0300)]
mx6ulz_14x14_evk: Disable CONFIG_NET

Currently the following build warning is seen:

===================== WARNING ======================
This board does not use CONFIG_DM_ETH (Driver Model
for Ethernet drivers). Please update the board to use
CONFIG_DM_ETH before the v2020.07 release. Failure to
update by the deadline may result in board removal.
See doc/driver-model/migration.rst for more info.
===================================================

Since the mx6ulz-evk board does not have networking support, explicitly
disable networking to avoid the board removal.

Signed-off-by: Fabio Estevam <festevam@gmail.com>
4 years agomx6ullevk: Enable Ethernet support
Fabio Estevam [Mon, 3 Feb 2020 17:23:58 +0000 (14:23 -0300)]
mx6ullevk: Enable Ethernet support

Add Ethernet support using DM_ETH.

Signed-off-by: Fabio Estevam <festevam@gmail.com>
Reviewed-by: Peng Fan <peng.fan@nxp.com>
4 years agomx6ul_evk: Remove FEC related board code
Fabio Estevam [Mon, 3 Feb 2020 16:09:23 +0000 (13:09 -0300)]
mx6ul_evk: Remove FEC related board code

mx6ul_evk uses DM_ETH, so there is no need to have board code
to setup the FEC IOMUX and to register the network ports via the
old board_eth_init() method.

Remove these FEC related pieces of code.

Signed-off-by: Fabio Estevam <festevam@gmail.com>
Reviewed-by: Peng Fan <peng.fan@nxp.com>
4 years agomx6ul_evk: Move CONFIG_FEC_MXC to defconfig
Fabio Estevam [Mon, 3 Feb 2020 16:09:22 +0000 (13:09 -0300)]
mx6ul_evk: Move CONFIG_FEC_MXC to defconfig

CONFIG_FEC_MXC is supported in Kconfig, so it is preferred to
move it to defconfig file.

Signed-off-by: Fabio Estevam <festevam@gmail.com>
Reviewed-by: Peng Fan <peng.fan@nxp.com>
4 years agomx7ulp: Only enable LDO if it is not already enabled
Fabio Estevam [Mon, 3 Feb 2020 12:01:09 +0000 (09:01 -0300)]
mx7ulp: Only enable LDO if it is not already enabled

LDO mode may be already enabled by the ROM and enabling it again
can cause U-Boot to hang.

Avoid this problem by only enabling LDO mode if it is initially disabled.

Reported-by: Jorge Ramirez-Ortiz <jorge@foundries.io>
Signed-off-by: Fabio Estevam <festevam@gmail.com>
Tested-by: Jorge Ramirez-Ortiz <jorge@foundries.io>
Reviewed-by: Peng Fan <peng.fan@nxp.com>
4 years agomx7ulp: Remove duplicated definitions
Fabio Estevam [Mon, 3 Feb 2020 12:01:08 +0000 (09:01 -0300)]
mx7ulp: Remove duplicated definitions

These PMC0 definitions are already defined in the beginning
of the file, so remove the duplication.

Reported-by: Stefano Babic <sbabic@denx.de>
Signed-off-by: Fabio Estevam <festevam@gmail.com>
Reviewed-by: Peng Fan <peng.fan@nxp.com>
4 years agoMerge tag 'arc-fixes-for-2020.07-rc1' of https://gitlab.denx.de/u-boot/custodians...
Tom Rini [Thu, 16 Apr 2020 21:14:44 +0000 (17:14 -0400)]
Merge tag 'arc-fixes-for-2020.07-rc1' of https://gitlab.denx.de/u-boot/custodians/u-boot-arc

This is pretty minor set of changes mostly touching HSDK board:

 * Enable on-chip reset controller on HSDK
 * Add possibility to turn-on & off L2$ on more
   recent ARC HS processors.
 * AXI tunnel clock calculation on HSDK

4 years agoMerge tag 'efi-2020-07-rc1' of https://gitlab.denx.de/u-boot/custodians/u-boot-efi
Tom Rini [Thu, 16 Apr 2020 20:41:40 +0000 (16:41 -0400)]
Merge tag 'efi-2020-07-rc1' of https://gitlab.denx.de/u-boot/custodians/u-boot-efi

Pull request for UEFI sub-system for efi-2020-07-rc1

This pull request

* provides an implementation of UEFI secure booting
* fixes a problem with the rsa_mod_exp driver which stops some boards
  from booting when CONFIG_RSA is enabled which is needed for UEFI
  secure booting
* enables the EFI_RNG_PROTOCOL if DM_RNG is enabled
* fixes some function comments

4 years agoARC: HSDK: CGU: fix tunnel clock calculation
Eugeniy Paltsev [Thu, 16 Apr 2020 19:35:11 +0000 (22:35 +0300)]
ARC: HSDK: CGU: fix tunnel clock calculation

We set wrong tunnel PLL frequency when we request 125MHz tunnel clock.
Fix that.

Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
4 years agoARC: HSDK: Enable on-chip reset controller
Eugeniy Paltsev [Wed, 11 Mar 2020 12:37:23 +0000 (15:37 +0300)]
ARC: HSDK: Enable on-chip reset controller

As the driver of on-chip reset controller became available
we are ready to enable it.

Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
4 years agoARC: CACHE: mark IOC helper functions as inlined_cachefunc
Eugeniy Paltsev [Wed, 11 Mar 2020 12:00:44 +0000 (15:00 +0300)]
ARC: CACHE: mark IOC helper functions as inlined_cachefunc

Force inlining of IOC related functions used in other cache
functions. This is preventive change.

Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
4 years agoARC: CACHE: add support for SL$ disable
Eugeniy Paltsev [Wed, 11 Mar 2020 12:00:43 +0000 (15:00 +0300)]
ARC: CACHE: add support for SL$ disable

Since version 3.0 ARC HS supports SL$ (L2 system level cache)
disable. So add support for SL$ disable/enable to code.

Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
4 years agoMerge tag 'dm-pull-10apr20-take2' of git://git.denx.de/u-boot-dm
Tom Rini [Thu, 16 Apr 2020 17:45:03 +0000 (13:45 -0400)]
Merge tag 'dm-pull-10apr20-take2' of git://git.denx.de/u-boot-dm

Functions for reading indexed values from device tree
Enhancements to 'dm' command
Log test enhancements and syslog driver
DM change to read parent ofdata before children
Minor fixes

4 years agodm: core: Read parent ofdata before children
Simon Glass [Sun, 5 Apr 2020 21:38:19 +0000 (15:38 -0600)]
dm: core: Read parent ofdata before children

At present a device can read its ofdata before its parent has done the
same. This can cause problems in the case where the parent has a 'ranges'
property, thus affecting the operation of dev_read_addr(), for example.

We already probe parent devices before children so it does not seem to be
a large step to do the same with ofdata.

Make the change and update the documentation in this area.

Signed-off-by: Simon Glass <sjg@chromium.org>
Tested-by: Ley Foon Tan <ley.foon.tan@intel.com>
4 years agotest: fdtdec: test fdtdec_set_carveout()
Laurentiu Tudor [Fri, 3 Apr 2020 10:43:04 +0000 (13:43 +0300)]
test: fdtdec: test fdtdec_set_carveout()

Add a new test for fdtdec_set_carveout().

Signed-off-by: Laurentiu Tudor <laurentiu.tudor@nxp.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Drop blank line at EFO:
Signed-off-by: Simon Glass <sjg@chromium.org>
4 years agofdtdec: support multiple phandles in memory carveout
Laurentiu Tudor [Fri, 3 Apr 2020 10:43:03 +0000 (13:43 +0300)]
fdtdec: support multiple phandles in memory carveout

fdtdec_set_carveout() is limited to only one phandle. Fix this
limitation by adding support for multiple phandles.

Signed-off-by: Laurentiu Tudor <laurentiu.tudor@nxp.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
4 years agodm: core: remove the duplicated function dm_ofnode_pre_reloc
Patrick Delaunay [Fri, 3 Apr 2020 09:39:18 +0000 (11:39 +0200)]
dm: core: remove the duplicated function dm_ofnode_pre_reloc

The content dm_ofnode_pre_reloc() is identical with ofnode_pre_reloc()
defined in drivers/core/ofnode.c and used only three times:
- drivers/core/lists.c:lists_bind_fdt()
- drivers/clk/at91/pmc.c::at91_clk_sub_device_bind
- drivers/clk/altera/clk-arria10.c::socfpga_a10_clk_bind

So this function dm_ofnode_pre_reloc can be removed and replaced
by these function calls by ofnode_pre_reloc().

Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
Acked-by: Simon Glass <sjg@chromium.org>
4 years agodm: core: refactor functions reading an u32 from dt
Dario Binacchi [Sun, 29 Mar 2020 16:04:42 +0000 (18:04 +0200)]
dm: core: refactor functions reading an u32 from dt

Now reading a 32 bit value from a device-tree property can be expressed
as reading the first element of an array with a single value.

Signed-off-by: Dario Binacchi <dariobin@libero.it>
Reviewed-by: Simon Glass <sjg@chromium.org>
4 years agodm: core: support reading a single indexed u32 value
Dario Binacchi [Sun, 29 Mar 2020 16:04:41 +0000 (18:04 +0200)]
dm: core: support reading a single indexed u32 value

The patch adds helper functions to allow reading a single indexed u32
value from a device-tree property containing multiple u32 values, that
is an array of integers.

Signed-off-by: Dario Binacchi <dariobin@libero.it>
Reviewed-by: Simon Glass <sjg@chromium.org>
4 years agodm: test: add test case for dev_read_u64 function
Dario Binacchi [Sun, 29 Mar 2020 16:04:40 +0000 (18:04 +0200)]
dm: test: add test case for dev_read_u64 function

Add test case to cover dev_read_u64 and dev_read_u64_default functions.

Signed-off-by: Dario Binacchi <dariobin@libero.it>
Reviewed-by: Simon Glass <sjg@chromium.org>
4 years agodm: core: Add a way to skip powering down power domains
Simon Glass [Sat, 28 Mar 2020 20:03:48 +0000 (14:03 -0600)]
dm: core: Add a way to skip powering down power domains

When removing a device the power domains it uses are generally powered
off. But when we are trying to unbind all devices (e.g. for running tests)
we don't want to probe a device in the 'remove' path.

Add a new flag to skip this power-down step.

Signed-off-by: Simon Glass <sjg@chromium.org>
4 years agodm: core: Add logging on unbind failure
Simon Glass [Sat, 28 Mar 2020 20:03:47 +0000 (14:03 -0600)]
dm: core: Add logging on unbind failure

This failure path is tricky to debug since it continues after failure and
there are a lot of error paths. Add logging to help.

Signed-off-by: Simon Glass <sjg@chromium.org>
4 years agofdt: Fix 'system' command
Tom Warren [Thu, 26 Mar 2020 22:20:44 +0000 (15:20 -0700)]
fdt: Fix 'system' command

'fdt systemsetup' wasn't working, due to the fact that the 'set' command
was being parsed in do_fdt() by only testing for the leading 's' instead
of "se", which kept the "sys" test further down from executing. Changed
to test for "se" instead, now 'fdt systemsetup' works (to test the
ft_system_setup proc w/o having to boot a kernel).

Signed-off-by: Tom Warren <twarren@nvidia.com>
4 years agosandbox: enable CMD_BOOTEFI_HELLO and CMD_EFIDEBUG
Heinrich Schuchardt [Sat, 14 Mar 2020 11:27:02 +0000 (12:27 +0100)]
sandbox: enable CMD_BOOTEFI_HELLO and CMD_EFIDEBUG

'bootefi hello' is used in one of the Python tests.

efidebug can be used to verify the correct initialization of the UEFI
sub-system.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Simon Glass <sjg@chromum.org>
4 years agosandbox: implement ft_board_setup()
Heinrich Schuchardt [Sat, 14 Mar 2020 11:13:40 +0000 (12:13 +0100)]
sandbox: implement ft_board_setup()

Currently we are not able to test reservations created by ft_board_setup().

Implement ft_board_setup() to create an arbitrary reservation and enable
OF_BOARD_SETUP.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Simon Glass <sjg@chromum.org>
4 years agosandbox: add reserved-memory node in device tree
Heinrich Schuchardt [Sat, 14 Mar 2020 11:13:39 +0000 (12:13 +0100)]
sandbox: add reserved-memory node in device tree

For testing the handling of memory reservations create a reserved-memory
node in sandbox.dts and sandbox64.dts.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Simon Glass <sjg@chromum.org>
4 years agopatman: Apply the cc limit to the cover letter also
Simon Glass [Fri, 28 Feb 2020 01:49:23 +0000 (18:49 -0700)]
patman: Apply the cc limit to the cover letter also

Quite often on a series that has clean-up patches, the individual patches
may fit within the cc limit but the cover letter does not. Apply the same
limit to the cover letter.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Chris Packham <judge.packham@gmail.com>
4 years agodoc: driver-model: there is no UCLASS_ETHERNET
Heinrich Schuchardt [Wed, 26 Feb 2020 19:18:54 +0000 (20:18 +0100)]
doc: driver-model: there is no UCLASS_ETHERNET

%s/UCLASS_ETHERNET/UCLASS_ETH/g

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Simon Glass <sjg@chromium.org>
4 years agoconfigs: sandbox: enable LOG_SYSLOG
Heinrich Schuchardt [Wed, 26 Feb 2020 20:48:20 +0000 (21:48 +0100)]
configs: sandbox: enable LOG_SYSLOG

For testing purposes enable the syslog logging driver.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Simon Glass <sjg@chromium.org>
4 years agotest: log: test syslog logging driver
Heinrich Schuchardt [Wed, 26 Feb 2020 20:48:19 +0000 (21:48 +0100)]
test: log: test syslog logging driver

Provide unit tests for the syslog logging driver.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Simon Glass <sjg@chromium.org>
4 years agotest: log functions with CONFIG_LOG=n
Heinrich Schuchardt [Wed, 26 Feb 2020 20:48:18 +0000 (21:48 +0100)]
test: log functions with CONFIG_LOG=n

If CONFIG_LOG=n, we still expect output for log_err(), log_warning(),
log_notice(), log_info() and in case of DEBUG=1 also for log_debug().

Provide unit tests verifying this.

The tests depend on:

CONFIG_CONSOLE_RECORD=y
CONFIG_LOG=n
CONFIG_UT_LOG=y

It may be necessary to increase the value of CONFIG_SYS_MALLOC_F_LEN to
accommodate CONFIG_CONSOLE_RECORD=y.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Simon Glass <sjg@chromium.org>
4 years agolog: output for CONFIG_LOG=n
Heinrich Schuchardt [Wed, 26 Feb 2020 20:48:17 +0000 (21:48 +0100)]
log: output for CONFIG_LOG=n

If CONFIG_LOG=n, we should still output errors, warnings, notices, infos,
and for DEBUG=1 also debug messages.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Simon Glass <sjg@chromium.org>
4 years agolog: syslog driver
Heinrich Schuchardt [Wed, 26 Feb 2020 20:48:16 +0000 (21:48 +0100)]
log: syslog driver

Provide a log driver that broadcasts RFC 3164 messages to syslog servers.
rsyslog is one implementation of such a server.

The messages are sent to the local broadcast address 255.255.255.255 on
port 514.

The environment variable log_hostname can be used to provide the HOSTNAME
field for the messages. The optional TIMESTAMP field of RFC 3164 is not
provided.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Simon Glass <sjg@chromium.org>
4 years agolog: correct CONFIG_LOG_TEST prerequisites
Heinrich Schuchardt [Wed, 26 Feb 2020 20:48:15 +0000 (21:48 +0100)]
log: correct CONFIG_LOG_TEST prerequisites

An error

undefined reference to `do_log_test'

occurs for CONFIG_CMD_LOG=y, CONFIG_LOG_TEST=y, CONGIG_UNIT_TEST=n

Make CONFIG_UNIT_TEST a prerequisite.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Simon Glass <sjg@chromium.org>
4 years agodm: core: Move "/chosen" and "/firmware" node scan
Patrick Delaunay [Tue, 18 Feb 2020 14:43:46 +0000 (15:43 +0100)]
dm: core: Move "/chosen" and "/firmware" node scan

Use the new function dm_scan_fdt_ofnode_path() to scan all the nodes
which aren't devices themselves but may contain some:
- "/chosen"
- "/clocks"
- "/firmware"

The patch removes the strcmp call in recursive function dm_scan_fdt_live()
and also corrects a conflict with the 2 applied patches in
the commit 1712ca21924b ("dm: core: Scan /firmware node by default")
and in the commit 747558d01457 ("dm: fdt: scan for devices under
/firmware too"): the subnodes of "/firmware" (optee for example)
are bound 2 times.

For example the dm tree command result on STM32MP1 is:

STM32MP> dm tree
 Class     Index  Probed  Driver                Name
 -----------------------------------------------------------
 root          0  [ + ]   root_driver           root_driver
 firmware      0  [   ]   psci                  |-- psci
 sysreset      0  [   ]   psci-sysreset         |   `-- psci-sysreset
 simple_bus    0  [ + ]   generic_simple_bus    |-- soc
...
 tee           0  [ + ]   optee                 |-- optee
...
 tee           1  [   ]   optee                 `-- optee

Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
Tested-by: Michal Simek <michal.simek@xilinx.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
4 years agodm: core: remove redundant assignment
Heinrich Schuchardt [Sat, 15 Feb 2020 20:46:04 +0000 (21:46 +0100)]
dm: core: remove redundant assignment

Variable count is initialized at the start of every round of the while
loop and it is not used after the while loop. So there is no need to
initialize it beforehand.

Identified by cppcheck.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Simon Glass <sjg@chromium.org>
4 years agodm: core: remove redundant if statement
Heinrich Schuchardt [Sat, 15 Feb 2020 20:38:48 +0000 (21:38 +0100)]
dm: core: remove redundant if statement

The value of parent is not changed in the first if statement. So we can
merge the two if statements depending on parent.

Indicated by cppcheck.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Simon Glass <sjg@chromium.org>
4 years agosandbox: also restore terminal settings when killed by SIGINT
Rasmus Villemoes [Fri, 14 Feb 2020 10:58:37 +0000 (10:58 +0000)]
sandbox: also restore terminal settings when killed by SIGINT

Hitting Ctrl-C is a documented way to exit the sandbox, but it is not
actually equivalent to the reset command. The latter, since it follows
normal process exit, takes care to reset terminal settings and
restoring the O_NONBLOCK behaviour of stdin (and, in a terminal, that
is usually the same file description as stdout and stderr, i.e. some
/dev/pts/NN).

Failure to restore (remove) O_NONBLOCK from stdout/stderr can cause
very surprising and hard to debug problems back in the terminal. For
example, I had "make -j8" consistently failing without much
information about just exactly what went wrong, but sometimes I did
get a "echo: write error". I was at first afraid my disk was getting
bad, but then a simple "dmesg" _also_ failed with write error - so it
was writing to the terminal that was buggered. And both "make -j8" and
dmesg in another terminal window worked just fine.

So install a SIGINT handler so that if the chosen terminal
mode (cooked or raw-with-sigs) means Ctrl-C sends a SIGINT, we will
still call os_fd_restore(), then reraise the signal and die as usual
from SIGINT.

Before:

$ grep flags /proc/$$/fdinfo/1
flags:  0102002
$ ./u-boot
# hit Ctrl-C
$ grep flags /proc/$$/fdinfo/1
flags:  0106002

After:

$ grep flags /proc/$$/fdinfo/1
flags:  0102002
$ ./u-boot
# hit Ctrl-C
$ grep flags /proc/$$/fdinfo/1
flags:  0102002

Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
Reviewed-by: Simon Glass <sjg@chromium.org>
4 years agosandbox: Update PCI nodes in dts files
Tom Rini [Tue, 11 Feb 2020 17:41:23 +0000 (12:41 -0500)]
sandbox: Update PCI nodes in dts files

The way the PCI nodes are written today causes a number of warnings if
we stop disabling some of the warnings we pass to DTC.  As these
warnings aren't disabled in current Linux Kernel builds, we should aim
to not disable them here either, so rewrite these slightly.  Update the
driver model doc as well.

Cc: Simon Glass <sjg@chromium.org>
Signed-off-by: Tom Rini <trini@konsulko.com>
4 years agosandbox: p2sb: Silence compiler warning
Simon Glass [Sat, 8 Feb 2020 14:53:10 +0000 (07:53 -0700)]
sandbox: p2sb: Silence compiler warning

Some compilers produce a warning about 'child' being used before init.
Silence this by setting to NULL at the start.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
4 years agoserial: Set baudrate on boot
Sean Anderson [Sun, 2 Feb 2020 18:15:17 +0000 (13:15 -0500)]
serial: Set baudrate on boot

Currently, the baud rate is never set on boot. This works ok when a previous
bootloader has configured the baudrate properly, or when the baudrate is set to
a reasonable default in the serial driver's probe(). However, when this is not
the case, we could be using a different baud rate than what was configured.

Signed-off-by: Sean Anderson <seanga2@gmail.com>
4 years agoMerge https://gitlab.denx.de/u-boot/custodians/u-boot-x86
Tom Rini [Thu, 16 Apr 2020 12:56:37 +0000 (08:56 -0400)]
Merge https://gitlab.denx.de/u-boot/custodians/u-boot-x86

- Provide serial base clock speed via getinfo() for ACPI SPCR
- Initial ACPI support from DM core by leveraging existing ACPI support
  in x86

4 years agotest: Add hexdump.h to the unit test header
Simon Glass [Wed, 8 Apr 2020 22:57:40 +0000 (16:57 -0600)]
test: Add hexdump.h to the unit test header

Since ut_asserteq_mem() uses bin2hex() we should include this header in
ut.h to avoid errors. Add it.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Wolfgang Wallner <wolfgang.wallner@br-automation.com>
4 years agoacpi: Add support for DMAR
Simon Glass [Wed, 8 Apr 2020 22:57:39 +0000 (16:57 -0600)]
acpi: Add support for DMAR

The DMA Remapping Reporting (DMAR) table contains information about DMA
remapping.

Add a version simple version of this table with only the minimum fields
filled out. i.e. no entries.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Wolfgang Wallner <wolfgang.wallner@br-automation.com>
4 years agoacpi: Add a central location for table version numbers
Simon Glass [Wed, 8 Apr 2020 22:57:38 +0000 (16:57 -0600)]
acpi: Add a central location for table version numbers

Each ACPI table has its own version number. Add the version numbers in a
single function so we can keep them consistent and easily see what
versions are supported.

Start a new acpi_table file in a generic directory to house this function.
We can move things over to this file from x86 as needed.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Wolfgang Wallner <wolfgang.wallner@br-automation.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
4 years agoacpi: Add an __ACPI__ preprocessor symbol
Simon Glass [Wed, 8 Apr 2020 22:57:37 +0000 (16:57 -0600)]
acpi: Add an __ACPI__ preprocessor symbol

The ASL compiler cannot handle C structures and the like so needs some
sort of header guard around these.

We already have an __ASSEMBLY__ #define but it seems best to create a new
one for ACPI since the rules may be different.

Add the check to a few files that ACPI always includes.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Wolfgang Wallner <wolfgang.wallner@br-automation.com>
4 years agox86: Move acpi_table header to main include/ directory
Simon Glass [Wed, 8 Apr 2020 22:57:36 +0000 (16:57 -0600)]
x86: Move acpi_table header to main include/ directory

This file is potentially useful to other architectures saddled with ACPI
so move most of its contents to a common location.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Wolfgang Wallner <wolfgang.wallner@br-automation.com>
4 years agox86: Move acpi_s3.h to include/acpi/
Simon Glass [Wed, 8 Apr 2020 22:57:35 +0000 (16:57 -0600)]
x86: Move acpi_s3.h to include/acpi/

This header relates to ACPI and we are about to add some more ACPI
headers. Move this one into a new directory so they are together.

The header inclusion in pci_rom.c is not specific to x86 anymore, so drop
the #ifdef CONFIG_X86.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Wolfgang Wallner <wolfgang.wallner@br-automation.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
4 years agoacpi: Add a simple sandbox test
Simon Glass [Wed, 8 Apr 2020 22:57:34 +0000 (16:57 -0600)]
acpi: Add a simple sandbox test

Add a sandbox test for the basic ACPI functionality we have so far.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Wolfgang Wallner <wolfgang.wallner@br-automation.com>
4 years agodts: Add a binding for hid-over-i2c
Simon Glass [Wed, 8 Apr 2020 22:57:32 +0000 (16:57 -0600)]
dts: Add a binding for hid-over-i2c

Add this binding from Linux v5.4.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
4 years agodm: core: Add basic ACPI support
Simon Glass [Thu, 9 Apr 2020 16:27:38 +0000 (10:27 -0600)]
dm: core: Add basic ACPI support

ACPI (Advanced Configuration and Power Interface) is a standard for
specifying information about a platform. It is a little like device
tree but the bindings are part of the specification and it supports an
interpreted bytecode language.

Driver model does not use ACPI for U-Boot's configuration, but it is
convenient to have it support generation of ACPI tables for passing to
Linux, etc.

As a starting point, add an optional set of ACPI operations to each
device. Initially only a single operation is available, to obtain the
ACPI name for the device. More operations are added later.

Enable ACPI for sandbox to ensure build coverage and so that we can add
tests.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Wolfgang Wallner <wolfgang.wallner@br-automation.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
4 years agox86: apl: Add Global NVS table header
Simon Glass [Wed, 8 Apr 2020 22:57:30 +0000 (16:57 -0600)]
x86: apl: Add Global NVS table header

Add the C version of this header. It includes a few Chrome OS bits which
are disabled for a normal build.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Wolfgang Wallner <wolgang.wallner@br-automation.com>
4 years agopci: Adjust dm_pci_read_bar32() to return errors correctly
Simon Glass [Thu, 9 Apr 2020 16:27:36 +0000 (10:27 -0600)]
pci: Adjust dm_pci_read_bar32() to return errors correctly

At present if reading a BAR returns 0xffffffff then the value is masked
and a different value is returned. This makes it harder to detect the
problem when debugging.

Update the function to avoid masking in this case.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Wolfgang Wallner <wolfgang.wallner@br-automation.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
4 years agox86: apl: Move p2sb ofdata reading to the correct method
Simon Glass [Wed, 8 Apr 2020 22:57:28 +0000 (16:57 -0600)]
x86: apl: Move p2sb ofdata reading to the correct method

With P2SB the initial BAR (base-address register) is set up by TPL and
this is used unchanged right through U-Boot.

At present the reading of this address is split between the ofdata() and
probe() methods. There are a few problems that are unique to the p2sb.
One is that its children need to call pcr_read32(), etc. which needs to
have the p2sb address correct. Also some of its children are pinctrl
devices and pinctrl is used when any device is probed. So p2sb really
needs to get its base address set up in ofdata_to_platdata(), before it is
probed.

Another point is that reading the p2sb BAR will not work if the p2sb is
hidden. The FSP-S seems to hide it, presumably to avoid confusing PCI
enumeration.

Reading ofdata in ofdata_to_platdata() is the correct place anyway, so
this is easy to fix.

Move the code into one place and use the early-regs property in all cases
for simplicity and to avoid needing to probe any PCI devices just to read
the BAR.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Wolfgang Wallner <wolfgang.wallner@br-automation.com>
Tested-by: Wolfgang Wallner <wolfgang.wallner@br-automation.com>
4 years agox86: Correct wording of coreboot source code
Simon Glass [Wed, 8 Apr 2020 22:57:27 +0000 (16:57 -0600)]
x86: Correct wording of coreboot source code

Some files are taken or modified from coreboot, but the files are
no-longer part of the coreboot project. Fix the wording in a few places.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Wolfgang Wallner <wolfgang.wallner@br-automation.com>
4 years agodm: pci: Allow disabling auto-config for a device
Simon Glass [Wed, 8 Apr 2020 22:57:26 +0000 (16:57 -0600)]
dm: pci: Allow disabling auto-config for a device

Add a means to avoid configuring a device when needed. Add an explanation
of why this is useful to the binding file.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
4 years agotpm: Don't cleanup unless an error happens
Simon Glass [Wed, 8 Apr 2020 22:57:25 +0000 (16:57 -0600)]
tpm: Don't cleanup unless an error happens

At present the cleanup() method is called on every transfer. It should
only be called on failing transfers. Fix this and tidy up the error
handling a little.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
4 years agotpm: cr50: Use the correct GPIO binding
Simon Glass [Wed, 8 Apr 2020 22:57:24 +0000 (16:57 -0600)]
tpm: cr50: Use the correct GPIO binding

This device should use ready-gpios rather than ready-gpio. Fix it.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
4 years agotpm: cr50: Add a comment for cr50_priv
Simon Glass [Wed, 8 Apr 2020 22:57:23 +0000 (16:57 -0600)]
tpm: cr50: Add a comment for cr50_priv

Add a comment for the private structure

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
4 years agotpm: cr50: Release locality on exit
Simon Glass [Wed, 8 Apr 2020 22:57:22 +0000 (16:57 -0600)]
tpm: cr50: Release locality on exit

At present the cr50 driver claims the locality and does not release it for
Linux. This causes problems. Fix this by tracking what is claimed, and
adding a 'remove' method.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
4 years agospi: Add SPI mode enums
Simon Glass [Wed, 8 Apr 2020 22:57:21 +0000 (16:57 -0600)]
spi: Add SPI mode enums

With ACPI we need to describe the settings of the SPI bus. Add enums to
handle this.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Wolfgang Wallner <wolfgang.wallner@br-automation.com>
4 years agocpu: Support querying the address width
Simon Glass [Wed, 8 Apr 2020 22:57:20 +0000 (16:57 -0600)]
cpu: Support querying the address width

Different CPUs may support different address widths, meaning the amount of
memory they can address. Add a property for this to the cpu_info struct.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
4 years agox86: acpi: Let OS know that console already had been initialized
Andy Shevchenko [Thu, 27 Feb 2020 15:21:56 +0000 (17:21 +0200)]
x86: acpi: Let OS know that console already had been initialized

SPCR has no clue if the UART base clock speed is different to
the default one. However, the SPCR 1.04 defines baud rate 0 as
a preconfigured state of UART and OS is supposed not to touch
the configuration of the serial device.

Linux kernel supports that starting from v5.0, see commit
b413b1abeb21 ("ACPI: SPCR: Consider baud rate 0 as preconfigured state")
for the details.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
4 years agoserial: ns16550: Provide UART base clock speed in ->getinfo()
Andy Shevchenko [Thu, 27 Feb 2020 15:21:55 +0000 (17:21 +0200)]
serial: ns16550: Provide UART base clock speed in ->getinfo()

Some callers may need the UART base clock speed value.
Provide it in the ->getinfo() callback.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
4 years agodm: serial: Add clock member to struct serial_device_info
Andy Shevchenko [Thu, 27 Feb 2020 15:21:54 +0000 (17:21 +0200)]
dm: serial: Add clock member to struct serial_device_info

Some callers of serial_getinfo() would like to know the UART base
clock speed in order to make decision what to pass to OS in some
cases. In particular, ACPI SPCR table expects only certain base
clock speed and thus we have to act accordingly.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
4 years agoefi_loader: add some description about UEFI secure boot
AKASHI Takahiro [Tue, 14 Apr 2020 02:51:54 +0000 (11:51 +0900)]
efi_loader: add some description about UEFI secure boot

A small text in docs/uefi/uefi.rst was added to explain how we can
configure and utilise UEFI secure boot feature on U-Boot.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Acked-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
4 years agotravis: add packages for UEFI secure boot test
AKASHI Takahiro [Tue, 14 Apr 2020 02:51:53 +0000 (11:51 +0900)]
travis: add packages for UEFI secure boot test

Pytest for UEFI secure boot will use several host commands.
In particular, Test setup relies on efitools, whose version must be v1.5.2
or later. So fetch a new version of deb package directly.
Please note it has a dependency on mtools, which must also be installed
along wih efitools.

In addition, the path, '/sbin', is added to PATH for use of sgdisk and
mkfs.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Reviewed-by: Tom Rini <trini@konsulko.com>
4 years agosandbox: add extra configurations for UEFI and related tests
AKASHI Takahiro [Tue, 14 Apr 2020 02:51:52 +0000 (11:51 +0900)]
sandbox: add extra configurations for UEFI and related tests

Adding those extra configurations allows us to successfully run UEFI
secure boot pytest on Travis CI.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
4 years agoefi_loader, pytest: add UEFI secure boot tests (image)
AKASHI Takahiro [Tue, 14 Apr 2020 02:51:51 +0000 (11:51 +0900)]
efi_loader, pytest: add UEFI secure boot tests (image)

Provide test cases for
 * image authentication for signed images
   (test_efi_secboot/test_signed.py)
 * image authentication for unsigned images
   (test_efi_secboot/test_unsigned.py)

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
4 years agoefi_loader, pytest: add UEFI secure boot tests (authenticated variables)
AKASHI Takahiro [Tue, 14 Apr 2020 02:51:50 +0000 (11:51 +0900)]
efi_loader, pytest: add UEFI secure boot tests (authenticated variables)

Provide a couple of test cases for variable authentication.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
4 years agoefi_loader, pytest: set up secure boot environment
AKASHI Takahiro [Tue, 14 Apr 2020 02:51:49 +0000 (11:51 +0900)]
efi_loader, pytest: set up secure boot environment

A fixture for UEFI secure boot tests (image authentication and variable
authentication) is defined. A small file system with test data in a single
partition formatted in fat is created.

This test requires efitools v1.5.2 or later. If the system's efitools
is older, you have to build it on your own and define EFITOOLS_PATH.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
4 years agocmd: efidebug: add "test bootmgr" sub-command
AKASHI Takahiro [Tue, 14 Apr 2020 02:51:48 +0000 (11:51 +0900)]
cmd: efidebug: add "test bootmgr" sub-command

This sub-command will be used to test image authentication,
in particular, a case where efi_load_image() failed with
EFI_SECURITY_VIOLATION but we still want to try efi_start_image().
We won't run such a case under normal bootmgr because it simply
refuses to call efi_start_image() if anything but EFI_SUCCESS
is returned when loading an image.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
4 years agocmd: env: add "-at" option to "env set -e" command
AKASHI Takahiro [Tue, 14 Apr 2020 02:51:47 +0000 (11:51 +0900)]
cmd: env: add "-at" option to "env set -e" command

With "-at" option, EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS
will be passed to SetVariable() to authenticate the variable.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
4 years agocmd: env: use appropriate guid for authenticated UEFI variable
AKASHI Takahiro [Tue, 14 Apr 2020 02:51:46 +0000 (11:51 +0900)]
cmd: env: use appropriate guid for authenticated UEFI variable

A signature database variable is associated with a specific guid.
For convenience, if user doesn't supply any guid info, "env set|print -e"
should complement it.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
4 years agoefi_loader: set up secure boot
AKASHI Takahiro [Tue, 14 Apr 2020 02:51:45 +0000 (11:51 +0900)]
efi_loader: set up secure boot

The following variable is exported as UEFI specification defines:
SignatureSupport: array of GUIDs representing the type of signatures
                      supported by the platform firmware

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
4 years agoefi_loader: image_loader: support image authentication
AKASHI Takahiro [Tue, 14 Apr 2020 02:51:44 +0000 (11:51 +0900)]
efi_loader: image_loader: support image authentication

With this commit, image validation can be enforced, as UEFI specification
section 32.5 describes, if CONFIG_EFI_SECURE_BOOT is enabled.

Currently we support
* authentication based on db and dbx,
  so dbx-validated image will always be rejected.
* following signature types:
    EFI_CERT_SHA256_GUID (SHA256 digest for unsigned images)
    EFI_CERT_X509_GUID (x509 certificate for signed images)
Timestamp-based certificate revocation is not supported here.

Internally, authentication data is stored in one of certificates tables
of PE image (See efi_image_parse()) and will be verified by
efi_image_authenticate() before loading a given image.

It seems that UEFI specification defines the verification process
in a bit ambiguous way. I tried to implement it as closely to as
EDK2 does.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
4 years agoefi_loader: variable: add VendorKeys variable
AKASHI Takahiro [Tue, 14 Apr 2020 02:51:43 +0000 (11:51 +0900)]
efi_loader: variable: add VendorKeys variable

The following variable is exported as UEFI specification defines:
VendorKeys: whether the system is configured to use only vendor-provided
    keys or not
The value will have to be modified if a platform has its own way of
initializing signature database, in particular, PK.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
4 years agoefi_loader: variable: add secure boot state transition
AKASHI Takahiro [Tue, 14 Apr 2020 02:51:42 +0000 (11:51 +0900)]
efi_loader: variable: add secure boot state transition

UEFI specification defines several global variables which are related to
the current secure boot state. In this commit, those values will be
maintained according to operations. Currently, AuditMode and DeployedMode
are defined but not implemented.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
4 years agoefi_loader: variable: support variable authentication
AKASHI Takahiro [Tue, 14 Apr 2020 02:51:41 +0000 (11:51 +0900)]
efi_loader: variable: support variable authentication

With this commit, EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS
is supported for authenticated variables and the system secure state
will transfer between setup mode and user mode as UEFI specification
section 32.3 describes.

Internally, authentication data is stored as part of authenticated
variable's value. It is nothing but a pkcs7 message (but we need some
wrapper, see efi_variable_parse_signature()) and will be validated by
efi_variable_authenticate(), hence efi_signature_verify_with_db().

Associated time value will be encoded in "{...,time=...}" along with
other UEFI variable's attributes.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>