Dmitry Eremin-Solenikov | c64b21d | 2011-04-19 18:56:46 +0400 | [diff] [blame] | 1 | /* |
| 2 | * SA-1110-based Sharp Zaurus SL-5500 platform. |
| 3 | * |
| 4 | * Copyright (C) 2011 Dmitry Eremin-Solenikov |
| 5 | * |
| 6 | * This code is licensed under GNU GPL v2. |
Paolo Bonzini | 6b620ca | 2012-01-13 17:44:23 +0100 | [diff] [blame] | 7 | * |
| 8 | * Contributions after 2012-01-13 are licensed under the terms of the |
| 9 | * GNU GPL, version 2 or (at your option) any later version. |
Dmitry Eremin-Solenikov | c64b21d | 2011-04-19 18:56:46 +0400 | [diff] [blame] | 10 | */ |
| 11 | #include "hw.h" |
| 12 | #include "sysbus.h" |
| 13 | #include "boards.h" |
| 14 | #include "devices.h" |
| 15 | #include "strongarm.h" |
| 16 | #include "arm-misc.h" |
| 17 | #include "flash.h" |
| 18 | #include "blockdev.h" |
Avi Kivity | eb2fefb | 2011-10-03 14:14:20 +0200 | [diff] [blame] | 19 | #include "exec-memory.h" |
Dmitry Eremin-Solenikov | c64b21d | 2011-04-19 18:56:46 +0400 | [diff] [blame] | 20 | |
| 21 | static struct arm_boot_info collie_binfo = { |
| 22 | .loader_start = SA_SDCS0, |
| 23 | .ram_size = 0x20000000, |
| 24 | }; |
| 25 | |
Eduardo Habkost | 5f072e1 | 2012-10-15 17:22:02 -0300 | [diff] [blame] | 26 | static void collie_init(QEMUMachineInitArgs *args) |
Dmitry Eremin-Solenikov | c64b21d | 2011-04-19 18:56:46 +0400 | [diff] [blame] | 27 | { |
Eduardo Habkost | 5f072e1 | 2012-10-15 17:22:02 -0300 | [diff] [blame] | 28 | const char *cpu_model = args->cpu_model; |
| 29 | const char *kernel_filename = args->kernel_filename; |
| 30 | const char *kernel_cmdline = args->kernel_cmdline; |
| 31 | const char *initrd_filename = args->initrd_filename; |
Dmitry Eremin-Solenikov | c64b21d | 2011-04-19 18:56:46 +0400 | [diff] [blame] | 32 | StrongARMState *s; |
| 33 | DriveInfo *dinfo; |
Avi Kivity | eb2fefb | 2011-10-03 14:14:20 +0200 | [diff] [blame] | 34 | MemoryRegion *sysmem = get_system_memory(); |
Dmitry Eremin-Solenikov | c64b21d | 2011-04-19 18:56:46 +0400 | [diff] [blame] | 35 | |
| 36 | if (!cpu_model) { |
| 37 | cpu_model = "sa1110"; |
| 38 | } |
| 39 | |
Avi Kivity | eb2fefb | 2011-10-03 14:14:20 +0200 | [diff] [blame] | 40 | s = sa1110_init(sysmem, collie_binfo.ram_size, cpu_model); |
Dmitry Eremin-Solenikov | c64b21d | 2011-04-19 18:56:46 +0400 | [diff] [blame] | 41 | |
Dmitry Eremin-Solenikov | c64b21d | 2011-04-19 18:56:46 +0400 | [diff] [blame] | 42 | dinfo = drive_get(IF_PFLASH, 0, 0); |
Avi Kivity | cfe5f01 | 2011-08-04 15:55:30 +0300 | [diff] [blame] | 43 | pflash_cfi01_register(SA_CS0, NULL, "collie.fl1", 0x02000000, |
Dmitry Eremin-Solenikov | c64b21d | 2011-04-19 18:56:46 +0400 | [diff] [blame] | 44 | dinfo ? dinfo->bdrv : NULL, (64 * 1024), |
Anthony Liguori | 01e0451 | 2011-08-25 14:39:18 -0500 | [diff] [blame] | 45 | 512, 4, 0x00, 0x00, 0x00, 0x00, 0); |
Dmitry Eremin-Solenikov | c64b21d | 2011-04-19 18:56:46 +0400 | [diff] [blame] | 46 | |
Dmitry Eremin-Solenikov | c64b21d | 2011-04-19 18:56:46 +0400 | [diff] [blame] | 47 | dinfo = drive_get(IF_PFLASH, 0, 1); |
Avi Kivity | cfe5f01 | 2011-08-04 15:55:30 +0300 | [diff] [blame] | 48 | pflash_cfi01_register(SA_CS1, NULL, "collie.fl2", 0x02000000, |
Dmitry Eremin-Solenikov | c64b21d | 2011-04-19 18:56:46 +0400 | [diff] [blame] | 49 | dinfo ? dinfo->bdrv : NULL, (64 * 1024), |
Anthony Liguori | 01e0451 | 2011-08-25 14:39:18 -0500 | [diff] [blame] | 50 | 512, 4, 0x00, 0x00, 0x00, 0x00, 0); |
Dmitry Eremin-Solenikov | c64b21d | 2011-04-19 18:56:46 +0400 | [diff] [blame] | 51 | |
| 52 | sysbus_create_simple("scoop", 0x40800000, NULL); |
| 53 | |
| 54 | collie_binfo.kernel_filename = kernel_filename; |
| 55 | collie_binfo.kernel_cmdline = kernel_cmdline; |
| 56 | collie_binfo.initrd_filename = initrd_filename; |
| 57 | collie_binfo.board_id = 0x208; |
Andreas Färber | 3aaa8df | 2012-05-14 02:39:57 +0200 | [diff] [blame] | 58 | arm_load_kernel(s->cpu, &collie_binfo); |
Dmitry Eremin-Solenikov | c64b21d | 2011-04-19 18:56:46 +0400 | [diff] [blame] | 59 | } |
| 60 | |
| 61 | static QEMUMachine collie_machine = { |
| 62 | .name = "collie", |
| 63 | .desc = "Collie PDA (SA-1110)", |
| 64 | .init = collie_init, |
| 65 | }; |
| 66 | |
| 67 | static void collie_machine_init(void) |
| 68 | { |
| 69 | qemu_register_machine(&collie_machine); |
| 70 | } |
| 71 | |
| 72 | machine_init(collie_machine_init) |