Commit 8aa1505b59159cf8f52ba7441dd9e71c3caf1ded

Authored by Peng Fan
Committed by Stefano Babic
1 parent 60d33fcd19

imx8: add boot device detection

Add get_boot_device to detect boot device.
Add print_bootinfo to print the boot device info.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
Reviewed-by: Anatolij Gustschin <agust@denx.de>
Cc: Stefano Babic <sbabic@denx.de>

Showing 2 changed files with 95 additions and 0 deletions Side-by-side Diff

arch/arm/include/asm/arch-imx8/sys_proto.h
  1 +/* SPDX-License-Identifier: GPL-2.0+ */
  2 +/*
  3 + * Copyright 2018 NXP
  4 + */
  5 +
  6 +#include <asm/mach-imx/sys_proto.h>
  7 +#include <linux/types.h>
  8 +
  9 +enum boot_device get_boot_device(void);
  10 +int print_bootinfo(void);
arch/arm/mach-imx/imx8/cpu.c
... ... @@ -11,8 +11,10 @@
11 11 #include <dm/uclass.h>
12 12 #include <errno.h>
13 13 #include <asm/arch/sci/sci.h>
  14 +#include <asm/arch/sys_proto.h>
14 15 #include <asm/arch-imx/cpu.h>
15 16 #include <asm/armv8/cpu.h>
  17 +#include <asm/mach-imx/boot_mode.h>
16 18  
17 19 DECLARE_GLOBAL_DATA_PTR;
18 20  
... ... @@ -91,4 +93,87 @@
91 93 return 0;
92 94 }
93 95 #endif
  96 +
  97 +int print_bootinfo(void)
  98 +{
  99 + enum boot_device bt_dev = get_boot_device();
  100 +
  101 + puts("Boot: ");
  102 + switch (bt_dev) {
  103 + case SD1_BOOT:
  104 + puts("SD0\n");
  105 + break;
  106 + case SD2_BOOT:
  107 + puts("SD1\n");
  108 + break;
  109 + case SD3_BOOT:
  110 + puts("SD2\n");
  111 + break;
  112 + case MMC1_BOOT:
  113 + puts("MMC0\n");
  114 + break;
  115 + case MMC2_BOOT:
  116 + puts("MMC1\n");
  117 + break;
  118 + case MMC3_BOOT:
  119 + puts("MMC2\n");
  120 + break;
  121 + case FLEXSPI_BOOT:
  122 + puts("FLEXSPI\n");
  123 + break;
  124 + case SATA_BOOT:
  125 + puts("SATA\n");
  126 + break;
  127 + case NAND_BOOT:
  128 + puts("NAND\n");
  129 + break;
  130 + case USB_BOOT:
  131 + puts("USB\n");
  132 + break;
  133 + default:
  134 + printf("Unknown device %u\n", bt_dev);
  135 + break;
  136 + }
  137 +
  138 + return 0;
  139 +}
  140 +
  141 +enum boot_device get_boot_device(void)
  142 +{
  143 + enum boot_device boot_dev = SD1_BOOT;
  144 +
  145 + sc_rsrc_t dev_rsrc;
  146 +
  147 + sc_misc_get_boot_dev(-1, &dev_rsrc);
  148 +
  149 + switch (dev_rsrc) {
  150 + case SC_R_SDHC_0:
  151 + boot_dev = MMC1_BOOT;
  152 + break;
  153 + case SC_R_SDHC_1:
  154 + boot_dev = SD2_BOOT;
  155 + break;
  156 + case SC_R_SDHC_2:
  157 + boot_dev = SD3_BOOT;
  158 + break;
  159 + case SC_R_NAND:
  160 + boot_dev = NAND_BOOT;
  161 + break;
  162 + case SC_R_FSPI_0:
  163 + boot_dev = FLEXSPI_BOOT;
  164 + break;
  165 + case SC_R_SATA_0:
  166 + boot_dev = SATA_BOOT;
  167 + break;
  168 + case SC_R_USB_0:
  169 + case SC_R_USB_1:
  170 + case SC_R_USB_2:
  171 + boot_dev = USB_BOOT;
  172 + break;
  173 + default:
  174 + break;
  175 + }
  176 +
  177 + return boot_dev;
  178 +}