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