Commit 47b178bb authored by Tim Anderson's avatar Tim Anderson Committed by Ralf Baechle

MIPS: CMP: Move gcmp_probe to before the SMP ops

This is to move the gcmp_probe call to before the use of and selection of
the smp_ops functions. This allows malta with 1004K to work.
Signed-off-by: default avatarTim Anderson <tanderson@mvista.com>
Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent 0365070f
...@@ -114,4 +114,6 @@ ...@@ -114,4 +114,6 @@
#define GCMP_CCB_DINTGROUP_OFS 0x0030 /* DINT Group Participate */ #define GCMP_CCB_DINTGROUP_OFS 0x0030 /* DINT Group Participate */
#define GCMP_CCB_DBGGROUP_OFS 0x0100 /* DebugBreak Group */ #define GCMP_CCB_DBGGROUP_OFS 0x0100 /* DebugBreak Group */
extern int __init gcmp_probe(unsigned long, unsigned long);
#endif /* _ASM_GCMPREGS_H */ #endif /* _ASM_GCMPREGS_H */
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/traps.h> #include <asm/traps.h>
#include <asm/gcmpregs.h>
#include <asm/mips-boards/prom.h> #include <asm/mips-boards/prom.h>
#include <asm/mips-boards/generic.h> #include <asm/mips-boards/generic.h>
#include <asm/mips-boards/bonito64.h> #include <asm/mips-boards/bonito64.h>
...@@ -192,6 +193,8 @@ extern struct plat_smp_ops msmtc_smp_ops; ...@@ -192,6 +193,8 @@ extern struct plat_smp_ops msmtc_smp_ops;
void __init prom_init(void) void __init prom_init(void)
{ {
int result;
prom_argc = fw_arg0; prom_argc = fw_arg0;
_prom_argv = (int *) fw_arg1; _prom_argv = (int *) fw_arg1;
_prom_envp = (int *) fw_arg2; _prom_envp = (int *) fw_arg2;
...@@ -358,11 +361,20 @@ void __init prom_init(void) ...@@ -358,11 +361,20 @@ void __init prom_init(void)
#ifdef CONFIG_SERIAL_8250_CONSOLE #ifdef CONFIG_SERIAL_8250_CONSOLE
console_config(); console_config();
#endif #endif
/* Early detection of CMP support */
result = gcmp_probe(GCMP_BASE_ADDR, GCMP_ADDRSPACE_SZ);
#ifdef CONFIG_MIPS_CMP #ifdef CONFIG_MIPS_CMP
if (result)
register_smp_ops(&cmp_smp_ops); register_smp_ops(&cmp_smp_ops);
#endif #endif
#ifdef CONFIG_MIPS_MT_SMP #ifdef CONFIG_MIPS_MT_SMP
#ifdef CONFIG_MIPS_CMP
if (!result)
register_smp_ops(&vsmp_smp_ops); register_smp_ops(&vsmp_smp_ops);
#else
register_smp_ops(&vsmp_smp_ops);
#endif
#endif #endif
#ifdef CONFIG_MIPS_MT_SMTC #ifdef CONFIG_MIPS_MT_SMTC
register_smp_ops(&msmtc_smp_ops); register_smp_ops(&msmtc_smp_ops);
......
...@@ -409,7 +409,7 @@ static struct gic_intr_map gic_intr_map[GIC_NUM_INTRS] = { ...@@ -409,7 +409,7 @@ static struct gic_intr_map gic_intr_map[GIC_NUM_INTRS] = {
/* /*
* GCMP needs to be detected before any SMP initialisation * GCMP needs to be detected before any SMP initialisation
*/ */
static int __init gcmp_probe(unsigned long addr, unsigned long size) int __init gcmp_probe(unsigned long addr, unsigned long size)
{ {
if (gcmp_present >= 0) if (gcmp_present >= 0)
return gcmp_present; return gcmp_present;
...@@ -449,14 +449,11 @@ static void __init fill_ipi_map(void) ...@@ -449,14 +449,11 @@ static void __init fill_ipi_map(void)
void __init arch_init_irq(void) void __init arch_init_irq(void)
{ {
int gic_present, gcmp_present;
init_i8259_irqs(); init_i8259_irqs();
if (!cpu_has_veic) if (!cpu_has_veic)
mips_cpu_irq_init(); mips_cpu_irq_init();
gcmp_present = gcmp_probe(GCMP_BASE_ADDR, GCMP_ADDRSPACE_SZ);
if (gcmp_present) { if (gcmp_present) {
GCMPGCB(GICBA) = GIC_BASE_ADDR | GCMP_GCB_GICBA_EN_MSK; GCMPGCB(GICBA) = GIC_BASE_ADDR | GCMP_GCB_GICBA_EN_MSK;
gic_present = 1; gic_present = 1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment