platform/kernel/u-boot.git
3 years agoARM: rmobile: beacon: Remove duplicated for RZ/G2 M/N/H
Adam Ford [Mon, 20 Sep 2021 16:14:29 +0000 (11:14 -0500)]
ARM: rmobile: beacon: Remove duplicated for RZ/G2 M/N/H

Now that TARGET_BEACON_RZG2M can handle all the work that
was done with TARGET_BEACON_RZG2N and TARGET_BEACON_RZG2H,
remove them since they just create more duplicate code.

Signed-off-by: Adam Ford <aford173@gmail.com>
3 years agoARM: rmobile: beacon: Support RZ/G2 [M/N/H] on TARGET_BEACON_RZG2M
Adam Ford [Mon, 20 Sep 2021 16:14:28 +0000 (11:14 -0500)]
ARM: rmobile: beacon: Support RZ/G2 [M/N/H] on TARGET_BEACON_RZG2M

The three different boards share the same board file and only differ
in terms of which SoC is being used.  By enabling FIT on
TARGET_BEACON_RZG2M, it can support all three boards and elimate
duplicate code.

Signed-off-by: Adam Ford <aford173@gmail.com>
3 years agoARM: rmobile: Enable board detection when FIT is enabled
Adam Ford [Mon, 20 Sep 2021 16:14:27 +0000 (11:14 -0500)]
ARM: rmobile: Enable board detection when FIT is enabled

There are three boards from Beacon, RZ/G2 M/N/H which all
use the same board file, but different device trees.
Add code to automatically select the proper device tree
based on the CPU type.

Signed-off-by: Adam Ford <aford173@gmail.com>
3 years agoMerge https://source.denx.de/u-boot/custodians/u-boot-mmc
Tom Rini [Fri, 29 Oct 2021 12:27:32 +0000 (08:27 -0400)]
Merge https://source.denx.de/u-boot/custodians/u-boot-mmc

- Fix mmc_switch timeout
- Update mmc hwpartitiion command
- Support wait_dat0 for Freescale eSDHC/sdhci drivers

3 years agommc: arm_pl180_mmci: Enable HWFC for specific versions of MCI
Usama Arif [Tue, 19 Oct 2021 14:49:48 +0000 (15:49 +0100)]
mmc: arm_pl180_mmci: Enable HWFC for specific versions of MCI

There are 4 registers (PERIPHID{0-3}) that contain the ID of MCI.
For MMCs' with peripheral id 0x02041180 and 0x03041180, H/W flow control
needs to be enabled for multi block writes (MMC CMD 18).

Signed-off-by: Usama Arif <usama.arif@arm.com>
Reviewed-by: Jaehoon Chung <jh80.chung@samsung.com>
Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
3 years agommc: Fix mmc_switch excessive timeout
Kirill Kapranov [Sat, 9 Oct 2021 20:49:59 +0000 (23:49 +0300)]
mmc: Fix mmc_switch excessive timeout

Fix branching to avoid premature falling back on a long timeout instead
of continuation of the initialization attempt.

Clear of the comment to avoid the ambiguity.

Signed-off-by: Kirill Kapranov <kirill.kapranov@compulab.co.il>
Cc: Pantelis Antoniou <panto@antoniou-consulting.com>
Cc: Ye Li <ye.li@nxp.com>
Reviewed-by: Marek Behún <marek.behun@nic.cz>
Tested-by: Marek Behún <marek.behun@nic.cz>
Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
3 years agocmd: mmc: check whether card is SD or eMMC before hwpartition
Jaehoon Chung [Fri, 24 Sep 2021 00:23:34 +0000 (09:23 +0900)]
cmd: mmc: check whether card is SD or eMMC before hwpartition

It doesn't need to follow more sequence to do the hwparititioning,
because SD doesn't support hwpartitioning feature.

Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
Reviewed-by: Peng Fan <peng.fan@nxp.com>
Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
3 years agocmd: mmc: Support mmc hwpartition user enh start -
Marek Vasut [Wed, 15 Sep 2021 09:43:13 +0000 (11:43 +0200)]
cmd: mmc: Support mmc hwpartition user enh start -

Add option to extend the hardware partition to the maximum size by
using the '-' dash sign instead of $cnt parameter. This is useful
in case we want to switch the entire eMMC user area into pSLC mode,
especially in case the device may be populated with different size
eMMCs. With this change, we do not have to calculate the number of
blocks of the user area manually.

To switch the pSLC mode for user area, use e.g. the following.
WARNING: This is a one-time irreversible change.
=> mmc hwpartition user enh 0 - wrrel on complete

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Fabio Estevam <festevam@gmail.com>
Cc: Jaehoon Chung <jh80.chung@samsung.com>
Cc: Peng Fan <peng.fan@nxp.com>
Cc: Stefano Babic <sbabic@denx.de>
Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
3 years agodrivers: mmc: Add wait_dat0 support for sdhci driver
Stephen Carlson [Tue, 17 Aug 2021 19:46:41 +0000 (12:46 -0700)]
drivers: mmc: Add wait_dat0 support for sdhci driver

Adds an implementation of the wait_dat0 MMC operation for the DM SDHCI
driver, allowing the driver to continue when the card is ready rather
than waiting for the worst case time on each MMC switch operation.

Signed-off-by: Stephen Carlson <stcarlso@linux.microsoft.com>
Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
3 years agodrivers: mmc: Add wait_dat0 support for Freescale eSDHC driver
Stephen Carlson [Tue, 17 Aug 2021 19:46:40 +0000 (12:46 -0700)]
drivers: mmc: Add wait_dat0 support for Freescale eSDHC driver

Adds an implementation of the wait_dat0 MMC operation for the Freescale
eSHDC driver, allowing the driver to continue when the card is ready
rather than waiting for the worst case time on each MMC switch operation.

Signed-off-by: Stephen Carlson <stcarlso@linux.microsoft.com>
Reviewed-by: Jaehoon Chung <jh80.chung@samsung.com>
Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
3 years agoMerge https://source.denx.de/u-boot/custodians/u-boot-marvell
Tom Rini [Thu, 28 Oct 2021 11:57:54 +0000 (07:57 -0400)]
Merge https://source.denx.de/u-boot/custodians/u-boot-marvell

- mvebu: Fix usage of BIN header arguments (Pali)
- mvebu: turris_omnia: Fix MTD partitions order for Linux (Pali)
- mvebu: nandpagesize support for kwbimage v1 (Pali)

3 years agoarm: mvebu: Fix comments about kwbimage structures
Pali Rohár [Fri, 22 Oct 2021 10:41:10 +0000 (12:41 +0200)]
arm: mvebu: Fix comments about kwbimage structures

kwbimage v1 is used on more SoCs.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Stefan Roese <sr@denx.de>
3 years agoarm: mvebu: Update name of kwbimage v1 field at offset 0x2-0x3
Pali Rohár [Fri, 22 Oct 2021 10:37:48 +0000 (12:37 +0200)]
arm: mvebu: Update name of kwbimage v1 field at offset 0x2-0x3

At this offset is stored nand page size.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Stefan Roese <sr@denx.de>
3 years agotools: kwboot: Patch nandpagesize to zero also for v1 image
Pali Rohár [Fri, 22 Oct 2021 10:37:47 +0000 (12:37 +0200)]
tools: kwboot: Patch nandpagesize to zero also for v1 image

kwbimage v1 has also nandpagesize field. So set it to zero for both image
versions when image is not signed.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Stefan Roese <sr@denx.de>
3 years agotools: kwbimage: Add support for NAND_PAGE_SIZE command also for v1 images
Pali Rohár [Fri, 22 Oct 2021 10:37:46 +0000 (12:37 +0200)]
tools: kwbimage: Add support for NAND_PAGE_SIZE command also for v1 images

