Commit Graph

93937 Commits

Author SHA1 Message Date
Marek Behún
aec83261b9 arm: mvebu: turris_omnia: Support old DDR3 training
Support old DDR3 training code on Turris Omnia, selectable via EEPROM
field.

Users experiencing DDR3 initialization failures or random crashes of the
operating system due to incorrect DDR3 configuration can select the old
DDR3 training implementation to fix those issues by setting the EEPROM
field "Use old DDR training":
  eeprom update "Use old DDR training" 1

Signed-off-by: Marek Behún <kabel@kernel.org>
2024-07-08 08:20:58 +02:00
Marek Behún
aff4ea11d1 arm: mvebu: a38x: Add optional support for using old DDR3 training code
Add optional support for using old DDR3 training code from 2017.

The code lives in drivers/ddr/marvell/a38x/old/. To prevent symbol
clashing with new DDR3 training code, a special header which renames all
clashing symbols via macros is included and the symbols are prefixed
with 'old_'.

If old DDR3 training support is selected for a board, then the SPL
initialization code calls a new function
  board_use_old_ddr3_training()
to check whether it should use old DDR3 training code. The default
weak implementation returns false, defaulting to new DDR3 training code.

Boards that wish to support this need to select the
  ARMADA_38X_SUPPORT_OLD_DDR3_TRAINING
config option and implement the old version of DDR topology provider,
ddr3_get_topology_map().

Signed-off-by: Marek Behún <kabel@kernel.org>
2024-07-08 08:20:58 +02:00
Marek Behún
667ffbfa90 ddr: marvell: a38x: old: Backport immutable debug settings
Backport the option to compile with immutable debug settings also to
the old implementation of the DDR3 training code.

The original PR for mv-ddr-marvell can be seen at
  https://github.com/MarvellEmbeddedProcessors/mv-ddr-marvell/pull/45/

Signed-off-by: Marek Behún <kabel@kernel.org>
2024-07-08 08:20:58 +02:00
Marek Behún
af6c737807 ddr: marvell: a38x: old: Fix some compiler warning of the old code
Fix some compilation warning in the old DDR training code.

