diff options
author | Graf Yang <graf.yang@analog.com> | 2009-12-28 06:13:51 -0500 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2010-03-09 00:30:48 -0500 |
commit | 0b39db28b953945232719e7ff6fb802aa8a2be5f (patch) | |
tree | c35193b07e9413ed6b5436aa79e24b0f22627082 /arch/blackfin/mach-bf561/hotplug.c | |
parent | 0d152c27e336b5fd777da7dd3e814617e7305afd (diff) |
Blackfin: SMP: add PM/CPU hotplug support
Signed-off-by: Graf Yang <graf.yang@analog.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Diffstat (limited to 'arch/blackfin/mach-bf561/hotplug.c')
-rw-r--r-- | arch/blackfin/mach-bf561/hotplug.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/arch/blackfin/mach-bf561/hotplug.c b/arch/blackfin/mach-bf561/hotplug.c new file mode 100644 index 000000000000..c95169b612dc --- /dev/null +++ b/arch/blackfin/mach-bf561/hotplug.c | |||
@@ -0,0 +1,32 @@ | |||
1 | /* | ||
2 | * Copyright 2007-2009 Analog Devices Inc. | ||
3 | * Graff Yang <graf.yang@analog.com> | ||
4 | * | ||
5 | * Licensed under the GPL-2 or later. | ||
6 | */ | ||
7 | |||
8 | #include <asm/blackfin.h> | ||
9 | #include <asm/smp.h> | ||
10 | #define SIC_SYSIRQ(irq) (irq - (IRQ_CORETMR + 1)) | ||
11 | |||
12 | int hotplug_coreb; | ||
13 | |||
14 | void platform_cpu_die(void) | ||
15 | { | ||
16 | unsigned long iwr[2] = {0, 0}; | ||
17 | unsigned long bank = SIC_SYSIRQ(IRQ_SUPPLE_0) / 32; | ||
18 | unsigned long bit = 1 << (SIC_SYSIRQ(IRQ_SUPPLE_0) % 32); | ||
19 | |||
20 | hotplug_coreb = 1; | ||
21 | |||
22 | iwr[bank] = bit; | ||
23 | |||
24 | /* disable core timer */ | ||
25 | bfin_write_TCNTL(0); | ||
26 | |||
27 | /* clear ipi interrupt IRQ_SUPPLE_0 */ | ||
28 | bfin_write_SICB_SYSCR(bfin_read_SICB_SYSCR() | (1 << (10 + 1))); | ||
29 | SSYNC(); | ||
30 | |||
31 | coreb_sleep(iwr[0], iwr[1], 0); | ||
32 | } | ||