system.c 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /*
  2. * Copyright 2009 Dmitriy Taychenachev <dimichxp@gmail.com>
  3. *
  4. * This file is released under the GPLv2 or later.
  5. */
  6. #include <linux/delay.h>
  7. #include <linux/io.h>
  8. #include <asm/proc-fns.h>
  9. #include <mach/hardware.h>
  10. #include "crm_regs.h"
  11. #define WDOG_WCR MXC91231_IO_ADDRESS(MXC91231_WDOG1_BASE_ADDR)
  12. #define WDOG_WCR_OUT_ENABLE (1 << 6)
  13. #define WDOG_WCR_ASSERT (1 << 5)
  14. void mxc91231_power_off(void)
  15. {
  16. u16 wcr;
  17. wcr = __raw_readw(WDOG_WCR);
  18. wcr |= WDOG_WCR_OUT_ENABLE;
  19. wcr &= ~WDOG_WCR_ASSERT;
  20. __raw_writew(wcr, WDOG_WCR);
  21. }
  22. void mxc91231_arch_reset(char mode, const char *cmd)
  23. {
  24. u32 amcr;
  25. /* Reset the AP using CRM */
  26. amcr = __raw_readl(MXC_CRMAP_AMCR);
  27. amcr &= ~MXC_CRMAP_AMCR_SW_AP;
  28. __raw_writel(amcr, MXC_CRMAP_AMCR);
  29. mdelay(10);
  30. cpu_reset(0);
  31. }
  32. void mxc91231_prepare_idle(void)
  33. {
  34. u32 crm_ctl;
  35. /* Go to WAIT mode after WFI */
  36. crm_ctl = __raw_readl(MXC_DSM_CRM_CONTROL);
  37. crm_ctl &= ~(MXC_DSM_CRM_CTRL_LPMD0 | MXC_DSM_CRM_CTRL_LPMD1);
  38. crm_ctl |= MXC_DSM_CRM_CTRL_LPMD_WAIT_MODE;
  39. __raw_writel(crm_ctl, MXC_DSM_CRM_CONTROL);
  40. }