]> git.ipfire.org Git - thirdparty/u-boot.git/log
thirdparty/u-boot.git
4 years agoarm64: a37xx: pinctrl: Fix PWM pins indexes
Marek Behún [Mon, 28 Feb 2022 14:59:37 +0000 (15:59 +0100)] 
arm64: a37xx: pinctrl: Fix PWM pins indexes

Commit 5534fb4f4833 ("arm64: a37xx: pinctrl: Correct PWM pins
definitions") introduced bogus definitions os PWM pins: all 4 pins have
index 11, instead of having indexes 11, 12, 13, 14.

Fix this.

Signed-off-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Stefan Roese <sr@denx.de>
4 years agodrivers: rtc: fix null pointer access in armada38x_rtc_reset
Francois Berder [Mon, 28 Feb 2022 09:31:45 +0000 (10:31 +0100)] 
drivers: rtc: fix null pointer access in armada38x_rtc_reset

Replace null pointer by pointer to device registers when calling
armada38x_rtc_write.

Signed-off-by: Francois Berder <fberder@outlook.fr>
Reviewed-by: Stefan Roese <sr@denx.de>
4 years agoarm: a37xx: pci: Fix a3700_fdt_fix_pcie_regions() function again
Pali Rohár [Wed, 23 Feb 2022 12:52:32 +0000 (13:52 +0100)] 
arm: a37xx: pci: Fix a3700_fdt_fix_pcie_regions() function again

The a3700_fdt_fix_pcie_regions() function still computes nonsense.

It computes the fixup offset from the PCI address taken from the first
row of the "ranges" array, which means that:
- PCI address must equal CPU address (otherwise the computed fix offset
  will be wrong),
- the first row must contain the lowest address.

This is the case for the default device-tree, which is why we didn't
notice it.

It also adds the fixup offset to all PCI and CPU addresses, which is
wrong.

Instead:
1) The fixup offset must be computed from the CPU address, not PCI
   address.

2) The fixup offset must be computed from the row containing the lowest
   CPU address, which is not necessarily contained in the first row.

3) The PCI address - the address to which the PCIe controller remaps the
   address space as seen from the point of view of the PCIe device -
   must be fixed by the fix offset in the same way as the CPU address
   only in the special case when the CPU adn PCI addresses are the same.
   Same addresses means that remapping is disabled, and thus if we
   change the CPU address, we need also to change the PCI address so
   that the remapping is still disabled afterwards.

Consider an example:
  The ranges entries contain:
    PCI address   CPU address
    70000000      EA000000
    E9000000      E9000000
    EB000000      EB000000

  By default CPU PCIe window is at:        E8000000 - F0000000
  Consider the case when TF-A moves it to: F2000000 - FA000000

  Until now the function would take the PCI address of the first entry:
  70000000, and the new base, F2000000, to compute the fix offset:
  F2000000 - 70000000 = 82000000, and then add 8200000 to all addresses,
  resulting in
    PCI address   CPU address
    F2000000      6C000000
    6B000000      6B000000
    6D000000      6D000000
  which is complete nonsense - none of the CPU addresses is in the
  requested window.

  Now it will take the lowest CPU address, which is in second row,
  E9000000, and compute the fix offset F2000000 - E9000000 = 09000000,
  and then add it to all CPU addresses and those PCI addresses which
  equal to their corresponding CPU addresses, resulting in
    PCI address   CPU address
    70000000      F3000000
    F2000000      F2000000
    F4000000      F4000000
  where all of the CPU addresses are in the needed window.

Fixes: 4a82fca8e330 ("arm: a37xx: pci: Fix a3700_fdt_fix_pcie_regions() function")
Signed-off-by: Pali Rohár <pali@kernel.org>
Signed-off-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Stefan Roese <sr@denx.de>
4 years agoarm: mvebu: turris_omnia: Enable ext4 write support in defconfig
Marek Behún [Fri, 18 Feb 2022 16:46:25 +0000 (17:46 +0100)] 
arm: mvebu: turris_omnia: Enable ext4 write support in defconfig

Enable ext4 write support in Turris Omnia's defconfig. Some users find
it useful.

Signed-off-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Stefan Roese <sr@denx.de>
4 years agopci: pci_mvebu: Cleanup macro names
Pali Rohár [Fri, 18 Feb 2022 11:25:23 +0000 (12:25 +0100)] 
pci: pci_mvebu: Cleanup macro names

Use "MVPCIE_" prefix instead of generic "PCIE_" prefix for pci_mvebu.c
specific macros. Define offset macros for Root Port registers and use
standard register macros from pci.h when accessing Root Port registers.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Stefan Roese <sr@denx.de>
4 years agopci: pci_mvebu: Remove unused SELECT and lane_mask
Pali Rohár [Fri, 18 Feb 2022 11:25:22 +0000 (12:25 +0100)] 
pci: pci_mvebu: Remove unused SELECT and lane_mask

Macro SELECT() is unused and struct mvebu_pcie field lane_mask is unused
too. Remove them.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Stefan Roese <sr@denx.de>
4 years agotools: kwboot: Fix quitting terminal
Pali Rohár [Fri, 18 Feb 2022 11:24:13 +0000 (12:24 +0100)] 
tools: kwboot: Fix quitting terminal

Sometimes kwboot after quitting terminal prints error message:

  terminal: Bad address

This is caused by trying to call write() syscall with count of (size_t)-1
bytes.

When quit sequence is split into more read() calls then number of input
bytes (nin) at the end of cycle can underflow and be negative. Fix it.

Fixes: de7514046ea5 ("tools: kwboot: Fix detection of quit esc sequence")
Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Stefan Roese <sr@denx.de>
4 years agoMerge branch '2022-03-03-Kconfig-migrations' into next
Tom Rini [Thu, 3 Mar 2022 21:51:24 +0000 (16:51 -0500)] 
Merge branch '2022-03-03-Kconfig-migrations' into next

- Assorted Kconfig migrations and related cleanups.

4 years agoConvert CONFIG_CHIP_SELECTS_PER_CTRL to Kconfig
Tom Rini [Fri, 25 Feb 2022 16:19:53 +0000 (11:19 -0500)] 
Convert CONFIG_CHIP_SELECTS_PER_CTRL to Kconfig

This converts the following to Kconfig:
   CONFIG_CHIP_SELECTS_PER_CTRL

Cc: Alison Wang <alison.wang@nxp.com>
Cc: Pramod Kumar <pramod.kumar_1@nxp.com>
Cc: Priyanka Jain <priyanka.jain@nxp.com>
Cc: Rajesh Bhagat <rajesh.bhagat@nxp.com>
Cc: Vladimir Oltean <olteanv@gmail.com>
Signed-off-by: Tom Rini <trini@konsulko.com>
4 years agoConvert CONFIG_CFI_FLASH_USE_WEAK_ACCESSORS to Kconfig
Tom Rini [Fri, 25 Feb 2022 16:19:52 +0000 (11:19 -0500)] 
Convert CONFIG_CFI_FLASH_USE_WEAK_ACCESSORS to Kconfig

This converts the following to Kconfig:
   CONFIG_CFI_FLASH_USE_WEAK_ACCESSORS

Signed-off-by: Tom Rini <trini@konsulko.com>
4 years agonet: Remove CONFIG_BOOTP_DHCP_REQUEST_DELAY
Tom Rini [Fri, 25 Feb 2022 16:19:51 +0000 (11:19 -0500)] 
net: Remove CONFIG_BOOTP_DHCP_REQUEST_DELAY

This option is not in use anywhere and the documentation implies it's
for some very old and unlikely to be seen currently issues.  Rather than
update the code so the CONFIG symbol could be easily in Kconfig, remove
the code.