The NAND_PAGE_SIZE command is already supported by mkimage for v0 images,
but not for v1 images.

A38x and A39x BootROM supports reading NAND flash page size from v1 image
in the same way as Kirkwood BootROM from v0 image. It it documented in A38x
and A39x Functional Specification.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Stefan Roese <sr@denx.de>
3 years agoarm: mvebu: turris_omnia: Fix MTD partitions order for Linux
Pali Rohár [Thu, 21 Oct 2021 15:55:48 +0000 (17:55 +0200)]
arm: mvebu: turris_omnia: Fix MTD partitions order for Linux

Linux enumerates MTD partitions in DTB order, while the fdt_add_subnode()
function puts a new subnode at the beginning.

To fix this, put MTD partitions into DTB in reverse order.

Fixes: 92f36c8e74c1 ("arm: mvebu: turris_omnia: fixup MTD partitions in Linux' DTB")
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>
3 years agoarm: mvebu: Remove dummy BIN header arguments for SPL binary
Pali Rohár [Thu, 21 Oct 2021 14:46:09 +0000 (16:46 +0200)]
arm: mvebu: Remove dummy BIN header arguments for SPL binary

U-Boot SPL binary does not read BIN header arguments, so passing some dummy
values 0000005b and 00000068 has no effect for U-Boot SPL code.

Probably these two values comes from old Marvell DDR training code which
was separated from U-Boot and used it for some configuration.

Seems that two 32-bit values were specified here to ensure SPL code
alignment to 128-bit boundary as it is required e.g. for A370 or AXP
processors. Main kwbimage header is 64-byte long which is aligned to
128-bit boundary. Optional kwbheader is 32-bit long, number of BIN header
arguments is stored in 32-bit number. So for alignment to 128-bit boundary
is needed 64-bit padding which exactly these two 32-bit dummy arguments
provided.

Now when mkimage correctly aligns start of executable code in BIN header to
128-bit boundary, there is no requirement to put dummy argument values into
kwbimage. So remove them.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Stefan Roese <sr@denx.de>
3 years agoarm: mvebu: Add documentation for save_boot_params() function
Pali Rohár [Thu, 21 Oct 2021 14:46:08 +0000 (16:46 +0200)]
arm: mvebu: Add documentation for save_boot_params() function

Important detail is availability of kwbimage BIN header arguments passed
via r0 and r1 registers by BootROM.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Stefan Roese <sr@denx.de>
3 years agotools: kwbimage: Align BIN header executable code to 128-bit boundary
Pali Rohár [Thu, 21 Oct 2021 14:46:07 +0000 (16:46 +0200)]
tools: kwbimage: Align BIN header executable code to 128-bit boundary

ARM executable code inside the BIN header on some mvebu platforms
(e.g. A370, AXP) must always be aligned with the 128-bit boundary. This
requirement can be met by inserting dummy arguments into BIN header.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Stefan Roese <sr@denx.de>
3 years agotools: kwboot: Align UART baudrate change code in BIN header to 128-bit boundary
Pali Rohár [Thu, 21 Oct 2021 14:46:06 +0000 (16:46 +0200)]
tools: kwboot: Align UART baudrate change code in BIN header to 128-bit boundary

ARM executable code inside the BIN header on some mvebu platforms
(e.g. A370, AXP) must always be aligned with the 128-bit boundary. This
requirement can be met by inserting dummy arguments into BIN header.

Signed-off-by: Pali Rohár <pali@kernel.org>
Reviewed-by: Stefan Roese <sr@denx.de>
3 years agosandbox: Remove OF_HOSTFILE
Ilias Apalodimas [Tue, 26 Oct 2021 06:12:33 +0000 (09:12 +0300)]
sandbox: Remove OF_HOSTFILE

OF_HOSTFILE is used on sandbox configs only.  Although it's pretty
unique and not causing any confusions,  we are better of having simpler
config options for the DTB.

