|
@@ -7,6 +7,7 @@
|
|
|
|
|
|
#include <linux/smp.h>
|
|
#include <linux/smp.h>
|
|
#include <asm/blackfin.h>
|
|
#include <asm/blackfin.h>
|
|
|
|
+#include <asm/cacheflush.h>
|
|
#include <mach/pll.h>
|
|
#include <mach/pll.h>
|
|
|
|
|
|
int hotplug_coreb;
|
|
int hotplug_coreb;
|
|
@@ -14,8 +15,16 @@ int hotplug_coreb;
|
|
void platform_cpu_die(void)
|
|
void platform_cpu_die(void)
|
|
{
|
|
{
|
|
unsigned long iwr;
|
|
unsigned long iwr;
|
|
|
|
+
|
|
hotplug_coreb = 1;
|
|
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 */
|
|
/* disable core timer */
|
|
bfin_write_TCNTL(0);
|
|
bfin_write_TCNTL(0);
|
|
|
|
|