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