So let's replace that with the existing OF_BOARD.  U-Boot would then
have only three config options for the DTB origin.
- OF_SEPARATE, build separately from U-Boot
- OF_BOARD, board specific way of providing the DTB
- OF_EMBED embedded in the u-boot binary(should not be used in production

Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
Reviewed-by: Simon Glass <sjg@chromium.org>
3 years agoMerge tag 'efi-2022-01-rc1-2' of https://source.denx.de/u-boot/custodians/u-boot-efi
Tom Rini [Tue, 26 Oct 2021 22:42:26 +0000 (18:42 -0400)]
Merge tag 'efi-2022-01-rc1-2' of https://source.denx.de/u-boot/custodians/u-boot-efi

Pull request for efi-2022-01-rc1-2

doc:
Remove obsolete PPC4XX references

UEFI:
Implement missing TCG2 measurements
Code clean up

# gpg: Signature made Tue 26 Oct 2021 05:56:47 PM EDT
# gpg:                using RSA key 6DC4F9C71F29A6FA06B76D33C481DBBC2C051AC4
# gpg: Good signature from "Heinrich Schuchardt <xypron.glpk@gmx.de>" [unknown]
# gpg:                 aka "[jpeg image of size 1389]" [unknown]
# Primary key fingerprint: 6DC4 F9C7 1F29 A6FA 06B7  6D33 C481 DBBC 2C05 1AC4

3 years agoMerge branch '2021-10-26-add-nand-biterr-and-bugfixes'
Tom Rini [Tue, 26 Oct 2021 22:34:55 +0000 (18:34 -0400)]
Merge branch '2021-10-26-add-nand-biterr-and-bugfixes'

- Add biterr sub-command to "nand"
- scmi, rsa, uuid bugfixes, re-sort DFU menu in Kconfig and remove
  superfluous checks before free in env.

3 years agoefi_loader: add DeployedMode and AuditMode variable measurement
Masahisa Kojima [Tue, 26 Oct 2021 08:27:27 +0000 (17:27 +0900)]
efi_loader: add DeployedMode and AuditMode variable measurement

This commit adds the DeployedMode and AuditMode variable
measurement required in TCG PC Client Platform Firmware
Profile Specification.

Signed-off-by: Masahisa Kojima <masahisa.kojima@linaro.org>
3 years agoefi_loader: simplify tcg2_measure_secure_boot_variable()
Masahisa Kojima [Tue, 26 Oct 2021 08:27:26 +0000 (17:27 +0900)]
efi_loader: simplify tcg2_measure_secure_boot_variable()

This commit simplifies tcg2_measure_secure_boot_variable()
using secure_variables table.

Signed-off-by: Masahisa Kojima <masahisa.kojima@linaro.org>
3 years agoefi_loader: add UEFI GPT measurement
Masahisa Kojima [Tue, 26 Oct 2021 08:27:25 +0000 (17:27 +0900)]
efi_loader: add UEFI GPT measurement

This commit adds the UEFI GPT disk partition topology
measurement required in TCG PC Client Platform Firmware
Profile Specification

Signed-off-by: Masahisa Kojima <masahisa.kojima@linaro.org>
3 years agoenv: superfluous check before free()
Heinrich Schuchardt [Mon, 25 Oct 2021 22:41:59 +0000 (00:41 +0200)]
env: superfluous check before free()

Free() checks if its argument in NULL. There is no need for the caller to
do the same.

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
3 years agodfu: Sort Kconfig entries alphabetically
Marek Vasut [Mon, 25 Oct 2021 22:37:05 +0000 (00:37 +0200)]
dfu: Sort Kconfig entries alphabetically

The DFU_MTD Kconfig entry is in the wrong position, move it into the
correct alphabetically sorted position. No functional change.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Lukasz Majewski <lukma@denx.de>
Cc: Patrice Chotard <patrice.chotard@foss.st.com>
Cc: Patrick Delaunay <patrick.delaunay@foss.st.com>
3 years agolib: uuid: fix the test on RNG device presence
Patrick Delaunay [Fri, 22 Oct 2021 15:05:47 +0000 (17:05 +0200)]
lib: uuid: fix the test on RNG device presence

Correct the test on RNG device presence,when ret is equal to 0,
before to call dm_rng_read function.

Without this patch the RNG device is not used when present (when ret == 0)
or a data abort occurs in dm_rng_read when CONFIG_DM_RNG is activated but
the RNG device is not present in device tree (ret != 0 and devp = NULL).

Fixes: 92fdad28cfdf ("lib: uuid: use RNG device if present")
CC: Matthias Brugger <mbrugger@suse.com>
CC: Torsten Duwe <duwe@suse.de>
Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
3 years agocommon: Kconfig.boot: add config SPL_FIT_RSASSA_PSS
Philippe Reynes [Fri, 15 Oct 2021 09:35:03 +0000 (11:35 +0200)]
common: Kconfig.boot: add config SPL_FIT_RSASSA_PSS

The padding pss is only supported on u-boot and tools since
commit 2bbed3ff8c7f ("image: Use Kconfig to enable FIT_RSASSA_PSS on host")

This commit adds the config SPL_FIT_RSASSA_PSS to support
the padding pss in the SPL.

Signed-off-by: Philippe Reynes <philippe.reynes@softathome.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
3 years agolib: rsa: rsa-verify: also check that padding is not NULL
Philippe Reynes [Fri, 15 Oct 2021 09:28:47 +0000 (11:28 +0200)]
lib: rsa: rsa-verify: also check that padding is not NULL

This commit adds a check on the padding in the function rsa_verify_key
to avoid using a NULL pointer.

Signed-off-by: Philippe Reynes <philippe.reynes@softathome.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
3 years agofirmware: scmi: fix struct layout for scmi_clk_rate_set_in
Clément Léger [Wed, 13 Oct 2021 14:00:04 +0000 (16:00 +0200)]
firmware: scmi: fix struct layout for scmi_clk_rate_set_in

First two fields are reversed compared to what is expected by the SCMI
specification.

Signed-off-by: Clément Léger <clement.leger@bootlin.com>
Fixes: 60388844836 ("clk: add clock driver for SCMI agents")

3 years agocmd: nand biterr - Add support for nand biterr command
Balamanikandan Gunasundar [Tue, 29 Jun 2021 07:16:11 +0000 (12:46 +0530)]
cmd: nand biterr - Add support for nand biterr command

The command shall be used to induce bit errors in the nand page
manually. The code flips a bit in the specified offset without
changing the ECC. This helps to see how the software handles the
error.

The patch is ported from
https://patchwork.ozlabs.org/project/uboot/patch/\
1325691123-19565-1-git-send-email-holger.brunck@keymile.com

The implementation is inspired from
'mtd-utils/nand-utils/nandflipbits.c'

Signed-off-by: Balamanikandan Gunasundar <balamanikandan.gunasundar@microchip.com>
3 years agoefi_loader: add SMBIOS table measurement
Masahisa Kojima [Tue, 26 Oct 2021 08:27:24 +0000 (17:27 +0900)]
efi_loader: add SMBIOS table measurement

TCG PC Client Platform Firmware Profile Specification
requires to measure the SMBIOS table that contains static
configuration information (e.g. Platform Manufacturer
Enterprise Number assigned by IANA, platform model number,
Vendor and Device IDs for each SMBIOS table).

The device- and environment-dependent information such as
serial number is cleared to zero or space character for
the measurement.

Existing smbios_string() function returns pointer to the string
with const qualifier, but exisintg use case is updating version
string and const qualifier must be removed.
This commit removes const qualifier from smbios_string()
return value and reuses to clear the strings for the measurement.

This commit also fixes the following compiler warning:

lib/smbios-parser.c:59:39: warning: cast to pointer from integer of
different size [-Wint-to-pointer-cast]
  const struct smbios_header *header = (struct smbios_header *)entry->struct_table_address;

Signed-off-by: Masahisa Kojima <masahisa.kojima@linaro.org>
3 years agoMerge branch '2021-10-25-assorted-updates'
Tom Rini [Tue, 26 Oct 2021 13:31:48 +0000 (09:31 -0400)]
Merge branch '2021-10-25-assorted-updates'

- Allow redundant environment on the eMMC HW boot partitions
- Use LMB in "loads"
- env, dfu + spi, OPTEE bugfixes

3 years agodfu: dfu_sf: Read the SPI flash in 16 MiB chunks
Marek Vasut [Tue, 14 Sep 2021 03:26:51 +0000 (05:26 +0200)]
dfu: dfu_sf: Read the SPI flash in 16 MiB chunks

Not all SPI flashes and controllers can do continuous transfer longer
than 16 MiB, so perform the DFU read in 16 MiB chunks.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Lukasz Majewski <lukma@denx.de>
Reviewed-by: Lukasz Majewski <lukma@denx.de>
3 years agoarm: spl: prepare for jumping to OPTEE
Ricardo Salveti [Wed, 20 Oct 2021 12:12:06 +0000 (15:12 +0300)]
arm: spl: prepare for jumping to OPTEE

Make sure to (if applicable) flush the D-cache, invalidate I-cache,
and disable MMU and caches before jumping to OPTEE.
This fixes the SDP->SPL->OPTEE boot flow on iMX6Q and most likely on
some other ARM SoCs.

Signed-off-by: Ricardo Salveti <ricardo@foundries.io>
Co-developed-by: Oleksandr Suvorov <oleksandr.suvorov@foundries.io>
Signed-off-by: Oleksandr Suvorov <oleksandr.suvorov@foundries.io>
3 years agoefi_loader: simplify tcg2_measure_secure_boot_variable()
Heinrich Schuchardt [Thu, 9 Sep 2021 06:50:01 +0000 (08:50 +0200)]
efi_loader: simplify tcg2_measure_secure_boot_variable()

Don't duplicate GUIDs.

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
3 years agoefi_loader: simplify efi_sigstore_parse_sigdb()
Heinrich Schuchardt [Thu, 9 Sep 2021 06:25:08 +0000 (08:25 +0200)]
efi_loader: simplify efi_sigstore_parse_sigdb()

Simplify efi_sigstore_parse_sigdb() by using existing functions.

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
3 years agoefi_loader: function to get GUID for variable name
Heinrich Schuchardt [Thu, 9 Sep 2021 06:22:58 +0000 (08:22 +0200)]
efi_loader: function to get GUID for variable name

In multiple places we need the default GUID matching a variable name.
The patch provides a library function. For secure boot related variables
like 'PK', 'KEK', 'db' a lookup table is used. For all other variable
names EFI_GLOBAL_VARIABLE is returned.

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
3 years agoefi_loader: treat UEFI variable name as const
Heinrich Schuchardt [Thu, 9 Sep 2021 05:12:14 +0000 (07:12 +0200)]
efi_loader: treat UEFI variable name as const

UEFI variable names are typically constants and hence should be defined as
const. Unfortunately some of our API functions do not define the parameters
for UEFI variable names as const. This requires unnecessary conversions.

Adjust parameters of several internal functions to tre UEFI variable names
as const.

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
3 years agoefi_loader: capsule: add back efi_get_public_key_data()
AKASHI Takahiro [Thu, 7 Oct 2021 06:23:32 +0000 (15:23 +0900)]
efi_loader: capsule: add back efi_get_public_key_data()

The commit 47a25e81d35c ("Revert "efi_capsule: Move signature from DTB to
.rodata"") failed to revert the removal of efi_get_public_key_data().

Add back this function and move it under lib/efi_loader so that other
platforms can utilize it. It is now declared as a weak function so that
it can be replaced with a platform-specific implementation.

Fixes: 47a25e81d35c ("Revert "efi_capsule: Move signature from DTB to
.rodata"")
Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
3 years agoRevert "Revert "doc: Update CapsuleUpdate READMEs""
AKASHI Takahiro [Thu, 7 Oct 2021 06:23:31 +0000 (15:23 +0900)]
Revert "Revert "doc: Update CapsuleUpdate READMEs""

This reverts commit a7e4f905d206d5895dab4bd38a8316e4f2fe15fe.
The description originally written by Sughosh is still valid
even after the commit 47a25e81d35c ("Revert "efi_capsule: Move signature
from DTB to .rodata"") was applied.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
3 years agoRevert "Revert "mkeficapsule: Remove dtb related options""
AKASHI Takahiro [Thu, 7 Oct 2021 06:23:30 +0000 (15:23 +0900)]
Revert "Revert "mkeficapsule: Remove dtb related options""

This reverts commit d428e81266a59974ade74c1ba019af39f23304ab.
We have agreed with removing dtb-related stuff from mkeficapsule
command even if the commit 47a25e81d35c ("Revert "efi_capsule: Move
signature from DTB to .rodata"") was applied.

Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org>
Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
3 years ago.mailmap: add Heinrich Schuchardt
Heinrich Schuchardt [Sat, 23 Oct 2021 14:08:29 +0000 (16:08 +0200)]
.mailmap: add Heinrich Schuchardt

Add a mailmap entry for me.

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
3 years agoefi_loader: add missing const qualifier
Masahisa Kojima [Fri, 22 Oct 2021 11:24:24 +0000 (20:24 +0900)]
efi_loader: add missing const qualifier

This commit fixes the following compilation warning
of boottime->install_configuration_table() function.

lib/efi_selftest/efi_selftest_tcg2.c:475:46:
warning: passing argument 1 of ‘boottime->install_configuration_table’
discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]
  ret = boottime->install_configuration_table(&smbios_guid, dmi);

