135832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean/*
235832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean * The generic setup file for PMC-Sierra MSP processors
335832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean *
435832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean * Copyright 2005-2007 PMC-Sierra, Inc,
535832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean * Author: Jun Sun, jsun@mvista.com or jsun@junsun.net
635832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean *
735832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean * This program is free software; you can redistribute  it and/or modify it
835832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean * under  the terms of  the GNU General  Public License as published by the
935832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean * Free Software Foundation;  either version 2 of the  License, or (at your
1035832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean * option) any later version.
1135832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean */
1235832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
1335832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean#include <asm/bootinfo.h>
1435832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean#include <asm/cacheflush.h>
1535832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean#include <asm/r4kcache.h>
1635832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean#include <asm/reboot.h>
172fd431085cab7a5d0ae4fae91c85c5a05d6afaa0Ralf Baechle#include <asm/smp-ops.h>
1835832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean#include <asm/time.h>
1935832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
2035832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean#include <msp_prom.h>
2135832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean#include <msp_regs.h>
2235832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
2335832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean#if defined(CONFIG_PMC_MSP7120_GW)
2435832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean#include <msp_regops.h>
2535832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean#define MSP_BOARD_RESET_GPIO	9
2635832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean#endif
2735832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
2835832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jeanextern void msp_serial_setup(void);
2935832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jeanextern void pmctwiled_setup(void);
3035832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
3135832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean#if defined(CONFIG_PMC_MSP7120_EVAL) || \
3235832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean    defined(CONFIG_PMC_MSP7120_GW) || \
3335832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean    defined(CONFIG_PMC_MSP7120_FPGA)
3435832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean/*
3535832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean * Performs the reset for MSP7120-based boards
3635832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean */
3735832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jeanvoid msp7120_reset(void)
3835832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean{
3935832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	void *start, *end, *iptr;
4035832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	register int i;
4135832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
4235832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	/* Diasble all interrupts */
4335832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	local_irq_disable();
4435832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean#ifdef CONFIG_SYS_SUPPORTS_MULTITHREADING
4535832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	dvpe();
4635832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean#endif
4735832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
4835832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	/* Cache the reset code of this function */
4935832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	__asm__ __volatile__ (
5035832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean		"	.set	push				\n"
5135832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean		"	.set	mips3				\n"
5235832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean		"	la	%0,startpoint			\n"
5335832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean		"	la	%1,endpoint			\n"
5435832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean		"	.set	pop				\n"
5535832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean		: "=r" (start), "=r" (end)
5635832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean		:
5735832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	);
5835832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
5935832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	for (iptr = (void *)((unsigned int)start & ~(L1_CACHE_BYTES - 1));
6035832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	     iptr < end; iptr += L1_CACHE_BYTES)
6135832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean		cache_op(Fill, iptr);
6235832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
6335832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	__asm__ __volatile__ (
6435832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean		"startpoint:					\n"
6535832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	);
6635832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
6735832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	/* Put the DDRC into self-refresh mode */
6835832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	DDRC_INDIRECT_WRITE(DDRC_CTL(10), 0xb, 1 << 16);
6935832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
7035832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	/*
7135832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 * IMPORTANT!
7235832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 * DO NOT do anything from here on out that might even
7335832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 * think about fetching from RAM - i.e., don't call any
7435832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 * non-inlined functions, and be VERY sure that any inline
7535832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 * functions you do call do NOT access any sort of RAM
7635832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 * anywhere!
7735832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 */
7835832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
7935832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	/* Wait a bit for the DDRC to settle */
8035832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	for (i = 0; i < 100000000; i++);
8135832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
8235832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean#if defined(CONFIG_PMC_MSP7120_GW)
8335832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	/*
8435832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 * Set GPIO 9 HI, (tied to board reset logic)
8535832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 * GPIO 9 is the 4th GPIO of register 3
8635832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 *
8735832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 * NOTE: We cannot use the higher-level msp_gpio_mode()/out()
8835832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 * as GPIO char driver may not be enabled and it would look up
8935832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 * data inRAM!
9035832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 */
91005076a16bd4c5ea60905ff475e8af57d60578f1Shane McDonald	set_value_reg32(GPIO_CFG3_REG, 0xf000, 0x8000);
92005076a16bd4c5ea60905ff475e8af57d60578f1Shane McDonald	set_reg32(GPIO_DATA3_REG, 8);
9335832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
9435832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	/*
9535832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 * In case GPIO9 doesn't reset the board (jumper configurable!)
9635832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 * fallback to device reset below.
9735832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 */
9835832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean#endif
9935832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	/* Set bit 1 of the MSP7120 reset register */
10035832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	*RST_SET_REG = 0x00000001;
10135832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
10235832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	__asm__ __volatile__ (
10335832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean		"endpoint:					\n"
10435832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	);
10535832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean}
10635832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean#endif
10735832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
10835832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jeanvoid msp_restart(char *command)
10935832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean{
11035832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	printk(KERN_WARNING "Now rebooting .......\n");
11135832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
11235832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean#if defined(CONFIG_PMC_MSP7120_EVAL) || \
11335832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean    defined(CONFIG_PMC_MSP7120_GW) || \
11435832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean    defined(CONFIG_PMC_MSP7120_FPGA)
11535832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	msp7120_reset();
11635832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean#else
11735832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	/* No chip-specific reset code, just jump to the ROM reset vector */
11835832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	set_c0_status(ST0_BEV | ST0_ERL);
11935832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	change_c0_config(CONF_CM_CMASK, CONF_CM_UNCACHED);
12035832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	flush_cache_all();
12135832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	write_c0_wired(0);
12235832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
12335832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	__asm__ __volatile__("jr\t%0"::"r"(0xbfc00000));
12435832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean#endif
12535832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean}
12635832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
12735832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jeanvoid msp_halt(void)
12835832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean{
12935832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	printk(KERN_WARNING "\n** You can safely turn off the power\n");
13035832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	while (1)
13135832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean		/* If possible call official function to get CPU WARs */
13235832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean		if (cpu_wait)
13335832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean			(*cpu_wait)();
13435832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean		else
13535832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean			__asm__(".set\tmips3\n\t" "wait\n\t" ".set\tmips0");
13635832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean}
13735832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
13835832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jeanvoid msp_power_off(void)
13935832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean{
14035832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	msp_halt();
14135832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean}
14235832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
14335832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jeanvoid __init plat_mem_setup(void)
14435832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean{
14535832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	_machine_restart = msp_restart;
14635832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	_machine_halt = msp_halt;
14735832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	pm_power_off = msp_power_off;
14835832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean}
14935832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
150088f3876fc9234feca0cdfdf710b8fafa87bfce1Anoop P Aextern struct plat_smp_ops msp_smtc_smp_ops;
151088f3876fc9234feca0cdfdf710b8fafa87bfce1Anoop P A
15235832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jeanvoid __init prom_init(void)
15335832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean{
15435832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	unsigned long family;
15535832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	unsigned long revision;
15635832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
15735832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	prom_argc = fw_arg0;
15835832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	prom_argv = (char **)fw_arg1;
15935832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	prom_envp = (char **)fw_arg2;
16035832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
16135832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	/*
16235832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 * Someday we can use this with PMON2000 to get a
16335832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 * platform call prom routines for output etc. without
16435832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 * having to use grody hacks.  For now it's unused.
16535832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 *
16635832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 * struct callvectors *cv = (struct callvectors *) fw_arg3;
16735832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 */
16835832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	family = identify_family();
16935832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	revision = identify_revision();
17035832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
17135832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	switch (family)	{
17235832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	case FAMILY_FPGA:
17335832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean		if (FPGA_IS_MSP4200(revision)) {
17435832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean			/* Old-style revision ID */
17535832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean			mips_machtype = MACH_MSP4200_FPGA;
17635832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean		} else {
17735832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean			mips_machtype = MACH_MSP_OTHER;
17835832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean		}
17935832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean		break;
18035832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
18135832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	case FAMILY_MSP4200:
18235832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean#if defined(CONFIG_PMC_MSP4200_EVAL)
18335832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean		mips_machtype  = MACH_MSP4200_EVAL;
18435832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean#elif defined(CONFIG_PMC_MSP4200_GW)
18535832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean		mips_machtype  = MACH_MSP4200_GW;
18635832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean#else
18735832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean		mips_machtype = MACH_MSP_OTHER;
18835832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean#endif
18935832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean		break;
19035832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
19135832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	case FAMILY_MSP4200_FPGA:
19235832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean		mips_machtype  = MACH_MSP4200_FPGA;
19335832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean		break;
19435832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
19535832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	case FAMILY_MSP7100:
19635832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean#if defined(CONFIG_PMC_MSP7120_EVAL)
19735832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean		mips_machtype = MACH_MSP7120_EVAL;
19835832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean#elif defined(CONFIG_PMC_MSP7120_GW)
19935832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean		mips_machtype = MACH_MSP7120_GW;
20035832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean#else
20135832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean		mips_machtype = MACH_MSP_OTHER;
20235832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean#endif
20335832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean		break;
20435832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
20535832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	case FAMILY_MSP7100_FPGA:
20635832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean		mips_machtype  = MACH_MSP7120_FPGA;
20735832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean		break;
20835832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
20935832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	default:
21035832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean		/* we don't recognize the machine */
21135832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean		mips_machtype  = MACH_UNKNOWN;
212ab75dc02c151c9d2a2fd446334d740b097a3b9dbRalf Baechle		panic("***Bogosity factor five***, exiting");
21305dc8c02bf40090e9ed23932b1980ead48eb8870Ralf Baechle		break;
21435832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	}
21535832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
21635832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	prom_init_cmdline();
21735832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
21835832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	prom_meminit();
21935832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
22035832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	/*
22135832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 * Sub-system setup follows.
22235832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 * Setup functions can  either be called here or using the
22335832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 * subsys_initcall mechanism (i.e. see msp_pci_setup). The
22435832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 * order in which they are called can be changed by using the
22535832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 * link order in arch/mips/pmc-sierra/msp71xx/Makefile.
22635832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 *
22735832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 * NOTE: Please keep sub-system specific initialization code
22835832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 * in separate specific files.
22935832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 */
23035832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	msp_serial_setup();
23135832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean
232852fe3105e94ca26d1b3df7e2cb6878ebdd67608Ralf Baechle	if (register_vsmp_smp_ops()) {
233088f3876fc9234feca0cdfdf710b8fafa87bfce1Anoop P A#ifdef CONFIG_MIPS_MT_SMTC
234852fe3105e94ca26d1b3df7e2cb6878ebdd67608Ralf Baechle		register_smp_ops(&msp_smtc_smp_ops);
235088f3876fc9234feca0cdfdf710b8fafa87bfce1Anoop P A#endif
236852fe3105e94ca26d1b3df7e2cb6878ebdd67608Ralf Baechle	}
237088f3876fc9234feca0cdfdf710b8fafa87bfce1Anoop P A
23835832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean#ifdef CONFIG_PMCTWILED
23935832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	/*
24035832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 * Setup LED states before the subsys_initcall loads other
24125985edcedea6396277003854657b5f3cb31a628Lucas De Marchi	 * dependent drivers/modules.
24235832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	 */
24335832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean	pmctwiled_setup();
24435832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean#endif
24535832e26f95ba14a6b6f0519441c5cb64cca6bf9Marc St-Jean}
246