From: Michael Walle <michael@walle.cc>
Date: Mon, 15 Nov 2021 22:45:46 +0000 (+0100)
Subject: board: sl28: print CPLD version on bootup
X-Git-Tag: v2025.01-rc5-pxa1908~1517^2~8
X-Git-Url: http://git.dujemihanovic.xyz/html/index.html?a=commitdiff_plain;h=d36b683a0f4d9cd22aded61595b771c88203f3ab;p=u-boot.git

board: sl28: print CPLD version on bootup

Most of the time it is very useful to have the version of the board
management controller. Now that we have a driver, print it during
startup.

Signed-off-by: Michael Walle <michael@walle.cc>
Reviewed-by: Priyanka Jain <priyanka.jain@nxp.com>
---

diff --git a/board/kontron/sl28/sl28.c b/board/kontron/sl28/sl28.c
index a4ee8a1ef3..9cde48e61e 100644
--- a/board/kontron/sl28/sl28.c
+++ b/board/kontron/sl28/sl28.c
@@ -1,6 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0+
 
 #include <common.h>
+#include <dm.h>
 #include <malloc.h>
 #include <errno.h>
 #include <fsl_ddr.h>
@@ -15,6 +16,7 @@
 #include <fsl_immap.h>
 #include <netdev.h>
 
+#include <sl28cpld.h>
 #include <fdtdec.h>
 #include <miiphy.h>
 
@@ -39,9 +41,35 @@ int board_eth_init(struct bd_info *bis)
 	return pci_eth_init(bis);
 }
 
+static int __sl28cpld_read(uint reg)
+{
+	struct udevice *dev;
+	int ret;
+
+	ret = uclass_get_device_by_driver(UCLASS_NOP,
+					  DM_DRIVER_GET(sl28cpld), &dev);
+	if (ret)
+		return ret;
+
+	return sl28cpld_read(dev, reg);
+}
+
+static void print_cpld_version(void)
+{
+	int version = __sl28cpld_read(SL28CPLD_VERSION);
+
+	if (version < 0)
+		printf("CPLD:  error reading version (%d)\n", version);
+	else
+		printf("CPLD:  v%d\n", version);
+}
+
 int checkboard(void)
 {
 	printf("EL:    %d\n", current_el());
+	if (CONFIG_IS_ENABLED(SL28CPLD))
+		print_cpld_version();
+
 	return 0;
 }
 
diff --git a/include/sl28cpld.h b/include/sl28cpld.h
index d116607cfb..9a7c6de31f 100644
--- a/include/sl28cpld.h
+++ b/include/sl28cpld.h
@@ -6,6 +6,8 @@
 #ifndef __SL28CPLD_H
 #define __SL28CPLD_H
 
+#define SL28CPLD_VERSION	0x03
+
 int sl28cpld_read(struct udevice *dev, uint offset);
 int sl28cpld_write(struct udevice *dev, uint offset, uint8_t value);
 int sl28cpld_update(struct udevice *dev, uint offset, uint8_t clear,