am33xx-restart.c 1.0 KB

1234567891011121314151617181920212223242526272829303132333435
  1. /*
  2. * am33xx-restart.c - Code common to all AM33xx machines.
  3. *
  4. * This program is free software; you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License version 2 as
  6. * published by the Free Software Foundation.
  7. */
  8. #include <linux/kernel.h>
  9. #include <linux/reboot.h>
  10. #include "common.h"
  11. #include "prm-regbits-33xx.h"
  12. #include "prm33xx.h"
  13. /**
  14. * am3xx_restart - trigger a software restart of the SoC
  15. * @mode: the "reboot mode", see arch/arm/kernel/{setup,process}.c
  16. * @cmd: passed from the userspace program rebooting the system (if provided)
  17. *
  18. * Resets the SoC. For @cmd, see the 'reboot' syscall in
  19. * kernel/sys.c. No return value.
  20. */
  21. void am33xx_restart(enum reboot_mode mode, const char *cmd)
  22. {
  23. /* TODO: Handle mode and cmd if necessary */
  24. am33xx_prm_rmw_reg_bits(AM33XX_GLOBAL_WARM_SW_RST_MASK,
  25. AM33XX_GLOBAL_WARM_SW_RST_MASK,
  26. AM33XX_PRM_DEVICE_MOD,
  27. AM33XX_PRM_RSTCTRL_OFFSET);
  28. /* OCP barrier */
  29. (void)am33xx_prm_read_reg(AM33XX_PRM_DEVICE_MOD,
  30. AM33XX_PRM_RSTCTRL_OFFSET);
  31. }