public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Detlev Casanova <detlev.casanova@collabora.com>
To: u-boot@lists.denx.de
Cc: Marek Vasut <marek.vasut+renesas@mailbox.org>,
	Hai Pham <hai.pham.ud@renesas.com>,
	Tam Nguyen <tam.nguyen.xa@renesas.com>,
	Detlev Casanova <detlev.casanova@collabora.com>
Subject: [PATCH v1 2/4] cmd: Add a sysinfo command
Date: Fri, 16 Jun 2023 11:21:20 -0400	[thread overview]
Message-ID: <20230616152122.588168-3-detlev.casanova@collabora.com> (raw)
In-Reply-To: <20230616152122.588168-1-detlev.casanova@collabora.com>

The command is able to show different information for the running
system:
* Model name
* Board ID
* Revision

This command can be used by boot shell scripts to select configurations
depending on the specific running system.

Signed-off-by: Detlev Casanova <detlev.casanova@collabora.com>
---
 cmd/Kconfig   |   6 +++
 cmd/Makefile  |   1 +
 cmd/sysinfo.c | 124 ++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 131 insertions(+)
 create mode 100644 cmd/sysinfo.c

diff --git a/cmd/Kconfig b/cmd/Kconfig
index 365371fb511..ba4844853a1 100644
--- a/cmd/Kconfig
+++ b/cmd/Kconfig
@@ -210,6 +210,12 @@ config CMD_SBI
 	help
 	  Display information about the SBI implementation.
 
+config CMD_SYSINFO
+	bool "sysinfo"
+	depends on SYSINFO
+	help
+	  Display information about the system.
+
 endmenu
 
 menu "Boot commands"
diff --git a/cmd/Makefile b/cmd/Makefile
index 6c37521b4e2..ba4d6de9a1b 100644
--- a/cmd/Makefile
+++ b/cmd/Makefile
@@ -165,6 +165,7 @@ obj-$(CONFIG_CMD_SPI) += spi.o
 obj-$(CONFIG_CMD_STRINGS) += strings.o
 obj-$(CONFIG_CMD_SMC) += smccc.o
 obj-$(CONFIG_CMD_SYSBOOT) += sysboot.o
+obj-$(CONFIG_CMD_SYSINFO) += sysinfo.o
 obj-$(CONFIG_CMD_STACKPROTECTOR_TEST) += stackprot_test.o
 obj-$(CONFIG_CMD_TEMPERATURE) += temperature.o
 obj-$(CONFIG_CMD_TERMINAL) += terminal.o