Signed-off-by: Masahisa Kojima <masahisa.kojima@linaro.org>
Reviewed-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
3 years agodoc: Remove the obsolete README.mpc74xx file
Thomas Huth [Mon, 25 Oct 2021 06:56:14 +0000 (08:56 +0200)]
doc: Remove the obsolete README.mpc74xx file

Support for the PPC74xx processors has been removed in commit
d928664f41 ("powerpc: 74xx_7xx: remove 74xx_7xx cpu support")
more than 6 years ago already. So the corresponding README file
can now be removed, too.

Signed-off-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
3 years agodoc: remove AMCC PPC405 processor references
Heinrich Schuchardt [Sat, 23 Oct 2021 11:14:39 +0000 (13:14 +0200)]
doc: remove AMCC PPC405 processor references

Support for PPC4XX processors has been removed. So we should not mention it
in the documentation.

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
3 years agoenv: mmc: Add support for redundant env in both eMMC boot partitions
Marek Vasut [Sun, 17 Oct 2021 17:23:36 +0000 (19:23 +0200)]
env: mmc: Add support for redundant env in both eMMC boot partitions

Currently the MMC environment driver supports storing redundant environment
only in one eMMC partition at different offsets. This is sub-optimal, since
if this one boot partition is erased, both copies of environment are lost.
Since the eMMC has two boot partitions, add support for storing one copy of
environment in each of the two boot partitions.

To enable this functionality, select CONFIG_SYS_REDUNDAND_ENVIRONMENT to
indicate redundant environment should be used. Set CONFIG_SYS_MMC_ENV_PART
to 1 to indicate environment should be stored in eMMC boot partition. Set
CONFIG_ENV_OFFSET equal to CONFIG_ENV_OFFSET_REDUND, and both to the offset
from start of eMMC boot partition where the environment should be located.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Fabio Estevam <festevam@gmail.com>
Cc: Jaehoon Chung <jh80.chung@samsung.com>
Cc: Peng Fan <peng.fan@nxp.com>
Cc: Stefano Babic <sbabic@denx.de>
3 years agoloads: Block writes into LMB reserved areas of U-Boot
Marek Vasut [Sun, 10 Oct 2021 21:52:41 +0000 (23:52 +0200)]
loads: Block writes into LMB reserved areas of U-Boot

The loads srec loading may overwrite piece of U-Boot accidentally.
Prevent that by using LMB to detect whether upcoming write would
overwrite piece of reserved U-Boot code, and if that is the case,
abort the srec loading.

Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
Cc: Simon Glass <sjg@chromium.org>
Cc: Tom Rini <trini@konsulko.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
3 years agoenv: mmc: Add missing eMMC bootpart restoration to env erase
Marek Vasut [Wed, 6 Oct 2021 16:29:53 +0000 (18:29 +0200)]
env: mmc: Add missing eMMC bootpart restoration to env erase

If the environment is stored in eMMC hardware boot partition, the environment
driver first stores the currently selected eMMC boot partition, then does the
requested operation, and then restores the original boot partition settings.
In case the environment operation fails, the boot partition settings are also
restored.

The 'env erase' implementation in the MMC environment driver lacks the path
which restores the boot partition. This could lead to various failure modes,
like the system boots the wrong copy of bootloader etc. Fix this by filling
in the missing restoration path.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Fabio Estevam <festevam@gmail.com>
Cc: Jaehoon Chung <jh80.chung@samsung.com>
Cc: Peng Fan <peng.fan@nxp.com>
Cc: Stefano Babic <sbabic@denx.de>
3 years agoMerge branch 'master' of https://source.denx.de/u-boot/custodians/u-boot-sunxi
Tom Rini [Mon, 25 Oct 2021 16:09:57 +0000 (12:09 -0400)]
Merge branch 'master' of https://source.denx.de/u-boot/custodians/u-boot-sunxi

- Add and enable watchdog driver
- Prepare for SYSRESET driven AXP poweroff
- Prepare for SoCs without MMC2
- Some fixes for extending SPL (SPL-DM for RISC-V)
- Some preparations for proper VBUS management
- Fix secure monitor move

3 years agommc: sunxi: conditionally include MMC2 initialization code
Icenowy Zheng [Thu, 22 Jul 2021 06:30:05 +0000 (14:30 +0800)]
mmc: sunxi: conditionally include MMC2 initialization code

Allwinner R329 has no MMC2.

Only include the code of MMC2 if the base address of it is defined.

Signed-off-by: Icenowy Zheng <icenowy@sipeed.com>
Reviewed-by: Andre Przywara <andre.przywara@arm.com>
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
3 years agosunxi: only include alias for eMMC when mmc2 used
Icenowy Zheng [Thu, 22 Jul 2021 06:30:04 +0000 (14:30 +0800)]
sunxi: only include alias for eMMC when mmc2 used

Some Allwinner SoCs (e.g. R329) doesn't have a MMC2 controller at all,
and on boards that we do not utilize MMC2, the alias for it is just
useless.

Only include the alias when we specify CONFIG_MMC_SUNXI_EXTRA_SLOT to 2.

Signed-off-by: Icenowy Zheng <icenowy@sipeed.com>
Reviewed-by: Andre Przywara <andre.przywara@arm.com>
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
3 years agosunxi: dts: H616: Enable the watchdog
Samuel Holland [Sun, 22 Aug 2021 18:53:29 +0000 (13:53 -0500)]
sunxi: dts: H616: Enable the watchdog

