ti81xx-restart.c 848 B

123456789101112131415161718192021222324252627282930
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. #include <linux/kernel.h>
  3. #include <linux/init.h>
  4. #include <linux/reboot.h>
  5. #include "iomap.h"
  6. #include "common.h"
  7. #include "control.h"
  8. #include "prm3xxx.h"
  9. #define TI81XX_PRM_DEVICE_RSTCTRL 0x00a0
  10. #define TI81XX_GLOBAL_RST_COLD BIT(1)
  11. /**
  12. * ti81xx_restart - trigger a software restart of the SoC
  13. * @mode: the "reboot mode", see arch/arm/kernel/{setup,process}.c
  14. * @cmd: passed from the userspace program rebooting the system (if provided)
  15. *
  16. * Resets the SoC. For @cmd, see the 'reboot' syscall in
  17. * kernel/sys.c. No return value.
  18. *
  19. * NOTE: Warm reset does not seem to work, may require resetting
  20. * clocks to bypass mode.
  21. */
  22. void ti81xx_restart(enum reboot_mode mode, const char *cmd)
  23. {
  24. omap2_prm_set_mod_reg_bits(TI81XX_GLOBAL_RST_COLD, 0,
  25. TI81XX_PRM_DEVICE_RSTCTRL);
  26. while (1);
  27. }