/* * Copyright 2007-2009 Analog Devices Inc. * Graff Yang <graf.yang@analog.com> * * Licensed under the GPL-2 or later. */ #include <linux/smp.h> #include <asm/blackfin.h> #include <asm/cacheflush.h> #include <mach/pll.h> int hotplug_coreb; void platform_cpu_die(void) { unsigned long iwr; hotplug_coreb = 1; /* * When CoreB wakes up, the code in _coreb_trampoline_start cannot * turn off the data cache. This causes the CoreB failed to boot. * As a workaround, we invalidate all the data cache before sleep. */ blackfin_invalidate_entire_dcache(); /* disable core timer */ bfin_write_TCNTL(0); /* clear ipi interrupt IRQ_SUPPLE_0 of CoreB */ bfin_write_SICB_SYSCR(bfin_read_SICB_SYSCR() | (1 << (10 + 1))); SSYNC(); /* set CoreB wakeup by ipi0, iwr will be discarded */ bfin_iwr_set_sup0(&iwr, &iwr, &iwr); SSYNC(); coreb_die(); } |