diff --git a/aarch64-chromebooks b/aarch64-chromebooks deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/arm-boards b/arm-boards deleted file mode 100644 index c07fc976f319d23d89ebb3596432fafb41c7a202..0000000000000000000000000000000000000000 --- a/arm-boards +++ /dev/null @@ -1,277 +0,0 @@ -A10-OLinuXino-Lime -A10s-OLinuXino-M -A13-OLinuXino -A13-OLinuXinoM -A20-Olimex-SOM-EVB -A20-OLinuXino-Lime -A20-OLinuXino-Lime2 -A20-OLinuXino_MICRO -am335x_evm -am57xx_evm -Ampe_A76 -apalis_imx6 -arndale -Auxtek-T003 -Auxtek-T004 -ba10_tv_box -Bananapi -bananapi_m1_plus -bananapi_m2_berry -Bananapi_m2m -bananapi_m2_plus_h3 -Bananapi_M2_Ultra -bananapi_m2_zero -Bananapro -chiliboard -CHIP -Chuwi_V7_CW0825 -clearfog -cm_fx6 -Colombus -colorfly_e708_q1 -CSQ_CS908 -Cubieboard -Cubieboard2 -Cubieboard4 -Cubietruck -Cubietruck_plus -db-mv784mp-gp -difrnce_dit4350 -dserve_dsrv9703c -evb-rk3229 -firefly-rk3288 -helios4 -Hummingbird_A31 -Hyundai_A7HD -i12-tvbox -icnova-a20-swac -inet1 -iNet_3F -iNet_3W -inet86dz -iNet_86VS -inet97fv2 -inet98v_rev2 -inet9f_rev03 -inet_q972 -Itead_Ibox_A20 -jesurun_q5 -jetson-tk1 -kc1 -Lamobo_R1 -libretech_all_h3_cc_h2_plus -Linksprite_pcDuino -Linksprite_pcDuino3 -Linksprite_pcDuino3_Nano -liteboard -marsboard -Marsboard_A10 -Mele_A1000 -Mele_A1000G_quad -Mele_I7 -Mele_M3 -Mele_M5 -Mele_M9 -Mini-X -mk802 -mk802_a10s -mk802ii -MK808C -MSI_Primo73 -MSI_Primo81 -mx6cuboxi -nanopi_m1 -nanopi_m1_plus -nanopi_neo -novena -odroid -odroid-xu3 -omap3_beagle -omap4_panda -omap5_uevm -Orangepi -orangepi_2 -orangepi_lite -Orangepi_mini -orangepi_one -orangepi_pc -orangepi_pc_plus -orangepi_plus -orangepi_plus2e -orangepi_r1 -orangepi_zero -origen -paz00 -polaroid_mid2809pxe04 -pov_protab2_ips9 -q8_a13_tablet -q8_a23_tablet_800x480 -q8_a33_tablet_1024x600 -q8_a33_tablet_800x480 -qemu_arm -r7-tv-dongle -riotboard -rock -rock2 -rpi_2 -rpi_3_32b -rpi_4_32b -Sinlinx_SinA31s -Sinovoip_BPI_M2 -Sinovoip_BPI_M3 -stih410-b2260 -sunxi_Gemei_G9 -tbs_a711 -tinker-rk3288 -trimslice -udoo -udoo_neo -usbarmory -UTOO_P66 -vexpress_ca15_tc2 -vexpress_ca9x4 -wandboard -warp -warp7 -Wexler_TAB7200 -Wits_Pro_A20_DKT -Yones_Toptech_BS1078_V2 -xilinx_zynq_virtA10-OLinuXino-Lime -A10s-OLinuXino-M -A13-OLinuXino -A13-OLinuXinoM -A20-Olimex-SOM-EVB -A20-OLinuXino-Lime -A20-OLinuXino-Lime2 -A20-OLinuXino_MICRO -am335x_evm -am57xx_evm -Ampe_A76 -apalis_imx6 -arndale -Auxtek-T003 -Auxtek-T004 -ba10_tv_box -Bananapi -bananapi_m1_plus -bananapi_m2_berry -Bananapi_m2m -bananapi_m2_plus_h3 -Bananapi_M2_Ultra -bananapi_m2_zero -Bananapro -chiliboard -CHIP -Chuwi_V7_CW0825 -clearfog -cm_fx6 -Colombus -colorfly_e708_q1 -CSQ_CS908 -Cubieboard -Cubieboard2 -Cubieboard4 -Cubietruck -Cubietruck_plus -db-mv784mp-gp -difrnce_dit4350 -dserve_dsrv9703c -evb-rk3229 -firefly-rk3288 -helios4 -Hummingbird_A31 -Hyundai_A7HD -i12-tvbox -icnova-a20-swac -inet1 -iNet_3F -iNet_3W -inet86dz -iNet_86VS -inet97fv2 -inet98v_rev2 -inet9f_rev03 -inet_q972 -Itead_Ibox_A20 -jesurun_q5 -jetson-tk1 -kc1 -Lamobo_R1 -libretech_all_h3_cc_h2_plus -Linksprite_pcDuino -Linksprite_pcDuino3 -Linksprite_pcDuino3_Nano -liteboard -marsboard -Marsboard_A10 -Mele_A1000 -Mele_A1000G_quad -Mele_I7 -Mele_M3 -Mele_M5 -Mele_M9 -Mini-X -mk802 -mk802_a10s -mk802ii -MK808C -MSI_Primo73 -MSI_Primo81 -mx6cuboxi -nanopi_m1 -nanopi_m1_plus -nanopi_neo -novena -odroid -odroid-xu3 -omap3_beagle -omap4_panda -omap5_uevm -Orangepi -orangepi_2 -orangepi_lite -Orangepi_mini -orangepi_one -orangepi_pc -orangepi_pc_plus -orangepi_plus -orangepi_plus2e -orangepi_r1 -orangepi_zero -origen -paz00 -polaroid_mid2809pxe04 -pov_protab2_ips9 -q8_a13_tablet -q8_a23_tablet_800x480 -q8_a33_tablet_1024x600 -q8_a33_tablet_800x480 -qemu_arm -r7-tv-dongle -riotboard -rock -rock2 -rpi_2 -rpi_3_32b -rpi_4_32b -Sinlinx_SinA31s -Sinovoip_BPI_M2 -Sinovoip_BPI_M3 -stih410-b2260 -sunxi_Gemei_G9 -tbs_a711 -tinker-rk3288 -trimslice -udoo -udoo_neo -usbarmory -UTOO_P66 -vexpress_ca15_tc2 -vexpress_ca9x4 -wandboard -warp -warp7 -Wexler_TAB7200 -Wits_Pro_A20_DKT -Yones_Toptech_BS1078_V2 -xilinx_zynq_virt \ No newline at end of file diff --git a/arm-chromebooks b/arm-chromebooks deleted file mode 100644 index 899c8230a5e7d917551420bc912082b17d90c2ae..0000000000000000000000000000000000000000 --- a/arm-chromebooks +++ /dev/null @@ -1,8 +0,0 @@ -chromebit_mickey_defconfig -chromebook_jerry_defconfig -chromebook_minnie_defconfig -nyan-big_defconfig -peach-pi_defconfig -peach-pit_defconfig -snow_defconfig -spring_defconfig diff --git a/backport-AllWinner-PineTab.patch b/backport-AllWinner-PineTab.patch deleted file mode 100644 index 04b68969580339bfc764834f21a44fc6b0684d00..0000000000000000000000000000000000000000 --- a/backport-AllWinner-PineTab.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 6bf15552c2b6becb48ce7732120e0ddb2078cb1a Mon Sep 17 00:00:00 2001 -From: Peter Robinson -Date: Tue, 14 Apr 2020 09:53:07 +0100 -Subject: [PATCH 9/9] initial pinetab support - -Signed-off-by: Peter Robinson ---- - configs/pinetab_defconfig | 26 ++++++++++++++++++++++++++ - 1 file changed, 26 insertions(+) - create mode 100644 configs/pinetab_defconfig - -diff --git a/configs/pinetab_defconfig b/configs/pinetab_defconfig -new file mode 100644 -index 0000000000..5b9620f3e5 ---- /dev/null -+++ b/configs/pinetab_defconfig -@@ -0,0 +1,26 @@ -+CONFIG_ARM=y -+CONFIG_ARCH_SUNXI=y -+CONFIG_SPL=y -+CONFIG_MACH_SUN50I=y -+CONFIG_SUNXI_DRAM_LPDDR3_STOCK=y -+CONFIG_DRAM_CLK=552 -+CONFIG_DRAM_ZQ=3881949 -+CONFIG_MMC_SUNXI_SLOT_EXTRA=2 -+CONFIG_R_I2C_ENABLE=y -+CONFIG_SPL_SPI_SUNXI=y -+# CONFIG_SYS_MALLOC_CLEAR_ON_INIT is not set -+CONFIG_USE_PREBOOT=y -+# CONFIG_SPL_DOS_PARTITION is not set -+# CONFIG_SPL_EFI_PARTITION is not set -+CONFIG_DEFAULT_DEVICE_TREE="sun50i-a64-pinetab" -+CONFIG_OF_LIST="sun50i-a64-pinetab" -+CONFIG_SYS_RELOC_GD_ENV_ADDR=y -+CONFIG_DM_REGULATOR=y -+CONFIG_DM_REGULATOR_FIXED=y -+CONFIG_DM_PWM=y -+CONFIG_PWM_SUNXI=y -+CONFIG_LED=y -+CONFIG_LED_GPIO=y -+CONFIG_USB_EHCI_HCD=y -+CONFIG_USB_OHCI_HCD=y -+CONFIG_SYS_USB_EVENT_POLL_VIA_INT_QUEUE=y --- -2.26.0 diff --git a/backport-CVE-2022-30767.patch b/backport-CVE-2022-30767.patch deleted file mode 100644 index 4f1a18f59d719d5db9fcdecd4fe64565dba7568f..0000000000000000000000000000000000000000 --- a/backport-CVE-2022-30767.patch +++ /dev/null @@ -1,44 +0,0 @@ -From bdbf7a05e26f3c5fd437c99e2755ffde186ddc80 Mon Sep 17 00:00:00 2001 -From: Andrea zi0Black Cappa -Date: Wed, 18 May 2022 16:30:08 +0000 -Subject: [PATCH] net: nfs: Fix CVE-2022-30767 (old CVE-2019-14196) - -This patch mitigates the vulnerability identified via CVE-2019-14196. - -The previous patch was bypassed/ineffective, and now the vulnerability -is identified via CVE-2022-30767. The patch removes the sanity check -introduced to mitigate CVE-2019-14196 since it's ineffective. -filefh3_length is changed to unsigned type integer, preventing negative -numbers from being used during comparison with positive values during -size sanity checks. - -Signed-off-by: Andrea zi0Black Cappa ---- - net/nfs.c | 4 +--- - 1 file changed, 1 insertion(+), 3 deletions(-) - -diff --git a/net/nfs.c b/net/nfs.c -index 3c01cebd96..9152ab742e 100644 ---- a/net/nfs.c -+++ b/net/nfs.c -@@ -52,7 +52,7 @@ static const ulong nfs_timeout = CONFIG_NFS_TIMEOUT; - - static char dirfh[NFS_FHSIZE]; /* NFSv2 / NFSv3 file handle of directory */ - static char filefh[NFS3_FHSIZE]; /* NFSv2 / NFSv3 file handle */ --static int filefh3_length; /* (variable) length of filefh when NFSv3 */ -+static unsigned int filefh3_length; /* (variable) length of filefh when NFSv3 */ - - static enum net_loop_state nfs_download_state; - static struct in_addr nfs_server_ip; -@@ -573,8 +573,6 @@ static int nfs_lookup_reply(uchar *pkt, unsigned len) - filefh3_length = ntohl(rpc_pkt.u.reply.data[1]); - if (filefh3_length > NFS3_FHSIZE) - filefh3_length = NFS3_FHSIZE; -- if (((uchar *)&(rpc_pkt.u.reply.data[0]) - (uchar *)(&rpc_pkt) + filefh3_length) > len) -- return -NFS_RPC_DROP; - memcpy(filefh, rpc_pkt.u.reply.data + 2, filefh3_length); - } - --- -GitLab - diff --git a/backport-CVE-2022-33967.patch b/backport-CVE-2022-33967.patch deleted file mode 100644 index ea30f9b7077bf0614170d1786407e23d6dcfcec8..0000000000000000000000000000000000000000 --- a/backport-CVE-2022-33967.patch +++ /dev/null @@ -1,52 +0,0 @@ -From e40e9a32dd411f444d6e2ed73c517ee584a386ae Mon Sep 17 00:00:00 2001 -From: Miquel Raynal -Date: Wed, 20 Jul 2022 09:18:20 +0000 -Subject: [PATCH] fs/squashfs: Use kcalloc when relevant -A crafted squashfs image could embed a huge number of empty metadata -blocks in order to make the amount of malloc()'d memory overflow and be -much smaller than expected. Because of this flaw, any random code -positioned at the right location in the squashfs image could be memcpy'd -from the squashfs structures into U-Boot code location while trying to -access the rearmost blocks, before being executed. - -In order to prevent this vulnerability from being exploited in eg. a -secure boot environment, let's add a check over the amount of data -that is going to be allocated. Such a check could look like: - -if (!elem_size || n > SIZE_MAX / elem_size) - return NULL; - -The right way to do it would be to enhance the calloc() implementation -but this is quite an impacting change for such a small fix. Another -solution would be to add the check before the malloc call in the -squashfs implementation, but this does not look right. So for now, let's -use the kcalloc() compatibility function fro... ---- - fs/squashfs/sqfs.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/fs/squashfs/sqfs.c b/fs/squashfs/sqfs.c -index 92ab8ac6..ef4b5836 100644 ---- a/fs/squashfs/sqfs.c -+++ b/fs/squashfs/sqfs.c -@@ -13,6 +13,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -725,7 +726,8 @@ static int sqfs_read_inode_table(unsigned char **inode_table) - goto free_itb; - } - -- *inode_table = malloc(metablks_count * SQFS_METADATA_BLOCK_SIZE); -+ *inode_table = kcalloc(metablks_count, SQFS_METADATA_BLOCK_SIZE, -+ GFP_KERNEL); - if (!*inode_table) { - ret = -ENOMEM; - goto free_itb; --- -2.33.0 - diff --git a/backport-CVE-2022-34835.patch b/backport-CVE-2022-34835.patch deleted file mode 100644 index 16ca6390156565105764355401291b6af9540c5e..0000000000000000000000000000000000000000 --- a/backport-CVE-2022-34835.patch +++ /dev/null @@ -1,118 +0,0 @@ -From 8f8c04bf1ebbd2f72f1643e7ad9617dafa6e5409 Mon Sep 17 00:00:00 2001 -From: Nicolas Iooss -Date: Fri, 10 Jun 2022 14:50:25 +0000 -Subject: [PATCH] i2c: fix stack buffer overflow vulnerability in i2c md - command - -When running "i2c md 0 0 80000100", the function do_i2c_md parses the -length into an unsigned int variable named length. The value is then -moved to a signed variable: - - int nbytes = length; - #define DISP_LINE_LEN 16 - int linebytes = (nbytes > DISP_LINE_LEN) ? DISP_LINE_LEN : nbytes; - ret = dm_i2c_read(dev, addr, linebuf, linebytes); - -On systems where integers are 32 bits wide, 0x80000100 is a negative -value to "nbytes > DISP_LINE_LEN" is false and linebytes gets assigned -0x80000100 instead of 16. - -The consequence is that the function which reads from the i2c device -(dm_i2c_read or i2c_read) is called with a 16-byte stack buffer to fill -but with a size parameter which is too large. In some cases, this could -trigger a crash. But with some i2c drivers, such as drivers/i2c/nx_i2c.c -(used with "nexell,s5pxx18-i2c" bus), the size is actually truncated to -a 16-bit integer. This is because function i2c_transfer expects an -unsigned short length. In such a case, an attacker who can control the -response of an i2c device can overwrite the return address of a function -and execute arbitrary code through Return-Oriented Programming. - -Fix this issue by using unsigned integers types in do_i2c_md. While at -it, make also alen unsigned, as signed sizes can cause vulnerabilities -when people forgot to check that they can be negative. - -Signed-off-by: Nicolas Iooss -Reviewed-by: Heiko Schocher ---- - cmd/i2c.c | 24 ++++++++++++------------ - 1 file changed, 12 insertions(+), 12 deletions(-) - -diff --git a/cmd/i2c.c b/cmd/i2c.c -index 9050b2b8d27a..bd04b14024be 100644 ---- a/cmd/i2c.c -+++ b/cmd/i2c.c -@@ -200,10 +200,10 @@ void i2c_init_board(void) - * - * Returns the address length. - */ --static uint get_alen(char *arg, int default_len) -+static uint get_alen(char *arg, uint default_len) - { -- int j; -- int alen; -+ uint j; -+ uint alen; - - alen = default_len; - for (j = 0; j < 8; j++) { -@@ -247,7 +247,7 @@ static int do_i2c_read(struct cmd_tbl *cmdtp, int flag, int argc, - { - uint chip; - uint devaddr, length; -- int alen; -+ uint alen; - u_char *memaddr; - int ret; - #if CONFIG_IS_ENABLED(DM_I2C) -@@ -301,7 +301,7 @@ static int do_i2c_write(struct cmd_tbl *cmdtp, int flag, int argc, - { - uint chip; - uint devaddr, length; -- int alen; -+ uint alen; - u_char *memaddr; - int ret; - #if CONFIG_IS_ENABLED(DM_I2C) -@@ -469,8 +469,8 @@ static int do_i2c_md(struct cmd_tbl *cmdtp, int flag, int argc, - { - uint chip; - uint addr, length; -- int alen; -- int j, nbytes, linebytes; -+ uint alen; -+ uint j, nbytes, linebytes; - int ret; - #if CONFIG_IS_ENABLED(DM_I2C) - struct udevice *dev; -@@ -589,9 +589,9 @@ static int do_i2c_mw(struct cmd_tbl *cmdtp, int flag, int argc, - { - uint chip; - ulong addr; -- int alen; -+ uint alen; - uchar byte; -- int count; -+ uint count; - int ret; - #if CONFIG_IS_ENABLED(DM_I2C) - struct udevice *dev; -@@ -676,8 +676,8 @@ static int do_i2c_crc(struct cmd_tbl *cmdtp, int flag, int argc, - { - uint chip; - ulong addr; -- int alen; -- int count; -+ uint alen; -+ uint count; - uchar byte; - ulong crc; - ulong err; -@@ -985,7 +985,7 @@ static int do_i2c_loop(struct cmd_tbl *cmdtp, int flag, int argc, - char *const argv[]) - { - uint chip; -- int alen; -+ uint alen; - uint addr; - uint length; - u_char bytes[16]; \ No newline at end of file diff --git a/backport-Provide-a-fallback-to-smbios-tables.patch b/backport-Provide-a-fallback-to-smbios-tables.patch new file mode 100644 index 0000000000000000000000000000000000000000..0a58f2684c719ca6468e4fed43282fe50eedeeda --- /dev/null +++ b/backport-Provide-a-fallback-to-smbios-tables.patch @@ -0,0 +1,686 @@ +From patchwork Thu Dec 7 09:18:49 2023 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +X-Patchwork-Submitter: Ilias Apalodimas +X-Patchwork-Id: 1873089 +Return-Path: +X-Original-To: incoming@patchwork.ozlabs.org +Delivered-To: patchwork-incoming@legolas.ozlabs.org +Authentication-Results: legolas.ozlabs.org; + dkim=pass (2048-bit key; + unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256 + header.s=google header.b=SyQQL6ZG; + dkim-atps=neutral +Authentication-Results: legolas.ozlabs.org; + spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de + (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; + envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) +Received: from phobos.denx.de (phobos.denx.de + [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) + (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) + key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) + (No client certificate requested) + by legolas.ozlabs.org (Postfix) with ESMTPS id 4Sm7xz1DLXz23nD + for ; Thu, 7 Dec 2023 20:19:19 +1100 (AEDT) +Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) + by phobos.denx.de (Postfix) with ESMTP id 83BF287243; + Thu, 7 Dec 2023 10:19:05 +0100 (CET) +Authentication-Results: phobos.denx.de; + dmarc=pass (p=none dis=none) header.from=linaro.org +Authentication-Results: phobos.denx.de; + spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de +Authentication-Results: phobos.denx.de; + dkim=pass (2048-bit key; + unprotected) header.d=linaro.org header.i=@linaro.org header.b="SyQQL6ZG"; + dkim-atps=neutral +Received: by phobos.denx.de (Postfix, from userid 109) + id 46C3C87243; Thu, 7 Dec 2023 10:19:04 +0100 (CET) +X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de +X-Spam-Level: +X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, + DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, + T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 +Received: from mail-wm1-x330.google.com (mail-wm1-x330.google.com + [IPv6:2a00:1450:4864:20::330]) + (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) + (No client certificate requested) + by phobos.denx.de (Postfix) with ESMTPS id 21B8586FFE + for ; Thu, 7 Dec 2023 10:19:02 +0100 (CET) +Authentication-Results: phobos.denx.de; + dmarc=pass (p=none dis=none) header.from=linaro.org +Authentication-Results: phobos.denx.de; + spf=pass smtp.mailfrom=ilias.apalodimas@linaro.org +Received: by mail-wm1-x330.google.com with SMTP id + 5b1f17b1804b1-40c2c65e6aaso1041145e9.2 + for ; Thu, 07 Dec 2023 01:19:02 -0800 (PST) +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; + d=linaro.org; s=google; t=1701940741; x=1702545541; darn=lists.denx.de; + h=content-transfer-encoding:mime-version:references:in-reply-to + :message-id:date:subject:cc:to:from:from:to:cc:subject:date + :message-id:reply-to; + bh=vcf8Uy8SIKdN9TXuCeQubka7IJIfrvGMGj1JoUebFs0=; + b=SyQQL6ZGyEFpFFqauSbHRSSNY+KOw9ohESTeXyy7RkWEEIFaK7yPwRRy9NZX+DJLAJ + ECaT3Bchk61s+E1ZsuxrqdlxEYWDULw+4O2hm22gVZjL5L6r4+NwNgCHwzYW/bcro87o + KEGRF7CXG50v6mvrjAOHoy2LbojZLR9d7fjO4gmGtihdnTMOW1cjtrX/3Seiy99QoTK6 + 5Hs119W/hO0/5AE1VVSiIxV1Xx+qYcAHvQqcEEkBCKR2MpHTauUEonUf1LC5LKK2gKG5 + UEzq7XLrPki8hih4EcWsoctpdPp4kBtvpVSSshji9yxDX3EXKzcfA8xyqrB+5qKJU100 + zZ7A== +X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; + d=1e100.net; s=20230601; t=1701940741; x=1702545541; + h=content-transfer-encoding:mime-version:references:in-reply-to + :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc + :subject:date:message-id:reply-to; + bh=vcf8Uy8SIKdN9TXuCeQubka7IJIfrvGMGj1JoUebFs0=; + b=L6Ejctx8u+W0IeEi5FfC1q0ah2NYKTScSheLqomwMY3Q4/BPiEUP7KUarxUKsRwI/3 + yP4rTVAXqlGbT6kFKq3jrxXlRS4HIRZxtFbgHZEKuBnXpkHCQpvQwKUcYY9QkbfdZEir + 5YYfONEv2yTHHfoiBZiVmcPARIQ5+2ra+k493og2Bm0Hk5dVWyaHn/YY6Y+FCWH7ZYn0 + Eq1M9Ng8YB3oMx63KwV9XHBURccH8UdCqwsNDvk2gWLKdSvrjlFD7ExiySd90+i9+6vN + CMLoNESSYj2K9qW/sxbIDgUv1JwYCWgJrDejTzilfagawcPlKY2XtTnOlUsRryYrsPoq + RbZg== +X-Gm-Message-State: AOJu0YxG7g4q8NdX+N/0Mp5YNkHEVHntPyakSqHCtdqDzgaRcQCbtF0q + 2APTVIQc7yNsT16/19bvkV1NRw3x7lZmC4YcT+s= +X-Google-Smtp-Source: + AGHT+IFwnHtGX5IWm5lG5rRTsz6nU13lqUMnEUb8xEq/mngZuRtpzcNdrO7fNaBiIDDQLuKd+Y07Tw== +X-Received: by 2002:a05:600c:2184:b0:40b:dd1f:6dd1 with SMTP id + e4-20020a05600c218400b0040bdd1f6dd1mr1312043wme.240.1701940741617; + Thu, 07 Dec 2023 01:19:01 -0800 (PST) +Received: from localhost.localdomain (ppp046103111243.access.hol.gr. + [46.103.111.243]) by smtp.gmail.com with ESMTPSA id + u21-20020a05600c139500b00405d9a950a2sm1299003wmf.28.2023.12.07.01.19.00 + (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); + Thu, 07 Dec 2023 01:19:01 -0800 (PST) +From: Ilias Apalodimas +To: trini@konsulko.com, + sjg@chromium.org +Cc: sean.anderson@seco.com, neil.armstrong@linaro.org, + heinrich.schuchardt@canonical.com, mark.kettenis@xs4all.nl, + Ilias Apalodimas , u-boot@lists.denx.de +Subject: [PATCH 1/2 v3] smbios: Simplify reporting of unknown values +Date: Thu, 7 Dec 2023 11:18:49 +0200 +Message-Id: <20231207091850.17776-2-ilias.apalodimas@linaro.org> +X-Mailer: git-send-email 2.40.1 +In-Reply-To: <20231207091850.17776-1-ilias.apalodimas@linaro.org> +References: <20231207091850.17776-1-ilias.apalodimas@linaro.org> +MIME-Version: 1.0 +X-BeenThere: u-boot@lists.denx.de +X-Mailman-Version: 2.1.39 +Precedence: list +List-Id: U-Boot discussion +List-Unsubscribe: , + +List-Archive: +List-Post: +List-Help: +List-Subscribe: , + +Errors-To: u-boot-bounces@lists.denx.de +Sender: "U-Boot" +X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de +X-Virus-Status: Clean + +If a value is not valid during the DT or SYSINFO parsing, we explicitly +set that to "Unknown Product" and "Unknown" for the product and +manufacturer respectively. It's cleaner if we move the checks insisde +smbios_add_prop_si() and provide an alternative string in case the +primary is NULL or empty + +pre-patch dmidecode + +Handle 0x0001, DMI type 1, 27 bytes +System Information + Manufacturer: Unknown + Product Name: Unknown Product + Version: Not Specified + Serial Number: Not Specified + UUID: Not Settable + Wake-up Type: Reserved + SKU Number: Not Specified + Family: Not Specified + +[...] + +post-patch dmidecode: + +Handle 0x0001, DMI type 1, 27 bytes +System Information + Manufacturer: Unknown + Product Name: Unknown + Version: Unknown + Serial Number: Unknown + UUID: Not Settable + Wake-up Type: Reserved + SKU Number: Unknown + Family: Unknown +[...] + +While at it make smbios_add_prop_si() add a string directly if the prop +node is NULL and replace smbios_add_string() calls with +smbios_add_prop_si(ctx, NULL, ....) + +Signed-off-by: Ilias Apalodimas +--- +Changes since v2: +- refactor even more code and remove the smbios_add_string calls from the + main code. Instead use smbios_add_prop() foir everything and add a + default value, in case the parsed one is NULL or emtpy +Changes since v1: +- None + + lib/smbios.c | 73 +++++++++++++++++++++++++--------------------------- + 1 file changed, 35 insertions(+), 38 deletions(-) + +-- +2.40.1 + +diff --git a/lib/smbios.c b/lib/smbios.c +index d7f4999e8b2a..444aa245a273 100644 +--- a/lib/smbios.c ++++ b/lib/smbios.c +@@ -102,9 +102,6 @@ static int smbios_add_string(struct smbios_ctx *ctx, const char *str) + int i = 1; + char *p = ctx->eos; + +- if (!*str) +- str = "Unknown"; +- + for (;;) { + if (!*p) { + ctx->last_str = p; +@@ -134,11 +131,18 @@ static int smbios_add_string(struct smbios_ctx *ctx, const char *str) + * + * @ctx: context for writing the tables + * @prop: property to write ++ * @dval: Default value to use if the string is not found or is empty + * Return: 0 if not found, else SMBIOS string number (1 or more) + */ + static int smbios_add_prop_si(struct smbios_ctx *ctx, const char *prop, +- int sysinfo_id) ++ int sysinfo_id, const char *dval) + { ++ if (!dval || !*dval) ++ dval = "Unknown"; ++ ++ if (!prop) ++ return smbios_add_string(ctx, dval); ++ + if (sysinfo_id && ctx->dev) { + char val[SMBIOS_STR_MAX]; + int ret; +@@ -151,8 +155,8 @@ static int smbios_add_prop_si(struct smbios_ctx *ctx, const char *prop, + const char *str; + + str = ofnode_read_string(ctx->node, prop); +- if (str) +- return smbios_add_string(ctx, str); ++ ++ return smbios_add_string(ctx, str ? str : dval); + } + + return 0; +@@ -161,12 +165,15 @@ static int smbios_add_prop_si(struct smbios_ctx *ctx, const char *prop, + /** + * smbios_add_prop() - Add a property from the devicetree + * +- * @prop: property to write ++ * @prop: property to write. The default string will be written if ++ * prop is NULL ++ * @dval: Default value to use if the string is not found or is empty + * Return: 0 if not found, else SMBIOS string number (1 or more) + */ +-static int smbios_add_prop(struct smbios_ctx *ctx, const char *prop) ++static int smbios_add_prop(struct smbios_ctx *ctx, const char *prop, ++ const char *dval) + { +- return smbios_add_prop_si(ctx, prop, SYSINFO_ID_NONE); ++ return smbios_add_prop_si(ctx, prop, SYSINFO_ID_NONE, dval); + } + + static void smbios_set_eos(struct smbios_ctx *ctx, char *eos) +@@ -228,11 +235,9 @@ static int smbios_write_type0(ulong *current, int handle, + memset(t, 0, sizeof(struct smbios_type0)); + fill_smbios_header(t, SMBIOS_BIOS_INFORMATION, len, handle); + smbios_set_eos(ctx, t->eos); +- t->vendor = smbios_add_string(ctx, "U-Boot"); ++ t->vendor = smbios_add_prop(ctx, NULL, "U-Boot"); + +- t->bios_ver = smbios_add_prop(ctx, "version"); +- if (!t->bios_ver) +- t->bios_ver = smbios_add_string(ctx, PLAIN_VERSION); ++ t->bios_ver = smbios_add_prop(ctx, "version", PLAIN_VERSION); + if (t->bios_ver) + gd->smbios_version = ctx->last_str; + log_debug("smbios_version = %p: '%s'\n", gd->smbios_version, +@@ -241,7 +246,7 @@ static int smbios_write_type0(ulong *current, int handle, + print_buffer((ulong)gd->smbios_version, gd->smbios_version, + 1, strlen(gd->smbios_version) + 1, 0); + #endif +- t->bios_release_date = smbios_add_string(ctx, U_BOOT_DMI_DATE); ++ t->bios_release_date = smbios_add_prop(ctx, NULL, U_BOOT_DMI_DATE); + #ifdef CONFIG_ROM_SIZE + t->bios_rom_size = (CONFIG_ROM_SIZE / 65536) - 1; + #endif +@@ -280,22 +285,19 @@ static int smbios_write_type1(ulong *current, int handle, + memset(t, 0, sizeof(struct smbios_type1)); + fill_smbios_header(t, SMBIOS_SYSTEM_INFORMATION, len, handle); + smbios_set_eos(ctx, t->eos); +- t->manufacturer = smbios_add_prop(ctx, "manufacturer"); +- if (!t->manufacturer) +- t->manufacturer = smbios_add_string(ctx, "Unknown"); +- t->product_name = smbios_add_prop(ctx, "product"); +- if (!t->product_name) +- t->product_name = smbios_add_string(ctx, "Unknown Product"); ++ t->manufacturer = smbios_add_prop(ctx, "manufacturer", "Unknown"); ++ t->product_name = smbios_add_prop(ctx, "product", "Unknown"); + t->version = smbios_add_prop_si(ctx, "version", +- SYSINFO_ID_SMBIOS_SYSTEM_VERSION); ++ SYSINFO_ID_SMBIOS_SYSTEM_VERSION, ++ "Unknown"); + if (serial_str) { +- t->serial_number = smbios_add_string(ctx, serial_str); ++ t->serial_number = smbios_add_prop(ctx, NULL, serial_str); + strncpy((char *)t->uuid, serial_str, sizeof(t->uuid)); + } else { +- t->serial_number = smbios_add_prop(ctx, "serial"); ++ t->serial_number = smbios_add_prop(ctx, "serial", "Unknown"); + } +- t->sku_number = smbios_add_prop(ctx, "sku"); +- t->family = smbios_add_prop(ctx, "family"); ++ t->sku_number = smbios_add_prop(ctx, "sku", "Unknown"); ++ t->family = smbios_add_prop(ctx, "family", "Unknown"); + + len = t->length + smbios_string_table_len(ctx); + *current += len; +@@ -314,15 +316,12 @@ static int smbios_write_type2(ulong *current, int handle, + memset(t, 0, sizeof(struct smbios_type2)); + fill_smbios_header(t, SMBIOS_BOARD_INFORMATION, len, handle); + smbios_set_eos(ctx, t->eos); +- t->manufacturer = smbios_add_prop(ctx, "manufacturer"); +- if (!t->manufacturer) +- t->manufacturer = smbios_add_string(ctx, "Unknown"); +- t->product_name = smbios_add_prop(ctx, "product"); +- if (!t->product_name) +- t->product_name = smbios_add_string(ctx, "Unknown Product"); ++ t->manufacturer = smbios_add_prop(ctx, "manufacturer", "Unknown"); ++ t->product_name = smbios_add_prop(ctx, "product", "Unknown"); + t->version = smbios_add_prop_si(ctx, "version", +- SYSINFO_ID_SMBIOS_BASEBOARD_VERSION); +- t->asset_tag_number = smbios_add_prop(ctx, "asset-tag"); ++ SYSINFO_ID_SMBIOS_BASEBOARD_VERSION, ++ "Unknown"); ++ t->asset_tag_number = smbios_add_prop(ctx, "asset-tag", "Unknown"); + t->feature_flags = SMBIOS_BOARD_FEATURE_HOSTING; + t->board_type = SMBIOS_BOARD_MOTHERBOARD; + +@@ -343,9 +342,7 @@ static int smbios_write_type3(ulong *current, int handle, + memset(t, 0, sizeof(struct smbios_type3)); + fill_smbios_header(t, SMBIOS_SYSTEM_ENCLOSURE, len, handle); + smbios_set_eos(ctx, t->eos); +- t->manufacturer = smbios_add_prop(ctx, "manufacturer"); +- if (!t->manufacturer) +- t->manufacturer = smbios_add_string(ctx, "Unknown"); ++ t->manufacturer = smbios_add_prop(ctx, "manufacturer", "Unknown"); + t->chassis_type = SMBIOS_ENCLOSURE_DESKTOP; + t->bootup_state = SMBIOS_STATE_SAFE; + t->power_supply_state = SMBIOS_STATE_SAFE; +@@ -388,8 +385,8 @@ static void smbios_write_type4_dm(struct smbios_type4 *t, + #endif + + t->processor_family = processor_family; +- t->processor_manufacturer = smbios_add_string(ctx, vendor); +- t->processor_version = smbios_add_string(ctx, name); ++ t->processor_manufacturer = smbios_add_prop(ctx, NULL, vendor); ++ t->processor_version = smbios_add_prop(ctx, NULL, name); + } + + static int smbios_write_type4(ulong *current, int handle, + +From patchwork Thu Dec 7 09:18:50 2023 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +X-Patchwork-Submitter: Ilias Apalodimas +X-Patchwork-Id: 1873090 +Return-Path: +X-Original-To: incoming@patchwork.ozlabs.org +Delivered-To: patchwork-incoming@legolas.ozlabs.org +Authentication-Results: legolas.ozlabs.org; + dkim=pass (2048-bit key; + unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256 + header.s=google header.b=KcFhbOkM; + dkim-atps=neutral +Authentication-Results: legolas.ozlabs.org; + spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de + (client-ip=85.214.62.61; helo=phobos.denx.de; + envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) +Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) + (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) + key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) + (No client certificate requested) + by legolas.ozlabs.org (Postfix) with ESMTPS id 4Sm7yF71l9z23nD + for ; Thu, 7 Dec 2023 20:19:33 +1100 (AEDT) +Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) + by phobos.denx.de (Postfix) with ESMTP id 7D6CB87483; + Thu, 7 Dec 2023 10:19:07 +0100 (CET) +Authentication-Results: phobos.denx.de; + dmarc=pass (p=none dis=none) header.from=linaro.org +Authentication-Results: phobos.denx.de; + spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de +Authentication-Results: phobos.denx.de; + dkim=pass (2048-bit key; + unprotected) header.d=linaro.org header.i=@linaro.org header.b="KcFhbOkM"; + dkim-atps=neutral +Received: by phobos.denx.de (Postfix, from userid 109) + id B1E298745E; Thu, 7 Dec 2023 10:19:05 +0100 (CET) +X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de +X-Spam-Level: +X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, + DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, + T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 +Received: from mail-wr1-x433.google.com (mail-wr1-x433.google.com + [IPv6:2a00:1450:4864:20::433]) + (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) + (No client certificate requested) + by phobos.denx.de (Postfix) with ESMTPS id 792A8871BB + for ; Thu, 7 Dec 2023 10:19:03 +0100 (CET) +Authentication-Results: phobos.denx.de; + dmarc=pass (p=none dis=none) header.from=linaro.org +Authentication-Results: phobos.denx.de; + spf=pass smtp.mailfrom=ilias.apalodimas@linaro.org +Received: by mail-wr1-x433.google.com with SMTP id + ffacd0b85a97d-3334a701cbbso717814f8f.0 + for ; Thu, 07 Dec 2023 01:19:03 -0800 (PST) +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; + d=linaro.org; s=google; t=1701940743; x=1702545543; darn=lists.denx.de; + h=content-transfer-encoding:mime-version:references:in-reply-to + :message-id:date:subject:cc:to:from:from:to:cc:subject:date + :message-id:reply-to; + bh=JIRbBgzEcdaHWJ7fVa5JIsDJda65F2tSuL1aji2tJ5U=; + b=KcFhbOkMkvXbThdeAeI92+uSdN5LvKdwae+36Z/jz0Hg0yPDs5v8UqeDt2d+NaSlh9 + GERy8kIMCopTcJ13FoUM8Ok4PBSMRSDxbJo4lLaGIbddw7hcit4uxhJfTAL8zKxnboMU + YBZPC/E2NjWklmJx6p4zmLeXS5IzncTaDE9z2XFMRGrJ/KLqpTvwOp/nf57jP/kdIxpe + Q7vWAhVY8gC19ogSD41RB4ixA0HefI6xKq6fAl2GwvRlOvCEGAcVdpbl8aj5R8qEOSVT + BsuqzbDXHlQI6L9Y++Yqe89LcKMRoAWqHrgOuO3eBwnEp2jjjzV8G24mTFD+4wso1ERo + mIkQ== +X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; + d=1e100.net; s=20230601; t=1701940743; x=1702545543; + h=content-transfer-encoding:mime-version:references:in-reply-to + :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc + :subject:date:message-id:reply-to; + bh=JIRbBgzEcdaHWJ7fVa5JIsDJda65F2tSuL1aji2tJ5U=; + b=pee1V3/z6lW4enMw0ueHvBJJXGhNLq7KccXmY4QkXfVRLXGBOedbBwQH1KXDxj/gJs + RZ/KhsEvPN4qeqrqpeOnQoDBQs3QarjlsMHmlhnlBZMpgPKTJyg5MEpZPAlnfqZJkd4A + vMMYc1fZ+alT5gfZjdzpLypC2sOj9yC3ktb8ZYXQGQzN7yCYrQnBHgiYn3vDDaHMaQNH + n73RxiQNWJs9Ekow2hxk4l2FDpvlwuiFr9y+dnuzo5TvpbgaDbj64tcqxalnusBw3jKC + fE6r5cob553rh/ZM/bVJD/PIXP+LOSUHyiqJG+7KpEpSAY984EIHkKFRRbLHSIuwBAK+ + wTIw== +X-Gm-Message-State: AOJu0YwQcpf2rvKZHAPWsPT7fH7x3sa+mhF5kDJ557Oe9zwmQc4v6NzO + ZFEgE8KlljYnqibJKd2JdRCP6A== +X-Google-Smtp-Source: + AGHT+IEfJolrJ5g6Qgn465DsdBpMZMW+cn6kVgLvehQIXNT7VcXYfkBvC8Hf5zXnl7Q5Yto7bS2tOg== +X-Received: by 2002:a05:600c:d5:b0:40b:5e59:99c6 with SMTP id + u21-20020a05600c00d500b0040b5e5999c6mr940484wmm.230.1701940742953; + Thu, 07 Dec 2023 01:19:02 -0800 (PST) +Received: from localhost.localdomain (ppp046103111243.access.hol.gr. + [46.103.111.243]) by smtp.gmail.com with ESMTPSA id + u21-20020a05600c139500b00405d9a950a2sm1299003wmf.28.2023.12.07.01.19.01 + (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); + Thu, 07 Dec 2023 01:19:02 -0800 (PST) +From: Ilias Apalodimas +To: trini@konsulko.com, + sjg@chromium.org +Cc: sean.anderson@seco.com, neil.armstrong@linaro.org, + heinrich.schuchardt@canonical.com, mark.kettenis@xs4all.nl, + Ilias Apalodimas , u-boot@lists.denx.de +Subject: [PATCH 2/2 v3] smbios: Fallback to the default DT if sysinfo nodes + are missing +Date: Thu, 7 Dec 2023 11:18:50 +0200 +Message-Id: <20231207091850.17776-3-ilias.apalodimas@linaro.org> +X-Mailer: git-send-email 2.40.1 +In-Reply-To: <20231207091850.17776-1-ilias.apalodimas@linaro.org> +References: <20231207091850.17776-1-ilias.apalodimas@linaro.org> +MIME-Version: 1.0 +X-BeenThere: u-boot@lists.denx.de +X-Mailman-Version: 2.1.39 +Precedence: list +List-Id: U-Boot discussion +List-Unsubscribe: , + +List-Archive: +List-Post: +List-Help: +List-Subscribe: , + +Errors-To: u-boot-bounces@lists.denx.de +Sender: "U-Boot" +X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de +X-Virus-Status: Clean + +In order to fill in the SMBIOS tables U-Boot currently relies on a +"u-boot,sysinfo-smbios" compatible node. This is fine for the boards +that already include such nodes. However with some recent EFI changes, +the majority of boards can boot up distros, which usually rely on +things like dmidecode etc for their reporting. For boards that +lack this special node the SMBIOS output looks like: + +System Information + Manufacturer: Unknown + Product Name: Unknown + Version: Unknown + Serial Number: Unknown + UUID: Not Settable + Wake-up Type: Reserved + SKU Number: Unknown + Family: Unknown + +This looks problematic since most of the info are "Unknown". The DT spec +specifies standard properties containing relevant information like +'model' and 'compatible' for which the suggested format is +. Unfortunately the 'model' string found in DTs is +usually lacking the manufacturer so we can't use it for both +'Manufacturer' and 'Product Name' SMBIOS entries reliably. + +So let's add a last resort to our current smbios parsing. If none of +the sysinfo properties are found, scan for those information in the +root node of the device tree. Use the 'model' to fill the 'Product +Name' and the first value of 'compatible' for the 'Manufacturer', since +that always contains one. + +pre-patch: +Handle 0x0001, DMI type 1, 27 bytes +System Information + Manufacturer: Unknown + Product Name: Unknown + Version: Unknown + Serial Number: 100000000bb24ceb + UUID: 30303031-3030-3030-3061-613234636435 + Wake-up Type: Reserved + SKU Number: Unknown + Family: Unknown +[...] + +and post patch: +Handle 0x0001, DMI type 1, 27 bytes +System Information + Manufacturer: raspberrypi + Product Name: Raspberry Pi 4 Model B Rev 1.1 + Version: Unknown + Serial Number: 100000000bb24ceb + UUID: 30303031-3030-3030-3061-613234636435 + Wake-up Type: Reserved + SKU Number: Unknown + Family: Unknown +[...] + +Signed-off-by: Ilias Apalodimas +--- +Simon, I'll work with tou on the refactoring you wanted and +remove the EFI requirement of SMBIOS in !x86 platforms. +Since this code has no tests, I'll add some once the refactoring +is done + +Changes since v2: +- Spelling mistakes +- rebase on top of patch #1 changes +Changes since v1: +- Tokenize the DT node entry and use the appropriate value instead of + the entire string +- Removed Peters tested/reviewed-by tags due to the above + lib/smbios.c | 94 +++++++++++++++++++++++++++++++++++++++++++++++++--- + 1 file changed, 89 insertions(+), 5 deletions(-) + +-- +2.40.1 + +diff --git a/lib/smbios.c b/lib/smbios.c +index 444aa245a273..3f0e1d529537 100644 +--- a/lib/smbios.c ++++ b/lib/smbios.c +@@ -9,11 +9,14 @@ + #include + #include + #include ++#include + #include + #include + #include + #include + #include ++#include ++#include + #ifdef CONFIG_CPU + #include + #include +@@ -43,6 +46,25 @@ + + DECLARE_GLOBAL_DATA_PTR; + ++/** ++ * struct map_sysinfo - Mapping of sysinfo strings to DT ++ * ++ * @sysinfo_str: sysinfo string ++ * @dt_str: DT string ++ * @max: Max index of the tokenized string to pick. Counting starts from 0 ++ * ++ */ ++struct map_sysinfo { ++ const char *sysinfo_str; ++ const char *dt_str; ++ int max; ++}; ++ ++static const struct map_sysinfo sysinfo_to_dt[] = { ++ { .sysinfo_str = "product", .dt_str = "model", 2 }, ++ { .sysinfo_str = "manufacturer", .dt_str = "compatible", 1 }, ++}; ++ + /** + * struct smbios_ctx - context for writing SMBIOS tables + * +@@ -87,6 +109,18 @@ struct smbios_write_method { + const char *subnode_name; + }; + ++static const struct map_sysinfo *convert_sysinfo_to_dt(const char *sysinfo_str) ++{ ++ int i; ++ ++ for (i = 0; i < ARRAY_SIZE(sysinfo_to_dt); i++) { ++ if (!strcmp(sysinfo_str, sysinfo_to_dt[i].sysinfo_str)) ++ return &sysinfo_to_dt[i]; ++ } ++ ++ return NULL; ++} ++ + /** + * smbios_add_string() - add a string to the string area + * +@@ -124,6 +158,42 @@ static int smbios_add_string(struct smbios_ctx *ctx, const char *str) + } + } + ++/** ++ * get_str_from_dt - Get a substring from a DT property. ++ * After finding the property in the DT, the function ++ * will parse comma-separated values and return the value. ++ * If nprop->max exceeds the number of comma-separated ++ * elements, the last non NULL value will be returned. ++ * Counting starts from zero. ++ * ++ * @nprop: sysinfo property to use ++ * @str: pointer to fill with data ++ * @size: str buffer length ++ */ ++static ++void get_str_from_dt(const struct map_sysinfo *nprop, char *str, size_t size) ++{ ++ const char *dt_str; ++ int cnt = 0; ++ char *token; ++ ++ memset(str, 0, size); ++ if (!nprop || !nprop->max) ++ return; ++ ++ dt_str = ofnode_read_string(ofnode_root(), nprop->dt_str); ++ if (!dt_str) ++ return; ++ ++ memcpy(str, dt_str, size); ++ token = strtok(str, ","); ++ while (token && cnt < nprop->max) { ++ strlcpy(str, token, strlen(token) + 1); ++ token = strtok(NULL, ","); ++ cnt++; ++ } ++} ++ + /** + * smbios_add_prop_si() - Add a property from the devicetree or sysinfo + * +@@ -137,6 +207,8 @@ static int smbios_add_string(struct smbios_ctx *ctx, const char *str) + static int smbios_add_prop_si(struct smbios_ctx *ctx, const char *prop, + int sysinfo_id, const char *dval) + { ++ int ret; ++ + if (!dval || !*dval) + dval = "Unknown"; + +@@ -145,18 +217,30 @@ static int smbios_add_prop_si(struct smbios_ctx *ctx, const char *prop, + + if (sysinfo_id && ctx->dev) { + char val[SMBIOS_STR_MAX]; +- int ret; + + ret = sysinfo_get_str(ctx->dev, sysinfo_id, sizeof(val), val); + if (!ret) + return smbios_add_string(ctx, val); + } + if (IS_ENABLED(CONFIG_OF_CONTROL)) { +- const char *str; +- +- str = ofnode_read_string(ctx->node, prop); ++ const char *str = NULL; ++ char str_dt[128] = { 0 }; ++ /* ++ * If the node is not valid fallback and try the entire DT ++ * so we can at least fill in manufacturer and board type ++ */ ++ if (ofnode_valid(ctx->node)) { ++ str = ofnode_read_string(ctx->node, prop); ++ } else { ++ const struct map_sysinfo *nprop; ++ ++ nprop = convert_sysinfo_to_dt(prop); ++ get_str_from_dt(nprop, str_dt, sizeof(str_dt)); ++ str = (const char *)str_dt; ++ } + +- return smbios_add_string(ctx, str ? str : dval); ++ ret = smbios_add_string(ctx, str && *str ? str : dval); ++ return ret; + } + + return 0; \ No newline at end of file diff --git a/backport-disable-VBE-by-default.patch b/backport-disable-VBE-by-default.patch new file mode 100644 index 0000000000000000000000000000000000000000..28de705ab7dc8deb81d7708736a3c886b61bbe10 --- /dev/null +++ b/backport-disable-VBE-by-default.patch @@ -0,0 +1,27 @@ +From 02513d9ecc38d11ffc051ed59529e11f82164785 Mon Sep 17 00:00:00 2001 +From: Peter Robinson +Date: Fri, 18 Aug 2023 13:28:05 +0100 +Subject: [PATCH] disable VBE by default + +Fedora doesn't support the VBE boot method, disable it +to reduce size and remove a possible boot attack vector. + +Signed-off-by: Peter Robinson +--- + boot/Kconfig | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/boot/Kconfig b/boot/Kconfig +index e8fb03b8016..467b09e2350 100644 +--- a/boot/Kconfig ++++ b/boot/Kconfig +@@ -526,7 +526,6 @@ config BOOTMETH_EFILOADER + config BOOTMETH_VBE + bool "Bootdev support for Verified Boot for Embedded" + depends on FIT +- default y + select BOOTMETH_GLOBAL + select EVENT + help +-- +2.41.0 \ No newline at end of file diff --git a/backport-enable-bootmenu-by-default.patch b/backport-enable-bootmenu-by-default.patch new file mode 100644 index 0000000000000000000000000000000000000000..7d1394b2cf3256c0aec51b713e7ea96936cadccd --- /dev/null +++ b/backport-enable-bootmenu-by-default.patch @@ -0,0 +1,49 @@ +From a956480a6d52ae90ef4a46275c2ee29a4074de36 Mon Sep 17 00:00:00 2001 +From: Peter Robinson +Date: Fri, 18 Aug 2023 23:10:42 +0100 +Subject: [PATCH] enable bootmenu by default + +We want the boot menu on all Fedora devices as it makes +it a whole lot more user friendly. + +Signed-off-by: Peter Robinson +--- + boot/Kconfig | 2 ++ + cmd/Kconfig | 1 + + 2 files changed, 3 insertions(+) + +diff --git a/boot/Kconfig b/boot/Kconfig +index 467b09e2350..ad67b1f65a6 100644 +--- a/boot/Kconfig ++++ b/boot/Kconfig +@@ -1281,6 +1281,7 @@ config BOOTDELAY + + config AUTOBOOT_KEYED + bool "Stop autobooting via specific input key / string" ++ default y + help + This option enables stopping (aborting) of the automatic + boot feature only by issuing a specific input key or +@@ -1433,6 +1434,7 @@ config AUTOBOOT_MENUKEY + + config AUTOBOOT_MENU_SHOW + bool "Show a menu on boot" ++ default y + depends on CMD_BOOTMENU + help + This enables the boot menu, controlled by environment variables +diff --git a/cmd/Kconfig b/cmd/Kconfig +index 43ca10f69cc..3d39f2914cc 100644 +--- a/cmd/Kconfig ++++ b/cmd/Kconfig +@@ -413,6 +413,7 @@ source lib/efi_selftest/Kconfig + + config CMD_BOOTMENU + bool "bootmenu" ++ default y + select MENU + select CHARSET + help +-- +2.41.0 + diff --git a/backport-rockchip-Add-initial-support-for-the-PinePhone-Pro.patch b/backport-rockchip-Add-initial-support-for-the-PinePhone-Pro.patch new file mode 100644 index 0000000000000000000000000000000000000000..663ec250e43e76d2345747ef3c186f6a69be5824 --- /dev/null +++ b/backport-rockchip-Add-initial-support-for-the-PinePhone-Pro.patch @@ -0,0 +1,236 @@ +From 72400858605c085cf94a6cf5599269c8c39e3e72 Mon Sep 17 00:00:00 2001 +From: Peter Robinson +Date: Tue, 14 Mar 2023 12:30:36 +0000 +Subject: [PATCH] rockchip: pinephone pro: add initial display support + +Add proposed upstream DT patches for display, disable edp, +enable mipi and backlight, add required clocks. + +Clocks may not be required based on upstream review. Still +need to add panel pieces, the rk3288-evb has an example for +panel DT for u-boot, or may need to do a mipi addition to +simple-panel, or something else. + +Signed-off-by: Peter Robinson +--- + arch/arm/dts/rk3399-pinephone-pro.dts | 123 +++++++++++++++++++++++++ + configs/pinephone-pro-rk3399_defconfig | 3 +- + include/dt-bindings/clock/rk3399-cru.h | 2 + + 3 files changed, 127 insertions(+), 1 deletion(-) + +diff --git a/arch/arm/dts/rk3399-pinephone-pro.dts b/arch/arm/dts/rk3399-pinephone-pro.dts +index 04403a76238..d0609d1b534 100644 +--- a/arch/arm/dts/rk3399-pinephone-pro.dts ++++ b/arch/arm/dts/rk3399-pinephone-pro.dts +@@ -29,6 +29,12 @@ + stdout-path = "serial2:115200n8"; + }; + ++ backlight: backlight { ++ compatible = "pwm-backlight"; ++ pwms = <&pwm0 0 1000000 0>; ++ pwm-delay-us = <10000>; ++ }; ++ + gpio-keys { + compatible = "gpio-keys"; + pinctrl-names = "default"; +@@ -102,6 +108,32 @@ + /* WL_REG_ON on module */ + reset-gpios = <&gpio0 RK_PB2 GPIO_ACTIVE_LOW>; + }; ++ ++ /* MIPI DSI panel 1.8v supply */ ++ vcc1v8_lcd: vcc1v8-lcd-regulator { ++ compatible = "regulator-fixed"; ++ enable-active-high; ++ regulator-name = "vcc1v8_lcd"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ vin-supply = <&vcc3v3_sys>; ++ gpio = <&gpio3 RK_PA5 GPIO_ACTIVE_HIGH>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&display_pwren1>; ++ }; ++ ++ /* MIPI DSI panel 2.8v supply */ ++ vcc2v8_lcd: vcc2v8-lcd-regulator { ++ compatible = "regulator-fixed"; ++ enable-active-high; ++ regulator-name = "vcc2v8_lcd"; ++ regulator-min-microvolt = <2800000>; ++ regulator-max-microvolt = <2800000>; ++ vin-supply = <&vcc3v3_sys>; ++ gpio = <&gpio3 RK_PA1 GPIO_ACTIVE_HIGH>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&display_pwren>; ++ }; + }; + + &cpu_l0 { +@@ -132,6 +164,11 @@ + status = "okay"; + }; + ++&gpu { ++ mali-supply = <&vdd_gpu>; ++ status = "okay"; ++}; ++ + &i2c0 { + clock-frequency = <400000>; + i2c-scl-rising-time-ns = <168>; +@@ -214,6 +251,9 @@ + regulator-name = "vcc3v0_touch"; + regulator-min-microvolt = <3000000>; + regulator-max-microvolt = <3000000>; ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; + }; + + vcca1v8_codec: LDO_REG3 { +@@ -347,6 +387,25 @@ + }; + }; + ++&i2c3 { ++ i2c-scl-rising-time-ns = <450>; ++ i2c-scl-falling-time-ns = <15>; ++ status = "okay"; ++ ++ touchscreen@14 { ++ compatible = "goodix,gt917s"; ++ reg = <0x14>; ++ interrupt-parent = <&gpio3>; ++ interrupts = ; ++ irq-gpios = <&gpio3 RK_PB5 GPIO_ACTIVE_HIGH>; ++ reset-gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_HIGH>; ++ AVDD28-supply = <&vcc3v0_touch>; ++ VDDIO-supply = <&vcc3v0_touch>; ++ touchscreen-size-x = <720>; ++ touchscreen-size-y = <1440>; ++ }; ++}; ++ + &io_domains { + bt656-supply = <&vcc1v8_dvp>; + audio-supply = <&vcca1v8_codec>; +@@ -355,6 +414,40 @@ + status = "okay"; + }; + ++&mipi_dsi { ++ status = "okay"; ++ clock-master; ++ ++ ports { ++ mipi_out: port@1 { ++ #address-cells = <0>; ++ #size-cells = <0>; ++ reg = <1>; ++ ++ mipi_out_panel: endpoint { ++ remote-endpoint = <&mipi_in_panel>; ++ }; ++ }; ++ }; ++ ++ panel@0 { ++ compatible = "hannstar,hsd060bhw4"; ++ reg = <0>; ++ backlight = <&backlight>; ++ reset-gpios = <&gpio4 RK_PD1 GPIO_ACTIVE_LOW>; ++ vcc-supply = <&vcc2v8_lcd>; ++ iovcc-supply = <&vcc1v8_lcd>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&display_rst_l>; ++ ++ port { ++ mipi_in_panel: endpoint { ++ remote-endpoint = <&mipi_out_panel>; ++ }; ++ }; ++ }; ++}; ++ + &pmu_io_domains { + pmu1830-supply = <&vcc_1v8>; + status = "okay"; +@@ -387,6 +480,20 @@ + }; + }; + ++ dsi { ++ display_rst_l: display-rst-l { ++ rockchip,pins = <4 RK_PD1 RK_FUNC_GPIO &pcfg_pull_down>; ++ }; ++ ++ display_pwren: display-pwren { ++ rockchip,pins = <3 RK_PA1 RK_FUNC_GPIO &pcfg_pull_down>; ++ }; ++ ++ display_pwren1: display-pwren1 { ++ rockchip,pins = <3 RK_PA5 RK_FUNC_GPIO &pcfg_pull_down>; ++ }; ++ }; ++ + sound { + vcc1v8_codec_en: vcc1v8-codec-en { + rockchip,pins = <3 RK_PA4 RK_FUNC_GPIO &pcfg_pull_down>; +@@ -422,6 +529,10 @@ + status = "okay"; + }; + ++&pwm0 { ++ status = "okay"; ++}; ++ + &sdmmc { + bus-width = <4>; + cap-sd-highspeed; +@@ -472,3 +583,15 @@ + &uart2 { + status = "okay"; + }; ++ ++&vopb { ++ status = "okay"; ++ assigned-clocks = <&cru DCLK_VOP0_DIV>, <&cru DCLK_VOP0>, ++ <&cru ACLK_VOP0>, <&cru HCLK_VOP0>; ++ assigned-clock-rates = <0>, <0>, <400000000>, <100000000>; ++ assigned-clock-parents = <&cru PLL_CPLL>, <&cru DCLK_VOP0_FRAC>; ++}; ++ ++&vopb_mmu { ++ status = "okay"; ++}; +diff --git a/configs/pinephone-pro-rk3399_defconfig b/configs/pinephone-pro-rk3399_defconfig +index 54f9b90536c..1982131c805 100644 +--- a/configs/pinephone-pro-rk3399_defconfig ++++ b/configs/pinephone-pro-rk3399_defconfig +@@ -96,6 +96,7 @@ CONFIG_USB_ETHER_RTL8152=y + CONFIG_VIDEO=y + CONFIG_DISPLAY=y + CONFIG_VIDEO_ROCKCHIP=y +-CONFIG_DISPLAY_ROCKCHIP_EDP=y ++CONFIG_DISPLAY_ROCKCHIP_MIPI=y ++CONFIG_BACKLIGHT_PWM=y + CONFIG_SPL_TINY_MEMSET=y + CONFIG_ERRNO_STR=y +diff --git a/include/dt-bindings/clock/rk3399-cru.h b/include/dt-bindings/clock/rk3399-cru.h +index 211faf8fa89..7866e5266d2 100644 +--- a/include/dt-bindings/clock/rk3399-cru.h ++++ b/include/dt-bindings/clock/rk3399-cru.h +@@ -131,6 +131,8 @@ + #define DCLK_VOP0_DIV 182 + #define DCLK_VOP1_DIV 183 + #define DCLK_M0_PERILP 184 ++#define DCLK_VOP0_FRAC 185 ++#define DCLK_VOP1_FRAC 186 + + #define FCLK_CM0S 190 + +-- +2.39.2 + \ No newline at end of file diff --git a/backport-rpi-Enable-using-the-DT-provided-by-the-Raspberry-Pi.patch b/backport-rpi-Enable-using-the-DT-provided-by-the-Raspberry-Pi.patch deleted file mode 100644 index 5d7d7901c45820d094a3038ea3a9d3f374f292bd..0000000000000000000000000000000000000000 --- a/backport-rpi-Enable-using-the-DT-provided-by-the-Raspberry-Pi.patch +++ /dev/null @@ -1,95 +0,0 @@ -From 7389a936fbd5ccaae7c39d38d1440e0359f9d0e5 Mon Sep 17 00:00:00 2001 -From: Peter Robinson -Date: Tue, 12 May 2020 08:14:26 +0100 -Subject: [PATCH] rpi: Use firmware provided device tree - -Signed-off-by: Peter Robinson ---- - configs/rpi_0_w_defconfig | 2 +- - configs/rpi_2_defconfig | 2 +- - configs/rpi_3_32b_defconfig | 2 +- - configs/rpi_3_b_plus_defconfig | 2 +- - configs/rpi_3_defconfig | 2 +- - configs/rpi_defconfig | 2 +- - 6 files changed, 6 insertions(+), 6 deletions(-) - -diff --git a/configs/rpi_0_w_defconfig b/configs/rpi_0_w_defconfig -index bba5e12b12..0241f4c6d3 100644 ---- a/configs/rpi_0_w_defconfig -+++ b/configs/rpi_0_w_defconfig -@@ -17,7 +17,7 @@ CONFIG_CMD_GPIO=y - CONFIG_CMD_MMC=y - CONFIG_CMD_USB=y - CONFIG_CMD_FS_UUID=y --CONFIG_OF_EMBED=y -+CONFIG_OF_BOARD=y - CONFIG_ENV_FAT_DEVICE_AND_PART="0:1" - CONFIG_SYS_RELOC_GD_ENV_ADDR=y - CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y -diff --git a/configs/rpi_2_defconfig b/configs/rpi_2_defconfig -index 1c2bbb29ce..9573e475f4 100644 ---- a/configs/rpi_2_defconfig -+++ b/configs/rpi_2_defconfig -@@ -17,7 +17,7 @@ CONFIG_CMD_GPIO=y - CONFIG_CMD_MMC=y - CONFIG_CMD_USB=y - CONFIG_CMD_FS_UUID=y --CONFIG_OF_EMBED=y -+CONFIG_OF_BOARD=y - CONFIG_ENV_FAT_DEVICE_AND_PART="0:1" - CONFIG_SYS_RELOC_GD_ENV_ADDR=y - CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y -diff --git a/configs/rpi_3_32b_defconfig b/configs/rpi_3_32b_defconfig -index b8a3d17f43..252df994e6 100644 ---- a/configs/rpi_3_32b_defconfig -+++ b/configs/rpi_3_32b_defconfig -@@ -18,7 +18,7 @@ CONFIG_CMD_GPIO=y - CONFIG_CMD_MMC=y - CONFIG_CMD_USB=y - CONFIG_CMD_FS_UUID=y --CONFIG_OF_EMBED=y -+CONFIG_OF_BOARD=y - CONFIG_ENV_FAT_DEVICE_AND_PART="0:1" - CONFIG_SYS_RELOC_GD_ENV_ADDR=y - CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y -diff --git a/configs/rpi_3_b_plus_defconfig b/configs/rpi_3_b_plus_defconfig -index 4c361438fa..3b2996a2f9 100644 ---- a/configs/rpi_3_b_plus_defconfig -+++ b/configs/rpi_3_b_plus_defconfig -@@ -18,7 +18,7 @@ CONFIG_CMD_GPIO=y - CONFIG_CMD_MMC=y - CONFIG_CMD_USB=y - CONFIG_CMD_FS_UUID=y --CONFIG_OF_EMBED=y -+CONFIG_OF_BOARD=y - CONFIG_ENV_FAT_DEVICE_AND_PART="0:1" - CONFIG_SYS_RELOC_GD_ENV_ADDR=y - CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y -diff --git a/configs/rpi_3_defconfig b/configs/rpi_3_defconfig -index 9b281a4f15..1e9ee6122e 100644 ---- a/configs/rpi_3_defconfig -+++ b/configs/rpi_3_defconfig -@@ -18,7 +18,7 @@ CONFIG_CMD_GPIO=y - CONFIG_CMD_MMC=y - CONFIG_CMD_USB=y - CONFIG_CMD_FS_UUID=y --CONFIG_OF_EMBED=y -+CONFIG_OF_BOARD=y - CONFIG_ENV_FAT_DEVICE_AND_PART="0:1" - CONFIG_SYS_RELOC_GD_ENV_ADDR=y - CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y -diff --git a/configs/rpi_defconfig b/configs/rpi_defconfig -index b5ad53c37b..223fc03275 100644 ---- a/configs/rpi_defconfig -+++ b/configs/rpi_defconfig -@@ -17,7 +17,7 @@ CONFIG_CMD_GPIO=y - CONFIG_CMD_MMC=y - CONFIG_CMD_USB=y - CONFIG_CMD_FS_UUID=y --CONFIG_OF_EMBED=y -+CONFIG_OF_BOARD=y - CONFIG_ENV_FAT_DEVICE_AND_PART="0:1" - CONFIG_SYS_RELOC_GD_ENV_ADDR=y - CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y --- - diff --git a/backport-uefi-Boot-var-automatic-management-for-removable-medias.patch b/backport-uefi-Boot-var-automatic-management-for-removable-medias.patch new file mode 100644 index 0000000000000000000000000000000000000000..13a23e31c327b1af37f2e3948cf7035045379812 --- /dev/null +++ b/backport-uefi-Boot-var-automatic-management-for-removable-medias.patch @@ -0,0 +1,574 @@ +From patchwork Fri Nov 10 04:25:37 2023 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 8bit +X-Patchwork-Submitter: Masahisa Kojima +X-Patchwork-Id: 1862317 +X-Patchwork-Delegate: apalos@gmail.com +Return-Path: +X-Original-To: incoming@patchwork.ozlabs.org +Delivered-To: patchwork-incoming@legolas.ozlabs.org +Authentication-Results: legolas.ozlabs.org; + dkim=pass (2048-bit key; + unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256 + header.s=google header.b=muA1rcXE; + dkim-atps=neutral +Authentication-Results: legolas.ozlabs.org; + spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de + (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; + envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) +Received: from phobos.denx.de (phobos.denx.de + [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) + (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) + key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) + (No client certificate requested) + by legolas.ozlabs.org (Postfix) with ESMTPS id 4SRQnL1SNCz1yRF + for ; Fri, 10 Nov 2023 15:28:54 +1100 (AEDT) +Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) + by phobos.denx.de (Postfix) with ESMTP id 4C150877A0; + Fri, 10 Nov 2023 05:27:39 +0100 (CET) +Authentication-Results: phobos.denx.de; + dmarc=pass (p=none dis=none) header.from=linaro.org +Authentication-Results: phobos.denx.de; + spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de +Authentication-Results: phobos.denx.de; + dkim=pass (2048-bit key; + unprotected) header.d=linaro.org header.i=@linaro.org header.b="muA1rcXE"; + dkim-atps=neutral +Received: by phobos.denx.de (Postfix, from userid 109) + id 9DA4487796; Fri, 10 Nov 2023 05:27:28 +0100 (CET) +X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de +X-Spam-Level: +X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, + DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, + T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 +Received: from mail-qv1-xf30.google.com (mail-qv1-xf30.google.com + [IPv6:2607:f8b0:4864:20::f30]) + (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) + (No client certificate requested) + by phobos.denx.de (Postfix) with ESMTPS id E1AE487795 + for ; Fri, 10 Nov 2023 05:27:22 +0100 (CET) +Authentication-Results: phobos.denx.de; + dmarc=pass (p=none dis=none) header.from=linaro.org +Authentication-Results: phobos.denx.de; + spf=pass smtp.mailfrom=masahisa.kojima@linaro.org +Received: by mail-qv1-xf30.google.com with SMTP id + 6a1803df08f44-66d09b6d007so10800236d6.1 + for ; Thu, 09 Nov 2023 20:27:22 -0800 (PST) +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; + d=linaro.org; s=google; t=1699590441; x=1700195241; darn=lists.denx.de; + h=content-transfer-encoding:mime-version:references:in-reply-to + :message-id:date:subject:cc:to:from:from:to:cc:subject:date + :message-id:reply-to; + bh=TMp02tF2/jn50c0fdB6OUXNmWJ9Af2C5T6zhn2D5BPI=; + b=muA1rcXEW1UV0ytByrk/oz/vuO7kL/M5Szuv8+JLohfHHFY3sZW5v5q4Tn1coMbMKW + 6+JvY0qla9DiPjvWA90QSopUCqBoggSNPTIlTn4YSs0zA/+Aa9ufsx25M+rq4pdYGAZq + ujAG9mRgWMuq7W+eZZWfQo6eFqEo14D6RbQL5NFW/G0Wkle6TwLwu7dp19DOw7hH/jPq + sq9/5/DA4FEI+4sRDsPBAQ48VTq05vuMv2PMU0t4d7SXPVCEk1lW+JFZB4wooN2XotQ+ + ni+S40bdTeGBscZ+sajQQgtDd49nxGSB518samtlg5SGdhDB9WKak39uPeWU4WFYc01J + R7BQ== +X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; + d=1e100.net; s=20230601; t=1699590441; x=1700195241; + h=content-transfer-encoding:mime-version:references:in-reply-to + :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc + :subject:date:message-id:reply-to; + bh=TMp02tF2/jn50c0fdB6OUXNmWJ9Af2C5T6zhn2D5BPI=; + b=o5TY9c0iL/aKbWJtamq+fAKn5twYwIcXo5Z8lxIo1/WL8jhCu3973LiJ6l2rbP6I26 + wEUpA97eZRYjRnp6Pfb9nJ5+Ip11akGFqY+UNFjwNues+jYvCmrhtbzt3RIwwRMopasI + IvpvSU+Vk0opNS2b96ZRak7X34ZoUNZVcjTBCSqx3UgQcaMOxrP5u7LholG/3rTttkkF + gdIAWrm7wPUrREhnt8opfpTWbusAkgJ1lAa0uqcfb4TRE7fKsiX3du3TwgJNsvACBXxW + W4w5nDy5AXlY05IOsmMvxjIudLF0aDB3y/aUT1K7/NyAO77e5CPoGEIRF4JnpngLM7yx + RcEw== +X-Gm-Message-State: AOJu0YwKFnJ+XRzaRWdr9TK+didg99ZRC2gUKVvYvCLFFGqfG4yFbCXC + IsubnJ6RTNtZqmONUFojqVLmrQYm513MFxxhCLg= +X-Google-Smtp-Source: + AGHT+IE/39rKwHRMrxLkfDXIlyOXct/rRbXebKb2Lc3eaLeJaCt4Vmnxn7CrXnlXXLzUgocEmJUKcA== +X-Received: by 2002:a05:6214:d44:b0:675:667d:a1b6 with SMTP id + 4-20020a0562140d4400b00675667da1b6mr7212832qvr.0.1699590440388; + Thu, 09 Nov 2023 20:27:20 -0800 (PST) +Received: from localhost ([164.70.16.189]) by smtp.gmail.com with ESMTPSA id + n18-20020a170902e55200b001c0bf60ba5csm4304818plf.272.2023.11.09.20.27.19 + (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); + Thu, 09 Nov 2023 20:27:19 -0800 (PST) +From: Masahisa Kojima +To: u-boot@lists.denx.de +Cc: Heinrich Schuchardt , + Ilias Apalodimas , + Simon Glass , + Takahiro Akashi , + Michal Simek , Raymond Mao , + Masahisa Kojima , + Joao Marcos Costa , + Huang Jianan , + Thomas Petazzoni , + Miquel Raynal , linux-erofs@lists.ozlabs.org +Subject: [PATCH v12 4/9] efi_loader: Boot var automatic management +Date: Fri, 10 Nov 2023 13:25:37 +0900 +Message-Id: <20231110042542.3797301-5-masahisa.kojima@linaro.org> +X-Mailer: git-send-email 2.34.1 +In-Reply-To: <20231110042542.3797301-1-masahisa.kojima@linaro.org> +References: <20231110042542.3797301-1-masahisa.kojima@linaro.org> +MIME-Version: 1.0 +X-BeenThere: u-boot@lists.denx.de +X-Mailman-Version: 2.1.39 +Precedence: list +List-Id: U-Boot discussion +List-Unsubscribe: , + +List-Archive: +List-Post: +List-Help: +List-Subscribe: , + +Errors-To: u-boot-bounces@lists.denx.de +Sender: "U-Boot" +X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de +X-Virus-Status: Clean + +From: Raymond Mao + +Changes for complying to EFI spec ยง3.5.1.1 +'Removable Media Boot Behavior'. +Boot variables can be automatically generated during a removable +media is probed. At the same time, unused boot variables will be +detected and removed. + +Please note that currently the function 'efi_disk_remove' has no +ability to distinguish below two scenarios +a) Unplugging of a removable media under U-Boot +b) U-Boot exiting and booting an OS +Thus currently the boot variables management is not added into +'efi_disk_remove' to avoid boot options being added/erased +repeatedly under scenario b) during power cycles +See TODO comments under function 'efi_disk_remove' for more details + +The original efi_secboot tests expect that BootOrder EFI variable +is not defined. With this commit, the BootOrder EFI variable is +automatically added when the disk is detected. The original +efi_secboot tests end up with unexpected failure. +The efi_secboot tests need to be modified to explicitly set +the BootOrder EFI variable. + +squashfs and erofs ls tests are also affected by this modification, +need to clear the previous state before squashfs ls test starts. + +Co-developed-by: Masahisa Kojima +Signed-off-by: Masahisa Kojima +Signed-off-by: Raymond Mao +Reviewed-by: Heinrich Schuchardt +Reviewed-by: Ilias Apalodimas +Reviewed-by: Joao Marcos Costa +--- + lib/efi_loader/efi_disk.c | 18 ++++++++ + lib/efi_loader/efi_setup.c | 7 ++++ + test/py/tests/test_efi_secboot/test_signed.py | 42 +++++++++---------- + .../test_efi_secboot/test_signed_intca.py | 14 +++---- + .../tests/test_efi_secboot/test_unsigned.py | 14 +++---- + test/py/tests/test_fs/test_erofs.py | 9 ++++ + .../test_fs/test_squashfs/test_sqfs_ls.py | 9 ++++ + 7 files changed, 78 insertions(+), 35 deletions(-) + +diff --git a/lib/efi_loader/efi_disk.c b/lib/efi_loader/efi_disk.c +index f0d76113b0..b808a7fe62 100644 +--- a/lib/efi_loader/efi_disk.c ++++ b/lib/efi_loader/efi_disk.c +@@ -690,6 +690,13 @@ int efi_disk_probe(void *ctx, struct event *event) + return -1; + } + ++ /* only do the boot option management when UEFI sub-system is initialized */ ++ if (IS_ENABLED(CONFIG_CMD_BOOTEFI_BOOTMGR) && efi_obj_list_initialized == EFI_SUCCESS) { ++ ret = efi_bootmgr_update_media_device_boot_option(); ++ if (ret != EFI_SUCCESS) ++ return -1; ++ } ++ + return 0; + } + +@@ -742,6 +749,17 @@ int efi_disk_remove(void *ctx, struct event *event) + dev_tag_del(dev, DM_TAG_EFI); + + return 0; ++ ++ /* ++ * TODO A flag to distinguish below 2 different scenarios of this ++ * function call is needed: ++ * a) Unplugging of a removable media under U-Boot ++ * b) U-Boot exiting and booting an OS ++ * In case of scenario a), efi_bootmgr_update_media_device_boot_option() ++ * needs to be invoked here to update the boot options and remove the ++ * unnecessary ones. ++ */ ++ + } + + /** +diff --git a/lib/efi_loader/efi_setup.c b/lib/efi_loader/efi_setup.c +index ad719afd63..c02569cb6d 100644 +--- a/lib/efi_loader/efi_setup.c ++++ b/lib/efi_loader/efi_setup.c +@@ -245,6 +245,13 @@ efi_status_t efi_init_obj_list(void) + if (ret != EFI_SUCCESS) + goto out; + ++ if (IS_ENABLED(CONFIG_CMD_BOOTEFI_BOOTMGR)) { ++ /* update boot option after variable service initialized */ ++ ret = efi_bootmgr_update_media_device_boot_option(); ++ if (ret != EFI_SUCCESS) ++ goto out; ++ } ++ + /* Define supported languages */ + ret = efi_init_platform_lang(); + if (ret != EFI_SUCCESS) +diff --git a/test/py/tests/test_efi_secboot/test_signed.py b/test/py/tests/test_efi_secboot/test_signed.py +index ca52e853d8..2f862a259a 100644 +--- a/test/py/tests/test_efi_secboot/test_signed.py ++++ b/test/py/tests/test_efi_secboot/test_signed.py +@@ -29,7 +29,7 @@ class TestEfiSignedImage(object): + output = u_boot_console.run_command_list([ + 'host bind 0 %s' % disk_img, + 'efidebug boot add -b 1 HELLO1 host 0:1 /helloworld.efi.signed -s ""', +- 'efidebug boot next 1', ++ 'efidebug boot order 1', + 'bootefi bootmgr']) + assert 'Hello, world!' in ''.join(output) + +@@ -37,7 +37,7 @@ class TestEfiSignedImage(object): + # Test Case 1b, run unsigned image if no PK + output = u_boot_console.run_command_list([ + 'efidebug boot add -b 2 HELLO2 host 0:1 /helloworld.efi -s ""', +- 'efidebug boot next 2', ++ 'efidebug boot order 2', + 'bootefi bootmgr']) + assert 'Hello, world!' in ''.join(output) + +@@ -59,13 +59,13 @@ class TestEfiSignedImage(object): + assert 'Failed to set EFI variable' not in ''.join(output) + output = u_boot_console.run_command_list([ + 'efidebug boot add -b 1 HELLO1 host 0:1 /helloworld.efi.signed -s ""', +- 'efidebug boot next 1', ++ 'efidebug boot order 1', + 'efidebug test bootmgr']) + assert('\'HELLO1\' failed' in ''.join(output)) + assert('efi_start_image() returned: 26' in ''.join(output)) + output = u_boot_console.run_command_list([ + 'efidebug boot add -b 2 HELLO2 host 0:1 /helloworld.efi -s ""', +- 'efidebug boot next 2', ++ 'efidebug boot order 2', + 'efidebug test bootmgr']) + assert '\'HELLO2\' failed' in ''.join(output) + assert 'efi_start_image() returned: 26' in ''.join(output) +@@ -77,12 +77,12 @@ class TestEfiSignedImage(object): + 'setenv -e -nv -bs -rt -at -i 4000000:$filesize db']) + assert 'Failed to set EFI variable' not in ''.join(output) + output = u_boot_console.run_command_list([ +- 'efidebug boot next 2', ++ 'efidebug boot order 2', + 'efidebug test bootmgr']) + assert '\'HELLO2\' failed' in ''.join(output) + assert 'efi_start_image() returned: 26' in ''.join(output) + output = u_boot_console.run_command_list([ +- 'efidebug boot next 1', ++ 'efidebug boot order 1', + 'bootefi bootmgr']) + assert 'Hello, world!' in ''.join(output) + +@@ -105,7 +105,7 @@ class TestEfiSignedImage(object): + assert 'Failed to set EFI variable' not in ''.join(output) + output = u_boot_console.run_command_list([ + 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi.signed -s ""', +- 'efidebug boot next 1', ++ 'efidebug boot order 1', + 'efidebug test bootmgr']) + assert '\'HELLO\' failed' in ''.join(output) + assert 'efi_start_image() returned: 26' in ''.join(output) +@@ -117,7 +117,7 @@ class TestEfiSignedImage(object): + 'setenv -e -nv -bs -rt -at -i 4000000:$filesize db']) + assert 'Failed to set EFI variable' not in ''.join(output) + output = u_boot_console.run_command_list([ +- 'efidebug boot next 1', ++ 'efidebug boot order 1', + 'efidebug test bootmgr']) + assert '\'HELLO\' failed' in ''.join(output) + assert 'efi_start_image() returned: 26' in ''.join(output) +@@ -143,7 +143,7 @@ class TestEfiSignedImage(object): + assert 'Failed to set EFI variable' not in ''.join(output) + output = u_boot_console.run_command_list([ + 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi.signed -s ""', +- 'efidebug boot next 1', ++ 'efidebug boot order 1', + 'efidebug test bootmgr']) + assert '\'HELLO\' failed' in ''.join(output) + assert 'efi_start_image() returned: 26' in ''.join(output) +@@ -170,7 +170,7 @@ class TestEfiSignedImage(object): + assert 'Failed to set EFI variable' not in ''.join(output) + output = u_boot_console.run_command_list([ + 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi.signed_2sigs -s ""', +- 'efidebug boot next 1', ++ 'efidebug boot order 1', + 'efidebug test bootmgr']) + assert 'Hello, world!' in ''.join(output) + +@@ -181,7 +181,7 @@ class TestEfiSignedImage(object): + 'setenv -e -nv -bs -rt -at -a -i 4000000:$filesize db']) + assert 'Failed to set EFI variable' not in ''.join(output) + output = u_boot_console.run_command_list([ +- 'efidebug boot next 1', ++ 'efidebug boot order 1', + 'efidebug test bootmgr']) + assert 'Hello, world!' in ''.join(output) + +@@ -193,7 +193,7 @@ class TestEfiSignedImage(object): + 'setenv -e -nv -bs -rt -at -i 4000000:$filesize dbx']) + assert 'Failed to set EFI variable' not in ''.join(output) + output = u_boot_console.run_command_list([ +- 'efidebug boot next 1', ++ 'efidebug boot order 1', + 'efidebug test bootmgr']) + assert '\'HELLO\' failed' in ''.join(output) + assert 'efi_start_image() returned: 26' in ''.join(output) +@@ -205,7 +205,7 @@ class TestEfiSignedImage(object): + 'setenv -e -nv -bs -rt -at -a -i 4000000:$filesize dbx']) + assert 'Failed to set EFI variable' not in ''.join(output) + output = u_boot_console.run_command_list([ +- 'efidebug boot next 1', ++ 'efidebug boot order 1', + 'efidebug test bootmgr']) + assert '\'HELLO\' failed' in ''.join(output) + assert 'efi_start_image() returned: 26' in ''.join(output) +@@ -230,7 +230,7 @@ class TestEfiSignedImage(object): + assert 'Failed to set EFI variable' not in ''.join(output) + output = u_boot_console.run_command_list([ + 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi.signed_2sigs -s ""', +- 'efidebug boot next 1', ++ 'efidebug boot order 1', + 'efidebug test bootmgr']) + assert '\'HELLO\' failed' in ''.join(output) + assert 'efi_start_image() returned: 26' in ''.join(output) +@@ -254,7 +254,7 @@ class TestEfiSignedImage(object): + assert 'Failed to set EFI variable' not in ''.join(output) + output = u_boot_console.run_command_list([ + 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi.signed -s ""', +- 'efidebug boot next 1', ++ 'efidebug boot order 1', + 'bootefi bootmgr']) + assert 'Hello, world!' in ''.join(output) + +@@ -265,7 +265,7 @@ class TestEfiSignedImage(object): + 'setenv -e -nv -bs -rt -at -i 4000000:$filesize dbx']) + assert 'Failed to set EFI variable' not in ''.join(output) + output = u_boot_console.run_command_list([ +- 'efidebug boot next 1', ++ 'efidebug boot order 1', + 'efidebug test bootmgr']) + assert '\'HELLO\' failed' in ''.join(output) + assert 'efi_start_image() returned: 26' in ''.join(output) +@@ -279,7 +279,7 @@ class TestEfiSignedImage(object): + 'setenv -e -nv -bs -rt -at -i 4000000:$filesize dbx']) + assert 'Failed to set EFI variable' not in ''.join(output) + output = u_boot_console.run_command_list([ +- 'efidebug boot next 1', ++ 'efidebug boot order 1', + 'efidebug test bootmgr']) + assert '\'HELLO\' failed' in ''.join(output) + assert 'efi_start_image() returned: 26' in ''.join(output) +@@ -307,7 +307,7 @@ class TestEfiSignedImage(object): + assert 'Failed to set EFI variable' not in ''.join(output) + output = u_boot_console.run_command_list([ + 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi.signed_2sigs -s ""', +- 'efidebug boot next 1', ++ 'efidebug boot order 1', + 'efidebug test bootmgr']) + assert '\'HELLO\' failed' in ''.join(output) + assert 'efi_start_image() returned: 26' in ''.join(output) +@@ -330,7 +330,7 @@ class TestEfiSignedImage(object): + assert 'Failed to set EFI variable' not in ''.join(output) + output = u_boot_console.run_command_list([ + 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi.signed_2sigs -s ""', +- 'efidebug boot next 1', ++ 'efidebug boot order 1', + 'efidebug test bootmgr']) + assert '\'HELLO\' failed' in ''.join(output) + assert 'efi_start_image() returned: 26' in ''.join(output) +@@ -349,7 +349,7 @@ class TestEfiSignedImage(object): + output = u_boot_console.run_command_list([ + 'host bind 0 %s' % disk_img, + 'efidebug boot add -b 1 HELLO1 host 0:1 /helloworld_forged.efi.signed -s ""', +- 'efidebug boot next 1', ++ 'efidebug boot order 1', + 'efidebug test bootmgr']) + assert('hELLO, world!' in ''.join(output)) + +@@ -364,7 +364,7 @@ class TestEfiSignedImage(object): + 'setenv -e -nv -bs -rt -at -i 4000000:$filesize PK']) + assert 'Failed to set EFI variable' not in ''.join(output) + output = u_boot_console.run_command_list([ +- 'efidebug boot next 1', ++ 'efidebug boot order 1', + 'efidebug test bootmgr']) + assert(not 'hELLO, world!' in ''.join(output)) + assert('\'HELLO1\' failed' in ''.join(output)) +diff --git a/test/py/tests/test_efi_secboot/test_signed_intca.py b/test/py/tests/test_efi_secboot/test_signed_intca.py +index d8d599d22f..8d9a5f3e7f 100644 +--- a/test/py/tests/test_efi_secboot/test_signed_intca.py ++++ b/test/py/tests/test_efi_secboot/test_signed_intca.py +@@ -40,7 +40,7 @@ class TestEfiSignedImageIntca(object): + + output = u_boot_console.run_command_list([ + 'efidebug boot add -b 1 HELLO_a host 0:1 /helloworld.efi.signed_a -s ""', +- 'efidebug boot next 1', ++ 'efidebug boot order 1', + 'efidebug test bootmgr']) + assert '\'HELLO_a\' failed' in ''.join(output) + assert 'efi_start_image() returned: 26' in ''.join(output) +@@ -49,7 +49,7 @@ class TestEfiSignedImageIntca(object): + # Test Case 1b, signed and authenticated by root CA + output = u_boot_console.run_command_list([ + 'efidebug boot add -b 2 HELLO_ab host 0:1 /helloworld.efi.signed_ab -s ""', +- 'efidebug boot next 2', ++ 'efidebug boot order 2', + 'bootefi bootmgr']) + assert 'Hello, world!' in ''.join(output) + +@@ -71,7 +71,7 @@ class TestEfiSignedImageIntca(object): + + output = u_boot_console.run_command_list([ + 'efidebug boot add -b 1 HELLO_abc host 0:1 /helloworld.efi.signed_abc -s ""', +- 'efidebug boot next 1', ++ 'efidebug boot order 1', + 'efidebug test bootmgr']) + assert '\'HELLO_abc\' failed' in ''.join(output) + assert 'efi_start_image() returned: 26' in ''.join(output) +@@ -81,7 +81,7 @@ class TestEfiSignedImageIntca(object): + output = u_boot_console.run_command_list([ + 'fatload host 0:1 4000000 db_b.auth', + 'setenv -e -nv -bs -rt -at -i 4000000:$filesize db', +- 'efidebug boot next 1', ++ 'efidebug boot order 1', + 'efidebug test bootmgr']) + assert '\'HELLO_abc\' failed' in ''.join(output) + assert 'efi_start_image() returned: 26' in ''.join(output) +@@ -91,7 +91,7 @@ class TestEfiSignedImageIntca(object): + output = u_boot_console.run_command_list([ + 'fatload host 0:1 4000000 db_c.auth', + 'setenv -e -nv -bs -rt -at -i 4000000:$filesize db', +- 'efidebug boot next 1', ++ 'efidebug boot order 1', + 'efidebug test bootmgr']) + assert 'Hello, world!' in ''.join(output) + +@@ -117,7 +117,7 @@ class TestEfiSignedImageIntca(object): + + output = u_boot_console.run_command_list([ + 'efidebug boot add -b 1 HELLO_abc host 0:1 /helloworld.efi.signed_abc -s ""', +- 'efidebug boot next 1', ++ 'efidebug boot order 1', + 'efidebug test bootmgr']) + assert 'Hello, world!' in ''.join(output) + # Or, +@@ -129,7 +129,7 @@ class TestEfiSignedImageIntca(object): + output = u_boot_console.run_command_list([ + 'fatload host 0:1 4000000 dbx_c.auth', + 'setenv -e -nv -bs -rt -at -i 4000000:$filesize dbx', +- 'efidebug boot next 1', ++ 'efidebug boot order 1', + 'efidebug test bootmgr']) + assert '\'HELLO_abc\' failed' in ''.join(output) + assert 'efi_start_image() returned: 26' in ''.join(output) +diff --git a/test/py/tests/test_efi_secboot/test_unsigned.py b/test/py/tests/test_efi_secboot/test_unsigned.py +index df63f0df08..7c078f220d 100644 +--- a/test/py/tests/test_efi_secboot/test_unsigned.py ++++ b/test/py/tests/test_efi_secboot/test_unsigned.py +@@ -36,11 +36,11 @@ class TestEfiUnsignedImage(object): + + output = u_boot_console.run_command_list([ + 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi -s ""', +- 'efidebug boot next 1', ++ 'efidebug boot order 1', + 'bootefi bootmgr']) + assert '\'HELLO\' failed' in ''.join(output) + output = u_boot_console.run_command_list([ +- 'efidebug boot next 1', ++ 'efidebug boot order 1', + 'efidebug test bootmgr']) + assert 'efi_start_image() returned: 26' in ''.join(output) + assert 'Hello, world!' not in ''.join(output) +@@ -65,7 +65,7 @@ class TestEfiUnsignedImage(object): + + output = u_boot_console.run_command_list([ + 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi -s ""', +- 'efidebug boot next 1', ++ 'efidebug boot order 1', + 'bootefi bootmgr']) + assert 'Hello, world!' in ''.join(output) + +@@ -89,11 +89,11 @@ class TestEfiUnsignedImage(object): + + output = u_boot_console.run_command_list([ + 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi -s ""', +- 'efidebug boot next 1', ++ 'efidebug boot order 1', + 'bootefi bootmgr']) + assert '\'HELLO\' failed' in ''.join(output) + output = u_boot_console.run_command_list([ +- 'efidebug boot next 1', ++ 'efidebug boot order 1', + 'efidebug test bootmgr']) + assert 'efi_start_image() returned: 26' in ''.join(output) + assert 'Hello, world!' not in ''.join(output) +@@ -107,11 +107,11 @@ class TestEfiUnsignedImage(object): + + output = u_boot_console.run_command_list([ + 'efidebug boot add -b 1 HELLO host 0:1 /helloworld.efi -s ""', +- 'efidebug boot next 1', ++ 'efidebug boot order 1', + 'bootefi bootmgr']) + assert '\'HELLO\' failed' in ''.join(output) + output = u_boot_console.run_command_list([ +- 'efidebug boot next 1', ++ 'efidebug boot order 1', + 'efidebug test bootmgr']) + assert 'efi_start_image() returned: 26' in ''.join(output) + assert 'Hello, world!' not in ''.join(output) +diff --git a/test/py/tests/test_fs/test_erofs.py b/test/py/tests/test_fs/test_erofs.py +index 458a52ba79..87ad8f2d5f 100644 +--- a/test/py/tests/test_fs/test_erofs.py ++++ b/test/py/tests/test_fs/test_erofs.py +@@ -196,6 +196,15 @@ def test_erofs(u_boot_console): + """ + build_dir = u_boot_console.config.build_dir + ++ # If the EFI subsystem is enabled and initialized, EFI subsystem tries to ++ # add EFI boot option when the new disk is detected. If there is no EFI ++ # System Partition exists, EFI subsystem outputs error messages and ++ # it ends up with test failure. ++ # Restart U-Boot to clear the previous state. ++ # TODO: Ideally EFI test cases need to be fixed, but it will ++ # increase the number of system reset. ++ u_boot_console.restart_uboot() ++ + try: + # setup test environment + make_erofs_image(build_dir) +diff --git a/test/py/tests/test_fs/test_squashfs/test_sqfs_ls.py b/test/py/tests/test_fs/test_squashfs/test_sqfs_ls.py +index 527a556ed8..a20a7d1a66 100644 +--- a/test/py/tests/test_fs/test_squashfs/test_sqfs_ls.py ++++ b/test/py/tests/test_fs/test_squashfs/test_sqfs_ls.py +@@ -118,6 +118,15 @@ def test_sqfs_ls(u_boot_console): + """ + build_dir = u_boot_console.config.build_dir + ++ # If the EFI subsystem is enabled and initialized, EFI subsystem tries to ++ # add EFI boot option when the new disk is detected. If there is no EFI ++ # System Partition exists, EFI subsystem outputs error messages and ++ # it ends up with test failure. ++ # Restart U-Boot to clear the previous state. ++ # TODO: Ideally EFI test cases need to be fixed, but it will ++ # increase the number of system reset. ++ u_boot_console.restart_uboot() ++ + # setup test environment + check_mksquashfs_version() + generate_sqfs_src_dir(build_dir) diff --git a/backport-uefi-distro-load-FDT-from-any-partition-on-boot-device.patch b/backport-uefi-distro-load-FDT-from-any-partition-on-boot-device.patch index 48cad2319b3846f64a0e478df0e1aee9390b9f6b..c84c6096770e1b0f5f2a392a14fc0ede8a80fcfd 100644 --- a/backport-uefi-distro-load-FDT-from-any-partition-on-boot-device.patch +++ b/backport-uefi-distro-load-FDT-from-any-partition-on-boot-device.patch @@ -1,35 +1,35 @@ -From 67c05a07288ef24b3ac9d013f35a0868d26a34c7 Mon Sep 17 00:00:00 2001 +From 4306c538d4a00dd1aa46c55c3c4005c2b0bf7cd5 Mon Sep 17 00:00:00 2001 From: Peter Robinson -Date: Tue, 18 Jun 2019 11:51:21 +0100 -Subject: [PATCH 1/2] distro: load FDT from any partition on boot device - +Date: Thu, 24 Nov 2022 12:57:55 +0000 +Subject: [PATCH] distro: load FDT from any partition on boot device + In the EFI_LOADER boot path, we were only checking the FAT partition containing the EFI payload for dtb files. But this is somewhat of a fiction. In reality there will be one small (V)FAT partition containing grub (or whatever the payload may be), and a second boot partition containing kernel/initrd/fdt (typically ext4). It is this second partition where we should be looking for a FDT to load. - + So instead scan all the partitions of the disk containing the EFI payload. This matches where grub looks for kernel/initrd (barring custom grub.cfg, in which case the user can use grub's 'devicetree' command to load the correct FDT). - + The other option is somehow passing the ${fdtfile} to grub so that it can load the FDT based on selected kernel version location (which grub knows) and SoC/board specific ${fdtfile} (which grub does not know). - + Signed-off-by: Rob Clark Signed-off-by: Peter Robinson --- - include/config_distro_bootcmd.h | 35 ++++++++++++++++++++++----------- - 1 file changed, 23 insertions(+), 12 deletions(-) + include/config_distro_bootcmd.h | 37 +++++++++++++++++++++------------ + 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/include/config_distro_bootcmd.h b/include/config_distro_bootcmd.h -index 2627c2a6a5..eadd1080b3 100644 +index fcb319a20ae..e71004fad9c 100644 --- a/include/config_distro_bootcmd.h +++ b/include/config_distro_bootcmd.h -@@ -148,26 +148,37 @@ +@@ -155,28 +155,39 @@ "fi\0" \ \ "load_efi_dtb=" \ @@ -44,11 +44,13 @@ index 2627c2a6a5..eadd1080b3 100644 + "scan_dev_for_dtb=" \ "setenv efi_fdtfile ${fdtfile}; " \ BOOTENV_EFI_SET_FDTFILE_FALLBACK \ + BOOTENV_RUN_EXTENSION_INIT \ - "for prefix in ${efi_dtb_prefixes}; do " \ - "if test -e ${devtype} " \ - "${devnum}:${distro_bootpart} " \ - "${prefix}${efi_fdtfile}; then " \ - "run load_efi_dtb; " \ +- BOOTENV_RUN_EXTENSION_APPLY \ - "fi;" \ - "done;" \ - "run boot_efi_bootmgr;" \ @@ -65,6 +67,7 @@ index 2627c2a6a5..eadd1080b3 100644 + "${devnum}:${dtb_devp} " \ + "${prefix}${efi_fdtfile};"\ + "run load_efi_dtb; " \ ++ BOOTENV_RUN_EXTENSION_APPLY \ + "fi;" \ + "done; " \ + "done; " \ @@ -79,4 +82,6 @@ index 2627c2a6a5..eadd1080b3 100644 "echo EFI LOAD FAILED: continuing...; " \ "fi; " \ "setenv efi_fdtfile\0" --- \ No newline at end of file +-- +2.38.1 + diff --git a/u-boot-2021.10.tar.bz2 b/u-boot-2024.01.tar.bz2 similarity index 62% rename from u-boot-2021.10.tar.bz2 rename to u-boot-2024.01.tar.bz2 index e7b569f79ecd38de4e707069d6e8f85e954a10dd..b5a2158b836f9896921ab0c13a8317132925253a 100644 Binary files a/u-boot-2021.10.tar.bz2 and b/u-boot-2024.01.tar.bz2 differ diff --git a/uboot-tools.spec b/uboot-tools.spec index 7cdd794196d2d3887c7448e832ae711126d9c556..c9ebe4edd5e71670c03c2009b52e7c58ccecab78 100644 --- a/uboot-tools.spec +++ b/uboot-tools.spec @@ -2,39 +2,32 @@ %global with_armv8 1 Name: uboot-tools -Version: 2021.10 -Release: 7 +Version: 2024.01 +Release: 1 Summary: tools for U-Boot License: GPL-2.0-or-later and Public Domain and GPL-2.0-only URL: http://www.denx.de/wiki/U-Boot Source0: https://ftp.denx.de/pub/u-boot/u-boot-%{version}.tar.bz2 -Source1: arm-boards -Source2: arm-chromebooks -Source3: aarch64-boards -Source4: aarch64-chromebooks -Source5: 10-devicetree.install - -Patch6000: backport-uefi-distro-load-FDT-from-any-partition-on-boot-device.patch -# RPi4llWinner improvements -Patch6001: backport-AllWinner-PineTab.patch -# RPI4 -Patch6002: backport-rpi-Enable-using-the-DT-provided-by-the-Raspberry-Pi.patch -Patch6003: backport-CVE-2022-34835.patch -Patch6004: backport-CVE-2022-33967.patch -Patch6005: backport-CVE-2022-30767.patch +Source1: aarch64-boards +Source2: 10-devicetree.install + +Patch1: backport-uefi-distro-load-FDT-from-any-partition-on-boot-device.patch +Patch2: backport-disable-VBE-by-default.patch +Patch3: backport-Provide-a-fallback-to-smbios-tables.patch +Patch4: backport-enable-bootmenu-by-default.patch +Patch5: backport-uefi-Boot-var-automatic-management-for-removable-medias.patch +Patch6: backport-rockchip-Add-initial-support-for-the-PinePhone-Pro.patch BuildRequires: bc dtc gcc make flex bison git-core openssl-devel BuildRequires: python3-unversioned-command python3-devel python3-setuptools -BuildRequires: python3-libfdt python3-pyelftools SDL-devel swig -BuildRequires: perl +BuildRequires: python3-libfdt python3-pyelftools SDL2-devel swig +BuildRequires: perl gnutls-devel ncurses-devel libuuid-devel # this required when /usr/bin/python link to python3 BuildRequires: python3-devel %if %{with_armv8} -%ifarch %{arm} aarch64 -BuildRequires: vboot-utils -%endif %ifarch aarch64 BuildRequires: arm-trusted-firmware-armv8 +BuildRequires: python3-pyelftools %endif %endif @@ -83,11 +76,14 @@ u-boot bootloader ELF images for use with qemu and other platforms %prep %autosetup -p1 -n u-boot-%{version} -cp %SOURCE1 %SOURCE2 %SOURCE3 %SOURCE4 . +cp %SOURCE1 . %build mkdir builds +%make_build HOSTCC="gcc $RPM_OPT_FLAGS" CROSS_COMPILE="" tools-only_defconfig O=builds/ +%make_build HOSTCC="gcc $RPM_OPT_FLAGS" CROSS_COMPILE="" tools-all O=builds/ + %if %{with_armv8} %ifarch aarch64 %{arm} for board in $(cat %{_arch}-boards) @@ -120,15 +116,12 @@ do cp /usr/share/arm-trusted-firmware/rk3399/* builds/$(echo $board)/ fi # End ATF - make $(echo $board)_defconfig O=builds/$(echo $board)/ - make HOSTCC="gcc $RPM_OPT_FLAGS" CROSS_COMPILE="" %{?_smp_mflags} V=1 O=builds/$(echo $board)/ + BINMAN_ALLOW_MISSING=1 make $(echo $board)_defconfig O=builds/$(echo $board)/ + BINMAN_ALLOW_MISSING=1 %make_build HOSTCC="gcc $RPM_OPT_FLAGS" CROSS_COMPILE="" O=builds/$(echo $board)/ done %endif %endif -make HOSTCC="gcc $RPM_OPT_FLAGS" %{?_smp_mflags} CROSS_COMPILE="" defconfig V=1 O=builds/ -j16 -make HOSTCC="gcc $RPM_OPT_FLAGS" %{?_smp_mflags} CROSS_COMPILE="" tools-all V=1 O=builds/ -j16 - %install mkdir -p %{buildroot}%{_bindir} mkdir -p %{buildroot}%{_sysconfdir} @@ -180,7 +173,7 @@ done %endif %endif -for tool in bmp_logo dumpimage env/fw_printenv fit_check_sign fit_info gdb/gdbcont gdb/gdbsend gen_eth_addr gen_ethaddr_crc img2srec mkenvimage mkimage mksunxiboot ncb proftool sunxi-spl-image-builder ubsha1 xway-swap-bytes +for tool in dumpimage env/fw_printenv fit_check_sign fit_info gdb/gdbcont gdb/gdbsend gen_eth_addr gen_ethaddr_crc ifwitool img2srec kwboot mkeficapsule mkenvimage mkimage mksunxiboot ncb proftool sunxi-spl-image-builder do install -p -m 0755 builds/tools/$tool %{buildroot}%{_bindir} done @@ -192,23 +185,8 @@ install -p -m 0755 builds/tools/env/fw_printenv %{buildroot}%{_bindir} install -p -m 0644 tools/env/fw_env.config %{buildroot}%{_sysconfdir} mkdir -p %{buildroot}/lib/kernel/install.d/ -install -p -m 0755 %{SOURCE5} %{buildroot}/lib/kernel/install.d/ - -mkdir -p builds/docs -cp -p board/hisilicon/hikey/README builds/docs/README.hikey -cp -p board/hisilicon/hikey/README builds/docs/README.hikey -cp -p board/Marvell/db-88f6820-gp/README builds/docs/README.mvebu-db-88f6820 -cp -p board/rockchip/evb_rk3399/README builds/docs/README.evb_rk3399 -cp -p board/solidrun/clearfog/README builds/docs/README.clearfog -cp -p board/solidrun/mx6cuboxi/README builds/docs/README.mx6cuboxi -cp -p board/sunxi/README.sunxi64 builds/docs/README.sunxi64 -cp -p board/sunxi/README.nand builds/docs/README.sunxi-nand -cp -p board/ti/am335x/README builds/docs/README.am335x -cp -p board/ti/omap5_uevm/README builds/docs/README.omap5_uevm -cp -p board/udoo/README builds/docs/README.udoo -cp -p board/wandboard/README builds/docs/README.wandboard -cp -p board/warp/README builds/docs/README.warp -cp -p board/warp7/README builds/docs/README.warp7 +install -p -m 0755 %{SOURCE2} %{buildroot}/lib/kernel/install.d/ + %files %defattr(-,root,root) @@ -238,13 +216,17 @@ cp -p board/warp7/README builds/docs/README.warp7 %endif %files help -%doc README doc/README.kwbimage doc/README.distro doc/README.gpt -%doc doc/README.odroid doc/README.rockchip doc/uImage.FIT -%doc builds/docs/* doc/arch/arm64.rst -%doc doc/board/amlogic/ doc/board/rockchip/ +%doc README doc/develop/distro.rst doc/README.gpt +%doc doc/develop/uefi doc/usage doc/arch/arm64.rst %{_mandir}/man1/mkimage.1* %changelog +* Thu Feb 29 2024 xingwei - 2024.01-1 +- Type:requirement +- ID:NA +- SUG:NA +- update to 2024.01 + * Wed Sep 28 2022 zhouwenpei - 2021.10-7 - fix CVE-2022-30767