Cc: Ramon Fried <rfried.dev@gmail.com>
Signed-off-by: Tom Rini <trini@konsulko.com>
Acked-by: Ramon Fried <rfried.dev@gmail.com>
4 years agoConvert CONFIG_BOOTP_MAY_FAIL et al to Kconfig
Tom Rini [Fri, 25 Feb 2022 16:19:50 +0000 (11:19 -0500)] 
Convert CONFIG_BOOTP_MAY_FAIL et al to Kconfig

This converts the following to Kconfig:
   CONFIG_BOOTP_MAY_FAIL
   CONFIG_BOOTP_VENDOREX
   CONFIG_BOOTP_BOOTFILESIZE
   CONFIG_BOOTP_NISDOMAIN
   CONFIG_BOOTP_TIMEOFFSET

Cc: Ramon Fried <rfried.dev@gmail.com>
Signed-off-by: Tom Rini <trini@konsulko.com>
4 years agopowerpc: P1010RDB: Move CONFIG_BOOTMODE out of CONFIG namespace
Tom Rini [Fri, 25 Feb 2022 16:19:49 +0000 (11:19 -0500)] 
powerpc: P1010RDB: Move CONFIG_BOOTMODE out of CONFIG namespace

This slight environment modification shouldn't be in the CONFIG
namespace, change it.

Signed-off-by: Tom Rini <trini@konsulko.com>
4 years agoConvert CONFIG_BOOTFILE to Kconfig
Tom Rini [Fri, 25 Feb 2022 16:19:48 +0000 (11:19 -0500)] 
Convert CONFIG_BOOTFILE to Kconfig

This converts the following to Kconfig:
   CONFIG_BOOTFILE

Signed-off-by: Tom Rini <trini@konsulko.com>
4 years agoConvert CONFIG_BOARD_POSTCLK_INIT to Kconfig
Tom Rini [Fri, 25 Feb 2022 16:19:47 +0000 (11:19 -0500)] 
Convert CONFIG_BOARD_POSTCLK_INIT to Kconfig

This converts the following to Kconfig:
   CONFIG_BOARD_POSTCLK_INIT

Signed-off-by: Tom Rini <trini@konsulko.com>
4 years agoConvert CONFIG_BOARD_ECC_SUPPORT to Kconfig
Tom Rini [Fri, 25 Feb 2022 16:19:46 +0000 (11:19 -0500)] 
Convert CONFIG_BOARD_ECC_SUPPORT to Kconfig

This converts the following to Kconfig:
   CONFIG_BOARD_ECC_SUPPORT

Signed-off-by: Tom Rini <trini@konsulko.com>
4 years agoConvert CONFIG_BIOSEMU to Kconfig
Tom Rini [Fri, 25 Feb 2022 16:19:45 +0000 (11:19 -0500)] 
Convert CONFIG_BIOSEMU to Kconfig

This converts the following to Kconfig:
   CONFIG_BIOSEMU

Cc: Simon Glass <sjg@chromium.org>
Signed-off-by: Tom Rini <trini@konsulko.com>
4 years agoConvert CONFIG_BOARD_COMMON to Kconfig
Tom Rini [Wed, 23 Feb 2022 17:28:17 +0000 (12:28 -0500)] 
Convert CONFIG_BOARD_COMMON to Kconfig

This converts the following to Kconfig:
   CONFIG_BOARD_COMMON

Signed-off-by: Tom Rini <trini@konsulko.com>
4 years agoarm: exynos: Move BL1/2 SPI flash defines to their user, drop CONFIG
Tom Rini [Wed, 23 Feb 2022 17:28:16 +0000 (12:28 -0500)] 
arm: exynos: Move BL1/2 SPI flash defines to their user, drop CONFIG

These particular values are not configurable and today we always set
CONFIG_SECURE_BL1_ONLY.  Move these to where they're used in the code,
and drop from the CONFIG namespace.

Cc: Minkyu Kang <mk7.kang@samsung.com>
Cc: Jaehoon Chung <jh80.chung@samsung.com>
Signed-off-by: Tom Rini <trini@konsulko.com>
Reviewed-by: Jaehoon Chung <jh80.chung@samsung.com>
Reviewed-by: Minkyu Kang <mk7.kang@samsung.com>
4 years agoConvert CONFIG_BTB to Kconfig
Tom Rini [Wed, 23 Feb 2022 17:28:15 +0000 (12:28 -0500)] 
Convert CONFIG_BTB to Kconfig

This converts the following to Kconfig:
   CONFIG_BTB

Signed-off-by: Tom Rini <trini@konsulko.com>
4 years agopowerpc: Remove unused MPC8540/60ADS code
Tom Rini [Wed, 23 Feb 2022 17:28:14 +0000 (12:28 -0500)] 
powerpc: Remove unused MPC8540/60ADS code

Remove some code, primarily CPM2 related, that is now unused since the
removal of MPC8540/60ADS.

Fixes 3913191c8a6b ("powerpc: mpc8540ads: mpc8560ads: Drop support for MPC8540/60ADS")
Signed-off-by: Tom Rini <trini@konsulko.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
4 years agoMerge branch '2022-03-02-scmi-updates' into next
Tom Rini [Thu, 3 Mar 2022 19:16:14 +0000 (14:16 -0500)] 
Merge branch '2022-03-02-scmi-updates' into next

- A small set of scmi updates

4 years agoMerge tag 'u-boot-at91-fixes-2022.04-a' of https://source.denx.de/u-boot/custodians...
Tom Rini [Thu, 3 Mar 2022 13:24:37 +0000 (08:24 -0500)] 
Merge tag 'u-boot-at91-fixes-2022.04-a' of https://source.denx.de/u-boot/custodians/u-boot-at91

First set of u-boot-atmel fixes for the 2022.04 cycle:

This fixes set includes only a single fix for the Ethernet on sama7g5ek
board which is broken at the moment.

4 years agoMerge https://gitlab.denx.de/u-boot/custodians/u-boot-fsl-qoriq
Tom Rini [Thu, 3 Mar 2022 13:24:13 +0000 (08:24 -0500)] 
Merge https://gitlab.denx.de/u-boot/custodians/u-boot-fsl-qoriq

Update and fixes for sl28, lx2, pblimage generation for some powerpc
products

4 years agosunxi: f1c100s: Drop SYSRESET to enable reset functionality
Andre Przywara [Wed, 2 Mar 2022 01:30:55 +0000 (01:30 +0000)] 
sunxi: f1c100s: Drop SYSRESET to enable reset functionality

The F1C100s DT contains the wrong compatible string for the watchdog,
which breaks reset functionality.
Updating the DT goes via the Linux tree, but to allow reset
functionality meanwhile (useful for development!), disable SYSRESET for
now, to let the old-fashioned watchdog driver kick in and provide the
reset_cpu() implementation.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
4 years agosunxi: f1c100s: Fix FEL registers restore
Andre Przywara [Tue, 1 Mar 2022 12:21:58 +0000 (12:21 +0000)] 
sunxi: f1c100s: Fix FEL registers restore

Commit 88998f777531 ("arm: arm926ej-s: Add sunxi code") introduced
the ARM926 version of the code to save and restore some FEL state, to
be able to return to the BROM FEL code after the SPL has run.

However during review a change was made, that happened to mess up the
register restore part, so SCTLR and CPSR ended up with the wrong values,
breaking return to FEL.

Use the same offset that we actually save those registers to, to make
FEL booting actually work on the Lichee Pi Nano.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
4 years agomach-sunxi: Enable SPI boot for SUNIV and licheepi nano
Jesse Taube [Sat, 12 Feb 2022 00:32:35 +0000 (19:32 -0500)] 
mach-sunxi: Enable SPI boot for SUNIV and licheepi nano

Enable SPI boot in SPL on SUNIV architecture and use
it in the licheepi nano that uses the F1C100s.

