]> git.sur5r.net Git - u-boot/blobdiff - arch/arm/cpu/armv8/zynqmp/spl.c
Merge branch 'master' of git://www.denx.de/git/u-boot-microblaze
[u-boot] / arch / arm / cpu / armv8 / zynqmp / spl.c
index 3ad5de1408786a191cdd032e512d987d23a3ff0f..f5f550f9e2b4707de3ecd05bea8ed4013b756afa 100644 (file)
@@ -35,10 +35,29 @@ void board_init_f(ulong dummy)
        board_init_r(NULL, 0);
 }
 
+static void ps_mode_reset(ulong mode)
+{
+       writel(mode << ZYNQMP_CRL_APB_BOOT_PIN_CTRL_OUT_EN_SHIFT,
+              &crlapb_base->boot_pin_ctrl);
+       udelay(5);
+       writel(mode << ZYNQMP_CRL_APB_BOOT_PIN_CTRL_OUT_VAL_SHIFT |
+              mode << ZYNQMP_CRL_APB_BOOT_PIN_CTRL_OUT_EN_SHIFT,
+              &crlapb_base->boot_pin_ctrl);
+}
+
+/*
+ * Set default PS_MODE1 which is used for USB ULPI phy reset
+ * Also other resets can be connected to this certain pin
+ */
+#ifndef MODE_RESET
+# define MODE_RESET    PS_MODE1
+#endif
+
 #ifdef CONFIG_SPL_BOARD_INIT
 void spl_board_init(void)
 {
        preloader_console_init();
+       ps_mode_reset(MODE_RESET);
        board_init();
 }
 #endif
@@ -50,12 +69,14 @@ u32 spl_boot_device(void)
 
 #if defined(CONFIG_SPL_ZYNQMP_ALT_BOOTMODE_ENABLED)
        /* Change default boot mode at run-time */
-       writel(BOOT_MODE_USE_ALT |
-              CONFIG_SPL_ZYNQMP_ALT_BOOTMODE << BOOT_MODE_ALT_SHIFT,
+       writel(CONFIG_SPL_ZYNQMP_ALT_BOOTMODE << BOOT_MODE_ALT_SHIFT,
               &crlapb_base->boot_mode);
 #endif
 
        reg = readl(&crlapb_base->boot_mode);
+       if (reg >> BOOT_MODE_ALT_SHIFT)
+               reg >>= BOOT_MODE_ALT_SHIFT;
+
        bootmode = reg & BOOT_MODES_MASK;
 
        switch (bootmode) {
@@ -70,6 +91,10 @@ u32 spl_boot_device(void)
 #ifdef CONFIG_SPL_DFU_SUPPORT
        case USB_MODE:
                return BOOT_DEVICE_DFU;
+#endif
+#ifdef CONFIG_SPL_SATA_SUPPORT
+       case SW_SATA_MODE:
+               return BOOT_DEVICE_SATA;
 #endif
        default:
                printf("Invalid Boot Mode:0x%x\n", bootmode);