aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.azure-pipelines.yml2
-rw-r--r--.gitlab-ci.yml2
-rw-r--r--Makefile2
-rw-r--r--arch/arm/dts/imx6sx-udoo-neo-basic-u-boot.dtsi17
-rw-r--r--arch/arm/dts/k3-j721e-sk-u-boot.dtsi8
-rw-r--r--arch/sandbox/dts/test.dts2
-rw-r--r--cmd/fdt.c32
-rw-r--r--common/cli_getch.c5
-rw-r--r--common/cli_readline.c3
-rw-r--r--doc/arch/sandbox/sandbox.rst2
-rw-r--r--doc/develop/ci_testing.rst6
-rw-r--r--doc/develop/release_cycle.rst27
-rw-r--r--doc/develop/statistics/u-boot-stats-v2023.04.rst767
-rw-r--r--drivers/pinctrl/pinctrl-uclass.c47
-rw-r--r--drivers/ram/rockchip/sdram_rk3399.c2
-rw-r--r--drivers/scsi/Kconfig2
-rw-r--r--drivers/sysreset/sysreset_gpio.c7
-rw-r--r--drivers/usb/gadget/composite.c2
-rw-r--r--drivers/usb/gadget/f_sdp.c1
-rw-r--r--include/cli.h4
-rw-r--r--include/configs/imx8mn_bsh_smm_s2.h2
-rw-r--r--include/efi_api.h1
-rw-r--r--lib/efi_loader/efi_device_path.c23
-rw-r--r--test/cmd/fdt.c1
-rw-r--r--test/common/Makefile1
-rw-r--r--test/common/cread.c93
-rw-r--r--test/py/tests/test_vbe_vpl.py6
-rw-r--r--test/py/tests/test_vboot.py186
-rwxr-xr-xtest/run5
-rw-r--r--tools/buildman/toolchain.py2
30 files changed, 1132 insertions, 128 deletions
diff --git a/.azure-pipelines.yml b/.azure-pipelines.yml
index 5594a67..64da11e 100644
--- a/.azure-pipelines.yml
+++ b/.azure-pipelines.yml
@@ -263,7 +263,7 @@ stages:
TEST_PY_TEST_SPEC: "test_ofplatdata or test_handoff or test_spl"
sandbox_vpl:
TEST_PY_BD: "sandbox_vpl"
- TEST_PY_TEST_SPEC: "test_vpl_help or test_spl"
+ TEST_PY_TEST_SPEC: "vpl or test_spl"
sandbox_noinst:
TEST_PY_BD: "sandbox_noinst"
TEST_PY_TEST_SPEC: "test_ofplatdata or test_handoff or test_spl"
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 5431bf6..2a42374 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -301,7 +301,7 @@ sandbox_noinst_test.py:
sandbox_vpl test.py:
variables:
TEST_PY_BD: "sandbox_vpl"
- TEST_PY_TEST_SPEC: "test_vpl_help or test_spl"
+ TEST_PY_TEST_SPEC: "vpl or test_spl"
<<: *buildman_and_testpy_dfn
# Enable tracing and disable LTO, to ensure functions are not elided
diff --git a/Makefile b/Makefile
index 15f48cf..5083bea 100644
--- a/Makefile
+++ b/Makefile
@@ -3,7 +3,7 @@
VERSION = 2023
PATCHLEVEL = 04
SUBLEVEL =
-EXTRAVERSION = -rc5
+EXTRAVERSION =
NAME =
# *DOCUMENTATION*
diff --git a/arch/arm/dts/imx6sx-udoo-neo-basic-u-boot.dtsi b/arch/arm/dts/imx6sx-udoo-neo-basic-u-boot.dtsi
new file mode 100644
index 0000000..b5e1f2b
--- /dev/null
+++ b/arch/arm/dts/imx6sx-udoo-neo-basic-u-boot.dtsi
@@ -0,0 +1,17 @@
+// SPDX-License-Identifier: GPL-2.0+
+
+&soc {
+ bootph-all;
+};
+
+&aips1 {
+ bootph-all;
+};
+
+&pinctrl_uart1 {
+ bootph-all;
+};
+
+&uart1 {
+ bootph-all;
+};
diff --git a/arch/arm/dts/k3-j721e-sk-u-boot.dtsi b/arch/arm/dts/k3-j721e-sk-u-boot.dtsi
index 0949caa..31f979f 100644
--- a/arch/arm/dts/k3-j721e-sk-u-boot.dtsi
+++ b/arch/arm/dts/k3-j721e-sk-u-boot.dtsi
@@ -33,7 +33,7 @@
&cbass_main{
bootph-pre-ram;
- main_navss {
+ main_navss: bus@30000000 {
bootph-pre-ram;
};
};
@@ -49,7 +49,7 @@
bootph-pre-ram;
};
- mcu-navss {
+ mcu_navss: bus@28380000 {
bootph-pre-ram;
ringacc@2b800000 {
@@ -237,6 +237,10 @@
bootph-pre-ram;
};
+&hbmc {
+ status = "disabled";
+};
+
&ospi0 {
bootph-pre-ram;
diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts
index d72d7a5..7c1ee71 100644
--- a/arch/sandbox/dts/test.dts
+++ b/arch/sandbox/dts/test.dts
@@ -129,7 +129,7 @@
status = "disabled";
compatible = "fwupd,vbe-simple";
storage = "mmc3";
- skip-offset = <0x400000>;
+ skip-offset = <0x800000>;
area-start = <0>;
area-size = <0xe00000>;
state-offset = <0xdffc00>;
diff --git a/cmd/fdt.c b/cmd/fdt.c
index 04b664e..aae3278 100644
--- a/cmd/fdt.c
+++ b/cmd/fdt.c
@@ -36,16 +36,21 @@ static int is_printable_string(const void *data, int len);
*/
struct fdt_header *working_fdt;
-void set_working_fdt_addr(ulong addr)
+static void set_working_fdt_addr_quiet(ulong addr)
{
void *buf;
- printf("Working FDT set to %lx\n", addr);
buf = map_sysmem(addr, 0);
working_fdt = buf;
env_set_hex("fdtaddr", addr);
}
+void set_working_fdt_addr(ulong addr)
+{
+ printf("Working FDT set to %lx\n", addr);
+ set_working_fdt_addr_quiet(addr);
+}
+
/*
* Get a value from the fdt and format it to be set in the environment
*/
@@ -192,10 +197,14 @@ static int do_fdt(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
if ((quiet && fdt_check_header(blob)) ||
(!quiet && !fdt_valid(&blob)))
return 1;
- if (control)
+ if (control) {
gd->fdt_blob = blob;
- else
- set_working_fdt_addr(addr);
+ } else {
+ if (quiet)
+ set_working_fdt_addr_quiet(addr);
+ else
+ set_working_fdt_addr(addr);
+ }
if (argc >= 2) {
int len;
@@ -475,18 +484,9 @@ static int do_fdt(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
if (ret != 0)
return ret;
} else if (subcmd[0] == 'a') {
- /* Get address */
- char buf[19];
-
- snprintf(buf, sizeof(buf), "%lx",
- (ulong)map_to_sysmem(nodep));
- env_set(var, buf);
+ env_set_hex(var, (ulong)map_to_sysmem(nodep));
} else if (subcmd[0] == 's') {
- /* Get size */
- char buf[11];
-
- sprintf(buf, "0x%08X", len);
- env_set(var, buf);
+ env_set_hex(var, len);
} else
return CMD_RET_USAGE;
return 0;
diff --git a/common/cli_getch.c b/common/cli_getch.c
index 87c23ed..61d4cb2 100644
--- a/common/cli_getch.c
+++ b/common/cli_getch.c
@@ -129,7 +129,7 @@ static int cli_ch_esc(struct cli_ch_state *cch, int ichar,
*actp = act;
- return act == ESC_CONVERTED ? ichar : 0;
+ return ichar;
}
int cli_ch_process(struct cli_ch_state *cch, int ichar)
@@ -145,6 +145,7 @@ int cli_ch_process(struct cli_ch_state *cch, int ichar)
return cch->esc_save[cch->emit_upto++];
cch->emit_upto = 0;
cch->emitting = false;
+ cch->esc_len = 0;
}
return 0;
} else if (ichar == -ETIMEDOUT) {
@@ -185,7 +186,7 @@ int cli_ch_process(struct cli_ch_state *cch, int ichar)
cch->esc_save[cch->esc_len++] = ichar;
ichar = cch->esc_save[cch->emit_upto++];
cch->emitting = true;
- break;
+ return ichar;
case ESC_CONVERTED:
/* valid escape sequence, return the resulting char */
cch->esc_len = 0;
diff --git a/common/cli_readline.c b/common/cli_readline.c
index 709e9c3..e83743e 100644
--- a/common/cli_readline.c
+++ b/common/cli_readline.c
@@ -284,10 +284,9 @@ static int cread_line(const char *const prompt, char *buf, unsigned int *len,
}
ichar = getcmd_getch();
+ ichar = cli_ch_process(cch, ichar);
}
- ichar = cli_ch_process(cch, ichar);
-
/* ichar=0x0 when error occurs in U-Boot getc */
if (!ichar)
continue;
diff --git a/doc/arch/sandbox/sandbox.rst b/doc/arch/sandbox/sandbox.rst
index cd7f8a2..77ca6bc 100644
--- a/doc/arch/sandbox/sandbox.rst
+++ b/doc/arch/sandbox/sandbox.rst
@@ -388,7 +388,7 @@ The device can be marked removeable with 'host bind -r'.
A disk image can be created using the following commands::
$> truncate -s 1200M ./disk.raw
- $> echo -e "label: gpt\n,64M,U\n,,L" | /usr/sbin/sgdisk ./disk.raw
+ $> /usr/sbin/sgdisk --new=1:0:+64M --typecode=1:EF00 --new=2:0:0 --typecode=2:8300 disk.raw
$> lodev=`sudo losetup -P -f --show ./disk.raw`
$> sudo mkfs.vfat -n EFI -v ${lodev}p1
$> sudo mkfs.ext4 -L ROOT -v ${lodev}p2
diff --git a/doc/develop/ci_testing.rst b/doc/develop/ci_testing.rst
index b9a9a51..ffaaced 100644
--- a/doc/develop/ci_testing.rst
+++ b/doc/develop/ci_testing.rst
@@ -50,6 +50,12 @@ runners you are able to provide. While it is intended to be able to run this
pipeline on the free public instances provided at https://gitlab.com/ a problem
with our squashfs tests currently prevents this.
+To push to Gitlab without triggering a pipeline use:
+
+.. code-block:: bash
+
+ git push -o ci.skip
+
Docker container
----------------
diff --git a/doc/develop/release_cycle.rst b/doc/develop/release_cycle.rst
index ea584ce..7d63cf4 100644
--- a/doc/develop/release_cycle.rst
+++ b/doc/develop/release_cycle.rst
@@ -48,13 +48,14 @@ Examples::
Current Status
--------------
-* U-Boot v2023.01 was released on Mon 09 January 2023.
+* U-Boot v2023.04 was released on Mon 03 April 2023.
-* The Merge Window for the next release (v2023.04) is **closed**.
+* The Merge Window for the next release (v2023.07) is **open** until the -rc1
+ release on Mon 24 April 2023.
-* The next branch is now **open**.
+* The next branch is now **closed**.
-* Release "v2023.04" is scheduled for 03 April 2023.
+* Release "v2023.07" is scheduled for 03 July 2023.
Future Releases
---------------
@@ -62,29 +63,29 @@ Future Releases
.. The following commented out dates are for when release candidates are
planned to be tagged.
-For the next scheduled release, release candidates were made on::
+.. For the next scheduled release, release candidates were made on::
-* U-Boot v2023.04-rc1 was released on Mon 30 January 2023.
+.. * U-Boot v2023.07-rc1 was released on Mon 24 April 2023.
-* U-Boot v2023.04-rc2 was released on Mon 13 February 2023.
+.. * U-Boot v2023.07-rc2 was released on Mon 08 May 2023.
-* U-Boot v2023.04-rc3 was released on Mon 27 February 2023.
+.. * U-Boot v2023.07-rc3 was released on Mon 22 May 2023.
-* U-Boot v2023.04-rc4 was released on Mon 13 March 2023.
+.. * U-Boot v2023.07-rc4 was released on Mon 05 June 2023.
-* U-Boot v2023.04-rc5 was released on Mon 27 March 2023.
+.. * U-Boot v2023.07-rc5 was released on Mon 19 June 2023.
Please note that the following dates are planned only and may be deviated from
as needed.
-* "v2023.04": end of MW = Mon, Jan 30, 2022; release = Mon, Apr 03, 2023
-
* "v2023.07": end of MW = Mon, Apr 24, 2023; release = Mon, Jul 03, 2023
* "v2023.10": end of MW = Mon, Jul 24, 2023; release = Mon, Oct 02, 2023
* "v2024.01": end of MW = Mon, Oct 23, 2023; release = Mon, Jan 08, 2024
+* "v2024.04": end of MW = Mon, Jan 29, 2024; release = Tue, Apr 02, 2024
+
Previous Releases
-----------------
@@ -92,6 +93,8 @@ Note: these statistics are generated by our fork of `gitdm
<https://source.denx.de/u-boot/gitdm>`_, which was originally created by
Jonathan Corbet.
+* :doc:`statistics/u-boot-stats-v2023.04` which was released on 03 April 2023.
+
* :doc:`statistics/u-boot-stats-v2023.01` which was released on 09 January 2023.
* :doc:`statistics/u-boot-stats-v2022.10` which was released on 03 October 2022.
diff --git a/doc/develop/statistics/u-boot-stats-v2023.04.rst b/doc/develop/statistics/u-boot-stats-v2023.04.rst
new file mode 100644
index 0000000..57f2efc
--- /dev/null
+++ b/doc/develop/statistics/u-boot-stats-v2023.04.rst
@@ -0,0 +1,767 @@
+:orphan:
+
+Release Statistics for U-Boot v2023.04
+======================================
+
+* Processed 1691 changesets from 157 developers
+
+* 29 employers found
+
+* A total of 174471 lines added, 78380 removed (delta 96091)
+
+.. table:: Developers with the most changesets
+ :widths: auto
+
+ ==================================== =====
+ Name Count
+ ==================================== =====
+ Simon Glass 381 (22.5%)
+ Tom Rini 333 (19.7%)
+ Marek Vasut 101 (6.0%)
+ Heinrich Schuchardt 70 (4.1%)
+ Jagan Teki 53 (3.1%)
+ Jonas Karlman 36 (2.1%)
+ Patrick Delaunay 35 (2.1%)
+ Hai Pham 21 (1.2%)
+ Michal Simek 20 (1.2%)
+ Maxim Cournoyer 20 (1.2%)
+ Svyatoslav Ryhel 17 (1.0%)
+ Sean Anderson 15 (0.9%)
+ Fabio Estevam 14 (0.8%)
+ Pali Rohár 14 (0.8%)
+ Sumit Garg 14 (0.8%)
+ Bryan Brattlof 14 (0.8%)
+ Sinthu Raja 13 (0.8%)
+ Andre Przywara 13 (0.8%)
+ Heiko Schocher 13 (0.8%)
+ Yu Chien Peter Lin 12 (0.7%)
+ Tim Harvey 12 (0.7%)
+ Peng Fan 12 (0.7%)
+ Tony Dinh 11 (0.7%)
+ Angelo Dureghello 11 (0.7%)
+ Masahisa Kojima 11 (0.7%)
+ Quentin Schulz 11 (0.7%)
+ Roger Quadros 11 (0.7%)
+ Marcel Ziswiler 11 (0.7%)
+ Holger Brunck 10 (0.6%)
+ Mark Kettenis 10 (0.6%)
+ Sergiu Moga 10 (0.6%)
+ Nikhil M Jain 9 (0.5%)
+ Jim Liu 9 (0.5%)
+ Christophe Leroy 9 (0.5%)
+ Balamanikandan Gunasundar 9 (0.5%)
+ Dario Binacchi 8 (0.5%)
+ Samuel Holland 8 (0.5%)
+ Frieder Schrempf 8 (0.5%)
+ Mikhail Ilin 8 (0.5%)
+ Sjoerd Simons 7 (0.4%)
+ Neil Armstrong 7 (0.4%)
+ Eugen Hristev 7 (0.4%)
+ Chris Morgan 7 (0.4%)
+ Dzmitry Sankouski 7 (0.4%)
+ Ioana Ciornei 7 (0.4%)
+ Ilias Apalodimas 6 (0.4%)
+ Peter Robinson 6 (0.4%)
+ Paweł Anikiel 6 (0.4%)
+ Andrejs Cainikovs 6 (0.4%)
+ Rob Herring 6 (0.4%)
+ John Keeping 5 (0.3%)
+ Mihai Sain 5 (0.3%)
+ Rick Chen 5 (0.3%)
+ Sergei Antonov 5 (0.3%)
+ Ashok Reddy Soma 5 (0.3%)
+ Algapally Santosh Sagar 5 (0.3%)
+ Dhruva Gole 5 (0.3%)
+ Brandon Maier 5 (0.3%)
+ Alexey Romanov 5 (0.3%)
+ Vasily Khoruzhick 4 (0.2%)
+ Manoj Sai 4 (0.2%)
+ Jan Kiszka 4 (0.2%)
+ Ovidiu Panait 4 (0.2%)
+ Takahiro Kuwano 4 (0.2%)
+ Enric Balletbo i Serra 4 (0.2%)
+ Fabrice Gasnier 4 (0.2%)
+ Victor Lim 4 (0.2%)
+ Stefan Bosch 4 (0.2%)
+ Vincent Stehlé 3 (0.2%)
+ Tam Nguyen 3 (0.2%)
+ Leo Yu-Chi Liang 3 (0.2%)
+ Mattijs Korpershoek 3 (0.2%)
+ Ye Li 3 (0.2%)
+ Oleksandr Suvorov 3 (0.2%)
+ Max Krummenacher 3 (0.2%)
+ Andrew Davis 3 (0.2%)
+ Michael Walle 3 (0.2%)
+ Andreas Kemnade 3 (0.2%)
+ Kshitiz Varshney 3 (0.2%)
+ Dai Okamura 3 (0.2%)
+ Stefan Roese 2 (0.1%)
+ Vincent Fazio 2 (0.1%)
+ Kamlesh Gurudasani 2 (0.1%)
+ Johan Jonker 2 (0.1%)
+ Antoine Mazeas 2 (0.1%)
+ Christopher Obbard 2 (0.1%)
+ Akash Gajjar 2 (0.1%)
+ Ilko Iliev 2 (0.1%)
+ Qu Wenruo 2 (0.1%)
+ Etienne Carriere 2 (0.1%)
+ Thomas Fitzsimmons 2 (0.1%)
+ Pei Yue Ho 2 (0.1%)
+ Ryan Chen 2 (0.1%)
+ Adam Ford 2 (0.1%)
+ Philippe Schenker 2 (0.1%)
+ Linus Walleij 2 (0.1%)
+ Sean Edmond 2 (0.1%)
+ Nikita Shubin 2 (0.1%)
+ Ying-Chun Liu (PaulLiu) 2 (0.1%)
+ Loic Poulain 2 (0.1%)
+ Pengfei Fan 2 (0.1%)
+ Jernej Skrabec 2 (0.1%)
+ Neha Malcom Francis 2 (0.1%)
+ Harald Seiler 2 (0.1%)
+ Shenlin Liang 2 (0.1%)
+ Martyn Welch 2 (0.1%)
+ Harini Katakam 2 (0.1%)
+ Marc Kleine-Budde 2 (0.1%)
+ David Sebek 1 (0.1%)
+ Jonathan Liu 1 (0.1%)
+ Vignesh Raghavendra 1 (0.1%)
+ Sebastian Andrzej Siewior 1 (0.1%)
+ annsai01 1 (0.1%)
+ Peter Geis 1 (0.1%)
+ Ralph Siemsen 1 (0.1%)
+ Robert Marko 1 (0.1%)
+ Michal Suchanek 1 (0.1%)
+ Jaehoon Chung 1 (0.1%)
+ Christian Kohlschütter 1 (0.1%)
+ Ramin Khonsari 1 (0.1%)
+ Maxim Schwalm 1 (0.1%)
+ Venkatesh Yadav Abbarapu 1 (0.1%)
+ Ivan Khoronzhuk 1 (0.1%)
+ Ulf Samuelsson 1 (0.1%)
+ Jade Lovelace 1 (0.1%)
+ Michael Trimarchi 1 (0.1%)
+ Matwey V. Kornilov 1 (0.1%)
+ KaDiWa 1 (0.1%)
+ Christian Marangi 1 (0.1%)
+ Ehsan Mohandesi 1 (0.1%)
+ Aurelien Jarno 1 (0.1%)
+ Mario Kicherer 1 (0.1%)
+ Arnaud Ferraris 1 (0.1%)
+ Detlev Casanova 1 (0.1%)
+ Igor Opaniuk 1 (0.1%)
+ Massimo Pegorer 1 (0.1%)
+ Kunihiko Hayashi 1 (0.1%)
+ Joost van Zwieten 1 (0.1%)
+ Jorge Ramirez-Ortiz 1 (0.1%)
+ Jay Buddhabhatti 1 (0.1%)
+ Andrey Dolnikov 1 (0.1%)
+ chenzhipeng 1 (0.1%)
+ Olivier Moysan 1 (0.1%)
+ Ville Skyttä 1 (0.1%)
+ David Oberhollenzer 1 (0.1%)
+ Haijun Qin 1 (0.1%)
+ Neal Frager 1 (0.1%)
+ Luca Ceresoli 1 (0.1%)
+ Viacheslav Bocharov 1 (0.1%)
+ Yuepeng Xing 1 (0.1%)
+ Cristian Birsan 1 (0.1%)
+ Lokanathan, Raaj 1 (0.1%)
+ Christian Gmeiner 1 (0.1%)
+ Daniel Golle 1 (0.1%)
+ Manuel Traut 1 (0.1%)
+ Ben Dooks 1 (0.1%)
+ Kasper Revsbech 1 (0.1%)
+ ==================================== =====
+
+
+.. table:: Developers with the most changed lines
+ :widths: auto
+
+ ==================================== =====
+ Name Count
+ ==================================== =====
+ Bryan Brattlof 38811 (18.1%)
+ Tom Rini 36464 (17.0%)
+ Simon Glass 30090 (14.0%)
+ Jagan Teki 23918 (11.1%)
+ Marek Vasut 14720 (6.9%)
+ Brandon Maier 13759 (6.4%)
+ Tony Dinh 7399 (3.4%)
+ Balamanikandan Gunasundar 4239 (2.0%)
+ Jim Liu 4106 (1.9%)
+ Fabio Estevam 3264 (1.5%)
+ Christophe Leroy 2145 (1.0%)
+ Neil Armstrong 2020 (0.9%)
+ Nikhil M Jain 1681 (0.8%)
+ Sumit Garg 1671 (0.8%)
+ Tim Harvey 1524 (0.7%)
+ Jonas Karlman 1439 (0.7%)
+ Roger Quadros 1431 (0.7%)
+ Quentin Schulz 1296 (0.6%)
+ Heinrich Schuchardt 1277 (0.6%)
+ Michal Simek 1274 (0.6%)
+ Svyatoslav Ryhel 1259 (0.6%)
+ Akash Gajjar 1057 (0.5%)
+ Mark Kettenis 1042 (0.5%)
+ Sinthu Raja 967 (0.5%)
+ Holger Brunck 966 (0.5%)
+ Chris Morgan 965 (0.4%)
+ Peter Robinson 919 (0.4%)
+ Luca Ceresoli 860 (0.4%)
+ Hai Pham 712 (0.3%)
+ Andre Przywara 702 (0.3%)
+ Kunihiko Hayashi 695 (0.3%)
+ Dario Binacchi 690 (0.3%)
+ Patrick Delaunay 668 (0.3%)
+ Samuel Holland 568 (0.3%)
+ Dhruva Gole 527 (0.2%)
+ Ryan Chen 504 (0.2%)
+ Sergei Antonov 464 (0.2%)
+ Sean Anderson 439 (0.2%)
+ Ashok Reddy Soma 399 (0.2%)
+ Masahisa Kojima 391 (0.2%)
+ Sergiu Moga 382 (0.2%)
+ Maxim Cournoyer 380 (0.2%)
+ Massimo Pegorer 353 (0.2%)
+ Linus Walleij 317 (0.1%)
+ Eugen Hristev 295 (0.1%)
+ Alexey Romanov 285 (0.1%)
+ Yu Chien Peter Lin 267 (0.1%)
+ Stefan Bosch 260 (0.1%)
+ Dzmitry Sankouski 257 (0.1%)
+ Heiko Schocher 221 (0.1%)
+ Enric Balletbo i Serra 214 (0.1%)
+ Kshitiz Varshney 211 (0.1%)
+ Thomas Fitzsimmons 205 (0.1%)
+ Mihai Sain 191 (0.1%)
+ Angelo Dureghello 167 (0.1%)
+ Adam Ford 162 (0.1%)
+ Marcel Ziswiler 160 (0.1%)
+ Mattijs Korpershoek 154 (0.1%)
+ Etienne Carriere 154 (0.1%)
+ Leo Yu-Chi Liang 135 (0.1%)
+ Ramin Khonsari 131 (0.1%)
+ Pali Rohár 127 (0.1%)
+ Olivier Moysan 116 (0.1%)
+ Vincent Fazio 106 (0.0%)
+ Fabrice Gasnier 98 (0.0%)
+ Max Krummenacher 80 (0.0%)
+ Takahiro Kuwano 76 (0.0%)
+ Victor Lim 73 (0.0%)
+ Frieder Schrempf 72 (0.0%)
+ Manoj Sai 70 (0.0%)
+ Andrew Davis 70 (0.0%)
+ Mikhail Ilin 69 (0.0%)
+ Dai Okamura 65 (0.0%)
+ Tam Nguyen 63 (0.0%)
+ Peng Fan 61 (0.0%)
+ Sjoerd Simons 61 (0.0%)
+ Cristian Birsan 59 (0.0%)
+ Antoine Mazeas 51 (0.0%)
+ Rick Chen 49 (0.0%)
+ Paweł Anikiel 47 (0.0%)
+ Andreas Kemnade 45 (0.0%)
+ Jan Kiszka 43 (0.0%)
+ Andrejs Cainikovs 41 (0.0%)
+ Michael Trimarchi 41 (0.0%)
+ Rob Herring 40 (0.0%)
+ Martyn Welch 36 (0.0%)
+ Stefan Roese 35 (0.0%)
+ Neha Malcom Francis 35 (0.0%)
+ Algapally Santosh Sagar 34 (0.0%)
+ Jernej Skrabec 34 (0.0%)
+ Maxim Schwalm 30 (0.0%)
+ Qu Wenruo 29 (0.0%)
+ Loic Poulain 29 (0.0%)
+ Ioana Ciornei 28 (0.0%)
+ Christian Kohlschütter 28 (0.0%)
+ Michael Walle 23 (0.0%)
+ Vasily Khoruzhick 22 (0.0%)
+ Pei Yue Ho 22 (0.0%)
+ Vincent Stehlé 19 (0.0%)
+ Venkatesh Yadav Abbarapu 19 (0.0%)
+ Pengfei Fan 16 (0.0%)
+ Harald Seiler 16 (0.0%)
+ Ville Skyttä 16 (0.0%)
+ Sean Edmond 14 (0.0%)
+ Harini Katakam 14 (0.0%)
+ Robert Marko 14 (0.0%)
+ John Keeping 13 (0.0%)
+ Ovidiu Panait 13 (0.0%)
+ Kamlesh Gurudasani 13 (0.0%)
+ Nikita Shubin 13 (0.0%)
+ Marc Kleine-Budde 13 (0.0%)
+ Detlev Casanova 13 (0.0%)
+ David Oberhollenzer 11 (0.0%)
+ Ilias Apalodimas 10 (0.0%)
+ Mario Kicherer 10 (0.0%)
+ Yuepeng Xing 10 (0.0%)
+ Jaehoon Chung 9 (0.0%)
+ KaDiWa 9 (0.0%)
+ Oleksandr Suvorov 8 (0.0%)
+ Christian Gmeiner 8 (0.0%)
+ Ye Li 7 (0.0%)
+ Christopher Obbard 7 (0.0%)
+ Ying-Chun Liu (PaulLiu) 7 (0.0%)
+ Johan Jonker 6 (0.0%)
+ Jonathan Liu 6 (0.0%)
+ Andrey Dolnikov 6 (0.0%)
+ Daniel Golle 6 (0.0%)
+ Philippe Schenker 5 (0.0%)
+ Michal Suchanek 5 (0.0%)
+ Ivan Khoronzhuk 5 (0.0%)
+ Ilko Iliev 4 (0.0%)
+ Manuel Traut 4 (0.0%)
+ Shenlin Liang 3 (0.0%)
+ annsai01 3 (0.0%)
+ Ulf Samuelsson 3 (0.0%)
+ Matwey V. Kornilov 3 (0.0%)
+ Jay Buddhabhatti 3 (0.0%)
+ chenzhipeng 3 (0.0%)
+ Ben Dooks 3 (0.0%)
+ Peter Geis 2 (0.0%)
+ Ralph Siemsen 2 (0.0%)
+ Christian Marangi 2 (0.0%)
+ Jorge Ramirez-Ortiz 2 (0.0%)
+ David Sebek 1 (0.0%)
+ Vignesh Raghavendra 1 (0.0%)
+ Sebastian Andrzej Siewior 1 (0.0%)
+ Jade Lovelace 1 (0.0%)
+ Ehsan Mohandesi 1 (0.0%)
+ Aurelien Jarno 1 (0.0%)
+ Arnaud Ferraris 1 (0.0%)
+ Igor Opaniuk 1 (0.0%)
+ Joost van Zwieten 1 (0.0%)
+ Haijun Qin 1 (0.0%)
+ Neal Frager 1 (0.0%)
+ Viacheslav Bocharov 1 (0.0%)
+ Lokanathan, Raaj 1 (0.0%)
+ Kasper Revsbech 1 (0.0%)
+ ==================================== =====
+
+
+.. table:: Developers with the most lines removed
+ :widths: auto
+
+ ==================================== =====
+ Name Count
+ ==================================== =====
+ Tom Rini 18089 (23.1%)
+ Simon Glass 5998 (7.7%)
+ Luca Ceresoli 860 (1.1%)
+ Holger Brunck 532 (0.7%)
+ Leo Yu-Chi Liang 90 (0.1%)
+ Mattijs Korpershoek 83 (0.1%)
+ Andrew Davis 43 (0.1%)
+ Pali Rohár 28 (0.0%)
+ Maxim Schwalm 27 (0.0%)
+ Dai Okamura 12 (0.0%)
+ Michael Walle 12 (0.0%)
+ Ovidiu Panait 10 (0.0%)
+ Peng Fan 7 (0.0%)
+ Ioana Ciornei 6 (0.0%)
+ Michal Suchanek 4 (0.0%)
+ Rob Herring 3 (0.0%)
+ Johan Jonker 3 (0.0%)
+ Ying-Chun Liu (PaulLiu) 2 (0.0%)
+ Ilko Iliev 1 (0.0%)
+ ==================================== =====
+
+
+.. table:: Developers with the most signoffs (total 215)
+ :widths: auto
+
+ ==================================== =====
+ Name Count
+ ==================================== =====
+ Francesco Dolcini 21 (9.8%)
+ Marek Vasut 21 (9.8%)
+ Tom 19 (8.8%)
+ Michal Simek 19 (8.8%)
+ Michael Trimarchi 8 (3.7%)
+ Dario Binacchi 8 (3.7%)
+ Neil Armstrong 8 (3.7%)
+ Hai Pham 7 (3.3%)
+ Kever Yang 6 (2.8%)
+ Tom Rini 5 (2.3%)
+ YouMin Chen 5 (2.3%)
+ Jianqun Xu 4 (1.9%)
+ Elaine Zhang 4 (1.9%)
+ Mike Worsfold 4 (1.9%)
+ Manoj Sai 4 (1.9%)
+ Marcel Ziswiler 4 (1.9%)
+ Ashok Reddy Soma 4 (1.9%)
+ Peter Robinson 4 (1.9%)
+ Peng Fan 3 (1.4%)
+ Andre Przywara 3 (1.4%)
+ Heinrich Schuchardt 3 (1.4%)
+ Vignesh Raghavendra 2 (0.9%)
+ Joseph Chen 2 (0.9%)
+ Finley Xiao 2 (0.9%)
+ Suniel Mahesh 2 (0.9%)
+ FUKAUMI Naoki 2 (0.9%)
+ Judith Mendez 2 (0.9%)
+ Robert Hancock 2 (0.9%)
+ Peter Geis 2 (0.9%)
+ Andrejs Cainikovs 2 (0.9%)
+ Samuel Holland 2 (0.9%)
+ Jonas Karlman 2 (0.9%)
+ Jagan Teki 2 (0.9%)
+ Simon Glass 1 (0.5%)
+ Mattijs Korpershoek 1 (0.5%)
+ Pali Rohár 1 (0.5%)
+ Michal Suchanek 1 (0.5%)
+ Anand Gadiyar 1 (0.5%)
+ Angelo Durgehello 1 (0.5%)
+ Nam Nguyen 1 (0.5%)
+ Steven Liu 1 (0.5%)
+ Sebastian Reichel 1 (0.5%)
+ Yifeng Zhao 1 (0.5%)
+ Ren Jianing 1 (0.5%)
+ Vladimir Oltean 1 (0.5%)
+ Jonas Schwöbel 1 (0.5%)
+ Shawn Guo 1 (0.5%)
+ Jason Zhu 1 (0.5%)
+ Jon Lin 1 (0.5%)
+ Sugar Zhang 1 (0.5%)
+ Valentine Barshak 1 (0.5%)
+ Jit Loon Lim 1 (0.5%)
+ Philippe Schenker 1 (0.5%)
+ Ilias Apalodimas 1 (0.5%)
+ Sjoerd Simons 1 (0.5%)
+ Tam Nguyen 1 (0.5%)
+ Ramin Khonsari 1 (0.5%)
+ Sergiu Moga 1 (0.5%)
+ Svyatoslav Ryhel 1 (0.5%)
+ Quentin Schulz 1 (0.5%)
+ ==================================== =====
+
+
+.. table:: Developers with the most reviews (total 767)
+ :widths: auto
+
+ ==================================== =====
+ Name Count
+ ==================================== =====
+ Simon Glass 225 (29.3%)
+ Kever Yang 112 (14.6%)
+ Fabio Estevam 49 (6.4%)
+ Tom Rini 33 (4.3%)
+ Patrice Chotard 33 (4.3%)
+ Marek Vasut 27 (3.5%)
+ Ramon Fried 22 (2.9%)
+ Stefan Roese 17 (2.2%)
+ Ilias Apalodimas 16 (2.1%)
+ Leo Yu-Chi Liang 15 (2.0%)
+ Rick Chen 15 (2.0%)
+ Heinrich Schuchardt 14 (1.8%)
+ Jagan Teki 14 (1.8%)
+ Patrick Delaunay 14 (1.8%)
+ Mattijs Korpershoek 13 (1.7%)
+ Jaehoon Chung 13 (1.7%)
+ Samuel Holland 12 (1.6%)
+ Heiko Schocher 9 (1.2%)
+ Neil Armstrong 8 (1.0%)
+ Vladimir Oltean 7 (0.9%)
+ Sean Anderson 7 (0.9%)
+ Bin Meng 6 (0.8%)
+ FRANJOU Stephane 6 (0.8%)
+ Claudiu Beznea 6 (0.8%)
+ Michael Trimarchi 5 (0.7%)
+ Peng Fan 5 (0.7%)
+ Jens Wiklander 5 (0.7%)
+ Yu Chien Peter Lin 4 (0.5%)
+ Andre Przywara 3 (0.4%)
+ Pali Rohár 3 (0.4%)
+ Viacheslav Mitrofanov 3 (0.4%)
+ Ye Li 3 (0.4%)
+ Dhruva Gole 3 (0.4%)
+ Marcel Ziswiler 2 (0.3%)
+ Oleksandr Suvorov 2 (0.3%)
+ Wei Liang Lim 2 (0.3%)
+ Eng Lee Teh 2 (0.3%)
+ Minkyu Kang 2 (0.3%)
+ Tudor Ambarus 2 (0.3%)
+ Philipp Tomsich 2 (0.3%)
+ Etienne Carriere 2 (0.3%)
+ Masahisa Kojima 2 (0.3%)
+ Eugen Hristev 2 (0.3%)
+ Francesco Dolcini 1 (0.1%)
+ Michal Simek 1 (0.1%)
+ Jonas Karlman 1 (0.1%)
+ Nishanth Menon 1 (0.1%)
+ Siddharth Vadapalli 1 (0.1%)
+ Matthias Brugger 1 (0.1%)
+ Chia-Wei Wang 1 (0.1%)
+ Huang Jianan 1 (0.1%)
+ Oliver Graute 1 (0.1%)
+ Pratyush Yadav 1 (0.1%)
+ Soeren Moch 1 (0.1%)
+ Sunil V L 1 (0.1%)
+ Miquel Raynal 1 (0.1%)
+ Hector Palacios 1 (0.1%)
+ Derald Woods 1 (0.1%)
+ Nick Desaulniers 1 (0.1%)
+ Frieder Schrempf 1 (0.1%)
+ Adam Ford 1 (0.1%)
+ Sumit Garg 1 (0.1%)
+ Christophe Leroy 1 (0.1%)
+ ==================================== =====
+
+
+.. table:: Developers with the most test credits (total 78)
+ :widths: auto
+
+ ==================================== =====
+ Name Count
+ ==================================== =====
+ Svyatoslav Ryhel 12 (15.4%)
+ Andreas Westman Dorcsak 11 (14.1%)
+ Thierry Reding 9 (11.5%)
+ Robert Eckelmann 8 (10.3%)
+ Samuel Holland 6 (7.7%)
+ Vagrant Cascadian 3 (3.8%)
+ Jagan Teki 2 (2.6%)
+ Eugen Hristev 2 (2.6%)
+ Jonas Schwöbel 2 (2.6%)
+ Quentin Schulz 2 (2.6%)
+ Agneli 2 (2.6%)
+ Lothar Waßmann 2 (2.6%)
+ Simon Glass 1 (1.3%)
+ Fabio Estevam 1 (1.3%)
+ Ilias Apalodimas 1 (1.3%)
+ Rick Chen 1 (1.3%)
+ Patrick Delaunay 1 (1.3%)
+ Mattijs Korpershoek 1 (1.3%)
+ Andre Przywara 1 (1.3%)
+ Dhruva Gole 1 (1.3%)
+ Jonas Karlman 1 (1.3%)
+ Suniel Mahesh 1 (1.3%)
+ Sjoerd Simons 1 (1.3%)
+ Matwey V. Kornilov 1 (1.3%)
+ Anand Moon 1 (1.3%)
+ Vaishnav Achath 1 (1.3%)
+ Karsten Merker 1 (1.3%)
+ Sean Nyekjaer 1 (1.3%)
+ Mihai Sain 1 (1.3%)
+ ==================================== =====
+
+
+.. table:: Developers who gave the most tested-by credits (total 78)
+ :widths: auto
+
+ ==================================== =====
+ Name Count
+ ==================================== =====
+ Svyatoslav Ryhel 41 (52.6%)
+ Andre Przywara 6 (7.7%)
+ Tom Rini 5 (6.4%)
+ Simon Glass 4 (5.1%)
+ Jonas Karlman 3 (3.8%)
+ Loic Poulain 3 (3.8%)
+ Ramin Khonsari 2 (2.6%)
+ Jagan Teki 1 (1.3%)
+ Patrick Delaunay 1 (1.3%)
+ Dhruva Gole 1 (1.3%)
+ Sjoerd Simons 1 (1.3%)
+ Michael Trimarchi 1 (1.3%)
+ Etienne Carriere 1 (1.3%)
+ Peter Geis 1 (1.3%)
+ Sergiu Moga 1 (1.3%)
+ Maxim Schwalm 1 (1.3%)
+ Kasper Revsbech 1 (1.3%)
+ Neha Malcom Francis 1 (1.3%)
+ Fabrice Gasnier 1 (1.3%)
+ Maxim Cournoyer 1 (1.3%)
+ Sergei Antonov 1 (1.3%)
+ ==================================== =====
+
+
+.. table:: Developers with the most report credits (total 22)
+ :widths: auto
+
+ ==================================== =====
+ Name Count
+ ==================================== =====
+ Heinrich Schuchardt 3 (13.6%)
+ Ilias Apalodimas 2 (9.1%)
+ Patrick Delaunay 1 (4.5%)
+ Sjoerd Simons 1 (4.5%)
+ Samuel Holland 1 (4.5%)
+ Quentin Schulz 1 (4.5%)
+ Karsten Merker 1 (4.5%)
+ Marek Vasut 1 (4.5%)
+ Francesco Dolcini 1 (4.5%)
+ Nishanth Menon 1 (4.5%)
+ Oliver Graute 1 (4.5%)
+ Anand Gadiyar 1 (4.5%)
+ Philippe Schenker 1 (4.5%)
+ Andreas Schwab 1 (4.5%)
+ Stefan Herbrechtsmeier 1 (4.5%)
+ Carlos Rafael Giani 1 (4.5%)
+ Dave Jones 1 (4.5%)
+ Serge Bazanski 1 (4.5%)
+ Sam Winchenbach 1 (4.5%)
+ ==================================== =====
+
+
+.. table:: Developers who gave the most report credits (total 22)
+ :widths: auto
+
+ ==================================== =====
+ Name Count
+ ==================================== =====
+ Simon Glass 6 (27.3%)
+ Tom Rini 5 (22.7%)
+ Heinrich Schuchardt 3 (13.6%)
+ Qu Wenruo 2 (9.1%)
+ Ilias Apalodimas 1 (4.5%)
+ Maxim Cournoyer 1 (4.5%)
+ Fabio Estevam 1 (4.5%)
+ Vignesh Raghavendra 1 (4.5%)
+ Harald Seiler 1 (4.5%)
+ Sinthu Raja 1 (4.5%)
+ ==================================== =====
+
+
+.. table:: Top changeset contributors by employer
+ :widths: auto
+
+ ==================================== =====
+ Name Count
+ ==================================== =====
+ (Unknown) 524 (31.0%)
+ Google, Inc. 381 (22.5%)
+ Konsulko Group 333 (19.7%)
+ DENX Software Engineering 72 (4.3%)
+ Texas Instruments 49 (2.9%)
+ Linaro 47 (2.8%)
+ Edgeble AI Technologies Pvt. Ltd. 46 (2.7%)
+ ST Microelectronics 40 (2.4%)
+ AMD 34 (2.0%)
+ NXP 25 (1.5%)
+ Renesas Electronics 24 (1.4%)
+ Toradex 24 (1.4%)
+ Amarula Solutions 20 (1.2%)
+ Collabora Ltd. 20 (1.2%)
+ ARM 17 (1.0%)
+ Semihalf Embedded Systems 6 (0.4%)
+ Red Hat 4 (0.2%)
+ Siemens 4 (0.2%)
+ Socionext Inc. 4 (0.2%)
+ BayLibre SAS 3 (0.2%)
+ SUSE 3 (0.2%)
+ Pengutronix 2 (0.1%)
+ Ronetix 2 (0.1%)
+ Extreme Engineering Solutions 2 (0.1%)
+ Bootlin 1 (0.1%)
+ Intel 1 (0.1%)
+ linutronix 1 (0.1%)
+ Samsung 1 (0.1%)
+ Xilinx 1 (0.1%)
+ ==================================== =====
+
+
+.. table:: Top lines changed by employer
+ :widths: auto
+
+ ==================================== =====
+ Name Count
+ ==================================== =====
+ (Unknown) 64681 (30.1%)
+ Texas Instruments 42105 (19.6%)
+ Konsulko Group 36464 (17.0%)
+ Google, Inc. 30090 (14.0%)
+ Edgeble AI Technologies Pvt. Ltd. 23070 (10.7%)
+ Linaro 4601 (2.1%)
+ DENX Software Engineering 4582 (2.1%)
+ AMD 1741 (0.8%)
+ Amarula Solutions 1649 (0.8%)
+ ST Microelectronics 882 (0.4%)
+ Bootlin 860 (0.4%)
+ Renesas Electronics 775 (0.4%)
+ Socionext Inc. 760 (0.4%)
+ ARM 724 (0.3%)
+ Collabora Ltd. 413 (0.2%)
+ NXP 307 (0.1%)
+ Toradex 290 (0.1%)
+ Red Hat 214 (0.1%)
+ BayLibre SAS 154 (0.1%)
+ Extreme Engineering Solutions 106 (0.0%)
+ Semihalf Embedded Systems 47 (0.0%)
+ Siemens 43 (0.0%)
+ SUSE 34 (0.0%)
+ Pengutronix 13 (0.0%)
+ Samsung 9 (0.0%)
+ Ronetix 4 (0.0%)
+ Xilinx 3 (0.0%)
+ Intel 1 (0.0%)
+ linutronix 1 (0.0%)
+ ==================================== =====
+
+
+.. table:: Employers with the most signoffs (total 215)
+ :widths: auto
+
+ ==================================== =====
+ Name Count
+ ==================================== =====
+ (Unknown) 48 (22.3%)
+ Rockchip 29 (13.5%)
+ Toradex 28 (13.0%)
+ Amarula Solutions 24 (11.2%)
+ AMD 23 (10.7%)
+ NVidia 19 (8.8%)
+ Linaro 9 (4.2%)
+ Renesas Electronics 9 (4.2%)
+ Texas Instruments 5 (2.3%)
+ Konsulko Group 5 (2.3%)
+ NXP 4 (1.9%)
+ ARM 3 (1.4%)
+ Canonical 3 (1.4%)
+ Collabora Ltd. 2 (0.9%)
+ Google, Inc. 1 (0.5%)
+ BayLibre SAS 1 (0.5%)
+ SUSE 1 (0.5%)
+ Intel 1 (0.5%)
+ ==================================== =====
+
+
+.. table:: Employers with the most hackers (total 160)
+ :widths: auto
+
+ ==================================== =====
+ Name Count
+ ==================================== =====
+ (Unknown) 86 (53.8%)
+ Linaro 9 (5.6%)
+ Texas Instruments 8 (5.0%)
+ AMD 6 (3.8%)
+ Collabora Ltd. 6 (3.8%)
+ Toradex 5 (3.1%)
+ DENX Software Engineering 5 (3.1%)
+ Amarula Solutions 4 (2.5%)
+ NXP 4 (2.5%)
+ ARM 3 (1.9%)
+ ST Microelectronics 3 (1.9%)
+ Renesas Electronics 2 (1.2%)
+ SUSE 2 (1.2%)
+ Socionext Inc. 2 (1.2%)
+ Konsulko Group 1 (0.6%)
+ Google, Inc. 1 (0.6%)
+ BayLibre SAS 1 (0.6%)
+ Intel 1 (0.6%)
+ Edgeble AI Technologies Pvt. Ltd. 1 (0.6%)
+ Bootlin 1 (0.6%)
+ Red Hat 1 (0.6%)
+ Extreme Engineering Solutions 1 (0.6%)
+ Semihalf Embedded Systems 1 (0.6%)
+ Siemens 1 (0.6%)
+ Pengutronix 1 (0.6%)
+ Samsung 1 (0.6%)
+ Ronetix 1 (0.6%)
+ Xilinx 1 (0.6%)
+ linutronix 1 (0.6%)
+ ==================================== =====
+
diff --git a/drivers/pinctrl/pinctrl-uclass.c b/drivers/pinctrl/pinctrl-uclass.c
index 8837726..73dd7b1 100644
--- a/drivers/pinctrl/pinctrl-uclass.c
+++ b/drivers/pinctrl/pinctrl-uclass.c
@@ -169,34 +169,33 @@ pinctrl_gpio_get_pinctrl_and_offset(struct udevice *dev, unsigned offset,
{
struct ofnode_phandle_args args;
unsigned gpio_offset, pfc_base, pfc_pins;
- int ret;
+ int ret = 0;
+ int i = 0;
- ret = dev_read_phandle_with_args(dev, "gpio-ranges", NULL, 3,
- 0, &args);
- if (ret) {
- dev_dbg(dev, "%s: dev_read_phandle_with_args: err=%d\n",
- __func__, ret);
- return ret;
- }
+ while (ret == 0) {
+ ret = dev_read_phandle_with_args(dev, "gpio-ranges", NULL, 3,
+ i++, &args);
+ if (ret) {
+ dev_dbg(dev, "%s: dev_read_phandle_with_args: err=%d\n",
+ __func__, ret);
+ return ret;
+ }
- ret = uclass_get_device_by_ofnode(UCLASS_PINCTRL,
- args.node, pctldev);
- if (ret) {
- dev_dbg(dev,
- "%s: uclass_get_device_by_of_offset failed: err=%d\n",
- __func__, ret);
- return ret;
- }
+ ret = uclass_get_device_by_ofnode(UCLASS_PINCTRL,
+ args.node, pctldev);
+ if (ret) {
+ dev_dbg(dev,
+ "%s: uclass_get_device_by_of_offset failed: err=%d\n",
+ __func__, ret);
+ return ret;
+ }
- gpio_offset = args.args[0];
- pfc_base = args.args[1];
- pfc_pins = args.args[2];
+ gpio_offset = args.args[0];
+ pfc_base = args.args[1];
+ pfc_pins = args.args[2];
- if (offset < gpio_offset || offset > gpio_offset + pfc_pins) {
- dev_dbg(dev,
- "%s: GPIO can not be mapped to pincontrol pin\n",
- __func__);
- return -EINVAL;
+ if (offset >= gpio_offset && offset <= gpio_offset + pfc_pins)
+ break;
}
offset -= gpio_offset;
diff --git a/drivers/ram/rockchip/sdram_rk3399.c b/drivers/ram/rockchip/sdram_rk3399.c
index b1fea04..963a05c 100644
--- a/drivers/ram/rockchip/sdram_rk3399.c
+++ b/drivers/ram/rockchip/sdram_rk3399.c
@@ -2954,7 +2954,7 @@ static int sdram_init(struct dram_info *dram,
params->ch[ch].cap_info.rank = rank;
}
-#if defined(CONFIG_RAM_RK3399_LPDDR4)
+#if defined(CONFIG_RAM_ROCKCHIP_LPDDR4)
/* LPDDR4 needs to be trained at 400MHz */
lpddr4_set_rate(dram, params, 0);
params->base.ddr_freq = dfs_cfgs_lpddr4[0].base.ddr_freq / MHz;
diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig
index ad484ce..a801412 100644
--- a/drivers/scsi/Kconfig
+++ b/drivers/scsi/Kconfig
@@ -26,7 +26,7 @@ config SCSI_AHCI_PLAT
This is deprecated. An AHCI driver should be provided instead.
config SYS_SCSI_MAX_SCSI_ID
- int "Maximum supporedt SCSI ID"
+ int "Maximum supported SCSI ID"
default 1
help
Sets the maximum number of SCSI IDs to scan when looking for devices.
diff --git a/drivers/sysreset/sysreset_gpio.c b/drivers/sysreset/sysreset_gpio.c
index dfca10c..de42b59 100644
--- a/drivers/sysreset/sysreset_gpio.c
+++ b/drivers/sysreset/sysreset_gpio.c
@@ -17,6 +17,7 @@ struct gpio_reboot_priv {
static int gpio_reboot_request(struct udevice *dev, enum sysreset_t type)
{
struct gpio_reboot_priv *priv = dev_get_priv(dev);
+ int ret;
/*
* When debug log is enabled please make sure that chars won't end up
@@ -26,7 +27,11 @@ static int gpio_reboot_request(struct udevice *dev, enum sysreset_t type)
debug("GPIO reset\n");
/* Writing 1 respects polarity (active high/low) based on gpio->flags */
- return dm_gpio_set_value(&priv->gpio, 1);
+ ret = dm_gpio_set_value(&priv->gpio, 1);
+ if (ret < 0)
+ return ret;
+
+ return -EINPROGRESS;
}
static struct sysreset_ops gpio_reboot_ops = {
diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
index 2a309e6..04b8541 100644
--- a/drivers/usb/gadget/composite.c
+++ b/drivers/usb/gadget/composite.c
@@ -1068,7 +1068,7 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
if (!gadget_is_dualspeed(gadget) ||
gadget->speed >= USB_SPEED_SUPER)
break;
-
+ fallthrough;
case USB_DT_CONFIG:
value = config_desc(cdev, w_value);
if (value >= 0)
diff --git a/drivers/usb/gadget/f_sdp.c b/drivers/usb/gadget/f_sdp.c
index 9ea43f2..4da5a16 100644
--- a/drivers/usb/gadget/f_sdp.c
+++ b/drivers/usb/gadget/f_sdp.c
@@ -865,6 +865,7 @@ static int sdp_handle_in_ep(struct spl_image_info *spl_image,
struct spl_image_info spl_image = {};
struct spl_boot_device bootdev = {};
spl_parse_image_header(&spl_image, &bootdev, header);
+ spl_board_prepare_for_boot();
jump_to_image_no_args(&spl_image);
#else
/* In U-Boot, allow jumps to scripts */
diff --git a/include/cli.h b/include/cli.h
index c777c90..094a660 100644
--- a/include/cli.h
+++ b/include/cli.h
@@ -98,8 +98,8 @@ int cli_readline(const char *const prompt);
*
* @prompt: Prompt to display
* @buffer: Place to put the line that is entered
- * @timeout: Timeout in milliseconds, 0 if none
- * Return: command line length excluding terminator, or -ve on error: of the
+ * @timeout: Timeout in seconds, 0 if none
+ * Return: command line length excluding terminator, or -ve on error: if the
* timeout is exceeded (either CONFIG_BOOT_RETRY_TIME or the timeout
* parameter), then -2 is returned. If a break is detected (Ctrl-C) then
* -1 is returned.
diff --git a/include/configs/imx8mn_bsh_smm_s2.h b/include/configs/imx8mn_bsh_smm_s2.h
index e97b8e8..deeed9c 100644
--- a/include/configs/imx8mn_bsh_smm_s2.h
+++ b/include/configs/imx8mn_bsh_smm_s2.h
@@ -14,7 +14,7 @@
#include <config_distro_bootcmd.h>
#define NANDARGS \
- "nandargs=setenv bootargs console=${console} " \
+ "nandargs=setenv bootargs " \
"${optargs} " \
"mtdparts=${mtdparts} " \
"root=${nandroot} " \
diff --git a/include/efi_api.h b/include/efi_api.h
index c4512ee..dc6e5ce 100644
--- a/include/efi_api.h
+++ b/include/efi_api.h
@@ -604,6 +604,7 @@ struct efi_device_path_acpi_path {
# define DEVICE_PATH_SUB_TYPE_MSG_MAC_ADDR 0x0b
# define DEVICE_PATH_SUB_TYPE_MSG_UART 0x0e
# define DEVICE_PATH_SUB_TYPE_MSG_USB_CLASS 0x0f
+# define DEVICE_PATH_SUB_TYPE_MSG_USB_WWI 0x10
# define DEVICE_PATH_SUB_TYPE_MSG_SATA 0x12
# define DEVICE_PATH_SUB_TYPE_MSG_NVME 0x17
# define DEVICE_PATH_SUB_TYPE_MSG_URI 0x18
diff --git a/lib/efi_loader/efi_device_path.c b/lib/efi_loader/efi_device_path.c
index d5cc495..ea09783 100644
--- a/lib/efi_loader/efi_device_path.c
+++ b/lib/efi_loader/efi_device_path.c
@@ -110,17 +110,13 @@ int efi_dp_match(const struct efi_device_path *a,
/**
* efi_dp_shorten() - shorten device-path
*
- * We can have device paths that start with a USB WWID or a USB Class node,
- * and a few other cases which don't encode the full device path with bus
- * hierarchy:
+ * When creating a short boot option we want to use a device-path that is
+ * independent of the location where the block device is plugged in.
*
- * * MESSAGING:USB_WWID
- * * MESSAGING:USB_CLASS
- * * MEDIA:FILE_PATH
- * * MEDIA:HARD_DRIVE
- * * MESSAGING:URI
+ * UsbWwi() nodes contain a serial number, hard drive paths a partition
+ * UUID. Both should be unique.
*
- * See UEFI spec (section 3.1.2, about short-form device-paths)
+ * See UEFI spec, section 3.1.2 for "short-form device path".
*
* @dp: original device-path
* @Return: shortened device-path or NULL
@@ -128,12 +124,7 @@ int efi_dp_match(const struct efi_device_path *a,
struct efi_device_path *efi_dp_shorten(struct efi_device_path *dp)
{
while (dp) {
- /*
- * TODO: Add MESSAGING:USB_WWID and MESSAGING:URI..
- * in practice fallback.efi just uses MEDIA:HARD_DRIVE
- * so not sure when we would see these other cases.
- */
- if (EFI_DP_TYPE(dp, MESSAGING_DEVICE, MSG_USB) ||
+ if (EFI_DP_TYPE(dp, MESSAGING_DEVICE, MSG_USB_WWI) ||
EFI_DP_TYPE(dp, MEDIA_DEVICE, HARD_DRIVE_PATH) ||
EFI_DP_TYPE(dp, MEDIA_DEVICE, FILE_PATH))
return dp;
@@ -735,7 +726,7 @@ __maybe_unused static void *dp_fill(void *buf, struct udevice *dev)
#endif
#if defined(CONFIG_USB)
case UCLASS_MASS_STORAGE: {
- struct blk_desc *desc = desc = dev_get_uclass_plat(dev);
+ struct blk_desc *desc = dev_get_uclass_plat(dev);
struct efi_device_path_controller *dp =
dp_fill(buf, dev->parent);
diff --git a/test/cmd/fdt.c b/test/cmd/fdt.c
index 597fecb..7835da2 100644
--- a/test/cmd/fdt.c
+++ b/test/cmd/fdt.c
@@ -236,7 +236,6 @@ static int fdt_test_addr_resize(struct unit_test_state *uts)
/* ...quietly */
ut_assertok(run_commandf("fdt addr -q %08lx %zx", addr, sizeof(fdt) / 4));
- ut_assert_nextline("Working FDT set to %lx", addr);
ut_assertok(ut_check_console_end(uts));
/* We cannot easily provoke errors in fdt_open_into(), so ignore that */
diff --git a/test/common/Makefile b/test/common/Makefile
index cc918f6..a5ab10f 100644
--- a/test/common/Makefile
+++ b/test/common/Makefile
@@ -3,3 +3,4 @@ obj-y += cmd_ut_common.o
obj-$(CONFIG_AUTOBOOT) += test_autoboot.o
obj-$(CONFIG_CYCLIC) += cyclic.o
obj-$(CONFIG_EVENT) += event.o
+obj-y += cread.o
diff --git a/test/common/cread.c b/test/common/cread.c
new file mode 100644
index 0000000..2fdd29a
--- /dev/null
+++ b/test/common/cread.c
@@ -0,0 +1,93 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright 2023 Google LLC
+ */
+
+#include <common.h>
+#include <cli.h>
+#include <test/common.h>
+#include <test/test.h>
+#include <test/ut.h>
+
+static int cli_ch_test(struct unit_test_state *uts)
+{
+ struct cli_ch_state s_cch, *cch = &s_cch;
+
+ cli_ch_init(cch);
+
+ /* should be nothing to return at first */
+ ut_asserteq(0, cli_ch_process(cch, 0));
+
+ /* check normal entry */
+ ut_asserteq('a', cli_ch_process(cch, 'a'));
+ ut_asserteq('b', cli_ch_process(cch, 'b'));
+ ut_asserteq('c', cli_ch_process(cch, 'c'));
+ ut_asserteq(0, cli_ch_process(cch, 0));
+
+ /* send an invalid escape sequence */
+ ut_asserteq(0, cli_ch_process(cch, '\e'));
+ ut_asserteq(0, cli_ch_process(cch, '['));
+
+ /*
+ * with the next char it sees that the sequence is invalid, so starts
+ * emitting it
+ */
+ ut_asserteq('\e', cli_ch_process(cch, 'X'));
+
+ /* now we set 0 bytes to empty the buffer */
+ ut_asserteq('[', cli_ch_process(cch, 0));
+ ut_asserteq('X', cli_ch_process(cch, 0));
+ ut_asserteq(0, cli_ch_process(cch, 0));
+
+ /* things are normal again */
+ ut_asserteq('a', cli_ch_process(cch, 'a'));
+ ut_asserteq(0, cli_ch_process(cch, 0));
+
+ return 0;
+}
+COMMON_TEST(cli_ch_test, 0);
+
+static int cread_test(struct unit_test_state *uts)
+{
+ int duration;
+ ulong start;
+ char buf[10];
+
+ /*
+ * useful for debugging
+ *
+ * gd->flags &= ~GD_FLG_RECORD;
+ * print_buffer(0, buf, 1, 7, 0);
+ */
+
+ console_record_reset_enable();
+
+ /* simple input */
+ *buf = '\0';
+ ut_asserteq(4, console_in_puts("abc\n"));
+ ut_asserteq(3, cli_readline_into_buffer("-> ", buf, 1));
+ ut_asserteq_str("abc", buf);
+
+ /* try an escape sequence (cursor left after the 'c') */
+ *buf = '\0';
+ ut_asserteq(8, console_in_puts("abc\e[Dx\n"));
+ ut_asserteq(4, cli_readline_into_buffer("-> ", buf, 1));
+ ut_asserteq_str("abxc", buf);
+
+ /* invalid escape sequence */
+ *buf = '\0';
+ ut_asserteq(8, console_in_puts("abc\e[Xx\n"));
+ ut_asserteq(7, cli_readline_into_buffer("-> ", buf, 1));
+ ut_asserteq_str("abc\e[Xx", buf);
+
+ /* check timeout, should be between 1000 and 1050ms */
+ start = get_timer(0);
+ *buf = '\0';
+ ut_asserteq(-2, cli_readline_into_buffer("-> ", buf, 1));
+ duration = get_timer(start) - 1000;
+ ut_assert(duration >= 0);
+ ut_assert(duration < 50);
+
+ return 0;
+}
+COMMON_TEST(cread_test, 0);
diff --git a/test/py/tests/test_vbe_vpl.py b/test/py/tests/test_vbe_vpl.py
index d1c9d05..ed12d3a 100644
--- a/test/py/tests/test_vbe_vpl.py
+++ b/test/py/tests/test_vbe_vpl.py
@@ -15,6 +15,7 @@ def test_vbe_vpl(u_boot_console):
#cmd = [cons.config.build_dir + fname, '-v']
ram = os.path.join(cons.config.build_dir, 'ram.bin')
fdt = os.path.join(cons.config.build_dir, 'arch/sandbox/dts/test.dtb')
+ image_fname = os.path.join(cons.config.build_dir, 'image.bin')
# Enable firmware1 and the mmc that it uses. These are needed for the full
# VBE flow.
@@ -24,12 +25,13 @@ def test_vbe_vpl(u_boot_console):
cons, f'fdtput -t s {fdt} /bootstd/firmware1 status okay')
u_boot_utils.run_and_log(
cons, f'fdtput -t s {fdt} /mmc3 status okay')
+ u_boot_utils.run_and_log(
+ cons, f'fdtput -t s {fdt} /mmc3 filename {image_fname}')
# Remove any existing RAM file, so we don't have old data present
if os.path.exists(ram):
os.remove(ram)
- flags = ['-p', os.path.join(cons.config.build_dir, 'image.bin'), '-w',
- '-s', 'state.dtb']
+ flags = ['-p', image_fname, '-w', '-s', 'state.dtb']
cons.restart_uboot_with_flags(flags)
# Make sure that VBE was used in both VPL (to load SPL) and SPL (to load
diff --git a/test/py/tests/test_vboot.py b/test/py/tests/test_vboot.py
index e3e7ca4..04fa59f 100644
--- a/test/py/tests/test_vboot.py
+++ b/test/py/tests/test_vboot.py
@@ -30,6 +30,12 @@ For pre-load header verification:
- Check that image verification fails
Tests run with both SHA1 and SHA256 hashing.
+
+This also tests fdt_add_pubkey utility in the simple way:
+- Create DTB and FIT files
+- Add keys with fdt_add_pubkey to DTB
+- Sign FIT image
+- Check with fit_check_sign that keys properly added to DTB file
"""
import os
@@ -40,6 +46,41 @@ import u_boot_utils as util
import vboot_forge
import vboot_evil
+# Common helper functions
+def dtc(dts, cons, dtc_args, datadir, tmpdir, dtb):
+ """Run the device tree compiler to compile a .dts file
+
+ The output file will be the same as the input file but with a .dtb
+ extension.
+
+ Args:
+ dts: Device tree file to compile.
+ cons: U-Boot console.
+ dtc_args: DTC arguments.
+ datadir: Path to data directory.
+ tmpdir: Path to temp directory.
+ dtb: Resulting DTB file.
+ """
+ dtb = dts.replace('.dts', '.dtb')
+ util.run_and_log(cons, 'dtc %s %s%s -O dtb '
+ '-o %s%s' % (dtc_args, datadir, dts, tmpdir, dtb))
+
+def make_fit(its, cons, mkimage, dtc_args, datadir, fit):
+ """Make a new FIT from the .its source file.
+
+ This runs 'mkimage -f' to create a new FIT.
+
+ Args:
+ its: Filename containing .its source.
+ cons: U-Boot console.
+ mkimage: Path to mkimage utility.
+ dtc_args: DTC arguments.
+ datadir: Path to data directory.
+ fit: Resulting FIT file.
+ """
+ util.run_and_log(cons, [mkimage, '-D', dtc_args, '-f',
+ '%s%s' % (datadir, its), fit])
+
# Only run the full suite on a few combinations, since it doesn't add any more
# test coverage.
TESTDATA_IN = [
@@ -82,19 +123,6 @@ def test_vboot(u_boot_console, name, sha_algo, padding, sign_options, required,
The SHA1 and SHA256 tests are combined into a single test since the
key-generation process is quite slow and we want to avoid doing it twice.
"""
- def dtc(dts):
- """Run the device tree compiler to compile a .dts file
-
- The output file will be the same as the input file but with a .dtb
- extension.
-
- Args:
- dts: Device tree file to compile.
- """
- dtb = dts.replace('.dts', '.dtb')
- util.run_and_log(cons, 'dtc %s %s%s -O dtb '
- '-o %s%s' % (dtc_args, datadir, dts, tmpdir, dtb))
-
def dtc_options(dts, options):
"""Run the device tree compiler to compile a .dts file
@@ -152,17 +180,6 @@ def test_vboot(u_boot_console, name, sha_algo, padding, sign_options, required,
assert('sandbox: continuing, as we cannot run'
not in ''.join(output))
- def make_fit(its):
- """Make a new FIT from the .its source file.
-
- This runs 'mkimage -f' to create a new FIT.
-
- Args:
- its: Filename containing .its source.
- """
- util.run_and_log(cons, [mkimage, '-D', dtc_args, '-f',
- '%s%s' % (datadir, its), fit])
-
def sign_fit(sha_algo, options):
"""Sign the FIT
@@ -286,12 +303,12 @@ def test_vboot(u_boot_console, name, sha_algo, padding, sign_options, required,
# Compile our device tree files for kernel and U-Boot. These are
# regenerated here since mkimage will modify them (by adding a
# public key) below.
- dtc('sandbox-kernel.dts')
- dtc('sandbox-u-boot.dts')
+ dtc('sandbox-kernel.dts', cons, dtc_args, datadir, tmpdir, dtb)
+ dtc('sandbox-u-boot.dts', cons, dtc_args, datadir, tmpdir, dtb)
# Build the FIT, but don't sign anything yet
cons.log.action('%s: Test FIT with signed images' % sha_algo)
- make_fit('sign-images-%s%s.its' % (sha_algo, padding))
+ make_fit('sign-images-%s%s.its' % (sha_algo, padding), cons, mkimage, dtc_args, datadir, fit)
run_bootm(sha_algo, 'unsigned images', ' - OK' if algo_arg else 'dev-', True)
# Sign images with our dev keys
@@ -299,10 +316,10 @@ def test_vboot(u_boot_console, name, sha_algo, padding, sign_options, required,
run_bootm(sha_algo, 'signed images', 'dev+', True)
# Create a fresh .dtb without the public keys
- dtc('sandbox-u-boot.dts')
+ dtc('sandbox-u-boot.dts', cons, dtc_args, datadir, tmpdir, dtb)
cons.log.action('%s: Test FIT with signed configuration' % sha_algo)
- make_fit('sign-configs-%s%s.its' % (sha_algo, padding))
+ make_fit('sign-configs-%s%s.its' % (sha_algo, padding), cons, mkimage, dtc_args, datadir, fit)
run_bootm(sha_algo, 'unsigned config', '%s+ OK' % ('sha256' if algo_arg else sha_algo), True)
# Sign images with our dev keys
@@ -352,7 +369,7 @@ def test_vboot(u_boot_console, name, sha_algo, padding, sign_options, required,
run_bootm(sha_algo, 'evil kernel@', msg, False, efit)
# Create a new properly signed fit and replace header bytes
- make_fit('sign-configs-%s%s.its' % (sha_algo, padding))
+ make_fit('sign-configs-%s%s.its' % (sha_algo, padding), cons, mkimage, dtc_args, datadir, fit)
sign_fit(sha_algo, sign_options)
bcfg = u_boot_console.config.buildconfig
max_size = int(bcfg.get('config_fit_signature_max_size', 0x10000000), 0)
@@ -399,19 +416,19 @@ def test_vboot(u_boot_console, name, sha_algo, padding, sign_options, required,
# Compile our device tree files for kernel and U-Boot. These are
# regenerated here since mkimage will modify them (by adding a
# public key) below.
- dtc('sandbox-kernel.dts')
- dtc('sandbox-u-boot.dts')
+ dtc('sandbox-kernel.dts', cons, dtc_args, datadir, tmpdir, dtb)
+ dtc('sandbox-u-boot.dts', cons, dtc_args, datadir, tmpdir, dtb)
cons.log.action('%s: Test FIT with configs images' % sha_algo)
# Build the FIT with prod key (keys required) and sign it. This puts the
# signature into sandbox-u-boot.dtb, marked 'required'
- make_fit('sign-configs-%s%s-prod.its' % (sha_algo, padding))
+ make_fit('sign-configs-%s%s-prod.its' % (sha_algo, padding), cons, mkimage, dtc_args, datadir, fit)
sign_fit(sha_algo, sign_options)
# Build the FIT with dev key (keys NOT required). This adds the
# signature into sandbox-u-boot.dtb, NOT marked 'required'.
- make_fit('sign-configs-%s%s.its' % (sha_algo, padding))
+ make_fit('sign-configs-%s%s.its' % (sha_algo, padding), cons, mkimage, dtc_args, datadir, fit)
sign_fit_norequire(sha_algo, sign_options)
# So now sandbox-u-boot.dtb two signatures, for the prod and dev keys.
@@ -423,7 +440,7 @@ def test_vboot(u_boot_console, name, sha_algo, padding, sign_options, required,
# Build the FIT with dev key (keys required) and sign it. This puts the
# signature into sandbox-u-boot.dtb, marked 'required'.
- make_fit('sign-configs-%s%s.its' % (sha_algo, padding))
+ make_fit('sign-configs-%s%s.its' % (sha_algo, padding), cons, mkimage, dtc_args, datadir, fit)
sign_fit(sha_algo, sign_options)
# Set the required-mode policy to "any".
@@ -461,17 +478,17 @@ def test_vboot(u_boot_console, name, sha_algo, padding, sign_options, required,
# Compile our device tree files for kernel and U-Boot. These are
# regenerated here since mkimage will modify them (by adding a
# public key) below.
- dtc('sandbox-kernel.dts')
+ dtc('sandbox-kernel.dts', cons, dtc_args, datadir, tmpdir, dtb)
dtc_options('sandbox-u-boot-global%s.dts' % padding, '-p 1024')
# Build the FIT with dev key (keys NOT required). This adds the
# signature into sandbox-u-boot.dtb, NOT marked 'required'.
- make_fit('simple-images.its')
+ make_fit('simple-images.its', cons, mkimage, dtc_args, datadir, fit)
sign_fit_dtb(sha_algo, '', dtb)
# Build the dtb for binman that define the pre-load header
# with the global sigature.
- dtc('sandbox-binman%s.dts' % padding)
+ dtc('sandbox-binman%s.dts' % padding, cons, dtc_args, datadir, tmpdir, dtb)
# Run binman to create the final image with the not signed fit
# and the pre-load header that contains the global signature.
@@ -531,3 +548,96 @@ def test_vboot(u_boot_console, name, sha_algo, padding, sign_options, required,
# Go back to the original U-Boot with the correct dtb.
cons.config.dtb = old_dtb
cons.restart_uboot()
+
+
+TESTDATA_IN = [
+ ['sha1-basic', 'sha1', '', None, False],
+ ['sha1-pad', 'sha1', '', '-E -p 0x10000', False],
+ ['sha1-pss', 'sha1', '-pss', None, False],
+ ['sha1-pss-pad', 'sha1', '-pss', '-E -p 0x10000', False],
+ ['sha256-basic', 'sha256', '', None, False],
+ ['sha256-pad', 'sha256', '', '-E -p 0x10000', False],
+ ['sha256-pss', 'sha256', '-pss', None, False],
+ ['sha256-pss-pad', 'sha256', '-pss', '-E -p 0x10000', False],
+ ['sha256-pss-required', 'sha256', '-pss', None, False],
+ ['sha256-pss-pad-required', 'sha256', '-pss', '-E -p 0x10000', False],
+ ['sha384-basic', 'sha384', '', None, False],
+ ['sha384-pad', 'sha384', '', '-E -p 0x10000', False],
+ ['algo-arg', 'algo-arg', '', '-o sha256,rsa2048', True],
+ ['sha256-global-sign', 'sha256', '', '', False],
+ ['sha256-global-sign-pss', 'sha256', '-pss', '', False],
+]
+
+# Mark all but the first test as slow, so they are not run with '-k not slow'
+TESTDATA = [TESTDATA_IN[0]]
+TESTDATA += [pytest.param(*v, marks=pytest.mark.slow) for v in TESTDATA_IN[1:]]
+
+@pytest.mark.boardspec('sandbox')
+@pytest.mark.buildconfigspec('fit_signature')
+@pytest.mark.requiredtool('dtc')
+@pytest.mark.requiredtool('openssl')
+@pytest.mark.parametrize("name,sha_algo,padding,sign_options,algo_arg", TESTDATA)
+def test_fdt_add_pubkey(u_boot_console, name, sha_algo, padding, sign_options, algo_arg):
+ """Test fdt_add_pubkey utility with bunch of different algo options."""
+
+ def sign_fit(sha_algo, options):
+ """Sign the FIT
+
+ Signs the FIT and writes the signature into it.
+
+ Args:
+ sha_algo: Either 'sha1' or 'sha256', to select the algorithm to
+ use.
+ options: Options to provide to mkimage.
+ """
+ args = [mkimage, '-F', '-k', tmpdir, fit]
+ if options:
+ args += options.split(' ')
+ cons.log.action('%s: Sign images' % sha_algo)
+ util.run_and_log(cons, args)
+
+ def test_add_pubkey(sha_algo, padding, sign_options):
+ """Test fdt_add_pubkey utility with given hash algorithm and padding.
+
+ This function tests if fdt_add_pubkey utility may add public keys into dtb.
+
+ Args:
+ sha_algo: Either 'sha1' or 'sha256', to select the algorithm to use
+ padding: Either '' or '-pss', to select the padding to use for the
+ rsa signature algorithm.
+ sign_options: Options to mkimage when signing a fit image.
+ """
+
+ # Create a fresh .dtb without the public keys
+ dtc('sandbox-u-boot.dts', cons, dtc_args, datadir, tmpdir, dtb)
+
+ cons.log.action('%s: Test fdt_add_pubkey with signed configuration' % sha_algo)
+ # Then add the dev key via the fdt_add_pubkey tool
+ util.run_and_log(cons, [fdt_add_pubkey, '-a', '%s,%s' % ('sha256' if algo_arg else sha_algo, \
+ 'rsa3072' if sha_algo == 'sha384' else 'rsa2048'),
+ '-k', tmpdir, '-n', 'dev', '-r', 'conf', dtb])
+
+ make_fit('sign-configs-%s%s.its' % (sha_algo, padding), cons, mkimage, dtc_args, datadir, fit)
+
+ # Sign images with our dev keys
+ sign_fit(sha_algo, sign_options)
+
+ # Check with fit_check_sign that FIT is signed with key
+ util.run_and_log(cons, [fit_check_sign, '-f', fit, '-k', dtb])
+
+ cons = u_boot_console
+ tmpdir = os.path.join(cons.config.result_dir, name) + '/'
+ if not os.path.exists(tmpdir):
+ os.mkdir(tmpdir)
+ datadir = cons.config.source_dir + '/test/py/tests/vboot/'
+ fit = '%stest.fit' % tmpdir
+ mkimage = cons.config.build_dir + '/tools/mkimage'
+ binman = cons.config.source_dir + '/tools/binman/binman'
+ fit_check_sign = cons.config.build_dir + '/tools/fit_check_sign'
+ fdt_add_pubkey = cons.config.build_dir + '/tools/fdt_add_pubkey'
+ dtc_args = '-I dts -O dtb -i %s' % tmpdir
+ dtb = '%ssandbox-u-boot.dtb' % tmpdir
+
+ # keys created in test_vboot test
+
+ test_add_pubkey(sha_algo, padding, sign_options)
diff --git a/test/run b/test/run
index 93b556f..768b225 100755
--- a/test/run
+++ b/test/run
@@ -56,6 +56,11 @@ echo "${prompt}"
run_test "sandbox_noinst" ./test/py/test.py --bd sandbox_noinst --build ${para} \
-k 'test_ofplatdata or test_handoff or test_spl'
+# Run tests which require sandbox_vpl
+echo "${prompt}"
+run_test "sandbox_vpl" ./test/py/test.py --bd sandbox_vpl --build ${para} \
+ -k 'vpl or test_spl'
+
if [ -z "$tools_only" ]; then
# Run tests for the flat-device-tree version of sandbox. This is a special
# build which does not enable CONFIG_OF_LIVE for the live device tree, so we can
diff --git a/tools/buildman/toolchain.py b/tools/buildman/toolchain.py
index 241e8e6..0ecd845 100644
--- a/tools/buildman/toolchain.py
+++ b/tools/buildman/toolchain.py
@@ -421,7 +421,7 @@ class Toolchains:
Returns:
Resolved string
- >>> bsettings.Setup()
+ >>> bsettings.Setup(None)
>>> tcs = Toolchains()
>>> tcs.Add('fred', False)
>>> var_dict = {'oblique' : 'OBLIQUE', 'first' : 'fi${second}rst', \