Back to home page

OSCL-LXR

 
 

    


0001 /*
0002  * Setup pointers to hardware-dependent routines.
0003  *
0004  * This file is subject to the terms and conditions of the GNU General Public
0005  * License.  See the file "COPYING" in the main directory of this archive
0006  * for more details.
0007  *
0008  * Copyright (C) 1996, 1997, 1998, 2001, 07, 08 by Ralf Baechle
0009  * Copyright (C) 2001 MIPS Technologies, Inc.
0010  * Copyright (C) 2007 by Thomas Bogendoerfer
0011  */
0012 #include <linux/eisa.h>
0013 #include <linux/init.h>
0014 #include <linux/ioport.h>
0015 #include <linux/console.h>
0016 #include <linux/screen_info.h>
0017 #include <linux/platform_device.h>
0018 #include <linux/serial_8250.h>
0019 #include <linux/dma-mapping.h>
0020 #include <linux/pgtable.h>
0021 
0022 #include <asm/jazz.h>
0023 #include <asm/jazzdma.h>
0024 #include <asm/reboot.h>
0025 #include <asm/tlbmisc.h>
0026 
0027 extern asmlinkage void jazz_handle_int(void);
0028 
0029 extern void jazz_machine_restart(char *command);
0030 
0031 static struct resource jazz_io_resources[] = {
0032     {
0033         .start  = 0x00,
0034         .end    = 0x1f,
0035         .name   = "dma1",
0036         .flags  = IORESOURCE_IO | IORESOURCE_BUSY
0037     }, {
0038         .start  = 0x40,
0039         .end    = 0x5f,
0040         .name   = "timer",
0041         .flags  = IORESOURCE_IO | IORESOURCE_BUSY
0042     }, {
0043         .start  = 0x80,
0044         .end    = 0x8f,
0045         .name   = "dma page reg",
0046         .flags  = IORESOURCE_IO | IORESOURCE_BUSY
0047     }, {
0048         .start  = 0xc0,
0049         .end    = 0xdf,
0050         .name   = "dma2",
0051         .flags  = IORESOURCE_IO | IORESOURCE_BUSY
0052     }
0053 };
0054 
0055 void __init plat_mem_setup(void)
0056 {
0057     int i;
0058 
0059     /* Map 0xe0000000 -> 0x0:800005C0, 0xe0010000 -> 0x1:30000580 */
0060     add_wired_entry(0x02000017, 0x03c00017, 0xe0000000, PM_64K);
0061     /* Map 0xe2000000 -> 0x0:900005C0, 0xe3010000 -> 0x0:910005C0 */
0062     add_wired_entry(0x02400017, 0x02440017, 0xe2000000, PM_16M);
0063     /* Map 0xe4000000 -> 0x0:600005C0, 0xe4100000 -> 400005C0 */
0064     add_wired_entry(0x01800017, 0x01000017, 0xe4000000, PM_4M);
0065 
0066     set_io_port_base(JAZZ_PORT_BASE);
0067 #ifdef CONFIG_EISA
0068     EISA_bus = 1;
0069 #endif
0070 
0071     /* request I/O space for devices used on all i[345]86 PCs */
0072     for (i = 0; i < ARRAY_SIZE(jazz_io_resources); i++)
0073         request_resource(&ioport_resource, jazz_io_resources + i);
0074 
0075     /* The RTC is outside the port address space */
0076 
0077     _machine_restart = jazz_machine_restart;
0078 
0079 #ifdef CONFIG_VT
0080     screen_info = (struct screen_info) {
0081         .orig_video_cols    = 160,
0082         .orig_video_lines   = 64,
0083         .orig_video_points  = 16,
0084     };
0085 #endif
0086 
0087     add_preferred_console("ttyS", 0, "9600");
0088 }
0089 
0090 #ifdef CONFIG_OLIVETTI_M700
0091 #define UART_CLK  1843200
0092 #else
0093 /* Some Jazz machines seem to have an 8MHz crystal clock but I don't know
0094    exactly which ones ... XXX */
0095 #define UART_CLK (8000000 / 16) /* ( 3072000 / 16) */
0096 #endif
0097 
0098 #define MEMPORT(_base, _irq)                \
0099     {                       \
0100         .mapbase    = (_base),      \
0101         .membase    = (void *)(_base),  \
0102         .irq        = (_irq),       \
0103         .uartclk    = UART_CLK,     \
0104         .iotype     = UPIO_MEM,     \
0105         .flags      = UPF_BOOT_AUTOCONF,    \
0106     }
0107 
0108 static struct plat_serial8250_port jazz_serial_data[] = {
0109     MEMPORT(JAZZ_SERIAL1_BASE, JAZZ_SERIAL1_IRQ),
0110     MEMPORT(JAZZ_SERIAL2_BASE, JAZZ_SERIAL2_IRQ),
0111     { },
0112 };
0113 
0114 static struct platform_device jazz_serial8250_device = {
0115     .name           = "serial8250",
0116     .id         = PLAT8250_DEV_PLATFORM,
0117     .dev            = {
0118         .platform_data  = jazz_serial_data,
0119     },
0120 };
0121 
0122 static struct resource jazz_esp_rsrc[] = {
0123     {
0124         .start = JAZZ_SCSI_BASE,
0125         .end   = JAZZ_SCSI_BASE + 31,
0126         .flags = IORESOURCE_MEM
0127     },
0128     {
0129         .start = JAZZ_SCSI_DMA,
0130         .end   = JAZZ_SCSI_DMA,
0131         .flags = IORESOURCE_MEM
0132     },
0133     {
0134         .start = JAZZ_SCSI_IRQ,
0135         .end   = JAZZ_SCSI_IRQ,
0136         .flags = IORESOURCE_IRQ
0137     }
0138 };
0139 
0140 static u64 jazz_esp_dma_mask = DMA_BIT_MASK(32);
0141 
0142 static struct platform_device jazz_esp_pdev = {
0143     .name       = "jazz_esp",
0144     .num_resources  = ARRAY_SIZE(jazz_esp_rsrc),
0145     .resource   = jazz_esp_rsrc,
0146     .dev = {
0147         .dma_mask      = &jazz_esp_dma_mask,
0148         .coherent_dma_mask = DMA_BIT_MASK(32),
0149     }
0150 };
0151 
0152 static struct resource jazz_sonic_rsrc[] = {
0153     {
0154         .start = JAZZ_ETHERNET_BASE,
0155         .end   = JAZZ_ETHERNET_BASE + 0xff,
0156         .flags = IORESOURCE_MEM
0157     },
0158     {
0159         .start = JAZZ_ETHERNET_IRQ,
0160         .end   = JAZZ_ETHERNET_IRQ,
0161         .flags = IORESOURCE_IRQ
0162     }
0163 };
0164 
0165 static u64 jazz_sonic_dma_mask = DMA_BIT_MASK(32);
0166 
0167 static struct platform_device jazz_sonic_pdev = {
0168     .name       = "jazzsonic",
0169     .num_resources  = ARRAY_SIZE(jazz_sonic_rsrc),
0170     .resource   = jazz_sonic_rsrc,
0171     .dev = {
0172         .dma_mask      = &jazz_sonic_dma_mask,
0173         .coherent_dma_mask = DMA_BIT_MASK(32),
0174     }
0175 };
0176 
0177 static struct resource jazz_cmos_rsrc[] = {
0178     {
0179         .start = 0x70,
0180         .end   = 0x71,
0181         .flags = IORESOURCE_IO
0182     },
0183     {
0184         .start = 8,
0185         .end   = 8,
0186         .flags = IORESOURCE_IRQ
0187     }
0188 };
0189 
0190 static struct platform_device jazz_cmos_pdev = {
0191     .name       = "rtc_cmos",
0192     .num_resources  = ARRAY_SIZE(jazz_cmos_rsrc),
0193     .resource   = jazz_cmos_rsrc
0194 };
0195 
0196 static struct platform_device pcspeaker_pdev = {
0197     .name       = "pcspkr",
0198     .id     = -1,
0199 };
0200 
0201 static int __init jazz_setup_devinit(void)
0202 {
0203     platform_device_register(&jazz_serial8250_device);
0204     platform_device_register(&jazz_esp_pdev);
0205     platform_device_register(&jazz_sonic_pdev);
0206     platform_device_register(&jazz_cmos_pdev);
0207     platform_device_register(&pcspeaker_pdev);
0208 
0209     return 0;
0210 }
0211 
0212 device_initcall(jazz_setup_devinit);