11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Carsten Langgaard, carstenl@mips.com
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 2000 MIPS Technologies, Inc.  All rights reserved.
452d65cf87f439c5264527c3628d12a26322524ebDmitri Vorobiev * Copyright (C) 2008 Dmitri Vorobiev
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  This program is free software; you can distribute it and/or modify it
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  under the terms of the GNU General Public License (Version 2) as
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  published by the Free Software Foundation.
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  This program is distributed in the hope it will be useful, but WITHOUT
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  for more details.
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  You should have received a copy of the GNU General Public License along
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  with this program; if not, write to the Free Software Foundation, Inc.,
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
1954bf038e2216212b1728861b1a15fc0cc1ad1d2eDmitri Vorobiev#include <linux/cpu.h>
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/init.h>
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/sched.h>
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/ioport.h>
2354bf038e2216212b1728861b1a15fc0cc1ad1d2eDmitri Vorobiev#include <linux/irq.h>
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/pci.h>
25894673ee6122a3ce1958e1fe096901ba5356a96bJon Smirl#include <linux/screen_info.h>
2654bf038e2216212b1728861b1a15fc0cc1ad1d2eDmitri Vorobiev#include <linux/time.h>
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/bootinfo.h>
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/mips-boards/generic.h>
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/mips-boards/prom.h>
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/mips-boards/malta.h>
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/mips-boards/maltaint.h>
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/dma.h>
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/traps.h>
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_VT
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/console.h>
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3939b8d5254246ac56342b72f812255c8f7a74dca9Ralf Baechleextern void malta_be_init(void);
4039b8d5254246ac56342b72f812255c8f7a74dca9Ralf Baechleextern int malta_be_handler(struct pt_regs *regs, int is_fixup);
4139b8d5254246ac56342b72f812255c8f7a74dca9Ralf Baechle
4252d65cf87f439c5264527c3628d12a26322524ebDmitri Vorobievstatic struct resource standard_io_resources[] = {
434ca765135414e85c80f0a68bb35189472bb9ad1eDmitri Vorobiev	{
444ca765135414e85c80f0a68bb35189472bb9ad1eDmitri Vorobiev		.name = "dma1",
454ca765135414e85c80f0a68bb35189472bb9ad1eDmitri Vorobiev		.start = 0x00,
464ca765135414e85c80f0a68bb35189472bb9ad1eDmitri Vorobiev		.end = 0x1f,
474ca765135414e85c80f0a68bb35189472bb9ad1eDmitri Vorobiev		.flags = IORESOURCE_BUSY
484ca765135414e85c80f0a68bb35189472bb9ad1eDmitri Vorobiev	},
494ca765135414e85c80f0a68bb35189472bb9ad1eDmitri Vorobiev	{
504ca765135414e85c80f0a68bb35189472bb9ad1eDmitri Vorobiev		.name = "timer",
514ca765135414e85c80f0a68bb35189472bb9ad1eDmitri Vorobiev		.start = 0x40,
524ca765135414e85c80f0a68bb35189472bb9ad1eDmitri Vorobiev		.end = 0x5f,
534ca765135414e85c80f0a68bb35189472bb9ad1eDmitri Vorobiev		.flags = IORESOURCE_BUSY
544ca765135414e85c80f0a68bb35189472bb9ad1eDmitri Vorobiev	},
554ca765135414e85c80f0a68bb35189472bb9ad1eDmitri Vorobiev	{
564ca765135414e85c80f0a68bb35189472bb9ad1eDmitri Vorobiev		.name = "keyboard",
574ca765135414e85c80f0a68bb35189472bb9ad1eDmitri Vorobiev		.start = 0x60,
584ca765135414e85c80f0a68bb35189472bb9ad1eDmitri Vorobiev		.end = 0x6f,
594ca765135414e85c80f0a68bb35189472bb9ad1eDmitri Vorobiev		.flags = IORESOURCE_BUSY
604ca765135414e85c80f0a68bb35189472bb9ad1eDmitri Vorobiev	},
614ca765135414e85c80f0a68bb35189472bb9ad1eDmitri Vorobiev	{
624ca765135414e85c80f0a68bb35189472bb9ad1eDmitri Vorobiev		.name = "dma page reg",
634ca765135414e85c80f0a68bb35189472bb9ad1eDmitri Vorobiev		.start = 0x80,
644ca765135414e85c80f0a68bb35189472bb9ad1eDmitri Vorobiev		.end = 0x8f,
654ca765135414e85c80f0a68bb35189472bb9ad1eDmitri Vorobiev		.flags = IORESOURCE_BUSY
664ca765135414e85c80f0a68bb35189472bb9ad1eDmitri Vorobiev	},
674ca765135414e85c80f0a68bb35189472bb9ad1eDmitri Vorobiev	{
684ca765135414e85c80f0a68bb35189472bb9ad1eDmitri Vorobiev		.name = "dma2",
694ca765135414e85c80f0a68bb35189472bb9ad1eDmitri Vorobiev		.start = 0xc0,
704ca765135414e85c80f0a68bb35189472bb9ad1eDmitri Vorobiev		.end = 0xdf,
714ca765135414e85c80f0a68bb35189472bb9ad1eDmitri Vorobiev		.flags = IORESOURCE_BUSY
724ca765135414e85c80f0a68bb35189472bb9ad1eDmitri Vorobiev	},
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsconst char *get_system_type(void)
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	return "MIPS Malta";
781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
8079894c7b47f78decaa3511f1d6646aa06e2c6bedRalf Baechle#if defined(CONFIG_MIPS_MT_SMTC)
8179894c7b47f78decaa3511f1d6646aa06e2c6bedRalf Baechleconst char display_string[] = "       SMTC LINUX ON MALTA       ";
8279894c7b47f78decaa3511f1d6646aa06e2c6bedRalf Baechle#else
8379894c7b47f78decaa3511f1d6646aa06e2c6bedRalf Baechleconst char display_string[] = "        LINUX ON MALTA       ";
8479894c7b47f78decaa3511f1d6646aa06e2c6bedRalf Baechle#endif /* CONFIG_MIPS_MT_SMTC */
8579894c7b47f78decaa3511f1d6646aa06e2c6bedRalf Baechle
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_BLK_DEV_FD
87ef7645cfe6f785de3bdc2ae6016924f46f614d61Dmitri Vorobievstatic void __init fd_activate(void)
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/*
901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * Activate Floppy Controller in the SMSC FDC37M817 Super I/O
911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * Controller.
921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * Done by YAMON 2.00 onwards
931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 */
941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* Entering config state. */
951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	SMSC_WRITE(SMSC_CONFIG_ENTER, SMSC_CONFIG_REG);
961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* Activate floppy controller. */
981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	SMSC_WRITE(SMSC_CONFIG_DEVNUM, SMSC_CONFIG_REG);
991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	SMSC_WRITE(SMSC_CONFIG_DEVNUM_FLOPPY, SMSC_DATA_REG);
1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	SMSC_WRITE(SMSC_CONFIG_ACTIVATE, SMSC_CONFIG_REG);
1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	SMSC_WRITE(SMSC_CONFIG_ACTIVATE_ENABLE, SMSC_DATA_REG);
1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* Exit config state. */
1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	SMSC_WRITE(SMSC_CONFIG_EXIT, SMSC_CONFIG_REG);
1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
108f3a4ce9587cd1e810f31c87ecb89033d5fd269ceDmitri Vorobiev#ifdef CONFIG_BLK_DEV_IDE
109f3a4ce9587cd1e810f31c87ecb89033d5fd269ceDmitri Vorobievstatic void __init pci_clock_check(void)
110f3a4ce9587cd1e810f31c87ecb89033d5fd269ceDmitri Vorobiev{
111f3a4ce9587cd1e810f31c87ecb89033d5fd269ceDmitri Vorobiev	unsigned int __iomem *jmpr_p =
112f3a4ce9587cd1e810f31c87ecb89033d5fd269ceDmitri Vorobiev		(unsigned int *) ioremap(MALTA_JMPRS_REG, sizeof(unsigned int));
113f3a4ce9587cd1e810f31c87ecb89033d5fd269ceDmitri Vorobiev	int jmpr = (__raw_readl(jmpr_p) >> 2) & 0x07;
114f3a4ce9587cd1e810f31c87ecb89033d5fd269ceDmitri Vorobiev	static const int pciclocks[] __initdata = {
115f3a4ce9587cd1e810f31c87ecb89033d5fd269ceDmitri Vorobiev		33, 20, 25, 30, 12, 16, 37, 10
116f3a4ce9587cd1e810f31c87ecb89033d5fd269ceDmitri Vorobiev	};
117f3a4ce9587cd1e810f31c87ecb89033d5fd269ceDmitri Vorobiev	int pciclock = pciclocks[jmpr];
118f3a4ce9587cd1e810f31c87ecb89033d5fd269ceDmitri Vorobiev	char *argptr = prom_getcmdline();
119f3a4ce9587cd1e810f31c87ecb89033d5fd269ceDmitri Vorobiev
120f3a4ce9587cd1e810f31c87ecb89033d5fd269ceDmitri Vorobiev	if (pciclock != 33 && !strstr(argptr, "idebus=")) {
121f3a4ce9587cd1e810f31c87ecb89033d5fd269ceDmitri Vorobiev		printk(KERN_WARNING "WARNING: PCI clock is %dMHz, "
122f3a4ce9587cd1e810f31c87ecb89033d5fd269ceDmitri Vorobiev				"setting idebus\n", pciclock);
123f3a4ce9587cd1e810f31c87ecb89033d5fd269ceDmitri Vorobiev		argptr += strlen(argptr);
124f3a4ce9587cd1e810f31c87ecb89033d5fd269ceDmitri Vorobiev		sprintf(argptr, " idebus=%d", pciclock);
125f3a4ce9587cd1e810f31c87ecb89033d5fd269ceDmitri Vorobiev		if (pciclock < 20 || pciclock > 66)
126f3a4ce9587cd1e810f31c87ecb89033d5fd269ceDmitri Vorobiev			printk(KERN_WARNING "WARNING: IDE timing "
127f3a4ce9587cd1e810f31c87ecb89033d5fd269ceDmitri Vorobiev					"calculations will be incorrect\n");
128f3a4ce9587cd1e810f31c87ecb89033d5fd269ceDmitri Vorobiev	}
129f3a4ce9587cd1e810f31c87ecb89033d5fd269ceDmitri Vorobiev}
130f3a4ce9587cd1e810f31c87ecb89033d5fd269ceDmitri Vorobiev#endif
131f3a4ce9587cd1e810f31c87ecb89033d5fd269ceDmitri Vorobiev
132a382963edc55815b9ec56259c87b1405083acadfDmitri Vorobiev#if defined(CONFIG_VT) && defined(CONFIG_VGA_CONSOLE)
133a382963edc55815b9ec56259c87b1405083acadfDmitri Vorobievstatic void __init screen_info_setup(void)
134a382963edc55815b9ec56259c87b1405083acadfDmitri Vorobiev{
135a382963edc55815b9ec56259c87b1405083acadfDmitri Vorobiev	screen_info = (struct screen_info) {
136a382963edc55815b9ec56259c87b1405083acadfDmitri Vorobiev		.orig_x = 0,
137a382963edc55815b9ec56259c87b1405083acadfDmitri Vorobiev		.orig_y = 25,
138a382963edc55815b9ec56259c87b1405083acadfDmitri Vorobiev		.ext_mem_k = 0,
139a382963edc55815b9ec56259c87b1405083acadfDmitri Vorobiev		.orig_video_page = 0,
140a382963edc55815b9ec56259c87b1405083acadfDmitri Vorobiev		.orig_video_mode = 0,
141a382963edc55815b9ec56259c87b1405083acadfDmitri Vorobiev		.orig_video_cols = 80,
142a382963edc55815b9ec56259c87b1405083acadfDmitri Vorobiev		.unused2 = 0,
143a382963edc55815b9ec56259c87b1405083acadfDmitri Vorobiev		.orig_video_ega_bx = 0,
144a382963edc55815b9ec56259c87b1405083acadfDmitri Vorobiev		.unused3 = 0,
145a382963edc55815b9ec56259c87b1405083acadfDmitri Vorobiev		.orig_video_lines = 25,
146a382963edc55815b9ec56259c87b1405083acadfDmitri Vorobiev		.orig_video_isVGA = VIDEO_TYPE_VGAC,
147a382963edc55815b9ec56259c87b1405083acadfDmitri Vorobiev		.orig_video_points = 16
148a382963edc55815b9ec56259c87b1405083acadfDmitri Vorobiev	};
149a382963edc55815b9ec56259c87b1405083acadfDmitri Vorobiev}
150a382963edc55815b9ec56259c87b1405083acadfDmitri Vorobiev#endif
151a382963edc55815b9ec56259c87b1405083acadfDmitri Vorobiev
152750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobievstatic void __init bonito_quirks_setup(void)
153750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev{
154750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev	char *argptr;
155750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev
156750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev	argptr = prom_getcmdline();
157750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev	if (strstr(argptr, "debug")) {
158750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev		BONITO_BONGENCFG |= BONITO_BONGENCFG_DEBUGMODE;
159750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev		printk(KERN_INFO "Enabled Bonito debug mode\n");
160750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev	} else
161750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev		BONITO_BONGENCFG &= ~BONITO_BONGENCFG_DEBUGMODE;
162750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev
163750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev#ifdef CONFIG_DMA_COHERENT
164750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev	if (BONITO_PCICACHECTRL & BONITO_PCICACHECTRL_CPUCOH_PRES) {
165750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev		BONITO_PCICACHECTRL |= BONITO_PCICACHECTRL_CPUCOH_EN;
166750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev		printk(KERN_INFO "Enabled Bonito CPU coherency\n");
167750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev
168750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev		argptr = prom_getcmdline();
169750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev		if (strstr(argptr, "iobcuncached")) {
170750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev			BONITO_PCICACHECTRL &= ~BONITO_PCICACHECTRL_IOBCCOH_EN;
171750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev			BONITO_PCIMEMBASECFG = BONITO_PCIMEMBASECFG &
172750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev				~(BONITO_PCIMEMBASECFG_MEMBASE0_CACHED |
173750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev					BONITO_PCIMEMBASECFG_MEMBASE1_CACHED);
174750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev			printk(KERN_INFO "Disabled Bonito IOBC coherency\n");
175750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev		} else {
176750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev			BONITO_PCICACHECTRL |= BONITO_PCICACHECTRL_IOBCCOH_EN;
177750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev			BONITO_PCIMEMBASECFG |=
178750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev				(BONITO_PCIMEMBASECFG_MEMBASE0_CACHED |
179750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev					BONITO_PCIMEMBASECFG_MEMBASE1_CACHED);
180750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev			printk(KERN_INFO "Enabled Bonito IOBC coherency\n");
181750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev		}
182750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev	} else
183750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev		panic("Hardware DMA cache coherency not supported");
184750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev#endif
185750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev}
186750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev
1872925aba4223f4532e85f0c6f64584b3e0b2849c3Ralf Baechlevoid __init plat_mem_setup(void)
1881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
1891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int i;
1901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
191c83cfc9c9477d0bc0e0a1ba29dfc58e0d42b2fafRalf Baechle	mips_pcibios_init();
192c83cfc9c9477d0bc0e0a1ba29dfc58e0d42b2fafRalf Baechle
1931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* Request I/O space for devices used on the Malta board. */
1941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	for (i = 0; i < ARRAY_SIZE(standard_io_resources); i++)
1951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		request_resource(&ioport_resource, standard_io_resources+i);
1961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/*
1981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * Enable DMA channel 4 (cascade channel) in the PIIX4 south bridge.
1991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 */
2001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	enable_dma(4);
2011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_DMA_COHERENT
203750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev	if (mips_revision_sconid != MIPS_REVISION_SCON_BONITO)
2041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		panic("Hardware DMA cache coherency not supported");
2051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
2061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
207750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev	if (mips_revision_sconid == MIPS_REVISION_SCON_BONITO)
208750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev		bonito_quirks_setup();
209750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev
2101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_BLK_DEV_IDE
211f3a4ce9587cd1e810f31c87ecb89033d5fd269ceDmitri Vorobiev	pci_clock_check();
2121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
213750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev
2141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef CONFIG_BLK_DEV_FD
21549a89efbbbcc178a39555c43bd59a7593c429664Ralf Baechle	fd_activate();
2161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
217750dc31c480e5062b526134f090a029afd7e17fdDmitri Vorobiev
218a382963edc55815b9ec56259c87b1405083acadfDmitri Vorobiev#if defined(CONFIG_VT) && defined(CONFIG_VGA_CONSOLE)
219a382963edc55815b9ec56259c87b1405083acadfDmitri Vorobiev	screen_info_setup();
2201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
22139b8d5254246ac56342b72f812255c8f7a74dca9Ralf Baechle
22239b8d5254246ac56342b72f812255c8f7a74dca9Ralf Baechle	board_be_init = malta_be_init;
22339b8d5254246ac56342b72f812255c8f7a74dca9Ralf Baechle	board_be_handler = malta_be_handler;
2241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
225