For some reason, the watchdog was disabled in the H616 device tree. Most
likely this is a copy-paste from the H6 device tree: the H6 watchdog is
disabled because it is broken in some chips. However, there is no
evidence of issues with the H616 watchdog.

Enable the watchdog node so it can be used by the driver.

Signed-off-by: Samuel Holland <samuel@sholland.org>
Reviewed-by: Andre Przywara <andre.przywara@arm.com>
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
3 years agoMerge tag 'u-boot-imx-20211022' of https://gitlab.denx.de/u-boot/custodians/u-boot-imx
Tom Rini [Mon, 25 Oct 2021 13:54:36 +0000 (09:54 -0400)]
Merge tag 'u-boot-imx-20211022' of https://gitlab.denx.de/u-boot/custodians/u-boot-imx

u-boot-imx-20211022
-------------------

CI: https://source.denx.de/u-boot/custodians/u-boot-imx/-/pipelines/9561

- i.MX8:
- Toradex Verdin (switch to binman, cleanup, etc.)
- Phytec phycore_imx8mm (fixes, boot from SPI-NOR)
- fixes for imx8mp_evk
- doc (i.MX): MX8MM with Fast boot
- i.MX6:
- Toradex : colibri-imx6ull with eMMC, fixes
- i.MX7ULP :
- preparation for OPTEE + Serial Number
- generic:
- imx8m_image: Support ddr3 firmware

3 years agosunxi: Enable watchdog timer support by default
Samuel Holland [Sun, 22 Aug 2021 18:53:28 +0000 (13:53 -0500)]
sunxi: Enable watchdog timer support by default

A watchdog helps recover from hangs or failure to boot an OS. It can
also be used by the sysreset framework to intentionally reset the
system. Now that a driver is available, let's enable this functionality
on sunxi boards.

Signed-off-by: Samuel Holland <samuel@sholland.org>
Reviewed-by: Andre Przywara <andre.przywara@arm.com>
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
3 years agowatchdog: Add a driver for the sunxi watchdog
Samuel Holland [Sun, 22 Aug 2021 18:53:27 +0000 (13:53 -0500)]
watchdog: Add a driver for the sunxi watchdog

This driver supports the sun4i/sun6i/sun20i watchdog timers.
They have a maximum timeout of 16 seconds.

Signed-off-by: Samuel Holland <samuel@sholland.org>
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
3 years agoclk: sunxi: Extend DM_RESET selection to SPL
Samuel Holland [Sat, 11 Sep 2021 19:45:31 +0000 (14:45 -0500)]
clk: sunxi: Extend DM_RESET selection to SPL

The sunxi clock driver exposes a reset controller, so it selects the
reset controller framework. Ensure that dependency is also satisfied
when building the driver for the SPL.

Signed-off-by: Samuel Holland <samuel@sholland.org>
Reviewed-by: Andre Przywara <andre.przywara@arm.com>
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
3 years agosunxi: SPL SPI: Allow larger SPL
Andre Przywara [Mon, 5 Jul 2021 23:04:43 +0000 (00:04 +0100)]
sunxi: SPL SPI: Allow larger SPL

The more recent Allwinner SoCs BootROMs can actually load SPL images
larger than 32KB. We use this on the H616 to fit the extra code needed
for the PMIC into the image, and have provisions in board.c to respect
that larger SPL size when booting from MMC.

However the sunxi SPL SPI loader has a hardcoded load offset of 32KB,
which will fail on the H616.

To fix this, use the same algorithm we use for MMC: if the SPL size is
smaller than 32KB, we use 32KB, otherwise we expect the U-Boot payload
directly after the SPL code.

This prepares for SPI booting with larger SPLs like on the H616.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Reviewed-by: Jagan Teki <jagan@amarulasolutions.com>
3 years agopower: pmic: axp: Implement poweroff via sysreset
Samuel Holland [Mon, 25 Oct 2021 02:00:10 +0000 (21:00 -0500)]
power: pmic: axp: Implement poweroff via sysreset

The AXP PMICs have the ability to power off the system. The existing
code for this is duplicated for each PMIC variant, and uses the legacy
non-DM "pmic_bus" interface. When SYSRESET is enabled, this can all be
replaced with a sysreset device using the DM_PMIC interface.

Since the trigger bit is the same on all PMIC variants, use the register
definitions from the oldest supported PMIC.

Signed-off-by: Samuel Holland <samuel@sholland.org>
Reviewed-by: Andre Przywara <andre.przywara@arm.com>
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
3 years agopower: axp: Avoid do_poweroff conflict with sysreset
Samuel Holland [Sun, 22 Aug 2021 23:18:05 +0000 (18:18 -0500)]
power: axp: Avoid do_poweroff conflict with sysreset

The sysreset uclass has an option to provide the do_poweroff() function.
When that option is enabled, the AXP power drivers should not provide
their own definition.

For the AXP305, which is paired with 64-bit systems where TF-A provides
PSCI, there is another possible conflict with the PSCI firmware driver.
This driver can be enabled even if CONFIG_PSCI_RESET is disabled, so
make sure to use the right symbol in the condition.

Signed-off-by: Samuel Holland <samuel@sholland.org>
Reviewed-by: Andre Przywara <andre.przywara@arm.com>
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
3 years agoinclude: axp_pmic: Include headers for all variants
Samuel Holland [Sun, 22 Aug 2021 23:18:04 +0000 (18:18 -0500)]
include: axp_pmic: Include headers for all variants

A single DM-based driver should be able to support some feature for
several PMIC variants where the interface is the same. For example,
all PMIC variants use the same register bit to trigger poweroff.

However, currently only definitions for a single PMIC are available at
a time. This requires drivers to use #ifdefs and different indentifiers
for each variant they support.

Let's simplify this by making register definitions for all variants
available from the header. Then no preprocessor conditions are needed;
the driver can use the register definition from any variant that
supports the relevant feature.

An exception is the GPIO-related definitions, which do not use unique
identifiers. So for now, keep them like before. They will be cleaned up
along with the GPIO driver.

Signed-off-by: Samuel Holland <samuel@sholland.org>
Reviewed-by: Andre Przywara <andre.przywara@arm.com>
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
3 years agoinclude: axp_pmic: Add missing header guard definition
Samuel Holland [Sun, 22 Aug 2021 23:18:03 +0000 (18:18 -0500)]
include: axp_pmic: Add missing header guard definition

This header attempted to avoid multiple inclusion using a header guard.
But the preprocessor symbol was never defined, so the guard had no
effect. Fix this by defining the symbol.

Signed-off-by: Samuel Holland <samuel@sholland.org>
Reviewed-by: Andre Przywara <andre.przywara@arm.com>
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
3 years agotools: mksunxiboot: Use sunxi_image header directly
Samuel Holland [Wed, 13 Oct 2021 00:35:41 +0000 (19:35 -0500)]
tools: mksunxiboot: Use sunxi_image header directly

When adding eGON support to mkimage, the struct boot_file_head
definition was moved to its own header. This is the only thing
mksunxiboot needed out of asm/arch/spl.h. Clean up the relative
include by switching to new header.

Signed-off-by: Samuel Holland <samuel@sholland.org>
Reviewed-by: Andre Przywara <andre.przywara@arm.com>
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
3 years agosunxi: A23/A33/H3: Actually move the secure monitor
Samuel Holland [Tue, 12 Oct 2021 23:54:56 +0000 (18:54 -0500)]
sunxi: A23/A33/H3: Actually move the secure monitor

