linux/arch/arm/mach-prima2/hotplug.c
<<
>>
Prefs
   1/*
   2 * CPU hotplug support for CSR Marco dual-core SMP SoCs
   3 *
   4 * Copyright (c) 2012 Cambridge Silicon Radio Limited, a CSR plc group company.
   5 *
   6 * Licensed under GPLv2 or later.
   7 */
   8
   9#include <linux/kernel.h>
  10#include <linux/errno.h>
  11#include <linux/smp.h>
  12
  13#include <asm/cacheflush.h>
  14#include <asm/smp_plat.h>
  15
  16static inline void platform_do_lowpower(unsigned int cpu)
  17{
  18        flush_cache_all();
  19
  20        /* we put the platform to just WFI */
  21        for (;;) {
  22                __asm__ __volatile__("dsb\n\t" "wfi\n\t"
  23                        : : : "memory");
  24                if (pen_release == cpu_logical_map(cpu)) {
  25                        /*
  26                         * OK, proper wakeup, we're done
  27                         */
  28                        break;
  29                }
  30        }
  31}
  32
  33/*
  34 * platform-specific code to shutdown a CPU
  35 *
  36 * Called with IRQs disabled
  37 */
  38void __ref sirfsoc_cpu_die(unsigned int cpu)
  39{
  40        platform_do_lowpower(cpu);
  41}
  42