From 5235327b30c8414edeeccdd7421ee8598964f2f9 Mon Sep 17 00:00:00 2001 From: Marek Szyprowski Date: Fri, 29 Jan 2021 13:03:03 +0100 Subject: [PATCH] rpi: use board_early_init_r to init PCI/USB and detect boot device 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 Change-Id: Idf06ba827167479510206587308875c8eedce892 --- board/raspberrypi/rpi/rpi.c | 24 ++++++++++++++++++++++++ configs/rpi_4_32b_defconfig | 3 ++- configs/rpi_4_defconfig | 3 ++- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/board/raspberrypi/rpi/rpi.c b/board/raspberrypi/rpi/rpi.c index 24c9eba..768e1bc 100644 --- a/board/raspberrypi/rpi/rpi.c +++ b/board/raspberrypi/rpi/rpi.c @@ -444,6 +444,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(); diff --git a/configs/rpi_4_32b_defconfig b/configs/rpi_4_32b_defconfig index 9d98b06..a89aa2a 100644 --- a/configs/rpi_4_32b_defconfig +++ b/configs/rpi_4_32b_defconfig @@ -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 diff --git a/configs/rpi_4_defconfig b/configs/rpi_4_defconfig index 97362b1..e0d5c36 100644 --- a/configs/rpi_4_defconfig +++ b/configs/rpi_4_defconfig @@ -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 -- 2.7.4