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: Tim Anderson <tanderson@mvista.com> Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
Родитель
0365070f05
Коммит
47b178bb69
|
@ -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 @@
|
||||||
#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;
|
||||||
|
|
||||||
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,12 +361,21 @@ 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
|
||||||
register_smp_ops(&cmp_smp_ops);
|
if (result)
|
||||||
|
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);
|
||||||
|
#else
|
||||||
register_smp_ops(&vsmp_smp_ops);
|
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);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -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)
|
||||||
|
|
||||||
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;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче