msm: platsmp: Release secondary cores out of reset for copper

Add support to release secondary cores out of reset for
copper target on simulator.

This helps avoid the warning message from showing up on the
console when the secondary cores are brought online as copper
was not in the list of recognized targets.

Signed-off-by: Sathish Ambley <sambley@codeaurora.org>
Change-Id: Ib9d8df35d277535f8a885c0e9e803ecee1e71903
diff --git a/arch/arm/mach-msm/include/mach/socinfo.h b/arch/arm/mach-msm/include/mach/socinfo.h
index 407c55a..99bf212 100644
--- a/arch/arm/mach-msm/include/mach/socinfo.h
+++ b/arch/arm/mach-msm/include/mach/socinfo.h
@@ -36,9 +36,12 @@
 	of_flat_dt_is_compatible(of_get_flat_dt_root(), "qcom,msmcopper")
 #define machine_is_copper()		\
 	of_machine_is_compatible("qcom,msmcopper")
+#define machine_is_copper_sim()		\
+	of_machine_is_compatible("qcom,msmcopper-sim")
 #else
 #define early_machine_is_copper()	0
 #define machine_is_copper()		0
+#define machine_is_copper_sim()	0
 #endif
 
 enum msm_cpu {
diff --git a/arch/arm/mach-msm/platsmp.c b/arch/arm/mach-msm/platsmp.c
index 6b48d57..668e0c2 100644
--- a/arch/arm/mach-msm/platsmp.c
+++ b/arch/arm/mach-msm/platsmp.c
@@ -61,9 +61,9 @@
 	return 0;
 }
 
-static int __cpuinit krait_release_secondary_sim(int cpu)
+static int __cpuinit krait_release_secondary_sim(unsigned long base, int cpu)
 {
-	void *base_ptr = ioremap_nocache(0x02088000 + (cpu * 0x10000), SZ_4K);
+	void *base_ptr = ioremap_nocache(base + (cpu * 0x10000), SZ_4K);
 	if (!base_ptr)
 		return -ENODEV;
 
@@ -75,14 +75,17 @@
 	if (machine_is_apq8064_sim())
 		writel_relaxed(0xf0000, base_ptr+0x04);
 
+	if (machine_is_copper_sim())
+		writel_relaxed(0x9, base_ptr+0x04);
+
 	mb();
 	iounmap(base_ptr);
 	return 0;
 }
 
-static int __cpuinit krait_release_secondary(int cpu)
+static int __cpuinit krait_release_secondary(unsigned long base, int cpu)
 {
-	void *base_ptr = ioremap_nocache(0x02088000 + (cpu * 0x10000), SZ_4K);
+	void *base_ptr = ioremap_nocache(base + (cpu * 0x10000), SZ_4K);
 	if (!base_ptr)
 		return -ENODEV;
 
@@ -116,10 +119,13 @@
 
 	if (machine_is_msm8960_sim() || machine_is_msm8960_rumi3() ||
 	    machine_is_apq8064_sim())
-		return krait_release_secondary_sim(cpu);
+		return krait_release_secondary_sim(0x02088000, cpu);
+
+	if (machine_is_copper_sim())
+		return krait_release_secondary_sim(0xf9088000, cpu);
 
 	if (cpu_is_msm8960() || cpu_is_msm8930() || cpu_is_apq8064())
-		return krait_release_secondary(cpu);
+		return krait_release_secondary(0x02088000, cpu);
 
 	WARN(1, "unknown CPU case in release_secondary\n");
 	return -EINVAL;