Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -114,4 +114,6 @@
#define GCMP_CCB_DINTGROUP_OFS		0x0030		/* DINT Group Participate */
#define GCMP_CCB_DBGGROUP_OFS		0x0100		/* DebugBreak Group */

extern int __init gcmp_probe(unsigned long, unsigned long);

#endif /* _ASM_GCMPREGS_H */
+13 −1
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@
#include <asm/cacheflush.h>
#include <asm/traps.h>

#include <asm/gcmpregs.h>
#include <asm/mips-boards/prom.h>
#include <asm/mips-boards/generic.h>
#include <asm/mips-boards/bonito64.h>
@@ -192,6 +193,8 @@ extern struct plat_smp_ops msmtc_smp_ops;

void __init prom_init(void)
{
	int result;

	prom_argc = fw_arg0;
	_prom_argv = (int *) fw_arg1;
	_prom_envp = (int *) fw_arg2;
@@ -358,11 +361,20 @@ void __init prom_init(void)
#ifdef CONFIG_SERIAL_8250_CONSOLE
	console_config();
#endif
	/* Early detection of CMP support */
	result = gcmp_probe(GCMP_BASE_ADDR, GCMP_ADDRSPACE_SZ);

#ifdef CONFIG_MIPS_CMP
	if (result)
		register_smp_ops(&cmp_smp_ops);
#endif
#ifdef CONFIG_MIPS_MT_SMP
#ifdef CONFIG_MIPS_CMP
	if (!result)
		register_smp_ops(&vsmp_smp_ops);
#else
	register_smp_ops(&vsmp_smp_ops);
#endif
#endif
#ifdef CONFIG_MIPS_MT_SMTC
	register_smp_ops(&msmtc_smp_ops);
+1 −4
Original line number Diff line number Diff line
@@ -409,7 +409,7 @@ static struct gic_intr_map gic_intr_map[GIC_NUM_INTRS] = {
/*
 * 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)
		return gcmp_present;
@@ -449,14 +449,11 @@ static void __init fill_ipi_map(void)

void __init arch_init_irq(void)
{
	int gic_present, gcmp_present;

	init_i8259_irqs();

	if (!cpu_has_veic)
		mips_cpu_irq_init();

	gcmp_present = gcmp_probe(GCMP_BASE_ADDR, GCMP_ADDRSPACE_SZ);
	if (gcmp_present)  {
		GCMPGCB(GICBA) = GIC_BASE_ADDR | GCMP_GCB_GICBA_EN_MSK;
		gic_present = 1;