reset.c 918 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. /*
  2. * Copyright (c) 2011 Zhang, Keguang <keguang.zhang@gmail.com>
  3. *
  4. * This program is free software; you can redistribute it and/or modify it
  5. * under the terms of the GNU General Public License as published by the
  6. * Free Software Foundation; either version 2 of the License, or (at your
  7. * option) any later version.
  8. */
  9. #include <linux/io.h>
  10. #include <linux/pm.h>
  11. #include <asm/idle.h>
  12. #include <asm/reboot.h>
  13. #include <loongson1.h>
  14. static void ls1x_restart(char *command)
  15. {
  16. __raw_writel(0x1, LS1X_WDT_EN);
  17. __raw_writel(0x5000000, LS1X_WDT_TIMER);
  18. __raw_writel(0x1, LS1X_WDT_SET);
  19. }
  20. static void ls1x_halt(void)
  21. {
  22. while (1) {
  23. if (cpu_wait)
  24. cpu_wait();
  25. }
  26. }
  27. static void ls1x_power_off(void)
  28. {
  29. ls1x_halt();
  30. }
  31. static int __init ls1x_reboot_setup(void)
  32. {
  33. _machine_restart = ls1x_restart;
  34. _machine_halt = ls1x_halt;
  35. pm_power_off = ls1x_power_off;
  36. return 0;
  37. }
  38. arch_initcall(ls1x_reboot_setup);