Compare commits
10 Commits
2be69fdb80
...
33652e520b
Author | SHA1 | Date |
---|---|---|
David Abdurachmanov | 33652e520b | |
Peter Robinson | d91245dd1c | |
Peter Robinson | bda7eb94be | |
Peter Robinson | 59b16b4988 | |
Peter Robinson | 7f2aed2f98 | |
Peter Robinson | 622b0b089d | |
Peter Robinson | 9dc8c9ae3c | |
Peter Robinson | 69b6819f2e | |
Peter Robinson | 0c3fb4e23d | |
Peter Robinson | 6d54ac747c |
|
@ -1,41 +0,0 @@
|
|||
From ed5ffb3b53690a47333b931301a3765b9588b5dc Mon Sep 17 00:00:00 2001
|
||||
From: Peter Robinson <pbrobinson@gmail.com>
|
||||
Date: Sun, 11 Jun 2023 21:22:41 +0100
|
||||
Subject: [PATCH] Revert "rockchip: rockpro64: Build u-boot-rockchip-spi.bin"
|
||||
|
||||
This reverts commit 5713135ecc75660684ff3eb6cfba7bc11eb6433c.
|
||||
---
|
||||
configs/rockpro64-rk3399_defconfig | 3 ---
|
||||
1 file changed, 3 deletions(-)
|
||||
|
||||
diff --git a/configs/rockpro64-rk3399_defconfig b/configs/rockpro64-rk3399_defconfig
|
||||
index f41c0306790..0ca2cecade2 100644
|
||||
--- a/configs/rockpro64-rk3399_defconfig
|
||||
+++ b/configs/rockpro64-rk3399_defconfig
|
||||
@@ -11,7 +11,6 @@
|
||||
CONFIG_DEFAULT_DEVICE_TREE="rk3399-rockpro64"
|
||||
CONFIG_DM_RESET=y
|
||||
CONFIG_ROCKCHIP_RK3399=y
|
||||
-CONFIG_ROCKCHIP_SPI_IMAGE=y
|
||||
CONFIG_TARGET_ROCKPRO64_RK3399=y
|
||||
CONFIG_SPL_STACK=0x400000
|
||||
CONFIG_DEBUG_UART_BASE=0xFF1A0000
|
||||
@@ -21,7 +20,6 @@
|
||||
CONFIG_SYS_LOAD_ADDR=0x800800
|
||||
CONFIG_PCI=y
|
||||
CONFIG_DEBUG_UART=y
|
||||
-CONFIG_LTO=y
|
||||
CONFIG_SPL_FIT_SIGNATURE=y
|
||||
CONFIG_LEGACY_IMAGE_FORMAT=y
|
||||
CONFIG_BOOTSTAGE=y
|
||||
@@ -40,7 +38,6 @@
|
||||
CONFIG_SPL_STACK_R=y
|
||||
CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN=0x10000
|
||||
CONFIG_SPL_SPI_LOAD=y
|
||||
-CONFIG_SYS_SPI_U_BOOT_OFFS=0x60000
|
||||
CONFIG_TPL=y
|
||||
CONFIG_CMD_BOOTZ=y
|
||||
CONFIG_CMD_GPT=y
|
||||
--
|
||||
2.41.0
|
||||
|
|
@ -1,686 +0,0 @@
|
|||
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 <ilias.apalodimas@linaro.org>
|
||||
X-Patchwork-Id: 1873089
|
||||
Return-Path: <u-boot-bounces@lists.denx.de>
|
||||
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 <incoming@patchwork.ozlabs.org>; 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 <u-boot@lists.denx.de>; 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 <u-boot@lists.denx.de>; 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 <ilias.apalodimas@linaro.org>
|
||||
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 <ilias.apalodimas@linaro.org>, 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 <u-boot.lists.denx.de>
|
||||
List-Unsubscribe: <https://lists.denx.de/options/u-boot>,
|
||||
<mailto:u-boot-request@lists.denx.de?subject=unsubscribe>
|
||||
List-Archive: <https://lists.denx.de/pipermail/u-boot/>
|
||||
List-Post: <mailto:u-boot@lists.denx.de>
|
||||
List-Help: <mailto:u-boot-request@lists.denx.de?subject=help>
|
||||
List-Subscribe: <https://lists.denx.de/listinfo/u-boot>,
|
||||
<mailto:u-boot-request@lists.denx.de?subject=subscribe>
|
||||
Errors-To: u-boot-bounces@lists.denx.de
|
||||
Sender: "U-Boot" <u-boot-bounces@lists.denx.de>
|
||||
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
|
||||
<snip>
|
||||
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 <ilias.apalodimas@linaro.org>
|
||||
---
|
||||
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 <ilias.apalodimas@linaro.org>
|
||||
X-Patchwork-Id: 1873090
|
||||
Return-Path: <u-boot-bounces@lists.denx.de>
|
||||
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 <incoming@patchwork.ozlabs.org>; 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 <u-boot@lists.denx.de>; 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 <u-boot@lists.denx.de>; 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 <ilias.apalodimas@linaro.org>
|
||||
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 <ilias.apalodimas@linaro.org>, 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 <u-boot.lists.denx.de>
|
||||
List-Unsubscribe: <https://lists.denx.de/options/u-boot>,
|
||||
<mailto:u-boot-request@lists.denx.de?subject=unsubscribe>
|
||||
List-Archive: <https://lists.denx.de/pipermail/u-boot/>
|
||||
List-Post: <mailto:u-boot@lists.denx.de>
|
||||
List-Help: <mailto:u-boot-request@lists.denx.de?subject=help>
|
||||
List-Subscribe: <https://lists.denx.de/listinfo/u-boot>,
|
||||
<mailto:u-boot-request@lists.denx.de?subject=subscribe>
|
||||
Errors-To: u-boot-bounces@lists.denx.de
|
||||
Sender: "U-Boot" <u-boot-bounces@lists.denx.de>
|
||||
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
|
||||
<manufacturer,model>. 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 <ilias.apalodimas@linaro.org>
|
||||
---
|
||||
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 <dm.h>
|
||||
#include <env.h>
|
||||
#include <linux/stringify.h>
|
||||
+#include <linux/string.h>
|
||||
#include <mapmem.h>
|
||||
#include <smbios.h>
|
||||
#include <sysinfo.h>
|
||||
#include <tables_csum.h>
|
||||
#include <version.h>
|
||||
+#include <malloc.h>
|
||||
+#include <dm/ofnode.h>
|
||||
#ifdef CONFIG_CPU
|
||||
#include <cpu.h>
|
||||
#include <dm/uclass-internal.h>
|
||||
@@ -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;
|
|
@ -1,4 +1,5 @@
|
|||
a64-olinuxino
|
||||
a64-olinuxino-emmc
|
||||
amarula_a64_relic
|
||||
apple_m1
|
||||
bananapi_m2_plus_h5
|
||||
|
@ -8,6 +9,8 @@ dragonboard410c
|
|||
dragonboard820c
|
||||
dragonboard845c
|
||||
eaidk-610-rk3399
|
||||
emlid_neutis_n5_devboard
|
||||
evb-px5
|
||||
evb-rk3328
|
||||
evb-rk3399
|
||||
ficus-rk3399
|
||||
|
@ -39,17 +42,23 @@ nanopi_neo2
|
|||
nanopi-neo4-rk3399
|
||||
nanopi_neo_plus2
|
||||
nanopi_r1s_h5
|
||||
nanopi-r2c-plus-rk3328
|
||||
nanopi-r2c-rk3328
|
||||
nanopi-r2s-rk3328
|
||||
nanopi-r4s-rk3399
|
||||
oceanic_5205_5inmfd
|
||||
odroid-c2
|
||||
orangepi_3
|
||||
orangepi_lite2
|
||||
orangepi_one_plus
|
||||
orangepi_pc2
|
||||
orangepi_prime
|
||||
orangepi-r1-plus-lts-rk3328
|
||||
orangepi-r1-plus-rk3328
|
||||
orangepi-rk3399
|
||||
orangepi_win
|
||||
orangepi_zero2
|
||||
orangepi_zero3
|
||||
orangepi_zero_plus
|
||||
orangepi_zero_plus2
|
||||
p212
|
||||
|
@ -68,6 +77,8 @@ poplar
|
|||
puma-rk3399
|
||||
qemu_arm64
|
||||
roc-cc-rk3328
|
||||
rock-4c-plus-rk3399
|
||||
rock-4se-rk3399
|
||||
rock64-rk3328
|
||||
rock960-rk3399
|
||||
rock-pi-4c-rk3399
|
||||
|
@ -82,6 +93,8 @@ sopine_baseboard
|
|||
starqltechn
|
||||
tanix_tx6
|
||||
teres_i
|
||||
transpeed-8k618-t
|
||||
turris_mox
|
||||
vexpress_aemv8a_juno
|
||||
x96_mate
|
||||
xilinx_zynqmp_virt
|
||||
|
|
|
@ -0,0 +1,81 @@
|
|||
diff --git a/configs/qemu-riscv64_defconfig b/configs/qemu-riscv64_defconfig
|
||||
index b8ccf8f4..c4463115 100644
|
||||
--- a/configs/qemu-riscv64_defconfig
|
||||
+++ b/configs/qemu-riscv64_defconfig
|
||||
@@ -20,3 +20,12 @@ CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
||||
CONFIG_DM_MTD=y
|
||||
CONFIG_FLASH_SHOW_PROGRESS=0
|
||||
CONFIG_SYS_MAX_FLASH_BANKS=2
|
||||
+CONFIG_NR_CPUS=32
|
||||
+CONFIG_USE_PREBOOT=y
|
||||
+CONFIG_PREBOOT="cp.l ${fdtcontroladdr} ${fdt_addr_r} 0x20000;"
|
||||
+CONFIG_CMD_SBI=y
|
||||
+CONFIG_SYSRESET=y
|
||||
+CONFIG_SYSRESET_SBI=y
|
||||
+CONFIG_CMD_POWEROFF=y
|
||||
+CONFIG_SYSRESET_CMD_POWEROFF=y
|
||||
+CONFIG_FS_BTRFS=y
|
||||
diff --git a/configs/qemu-riscv64_smode_defconfig b/configs/qemu-riscv64_smode_defconfig
|
||||
index 6baad1de..71c443d2 100644
|
||||
--- a/configs/qemu-riscv64_smode_defconfig
|
||||
+++ b/configs/qemu-riscv64_smode_defconfig
|
||||
@@ -23,3 +23,8 @@ CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
||||
CONFIG_DM_MTD=y
|
||||
CONFIG_FLASH_SHOW_PROGRESS=0
|
||||
CONFIG_SYS_MAX_FLASH_BANKS=2
|
||||
+CONFIG_CMD_SBI=y
|
||||
+CONFIG_SYSRESET=y
|
||||
+CONFIG_SYSRESET_SBI=y
|
||||
+CONFIG_CMD_POWEROFF=y
|
||||
+CONFIG_SYSRESET_CMD_POWEROFF=y
|
||||
diff --git a/configs/qemu-riscv64_spl_defconfig b/configs/qemu-riscv64_spl_defconfig
|
||||
index f663a137..5365b874 100644
|
||||
--- a/configs/qemu-riscv64_spl_defconfig
|
||||
+++ b/configs/qemu-riscv64_spl_defconfig
|
||||
@@ -25,3 +25,6 @@ CONFIG_DM_MTD=y
|
||||
CONFIG_FLASH_SHOW_PROGRESS=0
|
||||
CONFIG_SYS_MAX_FLASH_BANKS=2
|
||||
# CONFIG_BINMAN_FDT is not set
|
||||
+CONFIG_NR_CPUS=32
|
||||
+CONFIG_USE_PREBOOT=y
|
||||
+CONFIG_PREBOOT="cp.l ${fdtcontroladdr} ${fdt_addr_r} 0x20000;"
|
||||
diff --git a/configs/sifive_unleashed_defconfig b/configs/sifive_unleashed_defconfig
|
||||
index f68171c9..9ff2666c 100644
|
||||
--- a/configs/sifive_unleashed_defconfig
|
||||
+++ b/configs/sifive_unleashed_defconfig
|
||||
@@ -40,3 +40,8 @@ CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
||||
CONFIG_SPL_DM_SEQ_ALIAS=y
|
||||
CONFIG_SPL_CLK=y
|
||||
CONFIG_DM_MTD=y
|
||||
+CONFIG_CMD_SBI=y
|
||||
+CONFIG_SYSRESET=y
|
||||
+CONFIG_SYSRESET_SBI=y
|
||||
+CONFIG_CMD_POWEROFF=y
|
||||
+CONFIG_SYSRESET_CMD_POWEROFF=y
|
||||
diff --git a/configs/sifive_unmatched_defconfig b/configs/sifive_unmatched_defconfig
|
||||
index 7c6c5b4d..c822f9d5 100644
|
||||
--- a/configs/sifive_unmatched_defconfig
|
||||
+++ b/configs/sifive_unmatched_defconfig
|
||||
@@ -63,3 +63,9 @@ CONFIG_SCSI=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_XHCI_HCD=y
|
||||
CONFIG_USB_XHCI_PCI=y
|
||||
+CONFIG_CMD_SBI=y
|
||||
+CONFIG_SYSRESET=y
|
||||
+CONFIG_SYSRESET_SBI=y
|
||||
+CONFIG_CMD_POWEROFF=y
|
||||
+CONFIG_SYSRESET_CMD_POWEROFF=y
|
||||
+CONFIG_FS_BTRFS=y
|
||||
diff --git a/include/configs/qemu-riscv.h b/include/configs/qemu-riscv.h
|
||||
index 2f594bfc..c3ce49ba 100644
|
||||
--- a/include/configs/qemu-riscv.h
|
||||
+++ b/include/configs/qemu-riscv.h
|
||||
@@ -31,8 +31,6 @@
|
||||
|
||||
#define CFG_EXTRA_ENV_SETTINGS \
|
||||
CFG_STD_DEVICES_SETTINGS \
|
||||
- "fdt_high=0xffffffffffffffff\0" \
|
||||
- "initrd_high=0xffffffffffffffff\0" \
|
||||
"kernel_addr_r=0x84000000\0" \
|
||||
"kernel_comp_addr_r=0x88000000\0" \
|
||||
"kernel_comp_size=0x4000000\0" \
|
|
@ -0,0 +1,6 @@
|
|||
qemu-riscv64
|
||||
qemu-riscv64_smode
|
||||
qemu-riscv64_spl
|
||||
sifive_unleashed
|
||||
sifive_unmatched
|
||||
starfive_visionfive2
|
|
@ -0,0 +1,166 @@
|
|||
From 367b3afc360e6fc92bd4cdca643ed2e4d928472d Mon Sep 17 00:00:00 2001
|
||||
From: Peter Robinson <pbrobinson@gmail.com>
|
||||
Date: Wed, 13 Mar 2024 19:14:50 +0000
|
||||
Subject: [PATCH] rockchip: Enable preboot start for pci/usb
|
||||
|
||||
Enable the preboot so nvme works OOTB
|
||||
|
||||
Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
|
||||
---
|
||||
configs/firefly-rk3399_defconfig | 2 ++
|
||||
configs/nanopc-t4-rk3399_defconfig | 2 ++
|
||||
configs/pinebook-pro-rk3399_defconfig | 1 +
|
||||
configs/roc-pc-mezzanine-rk3399_defconfig | 2 ++
|
||||
configs/rock-4c-plus-rk3399_defconfig | 2 ++
|
||||
configs/rock-4se-rk3399_defconfig | 2 ++
|
||||
configs/rock-pi-4-rk3399_defconfig | 2 ++
|
||||
configs/rock-pi-4c-rk3399_defconfig | 2 ++
|
||||
configs/rock-pi-n10-rk3399pro_defconfig | 2 ++
|
||||
configs/rock960-rk3399_defconfig | 1 +
|
||||
configs/rockpro64-rk3399_defconfig | 2 ++
|
||||
11 files changed, 20 insertions(+)
|
||||
|
||||
diff --git a/configs/firefly-rk3399_defconfig b/configs/firefly-rk3399_defconfig
|
||||
index b7c8e95b7b8..1e33083c138 100644
|
||||
--- a/configs/firefly-rk3399_defconfig
|
||||
+++ b/configs/firefly-rk3399_defconfig
|
||||
@@ -18,6 +18,8 @@ CONFIG_DEBUG_UART_CLOCK=24000000
|
||||
CONFIG_SYS_LOAD_ADDR=0x800800
|
||||
CONFIG_PCI=y
|
||||
CONFIG_DEBUG_UART=y
|
||||
+CONFIG_USE_PREBOOT=y
|
||||
+CONFIG_PREBOOT="pci enum; usb start; nvme scan;"
|
||||
CONFIG_DEFAULT_FDT_FILE="rockchip/rk3399-firefly.dtb"
|
||||
CONFIG_DISPLAY_BOARDINFO_LATE=y
|
||||
CONFIG_MISC_INIT_R=y
|
||||
diff --git a/configs/nanopc-t4-rk3399_defconfig b/configs/nanopc-t4-rk3399_defconfig
|
||||
index c18e7b1bd16..e9a18eb3e9f 100644
|
||||
--- a/configs/nanopc-t4-rk3399_defconfig
|
||||
+++ b/configs/nanopc-t4-rk3399_defconfig
|
||||
@@ -17,6 +17,8 @@ CONFIG_DEBUG_UART_CLOCK=24000000
|
||||
CONFIG_SYS_LOAD_ADDR=0x800800
|
||||
CONFIG_PCI=y
|
||||
CONFIG_DEBUG_UART=y
|
||||
+CONFIG_USE_PREBOOT=y
|
||||
+CONFIG_PREBOOT="pci enum; usb start; nvme scan;"
|
||||
CONFIG_DEFAULT_FDT_FILE="rockchip/rk3399-nanopc-t4.dtb"
|
||||
CONFIG_DISPLAY_BOARDINFO_LATE=y
|
||||
CONFIG_SPL_MAX_SIZE=0x2e000
|
||||
diff --git a/configs/pinebook-pro-rk3399_defconfig b/configs/pinebook-pro-rk3399_defconfig
|
||||
index de357415fbe..4168adb1935 100644
|
||||
--- a/configs/pinebook-pro-rk3399_defconfig
|
||||
+++ b/configs/pinebook-pro-rk3399_defconfig
|
||||
@@ -24,6 +24,7 @@ CONFIG_PCI=y
|
||||
CONFIG_DEBUG_UART=y
|
||||
CONFIG_BOOTDELAY=3
|
||||
CONFIG_USE_PREBOOT=y
|
||||
+CONFIG_PREBOOT="pci enum; usb start; nvme scan;"
|
||||
CONFIG_DEFAULT_FDT_FILE="rockchip/rk3399-pinebook-pro.dtb"
|
||||
CONFIG_DISPLAY_BOARDINFO_LATE=y
|
||||
CONFIG_MISC_INIT_R=y
|
||||
diff --git a/configs/roc-pc-mezzanine-rk3399_defconfig b/configs/roc-pc-mezzanine-rk3399_defconfig
|
||||
index de6539bedf4..61c6182d27e 100644
|
||||
--- a/configs/roc-pc-mezzanine-rk3399_defconfig
|
||||
+++ b/configs/roc-pc-mezzanine-rk3399_defconfig
|
||||
@@ -23,6 +23,8 @@ CONFIG_SPL_SPI=y
|
||||
CONFIG_SYS_LOAD_ADDR=0x800800
|
||||
CONFIG_PCI=y
|
||||
CONFIG_DEBUG_UART=y
|
||||
+CONFIG_USE_PREBOOT=y
|
||||
+CONFIG_PREBOOT="pci enum; usb start; nvme scan;"
|
||||
# CONFIG_ANDROID_BOOT_IMAGE is not set
|
||||
CONFIG_DEFAULT_FDT_FILE="rockchip/rk3399-roc-pc-mezzanine.dtb"
|
||||
CONFIG_DISPLAY_BOARDINFO_LATE=y
|
||||
diff --git a/configs/rock-4c-plus-rk3399_defconfig b/configs/rock-4c-plus-rk3399_defconfig
|
||||
index 18525c8bf50..89e9f69eb63 100644
|
||||
--- a/configs/rock-4c-plus-rk3399_defconfig
|
||||
+++ b/configs/rock-4c-plus-rk3399_defconfig
|
||||
@@ -18,6 +18,8 @@ CONFIG_DEBUG_UART_CLOCK=24000000
|
||||
CONFIG_SYS_LOAD_ADDR=0x800800
|
||||
CONFIG_PCI=y
|
||||
CONFIG_DEBUG_UART=y
|
||||
+CONFIG_USE_PREBOOT=y
|
||||
+CONFIG_PREBOOT="pci enum; usb start; nvme scan;"
|
||||
# CONFIG_ANDROID_BOOT_IMAGE is not set
|
||||
CONFIG_DEFAULT_FDT_FILE="rockchip/rk3399-rock-4c-plus.dtb"
|
||||
CONFIG_DISPLAY_BOARDINFO_LATE=y
|
||||
diff --git a/configs/rock-4se-rk3399_defconfig b/configs/rock-4se-rk3399_defconfig
|
||||
index 171de23ec8f..d2769a2f516 100644
|
||||
--- a/configs/rock-4se-rk3399_defconfig
|
||||
+++ b/configs/rock-4se-rk3399_defconfig
|
||||
@@ -18,6 +18,8 @@ CONFIG_DEBUG_UART_CLOCK=24000000
|
||||
CONFIG_SYS_LOAD_ADDR=0x800800
|
||||
CONFIG_PCI=y
|
||||
CONFIG_DEBUG_UART=y
|
||||
+CONFIG_USE_PREBOOT=y
|
||||
+CONFIG_PREBOOT="pci enum; usb start; nvme scan;"
|
||||
# CONFIG_ANDROID_BOOT_IMAGE is not set
|
||||
CONFIG_SPL_FIT_SIGNATURE=y
|
||||
CONFIG_LEGACY_IMAGE_FORMAT=y
|
||||
diff --git a/configs/rock-pi-4-rk3399_defconfig b/configs/rock-pi-4-rk3399_defconfig
|
||||
index 83fc4ad7dab..24ca614fe5a 100644
|
||||
--- a/configs/rock-pi-4-rk3399_defconfig
|
||||
+++ b/configs/rock-pi-4-rk3399_defconfig
|
||||
@@ -18,6 +18,8 @@ CONFIG_DEBUG_UART_CLOCK=24000000
|
||||
CONFIG_SYS_LOAD_ADDR=0x800800
|
||||
CONFIG_PCI=y
|
||||
CONFIG_DEBUG_UART=y
|
||||
+CONFIG_USE_PREBOOT=y
|
||||
+CONFIG_PREBOOT="pci enum; usb start; nvme scan;"
|
||||
# CONFIG_ANDROID_BOOT_IMAGE is not set
|
||||
CONFIG_SPL_FIT_SIGNATURE=y
|
||||
CONFIG_LEGACY_IMAGE_FORMAT=y
|
||||
diff --git a/configs/rock-pi-4c-rk3399_defconfig b/configs/rock-pi-4c-rk3399_defconfig
|
||||
index 089344097e0..83c2cfba157 100644
|
||||
--- a/configs/rock-pi-4c-rk3399_defconfig
|
||||
+++ b/configs/rock-pi-4c-rk3399_defconfig
|
||||
@@ -18,6 +18,8 @@ CONFIG_DEBUG_UART_CLOCK=24000000
|
||||
CONFIG_SYS_LOAD_ADDR=0x800800
|
||||
CONFIG_PCI=y
|
||||
CONFIG_DEBUG_UART=y
|
||||
+CONFIG_USE_PREBOOT=y
|
||||
+CONFIG_PREBOOT="pci enum; usb start; nvme scan;"
|
||||
# CONFIG_ANDROID_BOOT_IMAGE is not set
|
||||
CONFIG_DEFAULT_FDT_FILE="rockchip/rk3399-rock-pi-4c.dtb"
|
||||
CONFIG_DISPLAY_BOARDINFO_LATE=y
|
||||
diff --git a/configs/rock-pi-n10-rk3399pro_defconfig b/configs/rock-pi-n10-rk3399pro_defconfig
|
||||
index dc4b3b40380..db34bc70a22 100644
|
||||
--- a/configs/rock-pi-n10-rk3399pro_defconfig
|
||||
+++ b/configs/rock-pi-n10-rk3399pro_defconfig
|
||||
@@ -18,6 +18,8 @@ CONFIG_DEBUG_UART_CLOCK=24000000
|
||||
CONFIG_SYS_LOAD_ADDR=0x800800
|
||||
CONFIG_PCI=y
|
||||
CONFIG_DEBUG_UART=y
|
||||
+CONFIG_USE_PREBOOT=y
|
||||
+CONFIG_PREBOOT="pci enum; usb start; nvme scan;"
|
||||
# CONFIG_ANDROID_BOOT_IMAGE is not set
|
||||
CONFIG_DEFAULT_FDT_FILE="rockchip/rk3399pro-rock-pi-n10.dtb"
|
||||
# CONFIG_CONSOLE_MUX is not set
|
||||
diff --git a/configs/rock960-rk3399_defconfig b/configs/rock960-rk3399_defconfig
|
||||
index b93dda56593..6d1b352a855 100644
|
||||
--- a/configs/rock960-rk3399_defconfig
|
||||
+++ b/configs/rock960-rk3399_defconfig
|
||||
@@ -17,6 +17,7 @@ CONFIG_SYS_LOAD_ADDR=0x800800
|
||||
CONFIG_PCI=y
|
||||
CONFIG_DEBUG_UART=y
|
||||
CONFIG_USE_PREBOOT=y
|
||||
+CONFIG_PREBOOT="pci enum; usb start; nvme scan;"
|
||||
CONFIG_DEFAULT_FDT_FILE="rockchip/rk3399-rock960.dtb"
|
||||
CONFIG_SYS_PBSIZE=1052
|
||||
CONFIG_DISPLAY_BOARDINFO_LATE=y
|
||||
diff --git a/configs/rockpro64-rk3399_defconfig b/configs/rockpro64-rk3399_defconfig
|
||||
index 711541f8462..8c1ea1a0b63 100644
|
||||
--- a/configs/rockpro64-rk3399_defconfig
|
||||
+++ b/configs/rockpro64-rk3399_defconfig
|
||||
@@ -21,6 +21,8 @@ CONFIG_SPL_SPI=y
|
||||
CONFIG_SYS_LOAD_ADDR=0x800800
|
||||
CONFIG_PCI=y
|
||||
CONFIG_DEBUG_UART=y
|
||||
+CONFIG_USE_PREBOOT=y
|
||||
+CONFIG_PREBOOT="pci enum; usb start; nvme scan;"
|
||||
CONFIG_SPL_FIT_SIGNATURE=y
|
||||
CONFIG_LEGACY_IMAGE_FORMAT=y
|
||||
CONFIG_BOOTSTAGE=y
|
||||
--
|
||||
2.44.0
|
||||
|
|
@ -1,43 +0,0 @@
|
|||
From 1af5e42f170d2c4b944beeb875b80ec7f061038a Mon Sep 17 00:00:00 2001
|
||||
From: Ondrej Jirman <megi@xff.cz>
|
||||
Date: Thu, 25 May 2023 15:27:08 +0200
|
||||
Subject: [PATCH] pinephone-pro: Fix I/O port voltage (GPIO3D4A is 1.8V)
|
||||
|
||||
This fixes access to camera sensor over I2C during probe time in
|
||||
the kernel. (Kernel will fix I/0 port voltage by itself, but the
|
||||
timing depends on probe order of the drivers, so the fix can
|
||||
come after the camera sensor driver already failed to probe.)
|
||||
|
||||
Signed-off-by: Ondrej Jirman <megi@xff.cz>
|
||||
Cc: Kever Yang <kever.yang@rock-chips.com>
|
||||
Reviewed-by: Kever Yang <kever.yang@rock-chips.com>
|
||||
---
|
||||
board/pine64/pinephone-pro-rk3399/pinephone-pro-rk3399.c | 6 ++++--
|
||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/board/pine64/pinephone-pro-rk3399/pinephone-pro-rk3399.c b/board/pine64/pinephone-pro-rk3399/pinephone-pro-rk3399.c
|
||||
index eb639cd0d07..b6ccbb9c1c4 100644
|
||||
--- a/board/pine64/pinephone-pro-rk3399/pinephone-pro-rk3399.c
|
||||
+++ b/board/pine64/pinephone-pro-rk3399/pinephone-pro-rk3399.c
|
||||
@@ -15,7 +15,8 @@
|
||||
#include <asm/arch-rockchip/misc.h>
|
||||
#include <power/regulator.h>
|
||||
|
||||
-#define GRF_IO_VSEL_BT565_SHIFT 0
|
||||
+#define GRF_IO_VSEL_BT565_GPIO2AB 1
|
||||
+#define GRF_IO_VSEL_AUDIO_GPIO3D4A 2
|
||||
#define PMUGRF_CON0_VSEL_SHIFT 8
|
||||
|
||||
#ifndef CONFIG_SPL_BUILD
|
||||
@@ -48,7 +49,8 @@ static void setup_iodomain(void)
|
||||
syscon_get_first_range(ROCKCHIP_SYSCON_PMUGRF);
|
||||
|
||||
/* BT565 is in 1.8v domain */
|
||||
- rk_setreg(&grf->io_vsel, 1 << GRF_IO_VSEL_BT565_SHIFT);
|
||||
+ rk_setreg(&grf->io_vsel,
|
||||
+ GRF_IO_VSEL_BT565_GPIO2AB | GRF_IO_VSEL_AUDIO_GPIO3D4A);
|
||||
|
||||
/* Set GPIO1 1.8v/3.0v source select to PMU1830_VOL */
|
||||
rk_setreg(&pmugrf->soc_con0, 1 << PMUGRF_CON0_VSEL_SHIFT);
|
||||
--
|
||||
2.41.0
|
|
@ -1,136 +0,0 @@
|
|||
From 2d9350c50a9659cc2a247cdea07f0eacffa3cb32 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Robinson <pbrobinson@gmail.com>
|
||||
Date: Sun, 12 Jun 2022 14:44:44 +0100
|
||||
Subject: [PATCH] rockchip: pinebook-pro: minor SPI flash fixes
|
||||
|
||||
Set a default offset for environment so it doesn't write it to
|
||||
unexpected locations, drop unneeded mtd config option.
|
||||
|
||||
Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
|
||||
---
|
||||
configs/pinebook-pro-rk3399_defconfig | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/configs/pinebook-pro-rk3399_defconfig b/configs/pinebook-pro-rk3399_defconfig
|
||||
index 8ca1d0708f9..aaa52c6ea70 100644
|
||||
--- a/configs/pinebook-pro-rk3399_defconfig
|
||||
+++ b/configs/pinebook-pro-rk3399_defconfig
|
||||
@@ -5,6 +5,7 @@ CONFIG_ARCH_ROCKCHIP=y
|
||||
CONFIG_SYS_TEXT_BASE=0x00200000
|
||||
CONFIG_NR_DRAM_BANKS=1
|
||||
CONFIG_ENV_SIZE=0x8000
|
||||
+CONFIG_ENV_OFFSET=0x3F8000
|
||||
CONFIG_DEFAULT_DEVICE_TREE="rk3399-pinebook-pro"
|
||||
CONFIG_ROCKCHIP_RK3399=y
|
||||
CONFIG_TARGET_PINEBOOK_PRO_RK3399=y
|
||||
@@ -22,7 +23,6 @@ CONFIG_MISC_INIT_R=y
|
||||
# CONFIG_SPL_RAW_IMAGE_SUPPORT is not set
|
||||
CONFIG_SPL_STACK_R=y
|
||||
CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN=0x10000
|
||||
-CONFIG_SPL_MTD_SUPPORT=y
|
||||
CONFIG_SPL_SPI_LOAD=y
|
||||
CONFIG_TPL=y
|
||||
CONFIG_CMD_BOOTZ=y
|
||||
--
|
||||
2.36.1
|
||||
|
||||
From 27ba8e2f904063aec5196f86dd0332bf58a60259 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Robinson <pbrobinson@gmail.com>
|
||||
Date: Sun, 12 Jun 2022 14:50:42 +0100
|
||||
Subject: [PATCH] rockchip: rockpro64: enable leds
|
||||
|
||||
The Rockpro64 has some GPIO leds so let's enable them so the
|
||||
user gets some output in early boot.
|
||||
|
||||
Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
|
||||
---
|
||||
configs/rockpro64-rk3399_defconfig | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/configs/rockpro64-rk3399_defconfig b/configs/rockpro64-rk3399_defconfig
|
||||
index e6f7a8469a3..b0c3527fab0 100644
|
||||
--- a/configs/rockpro64-rk3399_defconfig
|
||||
+++ b/configs/rockpro64-rk3399_defconfig
|
||||
@@ -42,6 +42,8 @@ CONFIG_AHCI_PCI=y
|
||||
CONFIG_SATA_SIL=y
|
||||
CONFIG_ROCKCHIP_GPIO=y
|
||||
CONFIG_SYS_I2C_ROCKCHIP=y
|
||||
+CONFIG_LED=y
|
||||
+CONFIG_LED_GPIO=y
|
||||
CONFIG_MISC=y
|
||||
CONFIG_ROCKCHIP_EFUSE=y
|
||||
CONFIG_MMC_DW=y
|
||||
--
|
||||
2.36.1
|
||||
|
||||
From 8bca90472e0d71e5344711b6f5fe8dc95e19af5a Mon Sep 17 00:00:00 2001
|
||||
From: Peter Robinson <pbrobinson@gmail.com>
|
||||
Date: Sun, 12 Jun 2022 15:12:47 +0100
|
||||
Subject: [PATCH] rockchip: pinebook-pro: sync PBP dtb to 5.18
|
||||
|
||||
Sync the pinebook pro to upstream 5.18, in particular this brings
|
||||
brings in a fix so the DP is disabled so Linux will actually boot.
|
||||
|
||||
Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
|
||||
---
|
||||
arch/arm/dts/rk3399-pinebook-pro.dts | 11 +++--------
|
||||
1 file changed, 3 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/dts/rk3399-pinebook-pro.dts b/arch/arm/dts/rk3399-pinebook-pro.dts
|
||||
index 2b5f001ff4a..d6b68d77d63 100644
|
||||
--- a/arch/arm/dts/rk3399-pinebook-pro.dts
|
||||
+++ b/arch/arm/dts/rk3399-pinebook-pro.dts
|
||||
@@ -17,6 +17,7 @@
|
||||
/ {
|
||||
model = "Pine64 Pinebook Pro";
|
||||
compatible = "pine64,pinebook-pro", "rockchip,rk3399";
|
||||
+ chassis-type = "laptop";
|
||||
|
||||
aliases {
|
||||
mmc0 = &sdio0;
|
||||
@@ -242,12 +243,12 @@
|
||||
vdd_log: vdd-log {
|
||||
compatible = "pwm-regulator";
|
||||
pwms = <&pwm2 0 25000 1>;
|
||||
+ pwm-supply = <&vcc_sysin>;
|
||||
regulator-name = "vdd_log";
|
||||
regulator-always-on;
|
||||
regulator-boot-on;
|
||||
regulator-min-microvolt = <800000>;
|
||||
regulator-max-microvolt = <1400000>;
|
||||
- vin-supply = <&vcc_sysin>;
|
||||
|
||||
regulator-state-mem {
|
||||
regulator-on-in-suspend;
|
||||
@@ -385,10 +386,6 @@
|
||||
};
|
||||
};
|
||||
|
||||
-&cdn_dp {
|
||||
- status = "okay";
|
||||
-};
|
||||
-
|
||||
&cpu_b0 {
|
||||
cpu-supply = <&vdd_cpu_b>;
|
||||
};
|
||||
@@ -475,8 +472,6 @@
|
||||
vcc10-supply = <&vcc_sysin>;
|
||||
vcc11-supply = <&vcc_sysin>;
|
||||
vcc12-supply = <&vcc3v3_sys>;
|
||||
- vcc13-supply = <&vcc_sysin>;
|
||||
- vcc14-supply = <&vcc_sysin>;
|
||||
|
||||
regulators {
|
||||
/* rk3399 center logic supply */
|
||||
@@ -711,7 +706,7 @@
|
||||
|
||||
connector {
|
||||
compatible = "usb-c-connector";
|
||||
- data-role = "host";
|
||||
+ data-role = "dual";
|
||||
label = "USB-C";
|
||||
op-sink-microwatt = <1000000>;
|
||||
power-role = "dual";
|
||||
--
|
||||
2.36.1
|
||||
|
File diff suppressed because it is too large
Load Diff
2
sources
2
sources
|
@ -1 +1 @@
|
|||
SHA512 (u-boot-2024.01.tar.bz2) = 45bd093ba3bda23e43cdde83d8656c1ee1348ac2886ecff1fee475f101ac4965a5be6565408fa5b990c723f3fdc833edfca60a719f735a43040cd14a1b59a88b
|
||||
SHA512 (u-boot-2024.04-rc4.tar.bz2) = 4a546eb790d54c9aadd423888baa5c909249afeedfd71f85c8b424421c08463b0e65f3addfc2d00f4a38fb56d8051ed70c8368d49a89bd33ec69773474d4d62d
|
||||
|
|
140
uboot-tools.spec
140
uboot-tools.spec
|
@ -1,13 +1,16 @@
|
|||
#global candidate rc0
|
||||
%global candidate rc4
|
||||
%if 0%{?rhel}
|
||||
%bcond_with toolsonly
|
||||
%else
|
||||
%bcond_without toolsonly
|
||||
%endif
|
||||
|
||||
# Set it to "opensbi" (stable) or opensbi-unstable (unstable, git)
|
||||
%global opensbi opensbi-unstable
|
||||
|
||||
Name: uboot-tools
|
||||
Version: 2024.01
|
||||
Release: 2%{?candidate:.%{candidate}}%{?dist}
|
||||
Version: 2024.04
|
||||
Release: 0.7%{?candidate:.%{candidate}}.0.riscv64%{?dist}
|
||||
Epoch: 1
|
||||
Summary: U-Boot utilities
|
||||
License: GPLv2+ BSD LGPL-2.1+ LGPL-2.0+
|
||||
|
@ -16,22 +19,29 @@ URL: http://www.denx.de/wiki/U-Boot
|
|||
ExcludeArch: s390x
|
||||
Source0: https://ftp.denx.de/pub/u-boot/u-boot-%{version}%{?candidate:-%{candidate}}.tar.bz2
|
||||
Source1: aarch64-boards
|
||||
Source2: riscv64-boards
|
||||
|
||||
# This is now legacy, most devices use bootflow, we keep this for the laggards
|
||||
Patch1: uefi-distro-load-FDT-from-any-partition-on-boot-device.patch
|
||||
Patch2: disable-VBE-by-default.patch
|
||||
Patch3: Provide-a-fallback-to-smbios-tables.patch
|
||||
# Identify VFAT partitions as ESP, allows EFI setvar on our images
|
||||
Patch2: uefi-Add-all-options-for-EFI-System-Partitions.patch
|
||||
# New function to find fdt for loading from disk
|
||||
Patch3: uefi-initial-find_fdt_location-for-finding-the-DT-on-disk.patch
|
||||
# Fedora patches to enable/disable features
|
||||
Patch4: disable-VBE-by-default.patch
|
||||
Patch5: enable-bootmenu-by-default.patch
|
||||
Patch6: uefi-Boot-var-automatic-management-for-removable-medias.patch
|
||||
Patch7: Add-video-damage-tracking.patch
|
||||
# Should be upstream but it's taking time
|
||||
Patch6: Add-video-damage-tracking.patch
|
||||
|
||||
# Board fixes and enablement
|
||||
# RPi - uses RPI firmware device tree for HAT support
|
||||
Patch10: rpi-Switch-to-OF_HAS_PRIOR_STAGE-by-default.patch
|
||||
# Rockchips improvements
|
||||
Patch11: rockchip-Add-initial-support-for-the-PinePhone-Pro.patch
|
||||
# Lots more to do, mostly untested, definitely unsupported
|
||||
Patch12: rpi5-initial-support.patch
|
||||
#Patch12: 0001-Revert-rockchip-rockpro64-Build-u-boot-rockchip-spi..patch
|
||||
Patch12: rockchip-Enable-preboot-start-for-pci-usb.patch
|
||||
|
||||
# RISCV (riscv64):
|
||||
Patch20: improve-riscv64-configs.patch
|
||||
|
||||
BuildRequires: bc
|
||||
BuildRequires: bison
|
||||
|
@ -56,6 +66,9 @@ BuildRequires: python3-pyelftools
|
|||
%endif
|
||||
%endif
|
||||
Requires: dtc
|
||||
%ifarch riscv64
|
||||
BuildRequires: %{opensbi}
|
||||
%endif
|
||||
|
||||
%description
|
||||
This package contains a few U-Boot utilities - mkimage for creating boot images
|
||||
|
@ -70,12 +83,21 @@ BuildArch: noarch
|
|||
%description -n uboot-images-armv8
|
||||
U-Boot firmware binaries for aarch64 boards
|
||||
%endif
|
||||
|
||||
%ifarch riscv64
|
||||
%package -n uboot-images-riscv64
|
||||
Summary: U-Boot firmware images for riscv64 boards
|
||||
BuildArch: noarch
|
||||
|
||||
%description -n uboot-images-riscv64
|
||||
U-Boot firmware binaries for riscv64 boards
|
||||
%endif
|
||||
%endif
|
||||
|
||||
%prep
|
||||
%autosetup -p1 -n u-boot-%{version}%{?candidate:-%{candidate}}
|
||||
|
||||
cp %SOURCE1 .
|
||||
cp %SOURCE1 %SOURCE2 .
|
||||
|
||||
%build
|
||||
mkdir builds
|
||||
|
@ -84,29 +106,39 @@ mkdir builds
|
|||
%make_build HOSTCC="gcc $RPM_OPT_FLAGS" CROSS_COMPILE="" tools-all O=builds/
|
||||
|
||||
%if %{with toolsonly}
|
||||
%ifarch aarch64
|
||||
# OpenSBI firmware is distributed in U-Boot SPL images
|
||||
%ifarch riscv64
|
||||
export OPENSBI=%{_datadir}/%{opensbi}/generic/firmware/fw_dynamic.bin
|
||||
%endif
|
||||
|
||||
%ifarch aarch64 riscv64
|
||||
for board in $(cat %{_arch}-boards)
|
||||
do
|
||||
echo "Building board: $board"
|
||||
mkdir builds/$(echo $board)/
|
||||
|
||||
# ATF selection, needs improving, suggestions of ATF SoC to Board matrix welcome
|
||||
sun50i=(a64-olinuxino amarula_a64_relic bananapi_m2_plus_h5 bananapi_m64 libretech_all_h3_cc_h5 nanopi_a64 nanopi_neo2 nanopi_neo_plus2 orangepi_pc2 orangepi_prime orangepi_win orangepi_zero_plus orangepi_zero_plus2 pine64-lts pine64_plus pinebook pinephone pinetab sopine_baseboard teres_i)
|
||||
sun50i=(a64-olinuxino a64-olinuxino-emmc amarula_a64_relic bananapi_m2_plus_h5 bananapi_m64 libretech_all_h3_cc_h5 nanopi_a64 nanopi_neo2 nanopi_neo_plus2 oceanic_5205_5inmfd orangepi_pc2 orangepi_prime orangepi_win orangepi_zero_plus orangepi_zero_plus2 pine64-lts pine64_plus pinebook pinephone pinetab sopine_baseboard teres_i)
|
||||
if [[ " ${sun50i[*]} " == *" $board "* ]]; then
|
||||
echo "Board: $board using sun50i_a64"
|
||||
cp /usr/share/arm-trusted-firmware/sun50i_a64/* builds/$(echo $board)/
|
||||
cp /usr/share/arm-trusted-firmware/sun50i_a64/bl31.bin builds/$(echo $board)/atf-bl31
|
||||
fi
|
||||
sun50h6=(beelink_gs1 orangepi_3 orangepi_lite2 orangepi_one_plus orangepi_zero2 pine_h64 tanix_tx6)
|
||||
sun50h6=(beelink_gs1 emlid_neutis_n5_devboard orangepi_3 orangepi_lite2 orangepi_one_plus pine_h64 tanix_tx6)
|
||||
if [[ " ${sun50h6[*]} " == *" $board "* ]]; then
|
||||
echo "Board: $board using sun50i_h6"
|
||||
cp /usr/share/arm-trusted-firmware/sun50i_h6/* builds/$(echo $board)/
|
||||
cp /usr/share/arm-trusted-firmware/sun50i_h6/bl31.bin builds/$(echo $board)/atf-bl31
|
||||
fi
|
||||
rk3328=(evb-rk3328 nanopi-r2s-rk3328 rock64-rk3328 rock-pi-e-rk3328 roc-cc-rk3328)
|
||||
sun50i_h616=(orangepi_zero2 orangepi_zero3 transpeed-8k618-t x96_mate)
|
||||
if [[ " ${sun50i_h616[*]} " == *" $board "* ]]; then
|
||||
echo "Board: $board using sun50i_h616"
|
||||
cp /usr/share/arm-trusted-firmware/sun50i_h616/bl31.bin builds/$(echo $board)/atf-bl31
|
||||
fi
|
||||
rk3328=(evb-rk3328 nanopi-r2c-plus-rk3328 nanopi-r2c-rk3328 nanopi-r2s-rk3328 orangepi-r1-plus-lts-rk3328 orangepi-r1-plus-rk3328 roc-cc-rk3328 rock64-rk3328 rock-pi-e-rk3328)
|
||||
if [[ " ${rk3328[*]} " == *" $board "* ]]; then
|
||||
echo "Board: $board using rk3328"
|
||||
cp /usr/share/arm-trusted-firmware/rk3328/bl31.elf builds/$(echo $board)/atf-bl31
|
||||
fi
|
||||
rk3399=(evb-rk3399 ficus-rk3399 firefly-rk3399 khadas-edge-captain-rk3399 khadas-edge-rk3399 khadas-edge-v-rk3399 leez-rk3399 nanopc-t4-rk3399 nanopi-m4-2gb-rk3399 nanopi-m4b-rk3399 nanopi-m4-rk3399 nanopi-neo4-rk3399 nanopi-r4s-rk3399 orangepi-rk3399 pinebook-pro-rk3399 pinephone-pro-rk3399 puma-rk3399 rock960-rk3399 rock-pi-4c-rk3399 rock-pi-4-rk3399 rock-pi-n10-rk3399pro rockpro64-rk3399 roc-pc-mezzanine-rk3399 roc-pc-rk3399 eaidk-610-rk3399)
|
||||
rk3399=(eaidk-610-rk3399 evb-rk3399 ficus-rk3399 firefly-rk3399 khadas-edge-captain-rk3399 khadas-edge-rk3399 khadas-edge-v-rk3399 leez-rk3399 nanopc-t4-rk3399 nanopi-m4-2gb-rk3399 nanopi-m4b-rk3399 nanopi-m4-rk3399 nanopi-neo4-rk3399 nanopi-r4s-rk3399 orangepi-rk3399 pinebook-pro-rk3399 pinephone-pro-rk3399 puma-rk3399 rock960-rk3399 rock-pi-4c-rk3399 rock-pi-4-rk3399 rock-pi-n10-rk3399pro rockpro64-rk3399 roc-pc-mezzanine-rk3399 roc-pc-rk3399)
|
||||
if [[ " ${rk3399[*]} " == *" $board "* ]]; then
|
||||
echo "Board: $board using rk3399"
|
||||
cp /usr/share/arm-trusted-firmware/rk3399/* builds/$(echo $board)/
|
||||
|
@ -117,17 +149,6 @@ do
|
|||
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)/
|
||||
|
||||
# build spi images for rockchip boards with SPI flash
|
||||
rkspi=(rock64-rk3328)
|
||||
if [[ " ${rkspi[*]} " == *" $board "* ]]; then
|
||||
echo "Board: $board with SPI flash"
|
||||
builds/$(echo $board)/tools/mkimage -n rk3328 -T rkspi -d builds/$(echo $board)/tpl/u-boot-tpl.bin:builds/$(echo $board)/spl/u-boot-spl.bin builds/$(echo $board)/idbloader.spi
|
||||
fi
|
||||
rkspi=(evb-rk3399 khadas-edge-captain-rk3399 khadas-edge-rk3399 khadas-edge-v-rk3399 nanopc-t4-rk3399 pinebook-pro-rk3399 pinephone-pro-rk3399 rockpro64-rk3399 roc-pc-mezzanine-rk3399 roc-pc-rk3399)
|
||||
if [[ " ${rkspi[*]} " == *" $board "* ]]; then
|
||||
echo "Board: $board with SPI flash"
|
||||
builds/$(echo $board)/tools/mkimage -n rk3399 -T rkspi -d builds/$(echo $board)/tpl/u-boot-tpl.bin:builds/$(echo $board)/spl/u-boot-spl.bin builds/$(echo $board)/idbloader.spi
|
||||
fi
|
||||
done
|
||||
|
||||
%endif
|
||||
|
@ -139,42 +160,27 @@ mkdir -p %{buildroot}%{_mandir}/man1
|
|||
mkdir -p %{buildroot}%{_datadir}/uboot/
|
||||
|
||||
%if %{with toolsonly}
|
||||
%ifarch aarch64
|
||||
%ifarch aarch64 riscv64
|
||||
for board in $(ls builds)
|
||||
do
|
||||
mkdir -p %{buildroot}%{_datadir}/uboot/$(echo $board)/
|
||||
for file in u-boot.bin u-boot.dtb u-boot.img u-boot-dtb.img u-boot.itb u-boot-sunxi-with-spl.bin u-boot-rockchip.bin idbloader.img idbloader.spi spl/boot.bin spl/sunxi-spl.bin
|
||||
for file in u-boot.bin u-boot.img u-boot-dtb.img u-boot.itb u-boot-sunxi-with-spl.bin u-boot-rockchip-spi.bin u-boot-rockchip.bin idbloader.img idbloader-spi.img spl/boot.bin spl/u-boot-spl.bin
|
||||
do
|
||||
if [ -f builds/$(echo $board)/$(echo $file) ]; then
|
||||
install -p -m 0644 builds/$(echo $board)/$(echo $file) %{buildroot}%{_datadir}/uboot/$(echo $board)/
|
||||
install -pD -m 0644 builds/$(echo $board)/$(echo $file) %{buildroot}%{_datadir}/uboot/$(echo $board)/$(echo $file)
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
# For Apple M1 we also need the nodtb variant
|
||||
install -p -m 0644 builds/apple_m1/u-boot-nodtb.bin %{buildroot}%{_datadir}/uboot/apple_m1/u-boot-nodtb.bin
|
||||
%endif
|
||||
# For Apple M-series we also need the nodtb variant
|
||||
install -pD -m 0644 builds/apple_m1/u-boot-nodtb.bin %{buildroot}%{_datadir}/uboot/apple_m1/u-boot-nodtb.bin
|
||||
|
||||
# Bit of a hack to remove binaries we don't use as they're large
|
||||
%ifarch aarch64
|
||||
for board in $(ls builds)
|
||||
do
|
||||
rm -f %{buildroot}%{_datadir}/uboot/$(echo $board)/u-boot.dtb
|
||||
if [ -f %{buildroot}%{_datadir}/uboot/$(echo $board)/u-boot-sunxi-with-spl.bin ]; then
|
||||
rm -f %{buildroot}%{_datadir}/uboot/$(echo $board)/u-boot{,-dtb}.*
|
||||
fi
|
||||
if [ -f %{buildroot}%{_datadir}/uboot/$(echo $board)/MLO ]; then
|
||||
rm -f %{buildroot}%{_datadir}/uboot/$(echo $board)/u-boot.bin
|
||||
fi
|
||||
if [ -f %{buildroot}%{_datadir}/uboot/$(echo $board)/SPL ]; then
|
||||
rm -f %{buildroot}%{_datadir}/uboot/$(echo $board)/u-boot.bin
|
||||
fi
|
||||
if [ -f %{buildroot}%{_datadir}/uboot/$(echo $board)/u-boot.imx ]; then
|
||||
rm -f %{buildroot}%{_datadir}/uboot/$(echo $board)/u-boot.bin
|
||||
fi
|
||||
if [ -f %{buildroot}%{_datadir}/uboot/$(echo $board)/u-boot-spl.kwb ]; then
|
||||
rm -f %{buildroot}%{_datadir}/uboot/$(echo $board)/u-boot.*
|
||||
rm -f %{buildroot}%{_datadir}/uboot/$(echo $board)/u-boot-spl.bin
|
||||
rm -f %{buildroot}%{_datadir}/uboot/$(echo $board)/sunxi-spl.bin
|
||||
fi
|
||||
if [ -f %{buildroot}%{_datadir}/uboot/$(echo $board)/idbloader.img ]; then
|
||||
rm -f %{buildroot}%{_datadir}/uboot/$(echo $board)/u-boot.bin
|
||||
|
@ -198,16 +204,48 @@ install -p -m 0755 builds/tools/env/fw_printenv %{buildroot}%{_bindir}
|
|||
%doc doc/develop/uefi doc/usage doc/arch/arm64.rst
|
||||
%{_bindir}/*
|
||||
%{_mandir}/man1/mkimage.1*
|
||||
%dir %{_datadir}/uboot/
|
||||
|
||||
%if %{with toolsonly}
|
||||
%ifarch aarch64
|
||||
%files -n uboot-images-armv8
|
||||
%dir %{_datadir}/uboot/
|
||||
%{_datadir}/uboot/*
|
||||
%endif
|
||||
|
||||
%ifarch riscv64
|
||||
%files -n uboot-images-riscv64
|
||||
%dir %{_datadir}/uboot/
|
||||
%{_datadir}/uboot/*
|
||||
%endif
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Fri Mar 22 2024 David Abdurachmanov <davidlt@rivosinc.com> - 1:2024.04-0.7.rc4.0.riscv64
|
||||
- Add support for riscv64
|
||||
|
||||
* Thu Mar 21 2024 Peter Robinson <pbrobinson@fedoraproject.org> - 1:2024.04-0.7.rc4
|
||||
- Updated patch for DTB loading
|
||||
|
||||
* Fri Mar 15 2024 Peter Robinson <pbrobinson@fedoraproject.org> - 1:2024.04-0.6.rc4
|
||||
- Updated fix for FDT load
|
||||
|
||||
* Wed Mar 13 2024 Peter Robinson <pbrobinson@fedoraproject.org> - 1:2024.04-0.5.rc4
|
||||
- Fixes for Rockchip rk3399 autoboot
|
||||
|
||||
* Tue Mar 12 2024 Peter Robinson <pbrobinson@fedoraproject.org> - 1:2024.04-0.4.rc4
|
||||
- Update to 2024.04 RC4
|
||||
- Initial fix for loading DT off /boot (rhbz 2247873)
|
||||
|
||||
* Thu Feb 29 2024 Peter Robinson <pbrobinson@fedoraproject.org> - 1:2024.04-0.3.rc3
|
||||
- Update to 2024.04 RC3
|
||||
- Enable a number of new upstream devices
|
||||
- Upstream now builds Rockchip SPI artifacts
|
||||
- Various cleanups
|
||||
- Fix ESP partition detection to enable EFI vars
|
||||
|
||||
* Wed Feb 14 2024 Peter Robinson <pbrobinson@fedoraproject.org> - 1:2024.04-0.2.rc2
|
||||
- Update to 2024.04 RC2
|
||||
|
||||
* Sat Jan 27 2024 Fedora Release Engineering <releng@fedoraproject.org> - 1:2024.01-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
|
||||
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
From 86782e882e9542f5f402e00cd87efb36ad0552d3 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Robinson <pbrobinson@gmail.com>
|
||||
Date: Sat, 2 Mar 2024 11:17:42 +0000
|
||||
Subject: [PATCH v4] disk: dos: Add all options for EFI System Partitions
|
||||
|
||||
The EFI spec states that the ESP can be any of FAT12/16/32 but for
|
||||
compatibility doesn't necssarily require the partition to be the
|
||||
EFI partition table ID of 0xef. A number of arm devices will not
|
||||
find their firmware on a FAT partition with an ID of 0xef so also
|
||||
allow the original FAT12/16/32 partition IDs as they are also
|
||||
permissable for an ESP.
|
||||
|
||||
Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
|
||||
---
|
||||
|
||||
v2:
|
||||
- Add 0x0c option
|
||||
- Make hex constants consistent
|
||||
- Move from if to switch statement
|
||||
v3:
|
||||
- Fix switch brain fart
|
||||
v4:
|
||||
- Drop boot_ind out of switch
|
||||
|
||||
disk/part_dos.c | 13 ++++++++++++-
|
||||
1 file changed, 12 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/disk/part_dos.c b/disk/part_dos.c
|
||||
index 567ead7511d..a35181dff4f 100644
|
||||
--- a/disk/part_dos.c
|
||||
+++ b/disk/part_dos.c
|
||||
@@ -40,10 +40,21 @@ static int get_bootable(dos_partition_t *p)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
- if (p->sys_ind == 0xef)
|
||||
+ switch (p->sys_ind) {
|
||||
+ case 0x01:
|
||||
+ case 0x06:
|
||||
+ case 0x0b:
|
||||
+ case 0x0c:
|
||||
+ case 0xef:
|
||||
ret |= PART_EFI_SYSTEM_PARTITION;
|
||||
+ break;
|
||||
+ default:
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
if (p->boot_ind == 0x80)
|
||||
ret |= PART_BOOTABLE;
|
||||
+
|
||||
return ret;
|
||||
}
|
||||
|
||||
--
|
||||
2.44.0
|
||||
|
|
@ -1,574 +0,0 @@
|
|||
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 <masahisa.kojima@linaro.org>
|
||||
X-Patchwork-Id: 1862317
|
||||
X-Patchwork-Delegate: apalos@gmail.com
|
||||
Return-Path: <u-boot-bounces@lists.denx.de>
|
||||
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 <incoming@patchwork.ozlabs.org>; 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 <u-boot@lists.denx.de>; 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 <u-boot@lists.denx.de>; 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 <masahisa.kojima@linaro.org>
|
||||
To: u-boot@lists.denx.de
|
||||
Cc: Heinrich Schuchardt <xypron.glpk@gmx.de>,
|
||||
Ilias Apalodimas <ilias.apalodimas@linaro.org>,
|
||||
Simon Glass <sjg@chromium.org>,
|
||||
Takahiro Akashi <takahiro.akashi@linaro.org>,
|
||||
Michal Simek <michal.simek@amd.com>, Raymond Mao <raymond.mao@linaro.org>,
|
||||
Masahisa Kojima <masahisa.kojima@linaro.org>,
|
||||
Joao Marcos Costa <jmcosta944@gmail.com>,
|
||||
Huang Jianan <jnhuang95@gmail.com>,
|
||||
Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
|
||||
Miquel Raynal <miquel.raynal@bootlin.com>, 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 <u-boot.lists.denx.de>
|
||||
List-Unsubscribe: <https://lists.denx.de/options/u-boot>,
|
||||
<mailto:u-boot-request@lists.denx.de?subject=unsubscribe>
|
||||
List-Archive: <https://lists.denx.de/pipermail/u-boot/>
|
||||
List-Post: <mailto:u-boot@lists.denx.de>
|
||||
List-Help: <mailto:u-boot-request@lists.denx.de?subject=help>
|
||||
List-Subscribe: <https://lists.denx.de/listinfo/u-boot>,
|
||||
<mailto:u-boot-request@lists.denx.de?subject=subscribe>
|
||||
Errors-To: u-boot-bounces@lists.denx.de
|
||||
Sender: "U-Boot" <u-boot-bounces@lists.denx.de>
|
||||
X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de
|
||||
X-Virus-Status: Clean
|
||||
|
||||
From: Raymond Mao <raymond.mao@linaro.org>
|
||||
|
||||
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 <masahisa.kojima@linaro.org>
|
||||
Signed-off-by: Masahisa Kojima <masahisa.kojima@linaro.org>
|
||||
Signed-off-by: Raymond Mao <raymond.mao@linaro.org>
|
||||
Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
|
||||
Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
|
||||
Reviewed-by: Joao Marcos Costa <jmcosta944@gmail.com>
|
||||
---
|
||||
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)
|
|
@ -0,0 +1,202 @@
|
|||
From 8abb44f89aefd25cda27c54c08b68b3a60bea7c3 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Robinson <pbrobinson@gmail.com>
|
||||
Date: Thu, 21 Mar 2024 13:43:24 +0000
|
||||
Subject: [PATCH] initial find_fdt_location for finding the DT on disk
|
||||
|
||||
The old distro boot looked for a DT on the first boot partition
|
||||
in the /dtb or /dtb/current directories, and Fedora extended this
|
||||
to look not just on the boot partition but all the partitions on
|
||||
that disk.
|
||||
|
||||
The new ways of booting, both bootstd and bootefi bootmgr processes
|
||||
don't properly look for those options. This provides a function
|
||||
to search for the DTB on disk so that if the other DT mechanisms
|
||||
don't work this will look for one on disk to provide a working DT
|
||||
so that devices will continue to work as they did previously.
|
||||
|
||||
Signed-off-by: Peter Robinson <pbrobinson@gmail.com>
|
||||
---
|
||||
cmd/bootefi.c | 1 +
|
||||
cmd/bootmenu.c | 5 ++
|
||||
include/efi_loader.h | 2 +
|
||||
lib/efi_loader/efi_helper.c | 105 +++++++++++++++++++++++++++++++++++-
|
||||
4 files changed, 112 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/cmd/bootefi.c b/cmd/bootefi.c
|
||||
index 9cf9027bf40..8b6194a8702 100644
|
||||
--- a/cmd/bootefi.c
|
||||
+++ b/cmd/bootefi.c
|
||||
@@ -144,6 +144,7 @@ static int do_bootefi(struct cmd_tbl *cmdtp, int flag, int argc,
|
||||
if (argc > 2) {
|
||||
uintptr_t fdt_addr;
|
||||
|
||||
+ /* Do we need to run find_fdt_location here?*/
|
||||
fdt_addr = hextoul(argv[2], NULL);
|
||||
fdt = map_sysmem(fdt_addr, 0);
|
||||
} else {
|
||||
diff --git a/cmd/bootmenu.c b/cmd/bootmenu.c
|
||||
index 78184fccab2..48368c8d42e 100644
|
||||
--- a/cmd/bootmenu.c
|
||||
+++ b/cmd/bootmenu.c
|
||||
@@ -448,6 +448,11 @@ static void handle_uefi_bootnext(void)
|
||||
u16 bootnext;
|
||||
efi_status_t ret;
|
||||
efi_uintn_t size;
|
||||
+ const char *fdt_opt;
|
||||
+
|
||||
+ /* Find the DTB on disk */
|
||||
+ log_debug("We will load the DTB\n");
|
||||
+ fdt_opt = find_fdt_location();
|
||||
|
||||
/* Initialize EFI drivers */
|
||||
ret = efi_init_obj_list();
|
||||
diff --git a/include/efi_loader.h b/include/efi_loader.h
|
||||
index 7daca0afba2..a969378ff2f 100644
|
||||
--- a/include/efi_loader.h
|
||||
+++ b/include/efi_loader.h
|
||||
@@ -524,6 +524,8 @@ struct efi_register_notify_event {
|
||||
struct list_head handles;
|
||||
};
|
||||
|
||||
+/* Find the FDT on any partition */
|
||||
+char *find_fdt_location(void);
|
||||
/* called at pre-initialization */
|
||||
int efi_init_early(void);
|
||||
/* Initialize efi execution environment */
|
||||
diff --git a/lib/efi_loader/efi_helper.c b/lib/efi_loader/efi_helper.c
|
||||
index 5dd9cc876e4..a33ec39ff74 100644
|
||||
--- a/lib/efi_loader/efi_helper.c
|
||||
+++ b/lib/efi_loader/efi_helper.c
|
||||
@@ -12,6 +12,7 @@
|
||||
#include <mapmem.h>
|
||||
#include <dm.h>
|
||||
#include <fs.h>
|
||||
+#include <part.h>
|
||||
#include <efi_api.h>
|
||||
#include <efi_load_initrd.h>
|
||||
#include <efi_loader.h>
|
||||
@@ -24,6 +25,99 @@
|
||||
const efi_guid_t efi_lf2_initrd_guid = EFI_INITRD_MEDIA_GUID;
|
||||
#endif
|
||||
|
||||
+/* We need to pass a blk device in and return a location, or a loaded DT */
|
||||
+char *find_fdt_location(void)
|
||||
+{
|
||||
+ const char *fdt_filename;
|
||||
+ /* FIXME: dynamic size */
|
||||
+ char fdt_fullpath[60];
|
||||
+ const char *prefix;
|
||||
+ struct udevice *blk;
|
||||
+ /* FIXME: Fedora really only cares about first 2*/
|
||||
+ int MAX_PART = 8;
|
||||
+ int part;
|
||||
+ struct disk_partition info;
|
||||
+ int fdtext;
|
||||
+ int ret;
|
||||
+ int retfdt;
|
||||
+ int retload;
|
||||
+ loff_t fdtsize;
|
||||
+ ulong pbraddr;
|
||||
+ loff_t len_read;
|
||||
+
|
||||
+ /* step one logic: we have the DT name we're hunting for */
|
||||
+ fdt_filename = env_get("fdtfile");
|
||||
+ if (fdt_filename) {
|
||||
+ log_debug("FFL: We're looking for the DTB now!: %s\n", fdt_filename);
|
||||
+
|
||||
+ /* probe all block disks to search for fdt */
|
||||
+ uclass_foreach_dev_probe(UCLASS_BLK, blk) {
|
||||
+ log_debug("FFL: dev name: %s\n", blk->name);
|
||||
+ struct blk_desc *desc;
|
||||
+ desc = dev_get_uclass_plat(blk);
|
||||
+ /* we should get a partition count here for looping */
|
||||
+ /* For loop for each partition */
|
||||
+ /* Need to also deal with zero part whole disk - part_get_info_whole_disk */
|
||||
+ for (part = 1; part <= MAX_PART; part++) {
|
||||
+ log_debug("FFL: part num: %d\n", part);
|
||||
+ ret = part_get_info(desc, part, &info);
|
||||
+ /* if we have partition check it for DT */
|
||||
+ if (ret < 0) {
|
||||
+ log_debug("FFL: no partition\n");
|
||||
+ } else {
|
||||
+ log_debug("FFL: we have a partition\n");
|
||||
+ /* we should have a case/for prefix in =/ /dtb/ /dtb/current/ */
|
||||
+ /* but for now we hard code if for Fedora */
|
||||
+ prefix = "/dtb";
|
||||
+ snprintf(fdt_fullpath, sizeof(fdt_fullpath), "%s/%s", prefix, fdt_filename);
|
||||
+ log_debug("FFL: full name: %s\n", fdt_fullpath);
|
||||
+ /* search for DT on partition and either find and exit or continue */
|
||||
+ if (fs_set_blk_dev_with_part(desc, part) == 0){
|
||||
+ log_debug("FFL: set block part pass\n");
|
||||
+ fdtext = fs_exists(fdt_fullpath);
|
||||
+ if (fdtext) {
|
||||
+ /* we have a fdt!*/
|
||||
+ if (fs_set_blk_dev_with_part(desc, part) == 0){
|
||||
+ retfdt = fs_size(fdt_fullpath, &fdtsize);
|
||||
+ if (retfdt == 0) {
|
||||
+ log_debug("FFL: we have found a DT on disk, size %lld\n", fdtsize);
|
||||
+ /* Get the main fdt and map it */
|
||||
+ const char *fdt_pbr;
|
||||
+ fdt_pbr = env_get("fdt_addr_r");
|
||||
+ pbraddr = hextoul(fdt_pbr, NULL);
|
||||
+ log_debug("FFL: fdr addr: %s\n", fdt_pbr);
|
||||
+ if (fs_set_blk_dev_with_part(desc, part) == 0){
|
||||
+ retload = fs_read(fdt_fullpath, pbraddr, 0, fdtsize, &len_read);
|
||||
+ if (retload == 0) {
|
||||
+ log_debug("FFL: we have a loaded DT, size %lld we can return\n", fdtsize);
|
||||
+ log_info("Found DTB: %s\n", fdt_filename);
|
||||
+ return fdt_pbr;
|
||||
+ } else {
|
||||
+ log_debug("FFL: DT load failed\n");
|
||||
+ }
|
||||
+ }
|
||||
+ } else {
|
||||
+ log_debug("FFL: we DON'T have a DT with size\n");
|
||||
+ }
|
||||
+ }
|
||||
+ } else {
|
||||
+ /* we don't have a fdt!*/
|
||||
+ log_debug("FFL: we DON'T have a DT\n");
|
||||
+ }
|
||||
+ } else {
|
||||
+ log_debug("FFL: set block part FAIL\n");
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ } else {
|
||||
+ log_debug("FFL: fdt_filename not defined!!\n");
|
||||
+ }
|
||||
+
|
||||
+ /* We didn't find a FDT */
|
||||
+ return NULL;
|
||||
+}
|
||||
+
|
||||
/**
|
||||
* efi_create_current_boot_var() - Return Boot#### name were #### is replaced by
|
||||
* the value of BootCurrent
|
||||
@@ -432,11 +526,20 @@ efi_status_t efi_install_fdt(void *fdt)
|
||||
/* Look for device tree that is already installed */
|
||||
if (efi_get_configuration_table(&efi_guid_fdt))
|
||||
return EFI_SUCCESS;
|
||||
+ /* Check if there is device tree loaded from disk */
|
||||
+ fdt_opt = find_fdt_location();
|
||||
+ if (fdt_opt)
|
||||
+ log_debug("Found DTB on disk\n");
|
||||
/* Check if there is a hardware device tree */
|
||||
- fdt_opt = env_get("fdt_addr");
|
||||
+ if (!fdt_opt) {
|
||||
+ fdt_opt = env_get("fdt_addr");
|
||||
+ if (fdt_opt)
|
||||
+ log_info("Found DTB: Prior firmware\n");
|
||||
+ }
|
||||
/* Use our own device tree as fallback */
|
||||
if (!fdt_opt) {
|
||||
fdt_opt = env_get("fdtcontroladdr");
|
||||
+ log_debug("Using DT from U-Boot\n");
|
||||
if (!fdt_opt) {
|
||||
log_err("ERROR: need device tree\n");
|
||||
return EFI_NOT_FOUND;
|
||||
--
|
||||
2.44.0
|
||||
|
Loading…
Reference in New Issue