xref: /linux/arch/mips/cobalt/setup.c (revision 0d456bad36d42d16022be045c8a53ddbb59ee478)
1 /*
2  * Setup pointers to hardware dependent routines.
3  *
4  * This file is subject to the terms and conditions of the GNU General Public
5  * License.  See the file "COPYING" in the main directory of this archive
6  * for more details.
7  *
8  * Copyright (C) 1996, 1997, 2004, 05 by Ralf Baechle (ralf@linux-mips.org)
9  * Copyright (C) 2001, 2002, 2003 by Liam Davies (ldavies@agile.tv)
10  *
11  */
12 #include <linux/init.h>
13 #include <linux/interrupt.h>
14 #include <linux/io.h>
15 #include <linux/ioport.h>
16 #include <linux/pm.h>
17 
18 #include <asm/bootinfo.h>
19 #include <asm/reboot.h>
20 #include <asm/gt64120.h>
21 
22 #include <cobalt.h>
23 
24 extern void cobalt_machine_restart(char *command);
25 extern void cobalt_machine_halt(void);
26 
27 const char *get_system_type(void)
28 {
29 	switch (cobalt_board_id) {
30 		case COBALT_BRD_ID_QUBE1:
31 			return "Cobalt Qube";
32 		case COBALT_BRD_ID_RAQ1:
33 			return "Cobalt RaQ";
34 		case COBALT_BRD_ID_QUBE2:
35 			return "Cobalt Qube2";
36 		case COBALT_BRD_ID_RAQ2:
37 			return "Cobalt RaQ2";
38 	}
39 	return "MIPS Cobalt";
40 }
41 
42 /*
43  * Cobalt doesn't have PS/2 keyboard/mouse interfaces,
44  * keyboard conntroller is never used.
45  * Also PCI-ISA bridge DMA contoroller is never used.
46  */
47 static struct resource cobalt_reserved_resources[] = {
48 	{	/* dma1 */
49 		.start	= 0x00,
50 		.end	= 0x1f,
51 		.name	= "reserved",
52 		.flags	= IORESOURCE_BUSY | IORESOURCE_IO,
53 	},
54 	{	/* keyboard */
55 		.start	= 0x60,
56 		.end	= 0x6f,
57 		.name	= "reserved",
58 		.flags	= IORESOURCE_BUSY | IORESOURCE_IO,
59 	},
60 	{	/* dma page reg */
61 		.start	= 0x80,
62 		.end	= 0x8f,
63 		.name	= "reserved",
64 		.flags	= IORESOURCE_BUSY | IORESOURCE_IO,
65 	},
66 	{	/* dma2 */
67 		.start	= 0xc0,
68 		.end	= 0xdf,
69 		.name	= "reserved",
70 		.flags	= IORESOURCE_BUSY | IORESOURCE_IO,
71 	},
72 };
73 
74 void __init plat_mem_setup(void)
75 {
76 	int i;
77 
78 	_machine_restart = cobalt_machine_restart;
79 	_machine_halt = cobalt_machine_halt;
80 	pm_power_off = cobalt_machine_halt;
81 
82 	set_io_port_base(CKSEG1ADDR(GT_DEF_PCI0_IO_BASE));
83 
84 	/* I/O port resource */
85 	ioport_resource.end = 0x01ffffff;
86 
87 	/* These resources have been reserved by VIA SuperI/O chip. */
88 	for (i = 0; i < ARRAY_SIZE(cobalt_reserved_resources); i++)
89 		request_resource(&ioport_resource, cobalt_reserved_resources + i);
90 }
91 
92 /*
93  * Prom init. We read our one and only communication with the firmware.
94  * Grab the amount of installed memory.
95  * Better boot loaders (CoLo) pass a command line too :-)
96  */
97 
98 void __init prom_init(void)
99 {
100 	unsigned long memsz;
101 	int argc, i;
102 	char **argv;
103 
104 	memsz = fw_arg0 & 0x7fff0000;
105 	argc = fw_arg0 & 0x0000ffff;
106 	argv = (char **)fw_arg1;
107 
108 	for (i = 1; i < argc; i++) {
109 		strlcat(arcs_cmdline, argv[i], COMMAND_LINE_SIZE);
110 		if (i < (argc - 1))
111 			strlcat(arcs_cmdline, " ", COMMAND_LINE_SIZE);
112 	}
113 
114 	add_memory_region(0x0, memsz, BOOT_MEM_RAM);
115 }
116 
117 void __init prom_free_prom_memory(void)
118 {
119 	/* Nothing to do! */
120 }
121