Add support for printing CPU info for all K3 devices.

Signed-off-by: Lokesh Vutla <[email protected]>
---
 arch/arm/mach-k3/common.c                | 43 ++++++++++++++++++++++++
 arch/arm/mach-k3/common.h                | 15 +++++++++
 arch/arm/mach-k3/include/mach/hardware.h | 24 +++++++++++++
 3 files changed, 82 insertions(+)

diff --git a/arch/arm/mach-k3/common.c b/arch/arm/mach-k3/common.c
index 3e36d90ace..7339d7398d 100644
--- a/arch/arm/mach-k3/common.c
+++ b/arch/arm/mach-k3/common.c
@@ -14,6 +14,22 @@
 #include <linux/soc/ti/ti_sci_protocol.h>
 #include <fdt_support.h>
 #include <asm/arch/sys_proto.h>
+#include <asm/hardware.h>
+#include <asm/io.h>
+
+#if defined(CONFIG_DISPLAY_CPUINFO)
+static const char soc_name[K3_MAX + 1][SOC_NAME_MAX_LENGTH] = {
+       [AM654] = "AM654",
+       [J721E] = "J721E",
+       [K3_MAX] = "UNKNOWN"
+};
+
+static const char soc_revision[REV_PG_MAX + 1][SOC_REVISION_MAX_LENGTH] = {
+       [REV_PG1_0] = "1.0",
+       [REV_PG2_0] = "2.0",
+       [REV_PG_MAX] = "NULL"
+};
+#endif
 
 struct ti_sci_handle *get_ti_sci_handle(void)
 {
@@ -144,3 +160,30 @@ void reset_cpu(ulong ignored)
 {
 }
 #endif
+
+#if defined(CONFIG_DISPLAY_CPUINFO)
+int print_cpuinfo(void)
+{
+       k3_soc_rev rev;
+       k3_soc soc;
+
+       soc = (readl(CTRLMMR_WKUP_JTAG_DEVICE_ID) &
+               DEVICE_ID_FAMILY_MASK) >> DEVICE_ID_FAMILY_SHIFT;
+       rev = (readl(CTRLMMR_WKUP_JTAG_ID) &
+               JTAG_ID_VARIANT_MASK) >> JTAG_ID_VARIANT_SHIFT;
+
+       printf("SoC:   ");
+       if (soc > K3_MAX || !soc_name[soc])
+               printf("Unknown Silicon %d ", soc);
+       else
+               printf("%s ", soc_name[soc]);
+
+       printf("PG ");
+       if (rev > REV_PG_MAX)
+               printf("Unknown revision %d\n", rev);
+       else
+               printf("%s\n", soc_revision[rev]);
+
+       return 0;
+}
+#endif
diff --git a/arch/arm/mach-k3/common.h b/arch/arm/mach-k3/common.h
index ac7e80d9af..9f8fbb1241 100644
--- a/arch/arm/mach-k3/common.h
+++ b/arch/arm/mach-k3/common.h
@@ -8,4 +8,19 @@
 
 #include <asm/armv7_mpu.h>
 
+#define SOC_NAME_MAX_LENGTH                    10
+#define SOC_REVISION_MAX_LENGTH                        5
+
+typedef enum {
+       AM654 = 2,
+       J721E = 4,
+       K3_MAX
+} k3_soc;
+
+typedef enum {
+       REV_PG1_0,
+       REV_PG2_0,
+       REV_PG_MAX
+} k3_soc_rev;
+
 void setup_k3_mpu_regions(void);
diff --git a/arch/arm/mach-k3/include/mach/hardware.h 
b/arch/arm/mach-k3/include/mach/hardware.h
index 4e629822aa..b888dbf0b2 100644
--- a/arch/arm/mach-k3/include/mach/hardware.h
+++ b/arch/arm/mach-k3/include/mach/hardware.h
@@ -13,4 +13,28 @@
 #ifdef CONFIG_SOC_K3_J721E
 #include "j721e_hardware.h"
 #endif
+
+/* Assuming these addresses and definitions stay common across K3 devices */
+#define CTRLMMR_WKUP_JTAG_DEVICE_ID    0x43000018
+#define DEVICE_ID_FAMILY_SHIFT 26
+#define DEVICE_ID_FAMILY_MASK  (0x3f << 26)
+#define DEVICE_ID_BASE_SHIFT   11
+#define DEVICE_ID_BASE_MASK    (0x1fff << 11)
+#define DEVICE_ID_SPEED_SHIFT  6
+#define DEVICE_ID_SPEED_MASK   (0x1f << 6)
+#define DEVICE_ID_TEMP_SHIFT   3
+#define DEVICE_ID_TEMP_MASK    (0x7 << 3)
+
+#define CTRLMMR_WKUP_JTAG_ID           0x43000014
+#define JTAG_ID_VARIANT_SHIFT  28
+#define JTAG_ID_VARIANT_MASK   (0xf << 28)
+#define JTAG_ID_PARTNO_SHIFT   12
+#define JTAG_ID_PARTNO_MASK    (0x7ff << 1)
+
+#define CTRLMMR_WKUP_DIE_ID0   0x43000020
+#define CTRLMMR_WKUP_DIE_ID1   0x43000024
+#define CTRLMMR_WKUP_DIE_ID2   0x43000028
+#define CTRLMMR_WKUP_DIE_ID3   0x4300002c
+#define CTRLMMR_WKUP_BOOTCFG   0x43000034
+
 #endif /* _ASM_ARCH_HARDWARE_H_ */
-- 
2.23.0

_______________________________________________
U-Boot mailing list
[email protected]
https://lists.denx.de/listinfo/u-boot

Reply via email to