Signed-off-by: Marek Behún <kabel@kernel.org>
2024-07-08 08:20:58 +02:00
Marek Behún
cae6e8993c ddr: marvell: a38x: Import old DDR training code from 2017 version of U-Boot
Import DDR training code from commit 1b69ce2fc0 ("arm: mvebu:
ddr3_debug: remove self assignments") into
drivers/ddr/marvell/a38x/old/. The code is not used yet.

Explanation:

Since 2019, on some Turris Omnia boards we have been having problems
with newer versions of Marvell's DDR3 training code for Armada 38x,
which is ported from mv-ddr-marvell [1] to U-Boot into the
drivers/ddr/marvell/a38x/ directory:
- sometimes the DDR3 training fails on some older boards, sometime it
  fails on some newer boards
- other times it succeeds, but some boards experience crashes of the
  operating system after running for some time.

Using the stock version of Turris Omnia's U-Boot from solved these
issues, but this solution was not satisfactory, since we wanted
features from new U-Boot.

Back in 2020-2022 we have spent several months trying to debug the
issues, working with Marvell, on our own, and also with U-Boot
community, but these issues persist still.

One solution we used back in 2019 was a "hybrid U-Boot": the SPL part
(containing the DDR3 training code) was taken from the stock version,
while the proper part was current U-Boot at the time. This solution also
has its drawbacks, of which the main one is the need to glue binaries
from two separate builds.

Since then there have been some more changes to the DDR3 training code
in upstream mv-ddr-marvell that have been ported to U-Boot. We have
provided our users experimental builds of U-Boot in the TurrisOS so that
they could try upgrading the firmware and let us know if those problems
still exist. And they do.

We do not have the time nor manpower to debug this problem and fix it
properly. Marvell was also no able to provide a solution to this,
probably because they do not have the manpower as well.

I have therefore come up with this "not that pretty" solution: take the
DDR3 training code from an older version of U-Boot that is known to
work, put it into current U-Boot under old/ subdirectory within
drivers/ddr/marvell/a38x/, build into the SPL binary both the old and
new versions and make it possible to select the old version via an env
variable.

[1] https://github.com/MarvellEmbeddedProcessors/mv-ddr-marvell

Signed-off-by: Marek Behún <kabel@kernel.org>
2024-07-08 08:20:58 +02:00
Marek Behún
137057ac16 arm: mvebu: turris_omnia: Read DDR speed from EEPROM
Some Turris Omnia boards experience memory issues, and by
experimentation we found that some of these issues can be solved by
slowing DDR speed.

Add a new field in the extended EEPROM information structure, ddr_speed.
Support several values in this field (for now 1066F, 1333H, and the
default, 1600K) and use it to overwrite the DDR topology parameters
used by the DDR training algorithm.

Signed-off-by: Marek Behún <kabel@kernel.org>
2024-07-08 08:20:58 +02:00
Marek Behún
b5a6120227 arm: mvebu: turris_omnia: Extend EEPROM info structure
Extend the Omnia EEPROM information structure in preparation for more
variables to be stored there.

Signed-off-by: Marek Behún <kabel@kernel.org>
2024-07-08 08:20:58 +02:00
Marek Behún
6ce7559585 arm: mvebu: turris_omnia: Enable the 'eeprom' command
Enable the 'eeprom' command with support for EEPROM layout for Turris
Omnia. Enable the i2c-eeprom driver so that the EEPROM is accessed via
driver model.

Signed-off-by: Marek Behún <kabel@kernel.org>
2024-07-08 08:20:58 +02:00
Marek Behún
01a02ae2ba arm: mvebu: turris_omnia: Implement EEPROM layout for the 'eeprom' command
Implement Turris Omnia EEPROM layout for the 'eeprom' command.

When the 'eeprom' command (with layout support) is enabled, we can now
use the 'eeprom print' and 'eeprom update' commands, for example:

  => eeprom print
  Magic constant                34a04103
  RAM size in GB                2
  Wi-Fi Region
  CRC32 checksum                cecbc2a1

Signed-off-by: Marek Behún <kabel@kernel.org>
2024-07-08 08:20:58 +02:00
Marek Behún
1a05180762 arm: mvebu: turris_omnia: Fix ethernet PHY reset gpio FDT fixup
For board revisions where the WAN ethernet PHY reset GPIO is controllable
via MCU we currently insert a phy-reset-gpios property into the ethernet
controller node. The mvneta driver parses this property and uses the
GPIO to reset the PHY.

But this phy-reset-gpios property is not a valid DT binding in upstream
kernel. Instead, a reset-gpios property should be inserted into the
ethernet PHY node. This correct DT binding is supported by the DM ETH PHY
U-Boot driver.

Insert the reset-gpios property into the WAN PHY node instead the
phy-reset-gpios property in WAN ETH node so that Linux will correctly use
the reset GPIO.

Enable the CONFIG_DM_ETH_PHY config option so that U-Boot will also use
the correct DT property.

Note: currently there are 4 ethernet controller drivers parsing the
wrong DT property: dwc_eth_qos, fex_mxc, mvneta and mvpp2. We should
convert all relevant device-trees to use reset-gpios so that we can get
rid of these drivers parsing this property.

Fixes: 1da53ae26a ("arm: mvebu: turris_omnia: Add support for design with SW reset signals")
Signed-off-by: Marek Behún <kabel@kernel.org>
2024-07-08 08:20:58 +02:00
Marek Behún
529d24002b arm: mvebu: turris_omnia: Enable immutable debug settings in DDR3 training by default
Save 10 KiB in Turris Omnia's SPL binary by enabling immutable debug
settings for DDR3 training code.

Signed-off-by: Marek Behún <kabel@kernel.org>
2024-07-08 08:20:58 +02:00
Marek Behún
259556e5aa ddr: marvell: a38x: debug: Allow compiling with immutable debug settings to reduce binary size
Allow compiling with immutable debug settings:
- DEBUG_LEVEL is always set to DEBUG_LEVEL_ERROR
- register dumps are disabled

This can save around 10 KiB of space in the resulting binary, which is a
lot in U-Boot SPL.

Signed-off-by: Marek Behún <kabel@kernel.org>
2024-07-08 08:20:58 +02:00
Marek Behún
411e71f7df ddr: marvell: a38x: debug: Define DDR_VIEWER_TOOL variables only if needed, and make them static
The variables is_validate_window_per_if, is_validate_window_per_pup,
sweep_cnt and is_run_leveling_sweep_tests are only used if
DDR_VIEWER_TOOL macro is defined, so define them only in that case.

Make them static since they are only used in ddr3_debug.c.

Signed-off-by: Marek Behún <kabel@kernel.org>
2024-07-08 08:20:58 +02:00
Marek Behún
c813b29e3e ddr: marvell: a38x: debug: Remove unused variables
The variables is_default_centralization, is_tune_result and
is_bist_reset_bit are never used.

Signed-off-by: Marek Behún <kabel@kernel.org>
2024-07-08 08:20:58 +02:00
Marek Behún
c173f6268d ddr: marvell: a38x: debug: return from ddr3_tip_print_log() early if we won't print anything
Return from ddr3_tip_print_log() early if we won't print anything
anyway.

This way the compiler can optimize away the VALIDATE_IF_ACTIVE() calls
in the for-loop, so if the SILENT_LIB macro is defined, no code is
generated for the rest of the function, which saves some space.

Signed-off-by: Marek Behún <kabel@kernel.org>
2024-07-08 08:20:58 +02:00
Marek Behún
c416e7ad71 arm: mvebu: turris_omnia: Disable ext4 write support in defconfig
Turris Omnia defconfig is nearing image size limit. Disable ext4 write
support to reserve space for more important stuff.

This reduces the size of the KWB image by ~19 KiB.

If in the future U-Boot supports compressing itself and decompressing
on load, we may enable this again.

Signed-off-by: Marek Behún <kabel@kernel.org>
2024-07-08 08:20:58 +02:00
Tony Dinh
11558bf251 arm: dts: mvebu: Update DTS for Thecus N2350 board
- Change the spi-max-frequency to 50000000 (50 Mhz). According to the
data sheet[1], the MX25L3205D max frequency is 86 Mhz. Using 50 Mhz in
the DTS to ensure u-boot is consistent with what Linux kernel expected.
- Update GPIO fan to conform to the latest DT binding.

[1]
https://www.macronix.com/Lists/Datasheet/Attachments/8575/MX25L3205D,%203V,%2032Mb,%20v1.5.pdf

Signed-off-by: Tony Dinh <mibodhi@gmail.com>
2024-07-08 08:20:37 +02:00
Tony Dinh
061dcf16f3 arm: mvebu: env_sf_get_env_addr() missing check for CONFIG_ENV_IS_IN_SPI_FLASH
The CONFIG_ENV_OFFSET is undefined if boot device is UART
(CONFIG_MVEBU_SPL_BOOT_DEVICE_UART), or envs are not stored on flash
(CONFIG_ENV_IS_NOWHERE). Check for CONFIG_ENV_IS_IN_SPI_FLASH as the first
condition to determine whether env_sf_get_env_addr() should be provided.

Signed-off-by: Tony Dinh <mibodhi@gmail.com>
2024-07-08 08:19:57 +02:00
Benjamin Schneider
d901c9b8d6 configs: add mvebu_espressobin_ultra-88f3720_defconfig
Add support for a Marvell Armada 3720 device variant

Signed-off-by: Benjamin Schneider <ben@bens.haus>
2024-07-08 08:19:57 +02:00
Tom Rini
fd46ea0e70 Merge branch '2024-07-05-assorted-updates'
- Re-instate the zlib update, so we can fix it for this release,
  assorted whitespace cleanups, allow mkimage to 'auto-conf' signing of
  scripts, enhance ELF image support, add more HW rev support to e1000
  driver, update am64x_evm config, correct mpc8xxx watchdog, update
  phycore-am6 docs.
2024-07-05 16:36:43 -06:00
Tom Rini
7d22317a18 Revert "Revert "Merge patch series "zlib: Address CVE-2016-9841"""
Now that the release has happened, bring back the update to zlib.

This reverts commit bbacdd3ef7.

Signed-off-by: Tom Rini <trini@konsulko.com>
2024-07-05 13:57:02 -06:00
Christophe Leroy
7a74e31938 watchdog: mpc8xxx: Fix timer value
Timer value is a 16 bits calculated from the wanted timeout and the
system clock. On powerpc/8xx, a timeout of 2s gives a value which
is over U16_MAX so U16_MAX shall be used. But the calculation is
casted to u16 so at the end the result is 63770 instead of 128906.

So the timer gets loaded with 63770 instead of 65535. It is not
a big difference in that case, but lets make the code correct and
cast to u32 instead of u16.

Fixes: 26e8ebcd7c ("watchdog: mpc8xxx: Make it generic")
Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
2024-07-05 13:57:02 -06:00
Marjolaine Amate
905dc347da pci_ids: fix i225 unprogrammed value
This patch fixes the I225 hardware default value
at 0x15FD meaning empty flash image
or the NVM configuration loading failed

Signed-off-by: Marjolaine Amate <marjolaine.amate@odyssee-systemes.fr>
2024-07-05 13:57:02 -06:00
Marjolaine Amate
aaebe0d41c e1000: add support for i226
This patch adds support for Intel Foxville I226
devices LM,V,I,K in e1000 driver.

Signed-off-by: Marjolaine Amate <marjolaine.amate@odyssee-systemes.fr>
2024-07-05 13:57:02 -06:00
Anand Moon
608a88c270 Fix Kconfig coding style from spaces to tab
Adjust indentation from spaces to tab (+optional two spaces) as in
coding style with command like:
	$ sed -e 's/^        /\t/' -i */Kconfig

Signed-off-by: Anand Moon <linux.amoon@gmail.com>
2024-07-05 13:57:02 -06:00
Roger Quadros
17c39e700c configs: am64x_evm_a53_defconfig: Enable I2C GPIO drivers
The board has the TCA9554 I2C GPIO expander chip for expansion
board presence detection logic.

Enable the relevant I2C GPIO drivers.

Signed-off-by: Roger Quadros <rogerq@kernel.org>
2024-07-05 13:57:02 -06:00
Maxim Moskalets
2abf14df5d cmd: bootm: add ELF file support
Some operating systems (e.g. seL4) and embedded applications are ELF
images. It is convenient to use FIT-images to implement trusted boot.
Added "elf" image type for booting using bootm command.

Signed-off-by: Maxim Moskalets <maximmosk4@gmail.com>
2024-07-05 13:57:02 -06:00
Alexander Dahl
6074f6e857 mkimage: Allow 'auto-conf' signing of scripts
U-Boot configured for verified boot with the "required" option set to
"conf" also checks scripts put in FIT images for a valid signature, and
refuses to source and run such a script if the signature for the
configuration is bad or missing.  Such a script could not be packaged
before, because mkimage failed like this:

    % tools/mkimage -T script -C none -d tmp/my.scr -f auto-conf -k tmp -g dev -o sha256,rsa4096 my.uimg
    Failed to find any images for configuration 'conf-1/signature'
    tools/mkimage Can't add hashes to FIT blob: -1
    Error: Bad parameters for FIT image type

This is especially unfortunate if LEGACY_IMAGE_FORMAT is disabled as
recommended.

Listing the script configuration in a "sign-images" subnode instead,
would have added even more complexity to the already complex auto fit
generation code.

Signed-off-by: Alexander Dahl <ada@thorsis.com>
2024-07-05 13:57:01 -06:00
Wadim Egorov
d36394cff8 doc: board: phytec: phycore-am6: Describe UART based boot
Describe how to boot via UART.

Signed-off-by: Wadim Egorov <w.egorov@phytec.de>
2024-07-05 13:57:01 -06:00
Marek Vasut
747ae74456 configs: Remove duplicate newlines
Drop all duplicate newlines from config headers.
No functional change.

Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
2024-07-05 13:57:01 -06:00
Tom Rini
18908395ed Merge branch 'qcom-main' of https://source.denx.de/u-boot/custodians/u-boot-snapdragon
Various minor fixes and improvements:

* Fix Qualcomm SPMI v5 support
* Move default environment to a file
* Add support for special pins (e.g ufs/mmc reset/data pins)
* IPQ moves to OF_UPSTREAM and receives some cleanup and MAINTAINERS
  changes
* Add a reset driver for devices without PSCI
* msm8916 USB clock improvements for mobile devices
2024-07-05 10:24:27 -06:00
Tom Rini
d12e102913 Merge branch 'staging' of https://source.denx.de/u-boot/custodians/u-boot-tegra
Branch contains minor improvemets for existing tegra devices along
with bring up of 4 new devices (ASUS Transformers T20, Microsoft
Surface RT, Lenovo Ideapad Yoga 11 and WEXLER Tab 7t).
2024-07-05 10:22:46 -06:00
Tom Rini
a9b3723e74 Revert "CI Changes"
This change was brought in by accident, revert.

This reverts commit 51aabf50e5.

Signed-off-by: Tom Rini <trini@konsulko.com>
2024-07-05 08:07:00 -06:00
Caleb Connolly
69b37f1625 spmi: msm: correct max_channels for v5 controllers
Commit ee1d8aa5ec ("spmi: msm: support controller version 7") broke
support for channels > 128 on v5 controllers, resulting in some
peripherals (like the power button / pon) working but others (like
gpios) reading bogus data.

Correct max_channels for v5 controllers.

Fixes: ee1d8aa5ec ("spmi: msm: support controller version 7")
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
2024-07-05 12:07:37 +02:00
Caleb Connolly
ca229a32ba mach-snapdragon: move default environment to a file
Make use of CONFIG_DEFAULT_ENV_FILE and move the default qcom
environment to a file under board/qualcomm.

This is much cleaner and means we don't need to recompile on changing
the environment.

Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
2024-07-05 12:04:48 +02:00
Caleb Connolly
f693b79ec0 spmi: msm: demote to debug()
Most devices have buttons exposed via the PMIC, the button polling
therefore triggers a log spam if debug logging is enabled.

Demote these to debug() so that they aren't printed unless LOG_DEBUG is
defined explicitly for this file.

Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
2024-07-05 12:04:48 +02:00
Neil Armstrong
951937b23d pinctrl: qcom: sm8650: add special pins pins configuration data
Add the special pins configuration data to allow setup the bias
of the UFS and SDCard pins on the SM8650 SoC.

Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
Reviewed-by: Sumit Garg <sumit.garg@linaro.org>
2024-07-05 12:04:48 +02:00
Neil Armstrong
c89ab4aa17 pinctrl: qcom: sm8550: add special pins pins configuration data
Add the special pins configuration data to allow setup the bias
of the UFS and SDCard pins on the SM8550 SoC.

Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
Reviewed-by: Sumit Garg <sumit.garg@linaro.org>
2024-07-05 12:04:48 +02:00
Neil Armstrong
0e044c8098 pinctrl: qcom: add support setting pin configuration for special pins
Use the previously introduced msm_special_pin_data to setup the special
pins configuration if the SoC driver have them specified.

Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
Reviewed-by: Sumit Garg <sumit.garg@linaro.org>
2024-07-05 12:04:48 +02:00
Neil Armstrong
8daee349e5 arm: mach-snapdragon: gpio: introduce msm_special_pin_data
In order to help setup pin configuration for special pins (UFS, SDCard),
introduce the msm_special_pin_data struct largely inspired from the
Linux conterpart but with only U-Boot required fields.

This struct is added to the pins_data to allow specifying the special
pins data for each SoC.

Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
Reviewed-by: Sumit Garg <sumit.garg@linaro.org>
2024-07-05 12:04:48 +02:00
Neil Armstrong
e948fe5f01 pinctrl: qcom: add support for bias-pull-down
Add support for bias-pull-down as an alternate of bias-pull-up.

Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
2024-07-05 12:04:48 +02:00
Robert Marko
f3c4accc2f clock: qcom: ipq4019: add I2C clocks
I2C clocks are not initialized by the SBL, so lets add support for clocks
required by both of the QUP I2C controllers.

BLSP1 AHB clock is already initialized by SBL, but QUP I2C driver is
requesting it so we have to add it to the enable list.

Based off QCS404 clock driver.

Signed-off-by: Robert Marko <robert.marko@sartura.hr>
2024-07-05 12:04:47 +02:00
Robert Marko
308a4642ae MAINTAINERS: IPQ40XX: add pinctrl driver
Pinctrl drivers were moved to a dedicated directory but the entry was never
updated, so add the pinctrl-ipq4019 driver entry.

Signed-off-by: Robert Marko <robert.marko@sartura.hr>
2024-07-05 12:04:47 +02:00
Robert Marko
65d54dcb26 MAINTAINERS: IPQ40XX: add clock-ipq4019 instead of reset driver
The reset handling was added to the clock drivers but the entry was never
updated, so add the clock-ipq4019 driver instead.

Signed-off-by: Robert Marko <robert.marko@sartura.hr>
2024-07-05 12:04:47 +02:00
Robert Marko
51bff28a8c MAINTAINERS: IPQ40XX: update GCC dt-bindings
The separate clock and reset dt-bindings for IPQ40XX were merged into one
recently, but the entry was not updated so do it now.

Signed-off-by: Robert Marko <robert.marko@sartura.hr>
2024-07-05 12:04:47 +02:00
Robert Marko
d05dbe3f75 MAINTAINERS: IPQ40XX: remove Luka Kovacic as maintainer
Luka Kovacic is no longer at Sartura, so remove him as one of IPQ40xx
maintainers.

Signed-off-by: Robert Marko <robert.marko@sartura.hr>
2024-07-05 12:04:47 +02:00
Robert Marko
0a0fa4efce arm: dts: drop downstream IPQ4019 DTSI
We want to use OF_UPSTREAM on IPQ40XX as its well supported upstream, so
lets drop our downstream DTSI.

Signed-off-by: Robert Marko <robert.marko@sartura.hr>
Acked-by: Caleb Connolly <caleb.connolly@linaro.org>
Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
2024-07-05 12:04:47 +02:00
Robert Marko
12b6298251 mach-ipq40xx: use OF_UPSTREAM
Now that drivers are compatible enough with the upstream DTS, there is no
reason to not use the upstream DTS, so imply OF_UPSTREAM by default.

Signed-off-by: Robert Marko <robert.marko@sartura.hr>
Acked-by: Caleb Connolly <caleb.connolly@linaro.org>
Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
2024-07-05 12:04:47 +02:00
Robert Marko
e8e39d6cd5 mach-ipq40xx: add CPU specific code
Provide basic DRAM info population from DT, cache setting and the
board_init stub.

Signed-off-by: Robert Marko <robert.marko@sartura.hr>
Acked-by: Caleb Connolly <caleb.connolly@linaro.org>
Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
2024-07-05 12:04:46 +02:00
Robert Marko
86cc012207 sysreset: add Qualcomm PSHOLD reset driver
Number of Qualcomm ARMv7 SoC-s did not use PSCI but rather used PSHOLD
(Qualcomm Power Supply Hold Reset) bit to trigger reset or poweroff.

Qualcomm IPQ40XX is one of them, so provide a simple sysreset driver based
on the upstream Linux one, it is DT compatible as well.

Signed-off-by: Robert Marko <robert.marko@sartura.hr>
Reviewed-by: Caleb Connolly <caleb.connolly@linaro.org>
Signed-off-by: Caleb Connolly <caleb.connolly@linaro.org>
2024-07-05 12:04:46 +02:00