1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
262011840SMasahiro Yamada /*
362011840SMasahiro Yamada  * (C) Copyright 2002
462011840SMasahiro Yamada  * Lineo, Inc. <www.lineo.com>
562011840SMasahiro Yamada  * Bernhard Kuhn <bkuhn@lineo.com>
662011840SMasahiro Yamada  *
762011840SMasahiro Yamada  * (C) Copyright 2002
862011840SMasahiro Yamada  * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
962011840SMasahiro Yamada  * Marius Groeger <mgroeger@sysgo.de>
1062011840SMasahiro Yamada  *
1162011840SMasahiro Yamada  * (C) Copyright 2002
1262011840SMasahiro Yamada  * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
1362011840SMasahiro Yamada  * Alex Zuepke <azu@sysgo.de>
1462011840SMasahiro Yamada  */
1562011840SMasahiro Yamada 
1662011840SMasahiro Yamada #include <common.h>
1762011840SMasahiro Yamada #include <asm/io.h>
1862011840SMasahiro Yamada #include <asm/arch/hardware.h>
1962011840SMasahiro Yamada #include <asm/arch/at91_st.h>
2062011840SMasahiro Yamada 
board_reset(void)2162011840SMasahiro Yamada void  __attribute__((weak)) board_reset(void)
2262011840SMasahiro Yamada {
2362011840SMasahiro Yamada 	/* true empty function for defining weak symbol */
2462011840SMasahiro Yamada }
2562011840SMasahiro Yamada 
reset_cpu(ulong ignored)2662011840SMasahiro Yamada void reset_cpu(ulong ignored)
2762011840SMasahiro Yamada {
2862011840SMasahiro Yamada 	at91_st_t *st = (at91_st_t *) ATMEL_BASE_ST;
2962011840SMasahiro Yamada 
3062011840SMasahiro Yamada 	board_reset();
3162011840SMasahiro Yamada 
3262011840SMasahiro Yamada 	/* Reset the cpu by setting up the watchdog timer */
3362011840SMasahiro Yamada 	writel(AT91_ST_WDMR_RSTEN | AT91_ST_WDMR_EXTEN | AT91_ST_WDMR_WDV(2),
3462011840SMasahiro Yamada 		&st->wdmr);
3562011840SMasahiro Yamada 	writel(AT91_ST_CR_WDRST, &st->cr);
3662011840SMasahiro Yamada 	/* and let it timeout */
3762011840SMasahiro Yamada 	while (1)
3862011840SMasahiro Yamada 		;
3962011840SMasahiro Yamada 	/* Never reached */
4062011840SMasahiro Yamada }
41