X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=arch%2Farm%2Fmach-uniphier%2Fboard_late_init.c;h=f23295fbd2128016318a72368d62facba60e6e2a;hb=52159d27ffe6b2a1a7e874cb2fda5aadbd4f03e5;hp=a7530eb23b5292fe8a59abc1b2b6d67ffb415e31;hpb=43b1ff5f33456e85b2fccccaf2f9fe09821a45ac;p=oweals%2Fu-boot.git diff --git a/arch/arm/mach-uniphier/board_late_init.c b/arch/arm/mach-uniphier/board_late_init.c index a7530eb23b..f23295fbd2 100644 --- a/arch/arm/mach-uniphier/board_late_init.c +++ b/arch/arm/mach-uniphier/board_late_init.c @@ -6,10 +6,13 @@ #include #include +#include #include #include #include <../drivers/mtd/nand/denali.h> +#include "boot-mode/boot-device.h" + static void nand_denali_wp_disable(void) { #ifdef CONFIG_NAND_DENALI @@ -25,11 +28,44 @@ static void nand_denali_wp_disable(void) #endif } +#define VENDOR_PREFIX "socionext," +#define DTB_FILE_PREFIX "uniphier-" + +static int uniphier_set_fdt_file(void) +{ + DECLARE_GLOBAL_DATA_PTR; + const char *compat; + char dtb_name[256]; + int buf_len = 256; + + if (getenv("fdt_file")) + return 0; /* do nothing if it is already set */ + + compat = fdt_stringlist_get(gd->fdt_blob, 0, "compatible", 0, NULL); + if (!compat) + return -EINVAL; + + if (strncmp(compat, VENDOR_PREFIX, strlen(VENDOR_PREFIX))) + return -EINVAL; + + compat += strlen(VENDOR_PREFIX); + + strncat(dtb_name, DTB_FILE_PREFIX, buf_len); + buf_len -= strlen(DTB_FILE_PREFIX); + + strncat(dtb_name, compat, buf_len); + buf_len -= strlen(compat); + + strncat(dtb_name, ".dtb", buf_len); + + return setenv("fdt_file", dtb_name); +} + int board_late_init(void) { puts("MODE: "); - switch (spl_boot_device()) { + switch (spl_boot_device_raw()) { case BOOT_DEVICE_MMC1: printf("eMMC Boot\n"); setenv("bootmode", "emmcboot"); @@ -43,10 +79,17 @@ int board_late_init(void) printf("NOR Boot\n"); setenv("bootmode", "norboot"); break; + case BOOT_DEVICE_USB: + printf("USB Boot\n"); + setenv("bootmode", "usbboot"); + break; default: - printf("Unsupported Boot Mode\n"); - return -1; + printf("Unknown\n"); + break; } + if (uniphier_set_fdt_file()) + printf("fdt_file environment was not set correctly\n"); + return 0; }