4 * Copyright (c) 2011, 2012 Stefan Weil
6 * ARM Cortex-A8, OMAP3530, similar to OMAP3430
10 #include "qemu/osdep.h"
12 #include "hw/sysbus.h"
13 #include "hw/boards.h"
14 #include "hw/arm/arm.h"
15 #include "exec/address-spaces.h" /* get_system_memory */
18 static struct arm_boot_info phycard_binfo
;
20 static void phycard_init(MachineState
*machine
)
23 MemoryRegion
*sysmem
= get_system_memory();
24 MemoryRegion
*ram
= g_new(MemoryRegion
, 1);
29 if (!machine
->cpu_model
) {
30 machine
->cpu_model
= "cortex-a8";
32 cpu
= ARM_CPU(cpu_create(machine
->cpu_type
));
34 /* RAM at address zero. */
35 memory_region_allocate_system_memory(ram
, NULL
, "phycard.ram", ram_size
);
36 memory_region_add_subregion(sysmem
, 0, ram
);
38 dev
= sysbus_create_simple("syborg,interrupt", 0xC0000000,
39 qdev_get_gpio_in(DEVICE(cpu
), ARM_CPU_IRQ
));
40 for (i
= 0; i
< 64; i
++) {
41 pic
[i
] = qdev_get_gpio_in(dev
, i
);
44 sysbus_create_simple("syborg,rtc", 0xC0001000, NULL
);
46 dev
= qdev_create(NULL
, "syborg,timer");
47 qdev_prop_set_uint32(dev
, "frequency", 1000000);
48 qdev_init_nofail(dev
);
49 sysbus_mmio_map(SYS_BUS_DEVICE(dev
), 0, 0xC0002000);
50 sysbus_connect_irq(SYS_BUS_DEVICE(dev
), 0, pic
[1]);
52 sysbus_create_simple("syborg,keyboard", 0xC0003000, pic
[2]);
53 sysbus_create_simple("syborg,pointer", 0xC0004000, pic
[3]);
54 sysbus_create_simple("syborg,framebuffer", 0xC0005000, pic
[4]);
55 sysbus_create_simple("syborg,serial", 0xC0006000, pic
[5]);
56 sysbus_create_simple("syborg,serial", 0xC0007000, pic
[6]);
57 sysbus_create_simple("syborg,serial", 0xC0008000, pic
[7]);
58 sysbus_create_simple("syborg,serial", 0xC0009000, pic
[8]);
60 if (nd_table
[0].used
|| nd_table
[0].netdev
) {
64 qemu_check_nic_model(&nd_table
[0], "virtio");
65 dev
= qdev_create(NULL
, "syborg,virtio-net");
66 qdev_set_nic_properties(dev
, &nd_table
[0]);
67 qdev_init_nofail(dev
);
68 s
= SYS_BUS_DEVICE(dev
);
69 sysbus_mmio_map(s
, 0, 0xc000c000);
70 sysbus_connect_irq(s
, 0, pic
[9]);
73 phycard_binfo
.ram_size
= machine
->ram_size
;
74 phycard_binfo
.kernel_filename
= machine
->kernel_filename
;
75 phycard_binfo
.kernel_cmdline
= machine
->kernel_cmdline
;
76 phycard_binfo
.initrd_filename
= machine
->initrd_filename
;
77 phycard_binfo
.board_id
= 0;
78 arm_load_kernel(cpu
, &phycard_binfo
);
81 static void phycard_machine_init(MachineClass
*mc
)
83 mc
->desc
= "phyCARD-L (ARM Cortex-A8)";
84 mc
->init
= phycard_init
;
87 DEFINE_MACHINE("phycard-l", phycard_machine_init
)