Linux Audio

Check our new training course

Real-Time Linux with PREEMPT_RT training

Feb 18-20, 2025
Register
Loading...
v6.2
  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, 97, 98, 2000, 03, 04, 06 Ralf Baechle (ralf@linux-mips.org)
  9 * Copyright (C) 2006,2007 Thomas Bogendoerfer (tsbogend@alpha.franken.de)
 10 */
 11#include <linux/eisa.h>
 12#include <linux/init.h>
 13#include <linux/export.h>
 14#include <linux/console.h>
 15#include <linux/fb.h>
 16#include <linux/screen_info.h>
 17
 18#ifdef CONFIG_FW_ARC
 19#include <asm/fw/arc/types.h>
 20#include <asm/sgialib.h>
 21#endif
 22
 23#ifdef CONFIG_FW_SNIPROM
 24#include <asm/mipsprom.h>
 25#endif
 26
 27#include <asm/bootinfo.h>
 28#include <asm/cpu.h>
 29#include <asm/io.h>
 30#include <asm/reboot.h>
 31#include <asm/sni.h>
 32
 33unsigned int sni_brd_type;
 34EXPORT_SYMBOL(sni_brd_type);
 35
 36extern void sni_machine_restart(char *command);
 37extern void sni_machine_power_off(void);
 38
 39static void __init sni_display_setup(void)
 40{
 41#if defined(CONFIG_VT) && defined(CONFIG_VGA_CONSOLE) && defined(CONFIG_FW_ARC)
 42	struct screen_info *si = &screen_info;
 43	DISPLAY_STATUS *di;
 44
 45	di = ArcGetDisplayStatus(1);
 46
 47	if (di) {
 48		si->orig_x		= di->CursorXPosition;
 49		si->orig_y		= di->CursorYPosition;
 50		si->orig_video_cols	= di->CursorMaxXPosition;
 51		si->orig_video_lines	= di->CursorMaxYPosition;
 52		si->orig_video_isVGA	= VIDEO_TYPE_VGAC;
 53		si->orig_video_points	= 16;
 
 
 54	}
 55#endif
 56}
 57
 58static void __init sni_console_setup(void)
 59{
 60#ifndef CONFIG_FW_ARC
 61	char *ctype;
 62	char *cdev;
 63	char *baud;
 64	int port;
 65	static char options[8] __initdata;
 66
 67	cdev = prom_getenv("console_dev");
 68	if (strncmp(cdev, "tty", 3) == 0) {
 69		ctype = prom_getenv("console");
 70		switch (*ctype) {
 71		default:
 72		case 'l':
 73			port = 0;
 74			baud = prom_getenv("lbaud");
 75			break;
 76		case 'r':
 77			port = 1;
 78			baud = prom_getenv("rbaud");
 79			break;
 80		}
 81		if (baud)
 82			strcpy(options, baud);
 83		if (strncmp(cdev, "tty552", 6) == 0)
 84			add_preferred_console("ttyS", port,
 85					      baud ? options : NULL);
 86		else
 87			add_preferred_console("ttySC", port,
 88					      baud ? options : NULL);
 89	}
 90#endif
 91}
 92
 93#ifdef DEBUG
 94static void __init sni_idprom_dump(void)
 95{
 96	int	i;
 97
 98	pr_debug("SNI IDProm dump:\n");
 99	for (i = 0; i < 256; i++) {
100		if (i%16 == 0)
101			pr_debug("%04x ", i);
102
103		printk("%02x ", *(unsigned char *) (SNI_IDPROM_BASE + i));
104
105		if (i % 16 == 15)
106			printk("\n");
107	}
108}
109#endif
110
111void __init plat_mem_setup(void)
112{
113	int cputype;
114
115	set_io_port_base(SNI_PORT_BASE);
116//	ioport_resource.end = sni_io_resource.end;
117
118	/*
119	 * Setup (E)ISA I/O memory access stuff
120	 */
121#ifdef CONFIG_EISA
122	EISA_bus = 1;
123#endif
124
125	sni_brd_type = *(unsigned char *)SNI_IDPROM_BRDTYPE;
126	cputype = *(unsigned char *)SNI_IDPROM_CPUTYPE;
127	switch (sni_brd_type) {
128	case SNI_BRD_TOWER_OASIC:
129		switch (cputype) {
130		case SNI_CPU_M8030:
131			system_type = "RM400-330";
132			break;
133		case SNI_CPU_M8031:
134			system_type = "RM400-430";
135			break;
136		case SNI_CPU_M8037:
137			system_type = "RM400-530";
138			break;
139		case SNI_CPU_M8034:
140			system_type = "RM400-730";
141			break;
142		default:
143			system_type = "RM400-xxx";
144			break;
145		}
146		break;
147	case SNI_BRD_MINITOWER:
148		switch (cputype) {
149		case SNI_CPU_M8021:
150		case SNI_CPU_M8043:
151			system_type = "RM400-120";
152			break;
153		case SNI_CPU_M8040:
154			system_type = "RM400-220";
155			break;
156		case SNI_CPU_M8053:
157			system_type = "RM400-225";
158			break;
159		case SNI_CPU_M8050:
160			system_type = "RM400-420";
161			break;
162		default:
163			system_type = "RM400-xxx";
164			break;
165		}
166		break;
167	case SNI_BRD_PCI_TOWER:
168		system_type = "RM400-Cxx";
169		break;
170	case SNI_BRD_RM200:
171		system_type = "RM200-xxx";
172		break;
173	case SNI_BRD_PCI_MTOWER:
174		system_type = "RM300-Cxx";
175		break;
176	case SNI_BRD_PCI_DESKTOP:
177		switch (read_c0_prid() & PRID_IMP_MASK) {
178		case PRID_IMP_R4600:
179		case PRID_IMP_R4700:
180			system_type = "RM200-C20";
181			break;
182		case PRID_IMP_R5000:
183			system_type = "RM200-C40";
184			break;
185		default:
186			system_type = "RM200-Cxx";
187			break;
188		}
189		break;
190	case SNI_BRD_PCI_TOWER_CPLUS:
191		system_type = "RM400-Exx";
192		break;
193	case SNI_BRD_PCI_MTOWER_CPLUS:
194		system_type = "RM300-Exx";
195		break;
196	}
197	pr_debug("Found SNI brdtype %02x name %s\n", sni_brd_type, system_type);
198
199#ifdef DEBUG
200	sni_idprom_dump();
201#endif
202
203	switch (sni_brd_type) {
204	case SNI_BRD_10:
205	case SNI_BRD_10NEW:
206	case SNI_BRD_TOWER_OASIC:
207	case SNI_BRD_MINITOWER:
208		sni_a20r_init();
209		break;
210
211	case SNI_BRD_PCI_TOWER:
212	case SNI_BRD_PCI_TOWER_CPLUS:
213		sni_pcit_init();
214		break;
215
216	case SNI_BRD_RM200:
217		sni_rm200_init();
218		break;
219
220	case SNI_BRD_PCI_MTOWER:
221	case SNI_BRD_PCI_DESKTOP:
222	case SNI_BRD_PCI_MTOWER_CPLUS:
223		sni_pcimt_init();
224		break;
225	}
226
227	_machine_restart = sni_machine_restart;
228	pm_power_off = sni_machine_power_off;
229
230	sni_display_setup();
231	sni_console_setup();
232}
233
234#ifdef CONFIG_PCI
235
236#include <linux/pci.h>
237#include <video/vga.h>
238#include <video/cirrus.h>
239
240static void quirk_cirrus_ram_size(struct pci_dev *dev)
241{
242	u16 cmd;
243
244	/*
245	 * firmware doesn't set the ram size correct, so we
246	 * need to do it here, otherwise we get screen corruption
247	 * on older Cirrus chips
248	 */
249	pci_read_config_word(dev, PCI_COMMAND, &cmd);
250	if ((cmd & (PCI_COMMAND_IO|PCI_COMMAND_MEMORY))
251		== (PCI_COMMAND_IO|PCI_COMMAND_MEMORY)) {
252		vga_wseq(NULL, CL_SEQR6, 0x12); /* unlock all extension registers */
253		vga_wseq(NULL, CL_SEQRF, 0x18);
254	}
255}
256
257DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CIRRUS, PCI_DEVICE_ID_CIRRUS_5434_8,
258			quirk_cirrus_ram_size);
259DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CIRRUS, PCI_DEVICE_ID_CIRRUS_5436,
260			quirk_cirrus_ram_size);
261DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CIRRUS, PCI_DEVICE_ID_CIRRUS_5446,
262			quirk_cirrus_ram_size);
263#endif
v6.13.7
  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, 97, 98, 2000, 03, 04, 06 Ralf Baechle (ralf@linux-mips.org)
  9 * Copyright (C) 2006,2007 Thomas Bogendoerfer (tsbogend@alpha.franken.de)
 10 */
 11#include <linux/eisa.h>
 12#include <linux/init.h>
 13#include <linux/export.h>
 14#include <linux/console.h>
 15#include <linux/fb.h>
 16#include <linux/screen_info.h>
 17
 18#ifdef CONFIG_FW_ARC
 19#include <asm/fw/arc/types.h>
 20#include <asm/sgialib.h>
 21#endif
 22
 23#ifdef CONFIG_FW_SNIPROM
 24#include <asm/mipsprom.h>
 25#endif
 26
 27#include <asm/bootinfo.h>
 28#include <asm/cpu.h>
 29#include <asm/io.h>
 30#include <asm/reboot.h>
 31#include <asm/sni.h>
 32
 33unsigned int sni_brd_type;
 34EXPORT_SYMBOL(sni_brd_type);
 35
 36extern void sni_machine_restart(char *command);
 37extern void sni_machine_power_off(void);
 38
 39static void __init sni_display_setup(void)
 40{
 41#if defined(CONFIG_VGA_CONSOLE) && defined(CONFIG_FW_ARC)
 42	static struct screen_info si;
 43	DISPLAY_STATUS *di;
 44
 45	di = ArcGetDisplayStatus(1);
 46
 47	if (di) {
 48		si.orig_x		= di->CursorXPosition;
 49		si.orig_y		= di->CursorYPosition;
 50		si.orig_video_cols	= di->CursorMaxXPosition;
 51		si.orig_video_lines	= di->CursorMaxYPosition;
 52		si.orig_video_isVGA	= VIDEO_TYPE_VGAC;
 53		si.orig_video_points	= 16;
 54
 55		vgacon_register_screen(&si);
 56	}
 57#endif
 58}
 59
 60static void __init sni_console_setup(void)
 61{
 62#ifndef CONFIG_FW_ARC
 63	char *ctype;
 64	char *cdev;
 65	char *baud;
 66	int port;
 67	static char options[8] __initdata;
 68
 69	cdev = prom_getenv("console_dev");
 70	if (strncmp(cdev, "tty", 3) == 0) {
 71		ctype = prom_getenv("console");
 72		switch (*ctype) {
 73		default:
 74		case 'l':
 75			port = 0;
 76			baud = prom_getenv("lbaud");
 77			break;
 78		case 'r':
 79			port = 1;
 80			baud = prom_getenv("rbaud");
 81			break;
 82		}
 83		if (baud)
 84			strcpy(options, baud);
 85		if (strncmp(cdev, "tty552", 6) == 0)
 86			add_preferred_console("ttyS", port,
 87					      baud ? options : NULL);
 88		else
 89			add_preferred_console("ttySC", port,
 90					      baud ? options : NULL);
 91	}
 92#endif
 93}
 94
 95#ifdef DEBUG
 96static void __init sni_idprom_dump(void)
 97{
 98	int	i;
 99
100	pr_debug("SNI IDProm dump:\n");
101	for (i = 0; i < 256; i++) {
102		if (i%16 == 0)
103			pr_debug("%04x ", i);
104
105		printk("%02x ", *(unsigned char *) (SNI_IDPROM_BASE + i));
106
107		if (i % 16 == 15)
108			printk("\n");
109	}
110}
111#endif
112
113void __init plat_mem_setup(void)
114{
115	int cputype;
116
117	set_io_port_base(SNI_PORT_BASE);
118//	ioport_resource.end = sni_io_resource.end;
119
120	/*
121	 * Setup (E)ISA I/O memory access stuff
122	 */
123#ifdef CONFIG_EISA
124	EISA_bus = 1;
125#endif
126
127	sni_brd_type = *(unsigned char *)SNI_IDPROM_BRDTYPE;
128	cputype = *(unsigned char *)SNI_IDPROM_CPUTYPE;
129	switch (sni_brd_type) {
130	case SNI_BRD_TOWER_OASIC:
131		switch (cputype) {
132		case SNI_CPU_M8030:
133			system_type = "RM400-330";
134			break;
135		case SNI_CPU_M8031:
136			system_type = "RM400-430";
137			break;
138		case SNI_CPU_M8037:
139			system_type = "RM400-530";
140			break;
141		case SNI_CPU_M8034:
142			system_type = "RM400-730";
143			break;
144		default:
145			system_type = "RM400-xxx";
146			break;
147		}
148		break;
149	case SNI_BRD_MINITOWER:
150		switch (cputype) {
151		case SNI_CPU_M8021:
152		case SNI_CPU_M8043:
153			system_type = "RM400-120";
154			break;
155		case SNI_CPU_M8040:
156			system_type = "RM400-220";
157			break;
158		case SNI_CPU_M8053:
159			system_type = "RM400-225";
160			break;
161		case SNI_CPU_M8050:
162			system_type = "RM400-420";
163			break;
164		default:
165			system_type = "RM400-xxx";
166			break;
167		}
168		break;
169	case SNI_BRD_PCI_TOWER:
170		system_type = "RM400-Cxx";
171		break;
172	case SNI_BRD_RM200:
173		system_type = "RM200-xxx";
174		break;
175	case SNI_BRD_PCI_MTOWER:
176		system_type = "RM300-Cxx";
177		break;
178	case SNI_BRD_PCI_DESKTOP:
179		switch (read_c0_prid() & PRID_IMP_MASK) {
180		case PRID_IMP_R4600:
181		case PRID_IMP_R4700:
182			system_type = "RM200-C20";
183			break;
184		case PRID_IMP_R5000:
185			system_type = "RM200-C40";
186			break;
187		default:
188			system_type = "RM200-Cxx";
189			break;
190		}
191		break;
192	case SNI_BRD_PCI_TOWER_CPLUS:
193		system_type = "RM400-Exx";
194		break;
195	case SNI_BRD_PCI_MTOWER_CPLUS:
196		system_type = "RM300-Exx";
197		break;
198	}
199	pr_debug("Found SNI brdtype %02x name %s\n", sni_brd_type, system_type);
200
201#ifdef DEBUG
202	sni_idprom_dump();
203#endif
204
205	switch (sni_brd_type) {
206	case SNI_BRD_10:
207	case SNI_BRD_10NEW:
208	case SNI_BRD_TOWER_OASIC:
209	case SNI_BRD_MINITOWER:
210		sni_a20r_init();
211		break;
212
213	case SNI_BRD_PCI_TOWER:
214	case SNI_BRD_PCI_TOWER_CPLUS:
215		sni_pcit_init();
216		break;
217
218	case SNI_BRD_RM200:
219		sni_rm200_init();
220		break;
221
222	case SNI_BRD_PCI_MTOWER:
223	case SNI_BRD_PCI_DESKTOP:
224	case SNI_BRD_PCI_MTOWER_CPLUS:
225		sni_pcimt_init();
226		break;
227	}
228
229	_machine_restart = sni_machine_restart;
230	pm_power_off = sni_machine_power_off;
231
232	sni_display_setup();
233	sni_console_setup();
234}
235
236#ifdef CONFIG_PCI
237
238#include <linux/pci.h>
239#include <video/vga.h>
240#include <video/cirrus.h>
241
242static void quirk_cirrus_ram_size(struct pci_dev *dev)
243{
244	u16 cmd;
245
246	/*
247	 * firmware doesn't set the ram size correct, so we
248	 * need to do it here, otherwise we get screen corruption
249	 * on older Cirrus chips
250	 */
251	pci_read_config_word(dev, PCI_COMMAND, &cmd);
252	if ((cmd & (PCI_COMMAND_IO|PCI_COMMAND_MEMORY))
253		== (PCI_COMMAND_IO|PCI_COMMAND_MEMORY)) {
254		vga_wseq(NULL, CL_SEQR6, 0x12); /* unlock all extension registers */
255		vga_wseq(NULL, CL_SEQRF, 0x18);
256	}
257}
258
259DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CIRRUS, PCI_DEVICE_ID_CIRRUS_5434_8,
260			quirk_cirrus_ram_size);
261DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CIRRUS, PCI_DEVICE_ID_CIRRUS_5436,
262			quirk_cirrus_ram_size);
263DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CIRRUS, PCI_DEVICE_ID_CIRRUS_5446,
264			quirk_cirrus_ram_size);
265#endif