linux/arch/mips/jazz/setup.c
<<
>>
Prefs
   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, 1998, 2001, 07, 08 by Ralf Baechle
   9 * Copyright (C) 2001 MIPS Technologies, Inc.
  10 * Copyright (C) 2007 by Thomas Bogendoerfer
  11 */
  12#include <linux/eisa.h>
  13#include <linux/init.h>
  14#include <linux/ioport.h>
  15#include <linux/console.h>
  16#include <linux/screen_info.h>
  17#include <linux/platform_device.h>
  18#include <linux/serial_8250.h>
  19
  20#include <asm/jazz.h>
  21#include <asm/jazzdma.h>
  22#include <asm/reboot.h>
  23#include <asm/pgtable.h>
  24#include <asm/tlbmisc.h>
  25
  26extern asmlinkage void jazz_handle_int(void);
  27
  28extern void jazz_machine_restart(char *command);
  29
  30static struct resource jazz_io_resources[] = {
  31        {
  32                .start  = 0x00,
  33                .end    = 0x1f,
  34                .name   = "dma1",
  35                .flags  = IORESOURCE_BUSY
  36        }, {
  37                .start  = 0x40,
  38                .end    = 0x5f,
  39                .name   = "timer",
  40                .flags  = IORESOURCE_BUSY
  41        }, {
  42                .start  = 0x80,
  43                .end    = 0x8f,
  44                .name   = "dma page reg",
  45                .flags  = IORESOURCE_BUSY
  46        }, {
  47                .start  = 0xc0,
  48                .end    = 0xdf,
  49                .name   = "dma2",
  50                .flags  = IORESOURCE_BUSY
  51        }
  52};
  53
  54void __init plat_mem_setup(void)
  55{
  56        int i;
  57
  58        /* Map 0xe0000000 -> 0x0:800005C0, 0xe0010000 -> 0x1:30000580 */
  59        add_wired_entry(0x02000017, 0x03c00017, 0xe0000000, PM_64K);
  60        /* Map 0xe2000000 -> 0x0:900005C0, 0xe3010000 -> 0x0:910005C0 */
  61        add_wired_entry(0x02400017, 0x02440017, 0xe2000000, PM_16M);
  62        /* Map 0xe4000000 -> 0x0:600005C0, 0xe4100000 -> 400005C0 */
  63        add_wired_entry(0x01800017, 0x01000017, 0xe4000000, PM_4M);
  64
  65        set_io_port_base(JAZZ_PORT_BASE);
  66#ifdef CONFIG_EISA
  67        EISA_bus = 1;
  68#endif
  69
  70        /* request I/O space for devices used on all i[345]86 PCs */
  71        for (i = 0; i < ARRAY_SIZE(jazz_io_resources); i++)
  72                request_resource(&ioport_resource, jazz_io_resources + i);
  73
  74        /* The RTC is outside the port address space */
  75
  76        _machine_restart = jazz_machine_restart;
  77
  78#ifdef CONFIG_VT
  79        screen_info = (struct screen_info) {
  80                .orig_video_cols        = 160,
  81                .orig_video_lines       = 64,
  82                .orig_video_points      = 16,
  83        };
  84#endif
  85
  86        add_preferred_console("ttyS", 0, "9600");
  87}
  88
  89#ifdef CONFIG_OLIVETTI_M700
  90#define UART_CLK  1843200
  91#else
  92/* Some Jazz machines seem to have an 8MHz crystal clock but I don't know
  93   exactly which ones ... XXX */
  94#define UART_CLK (8000000 / 16) /* ( 3072000 / 16) */
  95#endif
  96
  97#define MEMPORT(_base, _irq)                            \
  98        {                                               \
  99                .mapbase        = (_base),              \
 100                .membase        = (void *)(_base),      \
 101                .irq            = (_irq),               \
 102                .uartclk        = UART_CLK,             \
 103                .iotype         = UPIO_MEM,             \
 104                .flags          = UPF_BOOT_AUTOCONF,    \
 105        }
 106
 107static struct plat_serial8250_port jazz_serial_data[] = {
 108        MEMPORT(JAZZ_SERIAL1_BASE, JAZZ_SERIAL1_IRQ),
 109        MEMPORT(JAZZ_SERIAL2_BASE, JAZZ_SERIAL2_IRQ),
 110        { },
 111};
 112
 113static struct platform_device jazz_serial8250_device = {
 114        .name                   = "serial8250",
 115        .id                     = PLAT8250_DEV_PLATFORM,
 116        .dev                    = {
 117                .platform_data  = jazz_serial_data,
 118        },
 119};
 120
 121static struct resource jazz_esp_rsrc[] = {
 122        {
 123                .start = JAZZ_SCSI_BASE,
 124                .end   = JAZZ_SCSI_BASE + 31,
 125                .flags = IORESOURCE_MEM
 126        },
 127        {
 128                .start = JAZZ_SCSI_DMA,
 129                .end   = JAZZ_SCSI_DMA,
 130                .flags = IORESOURCE_MEM
 131        },
 132        {
 133                .start = JAZZ_SCSI_IRQ,
 134                .end   = JAZZ_SCSI_IRQ,
 135                .flags = IORESOURCE_IRQ
 136        }
 137};
 138
 139static struct platform_device jazz_esp_pdev = {
 140        .name           = "jazz_esp",
 141        .num_resources  = ARRAY_SIZE(jazz_esp_rsrc),
 142        .resource       = jazz_esp_rsrc
 143};
 144
 145static struct resource jazz_sonic_rsrc[] = {
 146        {
 147                .start = JAZZ_ETHERNET_BASE,
 148                .end   = JAZZ_ETHERNET_BASE + 0xff,
 149                .flags = IORESOURCE_MEM
 150        },
 151        {
 152                .start = JAZZ_ETHERNET_IRQ,
 153                .end   = JAZZ_ETHERNET_IRQ,
 154                .flags = IORESOURCE_IRQ
 155        }
 156};
 157
 158static struct platform_device jazz_sonic_pdev = {
 159        .name           = "jazzsonic",
 160        .num_resources  = ARRAY_SIZE(jazz_sonic_rsrc),
 161        .resource       = jazz_sonic_rsrc
 162};
 163
 164static struct resource jazz_cmos_rsrc[] = {
 165        {
 166                .start = 0x70,
 167                .end   = 0x71,
 168                .flags = IORESOURCE_IO
 169        },
 170        {
 171                .start = 8,
 172                .end   = 8,
 173                .flags = IORESOURCE_IRQ
 174        }
 175};
 176
 177static struct platform_device jazz_cmos_pdev = {
 178        .name           = "rtc_cmos",
 179        .num_resources  = ARRAY_SIZE(jazz_cmos_rsrc),
 180        .resource       = jazz_cmos_rsrc
 181};
 182
 183static struct platform_device pcspeaker_pdev = {
 184        .name           = "pcspkr",
 185        .id             = -1,
 186};
 187
 188static int __init jazz_setup_devinit(void)
 189{
 190        platform_device_register(&jazz_serial8250_device);
 191        platform_device_register(&jazz_esp_pdev);
 192        platform_device_register(&jazz_sonic_pdev);
 193        platform_device_register(&jazz_cmos_pdev);
 194        platform_device_register(&pcspeaker_pdev);
 195
 196        return 0;
 197}
 198
 199device_initcall(jazz_setup_devinit);
 200