xref: /rk3399_rockchip-uboot/arch/nds32/cpu/n1213/ag101/cpu.c (revision c2774e6149a6bedb0941deefec84665119e685a4)
1445a886dSMacpaul Lin /*
2445a886dSMacpaul Lin  * (C) Copyright 2002
3445a886dSMacpaul Lin  * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
4445a886dSMacpaul Lin  * Marius Groeger <mgroeger@sysgo.de>
5445a886dSMacpaul Lin  *
6445a886dSMacpaul Lin  * (C) Copyright 2002
7445a886dSMacpaul Lin  * Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
8445a886dSMacpaul Lin  *
9445a886dSMacpaul Lin  * Copyright (C) 2011 Andes Technology Corporation
10445a886dSMacpaul Lin  * Shawn Lin, Andes Technology Corporation <nobuhiro@andestech.com>
11445a886dSMacpaul Lin  * Macpaul Lin, Andes Technology Corporation <macpaul@andestech.com>
12445a886dSMacpaul Lin  *
131a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
14445a886dSMacpaul Lin  */
15445a886dSMacpaul Lin 
16445a886dSMacpaul Lin /* CPU specific code */
17445a886dSMacpaul Lin #include <common.h>
18445a886dSMacpaul Lin #include <command.h>
19445a886dSMacpaul Lin #include <watchdog.h>
20445a886dSMacpaul Lin #include <asm/cache.h>
21445a886dSMacpaul Lin 
22445a886dSMacpaul Lin #include <faraday/ftwdt010_wdt.h>
23445a886dSMacpaul Lin 
24445a886dSMacpaul Lin /*
25445a886dSMacpaul Lin  * cleanup_before_linux() is called just before we call linux
26445a886dSMacpaul Lin  * it prepares the processor for linux
27445a886dSMacpaul Lin  *
28445a886dSMacpaul Lin  * we disable interrupt and caches.
29445a886dSMacpaul Lin  */
cleanup_before_linux(void)30445a886dSMacpaul Lin int cleanup_before_linux(void)
31445a886dSMacpaul Lin {
32445a886dSMacpaul Lin 	disable_interrupts();
33445a886dSMacpaul Lin 
34445a886dSMacpaul Lin 	/* turn off I/D-cache */
35*b841b6e9Srick 	cache_flush();
36445a886dSMacpaul Lin 	icache_disable();
37445a886dSMacpaul Lin 	dcache_disable();
38445a886dSMacpaul Lin 	return 0;
39445a886dSMacpaul Lin }
40445a886dSMacpaul Lin 
do_reset(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])41445a886dSMacpaul Lin int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
42445a886dSMacpaul Lin {
43445a886dSMacpaul Lin 	disable_interrupts();
44445a886dSMacpaul Lin 
45445a886dSMacpaul Lin 	/*
46445a886dSMacpaul Lin 	 * reset to the base addr of andesboot.
47445a886dSMacpaul Lin 	 * currently no ROM loader at addr 0.
48445a886dSMacpaul Lin 	 * do not use reset_cpu(0);
49445a886dSMacpaul Lin 	 */
50445a886dSMacpaul Lin #ifdef CONFIG_FTWDT010_WATCHDOG
51445a886dSMacpaul Lin 	/*
52445a886dSMacpaul Lin 	 * workaround: if we use CONFIG_HW_WATCHDOG with ftwdt010, will lead
53445a886dSMacpaul Lin 	 * automatic hardware reset when booting Linux.
54445a886dSMacpaul Lin 	 * Please do not use CONFIG_HW_WATCHDOG and WATCHDOG_RESET() here.
55445a886dSMacpaul Lin 	 */
56445a886dSMacpaul Lin 	ftwdt010_wdt_reset();
57445a886dSMacpaul Lin 	while (1)
58445a886dSMacpaul Lin 		;
59445a886dSMacpaul Lin #endif /* CONFIG_FTWDT010_WATCHDOG */
60445a886dSMacpaul Lin 
61445a886dSMacpaul Lin 	/*NOTREACHED*/
62445a886dSMacpaul Lin }
63