From nobody Mon Feb 9 20:46:08 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1487895859197524.9751380857964; Thu, 23 Feb 2017 16:24:19 -0800 (PST) Received: from localhost ([::1]:33589 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ch3gH-0005eO-ES for importer@patchew.org; Thu, 23 Feb 2017 19:24:17 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35510) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ch3f2-000543-Kq for qemu-devel@nongnu.org; Thu, 23 Feb 2017 19:23:03 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ch3f0-00034N-G5 for qemu-devel@nongnu.org; Thu, 23 Feb 2017 19:23:00 -0500 Received: from mailapp01.imgtec.com ([195.59.15.196]:11125) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ch3f0-00033x-49 for qemu-devel@nongnu.org; Thu, 23 Feb 2017 19:22:58 -0500 Received: from hhmail02.hh.imgtec.org (unknown [10.100.10.20]) by Forcepoint Email with ESMTPS id 3412ED221FDD3; Fri, 24 Feb 2017 00:22:51 +0000 (GMT) Received: from localhost.localdomain (192.168.161.53) by hhmail02.hh.imgtec.org (10.100.10.21) with Microsoft SMTP Server (TLS) id 14.3.294.0; Fri, 24 Feb 2017 00:22:55 +0000 From: Yongbok Kim To: QEMU Developers Date: Fri, 24 Feb 2017 00:22:31 +0000 Message-ID: <1487895752-28659-2-git-send-email-yongbok.kim@imgtec.com> X-Mailer: git-send-email 1.7.5.4 In-Reply-To: <1487895752-28659-1-git-send-email-yongbok.kim@imgtec.com> References: <1487895752-28659-1-git-send-email-yongbok.kim@imgtec.com> MIME-Version: 1.0 X-Originating-IP: [192.168.161.53] X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 195.59.15.196 Subject: [Qemu-devel] [PULL 1/2] Revert "hw/mips: MIPS Boston board support" X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This reverts commit d3473e147a754e999718bf6fcb015d9978c6a1ee. The commit breaks "make check" on 32-bit hosts. Signed-off-by: Yongbok Kim --- configure | 2 +- default-configs/mips64el-softmmu.mak | 3 - hw/mips/Makefile.objs | 1 - hw/mips/boston.c | 577 -------------------------------= ---- 4 files changed, 1 insertion(+), 582 deletions(-) delete mode 100644 hw/mips/boston.c diff --git a/configure b/configure index 8e8f18d..4b68861 100755 --- a/configure +++ b/configure @@ -3378,7 +3378,7 @@ fi fdt_required=3Dno for target in $target_list; do case $target in - aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64e= l-softmmu) + aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu) fdt_required=3Dyes ;; esac diff --git a/default-configs/mips64el-softmmu.mak b/default-configs/mips64e= l-softmmu.mak index c2ae313..485e218 100644 --- a/default-configs/mips64el-softmmu.mak +++ b/default-configs/mips64el-softmmu.mak @@ -10,6 +10,3 @@ CONFIG_JAZZ=3Dy CONFIG_G364FB=3Dy CONFIG_JAZZ_LED=3Dy CONFIG_VT82C686=3Dy -CONFIG_MIPS_BOSTON=3Dy -CONFIG_FITLOADER=3Dy -CONFIG_PCI_XILINX=3Dy diff --git a/hw/mips/Makefile.objs b/hw/mips/Makefile.objs index 48cd2ef..9352a1c 100644 --- a/hw/mips/Makefile.objs +++ b/hw/mips/Makefile.objs @@ -4,4 +4,3 @@ obj-$(CONFIG_JAZZ) +=3D mips_jazz.o obj-$(CONFIG_FULONG) +=3D mips_fulong2e.o obj-y +=3D gt64xxx_pci.o obj-$(CONFIG_MIPS_CPS) +=3D cps.o -obj-$(CONFIG_MIPS_BOSTON) +=3D boston.o diff --git a/hw/mips/boston.c b/hw/mips/boston.c deleted file mode 100644 index ce43289..0000000 --- a/hw/mips/boston.c +++ /dev/null @@ -1,577 +0,0 @@ -/* - * MIPS Boston development board emulation. - * - * Copyright (c) 2016 Imagination Technologies - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, see . - */ - -#include "qemu/osdep.h" -#include "qemu-common.h" - -#include "exec/address-spaces.h" -#include "hw/boards.h" -#include "hw/char/serial.h" -#include "hw/hw.h" -#include "hw/ide/pci.h" -#include "hw/ide/ahci.h" -#include "hw/loader.h" -#include "hw/loader-fit.h" -#include "hw/mips/cps.h" -#include "hw/mips/cpudevs.h" -#include "hw/pci-host/xilinx-pcie.h" -#include "qapi/error.h" -#include "qemu/cutils.h" -#include "qemu/error-report.h" -#include "qemu/log.h" -#include "sysemu/char.h" -#include "sysemu/device_tree.h" -#include "sysemu/sysemu.h" -#include "sysemu/qtest.h" - -#include - -#define TYPE_MIPS_BOSTON "mips-boston" -#define BOSTON(obj) OBJECT_CHECK(BostonState, (obj), TYPE_MIPS_BOSTON) - -typedef struct { - SysBusDevice parent_obj; - - MachineState *mach; - MIPSCPSState *cps; - SerialState *uart; - - CharBackend lcd_display; - char lcd_content[8]; - bool lcd_inited; - - hwaddr kernel_entry; - hwaddr fdt_base; -} BostonState; - -enum boston_plat_reg { - PLAT_FPGA_BUILD =3D 0x00, - PLAT_CORE_CL =3D 0x04, - PLAT_WRAPPER_CL =3D 0x08, - PLAT_SYSCLK_STATUS =3D 0x0c, - PLAT_SOFTRST_CTL =3D 0x10, -#define PLAT_SOFTRST_CTL_SYSRESET (1 << 4) - PLAT_DDR3_STATUS =3D 0x14, -#define PLAT_DDR3_STATUS_LOCKED (1 << 0) -#define PLAT_DDR3_STATUS_CALIBRATED (1 << 2) - PLAT_PCIE_STATUS =3D 0x18, -#define PLAT_PCIE_STATUS_PCIE0_LOCKED (1 << 0) -#define PLAT_PCIE_STATUS_PCIE1_LOCKED (1 << 8) -#define PLAT_PCIE_STATUS_PCIE2_LOCKED (1 << 16) - PLAT_FLASH_CTL =3D 0x1c, - PLAT_SPARE0 =3D 0x20, - PLAT_SPARE1 =3D 0x24, - PLAT_SPARE2 =3D 0x28, - PLAT_SPARE3 =3D 0x2c, - PLAT_MMCM_DIV =3D 0x30, -#define PLAT_MMCM_DIV_CLK0DIV_SHIFT 0 -#define PLAT_MMCM_DIV_INPUT_SHIFT 8 -#define PLAT_MMCM_DIV_MUL_SHIFT 16 -#define PLAT_MMCM_DIV_CLK1DIV_SHIFT 24 - PLAT_BUILD_CFG =3D 0x34, -#define PLAT_BUILD_CFG_IOCU_EN (1 << 0) -#define PLAT_BUILD_CFG_PCIE0_EN (1 << 1) -#define PLAT_BUILD_CFG_PCIE1_EN (1 << 2) -#define PLAT_BUILD_CFG_PCIE2_EN (1 << 3) - PLAT_DDR_CFG =3D 0x38, -#define PLAT_DDR_CFG_SIZE (0xf << 0) -#define PLAT_DDR_CFG_MHZ (0xfff << 4) - PLAT_NOC_PCIE0_ADDR =3D 0x3c, - PLAT_NOC_PCIE1_ADDR =3D 0x40, - PLAT_NOC_PCIE2_ADDR =3D 0x44, - PLAT_SYS_CTL =3D 0x48, -}; - -static void boston_lcd_event(void *opaque, int event) -{ - BostonState *s =3D opaque; - if (event =3D=3D CHR_EVENT_OPENED && !s->lcd_inited) { - qemu_chr_fe_printf(&s->lcd_display, " "); - s->lcd_inited =3D true; - } -} - -static uint64_t boston_lcd_read(void *opaque, hwaddr addr, - unsigned size) -{ - BostonState *s =3D opaque; - uint64_t val =3D 0; - - switch (size) { - case 8: - val |=3D (uint64_t)s->lcd_content[(addr + 7) & 0x7] << 56; - val |=3D (uint64_t)s->lcd_content[(addr + 6) & 0x7] << 48; - val |=3D (uint64_t)s->lcd_content[(addr + 5) & 0x7] << 40; - val |=3D (uint64_t)s->lcd_content[(addr + 4) & 0x7] << 32; - /* fall through */ - case 4: - val |=3D (uint64_t)s->lcd_content[(addr + 3) & 0x7] << 24; - val |=3D (uint64_t)s->lcd_content[(addr + 2) & 0x7] << 16; - /* fall through */ - case 2: - val |=3D (uint64_t)s->lcd_content[(addr + 1) & 0x7] << 8; - /* fall through */ - case 1: - val |=3D (uint64_t)s->lcd_content[(addr + 0) & 0x7]; - break; - } - - return val; -} - -static void boston_lcd_write(void *opaque, hwaddr addr, - uint64_t val, unsigned size) -{ - BostonState *s =3D opaque; - - switch (size) { - case 8: - s->lcd_content[(addr + 7) & 0x7] =3D val >> 56; - s->lcd_content[(addr + 6) & 0x7] =3D val >> 48; - s->lcd_content[(addr + 5) & 0x7] =3D val >> 40; - s->lcd_content[(addr + 4) & 0x7] =3D val >> 32; - /* fall through */ - case 4: - s->lcd_content[(addr + 3) & 0x7] =3D val >> 24; - s->lcd_content[(addr + 2) & 0x7] =3D val >> 16; - /* fall through */ - case 2: - s->lcd_content[(addr + 1) & 0x7] =3D val >> 8; - /* fall through */ - case 1: - s->lcd_content[(addr + 0) & 0x7] =3D val; - break; - } - - qemu_chr_fe_printf(&s->lcd_display, - "\r%-8.8s", s->lcd_content); -} - -static const MemoryRegionOps boston_lcd_ops =3D { - .read =3D boston_lcd_read, - .write =3D boston_lcd_write, - .endianness =3D DEVICE_NATIVE_ENDIAN, -}; - -static uint64_t boston_platreg_read(void *opaque, hwaddr addr, - unsigned size) -{ - BostonState *s =3D opaque; - uint32_t gic_freq, val; - - if (size !=3D 4) { - qemu_log_mask(LOG_UNIMP, "%uB platform register read", size); - return 0; - } - - switch (addr & 0xffff) { - case PLAT_FPGA_BUILD: - case PLAT_CORE_CL: - case PLAT_WRAPPER_CL: - return 0; - case PLAT_DDR3_STATUS: - return PLAT_DDR3_STATUS_LOCKED | PLAT_DDR3_STATUS_CALIBRATED; - case PLAT_MMCM_DIV: - gic_freq =3D mips_gictimer_get_freq(s->cps->gic.gic_timer) / 10000= 00; - val =3D gic_freq << PLAT_MMCM_DIV_INPUT_SHIFT; - val |=3D 1 << PLAT_MMCM_DIV_MUL_SHIFT; - val |=3D 1 << PLAT_MMCM_DIV_CLK0DIV_SHIFT; - val |=3D 1 << PLAT_MMCM_DIV_CLK1DIV_SHIFT; - return val; - case PLAT_BUILD_CFG: - val =3D PLAT_BUILD_CFG_PCIE0_EN; - val |=3D PLAT_BUILD_CFG_PCIE1_EN; - val |=3D PLAT_BUILD_CFG_PCIE2_EN; - return val; - case PLAT_DDR_CFG: - val =3D s->mach->ram_size / G_BYTE; - assert(!(val & ~PLAT_DDR_CFG_SIZE)); - val |=3D PLAT_DDR_CFG_MHZ; - return val; - default: - qemu_log_mask(LOG_UNIMP, "Read platform register 0x%" HWADDR_PRIx, - addr & 0xffff); - return 0; - } -} - -static void boston_platreg_write(void *opaque, hwaddr addr, - uint64_t val, unsigned size) -{ - if (size !=3D 4) { - qemu_log_mask(LOG_UNIMP, "%uB platform register write", size); - return; - } - - switch (addr & 0xffff) { - case PLAT_FPGA_BUILD: - case PLAT_CORE_CL: - case PLAT_WRAPPER_CL: - case PLAT_DDR3_STATUS: - case PLAT_PCIE_STATUS: - case PLAT_MMCM_DIV: - case PLAT_BUILD_CFG: - case PLAT_DDR_CFG: - /* read only */ - break; - case PLAT_SOFTRST_CTL: - if (val & PLAT_SOFTRST_CTL_SYSRESET) { - qemu_system_reset_request(); - } - break; - default: - qemu_log_mask(LOG_UNIMP, "Write platform register 0x%" HWADDR_PRIx - " =3D 0x%" PRIx64, addr & 0xffff, val); - break; - } -} - -static const MemoryRegionOps boston_platreg_ops =3D { - .read =3D boston_platreg_read, - .write =3D boston_platreg_write, - .endianness =3D DEVICE_NATIVE_ENDIAN, -}; - -static void boston_flash_write(void *opaque, hwaddr addr, - uint64_t val, unsigned size) -{ -} - -static const MemoryRegionOps boston_flash_ops =3D { - .write =3D boston_flash_write, - .endianness =3D DEVICE_NATIVE_ENDIAN, -}; - -static const TypeInfo boston_device =3D { - .name =3D TYPE_MIPS_BOSTON, - .parent =3D TYPE_SYS_BUS_DEVICE, - .instance_size =3D sizeof(BostonState), -}; - -static void boston_register_types(void) -{ - type_register_static(&boston_device); -} -type_init(boston_register_types) - -static void gen_firmware(uint32_t *p, hwaddr kernel_entry, hwaddr fdt_addr, - bool is_64b) -{ - const uint32_t cm_base =3D 0x16100000; - const uint32_t gic_base =3D 0x16120000; - const uint32_t cpc_base =3D 0x16200000; - - /* Move CM GCRs */ - if (is_64b) { - stl_p(p++, 0x40287803); /* dmfc0 $8, CMGCRBase */ - stl_p(p++, 0x00084138); /* dsll $8, $8, 4 */ - } else { - stl_p(p++, 0x40087803); /* mfc0 $8, CMGCRBase */ - stl_p(p++, 0x00084100); /* sll $8, $8, 4 */ - } - stl_p(p++, 0x3c09a000); /* lui $9, 0xa000 */ - stl_p(p++, 0x01094025); /* or $8, $9 */ - stl_p(p++, 0x3c0a0000 | (cm_base >> 16)); /* lui $10, cm_base >> 16= */ - if (is_64b) { - stl_p(p++, 0xfd0a0008); /* sd $10, 0x8($8) */ - } else { - stl_p(p++, 0xad0a0008); /* sw $10, 0x8($8) */ - } - stl_p(p++, 0x012a4025); /* or $8, $10 */ - - /* Move & enable GIC GCRs */ - stl_p(p++, 0x3c090000 | (gic_base >> 16)); /* lui $9, gic_base >> 16= */ - stl_p(p++, 0x35290001); /* ori $9, 0x1 */ - if (is_64b) { - stl_p(p++, 0xfd090080); /* sd $9, 0x80($8) */ - } else { - stl_p(p++, 0xad090080); /* sw $9, 0x80($8) */ - } - - /* Move & enable CPC GCRs */ - stl_p(p++, 0x3c090000 | (cpc_base >> 16)); /* lui $9, cpc_base >> 16= */ - stl_p(p++, 0x35290001); /* ori $9, 0x1 */ - if (is_64b) { - stl_p(p++, 0xfd090088); /* sd $9, 0x88($8) */ - } else { - stl_p(p++, 0xad090088); /* sw $9, 0x88($8) */ - } - - /* - * Setup argument registers to follow the UHI boot protocol: - * - * a0/$4 =3D -2 - * a1/$5 =3D virtual address of FDT - * a2/$6 =3D 0 - * a3/$7 =3D 0 - */ - stl_p(p++, 0x2404fffe); /* li $4, -2 */ - /* lui $5, hi(fdt_addr) */ - stl_p(p++, 0x3c050000 | ((fdt_addr >> 16) & 0xffff)); - if (fdt_addr & 0xffff) { /* ori $5, lo(fdt_addr) */ - stl_p(p++, 0x34a50000 | (fdt_addr & 0xffff)); - } - stl_p(p++, 0x34060000); /* li $6, 0 */ - stl_p(p++, 0x34070000); /* li $7, 0 */ - - /* Load kernel entry address & jump to it */ - /* lui $25, hi(kernel_ent= ry) */ - stl_p(p++, 0x3c190000 | ((kernel_entry >> 16) & 0xffff)); - /* ori $25, lo(kernel_ent= ry) */ - stl_p(p++, 0x37390000 | (kernel_entry & 0xffff)); - stl_p(p++, 0x03200009); /* jr $25 */ -} - -static const void *boston_fdt_filter(void *opaque, const void *fdt_orig, - const void *match_data, hwaddr *load_= addr) -{ - BostonState *s =3D BOSTON(opaque); - MachineState *machine =3D s->mach; - const char *cmdline; - int err; - void *fdt; - size_t fdt_sz, ram_low_sz, ram_high_sz; - - fdt_sz =3D fdt_totalsize(fdt_orig) * 2; - fdt =3D g_malloc0(fdt_sz); - - err =3D fdt_open_into(fdt_orig, fdt, fdt_sz); - if (err) { - fprintf(stderr, "unable to open FDT\n"); - return NULL; - } - - cmdline =3D (machine->kernel_cmdline && machine->kernel_cmdline[0]) - ? machine->kernel_cmdline : " "; - err =3D qemu_fdt_setprop_string(fdt, "/chosen", "bootargs", cmdline); - if (err < 0) { - fprintf(stderr, "couldn't set /chosen/bootargs\n"); - return NULL; - } - - ram_low_sz =3D MIN(256 * M_BYTE, machine->ram_size); - ram_high_sz =3D machine->ram_size - ram_low_sz; - qemu_fdt_setprop_sized_cells(fdt, "/memory@0", "reg", - 1, 0x00000000, 1, ram_low_sz, - 1, 0x90000000, 1, ram_high_sz); - - fdt =3D g_realloc(fdt, fdt_totalsize(fdt)); - qemu_fdt_dumpdtb(fdt, fdt_sz); - - s->fdt_base =3D *load_addr; - - return fdt; -} - -static const void *boston_kernel_filter(void *opaque, const void *kernel, - hwaddr *load_addr, hwaddr *entry_a= ddr) -{ - BostonState *s =3D BOSTON(opaque); - - s->kernel_entry =3D *entry_addr; - - return kernel; -} - -static const struct fit_loader_match boston_matches[] =3D { - { "img,boston" }, - { NULL }, -}; - -static const struct fit_loader boston_fit_loader =3D { - .matches =3D boston_matches, - .addr_to_phys =3D cpu_mips_kseg0_to_phys, - .fdt_filter =3D boston_fdt_filter, - .kernel_filter =3D boston_kernel_filter, -}; - -static inline XilinxPCIEHost * -xilinx_pcie_init(MemoryRegion *sys_mem, uint32_t bus_nr, - hwaddr cfg_base, uint64_t cfg_size, - hwaddr mmio_base, uint64_t mmio_size, - qemu_irq irq, bool link_up) -{ - DeviceState *dev; - MemoryRegion *cfg, *mmio; - - dev =3D qdev_create(NULL, TYPE_XILINX_PCIE_HOST); - - qdev_prop_set_uint32(dev, "bus_nr", bus_nr); - qdev_prop_set_uint64(dev, "cfg_base", cfg_base); - qdev_prop_set_uint64(dev, "cfg_size", cfg_size); - qdev_prop_set_uint64(dev, "mmio_base", mmio_base); - qdev_prop_set_uint64(dev, "mmio_size", mmio_size); - qdev_prop_set_bit(dev, "link_up", link_up); - - qdev_init_nofail(dev); - - cfg =3D sysbus_mmio_get_region(SYS_BUS_DEVICE(dev), 0); - memory_region_add_subregion_overlap(sys_mem, cfg_base, cfg, 0); - - mmio =3D sysbus_mmio_get_region(SYS_BUS_DEVICE(dev), 1); - memory_region_add_subregion_overlap(sys_mem, 0, mmio, 0); - - qdev_connect_gpio_out_named(dev, "interrupt_out", 0, irq); - - return XILINX_PCIE_HOST(dev); -} - -static void boston_mach_init(MachineState *machine) -{ - DeviceState *dev; - BostonState *s; - Error *err =3D NULL; - const char *cpu_model; - MemoryRegion *flash, *ddr, *ddr_low_alias, *lcd, *platreg; - MemoryRegion *sys_mem =3D get_system_memory(); - XilinxPCIEHost *pcie2; - PCIDevice *ahci; - DriveInfo *hd[6]; - Chardev *chr; - int fw_size, fit_err; - bool is_64b; - - if ((machine->ram_size % G_BYTE) || - (machine->ram_size > (2 * G_BYTE))) { - error_report("Memory size must be 1GB or 2GB"); - exit(1); - } - - cpu_model =3D machine->cpu_model ?: "I6400"; - - dev =3D qdev_create(NULL, TYPE_MIPS_BOSTON); - qdev_init_nofail(dev); - - s =3D BOSTON(dev); - s->mach =3D machine; - s->cps =3D g_new0(MIPSCPSState, 1); - - if (!cpu_supports_cps_smp(cpu_model)) { - error_report("Boston requires CPUs which support CPS"); - exit(1); - } - - is_64b =3D cpu_supports_isa(cpu_model, ISA_MIPS64); - - object_initialize(s->cps, sizeof(MIPSCPSState), TYPE_MIPS_CPS); - qdev_set_parent_bus(DEVICE(s->cps), sysbus_get_default()); - - object_property_set_str(OBJECT(s->cps), cpu_model, "cpu-model", &err); - object_property_set_int(OBJECT(s->cps), smp_cpus, "num-vp", &err); - object_property_set_bool(OBJECT(s->cps), true, "realized", &err); - - if (err !=3D NULL) { - error_report("%s", error_get_pretty(err)); - exit(1); - } - - sysbus_mmio_map_overlap(SYS_BUS_DEVICE(s->cps), 0, 0, 1); - - flash =3D g_new(MemoryRegion, 1); - memory_region_init_rom_device(flash, NULL, &boston_flash_ops, s, - "boston.flash", 128 * M_BYTE, &err); - memory_region_add_subregion_overlap(sys_mem, 0x18000000, flash, 0); - - ddr =3D g_new(MemoryRegion, 1); - memory_region_allocate_system_memory(ddr, NULL, "boston.ddr", - machine->ram_size); - memory_region_add_subregion_overlap(sys_mem, 0x80000000, ddr, 0); - - ddr_low_alias =3D g_new(MemoryRegion, 1); - memory_region_init_alias(ddr_low_alias, NULL, "boston_low.ddr", - ddr, 0, MIN(machine->ram_size, (256 * M_BYTE)= )); - memory_region_add_subregion_overlap(sys_mem, 0, ddr_low_alias, 0); - - xilinx_pcie_init(sys_mem, 0, - 0x10000000, 32 * M_BYTE, - 0x40000000, 1 * G_BYTE, - get_cps_irq(s->cps, 2), false); - - xilinx_pcie_init(sys_mem, 1, - 0x12000000, 32 * M_BYTE, - 0x20000000, 512 * M_BYTE, - get_cps_irq(s->cps, 1), false); - - pcie2 =3D xilinx_pcie_init(sys_mem, 2, - 0x14000000, 32 * M_BYTE, - 0x16000000, 1 * M_BYTE, - get_cps_irq(s->cps, 0), true); - - platreg =3D g_new(MemoryRegion, 1); - memory_region_init_io(platreg, NULL, &boston_platreg_ops, s, - "boston-platregs", 0x1000); - memory_region_add_subregion_overlap(sys_mem, 0x17ffd000, platreg, 0); - - if (!serial_hds[0]) { - serial_hds[0] =3D qemu_chr_new("serial0", "null"); - } - - s->uart =3D serial_mm_init(sys_mem, 0x17ffe000, 2, - get_cps_irq(s->cps, 3), 10000000, - serial_hds[0], DEVICE_NATIVE_ENDIAN); - - lcd =3D g_new(MemoryRegion, 1); - memory_region_init_io(lcd, NULL, &boston_lcd_ops, s, "boston-lcd", 0x8= ); - memory_region_add_subregion_overlap(sys_mem, 0x17fff000, lcd, 0); - - chr =3D qemu_chr_new("lcd", "vc:320x240"); - qemu_chr_fe_init(&s->lcd_display, chr, NULL); - qemu_chr_fe_set_handlers(&s->lcd_display, NULL, NULL, - boston_lcd_event, s, NULL, true); - - ahci =3D pci_create_simple_multifunction(&PCI_BRIDGE(&pcie2->root)->se= c_bus, - PCI_DEVFN(0, 0), - true, TYPE_ICH9_AHCI); - g_assert(ARRAY_SIZE(hd) =3D=3D ICH_AHCI(ahci)->ahci.ports); - ide_drive_get(hd, ICH_AHCI(ahci)->ahci.ports); - ahci_ide_create_devs(ahci, hd); - - if (machine->firmware) { - fw_size =3D load_image_targphys(machine->firmware, - 0x1fc00000, 4 * M_BYTE); - if (fw_size =3D=3D -1) { - error_printf("unable to load firmware image '%s'\n", - machine->firmware); - exit(1); - } - } else if (machine->kernel_filename) { - fit_err =3D load_fit(&boston_fit_loader, machine->kernel_filename,= s); - if (fit_err) { - error_printf("unable to load FIT image\n"); - exit(1); - } - - gen_firmware(memory_region_get_ram_ptr(flash) + 0x7c00000, - s->kernel_entry, s->fdt_base, is_64b); - } else if (!qtest_enabled()) { - error_printf("Please provide either a -kernel or -bios argument\n"= ); - exit(1); - } -} - -static void boston_mach_class_init(MachineClass *mc) -{ - mc->desc =3D "MIPS Boston"; - mc->init =3D boston_mach_init; - mc->block_default_type =3D IF_IDE; - mc->default_ram_size =3D 2 * G_BYTE; - mc->max_cpus =3D 16; -} - -DEFINE_MACHINE("boston", boston_mach_class_init) --=20 2.7.4