From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MERl8-0004RF-HS for qemu-devel@nongnu.org; Wed, 10 Jun 2009 13:38:46 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MERl3-0004NM-CF for qemu-devel@nongnu.org; Wed, 10 Jun 2009 13:38:45 -0400 Received: from [199.232.76.173] (port=51296 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MERl3-0004NG-6P for qemu-devel@nongnu.org; Wed, 10 Jun 2009 13:38:41 -0400 Received: from gateway.codesourcery.com ([65.74.133.9]:52181) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MERl2-00021O-HA for qemu-devel@nongnu.org; Wed, 10 Jun 2009 13:38:40 -0400 Received: from wren.home (localhost [127.0.0.1]) by gateway.codesourcery.com (Postfix) with ESMTP id BA99168053 for ; Wed, 10 Jun 2009 10:38:38 -0700 (PDT) From: Paul Brook Date: Wed, 10 Jun 2009 18:38:37 +0100 Message-ID: <20090610173837.4674.9252.stgit@wren.home> In-Reply-To: <20090610173803.4674.82538.stgit@wren.home> References: <20090610173803.4674.82538.stgit@wren.home> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] [PATCH 4/4] Integrator machine config List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Replace integrator board with machine config Signed-off-by: Paul Brook --- Makefile | 2 - hw/arm_timer.c | 2 - hw/integratorcp.c | 97 ++++------------------------------ pc-bios/boards/integrator-cp.dts | 110 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 124 insertions(+), 87 deletions(-) create mode 100644 pc-bios/boards/integrator-cp.dts diff --git a/Makefile b/Makefile index 48a3ec3..5cc346e 100644 --- a/Makefile +++ b/Makefile @@ -46,7 +46,7 @@ endif ####################################################################### # Board descriptions -BOARDS = syborg lm3s811evb lm3s6965evb +BOARDS = syborg lm3s811evb lm3s6965evb integrator-cp ifdef DTC BOARDS_BIN = $(BOARDS:%=pc-bios/boards/%.dtb) diff --git a/hw/arm_timer.c b/hw/arm_timer.c index 226ecc4..6570929 100644 --- a/hw/arm_timer.c +++ b/hw/arm_timer.c @@ -347,7 +347,7 @@ static void icp_pit_init(SysBusDevice *dev) static void arm_timer_register_devices(void) { - sysbus_register_dev("integrator_pit", sizeof(icp_pit_state), icp_pit_init); + sysbus_register_dev("integrator-pit", sizeof(icp_pit_state), icp_pit_init); sysbus_register_dev("sp804", sizeof(sp804_state), sp804_init); } diff --git a/hw/integratorcp.c b/hw/integratorcp.c index b6fbe15..849f0b4 100644 --- a/hw/integratorcp.c +++ b/hw/integratorcp.c @@ -429,104 +429,31 @@ static CPUWriteMemoryFunc *icp_control_writefn[] = { icp_control_write }; -static void icp_control_init(uint32_t base) +static void icp_control_init(SysBusDevice *dev) { int iomemtype; iomemtype = cpu_register_io_memory(0, icp_control_readfn, icp_control_writefn, NULL); - cpu_register_physical_memory(base, 0x00800000, iomemtype); + sysbus_init_mmio(dev, 0x00800000, iomemtype); /* ??? Save/restore. */ } - -/* Board init. */ - -static struct arm_boot_info integrator_binfo = { - .loader_start = 0x0, - .board_id = 0x113, -}; - -static void integratorcp_init(ram_addr_t ram_size, - const char *boot_device, - const char *kernel_filename, const char *kernel_cmdline, - const char *initrd_filename, const char *cpu_model) -{ - CPUState *env; - ram_addr_t ram_offset; - qemu_irq pic[32]; - qemu_irq *cpu_pic; - DeviceState *dev; - int i; - - if (!cpu_model) - cpu_model = "arm926"; - env = cpu_init(cpu_model); - if (!env) { - fprintf(stderr, "Unable to find CPU definition\n"); - exit(1); - } - ram_offset = qemu_ram_alloc(ram_size); - /* ??? On a real system the first 1Mb is mapped as SSRAM or boot flash. */ - /* ??? RAM should repeat to fill physical memory space. */ - /* SDRAM at address zero*/ - cpu_register_physical_memory(0, ram_size, ram_offset | IO_MEM_RAM); - /* And again at address 0x80000000 */ - cpu_register_physical_memory(0x80000000, ram_size, ram_offset | IO_MEM_RAM); - - dev = qdev_create(NULL, "integrator_core"); - qdev_set_prop_int(dev, "memsz", ram_size >> 20); - qdev_init(dev); - sysbus_mmio_map((SysBusDevice *)dev, 0, 0x10000000); - - cpu_pic = arm_pic_init_cpu(env); - dev = sysbus_create_varargs("integrator_pic", 0x14000000, - cpu_pic[ARM_PIC_CPU_IRQ], - cpu_pic[ARM_PIC_CPU_FIQ], NULL); - for (i = 0; i < 32; i++) { - pic[i] = qdev_get_gpio_in(dev, i); +static SysBusDeviceInfo integratorcm_info = { + .init = integratorcm_init, + .qdev.props = (DevicePropList[]) { + {.name = "memsz", .type = PROP_TYPE_INT}, + {.name = NULL} } - sysbus_create_simple("integrator_pic", 0xca000000, pic[26]); - sysbus_create_varargs("integrator_pit", 0x13000000, - pic[5], pic[6], pic[7], NULL); - sysbus_create_simple("pl031", 0x15000000, pic[8]); - sysbus_create_simple("pl011", 0x16000000, pic[1]); - sysbus_create_simple("pl011", 0x17000000, pic[2]); - icp_control_init(0xcb000000); - sysbus_create_simple("pl050_keyboard", 0x18000000, pic[3]); - sysbus_create_simple("pl050_mouse", 0x19000000, pic[4]); - sysbus_create_varargs("pl181", 0x1c000000, pic[23], pic[24], NULL); - if (nd_table[0].vlan) - smc91c111_init(&nd_table[0], 0xc8000000, pic[27]); - - sysbus_create_simple("pl110", 0xc0000000, pic[22]); - - integrator_binfo.ram_size = ram_size; - integrator_binfo.kernel_filename = kernel_filename; - integrator_binfo.kernel_cmdline = kernel_cmdline; - integrator_binfo.initrd_filename = initrd_filename; - arm_load_kernel(env, &integrator_binfo); -} - -static QEMUMachine integratorcp_machine = { - .name = "integratorcp", - .desc = "ARM Integrator/CP (ARM926EJ-S)", - .init = integratorcp_init, - .is_default = 1, }; -static void integratorcp_machine_init(void) -{ - qemu_register_machine(&integratorcp_machine); -} - -machine_init(integratorcp_machine_init); - static void integratorcp_register_devices(void) { - sysbus_register_dev("integrator_pic", sizeof(icp_pic_state), icp_pic_init); - sysbus_register_dev("integrator_core", sizeof(integratorcm_state), - integratorcm_init); + sysbus_register_dev("integrator-pic", sizeof(icp_pic_state), icp_pic_init); + sysbus_register_dev("integrator-control", sizeof(SysBusDevice), + icp_control_init); + sysbus_register_withprop("integrator-core", sizeof(integratorcm_state), + &integratorcm_info); } device_init(integratorcp_register_devices) diff --git a/pc-bios/boards/integrator-cp.dts b/pc-bios/boards/integrator-cp.dts new file mode 100644 index 0000000..6ff27b4 --- /dev/null +++ b/pc-bios/boards/integrator-cp.dts @@ -0,0 +1,110 @@ +/ { + #address-cells = <1>; + #size-cells = <1>; + + cpus { + #address-cells = <1>; + #size-cells = <0>; + cpu0: ARM,ARM926EJ-S@0 { + device_type = "cpu"; + reg = <0>; + #interrupt-cells = <1>; + }; + }; + memory@0 { + device_type = "memory"; + reg = <0 08000000>; + qemu,alias = <80000000>; + }; + integrator-cp@0 { + #address-cells = <1>; + #size-cells = <0>; + qemu,fold-bus; + core-module@0 { + model = "integrator-core"; + memsz = ; + reg = <10000000>; + }; + pic: intc@0 { + model = "integrator-pic"; + #interrupt-cells = <1>; + reg = <14000000>; + interrupt-controller; + interrupt-parent = <&cpu0>; + interrupts = <0 1>; + }; + intc@1 { + model = "integrator-pic"; + #interrupt-cells = <1>; + reg = ; + interrupt-controller; + interrupt-parent = <&pic>; + interrupts = ; + }; + timer@0 { + model = "integrator-pit"; + reg = <13000000>; + interrupt-parent = <&pic>; + interrupts = ; + }; + rtc@0 { + model = "pl031"; + reg = <15000000>; + interrupt-parent = <&pic>; + interrupts = ; + }; + uart@0 { + model = "pl011"; + reg = <16000000>; + interrupt-parent = <&pic>; + interrupts = ; + }; + uart@1 { + model = "pl011"; + reg = <17000000>; + interrupt-parent = <&pic>; + interrupts = ; + }; + keyboard@0 { + model = "pl050_keyboard"; + reg = <18000000>; + interrupt-parent = <&pic>; + interrupts = ; + }; + mouse@0 { + model = "pl050_mouse"; + reg = <19000000>; + interrupt-parent = <&pic>; + interrupts = ; + }; + sd@0 { + model = "pl181"; + reg = <1c000000>; + interrupt-parent = <&pic>; + interrupts = ; + }; + lcd@0 { + model = "pl110"; + reg = ; + interrupt-parent = <&pic>; + interrupts = ; + }; + nic@0 { + model = "smc91c111"; + reg = ; + interrupt-parent = <&pic>; + interrupts = ; + }; + control@0 { + model = "integrator-control"; + reg = ; + }; + }; + chosen { + qemu { + bootstrap = "arm-linux"; + board-id = <113>; + }; + }; +}; +