xref: /rk3399_rockchip-uboot/arch/arm/mach-socfpga/reset_manager.c (revision 753a4dde970c2bc9022321f1093e544e3a150f6e)
105a21721SMasahiro Yamada /*
205a21721SMasahiro Yamada  *  Copyright (C) 2013 Altera Corporation <www.altera.com>
305a21721SMasahiro Yamada  *
405a21721SMasahiro Yamada  * SPDX-License-Identifier:	GPL-2.0+
505a21721SMasahiro Yamada  */
605a21721SMasahiro Yamada 
705a21721SMasahiro Yamada 
805a21721SMasahiro Yamada #include <common.h>
905a21721SMasahiro Yamada #include <asm/io.h>
1065d372c4SMarek Vasut #include <asm/arch/reset_manager.h>
1105a21721SMasahiro Yamada 
1205a21721SMasahiro Yamada DECLARE_GLOBAL_DATA_PTR;
1305a21721SMasahiro Yamada 
1405a21721SMasahiro Yamada static const struct socfpga_reset_manager *reset_manager_base =
1505a21721SMasahiro Yamada 		(void *)SOCFPGA_RSTMGR_ADDRESS;
163191611aSMarek Vasut 
173191611aSMarek Vasut /*
1805a21721SMasahiro Yamada  * Write the reset manager register to cause reset
1905a21721SMasahiro Yamada  */
reset_cpu(ulong addr)2005a21721SMasahiro Yamada void reset_cpu(ulong addr)
2105a21721SMasahiro Yamada {
2205a21721SMasahiro Yamada 	/* request a warm reset */
23*2b09ea48SLey Foon Tan 	writel(1 << RSTMGR_CTRL_SWWARMRSTREQ_LSB,
2405a21721SMasahiro Yamada 	       &reset_manager_base->ctrl);
2505a21721SMasahiro Yamada 	/*
2605a21721SMasahiro Yamada 	 * infinite loop here as watchdog will trigger and reset
2705a21721SMasahiro Yamada 	 * the processor
2805a21721SMasahiro Yamada 	 */
2905a21721SMasahiro Yamada 	while (1)
3005a21721SMasahiro Yamada 		;
3105a21721SMasahiro Yamada }
32