arm: imx8ulp: support print cpu info
authorPeng Fan <peng.fan@nxp.com>
Sat, 7 Aug 2021 08:00:33 +0000 (16:00 +0800)
committerStefano Babic <sbabic@denx.de>
Mon, 9 Aug 2021 12:46:50 +0000 (14:46 +0200)
Support print cpu info. the clock function has not been added, it will
be added in following patches.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
arch/arm/include/asm/arch-imx8ulp/sys_proto.h
arch/arm/mach-imx/imx8ulp/soc.c

index cab12c2..8894611 100644 (file)
@@ -8,4 +8,7 @@
 
 #include <asm/mach-imx/sys_proto.h>
 
+extern unsigned long rom_pointer[];
+
+enum bt_mode get_boot_mode(void);
 #endif
index b3679ae..dcb8dc0 100644 (file)
@@ -3,9 +3,67 @@
  * Copyright 2021 NXP
  */
 
+#include <asm/io.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/imx-regs.h>
 #include <asm/arch/sys_proto.h>
+#include <asm/mach-imx/boot_mode.h>
 
 u32 get_cpu_rev(void)
 {
        return (MXC_CPU_IMX8ULP << 12) | CHIP_REV_1_0;
 }
+
+enum bt_mode get_boot_mode(void)
+{
+       u32 bt0_cfg = 0;
+
+       bt0_cfg = readl(CMC0_RBASE + 0x80);
+       bt0_cfg &= (BT0CFG_LPBOOT_MASK | BT0CFG_DUALBOOT_MASK);
+
+       if (!(bt0_cfg & BT0CFG_LPBOOT_MASK)) {
+               /* No low power boot */
+               if (bt0_cfg & BT0CFG_DUALBOOT_MASK)
+                       return DUAL_BOOT;
+               else
+                       return SINGLE_BOOT;
+       }
+
+       return LOW_POWER_BOOT;
+}
+
+#if defined(CONFIG_DISPLAY_CPUINFO)
+const char *get_imx_type(u32 imxtype)
+{
+       return "8ULP";
+}
+
+int print_cpuinfo(void)
+{
+       u32 cpurev;
+       char cause[18];
+
+       cpurev = get_cpu_rev();
+
+       printf("CPU:   Freescale i.MX%s rev%d.%d at %d MHz\n",
+              get_imx_type((cpurev & 0xFF000) >> 12),
+              (cpurev & 0x000F0) >> 4, (cpurev & 0x0000F) >> 0,
+              mxc_get_clock(MXC_ARM_CLK) / 1000000);
+
+       printf("Boot mode: ");
+       switch (get_boot_mode()) {
+       case LOW_POWER_BOOT:
+               printf("Low power boot\n");
+               break;
+       case DUAL_BOOT:
+               printf("Dual boot\n");
+               break;
+       case SINGLE_BOOT:
+       default:
+               printf("Single boot\n");
+               break;
+       }
+
+       return 0;
+}
+#endif