hotplug.c 820 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. /*
  2. * Copyright (C) STMicroelectronics 2009
  3. * Copyright (C) ST-Ericsson SA 2010
  4. *
  5. * License Terms: GNU General Public License v2
  6. * Based on ARM realview platform
  7. *
  8. * Author: Sundar Iyer <sundar.iyer@stericsson.com>
  9. *
  10. */
  11. #include <linux/kernel.h>
  12. #include <linux/errno.h>
  13. #include <linux/smp.h>
  14. #include <asm/cacheflush.h>
  15. #include <asm/smp_plat.h>
  16. #include <mach/setup.h>
  17. extern volatile int pen_release;
  18. /*
  19. * platform-specific code to shutdown a CPU
  20. *
  21. * Called with IRQs disabled
  22. */
  23. void __ref ux500_cpu_die(unsigned int cpu)
  24. {
  25. flush_cache_all();
  26. /* directly enter low power state, skipping secure registers */
  27. for (;;) {
  28. __asm__ __volatile__("dsb\n\t" "wfi\n\t"
  29. : : : "memory");
  30. if (pen_release == cpu_logical_map(cpu)) {
  31. /*
  32. * OK, proper wakeup, we're done
  33. */
  34. break;
  35. }
  36. }
  37. }