diff --git a/0001-smbios-Simplify-reporting-of-unknown-values.patch b/0001-smbios-Simplify-reporting-of-unknown-values.patch deleted file mode 100644 index 6fd5dde..0000000 --- a/0001-smbios-Simplify-reporting-of-unknown-values.patch +++ /dev/null @@ -1,115 +0,0 @@ -From 6eb1fce7ca692b211ca467040cfe25a750ecc0fe Mon Sep 17 00:00:00 2001 -From: Ilias Apalodimas -Date: Tue, 6 Sep 2022 16:44:25 +0300 -Subject: [PATCH 1/2] smbios: Simplify reporting of unknown values - -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_string() and always report "Unknown" regardless of the missing -field. - -pre-patch dmidecode - -Handle 0x0001, DMI type 1, 27 bytes -System Information - Manufacturer: Unknown - Product Name: Unknown Product - Version: Not Specified - Serial Number: Not Specified - UUID: Not Settable - Wake-up Type: Reserved - SKU Number: Not Specified - Family: Not Specified - -[...] - -post-patch dmidecode: - -Handle 0x0001, DMI type 1, 27 bytes -System Information - Manufacturer: Unknown - Product Name: Unknown - Version: Unknown - Serial Number: Unknown - UUID: Not Settable - Wake-up Type: Reserved - SKU Number: Unknown - Family: Unknown -[...] - -Signed-off-by: Ilias Apalodimas -Reviewed-by: Peter Robinson -Tested-by: Peter Robinson ---- - lib/smbios.c | 17 +++-------------- - 1 file changed, 3 insertions(+), 14 deletions(-) - -diff --git a/lib/smbios.c b/lib/smbios.c -index d7f4999e8b2a..fcc8686993ef 100644 ---- a/lib/smbios.c -+++ b/lib/smbios.c -@@ -102,7 +102,7 @@ static int smbios_add_string(struct smbios_ctx *ctx, const char *str) - int i = 1; - char *p = ctx->eos; - -- if (!*str) -+ if (!str || !*str) - str = "Unknown"; - - for (;;) { -@@ -151,8 +151,7 @@ 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); - } - - return 0; -@@ -231,7 +230,7 @@ static int smbios_write_type0(ulong *current, int handle, - t->vendor = smbios_add_string(ctx, "U-Boot"); - - t->bios_ver = smbios_add_prop(ctx, "version"); -- if (!t->bios_ver) -+ if (!strcmp(ctx->last_str, "Unknown")) - t->bios_ver = smbios_add_string(ctx, PLAIN_VERSION); - if (t->bios_ver) - gd->smbios_version = ctx->last_str; -@@ -281,11 +280,7 @@ static int smbios_write_type1(ulong *current, int handle, - 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->version = smbios_add_prop_si(ctx, "version", - SYSINFO_ID_SMBIOS_SYSTEM_VERSION); - if (serial_str) { -@@ -315,11 +310,7 @@ static int smbios_write_type2(ulong *current, int handle, - 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->version = smbios_add_prop_si(ctx, "version", - SYSINFO_ID_SMBIOS_BASEBOARD_VERSION); - t->asset_tag_number = smbios_add_prop(ctx, "asset-tag"); -@@ -344,8 +335,6 @@ static int smbios_write_type3(ulong *current, int handle, - 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->chassis_type = SMBIOS_ENCLOSURE_DESKTOP; - t->bootup_state = SMBIOS_STATE_SAFE; - t->power_supply_state = SMBIOS_STATE_SAFE; --- -2.40.1 - diff --git a/0002-smbios-Fallback-to-the-default-DT-if-sysinfo-nodes-a.patch b/0002-smbios-Fallback-to-the-default-DT-if-sysinfo-nodes-a.patch deleted file mode 100644 index a256b9b..0000000 --- a/0002-smbios-Fallback-to-the-default-DT-if-sysinfo-nodes-a.patch +++ /dev/null @@ -1,242 +0,0 @@ -From ed67997890981fda4f859cb96e523a0ec5b58042 Mon Sep 17 00:00:00 2001 -From: Ilias Apalodimas -Date: Tue, 6 Sep 2022 16:44:26 +0300 -Subject: [PATCH 2/2] smbios: Fallback to the default DT if sysinfo nodes are - missing - -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 -. So let's add a last resort to our current -smbios parsing. If none of the sysinfo properties are found, we can -scan the root node for 'model' and 'compatible'. - -pre-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 - -Handle 0x0002, DMI type 2, 14 bytes -Base Board Information - Manufacturer: Unknown - Product Name: Unknown - Version: Unknown - Serial Number: Not Specified - Asset Tag: Unknown - Features: - Board is a hosting board - Location In Chassis: Not Specified - Chassis Handle: 0x0000 - Type: Motherboard - -Handle 0x0003, DMI type 3, 21 bytes -Chassis Information - Manufacturer: Unknown - Type: Desktop - Lock: Not Present - Version: Not Specified - Serial Number: Not Specified - Asset Tag: Not Specified - Boot-up State: Safe - Power Supply State: Safe - Thermal State: Safe - Security Status: None - OEM Information: 0x00000000 - Height: Unspecified - Number Of Power Cords: Unspecified - Contained Elements: 0 - - -post-pastch dmidecode: - -Handle 0x0001, DMI type 1, 27 bytes -System Information - Manufacturer: socionext,developer-box - Product Name: Socionext Developer Box - Version: Unknown - Serial Number: Unknown - UUID: Not Settable - Wake-up Type: Reserved - SKU Number: Unknown - Family: Unknown - -Handle 0x0002, DMI type 2, 14 bytes -Base Board Information - Manufacturer: socionext,developer-box - Product Name: Socionext Developer Box - Version: Unknown - Serial Number: Not Specified - Asset Tag: Unknown - Features: - Board is a hosting board - Location In Chassis: Not Specified - Chassis Handle: 0x0000 - Type: Motherboard - -Handle 0x0003, DMI type 3, 21 bytes -Chassis Information - Manufacturer: socionext,developer-box - Type: Desktop - Lock: Not Present - Version: Not Specified - Serial Number: Not Specified - Asset Tag: Not Specified - Boot-up State: Safe - Power Supply State: Safe - Thermal State: Safe - Security Status: None - OEM Information: 0x00000000 - Height: Unspecified - Number Of Power Cords: Unspecified - Contained Elements: 0 - - -Signed-off-by: Ilias Apalodimas -Reviewed-by: Peter Robinson -Tested-by: Peter Robinson ---- - lib/smbios.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++---- - 1 file changed, 64 insertions(+), 4 deletions(-) - -diff --git a/lib/smbios.c b/lib/smbios.c -index fcc8686993ef..9c8e34625e65 100644 ---- a/lib/smbios.c -+++ b/lib/smbios.c -@@ -9,11 +9,13 @@ - #include - #include - #include -+#include - #include - #include - #include - #include - #include -+#include - #ifdef CONFIG_CPU - #include - #include -@@ -43,6 +45,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. First element is 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", 1 }, -+ { .sysinfo_str = "manufacturer", .dt_str = "compatible", 0 }, -+}; -+ - /** - * struct smbios_ctx - context for writing SMBIOS tables - * -@@ -87,6 +108,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 - * -@@ -139,19 +172,46 @@ 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) - { -+ int ret = 0; -+ - 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; -+ const char *str = NULL; -+ char str_tmp[128]; -+ char *token; - -- str = ofnode_read_string(ctx->node, prop); -- return smbios_add_string(ctx, str); -+ /* -+ * If the node is not valid fallback and try the entire DT -+ * so we can at least fill in maufacturer and board type -+ */ -+ if (!ofnode_valid(ctx->node)) { -+ const struct map_sysinfo *nprop; -+ -+ nprop = convert_sysinfo_to_dt(prop); -+ if (nprop) { -+ int cnt = 0; -+ -+ str = ofnode_read_string(ofnode_root(), nprop->dt_str); -+ strncpy(str_tmp, str, sizeof(str_tmp)); -+ token = strtok(str_tmp, ","); -+ while (token != NULL && cnt <= nprop->max) { -+ str = token; -+ token = strtok(NULL, ","); -+ cnt++; -+ } -+ } -+ } else { -+ str = ofnode_read_string(ctx->node, prop); -+ } -+ ret = smbios_add_string(ctx, str); -+ return ret; - } - - return 0; --- -2.40.1 - diff --git a/Provide-a-fallback-to-smbios-tables.patch b/Provide-a-fallback-to-smbios-tables.patch new file mode 100644 index 0000000..4ff8ac5 --- /dev/null +++ b/Provide-a-fallback-to-smbios-tables.patch @@ -0,0 +1,686 @@ +From patchwork Thu Dec 7 09:18:49 2023 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +X-Patchwork-Submitter: Ilias Apalodimas +X-Patchwork-Id: 1873089 +Return-Path: +X-Original-To: incoming@patchwork.ozlabs.org +Delivered-To: patchwork-incoming@legolas.ozlabs.org +Authentication-Results: legolas.ozlabs.org; + dkim=pass (2048-bit key; + unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256 + header.s=google header.b=SyQQL6ZG; + dkim-atps=neutral +Authentication-Results: legolas.ozlabs.org; + spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de + (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; + envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) +Received: from phobos.denx.de (phobos.denx.de + [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) + (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) + key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) + (No client certificate requested) + by legolas.ozlabs.org (Postfix) with ESMTPS id 4Sm7xz1DLXz23nD + for ; Thu, 7 Dec 2023 20:19:19 +1100 (AEDT) +Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) + by phobos.denx.de (Postfix) with ESMTP id 83BF287243; + Thu, 7 Dec 2023 10:19:05 +0100 (CET) +Authentication-Results: phobos.denx.de; + dmarc=pass (p=none dis=none) header.from=linaro.org +Authentication-Results: phobos.denx.de; + spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de +Authentication-Results: phobos.denx.de; + dkim=pass (2048-bit key; + unprotected) header.d=linaro.org header.i=@linaro.org header.b="SyQQL6ZG"; + dkim-atps=neutral +Received: by phobos.denx.de (Postfix, from userid 109) + id 46C3C87243; Thu, 7 Dec 2023 10:19:04 +0100 (CET) +X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de +X-Spam-Level: +X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, + DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, + T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 +Received: from mail-wm1-x330.google.com (mail-wm1-x330.google.com + [IPv6:2a00:1450:4864:20::330]) + (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) + (No client certificate requested) + by phobos.denx.de (Postfix) with ESMTPS id 21B8586FFE + for ; Thu, 7 Dec 2023 10:19:02 +0100 (CET) +Authentication-Results: phobos.denx.de; + dmarc=pass (p=none dis=none) header.from=linaro.org +Authentication-Results: phobos.denx.de; + spf=pass smtp.mailfrom=ilias.apalodimas@linaro.org +Received: by mail-wm1-x330.google.com with SMTP id + 5b1f17b1804b1-40c2c65e6aaso1041145e9.2 + for ; Thu, 07 Dec 2023 01:19:02 -0800 (PST) +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; + d=linaro.org; s=google; t=1701940741; x=1702545541; darn=lists.denx.de; + h=content-transfer-encoding:mime-version:references:in-reply-to + :message-id:date:subject:cc:to:from:from:to:cc:subject:date + :message-id:reply-to; + bh=vcf8Uy8SIKdN9TXuCeQubka7IJIfrvGMGj1JoUebFs0=; + b=SyQQL6ZGyEFpFFqauSbHRSSNY+KOw9ohESTeXyy7RkWEEIFaK7yPwRRy9NZX+DJLAJ + ECaT3Bchk61s+E1ZsuxrqdlxEYWDULw+4O2hm22gVZjL5L6r4+NwNgCHwzYW/bcro87o + KEGRF7CXG50v6mvrjAOHoy2LbojZLR9d7fjO4gmGtihdnTMOW1cjtrX/3Seiy99QoTK6 + 5Hs119W/hO0/5AE1VVSiIxV1Xx+qYcAHvQqcEEkBCKR2MpHTauUEonUf1LC5LKK2gKG5 + UEzq7XLrPki8hih4EcWsoctpdPp4kBtvpVSSshji9yxDX3EXKzcfA8xyqrB+5qKJU100 + zZ7A== +X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; + d=1e100.net; s=20230601; t=1701940741; x=1702545541; + h=content-transfer-encoding:mime-version:references:in-reply-to + :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc + :subject:date:message-id:reply-to; + bh=vcf8Uy8SIKdN9TXuCeQubka7IJIfrvGMGj1JoUebFs0=; + b=L6Ejctx8u+W0IeEi5FfC1q0ah2NYKTScSheLqomwMY3Q4/BPiEUP7KUarxUKsRwI/3 + yP4rTVAXqlGbT6kFKq3jrxXlRS4HIRZxtFbgHZEKuBnXpkHCQpvQwKUcYY9QkbfdZEir + 5YYfONEv2yTHHfoiBZiVmcPARIQ5+2ra+k493og2Bm0Hk5dVWyaHn/YY6Y+FCWH7ZYn0 + Eq1M9Ng8YB3oMx63KwV9XHBURccH8UdCqwsNDvk2gWLKdSvrjlFD7ExiySd90+i9+6vN + CMLoNESSYj2K9qW/sxbIDgUv1JwYCWgJrDejTzilfagawcPlKY2XtTnOlUsRryYrsPoq + RbZg== +X-Gm-Message-State: AOJu0YxG7g4q8NdX+N/0Mp5YNkHEVHntPyakSqHCtdqDzgaRcQCbtF0q + 2APTVIQc7yNsT16/19bvkV1NRw3x7lZmC4YcT+s= +X-Google-Smtp-Source: + AGHT+IFwnHtGX5IWm5lG5rRTsz6nU13lqUMnEUb8xEq/mngZuRtpzcNdrO7fNaBiIDDQLuKd+Y07Tw== +X-Received: by 2002:a05:600c:2184:b0:40b:dd1f:6dd1 with SMTP id + e4-20020a05600c218400b0040bdd1f6dd1mr1312043wme.240.1701940741617; + Thu, 07 Dec 2023 01:19:01 -0800 (PST) +Received: from localhost.localdomain (ppp046103111243.access.hol.gr. + [46.103.111.243]) by smtp.gmail.com with ESMTPSA id + u21-20020a05600c139500b00405d9a950a2sm1299003wmf.28.2023.12.07.01.19.00 + (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); + Thu, 07 Dec 2023 01:19:01 -0800 (PST) +From: Ilias Apalodimas +To: trini@konsulko.com, + sjg@chromium.org +Cc: sean.anderson@seco.com, neil.armstrong@linaro.org, + heinrich.schuchardt@canonical.com, mark.kettenis@xs4all.nl, + Ilias Apalodimas , u-boot@lists.denx.de +Subject: [PATCH 1/2 v3] smbios: Simplify reporting of unknown values +Date: Thu, 7 Dec 2023 11:18:49 +0200 +Message-Id: <20231207091850.17776-2-ilias.apalodimas@linaro.org> +X-Mailer: git-send-email 2.40.1 +In-Reply-To: <20231207091850.17776-1-ilias.apalodimas@linaro.org> +References: <20231207091850.17776-1-ilias.apalodimas@linaro.org> +MIME-Version: 1.0 +X-BeenThere: u-boot@lists.denx.de +X-Mailman-Version: 2.1.39 +Precedence: list +List-Id: U-Boot discussion +List-Unsubscribe: , + +List-Archive: +List-Post: +List-Help: +List-Subscribe: , + +Errors-To: u-boot-bounces@lists.denx.de +Sender: "U-Boot" +X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de +X-Virus-Status: Clean + +If a value is not valid during the DT or SYSINFO parsing, we explicitly +set that to "Unknown Product" and "Unknown" for the product and +manufacturer respectively. It's cleaner if we move the checks insisde +smbios_add_prop_si() and provide an alternative string in case the +primary is NULL or empty + +pre-patch dmidecode + +Handle 0x0001, DMI type 1, 27 bytes +System Information + Manufacturer: Unknown + Product Name: Unknown Product + Version: Not Specified + Serial Number: Not Specified + UUID: Not Settable + Wake-up Type: Reserved + SKU Number: Not Specified + Family: Not Specified + +[...] + +post-patch dmidecode: + +Handle 0x0001, DMI type 1, 27 bytes +System Information + Manufacturer: Unknown + Product Name: Unknown + Version: Unknown + Serial Number: Unknown + UUID: Not Settable + Wake-up Type: Reserved + SKU Number: Unknown + Family: Unknown +[...] + +While at it make smbios_add_prop_si() add a string directly if the prop +node is NULL and replace smbios_add_string() calls with +smbios_add_prop_si(ctx, NULL, ....) + +Signed-off-by: Ilias Apalodimas +--- +Changes since v2: +- refactor even more code and remove the smbios_add_string calls from the + main code. Instead use smbios_add_prop() foir everything and add a + default value, in case the parsed one is NULL or emtpy +Changes since v1: +- None + + lib/smbios.c | 73 +++++++++++++++++++++++++--------------------------- + 1 file changed, 35 insertions(+), 38 deletions(-) + +-- +2.40.1 + +diff --git a/lib/smbios.c b/lib/smbios.c +index d7f4999e8b2a..444aa245a273 100644 +--- a/lib/smbios.c ++++ b/lib/smbios.c +@@ -102,9 +102,6 @@ static int smbios_add_string(struct smbios_ctx *ctx, const char *str) + int i = 1; + char *p = ctx->eos; + +- if (!*str) +- str = "Unknown"; +- + for (;;) { + if (!*p) { + ctx->last_str = p; +@@ -134,11 +131,18 @@ static int smbios_add_string(struct smbios_ctx *ctx, const char *str) + * + * @ctx: context for writing the tables + * @prop: property to write ++ * @dval: Default value to use if the string is not found or is empty + * Return: 0 if not found, else SMBIOS string number (1 or more) + */ + static int smbios_add_prop_si(struct smbios_ctx *ctx, const char *prop, +- int sysinfo_id) ++ int sysinfo_id, const char *dval) + { ++ if (!dval || !*dval) ++ dval = "Unknown"; ++ ++ if (!prop) ++ return smbios_add_string(ctx, dval); ++ + if (sysinfo_id && ctx->dev) { + char val[SMBIOS_STR_MAX]; + int ret; +@@ -151,8 +155,8 @@ static int smbios_add_prop_si(struct smbios_ctx *ctx, const char *prop, + const char *str; + + str = ofnode_read_string(ctx->node, prop); +- if (str) +- return smbios_add_string(ctx, str); ++ ++ return smbios_add_string(ctx, str ? str : dval); + } + + return 0; +@@ -161,12 +165,15 @@ static int smbios_add_prop_si(struct smbios_ctx *ctx, const char *prop, + /** + * smbios_add_prop() - Add a property from the devicetree + * +- * @prop: property to write ++ * @prop: property to write. The default string will be written if ++ * prop is NULL ++ * @dval: Default value to use if the string is not found or is empty + * Return: 0 if not found, else SMBIOS string number (1 or more) + */ +-static int smbios_add_prop(struct smbios_ctx *ctx, const char *prop) ++static int smbios_add_prop(struct smbios_ctx *ctx, const char *prop, ++ const char *dval) + { +- return smbios_add_prop_si(ctx, prop, SYSINFO_ID_NONE); ++ return smbios_add_prop_si(ctx, prop, SYSINFO_ID_NONE, dval); + } + + static void smbios_set_eos(struct smbios_ctx *ctx, char *eos) +@@ -228,11 +235,9 @@ static int smbios_write_type0(ulong *current, int handle, + memset(t, 0, sizeof(struct smbios_type0)); + fill_smbios_header(t, SMBIOS_BIOS_INFORMATION, len, handle); + smbios_set_eos(ctx, t->eos); +- t->vendor = smbios_add_string(ctx, "U-Boot"); ++ t->vendor = smbios_add_prop(ctx, NULL, "U-Boot"); + +- t->bios_ver = smbios_add_prop(ctx, "version"); +- if (!t->bios_ver) +- t->bios_ver = smbios_add_string(ctx, PLAIN_VERSION); ++ t->bios_ver = smbios_add_prop(ctx, "version", PLAIN_VERSION); + if (t->bios_ver) + gd->smbios_version = ctx->last_str; + log_debug("smbios_version = %p: '%s'\n", gd->smbios_version, +@@ -241,7 +246,7 @@ static int smbios_write_type0(ulong *current, int handle, + print_buffer((ulong)gd->smbios_version, gd->smbios_version, + 1, strlen(gd->smbios_version) + 1, 0); + #endif +- t->bios_release_date = smbios_add_string(ctx, U_BOOT_DMI_DATE); ++ t->bios_release_date = smbios_add_prop(ctx, NULL, U_BOOT_DMI_DATE); + #ifdef CONFIG_ROM_SIZE + t->bios_rom_size = (CONFIG_ROM_SIZE / 65536) - 1; + #endif +@@ -280,22 +285,19 @@ static int smbios_write_type1(ulong *current, int handle, + memset(t, 0, sizeof(struct smbios_type1)); + fill_smbios_header(t, SMBIOS_SYSTEM_INFORMATION, len, handle); + smbios_set_eos(ctx, t->eos); +- t->manufacturer = smbios_add_prop(ctx, "manufacturer"); +- if (!t->manufacturer) +- t->manufacturer = smbios_add_string(ctx, "Unknown"); +- t->product_name = smbios_add_prop(ctx, "product"); +- if (!t->product_name) +- t->product_name = smbios_add_string(ctx, "Unknown Product"); ++ t->manufacturer = smbios_add_prop(ctx, "manufacturer", "Unknown"); ++ t->product_name = smbios_add_prop(ctx, "product", "Unknown"); + t->version = smbios_add_prop_si(ctx, "version", +- SYSINFO_ID_SMBIOS_SYSTEM_VERSION); ++ SYSINFO_ID_SMBIOS_SYSTEM_VERSION, ++ "Unknown"); + if (serial_str) { +- t->serial_number = smbios_add_string(ctx, serial_str); ++ t->serial_number = smbios_add_prop(ctx, NULL, serial_str); + strncpy((char *)t->uuid, serial_str, sizeof(t->uuid)); + } else { +- t->serial_number = smbios_add_prop(ctx, "serial"); ++ t->serial_number = smbios_add_prop(ctx, "serial", "Unknown"); + } +- t->sku_number = smbios_add_prop(ctx, "sku"); +- t->family = smbios_add_prop(ctx, "family"); ++ t->sku_number = smbios_add_prop(ctx, "sku", "Unknown"); ++ t->family = smbios_add_prop(ctx, "family", "Unknown"); + + len = t->length + smbios_string_table_len(ctx); + *current += len; +@@ -314,15 +316,12 @@ static int smbios_write_type2(ulong *current, int handle, + memset(t, 0, sizeof(struct smbios_type2)); + fill_smbios_header(t, SMBIOS_BOARD_INFORMATION, len, handle); + smbios_set_eos(ctx, t->eos); +- t->manufacturer = smbios_add_prop(ctx, "manufacturer"); +- if (!t->manufacturer) +- t->manufacturer = smbios_add_string(ctx, "Unknown"); +- t->product_name = smbios_add_prop(ctx, "product"); +- if (!t->product_name) +- t->product_name = smbios_add_string(ctx, "Unknown Product"); ++ t->manufacturer = smbios_add_prop(ctx, "manufacturer", "Unknown"); ++ t->product_name = smbios_add_prop(ctx, "product", "Unknown"); + t->version = smbios_add_prop_si(ctx, "version", +- SYSINFO_ID_SMBIOS_BASEBOARD_VERSION); +- t->asset_tag_number = smbios_add_prop(ctx, "asset-tag"); ++ SYSINFO_ID_SMBIOS_BASEBOARD_VERSION, ++ "Unknown"); ++ t->asset_tag_number = smbios_add_prop(ctx, "asset-tag", "Unknown"); + t->feature_flags = SMBIOS_BOARD_FEATURE_HOSTING; + t->board_type = SMBIOS_BOARD_MOTHERBOARD; + +@@ -343,9 +342,7 @@ static int smbios_write_type3(ulong *current, int handle, + memset(t, 0, sizeof(struct smbios_type3)); + fill_smbios_header(t, SMBIOS_SYSTEM_ENCLOSURE, len, handle); + smbios_set_eos(ctx, t->eos); +- t->manufacturer = smbios_add_prop(ctx, "manufacturer"); +- if (!t->manufacturer) +- t->manufacturer = smbios_add_string(ctx, "Unknown"); ++ t->manufacturer = smbios_add_prop(ctx, "manufacturer", "Unknown"); + t->chassis_type = SMBIOS_ENCLOSURE_DESKTOP; + t->bootup_state = SMBIOS_STATE_SAFE; + t->power_supply_state = SMBIOS_STATE_SAFE; +@@ -388,8 +385,8 @@ static void smbios_write_type4_dm(struct smbios_type4 *t, + #endif + + t->processor_family = processor_family; +- t->processor_manufacturer = smbios_add_string(ctx, vendor); +- t->processor_version = smbios_add_string(ctx, name); ++ t->processor_manufacturer = smbios_add_prop(ctx, NULL, vendor); ++ t->processor_version = smbios_add_prop(ctx, NULL, name); + } + + static int smbios_write_type4(ulong *current, int handle, + +From patchwork Thu Dec 7 09:18:50 2023 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +X-Patchwork-Submitter: Ilias Apalodimas +X-Patchwork-Id: 1873090 +Return-Path: +X-Original-To: incoming@patchwork.ozlabs.org +Delivered-To: patchwork-incoming@legolas.ozlabs.org +Authentication-Results: legolas.ozlabs.org; + dkim=pass (2048-bit key; + unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256 + header.s=google header.b=KcFhbOkM; + dkim-atps=neutral +Authentication-Results: legolas.ozlabs.org; + spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de + (client-ip=85.214.62.61; helo=phobos.denx.de; + envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) +Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) + (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) + key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) + (No client certificate requested) + by legolas.ozlabs.org (Postfix) with ESMTPS id 4Sm7yF71l9z23nD + for ; Thu, 7 Dec 2023 20:19:33 +1100 (AEDT) +Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) + by phobos.denx.de (Postfix) with ESMTP id 7D6CB87483; + Thu, 7 Dec 2023 10:19:07 +0100 (CET) +Authentication-Results: phobos.denx.de; + dmarc=pass (p=none dis=none) header.from=linaro.org +Authentication-Results: phobos.denx.de; + spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de +Authentication-Results: phobos.denx.de; + dkim=pass (2048-bit key; + unprotected) header.d=linaro.org header.i=@linaro.org header.b="KcFhbOkM"; + dkim-atps=neutral +Received: by phobos.denx.de (Postfix, from userid 109) + id B1E298745E; Thu, 7 Dec 2023 10:19:05 +0100 (CET) +X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de +X-Spam-Level: +X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, + DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, + T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 +Received: from mail-wr1-x433.google.com (mail-wr1-x433.google.com + [IPv6:2a00:1450:4864:20::433]) + (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) + (No client certificate requested) + by phobos.denx.de (Postfix) with ESMTPS id 792A8871BB + for ; Thu, 7 Dec 2023 10:19:03 +0100 (CET) +Authentication-Results: phobos.denx.de; + dmarc=pass (p=none dis=none) header.from=linaro.org +Authentication-Results: phobos.denx.de; + spf=pass smtp.mailfrom=ilias.apalodimas@linaro.org +Received: by mail-wr1-x433.google.com with SMTP id + ffacd0b85a97d-3334a701cbbso717814f8f.0 + for ; Thu, 07 Dec 2023 01:19:03 -0800 (PST) +DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; + d=linaro.org; s=google; t=1701940743; x=1702545543; darn=lists.denx.de; + h=content-transfer-encoding:mime-version:references:in-reply-to + :message-id:date:subject:cc:to:from:from:to:cc:subject:date + :message-id:reply-to; + bh=JIRbBgzEcdaHWJ7fVa5JIsDJda65F2tSuL1aji2tJ5U=; + b=KcFhbOkMkvXbThdeAeI92+uSdN5LvKdwae+36Z/jz0Hg0yPDs5v8UqeDt2d+NaSlh9 + GERy8kIMCopTcJ13FoUM8Ok4PBSMRSDxbJo4lLaGIbddw7hcit4uxhJfTAL8zKxnboMU + YBZPC/E2NjWklmJx6p4zmLeXS5IzncTaDE9z2XFMRGrJ/KLqpTvwOp/nf57jP/kdIxpe + Q7vWAhVY8gC19ogSD41RB4ixA0HefI6xKq6fAl2GwvRlOvCEGAcVdpbl8aj5R8qEOSVT + BsuqzbDXHlQI6L9Y++Yqe89LcKMRoAWqHrgOuO3eBwnEp2jjjzV8G24mTFD+4wso1ERo + mIkQ== +X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; + d=1e100.net; s=20230601; t=1701940743; x=1702545543; + h=content-transfer-encoding:mime-version:references:in-reply-to + :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc + :subject:date:message-id:reply-to; + bh=JIRbBgzEcdaHWJ7fVa5JIsDJda65F2tSuL1aji2tJ5U=; + b=pee1V3/z6lW4enMw0ueHvBJJXGhNLq7KccXmY4QkXfVRLXGBOedbBwQH1KXDxj/gJs + RZ/KhsEvPN4qeqrqpeOnQoDBQs3QarjlsMHmlhnlBZMpgPKTJyg5MEpZPAlnfqZJkd4A + vMMYc1fZ+alT5gfZjdzpLypC2sOj9yC3ktb8ZYXQGQzN7yCYrQnBHgiYn3vDDaHMaQNH + n73RxiQNWJs9Ekow2hxk4l2FDpvlwuiFr9y+dnuzo5TvpbgaDbj64tcqxalnusBw3jKC + fE6r5cob553rh/ZM/bVJD/PIXP+LOSUHyiqJG+7KpEpSAY984EIHkKFRRbLHSIuwBAK+ + wTIw== +X-Gm-Message-State: AOJu0YwQcpf2rvKZHAPWsPT7fH7x3sa+mhF5kDJ557Oe9zwmQc4v6NzO + ZFEgE8KlljYnqibJKd2JdRCP6A== +X-Google-Smtp-Source: + AGHT+IEfJolrJ5g6Qgn465DsdBpMZMW+cn6kVgLvehQIXNT7VcXYfkBvC8Hf5zXnl7Q5Yto7bS2tOg== +X-Received: by 2002:a05:600c:d5:b0:40b:5e59:99c6 with SMTP id + u21-20020a05600c00d500b0040b5e5999c6mr940484wmm.230.1701940742953; + Thu, 07 Dec 2023 01:19:02 -0800 (PST) +Received: from localhost.localdomain (ppp046103111243.access.hol.gr. + [46.103.111.243]) by smtp.gmail.com with ESMTPSA id + u21-20020a05600c139500b00405d9a950a2sm1299003wmf.28.2023.12.07.01.19.01 + (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); + Thu, 07 Dec 2023 01:19:02 -0800 (PST) +From: Ilias Apalodimas +To: trini@konsulko.com, + sjg@chromium.org +Cc: sean.anderson@seco.com, neil.armstrong@linaro.org, + heinrich.schuchardt@canonical.com, mark.kettenis@xs4all.nl, + Ilias Apalodimas , u-boot@lists.denx.de +Subject: [PATCH 2/2 v3] smbios: Fallback to the default DT if sysinfo nodes + are missing +Date: Thu, 7 Dec 2023 11:18:50 +0200 +Message-Id: <20231207091850.17776-3-ilias.apalodimas@linaro.org> +X-Mailer: git-send-email 2.40.1 +In-Reply-To: <20231207091850.17776-1-ilias.apalodimas@linaro.org> +References: <20231207091850.17776-1-ilias.apalodimas@linaro.org> +MIME-Version: 1.0 +X-BeenThere: u-boot@lists.denx.de +X-Mailman-Version: 2.1.39 +Precedence: list +List-Id: U-Boot discussion +List-Unsubscribe: , + +List-Archive: +List-Post: +List-Help: +List-Subscribe: , + +Errors-To: u-boot-bounces@lists.denx.de +Sender: "U-Boot" +X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de +X-Virus-Status: Clean + +In order to fill in the SMBIOS tables U-Boot currently relies on a +"u-boot,sysinfo-smbios" compatible node. This is fine for the boards +that already include such nodes. However with some recent EFI changes, +the majority of boards can boot up distros, which usually rely on +things like dmidecode etc for their reporting. For boards that +lack this special node the SMBIOS output looks like: + +System Information + Manufacturer: Unknown + Product Name: Unknown + Version: Unknown + Serial Number: Unknown + UUID: Not Settable + Wake-up Type: Reserved + SKU Number: Unknown + Family: Unknown + +This looks problematic since most of the info are "Unknown". The DT spec +specifies standard properties containing relevant information like +'model' and 'compatible' for which the suggested format is +. Unfortunately the 'model' string found in DTs is +usually lacking the manufacturer so we can't use it for both +'Manufacturer' and 'Product Name' SMBIOS entries reliably. + +So let's add a last resort to our current smbios parsing. If none of +the sysinfo properties are found, scan for those information in the +root node of the device tree. Use the 'model' to fill the 'Product +Name' and the first value of 'compatible' for the 'Manufacturer', since +that always contains one. + +pre-patch: +Handle 0x0001, DMI type 1, 27 bytes +System Information + Manufacturer: Unknown + Product Name: Unknown + Version: Unknown + Serial Number: 100000000bb24ceb + UUID: 30303031-3030-3030-3061-613234636435 + Wake-up Type: Reserved + SKU Number: Unknown + Family: Unknown +[...] + +and post patch: +Handle 0x0001, DMI type 1, 27 bytes +System Information + Manufacturer: raspberrypi + Product Name: Raspberry Pi 4 Model B Rev 1.1 + Version: Unknown + Serial Number: 100000000bb24ceb + UUID: 30303031-3030-3030-3061-613234636435 + Wake-up Type: Reserved + SKU Number: Unknown + Family: Unknown +[...] + +Signed-off-by: Ilias Apalodimas +--- +Simon, I'll work with tou on the refactoring you wanted and +remove the EFI requirement of SMBIOS in !x86 platforms. +Since this code has no tests, I'll add some once the refactoring +is done + +Changes since v2: +- Spelling mistakes +- rebase on top of patch #1 changes +Changes since v1: +- Tokenize the DT node entry and use the appropriate value instead of + the entire string +- Removed Peters tested/reviewed-by tags due to the above + lib/smbios.c | 94 +++++++++++++++++++++++++++++++++++++++++++++++++--- + 1 file changed, 89 insertions(+), 5 deletions(-) + +-- +2.40.1 + +diff --git a/lib/smbios.c b/lib/smbios.c +index 444aa245a273..3f0e1d529537 100644 +--- a/lib/smbios.c ++++ b/lib/smbios.c +@@ -9,11 +9,14 @@ + #include + #include + #include ++#include + #include + #include + #include + #include + #include ++#include ++#include + #ifdef CONFIG_CPU + #include + #include +@@ -43,6 +46,25 @@ + + DECLARE_GLOBAL_DATA_PTR; + ++/** ++ * struct map_sysinfo - Mapping of sysinfo strings to DT ++ * ++ * @sysinfo_str: sysinfo string ++ * @dt_str: DT string ++ * @max: Max index of the tokenized string to pick. Counting starts from 0 ++ * ++ */ ++struct map_sysinfo { ++ const char *sysinfo_str; ++ const char *dt_str; ++ int max; ++}; ++ ++static const struct map_sysinfo sysinfo_to_dt[] = { ++ { .sysinfo_str = "product", .dt_str = "model", 2 }, ++ { .sysinfo_str = "manufacturer", .dt_str = "compatible", 1 }, ++}; ++ + /** + * struct smbios_ctx - context for writing SMBIOS tables + * +@@ -87,6 +109,18 @@ struct smbios_write_method { + const char *subnode_name; + }; + ++static const struct map_sysinfo *convert_sysinfo_to_dt(const char *sysinfo_str) ++{ ++ int i; ++ ++ for (i = 0; i < ARRAY_SIZE(sysinfo_to_dt); i++) { ++ if (!strcmp(sysinfo_str, sysinfo_to_dt[i].sysinfo_str)) ++ return &sysinfo_to_dt[i]; ++ } ++ ++ return NULL; ++} ++ + /** + * smbios_add_string() - add a string to the string area + * +@@ -124,6 +158,42 @@ static int smbios_add_string(struct smbios_ctx *ctx, const char *str) + } + } + ++/** ++ * get_str_from_dt - Get a substring from a DT property. ++ * After finding the property in the DT, the function ++ * will parse comma-separated values and return the value. ++ * If nprop->max exceeds the number of comma-separated ++ * elements, the last non NULL value will be returned. ++ * Counting starts from zero. ++ * ++ * @nprop: sysinfo property to use ++ * @str: pointer to fill with data ++ * @size: str buffer length ++ */ ++static ++void get_str_from_dt(const struct map_sysinfo *nprop, char *str, size_t size) ++{ ++ const char *dt_str; ++ int cnt = 0; ++ char *token; ++ ++ memset(str, 0, size); ++ if (!nprop || !nprop->max) ++ return; ++ ++ dt_str = ofnode_read_string(ofnode_root(), nprop->dt_str); ++ if (!dt_str) ++ return; ++ ++ memcpy(str, dt_str, size); ++ token = strtok(str, ","); ++ while (token && cnt < nprop->max) { ++ strlcpy(str, token, strlen(token) + 1); ++ token = strtok(NULL, ","); ++ cnt++; ++ } ++} ++ + /** + * smbios_add_prop_si() - Add a property from the devicetree or sysinfo + * +@@ -137,6 +207,8 @@ static int smbios_add_string(struct smbios_ctx *ctx, const char *str) + static int smbios_add_prop_si(struct smbios_ctx *ctx, const char *prop, + int sysinfo_id, const char *dval) + { ++ int ret; ++ + if (!dval || !*dval) + dval = "Unknown"; + +@@ -145,18 +217,30 @@ static int smbios_add_prop_si(struct smbios_ctx *ctx, const char *prop, + + if (sysinfo_id && ctx->dev) { + char val[SMBIOS_STR_MAX]; +- int ret; + + ret = sysinfo_get_str(ctx->dev, sysinfo_id, sizeof(val), val); + if (!ret) + return smbios_add_string(ctx, val); + } + if (IS_ENABLED(CONFIG_OF_CONTROL)) { +- const char *str; +- +- str = ofnode_read_string(ctx->node, prop); ++ const char *str = NULL; ++ char str_dt[128] = { 0 }; ++ /* ++ * If the node is not valid fallback and try the entire DT ++ * so we can at least fill in manufacturer and board type ++ */ ++ if (ofnode_valid(ctx->node)) { ++ str = ofnode_read_string(ctx->node, prop); ++ } else { ++ const struct map_sysinfo *nprop; ++ ++ nprop = convert_sysinfo_to_dt(prop); ++ get_str_from_dt(nprop, str_dt, sizeof(str_dt)); ++ str = (const char *)str_dt; ++ } + +- return smbios_add_string(ctx, str ? str : dval); ++ ret = smbios_add_string(ctx, str && *str ? str : dval); ++ return ret; + } + + return 0; diff --git a/sources b/sources index a04670b..baad200 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (u-boot-2024.01-rc3.tar.bz2) = 51a45e6a0008ef04570b6357518c85fd22604be0090ad5bf1dc7c821eb34ea33441314c49128dd0bd3084406b7138497044bb47f7e57d38a680768fb9f2f6577 +SHA512 (u-boot-2024.01-rc4.tar.bz2) = 02ad9abe2a0c34fb11e75f75b1d76a4dc2df2886ed00f0fbec090cfe87d586becfee7c1edce8e95d26d1e34ead26faf928d17fdc6f8dee158a73f93c0078ae0a diff --git a/uboot-tools.spec b/uboot-tools.spec index 6635f59..e77092e 100644 --- a/uboot-tools.spec +++ b/uboot-tools.spec @@ -1,4 +1,4 @@ -%global candidate rc3 +%global candidate rc4 %if 0%{?rhel} %bcond_with toolsonly %else @@ -7,7 +7,7 @@ Name: uboot-tools Version: 2024.01 -Release: 0.1%{?candidate:.%{candidate}}%{?dist} +Release: 0.2%{?candidate:.%{candidate}}%{?dist} Epoch: 1 Summary: U-Boot utilities License: GPLv2+ BSD LGPL-2.1+ LGPL-2.0+ @@ -19,8 +19,7 @@ Source1: aarch64-boards Patch1: uefi-distro-load-FDT-from-any-partition-on-boot-device.patch Patch2: disable-VBE-by-default.patch -Patch3: 0001-smbios-Simplify-reporting-of-unknown-values.patch -Patch4: 0002-smbios-Fallback-to-the-default-DT-if-sysinfo-nodes-a.patch +Patch3: Provide-a-fallback-to-smbios-tables.patch Patch5: enable-bootmenu-by-default.patch Patch6: uefi-Boot-var-automatic-management-for-removable-medias.patch Patch7: Add-video-damage-tracking.patch @@ -215,6 +214,10 @@ cp -p board/sunxi/README.nand builds/docs/README.sunxi-nand %endif %changelog +* Thu Dec 07 2023 Peter Robinson - 1:2024.01-0.2.rc4 +- Update to 2024.01 RC4 +- Rebase SMBIOS patch to latest rev + * Fri Nov 24 2023 Peter Robinson - 1:2024.01-0.1.rc3 - Update to 2024.01 RC3