[PATCH v2 2/3] renesas: rcar3: Expose the board revision in sysinfo

Detlev Casanova detlev.casanova at collabora.com
Mon Jun 12 21:51:06 CEST 2023


The board revision is needed to determine which linux device tree to
load.

Signed-off-by: Detlev Casanova <detlev.casanova at collabora.com>
---
 .../arm/mach-rmobile/include/mach/sys_proto.h |  6 ++
 drivers/sysinfo/rcar3.c                       | 60 +++++++++++--------
 2 files changed, 40 insertions(+), 26 deletions(-)

diff --git a/arch/arm/mach-rmobile/include/mach/sys_proto.h b/arch/arm/mach-rmobile/include/mach/sys_proto.h
index e020b24f7c2..1f204f06c17 100644
--- a/arch/arm/mach-rmobile/include/mach/sys_proto.h
+++ b/arch/arm/mach-rmobile/include/mach/sys_proto.h
@@ -22,4 +22,10 @@
 #define BOARD_EBISU_4D		0xD
 #define BOARD_CONDOR_I		0x10
 
+/*
+ * Renesas sysinfo board revision
+ */
+#define RCAR_SYSINFO_REV_MAJOR	SYSINFO_ID_USER
+#define RCAR_SYSINFO_REV_MINOR	(SYSINFO_ID_USER + 1)
+
 #endif
diff --git a/drivers/sysinfo/rcar3.c b/drivers/sysinfo/rcar3.c
index b8b837341a2..3223875a99c 100644
--- a/drivers/sysinfo/rcar3.c
+++ b/drivers/sysinfo/rcar3.c
@@ -22,6 +22,8 @@
 struct sysinfo_rcar_priv {
 	char	boardmodel[64];
 	u8	board_id;
+	u8	rev_major;
+	u8	rev_minor;
 	u8	val;
 };
 
@@ -40,6 +42,12 @@ static int sysinfo_rcar_get_int(struct udevice *dev, int id, int *val)
 	case SYSINFO_ID_BOARD_MODEL:
 		*val = priv->board_id;
 		return 0;
+	case RCAR_SYSINFO_REV_MAJOR:
+		*val = priv->rev_major;
+		return 0;
+	case RCAR_SYSINFO_REV_MINOR:
+		*val = priv->rev_minor;
+		return 0;
 	default:
 		return -EINVAL;
 	};
@@ -74,8 +82,8 @@ static void sysinfo_rcar_parse(struct sysinfo_rcar_priv *priv)
 	bool condor_i = false;
 
 	priv->board_id = board_id;