Signed-off-by: Jesse Taube <Mr.Bossman075@gmail.com>
Reviewed-by: Andre Przywara <andre.przywara@arm.com>
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
4 years agomach-sunxi: Add SPL SPI boot for SUNIV
Jesse Taube [Sat, 12 Feb 2022 00:32:34 +0000 (19:32 -0500)] 
mach-sunxi: Add SPL SPI boot for SUNIV

The SUNIV SoCs come with a sun6i-style SPI controller at the base address
of sun4i SPI controller. The module clock of the SPI controller is
missing which leaves us running directly from the AHB clock, which is
set to 200MHz.

Signed-off-by: Icenowy Zheng <icenowy@aosc.io>
[Icenowy: Original implementation]
Signed-off-by: Jesse Taube <Mr.Bossman075@gmail.com>
[Jesse: adaptation to Upstream U-Boot]
Reviewed-by: Andre Przywara <andre.przywara@arm.com>
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
4 years agomach-sunxi: Add boot device detection for SUNIV/F1C100s
Jesse Taube [Sat, 12 Feb 2022 00:32:33 +0000 (19:32 -0500)] 
mach-sunxi: Add boot device detection for SUNIV/F1C100s

In contrast to other Allwinner SoCs the F1C100s BROM does not store a
boot source indicator in the eGON header in SRAM. This leaves the SPL
guessing where we were exactly booted from, and for instance trying
the SD card first, even though we booted from SPI flash.

By inspecting the BROM code and by experimentation, Samuel found that the
top of the BROM stack contains unique pointers for each of the boot
sources, which we can use as a boot source indicator.

This patch removes the existing board_boot_order bodge and replace it
with a proper boot source indication function.

The only caveat is that this only works in the SPL, as the SPL header
gets overwritten with the exception vectors, once U-Boot proper takes
over. Always return MMC0 as the boot source, when called from U-Boot
proper, as a placeholder for now, until we find another way.

Signed-off-by: Jesse Taube <Mr.Bossman075@gmail.com>
Suggested-by: Samuel Holland <samuel@sholland.org>
Reviewed-by: Andre Przywara <andre.przywara@arm.com>
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
4 years agoclk: scmi: register scmi clocks with CCF
Etienne Carriere [Mon, 21 Feb 2022 08:22:42 +0000 (09:22 +0100)] 
clk: scmi: register scmi clocks with CCF

Implements SCMI APIs to retrieve the number exposed SCMI clocks using
SCMI_PROTOCOL_ATTRIBUTES messages and the names of the clocks using
SCMI_CLOCK_ATTRIBUTES messages.

This change updates sandbox SCMI clock test driver to manage these
2 new message IDs.

Cc: Lukasz Majewski <lukma@denx.de>
Cc: Sean Anderson <seanga2@gmail.com>
Cc: Clement Leger <clement.leger@bootlin.com>
Cc: Patrick Delaunay <patrick.delaunay@foss.st.com>
Reviewed-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
Signed-off-by: Gabriel Fernandez <gabriel.fernandez@st.com>
Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org>
4 years agofirmware: scmi: fix sandbox and related tests for clock discovery
Etienne Carriere [Mon, 21 Feb 2022 08:22:41 +0000 (09:22 +0100)] 
firmware: scmi: fix sandbox and related tests for clock discovery

Updates sandbox SCMI clock driver and tests since enabling CCF will
mandate clock discovery that is all exposed SCMI clocks shall be
discovered at initialization. For this reason, sandbox SCMI clock
driver must emulate all clocks exposed by SCMI server, not only those
effectively consumed by some other U-Boot devices.

Therefore the sandbox SCMI test driver exposes 3 clocks (IDs 0, 1 and 2)
and sandbox SCMI clock consumer driver gets 2 of them.

Cc: Simon Glass <sjg@chromium.org>
Reviewed-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org>
4 years agoscmi: change parameter dev in devm_scmi_process_msg
Etienne Carriere [Mon, 21 Feb 2022 08:22:40 +0000 (09:22 +0100)] 
scmi: change parameter dev in devm_scmi_process_msg

Changes devm_scmi_process_msg() first argument from target parent device
to current SCMI device and lookup the SCMI agent device among SCMI device
parents for find the SCMI agent operator needed for communication with
the firmware.

This change is needed in order to support CCF in clk_scmi driver unless
what CCF will fail to find the right udevice related to exposed SCMI
clocks.

This patch allows to simplify the caller sequence, using SCMI device
reference as parameter instead of knowing SCMI uclass topology. This
change also adds some protection in case devm_scmi_process_msg() API
function is called for an invalid device type.

Cc: Lukasz Majewski <lukma@denx.de>
Cc: Sean Anderson <seanga2@gmail.com>
Cc: Jaehoon Chung <jh80.chung@samsung.com>
Cc: Patrick Delaunay <patrick.delaunay@foss.st.com>
Reviewed-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org>
4 years agosandbox: scmi: test against a single scmi agent
Etienne Carriere [Mon, 21 Feb 2022 08:22:39 +0000 (09:22 +0100)] 
sandbox: scmi: test against a single scmi agent

As per DT bindings since Linux kernel v5.14, the device tree can define
only 1 SCMI agent node that is named scmi [1]. As a consequence, change
implementation of the SCMI driver test through sandbox architecture to
reflect that.

This change updates sandbox test DT and sandbox SCMI driver accordingly
since all these are impacted.

Cc: Simon Glass <sjg@chromium.org>
Reviewed-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org>
4 years agodoc: binding: scmi: link to latest Linux kernel binding
Etienne Carriere [Mon, 21 Feb 2022 08:22:38 +0000 (09:22 +0100)] 
doc: binding: scmi: link to latest Linux kernel binding

Changes SCMI bindings documentation to relate to Linux kernel
source tree that recently changed the bindings description to YAML
format.

Reviewed-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
Signed-off-by: Etienne Carriere <etienne.carriere@linaro.org>
4 years agoMerge branch '2022-03-02-armv8-fixes-and-cleanups' into next
Tom Rini [Wed, 2 Mar 2022 18:59:33 +0000 (13:59 -0500)] 
Merge branch '2022-03-02-armv8-fixes-and-cleanups' into next

To quote the author:
I was looking into the arm64 boot code lately and stumbled upon some
issues. Also Nishanth brought back memories of a lengthy debug session,
which was caused due to U-Boot keeping SErrors masked. As the resulting
patches are all somewhat related, I gathered this series here to address
those problems.

Patches 1 to 3 address exception handling issues, with the SError
enablement being the most prominent fix here.
Patch 4 cleans up asm/io.h. This was on the list before[1], but was
somehow lost when it was intercepted by a shorter version of itself.
Patches 5 and 6 clean up some unnecessarily complicated AArch64 assembly
code.

4 years agoarmv8: Fix and simplify branch_if_master/branch_if_slave
Andre Przywara [Fri, 11 Feb 2022 11:29:39 +0000 (11:29 +0000)] 
armv8: Fix and simplify branch_if_master/branch_if_slave

The branch_if_master macro jumps to a label if the CPU is the "master"
core, which we define as having all affinity levels set to 0. To check
for this condition, we need to mask off some bits from the MPIDR
register, then compare the remaining register value against zero.

The implementation of this was slighly broken (it preserved the upper
RES0 bits), overly complicated and hard to understand, especially since
it lacked comments. The same was true for the very similar
branch_if_slave macro.

Use a much shorter assembly sequence for those checks, use the same
masking for both macros (just negate the final branch), and put some
comments on them, to make it clear what the code does.
This allows to drop the second temporary register for branch_if_master,
so we adjust all call sites as well.

Also use the opportunity to remove a misleading comment: the macro
works fine on SoCs with multiple clusters. Judging by the commit
message, the original problem with the Juno SoC stems from the fact that
the master CPU *can* be configured to be from cluster 1, so the
assumption that the master CPU has all affinity values set to 0 does not
hold there. But this is already mentioned above in a comment, so remove
the extra comment.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
4 years agoarmv8: Simplify switch_el macro
Andre Przywara [Fri, 11 Feb 2022 11:29:38 +0000 (11:29 +0000)] 
armv8: Simplify switch_el macro