commit 1ebfc0c631e3 ("sunxi: A23/A33/H3: Move sun8i secure monitor to
SRAM A2") attempted to move the secure monitor to SRAM A2. But not all
sun8i SoCs have SRAM A2, so a check was put in for SUNXI_SRAM_A2_SIZE to
avoid breaking the other SoCs.

However, because the header providing SUNXI_SRAM_A2_SIZE was not
included, this unintentionally skipped the new definitions on all SoCs.
Fix this by including the right header.

Fixes: 1ebfc0c631e3 ("sunxi: A23/A33/H3: Move sun8i secure monitor to SRAM A2")
Signed-off-by: Samuel Holland <samuel@sholland.org>
Reviewed-by: Andre Przywara <andre.przywara@arm.com>
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
3 years agophy: sun4i-usb: Support VBUS detection via power supply
Samuel Holland [Sun, 12 Sep 2021 14:22:42 +0000 (09:22 -0500)]
phy: sun4i-usb: Support VBUS detection via power supply

The device tree binding provides for getting VBUS state from a device
referenced by phandle, as an optional alternative to using a GPIO. In
U-Boot, where there is no power supply class, this VBUS detection will
be implemented using a regulator device and its get_enable method.
Let's hook this up to the PHY driver.

Signed-off-by: Samuel Holland <samuel@sholland.org>
Acked-by: Andre Przywara <andre.przywara@arm.com>
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
3 years agophy: sun4i-usb: Refactor VBUS detection to match Linux
Samuel Holland [Sun, 12 Sep 2021 14:22:41 +0000 (09:22 -0500)]
phy: sun4i-usb: Refactor VBUS detection to match Linux

The Linux driver checks the VBUS detection GPIO first; then VBUS power
supply; then finally assumes VBUS is present. When adding VBUS power
supply support, we want to match that order, so we get the same behavior
in case both a GPIO and a power supply are provided in the device tree.

So refactor the function a bit to remove the early return, and use the
same "assume VBUS is present" final fallback.

Signed-off-by: Samuel Holland <samuel@sholland.org>
Acked-by: Andre Przywara <andre.przywara@arm.com>
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
3 years agophy: sun4i-usb: Remove a couple of debug messages
Samuel Holland [Sun, 12 Sep 2021 14:22:40 +0000 (09:22 -0500)]
phy: sun4i-usb: Remove a couple of debug messages

Both of these messages log the GPIO number of the ID detection GPIO,
which is not terribly useful, especially in the VBUS detection function.

Signed-off-by: Samuel Holland <samuel@sholland.org>
Reviewed-by: Andre Przywara <andre.przywara@arm.com>
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
3 years agosunxi: Select SPL_SEPARATE_BSS
Samuel Holland [Sun, 22 Aug 2021 18:23:53 +0000 (13:23 -0500)]
sunxi: Select SPL_SEPARATE_BSS

sunxi-common.h defines CONFIG_SPL_BSS_START_ADDR to put SPL's BSS in
DRAM. Due to this, we must select SPL_SEPARATE_BSS, or else SPL will
attempt to load its DTB from the wrong address (after BSS in DRAM).

This change fixes booting with SPL_OF_CONTROL=y.

Signed-off-by: Samuel Holland <samuel@sholland.org>
Reviewed-by: Andre Przywara <andre.przywara@arm.com>
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
3 years agoMerge https://source.denx.de/u-boot/custodians/u-boot-spi
Tom Rini [Sat, 23 Oct 2021 14:49:28 +0000 (10:49 -0400)]
Merge https://source.denx.de/u-boot/custodians/u-boot-spi

- Fix mtd erase with mtdpart (Marek Behún)
- NXP fspi driver fixes (Kuldeep Singh)

3 years agospi: nxp_fspi: Implement errata workaround for LS1028A
Kuldeep Singh [Tue, 3 Aug 2021 09:02:58 +0000 (14:32 +0530)]
spi: nxp_fspi: Implement errata workaround for LS1028A

Errata ERR050568 description says that "Flash access by FlexSPI AHB
command may not work with platform frequency equal to 300 MHz" on
LS1028A.

By default, smaller length reads(equal to RX FIFO size) are done by IP
bus and larger length reads using AHB bus. For adding errata workaround,
use IP bus to read entire flash contents and disable AHB path when
platform frequency is 300Mhz.

Signed-off-by: Kuldeep Singh <kuldeep.singh@nxp.com>
Reviewed-by: Jagan Teki <jagan@amarulasolutions.com>
3 years agospi: nxp-fspi: Add support for IP read only
Kuldeep Singh [Tue, 3 Aug 2021 09:02:57 +0000 (14:32 +0530)]
spi: nxp-fspi: Add support for IP read only

Add support for disabling AHB bus and read entire flash contents via IP
bus only. Please note, this enables IP bus read using a quirk which can
be enabled directly in device-type data or in existence of an errata
where AHB bus may need to be disabled.

Signed-off-by: Kuldeep Singh <kuldeep.singh@nxp.com>
Acked-by: Jagan Teki <jagan@amarulasolutions.com>
3 years agomtd: spi-nor-ids: Add SECT_4K to mt25qu512a
Kris Chaplin [Mon, 18 Oct 2021 10:30:18 +0000 (03:30 -0700)]
mtd: spi-nor-ids: Add SECT_4K to mt25qu512a

The mt25qu512a supports 4K or 64K sectors, so adding
SECT_4K to enable 4K sector usage.

Tested on Intel n5x hardware with QSPI carrier card

Signed-off-by: Kris Chaplin <kris.chaplin@linux.intel.com>
Acked-by: Pratyush Yadav <p.yadav@ti.com>
[jagan: droped Tested-by of patch author and datasheet link]
Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
Reviewed-by: Jagan Teki <jagan@amarulasolutions.com>
3 years agomtd: spi-nor-ids: Add is25lp512 and is25wp512 devices
Kris Chaplin [Mon, 18 Oct 2021 10:26:50 +0000 (03:26 -0700)]
mtd: spi-nor-ids: Add is25lp512 and is25wp512 devices

Add is25lp512 and is25wp512 devices to spi-nor id table

Tested on Intel n5x hardware with QSPI carrier card

Signed-off-by: Kris Chaplin <kris.chaplin@linux.intel.com>
[jagan: droped Tested-by of patch author]
Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
Reviewed-by: Jagan Teki <jagan@amarulasolutions.com>
3 years agomtd: Remove mtd_erase_callback() entirely
Marek Behún [Tue, 5 Oct 2021 13:56:06 +0000 (15:56 +0200)]
mtd: Remove mtd_erase_callback() entirely

The original purpose of mtd_erase_callback() in Linux at the time it was
imported to U-Boot, was to inform the caller that erasing is done (since
it was an asynchronous operation).

All supplied callback methods in U-Boot do nothing, but the
mtd_erase_callback() function was (until previous patch) grossly abused
in U-Boot's mtdpart implementation for completely different purpose.

Since we got rid of the abusement, remove the mtd_erase_callback()
function and the .callback member from struct erase_info entirely, in
order to avoid such problems in the future.

Signed-off-by: Marek Behún <marek.behun@nic.cz>
3 years agomtd: mtdpart: Make mtdpart's _erase method sane
Marek Behún [Tue, 5 Oct 2021 13:56:05 +0000 (15:56 +0200)]
mtd: mtdpart: Make mtdpart's _erase method sane

The _erase() method of the mtdpart driver, part_erase(), currently
implements offset shifting (for given mtdpart partition) in a weird way:
  1. part_erase() adds partition offset to block address
  2. parent driver's _erase() method is called
  3. parent driver's _erase() method calls mtd_erase_callback()
  4. mtd_erase_callback() subtracts partition offset from block address
     so that the callback function is given correct address
The problem here is that if the parent's driver does not call
mtd_erase_callback() in some scenario (this was recently a case for
spi_nor_erase(), which did not call mtd_erase_callback() at all), the
offset is not shifted back.

Moreover the code would be more readable if part_erase() not only added
partition offset before calling parent's _erase(), but also subtracted
it back afterwards. Currently the mtd_erase_callback() is expected to do
this subtracting since it does have to do it anyway.

Add the more steps to this procedure:
  5. mtd_erase_callback() adds partition offset to block address so that
     it returns the the erase_info structure members as it received them
  6. part_erase() subtracts partition offset from block address

This makes the code more logical and also prevents errors in case
parent's driver does not call mtd_erase_callback() for some reason.

(BTW, the purpose of mtd_erase_callback() in Linux is to inform the
 caller that it is done, since in Linux erasing is done asynchronously.
 We are abusing the purpose of mtd_erase_callback() in U-Boot for
 completely different purpose. The callback function itself has empty
 implementation in all cases in U-Boot.)

Signed-off-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Simon Glass <sjg@chromium.org>
Tested-by: Masami Hiramatsu <masami.hiramatsu@linaro.org>
3 years agomtd: spi-nor-core: Check for ctrlc() in spi_nor_erase()
Marek Behún [Tue, 5 Oct 2021 13:56:04 +0000 (15:56 +0200)]
mtd: spi-nor-core: Check for ctrlc() in spi_nor_erase()

May it possible to interrupt the spi_nor_erase() function.

Signed-off-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Simon Glass <sjg@chromium.org>
Tested-by: Masami Hiramatsu <masami.hiramatsu@linaro.org>
3 years agomtd: spi-nor-core: Call mtd_erase_callback() from spi_nor_erase()
Marek Behún [Tue, 5 Oct 2021 13:56:03 +0000 (15:56 +0200)]
mtd: spi-nor-core: Call mtd_erase_callback() from spi_nor_erase()

The spi_nor_erase() function does not call mtd_erase_callback() as it
should.

The mtdpart code currently implements the subtraction of partition
offset in mtd_erase_callback().

This results in partition offset being added prior calling
spi_nor_erase(), but not subtracted back on return. The result is that
the `mtd erase` command does not erase the whole partition, only some of
it's blocks:

  => mtd erase "Rescue system"
  Erasing 0x00000000 ... 0x006fffff (1792 eraseblock(s))
  jedec_spi_nor spi-nor@0: at 0x100000, len 4096
  jedec_spi_nor spi-nor@0: at 0x201000, len 4096
  jedec_spi_nor spi-nor@0: at 0x302000, len 4096
  jedec_spi_nor spi-nor@0: at 0x403000, len 4096
  jedec_spi_nor spi-nor@0: at 0x504000, len 4096
  jedec_spi_nor spi-nor@0: at 0x605000, len 4096
  jedec_spi_nor spi-nor@0: at 0x706000, len 4096

This is obviously wrong.

Add proper calling of mtd_erase_callback() into the spi_nor_erase()
function.

Signed-off-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Simon Glass <sjg@chromium.org>
Reported-by: Masami Hiramatsu <masami.hiramatsu@linaro.org>
Tested-by: Masami Hiramatsu <masami.hiramatsu@linaro.org>
3 years agomtd: spi-nor-core: Don't check for zero length in spi_nor_write() / spi_nor_erase()
Marek Behún [Tue, 5 Oct 2021 13:56:02 +0000 (15:56 +0200)]
mtd: spi-nor-core: Don't check for zero length in spi_nor_write() / spi_nor_erase()

This check is already done in all callers: mtdcore's mtd_write() /
mtd_erase(), legacy spi_nor_write() / spi_flash_erase(). No reason to do
this here as well.

Signed-off-by: Marek Behún <marek.behun@nic.cz>
3 years agomtd: spi-flash: Check for zero length in legacy spi_flash_*()
Marek Behún [Tue, 5 Oct 2021 13:56:01 +0000 (15:56 +0200)]
mtd: spi-flash: Check for zero length in legacy spi_flash_*()

Check for zero length in the legacy spi_flash_read() /
spi_flash_write() / spi_flash_erase() functions.
On zero length, return 0 immediately, don't call the underlying method.

Rationale:
- these legacy functions call the _read(), _write() and _erase() methods
  of struct mtd
- the DM callers of these methods already check for zero length
- making all callers of these methods check for zero length makes it
  possible to remove the check from implementations of these _read(),
  _write() and _erase() methods

Signed-off-by: Marek Behún <marek.behun@nic.cz>
3 years agomtd: spi-nor-core: Check return value of write_disable() in spi_nor_erase()
Marek Behún [Tue, 5 Oct 2021 13:56:00 +0000 (15:56 +0200)]
mtd: spi-nor-core: Check return value of write_disable() in spi_nor_erase()

The cleanup code of spi_nor_erase() function calls write_disable(), but
does not return it's return value even in case of failure. Fix this.

Signed-off-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Simon Glass <sjg@chromium.org>
Tested-by: Masami Hiramatsu <masami.hiramatsu@linaro.org>
3 years agomtd: spi-nor-core: Don't overwrite return value if it is non-zero
Marek Behún [Tue, 5 Oct 2021 13:55:59 +0000 (15:55 +0200)]
mtd: spi-nor-core: Don't overwrite return value if it is non-zero

The cleanup code of the spi_nor_erase() function overwrites the ret
variable with return value of clean_bar(), even if the ret variable is
already set. Fix this.

Signed-off-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Simon Glass <sjg@chromium.org>
Tested-by: Masami Hiramatsu <masami.hiramatsu@linaro.org>
3 years agomtd: spi-nor-core: Check return value of write_enable() in spi_nor_erase()
Marek Behún [Tue, 5 Oct 2021 13:55:58 +0000 (15:55 +0200)]
mtd: spi-nor-core: Check return value of write_enable() in spi_nor_erase()

The spi_nor_erase() function does not check return value of the
write_enable() call. Fix this.

Signed-off-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Jagan Teki <jagan@amarulasolutions.com>
Reviewed-by: Pratyush Yadav <p.yadav@ti.com>
Tested-by: Masami Hiramatsu <masami.hiramatsu@linaro.org>
3 years agomtd: spi-nor-core: Try cleaning up in case writing BAR failed
Marek Behún [Tue, 5 Oct 2021 13:55:57 +0000 (15:55 +0200)]
mtd: spi-nor-core: Try cleaning up in case writing BAR failed

Use the cleanup codepath of spi_nor_erase() also in the event of failure
of writing the BAR register.

Signed-off-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Jagan Teki <jagan@amarulasolutions.com>
Reviewed-by: Pratyush Yadav <p.yadav@ti.com>
Tested-by: Masami Hiramatsu <masami.hiramatsu@linaro.org>
3 years agomtd: spi-nor: Add support for Spansion S25FL256L
Takahiro Kuwano [Thu, 30 Sep 2021 02:23:37 +0000 (11:23 +0900)]
mtd: spi-nor: Add support for Spansion S25FL256L

The S25FL256L is a part of the S25FL-L family and has the same feature set
as S25FL128L except the density.

The datasheet can be found in the following link.
https://www.cypress.com/file/316171/download

The S25FL256L is 32MB NOR Flash that does not support Bank Address
Register. This fixup is activated if CONFIG_SPI_FLASH_BAR is enabled and
returns ENOTSUPP in setup() hook to avoid further ops.

Tested on Xilinx Zynq-7000 FPGA board.

Signed-off-by: Takahiro Kuwano <Takahiro.Kuwano@infineon.com>
3 years agomtd: spi-nor-ids: Add GD25LQ256D Chip
Yanhong Wang [Thu, 30 Sep 2021 11:53:01 +0000 (19:53 +0800)]
mtd: spi-nor-ids: Add GD25LQ256D Chip

Add Gigadevice GD25LQ256D SPI NOR chip.
https://www.gigadevice.com/datasheet/gd25lq256d/

Signed-off-by: Yanhong Wang <yanhong.wang@starfivetech.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
[jagan: updated commit message]
Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
Reviewed-by: Jagan Teki <jagan@amarulasolutions.com>
3 years agoMerge tag 'efi-2022-01-rc1' of https://source.denx.de/u-boot/custodians/u-boot-efi
Tom Rini [Fri, 22 Oct 2021 12:56:45 +0000 (08:56 -0400)]
Merge tag 'efi-2022-01-rc1' of https://source.denx.de/u-boot/custodians/u-boot-efi

Pull request for efi-2022-01-rc1

Documentation:
Use Sphinx 3.43.
Move system reset documentation to HTML

UEFI:
Fix linking EFI apps with LLVM
Fix alignment of loaded image
Correct simple network protocol test
Code cleanup

3 years agoMerge tag 'dm-pull-21oct21' of https://source.denx.de/u-boot/custodians/u-boot-dm
Tom Rini [Fri, 22 Oct 2021 01:41:47 +0000 (21:41 -0400)]
Merge tag 'dm-pull-21oct21' of https://source.denx.de/u-boot/custodians/u-boot-dm

Refactoring of env_get_char() etc.
Update buildman to use gcc-11.1.0
Use in-container toolchain for nokia_rx51 CI test

# gpg: Signature made Thu 21 Oct 2021 09:34:07 PM EDT
# gpg:                using RSA key B25C0022AF86A7CC1655B6277F173A3E9008ADE6
# gpg:                issuer "sjg@chromium.org"
# gpg: Good signature from "Simon Glass <sjg@chromium.org>" [unknown]
# gpg: WARNING: This key is not certified with a trusted signature!
# gpg:          There is no indication that the signature belongs to the owner.
# Primary key fingerprint: B25C 0022 AF86 A7CC 1655  B627 7F17 3A3E 9008 ADE6

3 years agoenv: Move non-cli env functions to env/common.c
Marek Behún [Sun, 17 Oct 2021 15:36:38 +0000 (17:36 +0200)]
env: Move non-cli env functions to env/common.c

Move the following functions from cmd/nvedit.c to env/common.c:
  env_set_ulong()
  env_set_hex()
  env_get_hex()
  eth_env_get_enetaddr()
  eth_env_set_enetaddr()
  env_get()
  from_env()
  env_get_f()
  env_get_ulong()
since these functions are not specific for U-Boot's CLI.

We leave env_set() in cmd/nvedit.c, since it calls _do_env_set(), which
is a static function in that file.

Signed-off-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Simon Glass <sjg@chromium.org>
3 years agoenv: Simplify env_match() and inline into env_get_f()
Marek Behún [Sun, 17 Oct 2021 15:36:37 +0000 (17:36 +0200)]
env: Simplify env_match() and inline into env_get_f()

In the past the env_match() function was used to match envs with
- name, i.e. string "name"
- variable assignment, i.e. string "name=other_value"

The latter is not the case anymore, since the env_match() function is
now used only in env_get_f(), and so we can simplify the function into
a simple strncmp() with an additional comparison to '='.

Let's do this, and since the resulting function is quite simple, let's
also inline its code into env_get_f().

Signed-off-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Simon Glass <sjg@chromium.org>
3 years agoenv: Use memcpy() instead of ad-hoc code to copy variable value
Marek Behún [Sun, 17 Oct 2021 15:36:36 +0000 (17:36 +0200)]
env: Use memcpy() instead of ad-hoc code to copy variable value

Copy the value of the found variable into given buffer with memcpy()
instead of ad-hoc code.

Signed-off-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Simon Glass <sjg@chromium.org>
3 years agoenv: Make return value of env_get_f() behave like sprintf() on success
Marek Behún [Sun, 17 Oct 2021 15:36:35 +0000 (17:36 +0200)]
env: Make return value of env_get_f() behave like sprintf() on success

Currently the env_get_f() function's return value behaves weirdly: it
returns the number of bytes written into `buf`, but whether this is
excluding the terminating NULL-byte or including it depends on whether
there was enough space in `buf`.

Change the function to always return the actual length of the value of
the environment variable (excluding the terminating NULL-byte) on
success. This makes it behave like sprintf().

All users of this function in U-Boot are compatible with this change.

Signed-off-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Simon Glass <sjg@chromium.org>
3 years agoenv: Early return from env_get_f() on NULL name
Marek Behún [Sun, 17 Oct 2021 15:36:34 +0000 (17:36 +0200)]
env: Early return from env_get_f() on NULL name

Test non-NULL name immediately, not in env_match().

Signed-off-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Simon Glass <sjg@chromium.org>
3 years agoenv: Don't match empty variable name in env_match()
Marek Behún [Sun, 17 Oct 2021 15:36:33 +0000 (17:36 +0200)]
env: Don't match empty variable name in env_match()

Do we really allow zero-length variable name? I guess not.

Signed-off-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Simon Glass <sjg@chromium.org>
3 years agoenv: Use better name for variable in env_get_f()
Marek Behún [Sun, 17 Oct 2021 15:36:32 +0000 (17:36 +0200)]
env: Use better name for variable in env_get_f()

The `nxt` variable actually points to the terminating null-byte of the
current env var, and the next env var is at `nxt + 1`, not `nxt`. So a
better name for this variable is `end`.

Signed-off-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Simon Glass <sjg@chromium.org>
3 years agoenv: Use string pointer instead of indexes in env_get_f()
Marek Behún [Sun, 17 Oct 2021 15:36:31 +0000 (17:36 +0200)]
env: Use string pointer instead of indexes in env_get_f()

Since we no longer use env_get_char() to access n-th character of
linearized environment data, but rather access the arrays themselves, we
can convert the iteration to use string pointers instead of position
indexes.

Signed-off-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Simon Glass <sjg@chromium.org>
3 years agoenv: Inline env_get_char() into its only user
Marek Behún [Sun, 17 Oct 2021 15:36:30 +0000 (17:36 +0200)]
env: Inline env_get_char() into its only user

This function is a relic from the past when environment was read from
underlying device one character at a time.

It is used only in the case when getting an environemnt variable prior
relocation, and the function is simple enough to be inlined there.

Since env_get_char() is being changed to simple access to an array, we
can drop the failing cases and simplify the code (this could have been
done before, since env_get_char() did not fail even before).

Signed-off-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Simon Glass <sjg@chromium.org>
3 years agoenv: Change env_match() to static and remove from header
Marek Behún [Sun, 17 Oct 2021 15:36:29 +0000 (17:36 +0200)]
env: Change env_match() to static and remove from header

This function was used by other parts of U-Boot in the past when
environment was read from underlying device one character at a time.

This is not the case anymore.

Signed-off-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Simon Glass <sjg@chromium.org>
3 years agoexamples: api: glue: Remove comment that does not apply anymore
Marek Behún [Sun, 17 Oct 2021 15:36:28 +0000 (17:36 +0200)]
examples: api: glue: Remove comment that does not apply anymore

This comment is not true since commit 6215bd4c1fd6 ("api: Use hashtable
function for API_env_enum").

Signed-off-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Simon Glass <sjg@chromium.org>