root/arch/mips/sni/setup.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. sni_display_setup
  2. sni_console_setup
  3. sni_idprom_dump
  4. plat_mem_setup
  5. quirk_cirrus_ram_size

   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, 97, 98, 2000, 03, 04, 06 Ralf Baechle (ralf@linux-mips.org)
   9  * Copyright (C) 2006,2007 Thomas Bogendoerfer (tsbogend@alpha.franken.de)
  10  */
  11 #include <linux/eisa.h>
  12 #include <linux/init.h>
  13 #include <linux/export.h>
  14 #include <linux/console.h>
  15 #include <linux/fb.h>
  16 #include <linux/screen_info.h>
  17 
  18 #ifdef CONFIG_FW_ARC
  19 #include <asm/fw/arc/types.h>
  20 #include <asm/sgialib.h>
  21 #endif
  22 
  23 #ifdef CONFIG_FW_SNIPROM
  24 #include <asm/mipsprom.h>
  25 #endif
  26 
  27 #include <asm/bootinfo.h>
  28 #include <asm/cpu.h>
  29 #include <asm/io.h>
  30 #include <asm/reboot.h>
  31 #include <asm/sni.h>
  32 
  33 unsigned int sni_brd_type;
  34 EXPORT_SYMBOL(sni_brd_type);
  35 
  36 extern void sni_machine_restart(char *command);
  37 extern void sni_machine_power_off(void);
  38 
  39 static void __init sni_display_setup(void)
  40 {
  41 #if defined(CONFIG_VT) && defined(CONFIG_VGA_CONSOLE) && defined(CONFIG_FW_ARC)
  42         struct screen_info *si = &screen_info;
  43         DISPLAY_STATUS *di;
  44 
  45         di = ArcGetDisplayStatus(1);
  46 
  47         if (di) {
  48                 si->orig_x              = di->CursorXPosition;
  49                 si->orig_y              = di->CursorYPosition;
  50                 si->orig_video_cols     = di->CursorMaxXPosition;
  51                 si->orig_video_lines    = di->CursorMaxYPosition;
  52                 si->orig_video_isVGA    = VIDEO_TYPE_VGAC;
  53                 si->orig_video_points   = 16;
  54         }
  55 #endif
  56 }
  57 
  58 static void __init sni_console_setup(void)
  59 {
  60 #ifndef CONFIG_FW_ARC
  61         char *ctype;
  62         char *cdev;
  63         char *baud;
  64         int port;
  65         static char options[8] __initdata;
  66 
  67         cdev = prom_getenv("console_dev");
  68         if (strncmp(cdev, "tty", 3) == 0) {
  69                 ctype = prom_getenv("console");
  70                 switch (*ctype) {
  71                 default:
  72                 case 'l':
  73                         port = 0;
  74                         baud = prom_getenv("lbaud");
  75                         break;
  76                 case 'r':
  77                         port = 1;
  78                         baud = prom_getenv("rbaud");
  79                         break;
  80                 }
  81                 if (baud)
  82                         strcpy(options, baud);
  83                 if (strncmp(cdev, "tty552", 6) == 0)
  84                         add_preferred_console("ttyS", port,
  85                                               baud ? options : NULL);
  86                 else
  87                         add_preferred_console("ttySC", port,
  88                                               baud ? options : NULL);
  89         }
  90 #endif
  91 }
  92 
  93 #ifdef DEBUG
  94 static void __init sni_idprom_dump(void)
  95 {
  96         int     i;
  97 
  98         pr_debug("SNI IDProm dump:\n");
  99         for (i = 0; i < 256; i++) {
 100                 if (i%16 == 0)
 101                         pr_debug("%04x ", i);
 102 
 103                 printk("%02x ", *(unsigned char *) (SNI_IDPROM_BASE + i));
 104 
 105                 if (i % 16 == 15)
 106                         printk("\n");
 107         }
 108 }
 109 #endif
 110 
 111 void __init plat_mem_setup(void)
 112 {
 113         int cputype;
 114 
 115         set_io_port_base(SNI_PORT_BASE);
 116 //      ioport_resource.end = sni_io_resource.end;
 117 
 118         /*
 119          * Setup (E)ISA I/O memory access stuff
 120          */
 121 #ifdef CONFIG_EISA
 122         EISA_bus = 1;
 123 #endif
 124 
 125         sni_brd_type = *(unsigned char *)SNI_IDPROM_BRDTYPE;
 126         cputype = *(unsigned char *)SNI_IDPROM_CPUTYPE;
 127         switch (sni_brd_type) {
 128         case SNI_BRD_TOWER_OASIC:
 129                 switch (cputype) {
 130                 case SNI_CPU_M8030:
 131                         system_type = "RM400-330";
 132                         break;
 133                 case SNI_CPU_M8031:
 134                         system_type = "RM400-430";
 135                         break;
 136                 case SNI_CPU_M8037:
 137                         system_type = "RM400-530";
 138                         break;
 139                 case SNI_CPU_M8034:
 140                         system_type = "RM400-730";
 141                         break;
 142                 default:
 143                         system_type = "RM400-xxx";
 144                         break;
 145                 }
 146                 break;
 147         case SNI_BRD_MINITOWER:
 148                 switch (cputype) {
 149                 case SNI_CPU_M8021:
 150                 case SNI_CPU_M8043:
 151                         system_type = "RM400-120";
 152                         break;
 153                 case SNI_CPU_M8040:
 154                         system_type = "RM400-220";
 155                         break;
 156                 case SNI_CPU_M8053:
 157                         system_type = "RM400-225";
 158                         break;
 159                 case SNI_CPU_M8050:
 160                         system_type = "RM400-420";
 161                         break;
 162                 default:
 163                         system_type = "RM400-xxx";
 164                         break;
 165                 }
 166                 break;
 167         case SNI_BRD_PCI_TOWER:
 168                 system_type = "RM400-Cxx";
 169                 break;
 170         case SNI_BRD_RM200:
 171                 system_type = "RM200-xxx";
 172                 break;
 173         case SNI_BRD_PCI_MTOWER:
 174                 system_type = "RM300-Cxx";
 175                 break;
 176         case SNI_BRD_PCI_DESKTOP:
 177                 switch (read_c0_prid() & PRID_IMP_MASK) {
 178                 case PRID_IMP_R4600:
 179                 case PRID_IMP_R4700:
 180                         system_type = "RM200-C20";
 181                         break;
 182                 case PRID_IMP_R5000:
 183                         system_type = "RM200-C40";
 184                         break;
 185                 default:
 186                         system_type = "RM200-Cxx";
 187                         break;
 188                 }
 189                 break;
 190         case SNI_BRD_PCI_TOWER_CPLUS:
 191                 system_type = "RM400-Exx";
 192                 break;
 193         case SNI_BRD_PCI_MTOWER_CPLUS:
 194                 system_type = "RM300-Exx";
 195                 break;
 196         }
 197         pr_debug("Found SNI brdtype %02x name %s\n", sni_brd_type, system_type);
 198 
 199 #ifdef DEBUG
 200         sni_idprom_dump();
 201 #endif
 202 
 203         switch (sni_brd_type) {
 204         case SNI_BRD_10:
 205         case SNI_BRD_10NEW:
 206         case SNI_BRD_TOWER_OASIC:
 207         case SNI_BRD_MINITOWER:
 208                 sni_a20r_init();
 209                 break;
 210 
 211         case SNI_BRD_PCI_TOWER:
 212         case SNI_BRD_PCI_TOWER_CPLUS:
 213                 sni_pcit_init();
 214                 break;
 215 
 216         case SNI_BRD_RM200:
 217                 sni_rm200_init();
 218                 break;
 219 
 220         case SNI_BRD_PCI_MTOWER:
 221         case SNI_BRD_PCI_DESKTOP:
 222         case SNI_BRD_PCI_MTOWER_CPLUS:
 223                 sni_pcimt_init();
 224                 break;
 225         }
 226 
 227         _machine_restart = sni_machine_restart;
 228         pm_power_off = sni_machine_power_off;
 229 
 230         sni_display_setup();
 231         sni_console_setup();
 232 }
 233 
 234 #ifdef CONFIG_PCI
 235 
 236 #include <linux/pci.h>
 237 #include <video/vga.h>
 238 #include <video/cirrus.h>
 239 
 240 static void quirk_cirrus_ram_size(struct pci_dev *dev)
 241 {
 242         u16 cmd;
 243 
 244         /*
 245          * firmware doesn't set the ram size correct, so we
 246          * need to do it here, otherwise we get screen corruption
 247          * on older Cirrus chips
 248          */
 249         pci_read_config_word(dev, PCI_COMMAND, &cmd);
 250         if ((cmd & (PCI_COMMAND_IO|PCI_COMMAND_MEMORY))
 251                 == (PCI_COMMAND_IO|PCI_COMMAND_MEMORY)) {
 252                 vga_wseq(NULL, CL_SEQR6, 0x12); /* unlock all extension registers */
 253                 vga_wseq(NULL, CL_SEQRF, 0x18);
 254         }
 255 }
 256 
 257 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CIRRUS, PCI_DEVICE_ID_CIRRUS_5434_8,
 258                         quirk_cirrus_ram_size);
 259 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CIRRUS, PCI_DEVICE_ID_CIRRUS_5436,
 260                         quirk_cirrus_ram_size);
 261 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_CIRRUS, PCI_DEVICE_ID_CIRRUS_5446,
 262                         quirk_cirrus_ram_size);
 263 #endif

/* [<][>][^][v][top][bottom][index][help] */