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 Yamadavoid 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