-	char rev_major = '?';
-	char rev_minor = '?';
+	priv->rev_major = '?';
+	priv->rev_minor = '?';
 
 	switch (board_id) {
 	case BOARD_SALVATOR_XS:
@@ -83,81 +91,81 @@ static void sysinfo_rcar_parse(struct sysinfo_rcar_priv *priv)
 		fallthrough;
 	case BOARD_SALVATOR_X:
 		if (!(board_rev & ~1)) { /* Only rev 0 and 1 is valid */
-			rev_major = '1';
-			rev_minor = '0' + (board_rev & BIT(0));
+			priv->rev_major = '1';
+			priv->rev_minor = '0' + (board_rev & BIT(0));
 		}
 		snprintf(priv->boardmodel, sizeof(priv->boardmodel),
 			 "Renesas Salvator-X%s board rev %c.%c",
-			 salvator_xs ? "S" : "", rev_major, rev_minor);
+			 salvator_xs ? "S" : "", priv->rev_major, priv->rev_minor);
 		return;
 	case BOARD_STARTER_KIT:
 		if (!(board_rev & ~1)) { /* Only rev 0 and 1 is valid */
-			rev_major = (board_rev & BIT(0)) ? '3' : '1';
-			rev_minor = '0';
+			priv->rev_major = (board_rev & BIT(0)) ? '3' : '1';
+			priv->rev_minor = '0';
 		}
 		snprintf(priv->boardmodel, sizeof(priv->boardmodel),
 			 "Renesas Starter Kit board rev %c.%c",
-			 rev_major, rev_minor);
+			 priv->rev_major, priv->rev_minor);
 		return;
 	case BOARD_STARTER_KIT_PRE:
 		if (!(board_rev & ~3)) { /* Only rev 0..3 is valid */
-			rev_major = (board_rev & BIT(1)) ? '2' : '1';
-			rev_minor = (board_rev == 3) ? '1' : '0';
+			priv->rev_major = (board_rev & BIT(1)) ? '2' : '1';
+			priv->rev_minor = (board_rev == 3) ? '1' : '0';
 		}
 		snprintf(priv->boardmodel, sizeof(priv->boardmodel),
 			 "Renesas Starter Kit Premier board rev %c.%c",
-			 rev_major, rev_minor);
+			 priv->rev_major, priv->rev_minor);
 		return;
 	case BOARD_EAGLE:
 		if (!board_rev) { /* Only rev 0 is valid */
-			rev_major = '1';
-			rev_minor = '0';
+			priv->rev_major = '1';
+			priv->rev_minor = '0';
 		}
 		snprintf(priv->boardmodel, sizeof(priv->boardmodel),
 			 "Renesas Eagle board rev %c.%c",
-			 rev_major, rev_minor);
+			 priv->rev_major, priv->rev_minor);
 		return;
 	case BOARD_EBISU_4D:
 		ebisu_4d = true;
 		fallthrough;
 	case BOARD_EBISU:
 		if (!board_rev) { /* Only rev 0 is valid */
-			rev_major = '1';
-			rev_minor = '0';
+			priv->rev_major = '1';
+			priv->rev_minor = '0';
 		}
 		snprintf(priv->boardmodel, sizeof(priv->boardmodel),
 			 "Renesas Ebisu%s board rev %c.%c",
-			 ebisu_4d ? "-4D" : "", rev_major, rev_minor);
+			 ebisu_4d ? "-4D" : "", priv->rev_major, priv->rev_minor);
 		return;
 	case BOARD_DRAAK:
 		if (!board_rev) { /* Only rev 0 is valid */
-			rev_major = '1';
-			rev_minor = '0';
+			priv->rev_major = '1';
+			priv->rev_minor = '0';
 		}
 		snprintf(priv->boardmodel, sizeof(priv->boardmodel),
 			 "Renesas Draak board rev %c.%c",
-			 rev_major, rev_minor);
+			 priv->rev_major, priv->rev_minor);
 		return;
 	case BOARD_KRIEK:
 		if (!board_rev) { /* Only rev 0 is valid */
-			rev_major = '1';
-			rev_minor = '0';
+			priv->rev_major = '1';
+			priv->rev_minor = '0';
 		}
 		snprintf(priv->boardmodel, sizeof(priv->boardmodel),
 			 "Renesas Kriek board rev %c.%c",
-			 rev_major, rev_minor);
+			 priv->rev_major, priv->rev_minor);
 		return;
 	case BOARD_CONDOR_I:
 		condor_i = true;
 		fallthrough;
 	case BOARD_CONDOR:
 		if (!board_rev) { /* Only rev 0 is valid */
-			rev_major = '1';
-			rev_minor = '0';
+			priv->rev_major = '1';
+			priv->rev_minor = '0';
 		}
 		snprintf(priv->boardmodel, sizeof(priv->boardmodel),
 			"Renesas Condor%s board rev %c.%c",
-			condor_i ? "-I" : "", rev_major, rev_minor);
+			condor_i ? "-I" : "", priv->rev_major, priv->rev_minor);
 		return;
 	default:
 		snprintf(priv->boardmodel, sizeof(priv->boardmodel),
-- 
2.39.3



More information about the U-Boot mailing list