diff options
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 @@ -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>; @@ -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) @@ -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', \ |