The switch_el macro is a neat contraption to handle cases where we need
different code depending on the current exception level, but its
implementation was longer than needed.

Simplify it by doing just one comparison, then using the different
condition codes to branch to the desired target. PState.CurrentEL just
holds two bits, and since we don't care about EL0, we can use >, =, < to
select EL3, EL2 and EL1, respectively.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
4 years agoarm: Clean up asm/io.h
Andre Przywara [Fri, 11 Feb 2022 11:29:37 +0000 (11:29 +0000)] 
arm: Clean up asm/io.h

asm/io.h is the header file containing the central MMIO accessor macros.
Judging by the header and the comments, it was apparently once copied
from the Linux kernel, but has deviated since then *heavily*. There is
absolutely no point in staying close to the original Linux code anymore,
so just remove the old cruft, by:
- removing pointless Linux history
- removing commented code
- removing outdated comments
- removing unused definitions (for mem_isa)

This massively improves the readability of the file.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
4 years agoarmv8: Force SP_ELx stack pointer usage
Andre Przywara [Fri, 11 Feb 2022 11:29:36 +0000 (11:29 +0000)] 
armv8: Force SP_ELx stack pointer usage

In ARMv8 we have the choice between two stack pointers to use: SP_EL0 or
SP_ELx, which is banked per exception level. This choice is stored in
the SP field of PState, and can be read and set via the SPSel special
register. When the CPU takes an exception, it automatically switches to
the SP_ELx stack pointer.

Trusted Firmware enters U-Boot typically with SPSel set to 1, so we use
SP_ELx all along as our sole stack pointer, both for normal operation and
for exceptions.

But if we now for some reason enter U-Boot with SPSel cleared, we will
setup and use SP_EL0, which is fine, but leaves SP_ELx uninitialised.
When we now take an exception, we try to save the GPRs to some undefined
location, which will usually end badly.

To make sure we always have SP_ELx pointing to some memory, set SPSel
to 1 in the early boot code, to ensure safe operation at all times.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
4 years agoarmv8: Always unmask SErrors
Andre Przywara [Fri, 11 Feb 2022 11:29:35 +0000 (11:29 +0000)] 
armv8: Always unmask SErrors

The ARMv8 architecture describes the "SError interrupt" as the fourth
kind of exception, next to synchronous exceptions, IRQs, and FIQs.
Those SErrors signal exceptional conditions from which the system might
not easily recover, and are normally generated by the interconnect as a
response to some bus error. A typical situation is access to a
non-existing memory address or device, but it might be deliberately
triggered by a device as well.
The SError interrupt replaces the Armv7 asynchronous abort.

Trusted Firmware enters U-Boot (BL33) typically with SErrors masked,
and we never enable them. However any SError condition still triggers
the SError interrupt, and this condition stays pending, it just won't be
handled. If now later on the Linux kernel unmasks the "A" bit in PState,
it will immediately take the exception, leading to a kernel crash.
This leaves many people scratching their head about the reason for
this, and leads to long debug sessions, possibly looking at the wrong
places (the kernel, but not U-Boot).

To avoid the situation, just unmask SErrors early in the ARMv8 boot
process, so that the U-Boot exception handlers reports them in a timely
manner. As SErrors are typically asynchronous, the register dump does
not need to point at the actual culprit, but it should happen very
shortly after the condition.

For those exceptions to be taken, we also need to route them to EL2,
if U-Boot is running in this exception level.

This removes the respective code snippet from the Freescale lowlevel
routine, as this is now handled in generic ARMv8 code.

Reported-by: Nishanth Menon <nm@ti.com>
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
4 years agocmd: exception: arm64: fix undefined, add faults
Andre Przywara [Fri, 11 Feb 2022 11:29:34 +0000 (11:29 +0000)] 
cmd: exception: arm64: fix undefined, add faults

The arm64 version of the exception command was just defining the
undefined exception, but actually copied the AArch32 instruction.

Replace that with an encoding that is guaranteed to be and stay
undefined. Also add instructions to trigger unaligned access faults and
a breakpoint.
This brings ARM64 on par with ARM(32) for the exception command.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
4 years agoMerge branch '2022-03-02-enable-pylint-in-CI' into next
Tom Rini [Wed, 2 Mar 2022 15:38:00 +0000 (10:38 -0500)] 
Merge branch '2022-03-02-enable-pylint-in-CI' into next

To quote the author:
This series adds a new errors-only pylint check and adds it to the CI
systems.

It also fixes the current errors in the U-Boot Python code, disabling
errors where it seems necessary.

A small patch to buildman allows it to build sandbox without any changes
to the default config file

4 years agoAzure/GitLab CI: Add the pylint checker
Simon Glass [Fri, 11 Feb 2022 20:23:26 +0000 (13:23 -0700)] 
Azure/GitLab CI: Add the pylint checker

Add a check that new Python code does not regress the pylint score for
any module.

Signed-off-by: Simon Glass <sjg@chromium.org>
4 years agobuildman: Update default config to build for sandbox
Simon Glass [Fri, 11 Feb 2022 20:23:25 +0000 (13:23 -0700)] 
buildman: Update default config to build for sandbox

At present the default .buildman file written by buildman does not specify
a default toolchain. Add an 'other' line so this works correctly and
sandbox builds run as expected.

Signed-off-by: Simon Glass <sjg@chromium.org>
4 years agoMakefile: Add a way to check for pylint errors
Simon Glass [Fri, 11 Feb 2022 20:23:24 +0000 (13:23 -0700)] 
Makefile: Add a way to check for pylint errors

Add a new 'pylint_err' target which only reports errors, not warnings.

Signed-off-by: Simon Glass <sjg@chromium.org>
4 years agotest: Correct pylint errors
Simon Glass [Fri, 11 Feb 2022 20:23:23 +0000 (13:23 -0700)] 
test: Correct pylint errors

Fix pylint errors in all test.

This requires adding a get_spawn() method to the ConsoleBase base, so that
its subclass is happy.

Signed-off-by: Simon Glass <sjg@chromium.org>
4 years agomoveconfig: Correct pylint errors
Simon Glass [Fri, 11 Feb 2022 20:23:22 +0000 (13:23 -0700)] 
moveconfig: Correct pylint errors

Fix two pylint errors in this file.

Note ACTION_SPL_NOT_EXIST is not defined so the dead code can be removed.

Signed-off-by: Simon Glass <sjg@chromium.org>
4 years agobinman: Correct pylint errors
Simon Glass [Fri, 11 Feb 2022 20:23:21 +0000 (13:23 -0700)] 
binman: Correct pylint errors

Fix pylint errors that can be fixed and mask those that seem to be
incorrect.

A complication with binman is that it tries to avoid importing libfdt
(or anything that imports it) unless needed, so that things like help
still work if it is missing.

Note that two tests are duplicated in binman and two others have
duplicate names, so both of these issues are fixed also.

Signed-off-by: Simon Glass <sjg@chromium.org>
4 years agodtoc: Correct pylint errors
Simon Glass [Fri, 11 Feb 2022 20:23:20 +0000 (13:23 -0700)] 
dtoc: Correct pylint errors

Fix pylint errors in this directory.

Signed-off-by: Simon Glass <sjg@chromium.org>
4 years agobuildman: Correct pylint errors
Simon Glass [Fri, 11 Feb 2022 20:23:19 +0000 (13:23 -0700)] 
buildman: Correct pylint errors

Fix pylint errors that can be fixed and mask those that seem to be
incorrect.

Signed-off-by: Simon Glass <sjg@chromium.org>
4 years agopatman: Correct pylint errors
Simon Glass [Fri, 11 Feb 2022 20:23:18 +0000 (13:23 -0700)] 
patman: Correct pylint errors

Fix pylint errors that can be fixed and mask those that seem to be
incorrect.

Signed-off-by: Simon Glass <sjg@chromium.org>
4 years agoMerge https://source.denx.de/u-boot/custodians/u-boot-usb
Tom Rini [Tue, 1 Mar 2022 12:48:39 +0000 (07:48 -0500)] 
Merge https://source.denx.de/u-boot/custodians/u-boot-usb

4 years agophy: nop-phy: Fix phy reset if no reset-gpio defined
Tim Harvey [Mon, 28 Feb 2022 22:53:21 +0000 (14:53 -0800)] 
phy: nop-phy: Fix phy reset if no reset-gpio defined

Ensure there is a valid reset-gpio defined before using it.

Fixes: f9852acdce02 ("phy: nop-phy: Fix enabling reset")
Cc: Adam Ford <aford173@gmail.com>
Signed-off-by: Tim Harvey <tharvey@gateworks.com>
4 years agoPrepare v2022.04-rc3 v2022.04-rc3
Tom Rini [Mon, 28 Feb 2022 23:02:33 +0000 (18:02 -0500)] 
Prepare v2022.04-rc3

Signed-off-by: Tom Rini <trini@konsulko.com>
4 years agoMerge branch '2022-02-28-bugfixes'
Tom Rini [Mon, 28 Feb 2022 20:45:52 +0000 (15:45 -0500)] 
Merge branch '2022-02-28-bugfixes'

- Assorted bugfixes

4 years agoboard: stemmy: Detect board variants and patch DTB
Linus Walleij [Sun, 20 Feb 2022 22:47:01 +0000 (23:47 +0100)] 
board: stemmy: Detect board variants and patch DTB

This patch scans the cmdline from the Samsung SBL (second stage
bootloader) and stores the parameters board_id=N and lcdtype=N
in order to augment the DTB for different board and LCD types.

We then add a custom ft_board_setup() callback that will inspect
the DTB and patch it using the stored LCD type. At this point
we know which product we are dealing with, so using the passed
board_id we can also print the board variant for diagnostics.

We patch the Codina, Skomer and Kyle DTBs to use the right
LCD type as passed in lcdtype from the SBL.

This also creates an infrastructure for handling any other
Samsung U8500 board variants that may need a slightly augmented
DTB.

Cc: Markuss Broks <markuss.broks@gmail.com>
Cc: Stephan Gerhold <stephan@gerhold.net>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
4 years agoarm: apple: Switch to fully dynamic mem layout
Janne Grunau [Sat, 19 Feb 2022 13:05:19 +0000 (14:05 +0100)] 
arm: apple: Switch to fully dynamic mem layout

Support for Apple M1 Pro and Max will allow using a single binary for
all M1 SoCs. The M1 Pro/Max have a different memory layout. The RAM
start address is 0x100_0000_0000 instead of 0x8_0000_0000.
Replace the hardcoded memory layout with dynamic initialized
environment variables in board_late_init().

Tested on Mac Mini (2020) and Macbook Pro 14-inch (2021).

Signed-off-by: Janne Grunau <j@jannau.net>
Reviewed-by: Mark Kettenis <kettenis@openbsd.org>
4 years agoarm: pdu001: Setup pinmux for console UART as early as possible
Felix Brack [Mon, 21 Feb 2022 13:26:05 +0000 (14:26 +0100)] 
arm: pdu001: Setup pinmux for console UART as early as possible

To make sure we get a working console as soon as possible in the SPL the
UART pins require to be configured earlier. This is especially
true for the pins of UART3, since the PDU001 board uses this UART for
the console by default.

Signed-off-by: Felix Brack <fb@ltec.ch>
4 years agoarm: pdu001: Fix early debugging UART
Felix Brack [Tue, 15 Feb 2022 14:27:23 +0000 (15:27 +0100)] 
arm: pdu001: Fix early debugging UART

The changes from commit 0dba45864b2a ("arm: Init the debug UART")
prevent the early debug UART from being initialized correctly.
To fix this we not just configure the pin multiplexer but add setting up
early clocks.

Signed-off-by: Felix Brack <fb@ltec.ch>
Reviewed-by: Tom Rini <trini@konsulko.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
4 years agotools: mkimage/dumpimage: Allow to use -l with -T
Pali Rohár [Sun, 13 Feb 2022 00:09:46 +0000 (01:09 +0100)] 
tools: mkimage/dumpimage: Allow to use -l with -T

Currently -l option for mkimage and dumpimage ignores option -T and always
tries to autodetect image type.

With this change it is possible to tell mkimage and dumpimage to parse
image file as specific type (and not random autodetected type). This allows
to use mkimage -l or dumpimage -l as tool for validating image.

params.type for -l option is now by default initialized to zero
(IH_TYPE_INVALID) instead of IH_TYPE_KERNEL. imagetool_get_type() for
IH_TYPE_INVALID returns NULL, which is assigned to tparams. mkimage and
dumpimage code is extended to handle tparams with NULL for -l option. And
imagetool_verify_print_header() is extended to do validation via tparams if
is not NULL.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
4 years agotools: pblimage: fix image header verification function 132/head
Hou Zhiqiang [Thu, 17 Feb 2022 03:51:36 +0000 (11:51 +0800)] 
tools: pblimage: fix image header verification function

The Layerscape platforms have different RCW header value from FSL
PowerPC platforms, the current image header verification callback
is only working on PowerPC, it will fail on Layerscape, this patch
is to fix this issue.

This is a historical problem and exposed by the following patch:
http://patchwork.ozlabs.org/project/uboot/patch/20220114173443.9877-1-pali@kernel.org

Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>
Reviewed-by: Priyanka Jain <priyanka.jain@nxp.com>
4 years agolx2160a: Fix distroboot device list for configs without USB/SCSI/etc
Daniel Klauer [Wed, 9 Feb 2022 14:53:41 +0000 (15:53 +0100)] 
lx2160a: Fix distroboot device list for configs without USB/SCSI/etc

The BOOT_TARGET_DEVICES list for distro_bootcmd was hard-coded to assume
that all boot devices are available/enabled in the configuration,
thus ignoring the actual config settings. The config_distro_bootcmd.h
header file specifically has compile-time checks to detect such problems.

To allow disabling USB, SCSI, etc. in custom lx2160a board configs,
make it depend on the config settings and use only the enabled features.

Signed-off-by: Daniel Klauer <daniel.klauer@gin.de>
Reviewed-by: Priyanka Jain <priyanka.jain@nxp.com>
4 years agoboard: sl28: use fit image generator
Michael Walle [Fri, 25 Feb 2022 12:51:56 +0000 (18:21 +0530)] 
board: sl28: use fit image generator

Simplify the binman config and fdt nodes by using the "@..-SEQ"
substitutions and CONFIG_OF_LIST.

Signed-off-by: Michael Walle <michael@walle.cc>
[Rebased]
Signed-off-by: Priyanka Jain <priyanka.jain@nxp.com>
4 years agoboard: sl28: disable random MAC address generation
Michael Walle [Fri, 25 Feb 2022 12:48:40 +0000 (18:18 +0530)] 
board: sl28: disable random MAC address generation

Nowadays, u-boot (when CONFIG_NET_RANDOM_ETHADDR is set) will set
enetaddr to a random value if not set and then pass the randomly
generated MAC address to linux.

This is bad for the following reasons:
 (1) it makes it impossible for linux to detect this error
 (2) linux won't trigger any fallback mechanism for the case where
     it didn't find any valid MAC address
 (3) a saveenv will store this randomly generated MAC address in the
     environment

Probably, the user will also be unaware that something is wrong. He will
just get different MAC addresses on each reboot, asking himself why this
is the case.

