blob: dcb8dc019f96ee356bb0429ce7f919fbc4a201fc [file] [log] [blame]
Peng Fan5c2218a2021-08-07 16:00:31 +08001// SPDX-License-Identifier: GPL-2.0+
2/*
3 * Copyright 2021 NXP
4 */
5
Peng Fan72530162021-08-07 16:00:33 +08006#include <asm/io.h>
7#include <asm/arch/clock.h>
8#include <asm/arch/imx-regs.h>
Peng Fan5c2218a2021-08-07 16:00:31 +08009#include <asm/arch/sys_proto.h>
Peng Fan72530162021-08-07 16:00:33 +080010#include <asm/mach-imx/boot_mode.h>
Peng Fan5c2218a2021-08-07 16:00:31 +080011
12u32 get_cpu_rev(void)
13{
14 return (MXC_CPU_IMX8ULP << 12) | CHIP_REV_1_0;
15}
Peng Fan72530162021-08-07 16:00:33 +080016
17enum bt_mode get_boot_mode(void)
18{
19 u32 bt0_cfg = 0;
20
21 bt0_cfg = readl(CMC0_RBASE + 0x80);
22 bt0_cfg &= (BT0CFG_LPBOOT_MASK | BT0CFG_DUALBOOT_MASK);
23
24 if (!(bt0_cfg & BT0CFG_LPBOOT_MASK)) {
25 /* No low power boot */
26 if (bt0_cfg & BT0CFG_DUALBOOT_MASK)
27 return DUAL_BOOT;
28 else
29 return SINGLE_BOOT;
30 }
31
32 return LOW_POWER_BOOT;
33}
34
35#if defined(CONFIG_DISPLAY_CPUINFO)
36const char *get_imx_type(u32 imxtype)
37{
38 return "8ULP";
39}
40
41int print_cpuinfo(void)
42{
43 u32 cpurev;
44 char cause[18];
45
46 cpurev = get_cpu_rev();
47
48 printf("CPU: Freescale i.MX%s rev%d.%d at %d MHz\n",
49 get_imx_type((cpurev & 0xFF000) >> 12),
50 (cpurev & 0x000F0) >> 4, (cpurev & 0x0000F) >> 0,
51 mxc_get_clock(MXC_ARM_CLK) / 1000000);
52
53 printf("Boot mode: ");
54 switch (get_boot_mode()) {
55 case LOW_POWER_BOOT:
56 printf("Low power boot\n");
57 break;
58 case DUAL_BOOT:
59 printf("Dual boot\n");
60 break;
61 case SINGLE_BOOT:
62 default:
63 printf("Single boot\n");
64 break;
65 }
66
67 return 0;
68}
69#endif