X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=arch%2Farm%2Fmach-uniphier%2Fboard_late_init.c;h=4bfa10b374ad8b2306f052d1ee75fb5f8e4dfe1a;hb=fbd6295da4d69ea32eaa477700d00ac8577a8212;hp=0622a1e16e0dfc3a63b04fa46f962538958eca66;hpb=b79dadf846e5e140e261bbfa4decd024357702d7;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 0622a1e16e..4bfa10b374 100644 --- a/arch/arm/mach-uniphier/board_late_init.c +++ b/arch/arm/mach-uniphier/board_late_init.c @@ -1,16 +1,20 @@ /* - * Copyright (C) 2014 Panasonic Corporation - * Author: Masahiro Yamada + * Copyright (C) 2014 Panasonic Corporation + * Copyright (C) 2015-2016 Socionext Inc. + * Author: Masahiro Yamada * * SPDX-License-Identifier: GPL-2.0+ */ #include #include +#include #include -#include +#include #include <../drivers/mtd/nand/denali.h> +#include "init.h" + static void nand_denali_wp_disable(void) { #ifdef CONFIG_NAND_DENALI @@ -26,28 +30,69 @@ static void nand_denali_wp_disable(void) #endif } +static int uniphier_set_fdt_file(void) +{ + DECLARE_GLOBAL_DATA_PTR; + const char *compat; + char dtb_name[256]; + int buf_len = sizeof(dtb_name); + + 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; + + /* rip off the vendor prefix "socionext," */ + compat = strchr(compat, ','); + if (!compat) + return -EINVAL; + compat++; + + strncpy(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 (uniphier_boot_device_raw()) { case BOOT_DEVICE_MMC1: - printf("eMMC Boot\n"); + printf("eMMC Boot"); setenv("bootmode", "emmcboot"); break; case BOOT_DEVICE_NAND: - printf("NAND Boot\n"); + printf("NAND Boot"); setenv("bootmode", "nandboot"); nand_denali_wp_disable(); break; case BOOT_DEVICE_NOR: - printf("NOR Boot\n"); + printf("NOR Boot"); setenv("bootmode", "norboot"); break; + case BOOT_DEVICE_USB: + printf("USB Boot"); + setenv("bootmode", "usbboot"); + break; default: - printf("Unsupported Boot Mode\n"); - return -1; + printf("Unknown"); + break; } + if (uniphier_have_internal_stm()) + printf(" (STM: %s)", + uniphier_boot_from_backend() ? "OFF" : "ON"); + + printf("\n"); + + if (uniphier_set_fdt_file()) + printf("fdt_file environment was not set correctly\n"); + return 0; }