As this board usually have a serial port, the user can just fix this by
setting the MAC address manually in the environment. Also disable the
netconsole just in case, because it cannot be guaranteed that it will
work in any case. After all, this was just a convenience option, because
the bootloader - right now - doesn't have the ability to read the MAC
address, which is stored in the OTP. But it is far more important to
have a clear view of whats wrong with a board and that means we can no
longer use this Kconfig option.

Signed-off-by: Michael Walle <michael@walle.cc>
[Rebased]
Signed-off-by: Priyanka Jain <priyanka.jain@nxp.com>
4 years agoboard: sl28: remove "Useful I2C tricks" section from docs
Michael Walle [Mon, 15 Nov 2021 22:45:50 +0000 (23:45 +0100)] 
board: sl28: remove "Useful I2C tricks" section from docs

They are no longer needed, because we now have proper driver support for
the sl28cpld management controller.

Signed-off-by: Michael Walle <michael@walle.cc>
Reviewed-by: Priyanka Jain <priyanka.jain@nxp.com>
4 years agoboard: sl28: disable recovery watchdog
Michael Walle [Mon, 15 Nov 2021 22:45:49 +0000 (23:45 +0100)] 
board: sl28: disable recovery watchdog

This board has an internal watchdog which supervises the board startup.
Although, the initial state of the watchdog is configurable, it is
enabled by default. In board_late_init(), which means almost everything
worked as expected, disable the watchdog.

Signed-off-by: Michael Walle <michael@walle.cc>
Reviewed-by: Priyanka Jain <priyanka.jain@nxp.com>
4 years agoboard: sl28: enable SoC watchdog support
Michael Walle [Mon, 15 Nov 2021 22:45:48 +0000 (23:45 +0100)] 
board: sl28: enable SoC watchdog support

The SoC provides two additional watchdogs integrated in the SoC. Enable
support for these.

Signed-off-by: Michael Walle <michael@walle.cc>
Reviewed-by: Priyanka Jain <priyanka.jain@nxp.com>
4 years agoboard: sl28: enable sl28cpld support
Michael Walle [Mon, 15 Nov 2021 22:45:47 +0000 (23:45 +0100)] 
board: sl28: enable sl28cpld support

Enable the GPIO and watchdog driver. Don't start the watchdog
automatically, though.

Signed-off-by: Michael Walle <michael@walle.cc>
Reviewed-by: Priyanka Jain <priyanka.jain@nxp.com>
4 years agoboard: sl28: print CPLD version on bootup
Michael Walle [Mon, 15 Nov 2021 22:45:46 +0000 (23:45 +0100)] 
board: sl28: print CPLD version on bootup

Most of the time it is very useful to have the version of the board
management controller. Now that we have a driver, print it during
startup.

Signed-off-by: Michael Walle <michael@walle.cc>
Reviewed-by: Priyanka Jain <priyanka.jain@nxp.com>
4 years agoboard: sl28: fix DRAM pretty print
Michael Walle [Mon, 15 Nov 2021 22:45:45 +0000 (23:45 +0100)] 
board: sl28: fix DRAM pretty print

The current console output is:

DRAM:  4 GiB
DDR    4 GiB (DDR3, 32-bit, CL=11, ECC on)

The size is printed twice and we can save one line of console output if
we join both lines. The new output is as follows:

DRAM:  4 GiB (DDR3, 32-bit, CL=11, ECC on)

Signed-off-by: Michael Walle <michael@walle.cc>
Reviewed-by: Priyanka Jain <priyanka.jain@nxp.com>
4 years agogpio: add sl28cpld driver
Michael Walle [Fri, 25 Feb 2022 12:40:24 +0000 (18:10 +0530)] 
gpio: add sl28cpld driver

The gpio block is part of the sl28cpld sl28cpld management controller.
There are three different flavors: the usual input and output where the
direction is configurable, but also input only and output only variants.

Signed-off-by: Michael Walle <michael@walle.cc>
[Rebased]
Signed-off-by: Priyanka Jain <priyanka.jain@nxp.com>
4 years agowatchdog: add sl28cpld watchdog driver
Michael Walle [Mon, 15 Nov 2021 22:45:43 +0000 (23:45 +0100)] 
watchdog: add sl28cpld watchdog driver

The watchdog timer is part of the sl28cpld management controller. The
watchdog timer usually supervises the bootloader boot-up and if it bites
the failsafe bootloader will be activated. Apart from that it supports
the usual board level reset and one SMARC speciality: driving the
WDT_TIMEOUT# signal.

Signed-off-by: Michael Walle <michael@walle.cc>
Reviewed-by: Priyanka Jain <priyanka.jain@nxp.com>
4 years agomisc: add sl28cpld base driver
Michael Walle [Fri, 25 Feb 2022 12:36:24 +0000 (18:06 +0530)] 
misc: add sl28cpld base driver

Add a multi-function device driver which will probe its children and
provides methods to access the device.

Signed-off-by: Michael Walle <michael@walle.cc>
[Rebased]
Signed-off-by: Priyanka Jain <priyanka.jain@nxp.com>
4 years agoMerge tag 'efi-2022-04-rc3' of https://source.denx.de/u-boot/custodians/u-boot-efi
Tom Rini [Sat, 26 Feb 2022 15:21:39 +0000 (10:21 -0500)] 
Merge tag 'efi-2022-04-rc3' of https://source.denx.de/u-boot/custodians/u-boot-efi

Pull request for efi-2022-04-rc3

Documentation:

* add man-page for fatload
* add SMBIOS table page

UEFI:

* partial fix for UEFI secure boot with intermediate certs
* disable watchdog when returning to command line
* reset system after capsule update

4 years agoMerge https://source.denx.de/u-boot/custodians/u-boot-sh
Tom Rini [Sat, 26 Feb 2022 15:21:13 +0000 (10:21 -0500)] 
Merge https://source.denx.de/u-boot/custodians/u-boot-sh

- rzg2_beacon updates

4 years agoefi_loader: update the timing of enabling and disabling EFI watchdog
Masahisa Kojima [Tue, 22 Feb 2022 00:58:30 +0000 (09:58 +0900)] 
efi_loader: update the timing of enabling and disabling EFI watchdog

UEFI specification requires that 5 minutes watchdog timer is
armed before the firmware's boot manager invokes an EFI boot option.
This watchdog timer is updated as follows, according to the
UEFI specification.

 1) The EFI Image may reset or disable the watchdog timer as needed.
 2) If control is returned to the firmware's boot manager,
    the watchdog timer must be disabled.
 3) On successful completion of EFI_BOOT_SERVICES.ExitBootServices()
    the watchdog timer is disabled.

1) is up to the EFI image, and 3) is already implemented in U-Boot.
This patch implements 2), the watchdog is disabled when control is
returned to U-Boot.

In addition, current implementation arms the EFI watchdog at only
the first "bootefi" invocation. The EFI watchdog must be armed
in every EFI boot option invocation.

Signed-off-by: Masahisa Kojima <masahisa.kojima@linaro.org>
Reviewed-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
4 years agoefi_loader: test/py: Reset system after capsule update on disk
Masami Hiramatsu [Wed, 16 Feb 2022 06:16:12 +0000 (15:16 +0900)] 
efi_loader: test/py: Reset system after capsule update on disk

Add a cold reset soon after processing capsule update on disk.
This is required in UEFI specification 2.9 Section 8.5.5
"Delivery of Capsules via file on Mass Storage device" as;

    In all cases that a capsule is identified for processing the system is
    restarted after capsule processing is completed.

This also reports the result of each capsule update so that the user can
notice that the capsule update has been succeeded or not from console log.

Signed-off-by: Masami Hiramatsu <masami.hiramatsu@linaro.org>
Reviewed-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
4 years agotest/py: Handle expected reboot while booting sandbox
Masami Hiramatsu [Wed, 16 Feb 2022 06:16:02 +0000 (15:16 +0900)] 
test/py: Handle expected reboot while booting sandbox

