reset.c 895 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * (C) Copyright 2002
  4. * Lineo, Inc. <www.lineo.com>
  5. * Bernhard Kuhn <bkuhn@lineo.com>
  6. *
  7. * (C) Copyright 2002
  8. * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
  9. * Marius Groeger <mgroeger@sysgo.de>
  10. *
  11. * (C) Copyright 2002
  12. * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
  13. * Alex Zuepke <azu@sysgo.de>
  14. */
  15. #include <common.h>
  16. #include <asm/io.h>
  17. #include <asm/arch/hardware.h>
  18. #include <asm/arch/at91_st.h>
  19. void __attribute__((weak)) board_reset(void)
  20. {
  21. /* true empty function for defining weak symbol */
  22. }
  23. void reset_cpu(ulong ignored)
  24. {
  25. at91_st_t *st = (at91_st_t *) ATMEL_BASE_ST;
  26. board_reset();
  27. /* Reset the cpu by setting up the watchdog timer */
  28. writel(AT91_ST_WDMR_RSTEN | AT91_ST_WDMR_EXTEN | AT91_ST_WDMR_WDV(2),
  29. &st->wdmr);
  30. writel(AT91_ST_CR_WDRST, &st->cr);
  31. /* and let it timeout */
  32. while (1)
  33. ;
  34. /* Never reached */
  35. }