rk3026: fix boot secondary cpu fail
author黄涛 <huangtao@rock-chips.com>
Sat, 3 Aug 2013 06:27:51 +0000 (14:27 +0800)
committer黄涛 <huangtao@rock-chips.com>
Sat, 3 Aug 2013 06:27:51 +0000 (14:27 +0800)
arch/arm/mach-rk2928/include/mach/io.h
arch/arm/mach-rk30/platsmp.c

index c11a87920da992be7cae134693ed81c92fc3f341..b2adbf18ee0ea475c8abe1de99a874fd0bf43d84 100755 (executable)
 #define RK30_CRU_BASE           RK2928_CRU_BASE
 #define RK30_GRF_BASE           RK2928_GRF_BASE
 #define RK30_IMEM_BASE          RK2928_IMEM_BASE
+#define RK30_IMEM_NONCACHED     RK2928_IMEM_NONCACHED
 #define RK30_PTIMER_BASE        RK2928_PTIMER_BASE
 #define RK30_ROM_BASE           RK2928_ROM_BASE
 #define RK30_SCU_BASE           RK2928_SCU_BASE
index f1edf874eace66f9112b4962de22385911630ecf..488cc95550ebda5e8e6db853600f164a71ac06a4 100755 (executable)
@@ -82,14 +82,13 @@ int __cpuinit boot_secondary(unsigned int cpu, struct task_struct *idle)
                for (i = 1; i < ncores; i++)
                        pmu_set_power_domain(PD_A9_0 + i, false);
 
-               memcpy(RK30_IMEM_BASE, rk30_sram_secondary_startup, sz);
-               flush_icache_range((unsigned long)RK30_IMEM_BASE, (unsigned long)RK30_IMEM_BASE + sz);
-               outer_clean_range(0, sz);
+               memcpy(RK30_IMEM_NONCACHED, rk30_sram_secondary_startup, sz);
+               isb();
+               dsb();
 
                first = false;
        }
 
-       dsb_sev();
        pmu_set_power_domain(PD_A9_0 + cpu, true);
 
        return 0;