Add expected_reset optional argument to ConsoleBase::ensure_spawned(),
ConsoleBase::restart_uboot() and ConsoleSandbox::restart_uboot_with_flags()
so that it can handle a reset while the 1st boot process after main
boot logo before prompt correctly.

Signed-off-by: Masami Hiramatsu <masami.hiramatsu@linaro.org>
Reviewed-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
4 years agotest/py: Handle expected reset by command
Masami Hiramatsu [Wed, 16 Feb 2022 06:15:52 +0000 (15:15 +0900)] 
test/py: Handle expected reset by command

Add wait_for_reboot optional argument to ConsoleBase::run_command()
so that it can handle an expected reset by command execution.

This is useful if a command will reset the sandbox while testing
such commands, e.g. run_command("reset", wait_for_reboot = True)

Signed-off-by: Masami Hiramatsu <masami.hiramatsu@linaro.org>
Reviewed-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
4 years agoefi_loader: use efi_update_capsule_firmware() for capsule on disk
Masami Hiramatsu [Wed, 16 Feb 2022 06:15:42 +0000 (15:15 +0900)] 
efi_loader: use efi_update_capsule_firmware() for capsule on disk

Since the efi_update_capsule() represents the UpdateCapsule() runtime
service, it has to handle the capsule flags and update ESRT. However
the capsule-on-disk doesn't need to care about such things.

Thus, the capsule-on-disk should use the efi_capsule_update_firmware()
directly instead of calling efi_update_capsule().

This means the roles of the efi_update_capsule() and capsule-on-disk
are different. We have to keep the efi_update_capsule() for providing
runtime service API at boot time.

Suggested-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Signed-off-by: Masami Hiramatsu <masami.hiramatsu@linaro.org>
Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
4 years agoefi_loader: fix uefi secure boot with intermediate certs
Ilias Apalodimas [Mon, 14 Feb 2022 09:14:22 +0000 (11:14 +0200)] 
efi_loader: fix uefi secure boot with intermediate certs

The general rule of accepting or rejecting an image is
 1. Is the sha256 of the image in dbx
 2. Is the image signed with a certificate that's found in db and
    not in dbx
 3. The image carries a cert which is signed by a cert in db (and
    not in dbx) and the image can be verified against the former
 4. Is the sha256 of the image in db

For example SHIM is signed by "CN=Microsoft Windows UEFI Driver Publisher",
which is issued by "CN=Microsoft Corporation UEFI CA 2011", which in it's
turn is issued by "CN=Microsoft Corporation Third Party Marketplace Root".
The latter is a self-signed CA certificate and with our current implementation
allows shim to execute if we insert it in db.

However it's the CA cert in the middle of the chain which usually ends up
in the system's db.  pkcs7_verify_one() might or might not return the root
certificate for a given chain.  But when verifying executables in UEFI,  the
trust anchor can be in the middle of the chain, as long as that certificate
is present in db.  Currently we only allow this check on self-signed
certificates,  so let's remove that check and allow all certs to try a
match an entry in db.

Open questions:
- Does this break any aspect of variable authentication since
  efi_signature_verify() is used on those as well?

Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
4 years agotools: mkeficapsule: remove duplicated code
AKASHI Takahiro [Wed, 16 Feb 2022 01:49:51 +0000 (10:49 +0900)] 
tools: mkeficapsule: remove duplicated code

That code is mistakenly duplicated due to copy-and-paste error.
Just remove it.

Fixes: CID 348360
Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Reviewed-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
4 years agodoc: describe fatload command
Heinrich Schuchardt [Fri, 18 Feb 2022 18:33:09 +0000 (19:33 +0100)] 
doc: describe fatload command

Man-page for fatload command.

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
4 years agodoc: describe generation of SMBIOS table
Heinrich Schuchardt [Wed, 16 Feb 2022 06:59:31 +0000 (07:59 +0100)] 
doc: describe generation of SMBIOS table

SMBIOS is not x86 specific. So we should have an architecture independent
page describing it.

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
4 years agoarm: rmobile: rzg2_beacon: Enable proper Ethernet PHY
Adam Ford [Fri, 25 Feb 2022 20:32:53 +0000 (14:32 -0600)] 
arm: rmobile: rzg2_beacon: Enable proper Ethernet PHY

The wrong phy was being enabled, because it worked and the proper
PHY did not.  After the Renesas maintainer made some adjustments
to the device tree, Linux was able to use the proper driver, and
when that device tree was ported to Linux, the ethernet stopped
working due to the lack of rgmii-rxid support.  Now that
rgmii-rxid is supported, enable the proper driver to restore
ethernet function.

Fixes: 1eaf61c84db6 ("arm: dts: beacon-rzg2: Resync device trees with Linux 5.16-rc3")
Signed-off-by: Adam Ford <aford173@gmail.com>
4 years agonet: ravb: Add tx/rx delay flag checks and support for rgmii-rxid
Adam Ford [Fri, 25 Feb 2022 20:32:52 +0000 (14:32 -0600)] 
net: ravb: Add tx/rx delay flag checks and support for rgmii-rxid

Some boards like the Beacon RZ/G2 SOM use either flags for
tx-internal-delay-ps, rx-internal-delay-ps or rgmii-rxid.

In Linux the APSR_RDM flag is set when either rx-internal-delay-ps
is set or the mode is rgmii-rxid, and the APSR_TDM is set when
tx-internal-delay-ps is found or rgmii-txid is set, and both
are set if rgmii-id is set.

The ravb driver in U-Boot driver was missing rgmii-rxid support,
so add that support in a similar fashion to what is done in Linux.

Signed-off-by: Adam Ford <aford173@gmail.com>
4 years agoMerge tag 'clk-2022.04-rc2' of https://source.denx.de/u-boot/custodians/u-boot-clk
Tom Rini [Fri, 25 Feb 2022 16:21:32 +0000 (11:21 -0500)] 
Merge tag 'clk-2022.04-rc2' of https://source.denx.de/u-boot/custodians/u-boot-clk

Clock patches for v2022.04-rc2

This has an assortment of cleanups and the occasional bugfix. Also present
is the addition of the clock subsystem documentation to HTML docs.

CI: https://source.denx.de/u-boot/custodians/u-boot-clk/-/pipelines/11075

4 years agoscripts: Makefile.lib: generate dsdt_generated.c instead of dsdt.c
Philippe Reynes [Tue, 22 Feb 2022 13:54:39 +0000 (14:54 +0100)] 
scripts: Makefile.lib: generate dsdt_generated.c instead of dsdt.c

There is a conflict between the static file
lib/acpi/dsdt.c and the file dsdt.c generated
dynamicaly by scripts/Makefile.lib. When a
mrproper is done, the static file dsdt.c is
removed. If a build with acpi enabled is
launched after, the following error is raised:

  CC      lib/acpi/acpi_table.o
make[2]: *** No rule to make target 'lib/acpi/dsdt.asl', needed by 'lib/acpi/dsdt.c'.  Stop.
scripts/Makefile.build:394: recipe for target 'lib/acpi' failed

To avoid such error, the generated file is named
dsdt_generated.c instead of dstdt.c.

Signed-off-by: Philippe Reynes <philippe.reynes@softathome.com>
Tested-by: Heiko Thiery <heiko.thiery@gmail.com>
4 years agocmd: clk: fix long help message
Patrick Delaunay [Mon, 31 Jan 2022 16:21:40 +0000 (17:21 +0100)] 
cmd: clk: fix long help message

Fix the long help message for "clk setfreq" command

