|
@@ -0,0 +1,31 @@
|
|
|
|
+#include <linux/smp.h>
|
|
|
|
+#include <asm/mach/arch.h>
|
|
|
|
+#include <asm/hardware/cache-l2x0.h>
|
|
|
|
+#include "smc.h"
|
|
|
|
+
|
|
|
|
+static int tango4_boot_secondary(unsigned int cpu, struct task_struct *idle)
|
|
|
|
+{
|
|
|
|
+ tango_set_aux_boot_addr(virt_to_phys(secondary_startup));
|
|
|
|
+ tango_start_aux_core(cpu);
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static struct smp_operations tango4_smp_ops __initdata = {
|
|
|
|
+ .smp_boot_secondary = tango4_boot_secondary,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+CPU_METHOD_OF_DECLARE(tango4_smp, "sigma,tango4-smp", &tango4_smp_ops);
|
|
|
|
+
|
|
|
|
+static void tango_l2c_write(unsigned long val, unsigned int reg)
|
|
|
|
+{
|
|
|
|
+ if (reg == L2X0_CTRL)
|
|
|
|
+ tango_set_l2_control(val);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static const char *const tango_dt_compat[] = { "sigma,tango4", NULL };
|
|
|
|
+
|
|
|
|
+DT_MACHINE_START(TANGO_DT, "Sigma Tango DT")
|
|
|
|
+ .dt_compat = tango_dt_compat,
|
|
|
|
+ .l2c_aux_mask = ~0,
|
|
|
|
+ .l2c_write_sec = tango_l2c_write,
|
|
|
|
+MACHINE_END
|