diff --git a/cmd/sysinfo.c b/cmd/sysinfo.c
new file mode 100644
index 00000000000..31cb27ae46e
--- /dev/null
+++ b/cmd/sysinfo.c
@@ -0,0 +1,124 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright 2023
+ * Detlev Casanova <detlev.casanova@collabora.com>
+ */
+
+#include <command.h>
+#include <env.h>
+#include <sysinfo.h>
+#include <vsprintf.h>
+
+static int get_sysinfo(struct udevice **dev)
+{
+	int ret = sysinfo_get(dev);
+
+	if (ret) {
+		debug("Cannot get sysinfo: %d\n", ret);
+		return ret;
+	}
+
+	ret = sysinfo_detect(*dev);
+	if (ret) {
+		debug("Cannot detect sysinfo: %d\n", ret);
+		return ret;
+	}
+
+	return 0;
+}
+
+static int do_sysinfo_model(struct cmd_tbl *cmdtp, int flag, int argc,
+			    char *const argv[])
+{
+	struct udevice *dev;
+	char model[64];
+	int ret = get_sysinfo(&dev);
+
+	if (ret)
+		return ret;
+
+	ret = sysinfo_get_str(dev,
+			      SYSINFO_ID_BOARD_MODEL,
+			      64,
+			      model);
+
+	if (ret) {
+		debug("Cannot get sysinfo str: %d\n", ret);
+		return ret;
+	}
+
+	if (argc == 2)
+		env_set(argv[1], model);
+	else
+		printf("%s\n", model);
+
+	return 0;
+}
+
+static int do_sysinfo_id(struct cmd_tbl *cmdtp, int flag, int argc,
+			 char *const argv[])
+{
+	struct udevice *dev;
+	u32 board_id;
+	char board_id_str[5] = { '\0' };
+	int ret = get_sysinfo(&dev);
+
+	if (ret)
+		return ret;
+
+	ret = sysinfo_get_int(dev,
+			      SYSINFO_ID_BOARD_ID,
+			      &board_id);
+
+	if (ret) {
+		debug("Cannot get sysinfo int: %d\n", ret);
+		return ret;
+	}
+
+	sprintf(board_id_str, "0x%02x", board_id);
+	if (argc == 2)
+		env_set(argv[1], board_id_str);
+	else
+		printf("%s\n", board_id_str);
+
+	return 0;
+}
+
+static int do_sysinfo_revision(struct cmd_tbl *cmdtp, int flag, int argc,
+			       char *const argv[])
+{
+	struct udevice *dev;
+	char rev[4];
+	int ret = get_sysinfo(&dev);
+
+	if (ret)
+		return ret;
+
+	ret = sysinfo_get_str(dev,
+			      SYSINFO_ID_BOARD_REVISION,
+			      4,
+			      rev);
+
+	if (ret) {
+		debug("Cannot get sysinfo str: %d\n", ret);
+		return ret;
+	}
+
+	if (argc == 2)
+		env_set(argv[1], rev);
+	else
+		printf("%s\n", rev);
+
+	return 0;
+}
+
+static char sysinfo_help_text[] =
+	"model <varname>     - Show or set the board model in varname\n"
+	"sysinfo id <varname>        - Show or set the board id in varname (in format 0xHH)\n"
+	"sysinfo revision <varname>  - Show or set the board revision in varname";
+
+U_BOOT_CMD_WITH_SUBCMDS(sysinfo, "System information", sysinfo_help_text,
+			U_BOOT_SUBCMD_MKENT(model, 2, 1, do_sysinfo_model),
+			U_BOOT_SUBCMD_MKENT(id, 2, 1, do_sysinfo_id),
+			U_BOOT_SUBCMD_MKENT(revision, 2, 1, do_sysinfo_revision),
+);
-- 
2.39.3


  parent reply	other threads:[~2023-06-16 15:21 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-16 15:21 [PATCH v1 0/4] Introduce the sysinfo command Detlev Casanova
2023-06-16 15:21 ` [PATCH v1 1/4] sysinfo: Add IDs for board id and revision Detlev Casanova
2023-06-16 15:21 ` Detlev Casanova [this message]
2023-06-17  0:41   ` [PATCH v1 2/4] cmd: Add a sysinfo command Marek Vasut
2023-06-16 15:21 ` [PATCH v1 3/4] sysinfo: rcar3: Implement BOARD_ID and BOARD_REVISION Detlev Casanova
2023-06-17  0:43   ` Marek Vasut
2023-06-19 14:42     ` Detlev Casanova
2023-06-19 16:11       ` Marek Vasut
2023-06-19 18:27         ` Detlev Casanova
2023-06-19 21:54           ` Marek Vasut
2023-06-20 17:49             ` Detlev Casanova
2023-06-20 20:03               ` Marek Vasut
2023-06-20 20:40                 ` Detlev Casanova
2023-06-21  3:49                   ` Marek Vasut
2023-06-16 15:21 ` [PATCH v1 4/4] configs: rcar3: Add shell function to select the linux devicetree Detlev Casanova
2023-06-17  0:45   ` Marek Vasut
2023-06-19 14:45     ` Detlev Casanova

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230616152122.588168-3-detlev.casanova@collabora.com \
    --to=detlev.casanova@collabora.com \
    --cc=hai.pham.ud@renesas.com \
    --cc=marek.vasut+renesas@mailbox.org \
    --cc=tam.nguyen.xa@renesas.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox