(linenum→info "unix/slp.c:2238")

qemu/0.9.1/hw/gumstix.c

    1: /*
    2:  * Gumstix Platforms
    3:  *
    4:  * Copyright (c) 2007 by Thorsten Zitterell <info@bitmux.org>
    5:  *
    6:  * Code based on spitz platform by Andrzej Zaborowski <balrog@zabor.org>
    7:  *
    8:  * This code is licensed under the GNU GPL v2.
    9:  */
   10:  
   11: /* 
   12:  * Example usage:
   13:  * 
   14:  * connex:
   15:  * =======
   16:  * create image:
   17:  * # dd of=flash bs=1k count=16k if=/dev/zero
   18:  * # dd of=flash bs=1k conv=notrunc if=u-boot.bin
   19:  * # dd of=flash bs=1k conv=notrunc seek=256 if=rootfs.arm_nofpu.jffs2
   20:  * start it:
   21:  * # qemu-system-arm -M connex -pflash flash -monitor null -nographic
   22:  *
   23:  * verdex:
   24:  * =======
   25:  * create image:
   26:  * # dd of=flash bs=1k count=32k if=/dev/zero
   27:  * # dd of=flash bs=1k conv=notrunc if=u-boot.bin
   28:  * # dd of=flash bs=1k conv=notrunc seek=256 if=rootfs.arm_nofpu.jffs2
   29:  * # dd of=flash bs=1k conv=notrunc seek=31744 if=uImage
   30:  * start it:
   31:  * # qemu-system-arm -M verdex -pflash flash -monitor null -nographic -m 289
   32:  */
   33: 
   34: #include "hw.h"
   35: #include "pxa.h"
   36: #include "net.h"
   37: #include "flash.h"
   38: #include "sysemu.h"
   39: #include "devices.h"
   40: #include "boards.h"
   41: 
   42: static const int sector_len = 128 * 1024;
   43: 
   44: static void connex_init(int ram_size, int vga_ram_size,
   45:                 const char *boot_device, DisplayState *ds,
   46:                 const char *kernel_filename, const char *kernel_cmdline,
   47:                 const char *initrd_filename, const char *cpu_model)
   48: {
   49:     struct pxa2xx_state_s *cpu;
   50:     int index;
   51: 
   52:     uint32_t connex_rom = 0x01000000;
   53:     uint32_t connex_ram = 0x04000000;
   54: 
   55:     if (ram_size < (connex_ram + connex_rom + PXA2XX_INTERNAL_SIZE)) {
   56:         fprintf(stderr, "This platform requires %i bytes of memory\n",
   57:                 connex_ram + connex_rom + PXA2XX_INTERNAL_SIZE);
   58:         exit(1);
   59:     }
   60: 
   61:     cpu = pxa255_init(connex_ram, ds);
   62: 
   63:     index = drive_get_index(IF_PFLASH, 0, 0);
   64:     if (index == -1) {
   65:         fprintf(stderr, "A flash image must be given with the "
   66:                 "'pflash' parameter\n");
   67:         exit(1);
   68:     }
   69: 
   70:     if (!pflash_cfi01_register(0x00000000, qemu_ram_alloc(connex_rom),
   71:             drives_table[index].bdrv, sector_len, connex_rom / sector_len,
   72:             2, 0, 0, 0, 0)) {
   73:         fprintf(stderr, "qemu: Error registering flash memory.\n");
   74:         exit(1);
   75:     }
   76: 
   77:     cpu->env->regs[15] = 0x00000000;
   78: 
   79:     /* Interrupt line of NIC is connected to GPIO line 36 */
   80:     smc91c111_init(&nd_table[0], 0x04000300,
   81:                     pxa2xx_gpio_in_get(cpu->gpio)[36]);
   82: }
   83: 
   84: static void verdex_init(int ram_size, int vga_ram_size,
   85:                 const char *boot_device, DisplayState *ds,
   86:                 const char *kernel_filename, const char *kernel_cmdline,
   87:                 const char *initrd_filename, const char *cpu_model)
   88: {
   89:     struct pxa2xx_state_s *cpu;
   90:     int index;
   91: 
   92:     uint32_t verdex_rom = 0x02000000;
   93:     uint32_t verdex_ram = 0x10000000;
   94: 
   95:     if (ram_size < (verdex_ram + verdex_rom + PXA2XX_INTERNAL_SIZE)) {
   96:         fprintf(stderr, "This platform requires %i bytes of memory\n",
   97:                 verdex_ram + verdex_rom + PXA2XX_INTERNAL_SIZE);
   98:         exit(1);
   99:     }
  100: 
  101:     cpu = pxa270_init(verdex_ram, ds, cpu_model ?: "pxa270-c0");
  102: 
  103:     index = drive_get_index(IF_PFLASH, 0, 0);
  104:     if (index == -1) {
  105:         fprintf(stderr, "A flash image must be given with the "
  106:                 "'pflash' parameter\n");
  107:         exit(1);
  108:     }
  109: 
  110:     if (!pflash_cfi01_register(0x00000000, qemu_ram_alloc(verdex_rom),
  111:             drives_table[index].bdrv, sector_len, verdex_rom / sector_len,
  112:             2, 0, 0, 0, 0)) {
  113:         fprintf(stderr, "qemu: Error registering flash memory.\n");
  114:         exit(1);
  115:     }
  116: 
  117:     cpu->env->regs[15] = 0x00000000;
  118: 
  119:     /* Interrupt line of NIC is connected to GPIO line 99 */
  120:     smc91c111_init(&nd_table[0], 0x04000300,
  121:                     pxa2xx_gpio_in_get(cpu->gpio)[99]);
  122: }
  123: 
  124: QEMUMachine connex_machine = {
  125:     "connex",
  126:     "Gumstix Connex (PXA255)",
  127:     connex_init,
  128: };
  129: 
  130: QEMUMachine verdex_machine = {
  131:     "verdex",
  132:     "Gumstix Verdex (PXA270)",
  133:     verdex_init,
  134: };
Syntax (Markdown)