Fixes: 7ab418fbe612 ("clk: add support for setting clk rate from cmdline")
Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
Reviewed-by: Sean Anderson <seanga2@gmail.com>
Link: https://lore.kernel.org/r/20220131172131.4.Ic863c28ffdcc15b3f4616434c2efd88b4e45495c@changeid
4 years agocmd: clk: update result of do_clk_setfreq
Patrick Delaunay [Mon, 31 Jan 2022 16:21:39 +0000 (17:21 +0100)] 
cmd: clk: update result of do_clk_setfreq

Update the result of do_clk_setfreq and always returns a CMD_RET_ value
(-EINVAL was a possible result).

This patch avoid the CLI output "exit not allowed from main input shell."

Fixes: 7ab418fbe612 ("clk: add support for setting clk rate from cmdline")
Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
Reviewed-by: Sean Anderson <seanga2@gmail.com>
Link: https://lore.kernel.org/r/20220131172131.3.Iec2029edb7fc0b29e13bcb86058ad2f614f62779@changeid
4 years agocmd: clk: replace clk_lookup by uclass_get_device_by_name
Patrick Delaunay [Mon, 31 Jan 2022 16:21:38 +0000 (17:21 +0100)] 
cmd: clk: replace clk_lookup by uclass_get_device_by_name

The function clk_lookup can be replaced by a direct call
to uclass_get_device_by_name for UCLASS_CLK.

This patch removes duplicated codes by the generic DM API and avoids
issue in clk_lookup because result of uclass_get_device wasn't tested;
when ret < 0, dev = NULL and dev->name is invalid, the next function
call strcmp(name, dev->name) causes a crash.

Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
Link: https://lore.kernel.org/r/20220131172131.2.I7bc7762eff1e31ab7ff5b34c416ee03b8fe52200@changeid
4 years agocmd: clk: test the number of argument in setfreq command
Patrick Delaunay [Mon, 31 Jan 2022 16:21:37 +0000 (17:21 +0100)] 
cmd: clk: test the number of argument in setfreq command

Test the number of argument in setfreq command to avoid a crash when
the command setfreq is called without argument:

  STM32MP> clk setfreq
  data abort
  pc : [<ddba3f18>]    lr : [<ddba3f89>]
  reloc pc : [<c018ff18>]    lr : [<c018ff89>]
  sp : dbaf45b8  ip : ddb1d859  fp : 00000002
  r10: dbb3fd80  r9 : dbb11e90  r8 : ddbf38cc
  r7 : ddb39725  r6 : 00000000  r5 : 00000000  r4 : dbb3fd84
  r3 : dbb3fd84  r2 : 0000000a  r1 : dbaf45bc  r0 : 00000011
  Flags: nzCv  IRQs off  FIQs off  Mode SVC_32 (T)
  Code: 4dd3 1062 85a3 ddbd (7803) 2b30
  Resetting CPU ...

Fixes: 7ab418fbe612 ("clk: add support for setting clk rate from cmdline")
Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
Reviewed-by: Sean Anderson <seanga2@gmail.com>
Link: https://lore.kernel.org/r/20220131172131.1.I32a8f213d330dccd922f7aafc60d3d63fcbe8615@changeid
4 years agoclk: ccf: correct the test on the parent uclass in clk_enable/clk_disable
Patrick Delaunay [Mon, 24 Jan 2022 13:17:14 +0000 (14:17 +0100)] 
clk: ccf: correct the test on the parent uclass in clk_enable/clk_disable

It is safe to check if the uclass id on the device is UCLASS_CLK
before to call the clk_ functions, but today this comparison is
not done on the device used in API: clkp->dev->parent
but on the device himself: clkp->dev.

This patch corrects this behavior and tests if the parent device
is a clock device before to call the clock API, clk_enable or
clk_disable, on this device.

Fixes: 0520be0f67e3 ("clk: prograte clk enable/disable to parent")
Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
Reviewed-by: Sean Anderson <seanga2@gmail.com>
4 years agoclk: Add clk_get_by_name_optional
Sean Anderson [Sat, 15 Jan 2022 20:52:47 +0000 (15:52 -0500)] 
clk: Add clk_get_by_name_optional

This adds a helper function for clk_get_by_name in cases where the clock is
optional. Hopefully this helps point driver writers in the right direction.
Also convert some existing users.

Signed-off-by: Sean Anderson <seanga2@gmail.com>
Reviewed-by: Neil Armstrong <narmstrong@baylibre.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Link: https://lore.kernel.org/r/20220115205247.566210-2-seanga2@gmail.com
4 years agoclk: Add driver API to HTML docs
Sean Anderson [Wed, 22 Dec 2021 17:11:13 +0000 (12:11 -0500)] 
clk: Add driver API to HTML docs

This converts the existing driver API docs (clk-uclass.h) to kernel doc
format and adds them to the HTML documentation. Because the kernel doc
sphinx converter does not handle functions in structs very well, the
individual methods are documented separately. This is primarily inspired by
the phylink documentation [1], which uses this trick extensively.

[1] https://www.kernel.org/doc/html/latest/networking/kapi.html#c.phylink_mac_ops

Signed-off-by: Sean Anderson <seanga2@gmail.com>
Tested-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Simon Glass <sjg@chromium.org>
Link: https://lore.kernel.org/r/20211222171114.3091780-5-seanga2@gmail.com
4 years agoclk: Add client API to HTML docs
Sean Anderson [Wed, 22 Dec 2021 17:11:12 +0000 (12:11 -0500)] 
clk: Add client API to HTML docs

This converts the existing client (aka clk.h) documentation to kernel doc
format, and adds it to the HTML docs. I have tried to preserve existing
comments as much as possible, refraining from semantic changes.

Signed-off-by: Sean Anderson <seanga2@gmail.com>
Tested-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Simon Glass <sjg@chromium.org>
Link: https://lore.kernel.org/r/20211222171114.3091780-4-seanga2@gmail.com
[rebased onto u-boot/master and resolved conflicts]
Signed-off-by: Sean Anderson <seanga2@gmail.com>
4 years agoclk: Inline clk_get_*_optional
Sean Anderson [Wed, 22 Dec 2021 17:11:11 +0000 (12:11 -0500)] 
clk: Inline clk_get_*_optional

The optional varients of clk_get_* functions are just simple wrappers.
Reduce code size a bit by inlining them. On platforms where it is not used
(most of them), it will not be compiled in any more. On platforms where
they are used, the inlined branch should not cause any significant growth.

Signed-off-by: Sean Anderson <seanga2@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Link: https://lore.kernel.org/r/20211222171114.3091780-3-seanga2@gmail.com
4 years agoclk: Rename clk_get_optional_nodev
Sean Anderson [Wed, 22 Dec 2021 17:11:10 +0000 (12:11 -0500)] 
clk: Rename clk_get_optional_nodev

This normalizes the name of this accessor function to put "_optional" last.

Signed-off-by: Sean Anderson <seanga2@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Link: https://lore.kernel.org/r/20211222171114.3091780-2-seanga2@gmail.com
4 years agoclk: cdce9xx: Convert .of_xlate to .request
Sean Anderson [Wed, 15 Dec 2021 16:47:17 +0000 (11:47 -0500)] 
clk: cdce9xx: Convert .of_xlate to .request

This xlate function just performs some checking. We can do this in
request() instead and use the default xlate.

Signed-off-by: Sean Anderson <seanga2@gmail.com>
Reviewed-by: Tero Kristo <kristo@kernel.org>
Link: https://lore.kernel.org/r/20211215164718.2778664-1-seanga2@gmail.com
4 years agoclk: versaclock: Remove xlate function
Sean Anderson [Wed, 1 Dec 2021 20:13:17 +0000 (15:13 -0500)] 
clk: versaclock: Remove xlate function

This function is the same as the default xlate. Remove it.

Signed-off-by: Sean Anderson <seanga2@gmail.com>
Reviewed-by: Adam Ford <aford173@gmail.com>
Link: https://lore.kernel.org/r/20211201201317.2174547-1-seanga2@gmail.com