xref: /linux/arch/mips/jazz/setup.c (revision 8617d7d6298f54dfef4038281863270b5864fe83)
11da177e4SLinus Torvalds /*
21da177e4SLinus Torvalds  * Setup pointers to hardware-dependent routines.
31da177e4SLinus Torvalds  *
41da177e4SLinus Torvalds  * This file is subject to the terms and conditions of the GNU General Public
51da177e4SLinus Torvalds  * License.  See the file "COPYING" in the main directory of this archive
61da177e4SLinus Torvalds  * for more details.
71da177e4SLinus Torvalds  *
889ef3e85SRalf Baechle  * Copyright (C) 1996, 1997, 1998, 2001, 07, 08 by Ralf Baechle
91da177e4SLinus Torvalds  * Copyright (C) 2001 MIPS Technologies, Inc.
10ea202c63SThomas Bogendoerfer  * Copyright (C) 2007 by Thomas Bogendoerfer
111da177e4SLinus Torvalds  */
121da177e4SLinus Torvalds #include <linux/eisa.h>
131da177e4SLinus Torvalds #include <linux/init.h>
141da177e4SLinus Torvalds #include <linux/ioport.h>
151da177e4SLinus Torvalds #include <linux/console.h>
16ea202c63SThomas Bogendoerfer #include <linux/platform_device.h>
17ea202c63SThomas Bogendoerfer #include <linux/serial_8250.h>
18b5d69129SThomas Bogendoerfer #include <linux/dma-mapping.h>
19*65fddcfcSMike Rapoport #include <linux/pgtable.h>
20fcdb27adSRalf Baechle 
211da177e4SLinus Torvalds #include <asm/jazz.h>
221da177e4SLinus Torvalds #include <asm/jazzdma.h>
231da177e4SLinus Torvalds #include <asm/reboot.h>
243d18c983SRalf Baechle #include <asm/tlbmisc.h>
251da177e4SLinus Torvalds 
261da177e4SLinus Torvalds extern void jazz_machine_restart(char *command);
271da177e4SLinus Torvalds 
281da177e4SLinus Torvalds static struct resource jazz_io_resources[] = {
292cf69e76SRalf Baechle 	{
302cf69e76SRalf Baechle 		.start	= 0x00,
312cf69e76SRalf Baechle 		.end	= 0x1f,
322cf69e76SRalf Baechle 		.name	= "dma1",
33ead1505aSBjorn Helgaas 		.flags	= IORESOURCE_IO | IORESOURCE_BUSY
342cf69e76SRalf Baechle 	}, {
352cf69e76SRalf Baechle 		.start	= 0x40,
362cf69e76SRalf Baechle 		.end	= 0x5f,
372cf69e76SRalf Baechle 		.name	= "timer",
38ead1505aSBjorn Helgaas 		.flags	= IORESOURCE_IO | IORESOURCE_BUSY
392cf69e76SRalf Baechle 	}, {
402cf69e76SRalf Baechle 		.start	= 0x80,
412cf69e76SRalf Baechle 		.end	= 0x8f,
422cf69e76SRalf Baechle 		.name	= "dma page reg",
43ead1505aSBjorn Helgaas 		.flags	= IORESOURCE_IO | IORESOURCE_BUSY
442cf69e76SRalf Baechle 	}, {
452cf69e76SRalf Baechle 		.start	= 0xc0,
462cf69e76SRalf Baechle 		.end	= 0xdf,
472cf69e76SRalf Baechle 		.name	= "dma2",
48ead1505aSBjorn Helgaas 		.flags	= IORESOURCE_IO | IORESOURCE_BUSY
492cf69e76SRalf Baechle 	}
501da177e4SLinus Torvalds };
511da177e4SLinus Torvalds 
plat_mem_setup(void)522925aba4SRalf Baechle void __init plat_mem_setup(void)
531da177e4SLinus Torvalds {
541da177e4SLinus Torvalds 	int i;
551da177e4SLinus Torvalds 
561da177e4SLinus Torvalds 	/* Map 0xe0000000 -> 0x0:800005C0, 0xe0010000 -> 0x1:30000580 */
571da177e4SLinus Torvalds 	add_wired_entry(0x02000017, 0x03c00017, 0xe0000000, PM_64K);
581da177e4SLinus Torvalds 	/* Map 0xe2000000 -> 0x0:900005C0, 0xe3010000 -> 0x0:910005C0 */
591da177e4SLinus Torvalds 	add_wired_entry(0x02400017, 0x02440017, 0xe2000000, PM_16M);
601da177e4SLinus Torvalds 	/* Map 0xe4000000 -> 0x0:600005C0, 0xe4100000 -> 400005C0 */
611da177e4SLinus Torvalds 	add_wired_entry(0x01800017, 0x01000017, 0xe4000000, PM_4M);
621da177e4SLinus Torvalds 
631da177e4SLinus Torvalds 	set_io_port_base(JAZZ_PORT_BASE);
641da177e4SLinus Torvalds #ifdef CONFIG_EISA
651da177e4SLinus Torvalds 	EISA_bus = 1;
661da177e4SLinus Torvalds #endif
671da177e4SLinus Torvalds 
681da177e4SLinus Torvalds 	/* request I/O space for devices used on all i[345]86 PCs */
691da177e4SLinus Torvalds 	for (i = 0; i < ARRAY_SIZE(jazz_io_resources); i++)
701da177e4SLinus Torvalds 		request_resource(&ioport_resource, jazz_io_resources + i);
711da177e4SLinus Torvalds 
721da177e4SLinus Torvalds 	/* The RTC is outside the port address space */
731da177e4SLinus Torvalds 
741da177e4SLinus Torvalds 	_machine_restart = jazz_machine_restart;
751da177e4SLinus Torvalds 
76ea202c63SThomas Bogendoerfer 	add_preferred_console("ttyS", 0, "9600");
771da177e4SLinus Torvalds }
78ea202c63SThomas Bogendoerfer 
79ea202c63SThomas Bogendoerfer #ifdef CONFIG_OLIVETTI_M700
80ea202c63SThomas Bogendoerfer #define UART_CLK  1843200
81ea202c63SThomas Bogendoerfer #else
82ea202c63SThomas Bogendoerfer /* Some Jazz machines seem to have an 8MHz crystal clock but I don't know
83ea202c63SThomas Bogendoerfer    exactly which ones ... XXX */
84ea202c63SThomas Bogendoerfer #define UART_CLK (8000000 / 16) /* ( 3072000 / 16) */
85ea202c63SThomas Bogendoerfer #endif
86ea202c63SThomas Bogendoerfer 
87ea202c63SThomas Bogendoerfer #define MEMPORT(_base, _irq)				\
88ea202c63SThomas Bogendoerfer 	{						\
89ea202c63SThomas Bogendoerfer 		.mapbase	= (_base),		\
90ea202c63SThomas Bogendoerfer 		.membase	= (void *)(_base),	\
91ea202c63SThomas Bogendoerfer 		.irq		= (_irq),		\
92ea202c63SThomas Bogendoerfer 		.uartclk	= UART_CLK,		\
93ea202c63SThomas Bogendoerfer 		.iotype		= UPIO_MEM,		\
94ea202c63SThomas Bogendoerfer 		.flags		= UPF_BOOT_AUTOCONF,	\
95ea202c63SThomas Bogendoerfer 	}
96ea202c63SThomas Bogendoerfer 
97ea202c63SThomas Bogendoerfer static struct plat_serial8250_port jazz_serial_data[] = {
98ea202c63SThomas Bogendoerfer 	MEMPORT(JAZZ_SERIAL1_BASE, JAZZ_SERIAL1_IRQ),
99ea202c63SThomas Bogendoerfer 	MEMPORT(JAZZ_SERIAL2_BASE, JAZZ_SERIAL2_IRQ),
100ea202c63SThomas Bogendoerfer 	{ },
101ea202c63SThomas Bogendoerfer };
102ea202c63SThomas Bogendoerfer 
103ea202c63SThomas Bogendoerfer static struct platform_device jazz_serial8250_device = {
104ea202c63SThomas Bogendoerfer 	.name			= "serial8250",
105ea202c63SThomas Bogendoerfer 	.id			= PLAT8250_DEV_PLATFORM,
106ea202c63SThomas Bogendoerfer 	.dev			= {
107ea202c63SThomas Bogendoerfer 		.platform_data	= jazz_serial_data,
108ea202c63SThomas Bogendoerfer 	},
109ea202c63SThomas Bogendoerfer };
110ea202c63SThomas Bogendoerfer 
111ea202c63SThomas Bogendoerfer static struct resource jazz_esp_rsrc[] = {
112ea202c63SThomas Bogendoerfer 	{
113ea202c63SThomas Bogendoerfer 		.start = JAZZ_SCSI_BASE,
114ea202c63SThomas Bogendoerfer 		.end   = JAZZ_SCSI_BASE + 31,
115ea202c63SThomas Bogendoerfer 		.flags = IORESOURCE_MEM
116ea202c63SThomas Bogendoerfer 	},
117ea202c63SThomas Bogendoerfer 	{
118ea202c63SThomas Bogendoerfer 		.start = JAZZ_SCSI_DMA,
119ea202c63SThomas Bogendoerfer 		.end   = JAZZ_SCSI_DMA,
120ea202c63SThomas Bogendoerfer 		.flags = IORESOURCE_MEM
121ea202c63SThomas Bogendoerfer 	},
122ea202c63SThomas Bogendoerfer 	{
123ea202c63SThomas Bogendoerfer 		.start = JAZZ_SCSI_IRQ,
124ea202c63SThomas Bogendoerfer 		.end   = JAZZ_SCSI_IRQ,
125ea202c63SThomas Bogendoerfer 		.flags = IORESOURCE_IRQ
126ea202c63SThomas Bogendoerfer 	}
127ea202c63SThomas Bogendoerfer };
128ea202c63SThomas Bogendoerfer 
129b5d69129SThomas Bogendoerfer static u64 jazz_esp_dma_mask = DMA_BIT_MASK(32);
130b5d69129SThomas Bogendoerfer 
131ea202c63SThomas Bogendoerfer static struct platform_device jazz_esp_pdev = {
132ea202c63SThomas Bogendoerfer 	.name		= "jazz_esp",
133ea202c63SThomas Bogendoerfer 	.num_resources	= ARRAY_SIZE(jazz_esp_rsrc),
134b5d69129SThomas Bogendoerfer 	.resource	= jazz_esp_rsrc,
135b5d69129SThomas Bogendoerfer 	.dev = {
136b5d69129SThomas Bogendoerfer 		.dma_mask	   = &jazz_esp_dma_mask,
137b5d69129SThomas Bogendoerfer 		.coherent_dma_mask = DMA_BIT_MASK(32),
138b5d69129SThomas Bogendoerfer 	}
139ea202c63SThomas Bogendoerfer };
140ea202c63SThomas Bogendoerfer 
141ea202c63SThomas Bogendoerfer static struct resource jazz_sonic_rsrc[] = {
142ea202c63SThomas Bogendoerfer 	{
143ea202c63SThomas Bogendoerfer 		.start = JAZZ_ETHERNET_BASE,
144ea202c63SThomas Bogendoerfer 		.end   = JAZZ_ETHERNET_BASE + 0xff,
145ea202c63SThomas Bogendoerfer 		.flags = IORESOURCE_MEM
146ea202c63SThomas Bogendoerfer 	},
147ea202c63SThomas Bogendoerfer 	{
148ea202c63SThomas Bogendoerfer 		.start = JAZZ_ETHERNET_IRQ,
149ea202c63SThomas Bogendoerfer 		.end   = JAZZ_ETHERNET_IRQ,
150ea202c63SThomas Bogendoerfer 		.flags = IORESOURCE_IRQ
151ea202c63SThomas Bogendoerfer 	}
152ea202c63SThomas Bogendoerfer };
153ea202c63SThomas Bogendoerfer 
154b5d69129SThomas Bogendoerfer static u64 jazz_sonic_dma_mask = DMA_BIT_MASK(32);
155b5d69129SThomas Bogendoerfer 
156ea202c63SThomas Bogendoerfer static struct platform_device jazz_sonic_pdev = {
157ea202c63SThomas Bogendoerfer 	.name		= "jazzsonic",
158ea202c63SThomas Bogendoerfer 	.num_resources	= ARRAY_SIZE(jazz_sonic_rsrc),
159b5d69129SThomas Bogendoerfer 	.resource	= jazz_sonic_rsrc,
160b5d69129SThomas Bogendoerfer 	.dev = {
161b5d69129SThomas Bogendoerfer 		.dma_mask	   = &jazz_sonic_dma_mask,
162b5d69129SThomas Bogendoerfer 		.coherent_dma_mask = DMA_BIT_MASK(32),
163b5d69129SThomas Bogendoerfer 	}
164ea202c63SThomas Bogendoerfer };
165ea202c63SThomas Bogendoerfer 
166ea202c63SThomas Bogendoerfer static struct resource jazz_cmos_rsrc[] = {
167ea202c63SThomas Bogendoerfer 	{
168ea202c63SThomas Bogendoerfer 		.start = 0x70,
169ea202c63SThomas Bogendoerfer 		.end   = 0x71,
170ea202c63SThomas Bogendoerfer 		.flags = IORESOURCE_IO
171ea202c63SThomas Bogendoerfer 	},
172ea202c63SThomas Bogendoerfer 	{
173ea202c63SThomas Bogendoerfer 		.start = 8,
174ea202c63SThomas Bogendoerfer 		.end   = 8,
175ea202c63SThomas Bogendoerfer 		.flags = IORESOURCE_IRQ
176ea202c63SThomas Bogendoerfer 	}
177ea202c63SThomas Bogendoerfer };
178ea202c63SThomas Bogendoerfer 
179ea202c63SThomas Bogendoerfer static struct platform_device jazz_cmos_pdev = {
180ea202c63SThomas Bogendoerfer 	.name		= "rtc_cmos",
181ea202c63SThomas Bogendoerfer 	.num_resources	= ARRAY_SIZE(jazz_cmos_rsrc),
182ea202c63SThomas Bogendoerfer 	.resource	= jazz_cmos_rsrc
183ea202c63SThomas Bogendoerfer };
184ea202c63SThomas Bogendoerfer 
18519388fb0SRalf Baechle static struct platform_device pcspeaker_pdev = {
18619388fb0SRalf Baechle 	.name		= "pcspkr",
18719388fb0SRalf Baechle 	.id		= -1,
18819388fb0SRalf Baechle };
18919388fb0SRalf Baechle 
jazz_setup_devinit(void)190ea202c63SThomas Bogendoerfer static int __init jazz_setup_devinit(void)
191ea202c63SThomas Bogendoerfer {
192ea202c63SThomas Bogendoerfer 	platform_device_register(&jazz_serial8250_device);
193ea202c63SThomas Bogendoerfer 	platform_device_register(&jazz_esp_pdev);
194ea202c63SThomas Bogendoerfer 	platform_device_register(&jazz_sonic_pdev);
195ea202c63SThomas Bogendoerfer 	platform_device_register(&jazz_cmos_pdev);
19619388fb0SRalf Baechle 	platform_device_register(&pcspeaker_pdev);
19719388fb0SRalf Baechle 
198ea202c63SThomas Bogendoerfer 	return 0;
199ea202c63SThomas Bogendoerfer }
200ea202c63SThomas Bogendoerfer 
201ea202c63SThomas Bogendoerfer device_initcall(jazz_setup_devinit);
202