Merge git://git.denx.de/u-boot-socfpga
authorTom Rini <trini@konsulko.com>
Sat, 17 Oct 2015 00:21:04 +0000 (20:21 -0400)
committerTom Rini <trini@konsulko.com>
Sat, 17 Oct 2015 00:21:04 +0000 (20:21 -0400)
arch/arm/include/asm/system.h
board/freescale/vf610twr/vf610twr.c
drivers/mmc/s5p_sdhci.c
include/configs/odroid.h

index 868ea54..cfc7834 100644 (file)
@@ -194,7 +194,7 @@ void save_boot_params_ret(void);
 static inline unsigned int get_cr(void)
 {
        unsigned int val;
-       asm("mrc p15, 0, %0, c1, c0, 0  @ get CR" : "=r" (val) : : "cc");
+       asm volatile("mrc p15, 0, %0, c1, c0, 0 @ get CR" : "=r" (val) : : "cc");
        return val;
 }
 
index 7834931..37b241d 100644 (file)
@@ -108,7 +108,7 @@ int dram_init(void)
                .trcd_int          = 6,
                .tras_lockout      = 0,
                .tdal              = 12,
-               .bstlen            = 0,
+               .bstlen            = 3,
                .tdll              = 512,
                .trp_ab            = 6,
                .tref              = 3120,
index 4db51d6..15ecfee 100644 (file)
@@ -84,9 +84,9 @@ static int s5p_sdhci_core_init(struct sdhci_host *host)
 
 int s5p_sdhci_init(u32 regbase, int index, int bus_width)
 {
-       struct sdhci_host *host = malloc(sizeof(struct sdhci_host));
+       struct sdhci_host *host = calloc(1, sizeof(struct sdhci_host));
        if (!host) {
-               printf("sdhci__host malloc fail!\n");
+               printf("sdhci__host allocation fail!\n");
                return 1;
        }
        host->ioaddr = (void *)regbase;
@@ -101,29 +101,31 @@ struct sdhci_host sdhci_host[SDHCI_MAX_HOSTS];
 
 static int do_sdhci_init(struct sdhci_host *host)
 {
-       int dev_id, flag;
-       int err = 0;
+       int dev_id, flag, ret;
 
        flag = host->bus_width == 8 ? PINMUX_FLAG_8BIT_MODE : PINMUX_FLAG_NONE;
        dev_id = host->index + PERIPH_ID_SDMMC0;
 
        if (dm_gpio_is_valid(&host->pwr_gpio)) {
                dm_gpio_set_value(&host->pwr_gpio, 1);
-               err = exynos_pinmux_config(dev_id, flag);
-               if (err) {
+               ret = exynos_pinmux_config(dev_id, flag);
+               if (ret) {
                        debug("MMC not configured\n");
-                       return err;
+                       return ret;
                }
        }
 
        if (dm_gpio_is_valid(&host->cd_gpio)) {
-               if (dm_gpio_get_value(&host->cd_gpio))
+               ret = dm_gpio_get_value(&host->cd_gpio);
+               if (ret) {
+                       debug("no SD card detected (%d)\n", ret);
                        return -ENODEV;
+               }
 
-               err = exynos_pinmux_config(dev_id, flag);
-               if (err) {
+               ret = exynos_pinmux_config(dev_id, flag);
+               if (ret) {
                        printf("external SD not configured\n");
-                       return err;
+                       return ret;
                }
        }
 
@@ -170,7 +172,8 @@ static int sdhci_get_config(const void *blob, int node, struct sdhci_host *host)
 static int process_nodes(const void *blob, int node_list[], int count)
 {
        struct sdhci_host *host;
-       int i, node;
+       int i, node, ret;
+       int failed = 0;
 
        debug("%s: count = %d\n", __func__, count);
 
@@ -182,13 +185,22 @@ static int process_nodes(const void *blob, int node_list[], int count)
 
                host = &sdhci_host[i];
 
-               if (sdhci_get_config(blob, node, host)) {
-                       printf("%s: failed to decode dev %d\n", __func__, i);
-                       return -1;
+               ret = sdhci_get_config(blob, node, host);
+               if (ret) {
+                       printf("%s: failed to decode dev %d (%d)\n",    __func__, i, ret);
+                       failed++;
+                       continue;
+               }
+
+               ret = do_sdhci_init(host);
+               if (ret) {
+                       printf("%s: failed to initialize dev %d (%d)\n", __func__, i, ret);
+                       failed++;
                }
-               do_sdhci_init(host);
        }
-       return 0;
+
+       /* we only consider it an error when all nodes fail */
+       return (failed == count ? -1 : 0);
 }
 
 int exynos_mmc_init(const void *blob)
@@ -200,8 +212,6 @@ int exynos_mmc_init(const void *blob)
                        COMPAT_SAMSUNG_EXYNOS_MMC, node_list,
                        SDHCI_MAX_HOSTS);
 
-       process_nodes(blob, node_list, count);
-
-       return 0;
+       return process_nodes(blob, node_list, count);
 }
 #endif
index 1afe04a..4c85e85 100644 (file)
  * 2.  ROOT:  -
 */
 #define CONFIG_EXTRA_ENV_SETTINGS \
-       "loadkernel=fatload mmc ${mmcbootdev}:${mmcbootpart} ${kerneladdr} " \
+       "loadbootscript=load mmc ${mmcbootdev}:${mmcbootpart} ${scriptaddr} " \
+               "boot.scr\0" \
+       "loadkernel=load mmc ${mmcbootdev}:${mmcbootpart} ${kerneladdr} " \
                "${kernelname}\0" \
-       "loadinitrd=fatload mmc ${mmcbootdev}:${mmcbootpart} ${initrdaddr} " \
+       "loadinitrd=load mmc ${mmcbootdev}:${mmcbootpart} ${initrdaddr} " \
                "${initrdname}\0" \
-       "loaddtb=fatload mmc ${mmcbootdev}:${mmcbootpart} ${fdtaddr} " \
+       "loaddtb=load mmc ${mmcbootdev}:${mmcbootpart} ${fdtaddr} " \
                "${fdtfile}\0" \
        "check_ramdisk=" \
                "if run loadinitrd; then " \
        "kernel_args=" \
                "setenv bootargs root=/dev/mmcblk${mmcrootdev}p${mmcrootpart}" \
                " rootwait ${console} ${opts}\0" \
+       "boot_script=" \
+               "run loadbootscript;" \
+               "source ${scriptaddr}\0" \
        "boot_fit=" \
                "setenv kerneladdr 0x42000000;" \
                "setenv kernelname Image.itb;" \
                "run kernel_args;" \
                "bootz ${kerneladdr} ${initrd_addr} ${fdt_addr};\0" \
        "autoboot=" \
-               "if test -e mmc 0 Image.itb; then; " \
+               "if test -e mmc 0 boot.scr; then; " \
+                       "run boot_script; " \
+               "elif test -e mmc 0 Image.itb; then; " \
                        "run boot_fit;" \
                "elif test -e mmc 0 zImage; then; " \
                        "run boot_zimg;" \
        "consoleoff=set console console=ram; save; reset\0" \
        "initrdname=uInitrd\0" \
        "initrdaddr=42000000\0" \
+       "scriptaddr=0x42000000\0" \
        "fdtaddr=40800000\0"
 
 /* I2C */