rpi: use board_early_init_r to init PCI/USB and detect boot device 05/252605/1
authorMarek Szyprowski <m.szyprowski@samsung.com>
Fri, 29 Jan 2021 12:03:03 +0000 (13:03 +0100)
committerMarek Szyprowski <m.szyprowski@samsung.com>
Fri, 29 Jan 2021 14:30:19 +0000 (15:30 +0100)
Move initialization of the PCI and the USB subsystems from the 'preboot'
command to the board's early_init_r() function and then try to detect a
boot device by accessing the MMC0 device. If it works, then set boot
device interface to 'mmc', if not, use 'usb'.

This allows the environment variales to be loaded from the proper
storage interface.

Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Change-Id: Idf06ba827167479510206587308875c8eedce892

board/raspberrypi/rpi/rpi.c
configs/rpi_4_32b_defconfig
configs/rpi_4_defconfig

index 3bcf7d1a61199cfc9a439b861933d947f5a03908..1f77c82be8966bdb48d772ad17591f32d48a507c 100644 (file)
@@ -445,6 +445,30 @@ static void set_serial_number(void)
        env_set("serial#", serial_string);
 }
 
+#if defined(CONFIG_PCI) && defined(CONFIG_BOARD_EARLY_INIT_R)
+static char *boot_interface;
+int board_early_init_r(void)
+{
+       /*
+        * Currently there is not way to detect which device (SD card or
+        * USB Mass Storage) has been used by VideoCore to load the uboot,
+        * so just try MMC0 first, if not then use USB.
+        */
+       mmc_init_device(0);
+       boot_interface = (blk_get_dev("mmc", 0)) ? "mmc" : "usb";
+
+       pci_init();
+       usb_init();
+
+       return 0;
+}
+
+char *env_fat_get_interface(void)
+{
+       return boot_interface;
+}
+#endif
+
 int misc_init_r(void)
 {
        set_fdt_addr();
index 9d98b0625da099e6c52d8f4157a5fc944d2497c8..a89aa2a51aadbf8a4a749a99f6ebda712aa1004a 100644 (file)
@@ -7,11 +7,12 @@ CONFIG_ENV_SIZE=0x4000
 CONFIG_DISTRO_DEFAULTS=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_USE_PREBOOT=y
-CONFIG_PREBOOT="pci enum; usb start"
+CONFIG_PREBOOT=""
 CONFIG_SYS_STDIO_DEREGISTER=y
 CONFIG_MISC_INIT_R=y
 # CONFIG_DISPLAY_CPUINFO is not set
 # CONFIG_DISPLAY_BOARDINFO is not set
+CONFIG_BOARD_EARLY_INIT_R=y
 CONFIG_SYS_PROMPT="U-Boot> "
 CONFIG_CMD_THOR_DOWNLOAD=y
 CONFIG_CMD_ASKENV=y
index 97362b11081e9ef3c38627c92a6c12c1e5bf8244..e0d5c362b7a43925df0fdc8d4d7eb249502239d6 100644 (file)
@@ -7,11 +7,12 @@ CONFIG_ENV_SIZE=0x4000
 CONFIG_DISTRO_DEFAULTS=y
 CONFIG_OF_BOARD_SETUP=y
 CONFIG_USE_PREBOOT=y
-CONFIG_PREBOOT="pci enum; usb start"
+CONFIG_PREBOOT=""
 CONFIG_SYS_STDIO_DEREGISTER=y
 CONFIG_MISC_INIT_R=y
 # CONFIG_DISPLAY_CPUINFO is not set
 # CONFIG_DISPLAY_BOARDINFO is not set
+CONFIG_BOARD_EARLY_INIT_R=y
 CONFIG_SYS_PROMPT="U-Boot> "
 CONFIG_CMD_THOR_DOWNLOAD=y
 CONFIG_CMD_ASKENV=y