|
@@ -37,80 +37,24 @@
|
|
#include <asm/mipsregs.h>
|
|
#include <asm/mipsregs.h>
|
|
#include <asm/mipsmtregs.h>
|
|
#include <asm/mipsmtregs.h>
|
|
#include <asm/mips_mt.h>
|
|
#include <asm/mips_mt.h>
|
|
-
|
|
|
|
-/*
|
|
|
|
- * Crude manipulation of the CPU masks to control which
|
|
|
|
- * which CPU's are brought online during initialisation
|
|
|
|
- *
|
|
|
|
- * Beware... this needs to be called after CPU discovery
|
|
|
|
- * but before CPU bringup
|
|
|
|
- */
|
|
|
|
-static int __init allowcpus(char *str)
|
|
|
|
-{
|
|
|
|
- cpumask_t cpu_allow_map;
|
|
|
|
- char buf[256];
|
|
|
|
- int len;
|
|
|
|
-
|
|
|
|
- cpus_clear(cpu_allow_map);
|
|
|
|
- if (cpulist_parse(str, &cpu_allow_map) == 0) {
|
|
|
|
- cpu_set(0, cpu_allow_map);
|
|
|
|
- cpus_and(cpu_possible_map, cpu_possible_map, cpu_allow_map);
|
|
|
|
- len = cpulist_scnprintf(buf, sizeof(buf)-1, &cpu_possible_map);
|
|
|
|
- buf[len] = '\0';
|
|
|
|
- pr_debug("Allowable CPUs: %s\n", buf);
|
|
|
|
- return 1;
|
|
|
|
- } else
|
|
|
|
- return 0;
|
|
|
|
-}
|
|
|
|
-__setup("allowcpus=", allowcpus);
|
|
|
|
|
|
+#include <asm/amon.h>
|
|
|
|
+#include <asm/gic.h>
|
|
|
|
|
|
static void ipi_call_function(unsigned int cpu)
|
|
static void ipi_call_function(unsigned int cpu)
|
|
{
|
|
{
|
|
- unsigned int action = 0;
|
|
|
|
-
|
|
|
|
pr_debug("CPU%d: %s cpu %d status %08x\n",
|
|
pr_debug("CPU%d: %s cpu %d status %08x\n",
|
|
smp_processor_id(), __func__, cpu, read_c0_status());
|
|
smp_processor_id(), __func__, cpu, read_c0_status());
|
|
|
|
|
|
- switch (cpu) {
|
|
|
|
- case 0:
|
|
|
|
- action = GIC_IPI_EXT_INTR_CALLFNC_VPE0;
|
|
|
|
- break;
|
|
|
|
- case 1:
|
|
|
|
- action = GIC_IPI_EXT_INTR_CALLFNC_VPE1;
|
|
|
|
- break;
|
|
|
|
- case 2:
|
|
|
|
- action = GIC_IPI_EXT_INTR_CALLFNC_VPE2;
|
|
|
|
- break;
|
|
|
|
- case 3:
|
|
|
|
- action = GIC_IPI_EXT_INTR_CALLFNC_VPE3;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- gic_send_ipi(action);
|
|
|
|
|
|
+ gic_send_ipi(plat_ipi_call_int_xlate(cpu));
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
static void ipi_resched(unsigned int cpu)
|
|
static void ipi_resched(unsigned int cpu)
|
|
{
|
|
{
|
|
- unsigned int action = 0;
|
|
|
|
-
|
|
|
|
pr_debug("CPU%d: %s cpu %d status %08x\n",
|
|
pr_debug("CPU%d: %s cpu %d status %08x\n",
|
|
smp_processor_id(), __func__, cpu, read_c0_status());
|
|
smp_processor_id(), __func__, cpu, read_c0_status());
|
|
|
|
|
|
- switch (cpu) {
|
|
|
|
- case 0:
|
|
|
|
- action = GIC_IPI_EXT_INTR_RESCHED_VPE0;
|
|
|
|
- break;
|
|
|
|
- case 1:
|
|
|
|
- action = GIC_IPI_EXT_INTR_RESCHED_VPE1;
|
|
|
|
- break;
|
|
|
|
- case 2:
|
|
|
|
- action = GIC_IPI_EXT_INTR_RESCHED_VPE2;
|
|
|
|
- break;
|
|
|
|
- case 3:
|
|
|
|
- action = GIC_IPI_EXT_INTR_RESCHED_VPE3;
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- gic_send_ipi(action);
|
|
|
|
|
|
+ gic_send_ipi(plat_ipi_resched_int_xlate(cpu));
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -206,7 +150,7 @@ static void cmp_boot_secondary(int cpu, struct task_struct *idle)
|
|
(unsigned long)(gp + sizeof(struct thread_info)));
|
|
(unsigned long)(gp + sizeof(struct thread_info)));
|
|
#endif
|
|
#endif
|
|
|
|
|
|
- amon_cpu_start(cpu, pc, sp, gp, a0);
|
|
|
|
|
|
+ amon_cpu_start(cpu, pc, sp, (unsigned long)gp, a0);
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|