]> git.sur5r.net Git - u-boot/commitdiff
arm: socfpga: spl: Add missing reset logic
authorMarek Vasut <marex@denx.de>
Thu, 9 Jul 2015 03:21:02 +0000 (05:21 +0200)
committerMarek Vasut <marex@denx.de>
Sat, 8 Aug 2015 12:14:07 +0000 (14:14 +0200)
Make sure that all the peripherals are correctly reset and then
brought out of reset in the SPL. Not going through proper reset
cycle might leave the IP blocks in inconsistent state.

Signed-off-by: Marek Vasut <marex@denx.de>
arch/arm/mach-socfpga/spl.c

index 15fee0ad97b9234f4a55eff36384ecb1861b9b39..f134bb794fc4b8faad5eccf888701d6041934e6d 100644 (file)
@@ -89,6 +89,11 @@ void spl_board_init(void)
        /* freeze all IO banks */
        sys_mgr_frzctrl_freeze_req();
 
+       /* Put everything into reset but L4WD0. */
+       socfpga_per_reset_all();
+       /* Put FPGA bridges into reset too. */
+       socfpga_bridges_reset(1);
+
        socfpga_per_reset(SOCFPGA_RESET(SDR), 0);
        socfpga_per_reset(SOCFPGA_RESET(UART0), 0);
        socfpga_per_reset(SOCFPGA_RESET(OSC1TIMER0), 0);
@@ -115,8 +120,9 @@ void spl_board_init(void)
 
 #endif /* CONFIG_SOCFPGA_VIRTUAL_TARGET */
 
-       /* de-assert reset for peripherals and bridges based on handoff */
+       /* De-assert reset for peripherals and bridges based on handoff */
        reset_deassert_peripherals_handoff();
+       socfpga_bridges_reset(0);
 
        debug("Unfreezing/Thaw all I/O banks\n");
        /* unfreeze / thaw all IO banks */
@@ -145,4 +151,6 @@ void spl_board_init(void)
                puts("SDRAM size check failed!\n");
                hang();
        }
+
+       socfpga_bridges_reset(1);
 }