| // SPDX-License-Identifier: GPL-2.0+ |
| /* |
| * 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 |