From 2eaaac1f01014bc7a3597847646a814539494fca Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Fri, 7 Nov 2014 16:50:44 +0100 Subject: [PATCH 01/37] PPC: e500: Move CCSR definition to params We want to have different MMIO region offsets for the mpc8544ds machine and our e500 PV machine, so move the definitions of those into the machine specific params struct. Signed-off-by: Alexander Graf --- hw/ppc/e500.c | 30 ++++++++++++++---------------- hw/ppc/e500.h | 3 +++ hw/ppc/e500plat.c | 3 +++ hw/ppc/mpc8544ds.c | 3 +++ 4 files changed, 23 insertions(+), 16 deletions(-) diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c index 2832fc0da4..1aaa5154d1 100644 --- a/hw/ppc/e500.c +++ b/hw/ppc/e500.c @@ -51,19 +51,14 @@ #define RAM_SIZES_ALIGN (64UL << 20) /* TODO: parameterize */ -#define MPC8544_CCSRBAR_BASE 0xE0000000ULL #define MPC8544_CCSRBAR_SIZE 0x00100000ULL #define MPC8544_MPIC_REGS_OFFSET 0x40000ULL #define MPC8544_MSI_REGS_OFFSET 0x41600ULL #define MPC8544_SERIAL0_REGS_OFFSET 0x4500ULL #define MPC8544_SERIAL1_REGS_OFFSET 0x4600ULL #define MPC8544_PCI_REGS_OFFSET 0x8000ULL -#define MPC8544_PCI_REGS_BASE (MPC8544_CCSRBAR_BASE + \ - MPC8544_PCI_REGS_OFFSET) #define MPC8544_PCI_REGS_SIZE 0x1000ULL -#define MPC8544_PCI_IO 0xE1000000ULL #define MPC8544_UTIL_OFFSET 0xe0000ULL -#define MPC8544_SPIN_BASE 0xEF000000ULL #define MPC8XXX_GPIO_OFFSET 0x000FF000ULL #define MPC8XXX_GPIO_IRQ 43 @@ -298,7 +293,7 @@ static int ppce500_load_device_tree(MachineState *machine, 0x0, 0x20000000, 0x1000000, 0x0, 0x0, - 0x0, 0xe1000000, + params->pci_pio_base >> 32, params->pci_pio_base, 0x0, 0x10000, }; QemuOpts *machine_opts = qemu_get_machine_opts(); @@ -389,7 +384,7 @@ static int ppce500_load_device_tree(MachineState *machine, CPUState *cpu; PowerPCCPU *pcpu; char cpu_name[128]; - uint64_t cpu_release_addr = MPC8544_SPIN_BASE + (i * 0x20); + uint64_t cpu_release_addr = params->spin_base + (i * 0x20); cpu = qemu_get_cpu(i); if (cpu == NULL) { @@ -426,7 +421,7 @@ static int ppce500_load_device_tree(MachineState *machine, qemu_fdt_add_subnode(fdt, "/aliases"); /* XXX These should go into their respective devices' code */ - snprintf(soc, sizeof(soc), "/soc@%llx", MPC8544_CCSRBAR_BASE); + snprintf(soc, sizeof(soc), "/soc@%"PRIx64, params->ccsrbar_base); qemu_fdt_add_subnode(fdt, soc); qemu_fdt_setprop_string(fdt, soc, "device_type", "soc"); qemu_fdt_setprop(fdt, soc, "compatible", compatible_sb, @@ -434,7 +429,7 @@ static int ppce500_load_device_tree(MachineState *machine, qemu_fdt_setprop_cell(fdt, soc, "#address-cells", 1); qemu_fdt_setprop_cell(fdt, soc, "#size-cells", 1); qemu_fdt_setprop_cells(fdt, soc, "ranges", 0x0, - MPC8544_CCSRBAR_BASE >> 32, MPC8544_CCSRBAR_BASE, + params->ccsrbar_base >> 32, params->ccsrbar_base, MPC8544_CCSRBAR_SIZE); /* XXX should contain a reasonable value */ qemu_fdt_setprop_cell(fdt, soc, "bus-frequency", 0); @@ -493,7 +488,8 @@ static int ppce500_load_device_tree(MachineState *machine, qemu_fdt_setprop_cell(fdt, msi, "phandle", msi_ph); qemu_fdt_setprop_cell(fdt, msi, "linux,phandle", msi_ph); - snprintf(pci, sizeof(pci), "/pci@%llx", MPC8544_PCI_REGS_BASE); + snprintf(pci, sizeof(pci), "/pci@%llx", + params->ccsrbar_base + MPC8544_PCI_REGS_OFFSET); qemu_fdt_add_subnode(fdt, pci); qemu_fdt_setprop_cell(fdt, pci, "cell-index", 0); qemu_fdt_setprop_string(fdt, pci, "compatible", "fsl,mpc8540-pci"); @@ -512,8 +508,10 @@ static int ppce500_load_device_tree(MachineState *machine, } qemu_fdt_setprop_cell(fdt, pci, "fsl,msi", msi_ph); qemu_fdt_setprop(fdt, pci, "ranges", pci_ranges, sizeof(pci_ranges)); - qemu_fdt_setprop_cells(fdt, pci, "reg", MPC8544_PCI_REGS_BASE >> 32, - MPC8544_PCI_REGS_BASE, 0, 0x1000); + qemu_fdt_setprop_cells(fdt, pci, "reg", + (params->ccsrbar_base + MPC8544_PCI_REGS_OFFSET) >> 32, + (params->ccsrbar_base + MPC8544_PCI_REGS_OFFSET), + 0, 0x1000); qemu_fdt_setprop_cell(fdt, pci, "clock-frequency", 66666666); qemu_fdt_setprop_cell(fdt, pci, "#interrupt-cells", 1); qemu_fdt_setprop_cell(fdt, pci, "#size-cells", 2); @@ -841,7 +839,7 @@ void ppce500_init(MachineState *machine, PPCE500Params *params) irqs[i][OPENPIC_OUTPUT_INT] = input[PPCE500_INPUT_INT]; irqs[i][OPENPIC_OUTPUT_CINT] = input[PPCE500_INPUT_CINT]; env->spr_cb[SPR_BOOKE_PIR].default_value = cs->cpu_index = i; - env->mpic_iack = MPC8544_CCSRBAR_BASE + + env->mpic_iack = params->ccsrbar_base + MPC8544_MPIC_REGS_OFFSET + 0xa0; ppc_booke_timers_init(cpu, 400000000, PPC_TIMER_E500); @@ -875,7 +873,7 @@ void ppce500_init(MachineState *machine, PPCE500Params *params) qdev_init_nofail(dev); ccsr = CCSR(dev); ccsr_addr_space = &ccsr->ccsr_space; - memory_region_add_subregion(address_space_mem, MPC8544_CCSRBAR_BASE, + memory_region_add_subregion(address_space_mem, params->ccsrbar_base, ccsr_addr_space); mpic = ppce500_init_mpic(params, ccsr_addr_space, irqs); @@ -917,7 +915,7 @@ void ppce500_init(MachineState *machine, PPCE500Params *params) if (!pci_bus) printf("couldn't create PCI controller!\n"); - sysbus_mmio_map(SYS_BUS_DEVICE(dev), 1, MPC8544_PCI_IO); + sysbus_mmio_map(SYS_BUS_DEVICE(dev), 1, params->pci_pio_base); if (pci_bus) { /* Register network interfaces. */ @@ -927,7 +925,7 @@ void ppce500_init(MachineState *machine, PPCE500Params *params) } /* Register spinning region */ - sysbus_create_simple("e500-spin", MPC8544_SPIN_BASE, NULL); + sysbus_create_simple("e500-spin", params->spin_base, NULL); if (cur_base < (32 * 1024 * 1024)) { /* u-boot occupies memory up to 32MB, so load blobs above */ diff --git a/hw/ppc/e500.h b/hw/ppc/e500.h index 9f61ab2b1c..d96f72d484 100644 --- a/hw/ppc/e500.h +++ b/hw/ppc/e500.h @@ -17,6 +17,9 @@ typedef struct PPCE500Params { hwaddr platform_bus_size; int platform_bus_first_irq; int platform_bus_num_irqs; + hwaddr ccsrbar_base; + hwaddr pci_pio_base; + hwaddr spin_base; } PPCE500Params; void ppce500_init(MachineState *machine, PPCE500Params *params); diff --git a/hw/ppc/e500plat.c b/hw/ppc/e500plat.c index d50ae000ee..1600fcf219 100644 --- a/hw/ppc/e500plat.c +++ b/hw/ppc/e500plat.c @@ -41,6 +41,9 @@ static void e500plat_init(MachineState *machine) .platform_bus_size = (128ULL * 1024 * 1024), .platform_bus_first_irq = 5, .platform_bus_num_irqs = 10, + .ccsrbar_base = 0xE0000000ULL, + .pci_pio_base = 0xE1000000ULL, + .spin_base = 0xEF000000ULL, }; /* Older KVM versions don't support EPR which breaks guests when we announce diff --git a/hw/ppc/mpc8544ds.c b/hw/ppc/mpc8544ds.c index b99f74af75..f13163308e 100644 --- a/hw/ppc/mpc8544ds.c +++ b/hw/ppc/mpc8544ds.c @@ -33,6 +33,9 @@ static void mpc8544ds_init(MachineState *machine) .pci_nr_slots = 2, .fixup_devtree = mpc8544ds_fixup_devtree, .mpic_version = OPENPIC_MODEL_FSL_MPIC_20, + .ccsrbar_base = 0xE0000000ULL, + .pci_pio_base = 0xE1000000ULL, + .spin_base = 0xEF000000ULL, }; ppce500_init(machine, ¶ms); From e6b4e5f4795b2591fd91bea671e3e22e08fd0e75 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Fri, 7 Nov 2014 17:07:03 +0100 Subject: [PATCH 02/37] PPC: e500: Move CCSR and MMIO space to upper end of address space On e500 we're basically guaranteed to have 36bits of physical address space available for our enjoyment. Older chips (like the mpc8544) only had 32bits, but everything from e500v2 onwards bumped it up. It's reasonably safe to assume that if you're using the PV machine, your guest kernel is configured to support 36bit physical address space. So in order to support more guest RAM, we can move CCSR and other MMIO windows right below the end of our 36bit address space, just like later SoC versions of e500 do. With this patch, I'm able to successfully spawn an e500 VM with -m 48G. Signed-off-by: Alexander Graf --- hw/ppc/e500plat.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hw/ppc/e500plat.c b/hw/ppc/e500plat.c index 1600fcf219..1b8a68d223 100644 --- a/hw/ppc/e500plat.c +++ b/hw/ppc/e500plat.c @@ -41,9 +41,9 @@ static void e500plat_init(MachineState *machine) .platform_bus_size = (128ULL * 1024 * 1024), .platform_bus_first_irq = 5, .platform_bus_num_irqs = 10, - .ccsrbar_base = 0xE0000000ULL, - .pci_pio_base = 0xE1000000ULL, - .spin_base = 0xEF000000ULL, + .ccsrbar_base = 0xFE0000000ULL, + .pci_pio_base = 0xFE1000000ULL, + .spin_base = 0xFEF000000ULL, }; /* Older KVM versions don't support EPR which breaks guests when we announce From 44045ce9740945056a58ecb53d2af9ae00083632 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Wed, 12 Nov 2014 22:35:33 +0100 Subject: [PATCH 03/37] PPC: mpc8554ds: Tell user about exceeding RAM limits The mpc8544ds board only supports up to 3GB of RAM due to its limited address space. When the user requests more, abort and tell him that he should use less. Signed-off-by: Alexander Graf --- hw/ppc/mpc8544ds.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/hw/ppc/mpc8544ds.c b/hw/ppc/mpc8544ds.c index f13163308e..fb74b3ff80 100644 --- a/hw/ppc/mpc8544ds.c +++ b/hw/ppc/mpc8544ds.c @@ -15,6 +15,7 @@ #include "hw/boards.h" #include "sysemu/device_tree.h" #include "hw/ppc/openpic.h" +#include "qemu/error-report.h" static void mpc8544ds_fixup_devtree(PPCE500Params *params, void *fdt) { @@ -38,6 +39,11 @@ static void mpc8544ds_init(MachineState *machine) .spin_base = 0xEF000000ULL, }; + if (machine->ram_size > 0xc0000000) { + error_report("The MPC8544DS board only supports up to 3GB of RAM"); + exit(1); + } + ppce500_init(machine, ¶ms); } From cb3778a0455a2e5a48d7ef0ec8dc656313820389 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Wed, 12 Nov 2014 22:44:52 +0100 Subject: [PATCH 04/37] PPC: e500 pci host: Add support for ATMUs The e500 PCI controller has configurable windows that allow a guest OS to selectively map parts of the PCI bus space to CPU address space and to selectively map parts of the CPU address space for DMA requests into PCI visible address ranges. So far, we've simply assumed that this mapping is 1:1 and ignored it. However, the PCICSRBAR (CCSR mapped in PCI bus space) always has to live inside the first 32bits of address space. This means if we always treat all mappings as 1:1, this map will collide with our RAM map from the CPU's point of view. So this patch adds proper ATMU support which allows us to keep the PCICSRBAR below 32bits local to the PCI bus and have another, different window to PCI BARs at the upper end of address space. We leverage this on e500plat though, mpc8544ds stays virtually 1:1 like it was before, but now also goes via ATMU. With this patch, I can run guests with lots of RAM and not coincidently access MSI-X mappings while I really want to access RAM. Signed-off-by: Alexander Graf --- hw/pci-host/ppce500.c | 113 +++++++++++++++++++++++++++++++++++++++--- hw/ppc/e500.c | 6 +-- hw/ppc/e500.h | 2 + hw/ppc/e500plat.c | 2 + hw/ppc/mpc8544ds.c | 2 + 5 files changed, 115 insertions(+), 10 deletions(-) diff --git a/hw/pci-host/ppce500.c b/hw/pci-host/ppce500.c index 1b4c0f0023..574f8b2efb 100644 --- a/hw/pci-host/ppce500.c +++ b/hw/pci-host/ppce500.c @@ -62,11 +62,19 @@ #define PPCE500_PCI_NR_POBS 5 #define PPCE500_PCI_NR_PIBS 3 +#define PIWAR_EN 0x80000000 /* Enable */ +#define PIWAR_PF 0x20000000 /* prefetch */ +#define PIWAR_TGI_LOCAL 0x00f00000 /* target - local memory */ +#define PIWAR_READ_SNOOP 0x00050000 +#define PIWAR_WRITE_SNOOP 0x00005000 +#define PIWAR_SZ_MASK 0x0000003f + struct pci_outbound { uint32_t potar; uint32_t potear; uint32_t powbar; uint32_t powar; + MemoryRegion mem; }; struct pci_inbound { @@ -74,6 +82,7 @@ struct pci_inbound { uint32_t piwbar; uint32_t piwbear; uint32_t piwar; + MemoryRegion mem; }; #define TYPE_PPC_E500_PCI_HOST_BRIDGE "e500-pcihost" @@ -91,10 +100,13 @@ struct PPCE500PCIState { uint32_t irq_num[PCI_NUM_PINS]; uint32_t first_slot; uint32_t first_pin_irq; + AddressSpace bm_as; + MemoryRegion bm; /* mmio maps */ MemoryRegion container; MemoryRegion iomem; MemoryRegion pio; + MemoryRegion busmem; }; #define TYPE_PPC_E500_PCI_BRIDGE "e500-host-bridge" @@ -181,6 +193,71 @@ static uint64_t pci_reg_read4(void *opaque, hwaddr addr, return value; } +/* DMA mapping */ +static void e500_update_piw(PPCE500PCIState *pci, int idx) +{ + uint64_t tar = ((uint64_t)pci->pib[idx].pitar) << 12; + uint64_t wbar = ((uint64_t)pci->pib[idx].piwbar) << 12; + uint64_t war = pci->pib[idx].piwar; + uint64_t size = 2ULL << (war & PIWAR_SZ_MASK); + MemoryRegion *address_space_mem = get_system_memory(); + MemoryRegion *mem = &pci->pib[idx].mem; + MemoryRegion *bm = &pci->bm; + char *name; + + if (memory_region_is_mapped(mem)) { + /* Before we modify anything, unmap and destroy the region */ + memory_region_del_subregion(bm, mem); + object_unparent(OBJECT(mem)); + } + + if (!(war & PIWAR_EN)) { + /* Not enabled, nothing to do */ + return; + } + + name = g_strdup_printf("PCI Inbound Window %d", idx); + memory_region_init_alias(mem, OBJECT(pci), name, address_space_mem, tar, + size); + memory_region_add_subregion_overlap(bm, wbar, mem, -1); + g_free(name); + + pci_debug("%s: Added window of size=%#lx from PCI=%#lx to CPU=%#lx\n", + __func__, size, wbar, tar); +} + +/* BAR mapping */ +static void e500_update_pow(PPCE500PCIState *pci, int idx) +{ + uint64_t tar = ((uint64_t)pci->pob[idx].potar) << 12; + uint64_t wbar = ((uint64_t)pci->pob[idx].powbar) << 12; + uint64_t war = pci->pob[idx].powar; + uint64_t size = 2ULL << (war & PIWAR_SZ_MASK); + MemoryRegion *mem = &pci->pob[idx].mem; + MemoryRegion *address_space_mem = get_system_memory(); + char *name; + + if (memory_region_is_mapped(mem)) { + /* Before we modify anything, unmap and destroy the region */ + memory_region_del_subregion(address_space_mem, mem); + object_unparent(OBJECT(mem)); + } + + if (!(war & PIWAR_EN)) { + /* Not enabled, nothing to do */ + return; + } + + name = g_strdup_printf("PCI Outbound Window %d", idx); + memory_region_init_alias(mem, OBJECT(pci), name, &pci->busmem, tar, + size); + memory_region_add_subregion(address_space_mem, wbar, mem); + g_free(name); + + pci_debug("%s: Added window of size=%#lx from CPU=%#lx to PCI=%#lx\n", + __func__, size, wbar, tar); +} + static void pci_reg_write4(void *opaque, hwaddr addr, uint64_t value, unsigned size) { @@ -199,18 +276,22 @@ static void pci_reg_write4(void *opaque, hwaddr addr, case PPCE500_PCI_OW3: case PPCE500_PCI_OW4: idx = (addr >> 5) & 0x7; - switch (addr & 0xC) { + switch (addr & 0x1F) { case PCI_POTAR: pci->pob[idx].potar = value; + e500_update_pow(pci, idx); break; case PCI_POTEAR: pci->pob[idx].potear = value; + e500_update_pow(pci, idx); break; case PCI_POWBAR: pci->pob[idx].powbar = value; + e500_update_pow(pci, idx); break; case PCI_POWAR: pci->pob[idx].powar = value; + e500_update_pow(pci, idx); break; default: break; @@ -221,18 +302,22 @@ static void pci_reg_write4(void *opaque, hwaddr addr, case PPCE500_PCI_IW2: case PPCE500_PCI_IW1: idx = ((addr >> 5) & 0x3) - 1; - switch (addr & 0xC) { + switch (addr & 0x1F) { case PCI_PITAR: pci->pib[idx].pitar = value; + e500_update_piw(pci, idx); break; case PCI_PIWBAR: pci->pib[idx].piwbar = value; + e500_update_piw(pci, idx); break; case PCI_PIWBEAR: pci->pib[idx].piwbear = value; + e500_update_piw(pci, idx); break; case PCI_PIWAR: pci->pib[idx].piwar = value; + e500_update_piw(pci, idx); break; default: break; @@ -349,13 +434,20 @@ static int e500_pcihost_bridge_initfn(PCIDevice *d) return 0; } +static AddressSpace *e500_pcihost_set_iommu(PCIBus *bus, void *opaque, + int devfn) +{ + PPCE500PCIState *s = opaque; + + return &s->bm_as; +} + static int e500_pcihost_initfn(SysBusDevice *dev) { PCIHostState *h; PPCE500PCIState *s; PCIBus *b; int i; - MemoryRegion *address_space_mem = get_system_memory(); h = PCI_HOST_BRIDGE(dev); s = PPC_E500_PCI_HOST_BRIDGE(dev); @@ -369,12 +461,22 @@ static int e500_pcihost_initfn(SysBusDevice *dev) } memory_region_init(&s->pio, OBJECT(s), "pci-pio", PCIE500_PCI_IOLEN); + memory_region_init(&s->busmem, OBJECT(s), "pci bus memory", UINT64_MAX); + + /* PIO lives at the bottom of our bus space */ + memory_region_add_subregion_overlap(&s->busmem, 0, &s->pio, -2); b = pci_register_bus(DEVICE(dev), NULL, mpc85xx_pci_set_irq, - mpc85xx_pci_map_irq, s, address_space_mem, - &s->pio, PCI_DEVFN(s->first_slot, 0), 4, TYPE_PCI_BUS); + mpc85xx_pci_map_irq, s, &s->busmem, &s->pio, + PCI_DEVFN(s->first_slot, 0), 4, TYPE_PCI_BUS); h->bus = b; + /* Set up PCI view of memory */ + memory_region_init(&s->bm, OBJECT(s), "bm-e500", UINT64_MAX); + memory_region_add_subregion(&s->bm, 0x0, &s->busmem); + address_space_init(&s->bm_as, &s->bm, "pci-bm"); + pci_setup_iommu(b, e500_pcihost_set_iommu, s); + pci_create_simple(b, 0, "e500-host-bridge"); memory_region_init(&s->container, OBJECT(h), "pci-container", PCIE500_ALL_SIZE); @@ -388,7 +490,6 @@ static int e500_pcihost_initfn(SysBusDevice *dev) memory_region_add_subregion(&s->container, PCIE500_CFGDATA, &h->data_mem); memory_region_add_subregion(&s->container, PCIE500_REG_BASE, &s->iomem); sysbus_init_mmio(dev, &s->container); - sysbus_init_mmio(dev, &s->pio); pci_bus_set_route_irq_fn(b, e500_route_intx_pin_to_irq); return 0; diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c index 1aaa5154d1..a2e60b4896 100644 --- a/hw/ppc/e500.c +++ b/hw/ppc/e500.c @@ -288,8 +288,8 @@ static int ppce500_load_device_tree(MachineState *machine, int len; uint32_t pci_ranges[14] = { - 0x2000000, 0x0, 0xc0000000, - 0x0, 0xc0000000, + 0x2000000, 0x0, params->pci_mmio_bus_base, + params->pci_mmio_base >> 32, params->pci_mmio_base, 0x0, 0x20000000, 0x1000000, 0x0, 0x0, @@ -915,8 +915,6 @@ void ppce500_init(MachineState *machine, PPCE500Params *params) if (!pci_bus) printf("couldn't create PCI controller!\n"); - sysbus_mmio_map(SYS_BUS_DEVICE(dev), 1, params->pci_pio_base); - if (pci_bus) { /* Register network interfaces. */ for (i = 0; i < nb_nics; i++) { diff --git a/hw/ppc/e500.h b/hw/ppc/e500.h index d96f72d484..ef224ea5e6 100644 --- a/hw/ppc/e500.h +++ b/hw/ppc/e500.h @@ -19,6 +19,8 @@ typedef struct PPCE500Params { int platform_bus_num_irqs; hwaddr ccsrbar_base; hwaddr pci_pio_base; + hwaddr pci_mmio_base; + hwaddr pci_mmio_bus_base; hwaddr spin_base; } PPCE500Params; diff --git a/hw/ppc/e500plat.c b/hw/ppc/e500plat.c index 1b8a68d223..14b14eaa7d 100644 --- a/hw/ppc/e500plat.c +++ b/hw/ppc/e500plat.c @@ -43,6 +43,8 @@ static void e500plat_init(MachineState *machine) .platform_bus_num_irqs = 10, .ccsrbar_base = 0xFE0000000ULL, .pci_pio_base = 0xFE1000000ULL, + .pci_mmio_base = 0xC00000000ULL, + .pci_mmio_bus_base = 0xE0000000ULL, .spin_base = 0xFEF000000ULL, }; diff --git a/hw/ppc/mpc8544ds.c b/hw/ppc/mpc8544ds.c index fb74b3ff80..3a3b141e43 100644 --- a/hw/ppc/mpc8544ds.c +++ b/hw/ppc/mpc8544ds.c @@ -35,6 +35,8 @@ static void mpc8544ds_init(MachineState *machine) .fixup_devtree = mpc8544ds_fixup_devtree, .mpic_version = OPENPIC_MODEL_FSL_MPIC_20, .ccsrbar_base = 0xE0000000ULL, + .pci_mmio_base = 0xC0000000ULL, + .pci_mmio_bus_base = 0xC0000000ULL, .pci_pio_base = 0xE1000000ULL, .spin_base = 0xEF000000ULL, }; From 2791128e2fa8b96d0b81622404655529b0b4fd4d Mon Sep 17 00:00:00 2001 From: Tom Musta Date: Mon, 17 Nov 2014 14:58:31 -0600 Subject: [PATCH 05/37] target-ppc: Load/Store Vector Element Storage Alignment The Load Vector Element Indexed and Store Vector Element Indexed instructions compute an effective address in the usual manner. However, they truncate that address to the natural boundary. For example, the lvewx instruction will ignore the least significant two bits of the address and thus load the aligned word of storage. Fix the generators for these instruction to properly perform this truncation. Signed-off-by: Tom Musta Signed-off-by: Alexander Graf --- target-ppc/translate.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/target-ppc/translate.c b/target-ppc/translate.c index d381632c86..fe36b5816e 100644 --- a/target-ppc/translate.c +++ b/target-ppc/translate.c @@ -6743,7 +6743,7 @@ static void gen_st##name(DisasContext *ctx) \ tcg_temp_free(EA); \ } -#define GEN_VR_LVE(name, opc2, opc3) \ +#define GEN_VR_LVE(name, opc2, opc3, size) \ static void gen_lve##name(DisasContext *ctx) \ { \ TCGv EA; \ @@ -6755,13 +6755,16 @@ static void gen_lve##name(DisasContext *ctx) \ gen_set_access_type(ctx, ACCESS_INT); \ EA = tcg_temp_new(); \ gen_addr_reg_index(ctx, EA); \ + if (size > 1) { \ + tcg_gen_andi_tl(EA, EA, ~(size - 1)); \ + } \ rs = gen_avr_ptr(rS(ctx->opcode)); \ gen_helper_lve##name(cpu_env, rs, EA); \ tcg_temp_free(EA); \ tcg_temp_free_ptr(rs); \ } -#define GEN_VR_STVE(name, opc2, opc3) \ +#define GEN_VR_STVE(name, opc2, opc3, size) \ static void gen_stve##name(DisasContext *ctx) \ { \ TCGv EA; \ @@ -6773,6 +6776,9 @@ static void gen_stve##name(DisasContext *ctx) \ gen_set_access_type(ctx, ACCESS_INT); \ EA = tcg_temp_new(); \ gen_addr_reg_index(ctx, EA); \ + if (size > 1) { \ + tcg_gen_andi_tl(EA, EA, ~(size - 1)); \ + } \ rs = gen_avr_ptr(rS(ctx->opcode)); \ gen_helper_stve##name(cpu_env, rs, EA); \ tcg_temp_free(EA); \ @@ -6783,17 +6789,17 @@ GEN_VR_LDX(lvx, 0x07, 0x03); /* As we don't emulate the cache, lvxl is stricly equivalent to lvx */ GEN_VR_LDX(lvxl, 0x07, 0x0B); -GEN_VR_LVE(bx, 0x07, 0x00); -GEN_VR_LVE(hx, 0x07, 0x01); -GEN_VR_LVE(wx, 0x07, 0x02); +GEN_VR_LVE(bx, 0x07, 0x00, 1); +GEN_VR_LVE(hx, 0x07, 0x01, 2); +GEN_VR_LVE(wx, 0x07, 0x02, 4); GEN_VR_STX(svx, 0x07, 0x07); /* As we don't emulate the cache, stvxl is stricly equivalent to stvx */ GEN_VR_STX(svxl, 0x07, 0x0F); -GEN_VR_STVE(bx, 0x07, 0x04); -GEN_VR_STVE(hx, 0x07, 0x05); -GEN_VR_STVE(wx, 0x07, 0x06); +GEN_VR_STVE(bx, 0x07, 0x04, 1); +GEN_VR_STVE(hx, 0x07, 0x05, 2); +GEN_VR_STVE(wx, 0x07, 0x06, 4); static void gen_lvsl(DisasContext *ctx) { From b748863a7f7d2996255dd2cb5a20e49785cc7387 Mon Sep 17 00:00:00 2001 From: Tom Musta Date: Wed, 12 Nov 2014 15:45:59 -0600 Subject: [PATCH 06/37] target-ppc: VXSQRT Should Not Be Set for NaNs The Power ISA square root instructions (fsqrt[s], frsqrte[s]) must set the FPSCR[VXSQRT] flag when operating on a negative value. However, NaNs have no sign and therefore this flag should not be set when operating on one. Change the order of the checks in the helper code. Move the SNaN-to-QNaN macro to the top of the file so that it can be re-used. Signed-off-by: Tom Musta Signed-off-by: Alexander Graf --- target-ppc/fpu_helper.c | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/target-ppc/fpu_helper.c b/target-ppc/fpu_helper.c index 7f74466f32..81db60f1db 100644 --- a/target-ppc/fpu_helper.c +++ b/target-ppc/fpu_helper.c @@ -19,6 +19,9 @@ #include "cpu.h" #include "exec/helper-proto.h" +#define float64_snan_to_qnan(x) ((x) | 0x0008000000000000ULL) +#define float32_snan_to_qnan(x) ((x) | 0x00400000) + /*****************************************************************************/ /* Floating point operations helpers */ uint64_t helper_float32_to_float64(CPUPPCState *env, uint32_t arg) @@ -920,14 +923,16 @@ uint64_t helper_fsqrt(CPUPPCState *env, uint64_t arg) farg.ll = arg; - if (unlikely(float64_is_neg(farg.d) && !float64_is_zero(farg.d))) { + if (unlikely(float64_is_any_nan(farg.d))) { + if (unlikely(float64_is_signaling_nan(farg.d))) { + /* sNaN reciprocal square root */ + fload_invalid_op_excp(env, POWERPC_EXCP_FP_VXSNAN, 1); + farg.ll = float64_snan_to_qnan(farg.ll); + } + } else if (unlikely(float64_is_neg(farg.d) && !float64_is_zero(farg.d))) { /* Square root of a negative nonzero number */ farg.ll = fload_invalid_op_excp(env, POWERPC_EXCP_FP_VXSQRT, 1); } else { - if (unlikely(float64_is_signaling_nan(farg.d))) { - /* sNaN square root */ - fload_invalid_op_excp(env, POWERPC_EXCP_FP_VXSNAN, 1); - } farg.d = float64_sqrt(farg.d, &env->fp_status); } return farg.ll; @@ -974,17 +979,20 @@ uint64_t helper_frsqrte(CPUPPCState *env, uint64_t arg) farg.ll = arg; - if (unlikely(float64_is_neg(farg.d) && !float64_is_zero(farg.d))) { - /* Reciprocal square root of a negative nonzero number */ - farg.ll = fload_invalid_op_excp(env, POWERPC_EXCP_FP_VXSQRT, 1); - } else { + if (unlikely(float64_is_any_nan(farg.d))) { if (unlikely(float64_is_signaling_nan(farg.d))) { /* sNaN reciprocal square root */ fload_invalid_op_excp(env, POWERPC_EXCP_FP_VXSNAN, 1); + farg.ll = float64_snan_to_qnan(farg.ll); } + } else if (unlikely(float64_is_neg(farg.d) && !float64_is_zero(farg.d))) { + /* Reciprocal square root of a negative nonzero number */ + farg.ll = fload_invalid_op_excp(env, POWERPC_EXCP_FP_VXSQRT, 1); + } else { farg.d = float64_sqrt(farg.d, &env->fp_status); farg.d = float64_div(float64_one, farg.d, &env->fp_status); } + return farg.ll; } @@ -2382,9 +2390,6 @@ void helper_##op(CPUPPCState *env, uint32_t opcode) \ VSX_SCALAR_CMP(xscmpodp, 1) VSX_SCALAR_CMP(xscmpudp, 0) -#define float64_snan_to_qnan(x) ((x) | 0x0008000000000000ULL) -#define float32_snan_to_qnan(x) ((x) | 0x00400000) - /* VSX_MAX_MIN - VSX floating point maximum/minimum * name - instruction mnemonic * op - operation (max or min) From 4814f2d116c057d6fdfd57f3b979c77d5668e878 Mon Sep 17 00:00:00 2001 From: Tom Musta Date: Wed, 12 Nov 2014 15:46:00 -0600 Subject: [PATCH 07/37] target-ppc: Fix Floating Point Move Instructions That Set CR1 The Floating Point Move instructions (fmr., fabs., fnabs., fneg., and fcpsgn.) incorrectly copy FPSCR[FPCC] instead of [FX,FEX,VX,OX]. Furthermore, the current code does this via a call to gen_compute_fprf, which is awkward since these instructions do not actually set FPRF. Change the code to use the gen_set_cr1_from_fpscr utility. Signed-off-by: Tom Musta [agraf: whitespace fixes] Signed-off-by: Alexander Graf --- target-ppc/translate.c | 50 +++++++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/target-ppc/translate.c b/target-ppc/translate.c index fe36b5816e..35c3a16091 100644 --- a/target-ppc/translate.c +++ b/target-ppc/translate.c @@ -2077,6 +2077,21 @@ static void gen_srd(DisasContext *ctx) } #endif +#if defined(TARGET_PPC64) +static void gen_set_cr1_from_fpscr(DisasContext *ctx) +{ + TCGv_i32 tmp = tcg_temp_new_i32(); + tcg_gen_trunc_tl_i32(tmp, cpu_fpscr); + tcg_gen_shri_i32(cpu_crf[1], tmp, 28); + tcg_temp_free_i32(tmp); +} +#else +static void gen_set_cr1_from_fpscr(DisasContext *ctx) +{ + tcg_gen_shri_tl(cpu_crf[1], cpu_fpscr, 28); +} +#endif + /*** Floating-Point arithmetic ***/ #define _GEN_FLOAT_ACB(name, op, op1, op2, isfloat, set_fprf, type) \ static void gen_f##name(DisasContext *ctx) \ @@ -2370,7 +2385,9 @@ static void gen_fabs(DisasContext *ctx) } tcg_gen_andi_i64(cpu_fpr[rD(ctx->opcode)], cpu_fpr[rB(ctx->opcode)], ~(1ULL << 63)); - gen_compute_fprf(cpu_fpr[rD(ctx->opcode)], 0, Rc(ctx->opcode) != 0); + if (unlikely(Rc(ctx->opcode))) { + gen_set_cr1_from_fpscr(ctx); + } } /* fmr - fmr. */ @@ -2382,7 +2399,9 @@ static void gen_fmr(DisasContext *ctx) return; } tcg_gen_mov_i64(cpu_fpr[rD(ctx->opcode)], cpu_fpr[rB(ctx->opcode)]); - gen_compute_fprf(cpu_fpr[rD(ctx->opcode)], 0, Rc(ctx->opcode) != 0); + if (unlikely(Rc(ctx->opcode))) { + gen_set_cr1_from_fpscr(ctx); + } } /* fnabs */ @@ -2395,7 +2414,9 @@ static void gen_fnabs(DisasContext *ctx) } tcg_gen_ori_i64(cpu_fpr[rD(ctx->opcode)], cpu_fpr[rB(ctx->opcode)], 1ULL << 63); - gen_compute_fprf(cpu_fpr[rD(ctx->opcode)], 0, Rc(ctx->opcode) != 0); + if (unlikely(Rc(ctx->opcode))) { + gen_set_cr1_from_fpscr(ctx); + } } /* fneg */ @@ -2408,7 +2429,9 @@ static void gen_fneg(DisasContext *ctx) } tcg_gen_xori_i64(cpu_fpr[rD(ctx->opcode)], cpu_fpr[rB(ctx->opcode)], 1ULL << 63); - gen_compute_fprf(cpu_fpr[rD(ctx->opcode)], 0, Rc(ctx->opcode) != 0); + if (unlikely(Rc(ctx->opcode))) { + gen_set_cr1_from_fpscr(ctx); + } } /* fcpsgn: PowerPC 2.05 specification */ @@ -2421,7 +2444,9 @@ static void gen_fcpsgn(DisasContext *ctx) } tcg_gen_deposit_i64(cpu_fpr[rD(ctx->opcode)], cpu_fpr[rA(ctx->opcode)], cpu_fpr[rB(ctx->opcode)], 0, 63); - gen_compute_fprf(cpu_fpr[rD(ctx->opcode)], 0, Rc(ctx->opcode) != 0); + if (unlikely(Rc(ctx->opcode))) { + gen_set_cr1_from_fpscr(ctx); + } } static void gen_fmrgew(DisasContext *ctx) @@ -8211,21 +8236,6 @@ static inline TCGv_ptr gen_fprp_ptr(int reg) return r; } -#if defined(TARGET_PPC64) -static void gen_set_cr1_from_fpscr(DisasContext *ctx) -{ - TCGv_i32 tmp = tcg_temp_new_i32(); - tcg_gen_trunc_tl_i32(tmp, cpu_fpscr); - tcg_gen_shri_i32(cpu_crf[1], tmp, 28); - tcg_temp_free_i32(tmp); -} -#else -static void gen_set_cr1_from_fpscr(DisasContext *ctx) -{ - tcg_gen_shri_tl(cpu_crf[1], cpu_fpscr, 28); -} -#endif - #define GEN_DFP_T_A_B_Rc(name) \ static void gen_##name(DisasContext *ctx) \ { \ From 14ba79c73a1c2db78becef171ec2f73606c1d7e1 Mon Sep 17 00:00:00 2001 From: Tom Musta Date: Wed, 12 Nov 2014 15:46:01 -0600 Subject: [PATCH 08/37] target-ppc: mffs. Should Set CR1 from FPSCR Bits Update the Move From FPSCR (mffs.) instruction to correctly set CR[1] from FPSCR[FX,FEX,VX,OX]. Signed-off-by: Tom Musta Signed-off-by: Alexander Graf --- target-ppc/translate.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/target-ppc/translate.c b/target-ppc/translate.c index 35c3a16091..32c9f49fe0 100644 --- a/target-ppc/translate.c +++ b/target-ppc/translate.c @@ -2504,7 +2504,9 @@ static void gen_mffs(DisasContext *ctx) } gen_reset_fpstatus(); tcg_gen_extu_tl_i64(cpu_fpr[rD(ctx->opcode)], cpu_fpscr); - gen_compute_fprf(cpu_fpr[rD(ctx->opcode)], 0, Rc(ctx->opcode) != 0); + if (unlikely(Rc(ctx->opcode))) { + gen_set_cr1_from_fpscr(ctx); + } } /* mtfsb0 */ From 00e6fd3e03b8df5553c6ea02bd95630549b0e2d1 Mon Sep 17 00:00:00 2001 From: Tom Musta Date: Wed, 12 Nov 2014 15:46:02 -0600 Subject: [PATCH 09/37] target-ppc: Fully Migrate to gen_set_cr1_from_fpscr Eliminate the set_rc argument from the gen_compute_fprf utility and the corresponding (and incorrect) implementation. Replace it with calls to the gen_set_cr1_from_fpscr() utility. Signed-off-by: Tom Musta Signed-off-by: Alexander Graf --- target-ppc/translate.c | 55 +++++++++++++++++++++++++----------------- 1 file changed, 33 insertions(+), 22 deletions(-) diff --git a/target-ppc/translate.c b/target-ppc/translate.c index 32c9f49fe0..18cd8c4a85 100644 --- a/target-ppc/translate.c +++ b/target-ppc/translate.c @@ -250,7 +250,7 @@ static inline void gen_reset_fpstatus(void) gen_helper_reset_fpstatus(cpu_env); } -static inline void gen_compute_fprf(TCGv_i64 arg, int set_fprf, int set_rc) +static inline void gen_compute_fprf(TCGv_i64 arg, int set_fprf) { TCGv_i32 t0 = tcg_temp_new_i32(); @@ -258,15 +258,7 @@ static inline void gen_compute_fprf(TCGv_i64 arg, int set_fprf, int set_rc) /* This case might be optimized later */ tcg_gen_movi_i32(t0, 1); gen_helper_compute_fprf(t0, cpu_env, arg, t0); - if (unlikely(set_rc)) { - tcg_gen_mov_i32(cpu_crf[1], t0); - } gen_helper_float_check_status(cpu_env); - } else if (unlikely(set_rc)) { - /* We always need to compute fpcc */ - tcg_gen_movi_i32(t0, 0); - gen_helper_compute_fprf(t0, cpu_env, arg, t0); - tcg_gen_mov_i32(cpu_crf[1], t0); } tcg_temp_free_i32(t0); @@ -2110,8 +2102,10 @@ static void gen_f##name(DisasContext *ctx) \ gen_helper_frsp(cpu_fpr[rD(ctx->opcode)], cpu_env, \ cpu_fpr[rD(ctx->opcode)]); \ } \ - gen_compute_fprf(cpu_fpr[rD(ctx->opcode)], set_fprf, \ - Rc(ctx->opcode) != 0); \ + gen_compute_fprf(cpu_fpr[rD(ctx->opcode)], set_fprf); \ + if (unlikely(Rc(ctx->opcode) != 0)) { \ + gen_set_cr1_from_fpscr(ctx); \ + } \ } #define GEN_FLOAT_ACB(name, op2, set_fprf, type) \ @@ -2135,8 +2129,10 @@ static void gen_f##name(DisasContext *ctx) \ gen_helper_frsp(cpu_fpr[rD(ctx->opcode)], cpu_env, \ cpu_fpr[rD(ctx->opcode)]); \ } \ - gen_compute_fprf(cpu_fpr[rD(ctx->opcode)], \ - set_fprf, Rc(ctx->opcode) != 0); \ + gen_compute_fprf(cpu_fpr[rD(ctx->opcode)], set_fprf); \ + if (unlikely(Rc(ctx->opcode) != 0)) { \ + gen_set_cr1_from_fpscr(ctx); \ + } \ } #define GEN_FLOAT_AB(name, op2, inval, set_fprf, type) \ _GEN_FLOAT_AB(name, name, 0x3F, op2, inval, 0, set_fprf, type); \ @@ -2159,8 +2155,10 @@ static void gen_f##name(DisasContext *ctx) \ gen_helper_frsp(cpu_fpr[rD(ctx->opcode)], cpu_env, \ cpu_fpr[rD(ctx->opcode)]); \ } \ - gen_compute_fprf(cpu_fpr[rD(ctx->opcode)], \ - set_fprf, Rc(ctx->opcode) != 0); \ + gen_compute_fprf(cpu_fpr[rD(ctx->opcode)], set_fprf); \ + if (unlikely(Rc(ctx->opcode) != 0)) { \ + gen_set_cr1_from_fpscr(ctx); \ + } \ } #define GEN_FLOAT_AC(name, op2, inval, set_fprf, type) \ _GEN_FLOAT_AC(name, name, 0x3F, op2, inval, 0, set_fprf, type); \ @@ -2178,8 +2176,10 @@ static void gen_f##name(DisasContext *ctx) \ gen_reset_fpstatus(); \ gen_helper_f##name(cpu_fpr[rD(ctx->opcode)], cpu_env, \ cpu_fpr[rB(ctx->opcode)]); \ - gen_compute_fprf(cpu_fpr[rD(ctx->opcode)], \ - set_fprf, Rc(ctx->opcode) != 0); \ + gen_compute_fprf(cpu_fpr[rD(ctx->opcode)], set_fprf); \ + if (unlikely(Rc(ctx->opcode) != 0)) { \ + gen_set_cr1_from_fpscr(ctx); \ + } \ } #define GEN_FLOAT_BS(name, op1, op2, set_fprf, type) \ @@ -2194,8 +2194,10 @@ static void gen_f##name(DisasContext *ctx) \ gen_reset_fpstatus(); \ gen_helper_f##name(cpu_fpr[rD(ctx->opcode)], cpu_env, \ cpu_fpr[rB(ctx->opcode)]); \ - gen_compute_fprf(cpu_fpr[rD(ctx->opcode)], \ - set_fprf, Rc(ctx->opcode) != 0); \ + gen_compute_fprf(cpu_fpr[rD(ctx->opcode)], set_fprf); \ + if (unlikely(Rc(ctx->opcode) != 0)) { \ + gen_set_cr1_from_fpscr(ctx); \ + } \ } /* fadd - fadds */ @@ -2228,7 +2230,10 @@ static void gen_frsqrtes(DisasContext *ctx) cpu_fpr[rB(ctx->opcode)]); gen_helper_frsp(cpu_fpr[rD(ctx->opcode)], cpu_env, cpu_fpr[rD(ctx->opcode)]); - gen_compute_fprf(cpu_fpr[rD(ctx->opcode)], 1, Rc(ctx->opcode) != 0); + gen_compute_fprf(cpu_fpr[rD(ctx->opcode)], 1); + if (unlikely(Rc(ctx->opcode) != 0)) { + gen_set_cr1_from_fpscr(ctx); + } } /* fsel */ @@ -2249,7 +2254,10 @@ static void gen_fsqrt(DisasContext *ctx) gen_reset_fpstatus(); gen_helper_fsqrt(cpu_fpr[rD(ctx->opcode)], cpu_env, cpu_fpr[rB(ctx->opcode)]); - gen_compute_fprf(cpu_fpr[rD(ctx->opcode)], 1, Rc(ctx->opcode) != 0); + gen_compute_fprf(cpu_fpr[rD(ctx->opcode)], 1); + if (unlikely(Rc(ctx->opcode) != 0)) { + gen_set_cr1_from_fpscr(ctx); + } } static void gen_fsqrts(DisasContext *ctx) @@ -2265,7 +2273,10 @@ static void gen_fsqrts(DisasContext *ctx) cpu_fpr[rB(ctx->opcode)]); gen_helper_frsp(cpu_fpr[rD(ctx->opcode)], cpu_env, cpu_fpr[rD(ctx->opcode)]); - gen_compute_fprf(cpu_fpr[rD(ctx->opcode)], 1, Rc(ctx->opcode) != 0); + gen_compute_fprf(cpu_fpr[rD(ctx->opcode)], 1); + if (unlikely(Rc(ctx->opcode) != 0)) { + gen_set_cr1_from_fpscr(ctx); + } } /*** Floating-Point multiply-and-add ***/ From 7d45556effa4bf1557ba765b6b94390fb7d06615 Mon Sep 17 00:00:00 2001 From: Tom Musta Date: Wed, 12 Nov 2014 15:46:03 -0600 Subject: [PATCH 10/37] target-ppc: Eliminate set_fprf Argument From gen_compute_fprf The set_fprf argument to the gen_compute_fprf() utility is no longer needed -- gen_compute_fprf() is now called only when FPRF is actually computed and set. Eliminate the obsolete argument. Signed-off-by: Tom Musta Signed-off-by: Alexander Graf --- target-ppc/translate.c | 38 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/target-ppc/translate.c b/target-ppc/translate.c index 18cd8c4a85..598f02eef7 100644 --- a/target-ppc/translate.c +++ b/target-ppc/translate.c @@ -250,16 +250,14 @@ static inline void gen_reset_fpstatus(void) gen_helper_reset_fpstatus(cpu_env); } -static inline void gen_compute_fprf(TCGv_i64 arg, int set_fprf) +static inline void gen_compute_fprf(TCGv_i64 arg) { TCGv_i32 t0 = tcg_temp_new_i32(); - if (set_fprf != 0) { - /* This case might be optimized later */ - tcg_gen_movi_i32(t0, 1); - gen_helper_compute_fprf(t0, cpu_env, arg, t0); - gen_helper_float_check_status(cpu_env); - } + /* This case might be optimized later */ + tcg_gen_movi_i32(t0, 1); + gen_helper_compute_fprf(t0, cpu_env, arg, t0); + gen_helper_float_check_status(cpu_env); tcg_temp_free_i32(t0); } @@ -2102,7 +2100,9 @@ static void gen_f##name(DisasContext *ctx) \ gen_helper_frsp(cpu_fpr[rD(ctx->opcode)], cpu_env, \ cpu_fpr[rD(ctx->opcode)]); \ } \ - gen_compute_fprf(cpu_fpr[rD(ctx->opcode)], set_fprf); \ + if (set_fprf) { \ + gen_compute_fprf(cpu_fpr[rD(ctx->opcode)]); \ + } \ if (unlikely(Rc(ctx->opcode) != 0)) { \ gen_set_cr1_from_fpscr(ctx); \ } \ @@ -2129,7 +2129,9 @@ static void gen_f##name(DisasContext *ctx) \ gen_helper_frsp(cpu_fpr[rD(ctx->opcode)], cpu_env, \ cpu_fpr[rD(ctx->opcode)]); \ } \ - gen_compute_fprf(cpu_fpr[rD(ctx->opcode)], set_fprf); \ + if (set_fprf) { \ + gen_compute_fprf(cpu_fpr[rD(ctx->opcode)]); \ + } \ if (unlikely(Rc(ctx->opcode) != 0)) { \ gen_set_cr1_from_fpscr(ctx); \ } \ @@ -2155,7 +2157,9 @@ static void gen_f##name(DisasContext *ctx) \ gen_helper_frsp(cpu_fpr[rD(ctx->opcode)], cpu_env, \ cpu_fpr[rD(ctx->opcode)]); \ } \ - gen_compute_fprf(cpu_fpr[rD(ctx->opcode)], set_fprf); \ + if (set_fprf) { \ + gen_compute_fprf(cpu_fpr[rD(ctx->opcode)]); \ + } \ if (unlikely(Rc(ctx->opcode) != 0)) { \ gen_set_cr1_from_fpscr(ctx); \ } \ @@ -2176,7 +2180,9 @@ static void gen_f##name(DisasContext *ctx) \ gen_reset_fpstatus(); \ gen_helper_f##name(cpu_fpr[rD(ctx->opcode)], cpu_env, \ cpu_fpr[rB(ctx->opcode)]); \ - gen_compute_fprf(cpu_fpr[rD(ctx->opcode)], set_fprf); \ + if (set_fprf) { \ + gen_compute_fprf(cpu_fpr[rD(ctx->opcode)]); \ + } \ if (unlikely(Rc(ctx->opcode) != 0)) { \ gen_set_cr1_from_fpscr(ctx); \ } \ @@ -2194,7 +2200,9 @@ static void gen_f##name(DisasContext *ctx) \ gen_reset_fpstatus(); \ gen_helper_f##name(cpu_fpr[rD(ctx->opcode)], cpu_env, \ cpu_fpr[rB(ctx->opcode)]); \ - gen_compute_fprf(cpu_fpr[rD(ctx->opcode)], set_fprf); \ + if (set_fprf) { \ + gen_compute_fprf(cpu_fpr[rD(ctx->opcode)]); \ + } \ if (unlikely(Rc(ctx->opcode) != 0)) { \ gen_set_cr1_from_fpscr(ctx); \ } \ @@ -2230,7 +2238,7 @@ static void gen_frsqrtes(DisasContext *ctx) cpu_fpr[rB(ctx->opcode)]); gen_helper_frsp(cpu_fpr[rD(ctx->opcode)], cpu_env, cpu_fpr[rD(ctx->opcode)]); - gen_compute_fprf(cpu_fpr[rD(ctx->opcode)], 1); + gen_compute_fprf(cpu_fpr[rD(ctx->opcode)]); if (unlikely(Rc(ctx->opcode) != 0)) { gen_set_cr1_from_fpscr(ctx); } @@ -2254,7 +2262,7 @@ static void gen_fsqrt(DisasContext *ctx) gen_reset_fpstatus(); gen_helper_fsqrt(cpu_fpr[rD(ctx->opcode)], cpu_env, cpu_fpr[rB(ctx->opcode)]); - gen_compute_fprf(cpu_fpr[rD(ctx->opcode)], 1); + gen_compute_fprf(cpu_fpr[rD(ctx->opcode)]); if (unlikely(Rc(ctx->opcode) != 0)) { gen_set_cr1_from_fpscr(ctx); } @@ -2273,7 +2281,7 @@ static void gen_fsqrts(DisasContext *ctx) cpu_fpr[rB(ctx->opcode)]); gen_helper_frsp(cpu_fpr[rD(ctx->opcode)], cpu_env, cpu_fpr[rD(ctx->opcode)]); - gen_compute_fprf(cpu_fpr[rD(ctx->opcode)], 1); + gen_compute_fprf(cpu_fpr[rD(ctx->opcode)]); if (unlikely(Rc(ctx->opcode) != 0)) { gen_set_cr1_from_fpscr(ctx); } From 58dd0a478784d4b732a695eb23bf88f4bbf33f5f Mon Sep 17 00:00:00 2001 From: Tom Musta Date: Wed, 12 Nov 2014 15:46:04 -0600 Subject: [PATCH 11/37] target-ppc: Eliminate set_fprf Argument From helper_compute_fprf The set_fprf argument to the helper_compute_fprf helper function is no longer necessary -- the helper is only invoked when FPSCR[FPRF] is going to be set. Eliminate the unnecessary argument from the function signature and its corresponding implementation. Change the return value of the helper to "void". Update the name of the local variable "ret" to "fprf", which now makes more sense. Signed-off-by: Tom Musta Signed-off-by: Alexander Graf --- target-ppc/fpu_helper.c | 56 +++++++++++++++++++---------------------- target-ppc/helper.h | 2 +- target-ppc/translate.c | 8 +----- 3 files changed, 28 insertions(+), 38 deletions(-) diff --git a/target-ppc/fpu_helper.c b/target-ppc/fpu_helper.c index 81db60f1db..6cceffc556 100644 --- a/target-ppc/fpu_helper.c +++ b/target-ppc/fpu_helper.c @@ -63,59 +63,55 @@ static inline int ppc_float64_get_unbiased_exp(float64 f) return ((f >> 52) & 0x7FF) - 1023; } -uint32_t helper_compute_fprf(CPUPPCState *env, uint64_t arg, uint32_t set_fprf) +void helper_compute_fprf(CPUPPCState *env, uint64_t arg) { CPU_DoubleU farg; int isneg; - int ret; + int fprf; farg.ll = arg; isneg = float64_is_neg(farg.d); if (unlikely(float64_is_any_nan(farg.d))) { if (float64_is_signaling_nan(farg.d)) { /* Signaling NaN: flags are undefined */ - ret = 0x00; + fprf = 0x00; } else { /* Quiet NaN */ - ret = 0x11; + fprf = 0x11; } } else if (unlikely(float64_is_infinity(farg.d))) { /* +/- infinity */ if (isneg) { - ret = 0x09; + fprf = 0x09; } else { - ret = 0x05; + fprf = 0x05; } } else { if (float64_is_zero(farg.d)) { /* +/- zero */ if (isneg) { - ret = 0x12; + fprf = 0x12; } else { - ret = 0x02; + fprf = 0x02; } } else { if (isden(farg.d)) { /* Denormalized numbers */ - ret = 0x10; + fprf = 0x10; } else { /* Normalized numbers */ - ret = 0x00; + fprf = 0x00; } if (isneg) { - ret |= 0x08; + fprf |= 0x08; } else { - ret |= 0x04; + fprf |= 0x04; } } } - if (set_fprf) { - /* We update FPSCR_FPRF */ - env->fpscr &= ~(0x1F << FPSCR_FPRF); - env->fpscr |= ret << FPSCR_FPRF; - } - /* We just need fpcc to update Rc1 */ - return ret & 0xF; + /* We update FPSCR_FPRF */ + env->fpscr &= ~(0x1F << FPSCR_FPRF); + env->fpscr |= fprf << FPSCR_FPRF; } /* Floating-point invalid operations exception */ @@ -1853,7 +1849,7 @@ void helper_##name(CPUPPCState *env, uint32_t opcode) \ } \ \ if (sfprf) { \ - helper_compute_fprf(env, xt.fld, sfprf); \ + helper_compute_fprf(env, xt.fld); \ } \ } \ putVSR(xT(opcode), &xt, env); \ @@ -1908,7 +1904,7 @@ void helper_##op(CPUPPCState *env, uint32_t opcode) \ } \ \ if (sfprf) { \ - helper_compute_fprf(env, xt.fld, sfprf); \ + helper_compute_fprf(env, xt.fld); \ } \ } \ \ @@ -1962,7 +1958,7 @@ void helper_##op(CPUPPCState *env, uint32_t opcode) \ } \ \ if (sfprf) { \ - helper_compute_fprf(env, xt.fld, sfprf); \ + helper_compute_fprf(env, xt.fld); \ } \ } \ \ @@ -2003,7 +1999,7 @@ void helper_##op(CPUPPCState *env, uint32_t opcode) \ } \ \ if (sfprf) { \ - helper_compute_fprf(env, xt.fld, sfprf); \ + helper_compute_fprf(env, xt.fld); \ } \ } \ \ @@ -2052,7 +2048,7 @@ void helper_##op(CPUPPCState *env, uint32_t opcode) \ } \ \ if (sfprf) { \ - helper_compute_fprf(env, xt.fld, sfprf); \ + helper_compute_fprf(env, xt.fld); \ } \ } \ \ @@ -2102,7 +2098,7 @@ void helper_##op(CPUPPCState *env, uint32_t opcode) \ } \ \ if (sfprf) { \ - helper_compute_fprf(env, xt.fld, sfprf); \ + helper_compute_fprf(env, xt.fld); \ } \ } \ \ @@ -2302,7 +2298,7 @@ void helper_##op(CPUPPCState *env, uint32_t opcode) \ } \ \ if (sfprf) { \ - helper_compute_fprf(env, xt_out.fld, sfprf); \ + helper_compute_fprf(env, xt_out.fld); \ } \ } \ putVSR(xT(opcode), &xt_out, env); \ @@ -2509,7 +2505,7 @@ void helper_##op(CPUPPCState *env, uint32_t opcode) \ } \ if (sfprf) { \ helper_compute_fprf(env, ttp##_to_float64(xt.tfld, \ - &env->fp_status), sfprf); \ + &env->fp_status)); \ } \ } \ \ @@ -2619,7 +2615,7 @@ void helper_##op(CPUPPCState *env, uint32_t opcode) \ xt.tfld = helper_frsp(env, xt.tfld); \ } \ if (sfprf) { \ - helper_compute_fprf(env, xt.tfld, sfprf); \ + helper_compute_fprf(env, xt.tfld); \ } \ } \ \ @@ -2674,7 +2670,7 @@ void helper_##op(CPUPPCState *env, uint32_t opcode) \ xt.fld = tp##_round_to_int(xb.fld, &env->fp_status); \ } \ if (sfprf) { \ - helper_compute_fprf(env, xt.fld, sfprf); \ + helper_compute_fprf(env, xt.fld); \ } \ } \ \ @@ -2714,7 +2710,7 @@ uint64_t helper_xsrsp(CPUPPCState *env, uint64_t xb) uint64_t xt = helper_frsp(env, xb); - helper_compute_fprf(env, xt, 1); + helper_compute_fprf(env, xt); helper_float_check_status(env); return xt; } diff --git a/target-ppc/helper.h b/target-ppc/helper.h index 210fd97f6a..2841f61aba 100644 --- a/target-ppc/helper.h +++ b/target-ppc/helper.h @@ -52,7 +52,7 @@ DEF_HELPER_FLAGS_2(brinc, TCG_CALL_NO_RWG_SE, tl, tl, tl) DEF_HELPER_1(float_check_status, void, env) DEF_HELPER_1(reset_fpstatus, void, env) -DEF_HELPER_3(compute_fprf, i32, env, i64, i32) +DEF_HELPER_2(compute_fprf, void, env, i64) DEF_HELPER_3(store_fpscr, void, env, i64, i32) DEF_HELPER_2(fpscr_clrbit, void, env, i32) DEF_HELPER_2(fpscr_setbit, void, env, i32) diff --git a/target-ppc/translate.c b/target-ppc/translate.c index 598f02eef7..a772382cac 100644 --- a/target-ppc/translate.c +++ b/target-ppc/translate.c @@ -252,14 +252,8 @@ static inline void gen_reset_fpstatus(void) static inline void gen_compute_fprf(TCGv_i64 arg) { - TCGv_i32 t0 = tcg_temp_new_i32(); - - /* This case might be optimized later */ - tcg_gen_movi_i32(t0, 1); - gen_helper_compute_fprf(t0, cpu_env, arg, t0); + gen_helper_compute_fprf(cpu_env, arg); gen_helper_float_check_status(cpu_env); - - tcg_temp_free_i32(t0); } static inline void gen_set_access_type(DisasContext *ctx, int access_type) From e094c4c12f33a1c965f5af02f33968a337348739 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Le=20Goater?= Date: Mon, 3 Nov 2014 16:14:50 +0100 Subject: [PATCH 12/37] target-ppc: explicitly save page table headers in big endian MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently, when the page tables are saved, the kvm_get_htab_header structs and the ptes are assumed being big endian and dumped as a indistinct blob in the statefile. This is no longer true when the host is little endian and this breaks restoration. This patch unfolds the kvmppc_save_htab routine to write explicitly the kvm_get_htab_header structs in big endian. The ptes are left untouched. Signed-off-by: Cédric Le Goater Signed-off-by: Alexander Graf --- target-ppc/kvm.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c index 6843fa0b98..911f91212a 100644 --- a/target-ppc/kvm.c +++ b/target-ppc/kvm.c @@ -2246,8 +2246,23 @@ int kvmppc_save_htab(QEMUFile *f, int fd, size_t bufsize, int64_t max_ns) strerror(errno)); return rc; } else if (rc) { - /* Kernel already retuns data in BE format for the file */ - qemu_put_buffer(f, buf, rc); + uint8_t *buffer = buf; + ssize_t n = rc; + while (n) { + struct kvm_get_htab_header *head = + (struct kvm_get_htab_header *) buffer; + size_t chunksize = sizeof(*head) + + HASH_PTE_SIZE_64 * head->n_valid; + + qemu_put_be32(f, head->index); + qemu_put_be16(f, head->n_valid); + qemu_put_be16(f, head->n_invalid); + qemu_put_buffer(f, (void *)(head + 1), + HASH_PTE_SIZE_64 * head->n_valid); + + buffer += chunksize; + n -= chunksize; + } } } while ((rc != 0) && ((max_ns < 0) @@ -2264,7 +2279,6 @@ int kvmppc_load_htab_chunk(QEMUFile *f, int fd, uint32_t index, ssize_t rc; buf = alloca(chunksize); - /* This is KVM on ppc, so this is all big-endian */ buf->index = index; buf->n_valid = n_valid; buf->n_invalid = n_invalid; From 01a579729b2e614bd02b25c8504976eeecb64eff Mon Sep 17 00:00:00 2001 From: Samuel Mendoza-Jonas Date: Mon, 17 Nov 2014 15:12:28 +1100 Subject: [PATCH 13/37] spapr: Fix stale HTAB during live migration (KVM) If a guest reboots during a running migration, changes to the hash page table are not necessarily updated on the destination. Opening a new file descriptor to the HTAB forces the migration handler to resend the entire table. Signed-off-by: Samuel Mendoza-Jonas Reviewed-by: Alexey Kardashevskiy Signed-off-by: Alexander Graf --- hw/ppc/spapr.c | 38 ++++++++++++++++++++++++++++++++++++++ include/hw/ppc/spapr.h | 1 + 2 files changed, 39 insertions(+) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 08401e0fde..869b72125a 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -833,6 +833,11 @@ static void spapr_reset_htab(sPAPREnvironment *spapr) /* Kernel handles htab, we don't need to allocate one */ spapr->htab_shift = shift; kvmppc_kern_htab = true; + + /* Tell readers to update their file descriptor */ + if (spapr->htab_fd >= 0) { + spapr->htab_fd_stale = true; + } } else { if (!spapr->htab) { /* Allocate an htab if we don't yet have one */ @@ -867,6 +872,28 @@ static int find_unknown_sysbus_device(SysBusDevice *sbdev, void *opaque) return 0; } +/* + * A guest reset will cause spapr->htab_fd to become stale if being used. + * Reopen the file descriptor to make sure the whole HTAB is properly read. + */ +static int spapr_check_htab_fd(sPAPREnvironment *spapr) +{ + int rc = 0; + + if (spapr->htab_fd_stale) { + close(spapr->htab_fd); + spapr->htab_fd = kvmppc_get_htab_fd(false); + if (spapr->htab_fd < 0) { + error_report("Unable to open fd for reading hash table from KVM: " + "%s", strerror(errno)); + rc = -1; + } + spapr->htab_fd_stale = false; + } + + return rc; +} + static void ppc_spapr_reset(void) { PowerPCCPU *first_ppc_cpu; @@ -1005,6 +1032,7 @@ static int htab_save_setup(QEMUFile *f, void *opaque) assert(kvm_enabled()); spapr->htab_fd = kvmppc_get_htab_fd(false); + spapr->htab_fd_stale = false; if (spapr->htab_fd < 0) { fprintf(stderr, "Unable to open fd for reading hash table from KVM: %s\n", strerror(errno)); @@ -1157,6 +1185,11 @@ static int htab_save_iterate(QEMUFile *f, void *opaque) if (!spapr->htab) { assert(kvm_enabled()); + rc = spapr_check_htab_fd(spapr); + if (rc < 0) { + return rc; + } + rc = kvmppc_save_htab(f, spapr->htab_fd, MAX_KVM_BUF_SIZE, MAX_ITERATION_NS); if (rc < 0) { @@ -1188,6 +1221,11 @@ static int htab_save_complete(QEMUFile *f, void *opaque) assert(kvm_enabled()); + rc = spapr_check_htab_fd(spapr); + if (rc < 0) { + return rc; + } + rc = kvmppc_save_htab(f, spapr->htab_fd, MAX_KVM_BUF_SIZE, -1); if (rc < 0) { return rc; diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h index 749daf4dd7..716bff43bf 100644 --- a/include/hw/ppc/spapr.h +++ b/include/hw/ppc/spapr.h @@ -37,6 +37,7 @@ typedef struct sPAPREnvironment { int htab_save_index; bool htab_first_pass; int htab_fd; + bool htab_fd_stale; } sPAPREnvironment; #define H_SUCCESS 0 From 338c25b6929b5436a42aaa106c7e9136cf1ff4dc Mon Sep 17 00:00:00 2001 From: Samuel Mendoza-Jonas Date: Mon, 17 Nov 2014 15:12:29 +1100 Subject: [PATCH 14/37] spapr: Fix integer overflow during migration (TCG) The n_valid and n_invalid fields are unsigned short integers but it is possible to have more than 65535 entries in a contiguous hunk, overflowing the field. This results in an incorrect HTAB being sent to the destination during migration. Signed-off-by: Samuel Mendoza-Jonas Reviewed-by: Alexey Kardashevskiy Signed-off-by: Alexander Graf --- hw/ppc/spapr.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 869b72125a..765a44c133 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1065,7 +1065,7 @@ static void htab_save_first_pass(QEMUFile *f, sPAPREnvironment *spapr, /* Consume valid HPTEs */ chunkstart = index; - while ((index < htabslots) + while ((index < htabslots) && (index - chunkstart < USHRT_MAX) && HPTE_VALID(HPTE(spapr->htab, index))) { index++; CLEAN_HPTE(HPTE(spapr->htab, index)); @@ -1117,7 +1117,7 @@ static int htab_save_later_pass(QEMUFile *f, sPAPREnvironment *spapr, chunkstart = index; /* Consume valid dirty HPTEs */ - while ((index < htabslots) + while ((index < htabslots) && (index - chunkstart < USHRT_MAX) && HPTE_DIRTY(HPTE(spapr->htab, index)) && HPTE_VALID(HPTE(spapr->htab, index))) { CLEAN_HPTE(HPTE(spapr->htab, index)); @@ -1127,7 +1127,7 @@ static int htab_save_later_pass(QEMUFile *f, sPAPREnvironment *spapr, invalidstart = index; /* Consume invalid dirty HPTEs */ - while ((index < htabslots) + while ((index < htabslots) && (index - invalidstart < USHRT_MAX) && HPTE_DIRTY(HPTE(spapr->htab, index)) && !HPTE_VALID(HPTE(spapr->htab, index))) { CLEAN_HPTE(HPTE(spapr->htab, index)); From e6b8fd246c19701b05f5b65a56b0cc91bbd05ac6 Mon Sep 17 00:00:00 2001 From: Samuel Mendoza-Jonas Date: Mon, 17 Nov 2014 15:12:30 +1100 Subject: [PATCH 15/37] spapr: Fix stale HTAB during live migration (TCG) If a TCG guest reboots during a running migration HTAB entries are not marked dirty, and the destination boots with an invalid HTAB. When a reboot occurs, explicitly mark the current HTAB dirty after clearing it. Signed-off-by: Samuel Mendoza-Jonas Reviewed-by: Alexey Kardashevskiy Signed-off-by: Alexander Graf --- hw/ppc/spapr.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 765a44c133..720aab5624 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -819,9 +819,16 @@ static void emulate_spapr_hypercall(PowerPCCPU *cpu) } } +#define HPTE(_table, _i) (void *)(((uint64_t *)(_table)) + ((_i) * 2)) +#define HPTE_VALID(_hpte) (tswap64(*((uint64_t *)(_hpte))) & HPTE64_V_VALID) +#define HPTE_DIRTY(_hpte) (tswap64(*((uint64_t *)(_hpte))) & HPTE64_V_HPTE_DIRTY) +#define CLEAN_HPTE(_hpte) ((*(uint64_t *)(_hpte)) &= tswap64(~HPTE64_V_HPTE_DIRTY)) +#define DIRTY_HPTE(_hpte) ((*(uint64_t *)(_hpte)) |= tswap64(HPTE64_V_HPTE_DIRTY)) + static void spapr_reset_htab(sPAPREnvironment *spapr) { long shift; + int index; /* allocate hash page table. For now we always make this 16mb, * later we should probably make it scale to the size of guest @@ -846,6 +853,10 @@ static void spapr_reset_htab(sPAPREnvironment *spapr) /* And clear it */ memset(spapr->htab, 0, HTAB_SIZE(spapr)); + + for (index = 0; index < HTAB_SIZE(spapr) / HASH_PTE_SIZE_64; index++) { + DIRTY_HPTE(HPTE(spapr->htab, index)); + } } /* Update the RMA size if necessary */ @@ -1013,11 +1024,6 @@ static const VMStateDescription vmstate_spapr = { }, }; -#define HPTE(_table, _i) (void *)(((uint64_t *)(_table)) + ((_i) * 2)) -#define HPTE_VALID(_hpte) (tswap64(*((uint64_t *)(_hpte))) & HPTE64_V_VALID) -#define HPTE_DIRTY(_hpte) (tswap64(*((uint64_t *)(_hpte))) & HPTE64_V_HPTE_DIRTY) -#define CLEAN_HPTE(_hpte) ((*(uint64_t *)(_hpte)) &= tswap64(~HPTE64_V_HPTE_DIRTY)) - static int htab_save_setup(QEMUFile *f, void *opaque) { sPAPREnvironment *spapr = opaque; From 2bf9febc95e5bcef8edb10ebc967325917b9c958 Mon Sep 17 00:00:00 2001 From: Sergey Fedorov Date: Thu, 11 Dec 2014 18:45:05 +0300 Subject: [PATCH 16/37] device-tree: fix memory leak Signed-off-by: Sergey Fedorov Signed-off-by: Alexander Graf --- device_tree.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/device_tree.c b/device_tree.c index df9eed9cbc..4cb1cd50aa 100644 --- a/device_tree.c +++ b/device_tree.c @@ -324,6 +324,7 @@ int qemu_fdt_setprop_sized_cells_from_array(void *fdt, uint64_t value; int cellnum, vnum, ncells; uint32_t hival; + int ret; propcells = g_new0(uint32_t, numvalues * 2); @@ -331,18 +332,23 @@ int qemu_fdt_setprop_sized_cells_from_array(void *fdt, for (vnum = 0; vnum < numvalues; vnum++) { ncells = values[vnum * 2]; if (ncells != 1 && ncells != 2) { - return -1; + ret = -1; + goto out; } value = values[vnum * 2 + 1]; hival = cpu_to_be32(value >> 32); if (ncells > 1) { propcells[cellnum++] = hival; } else if (hival != 0) { - return -1; + ret = -1; + goto out; } propcells[cellnum++] = cpu_to_be32(value); } - return qemu_fdt_setprop(fdt, node_path, property, propcells, - cellnum * sizeof(uint32_t)); + ret = qemu_fdt_setprop(fdt, node_path, property, propcells, + cellnum * sizeof(uint32_t)); +out: + g_free(propcells); + return ret; } From 77bad151fbd2b2eed1e959ecc2c3f2ee2f080f6c Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Wed, 26 Nov 2014 15:01:01 +0100 Subject: [PATCH 17/37] ppc: do not use get_clock_realtime() Use the external qemu-timer API instead. Signed-off-by: Paolo Bonzini Signed-off-by: Alexander Graf --- hw/ppc/ppc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hw/ppc/ppc.c b/hw/ppc/ppc.c index bec82cd7a9..5ce565d5ec 100644 --- a/hw/ppc/ppc.c +++ b/hw/ppc/ppc.c @@ -844,7 +844,7 @@ static void timebase_pre_save(void *opaque) return; } - tb->time_of_the_day_ns = get_clock_realtime(); + tb->time_of_the_day_ns = qemu_clock_get_ns(QEMU_CLOCK_HOST); /* * tb_offset is only expected to be changed by migration so * there is no need to update it from KVM here @@ -873,7 +873,7 @@ static int timebase_post_load(void *opaque, int version_id) * We try to adjust timebase by downtime if host clocks are not * too much out of sync (1 second for now). */ - host_ns = get_clock_realtime(); + host_ns = qemu_clock_get_ns(QEMU_CLOCK_HOST); ns_diff = MAX(0, host_ns - tb_remote->time_of_the_day_ns); migration_duration_ns = MIN(NSEC_PER_SEC, ns_diff); migration_duration_tb = muldiv64(migration_duration_ns, freq, NSEC_PER_SEC); From 5f9490de566c5b092a6cfedc3c7a37a9c9dee917 Mon Sep 17 00:00:00 2001 From: David Gibson Date: Mon, 8 Dec 2014 13:48:02 +1100 Subject: [PATCH 18/37] PPC: Fix crash on spapr_tce_table_finalize() spapr_tce_table_finalize() can SEGV if the object was not previously realized. In particular this can be triggered by running qemu-system-ppc -device spapr-tce-table,? The basic problem is that we have mismatched initialization versus finalization: spapr_tce_table_finalize() is attempting to undo things that are done in spapr_tce_table_realize(), not an instance_init function. Therefore, replace spapr_tce_table_finalize() with spapr_tce_table_unrealize(). Signed-off-by: David Gibson Cc: qemu-stable@nongnu.org Signed-off-by: Alexander Graf --- hw/ppc/spapr_iommu.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hw/ppc/spapr_iommu.c b/hw/ppc/spapr_iommu.c index 6c91d8edd8..da474740c0 100644 --- a/hw/ppc/spapr_iommu.c +++ b/hw/ppc/spapr_iommu.c @@ -173,9 +173,9 @@ sPAPRTCETable *spapr_tce_new_table(DeviceState *owner, uint32_t liobn, return tcet; } -static void spapr_tce_table_finalize(Object *obj) +static void spapr_tce_table_unrealize(DeviceState *dev, Error **errp) { - sPAPRTCETable *tcet = SPAPR_TCE_TABLE(obj); + sPAPRTCETable *tcet = SPAPR_TCE_TABLE(dev); QLIST_REMOVE(tcet, list); @@ -420,6 +420,7 @@ static void spapr_tce_table_class_init(ObjectClass *klass, void *data) DeviceClass *dc = DEVICE_CLASS(klass); dc->init = spapr_tce_table_realize; dc->reset = spapr_tce_reset; + dc->unrealize = spapr_tce_table_unrealize; QLIST_INIT(&spapr_tce_tables); @@ -435,7 +436,6 @@ static TypeInfo spapr_tce_table_info = { .parent = TYPE_DEVICE, .instance_size = sizeof(sPAPRTCETable), .class_init = spapr_tce_table_class_init, - .instance_finalize = spapr_tce_table_finalize, }; static void register_types(void) From 549cfe5d5d315babec92d4e7043bb872f61c838a Mon Sep 17 00:00:00 2001 From: Alexey Kardashevskiy Date: Tue, 2 Dec 2014 15:32:46 +1100 Subject: [PATCH 19/37] pseries: Update SLOF firmware image to 20141202 The changelog is: > version: update to 20141202 > ipv4: Fix send packet across a subnet > pci: scan only type 0 and type 1 > usb-xhci: support xhci extended capabilities > Fix term-io-key to also work when stdin has not been set yet > net-snk: llfw startup is using the wrong offset to handler > net-snk: Make call_client_interface() a bit more ABI compliant > net-snk: Remove custom printf version > net-snk: Sanitize our .lds file > net-snk: Avoid type clash for stdin & stdout > net-snk: use socket descriptor in the network stack > net-snk: Remove printk() in favor of printf() > net-snk: Remove redundant prototypes > net-snk: Remove unused timer functions > net-snk: Remove some unused PCI functions > net-snk: Remove module system > net-snk: Remove insmod/rmmod > net-snk: Remove snk_kernel_interface and related definitions > net-snk: Remove pci/vio_config gunk > js2x: Fix build > net-snk: Remoe some now unused "kernel" functions > rtas: Improve error handling in instantiate-rtas > version: update to 20140827 > Add private HCALL to inform updated RTAS base and entry > xhci: fix port assignment Signed-off-by: Alexey Kardashevskiy Signed-off-by: Alexander Graf --- pc-bios/README | 2 +- pc-bios/slof.bin | Bin 923896 -> 911704 bytes roms/SLOF | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pc-bios/README b/pc-bios/README index edfadd7d38..8a85e69d3b 100644 --- a/pc-bios/README +++ b/pc-bios/README @@ -17,7 +17,7 @@ - SLOF (Slimline Open Firmware) is a free IEEE 1275 Open Firmware implementation for certain IBM POWER hardware. The sources are at https://github.com/aik/SLOF, and the image currently in qemu is - built from git tag qemu-slof-20140630. + built from git tag qemu-slof-20141202. - sgabios (the Serial Graphics Adapter option ROM) provides a means for legacy x86 software to communicate with an attached serial console as diff --git a/pc-bios/slof.bin b/pc-bios/slof.bin index 69b0a5dbc3ab423528dc10817b37fde720ffd0aa..031e3063a277e769c78b637de13c93f4074389f5 100644 GIT binary patch delta 210974 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 is~;DL%LU?cfw_5^1=AgJc}2HJc4 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

0PXx<02$6WjT4K?XcmtG= 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�wfNz0F=-{>d~uy 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 BPwM~x diff --git a/roms/SLOF b/roms/SLOF index f284ab3f03..a70dbda2e2 160000 --- a/roms/SLOF +++ b/roms/SLOF @@ -1 +1 @@ -Subproject commit f284ab3f03ae69a20e1ae966f6ddf76da33cbf72 +Subproject commit a70dbda2e21f6e438b3617c44ff180c3418dc30f From f90468b6465f64d4f5cf24ad81142c51f37320cf Mon Sep 17 00:00:00 2001 From: Tom Musta Date: Thu, 18 Dec 2014 10:34:29 -0600 Subject: [PATCH 20/37] target-ppc: Introduce Instruction Type for Transactional Memory Add a category (PPC2_TM) for the Transactional Memory instructions introduced in Power ISA 2.07. Signed-off-by: Tom Musta Signed-off-by: Alexander Graf --- target-ppc/cpu.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/target-ppc/cpu.h b/target-ppc/cpu.h index 068fcb24a2..351008384e 100644 --- a/target-ppc/cpu.h +++ b/target-ppc/cpu.h @@ -2010,6 +2010,8 @@ enum { PPC2_ISA207S = 0x0000000000008000ULL, /* Double precision floating point conversion for signed integer 64 */ PPC2_FP_CVT_S64 = 0x0000000000010000ULL, + /* Transactional Memory (ISA 2.07, Book II) */ + PPC2_TM = 0x0000000000020000ULL, #define PPC_TCG_INSNS2 (PPC2_BOOKE206 | PPC2_VSX | PPC2_PRCNTL | PPC2_DBRX | \ PPC2_ISA205 | PPC2_VSX207 | PPC2_PERM_ISA206 | \ @@ -2017,7 +2019,7 @@ enum { PPC2_FP_CVT_ISA206 | PPC2_FP_TST_ISA206 | \ PPC2_BCTAR_ISA207 | PPC2_LSQ_ISA207 | \ PPC2_ALTIVEC_207 | PPC2_ISA207S | PPC2_DFP | \ - PPC2_FP_CVT_S64) + PPC2_FP_CVT_S64 | PPC2_TM) }; /*****************************************************************************/ From e43668a7d20e5d2dfe92b2f3426280b2a351333c Mon Sep 17 00:00:00 2001 From: Tom Musta Date: Thu, 18 Dec 2014 10:34:30 -0600 Subject: [PATCH 21/37] target-ppc: Introduce Feature Flag for Transactional Memory Add a flag (POWERPC_FLAG_TM) for the Transactional Memory Facility introduced in Power ISA 2.07. Signed-off-by: Tom Musta Signed-off-by: Alexander Graf --- target-ppc/cpu.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/target-ppc/cpu.h b/target-ppc/cpu.h index 351008384e..38176c05aa 100644 --- a/target-ppc/cpu.h +++ b/target-ppc/cpu.h @@ -584,6 +584,8 @@ enum { POWERPC_FLAG_CFAR = 0x00040000, /* Has VSX */ POWERPC_FLAG_VSX = 0x00080000, + /* Has Transaction Memory (ISA 2.07) */ + POWERPC_FLAG_TM = 0x00100000, }; /*****************************************************************************/ From 69d1a9377453d78ba2279fa56ae9623b3cd98673 Mon Sep 17 00:00:00 2001 From: Tom Musta Date: Thu, 18 Dec 2014 10:34:31 -0600 Subject: [PATCH 22/37] target-ppc: Introduce tm_enabled Bit to CPU State Add a bit (tm_enabled) to CPU state that mirrors the MSR[TM] bit. This is analogous to the other "available" bits in the MSR (FP, VSX, etc.). NOTE: Since MSR[TM] occupies big-endian bit 31, the code is wrapped with a PPC64 bit check. Signed-off-by: Tom Musta Signed-off-by: Alexander Graf --- target-ppc/translate.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/target-ppc/translate.c b/target-ppc/translate.c index a772382cac..3b004f3bf7 100644 --- a/target-ppc/translate.c +++ b/target-ppc/translate.c @@ -203,6 +203,7 @@ typedef struct DisasContext { int altivec_enabled; int vsx_enabled; int spe_enabled; + int tm_enabled; ppc_spr_t *spr_cb; /* Needed to check rights for mfspr/mtspr */ int singlestep_enabled; uint64_t insns_flags; @@ -11342,6 +11343,13 @@ static inline void gen_intermediate_code_internal(PowerPCCPU *cpu, } else { ctx.vsx_enabled = 0; } +#if defined(TARGET_PPC64) + if ((env->flags & POWERPC_FLAG_TM) && msr_tm) { + ctx.tm_enabled = msr_tm; + } else { + ctx.tm_enabled = 0; + } +#endif if ((env->flags & POWERPC_FLAG_SE) && msr_se) ctx.singlestep_enabled = CPU_SINGLE_STEP; else From 3e28c5e363aaf3de8b99acb662b7488ed6b49197 Mon Sep 17 00:00:00 2001 From: Tom Musta Date: Thu, 18 Dec 2014 10:34:32 -0600 Subject: [PATCH 23/37] target-ppc: Power8 Supports Transactional Memory The Power8 processor implements the Transactional Memory Facility as defined in Power ISA 2.07. Update the initialization code to indicate this. Signed-off-by: Tom Musta Signed-off-by: Alexander Graf --- target-ppc/translate_init.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c index 1fece7b97c..72cc9d03a9 100644 --- a/target-ppc/translate_init.c +++ b/target-ppc/translate_init.c @@ -8219,7 +8219,8 @@ POWERPC_FAMILY(POWER8)(ObjectClass *oc, void *data) PPC2_ATOMIC_ISA206 | PPC2_FP_CVT_ISA206 | PPC2_FP_TST_ISA206 | PPC2_BCTAR_ISA207 | PPC2_LSQ_ISA207 | PPC2_ALTIVEC_207 | - PPC2_ISA205 | PPC2_ISA207S | PPC2_FP_CVT_S64; + PPC2_ISA205 | PPC2_ISA207S | PPC2_FP_CVT_S64 | + PPC2_TM; pcc->msr_mask = (1ull << MSR_SF) | (1ull << MSR_TM) | (1ull << MSR_VR) | @@ -8247,7 +8248,7 @@ POWERPC_FAMILY(POWER8)(ObjectClass *oc, void *data) pcc->flags = POWERPC_FLAG_VRE | POWERPC_FLAG_SE | POWERPC_FLAG_BE | POWERPC_FLAG_PMM | POWERPC_FLAG_BUS_CLK | POWERPC_FLAG_CFAR | - POWERPC_FLAG_VSX; + POWERPC_FLAG_VSX | POWERPC_FLAG_TM; pcc->l1_dcache_size = 0x8000; pcc->l1_icache_size = 0x8000; pcc->interrupts_big_endian = ppc_cpu_interrupts_big_endian_lpcr; From aac862379ceaa724aba2ba9f4b825479c1401b1a Mon Sep 17 00:00:00 2001 From: Tom Musta Date: Thu, 18 Dec 2014 10:34:33 -0600 Subject: [PATCH 24/37] target-ppc: Introduce TEXASRU Bit Fields Define mnemonics for the various bit fields in the Transaction EXception And Summary Register (TEXASR). Signed-off-by: Tom Musta Signed-off-by: Alexander Graf --- target-ppc/cpu.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/target-ppc/cpu.h b/target-ppc/cpu.h index 38176c05aa..91a03f6e24 100644 --- a/target-ppc/cpu.h +++ b/target-ppc/cpu.h @@ -558,6 +558,26 @@ struct ppc_slb_t { #define ESR_VLEMI (1 << (63 - 58)) /* VLE operation */ #define ESR_MIF (1 << (63 - 62)) /* Misaligned instruction (VLE) */ +/* Transaction EXception And Summary Register bits */ +#define TEXASR_FAILURE_PERSISTENT (63 - 7) +#define TEXASR_DISALLOWED (63 - 8) +#define TEXASR_NESTING_OVERFLOW (63 - 9) +#define TEXASR_FOOTPRINT_OVERFLOW (63 - 10) +#define TEXASR_SELF_INDUCED_CONFLICT (63 - 11) +#define TEXASR_NON_TRANSACTIONAL_CONFLICT (63 - 12) +#define TEXASR_TRANSACTION_CONFLICT (63 - 13) +#define TEXASR_TRANSLATION_INVALIDATION_CONFLICT (63 - 14) +#define TEXASR_IMPLEMENTATION_SPECIFIC (63 - 15) +#define TEXASR_INSTRUCTION_FETCH_CONFLICT (63 - 16) +#define TEXASR_ABORT (63 - 31) +#define TEXASR_SUSPENDED (63 - 32) +#define TEXASR_PRIVILEGE_HV (63 - 34) +#define TEXASR_PRIVILEGE_PR (63 - 35) +#define TEXASR_FAILURE_SUMMARY (63 - 36) +#define TEXASR_TFIAR_EXACT (63 - 37) +#define TEXASR_ROT (63 - 38) +#define TEXASR_TRANSACTION_LEVEL (63 - 52) /* 12 bits */ + enum { POWERPC_FLAG_NONE = 0x00000000, /* Flag for MSR bit 25 signification (VRE/SPE) */ From 0ff93d11bc0890b2569f748266c04f4417ec3233 Mon Sep 17 00:00:00 2001 From: Tom Musta Date: Thu, 18 Dec 2014 10:34:34 -0600 Subject: [PATCH 25/37] target-ppc: Introduce tbegin Provide a degenerate implementation of the tbegin instruction. This implementation always fails the transaction, recording the failure per Book II Section 5.3.2 of the Power ISA V2.07. Signed-off-by: Tom Musta Signed-off-by: Alexander Graf --- target-ppc/helper.h | 2 ++ target-ppc/mem_helper.c | 22 ++++++++++++++++++++++ target-ppc/translate.c | 12 ++++++++++++ 3 files changed, 36 insertions(+) diff --git a/target-ppc/helper.h b/target-ppc/helper.h index 2841f61aba..869be1509d 100644 --- a/target-ppc/helper.h +++ b/target-ppc/helper.h @@ -665,3 +665,5 @@ DEF_HELPER_4(dscri, void, env, fprp, fprp, i32) DEF_HELPER_4(dscriq, void, env, fprp, fprp, i32) DEF_HELPER_4(dscli, void, env, fprp, fprp, i32) DEF_HELPER_4(dscliq, void, env, fprp, fprp, i32) + +DEF_HELPER_1(tbegin, void, env) diff --git a/target-ppc/mem_helper.c b/target-ppc/mem_helper.c index 50344b81cf..6d37dae7b0 100644 --- a/target-ppc/mem_helper.c +++ b/target-ppc/mem_helper.c @@ -269,3 +269,25 @@ STVE(stvewx, cpu_stl_data, bswap32, u32) #undef HI_IDX #undef LO_IDX + +void helper_tbegin(CPUPPCState *env) +{ + /* As a degenerate implementation, always fail tbegin. The reason + * given is "Nesting overflow". The "persistent" bit is set, + * providing a hint to the error handler to not retry. The TFIAR + * captures the address of the failure, which is this tbegin + * instruction. Instruction execution will continue with the + * next instruction in memory, which is precisely what we want. + */ + + env->spr[SPR_TEXASR] = + (1ULL << TEXASR_FAILURE_PERSISTENT) | + (1ULL << TEXASR_NESTING_OVERFLOW) | + (msr_hv << TEXASR_PRIVILEGE_HV) | + (msr_pr << TEXASR_PRIVILEGE_PR) | + (1ULL << TEXASR_FAILURE_SUMMARY) | + (1ULL << TEXASR_TFIAR_EXACT); + env->spr[SPR_TFIAR] = env->nip | (msr_hv << 1) | msr_pr; + env->spr[SPR_TFHAR] = env->nip + 4; + env->crf[0] = 0xB; /* 0b1010 = transaction failure */ +} diff --git a/target-ppc/translate.c b/target-ppc/translate.c index 3b004f3bf7..f4a0332ca9 100644 --- a/target-ppc/translate.c +++ b/target-ppc/translate.c @@ -9674,6 +9674,15 @@ GEN_SPE(efdctsiz, speundef, 0x1D, 0x0B, 0x00180000, 0xFFFFFFFF, PPC_SPE_DOUBLE GEN_SPE(efdtstgt, efdtstlt, 0x1E, 0x0B, 0x00600000, 0x00600000, PPC_SPE_DOUBLE); // GEN_SPE(efdtsteq, speundef, 0x1F, 0x0B, 0x00600000, 0xFFFFFFFF, PPC_SPE_DOUBLE); // +static void gen_tbegin(DisasContext *ctx) +{ + if (unlikely(!ctx->tm_enabled)) { + gen_exception_err(ctx, POWERPC_EXCP_FU, FSCR_IC_TM); + return; + } + gen_helper_tbegin(cpu_env); +} + static opcode_t opcodes[] = { GEN_HANDLER(invalid, 0x00, 0x00, 0x00, 0xFFFFFFFF, PPC_NONE), GEN_HANDLER(cmp, 0x1F, 0x00, 0x00, 0x00400000, PPC_INTEGER), @@ -11086,6 +11095,9 @@ GEN_SPEOP_LDST(evstwhe, 0x18, 2), GEN_SPEOP_LDST(evstwho, 0x1A, 2), GEN_SPEOP_LDST(evstwwe, 0x1C, 2), GEN_SPEOP_LDST(evstwwo, 0x1E, 2), + +GEN_HANDLER2_E(tbegin, "tbegin", 0x1F, 0x0E, 0x14, 0x01DFF800, \ + PPC_NONE, PPC2_TM), }; #include "helper_regs.h" From 56a846157edaba3389eb141e104774451d82ce51 Mon Sep 17 00:00:00 2001 From: Tom Musta Date: Thu, 18 Dec 2014 10:34:35 -0600 Subject: [PATCH 26/37] target-ppc: Introduce TM Noops Add degenerate implementations of the non-privileged Transactional Memory instructions tend., tabort*. and tsr. This implementation simply checks the MSR[TM] bit and then sets CR0 to 0b0000. This is a reasonable degenerate implementation since transactions are never allowed to begin and hence MSR[TS] is always 0b00. Signed-off-by: Tom Musta Signed-off-by: Alexander Graf --- target-ppc/translate.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/target-ppc/translate.c b/target-ppc/translate.c index f4a0332ca9..9c820d1e88 100644 --- a/target-ppc/translate.c +++ b/target-ppc/translate.c @@ -9683,6 +9683,30 @@ static void gen_tbegin(DisasContext *ctx) gen_helper_tbegin(cpu_env); } +#define GEN_TM_NOOP(name) \ +static inline void gen_##name(DisasContext *ctx) \ +{ \ + if (unlikely(!ctx->tm_enabled)) { \ + gen_exception_err(ctx, POWERPC_EXCP_FU, FSCR_IC_TM); \ + return; \ + } \ + /* Because tbegin always fails in QEMU, these user \ + * space instructions all have a simple implementation: \ + * \ + * CR[0] = 0b0 || MSR[TS] || 0b0 \ + * = 0b0 || 0b00 || 0b0 \ + */ \ + tcg_gen_movi_i32(cpu_crf[0], 0); \ +} + +GEN_TM_NOOP(tend); +GEN_TM_NOOP(tabort); +GEN_TM_NOOP(tabortwc); +GEN_TM_NOOP(tabortwci); +GEN_TM_NOOP(tabortdc); +GEN_TM_NOOP(tabortdci); +GEN_TM_NOOP(tsr); + static opcode_t opcodes[] = { GEN_HANDLER(invalid, 0x00, 0x00, 0x00, 0xFFFFFFFF, PPC_NONE), GEN_HANDLER(cmp, 0x1F, 0x00, 0x00, 0x00400000, PPC_INTEGER), @@ -11098,6 +11122,20 @@ GEN_SPEOP_LDST(evstwwo, 0x1E, 2), GEN_HANDLER2_E(tbegin, "tbegin", 0x1F, 0x0E, 0x14, 0x01DFF800, \ PPC_NONE, PPC2_TM), +GEN_HANDLER2_E(tend, "tend", 0x1F, 0x0E, 0x15, 0x01FFF800, \ + PPC_NONE, PPC2_TM), +GEN_HANDLER2_E(tabort, "tabort", 0x1F, 0x0E, 0x1C, 0x03E0F800, \ + PPC_NONE, PPC2_TM), +GEN_HANDLER2_E(tabortwc, "tabortwc", 0x1F, 0x0E, 0x18, 0x00000000, \ + PPC_NONE, PPC2_TM), +GEN_HANDLER2_E(tabortwci, "tabortwci", 0x1F, 0x0E, 0x1A, 0x00000000, \ + PPC_NONE, PPC2_TM), +GEN_HANDLER2_E(tabortdc, "tabortdc", 0x1F, 0x0E, 0x19, 0x00000000, \ + PPC_NONE, PPC2_TM), +GEN_HANDLER2_E(tabortdci, "tabortdci", 0x1F, 0x0E, 0x1B, 0x00000000, \ + PPC_NONE, PPC2_TM), +GEN_HANDLER2_E(tsr, "tsr", 0x1F, 0x0E, 0x17, 0x03DFF800, \ + PPC_NONE, PPC2_TM), }; #include "helper_regs.h" From aeedd58234e7f211bcd6d0ad04cdc60c2a967aca Mon Sep 17 00:00:00 2001 From: Tom Musta Date: Thu, 18 Dec 2014 10:34:36 -0600 Subject: [PATCH 27/37] target-ppc: Introduce tcheck Add a degenerate implementation of the Transaction Check (tcheck) instruction. Since transaction always immediately fail, this implementation simply sets CR[BF] to 0b1000, i.e. TDOOMED = 1 and MSR[TS] == 0. Signed-off-by: Tom Musta Signed-off-by: Alexander Graf --- target-ppc/translate.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/target-ppc/translate.c b/target-ppc/translate.c index 9c820d1e88..95a2198462 100644 --- a/target-ppc/translate.c +++ b/target-ppc/translate.c @@ -9707,6 +9707,21 @@ GEN_TM_NOOP(tabortdc); GEN_TM_NOOP(tabortdci); GEN_TM_NOOP(tsr); +static void gen_tcheck(DisasContext *ctx) +{ + if (unlikely(!ctx->tm_enabled)) { + gen_exception_err(ctx, POWERPC_EXCP_FU, FSCR_IC_TM); + return; + } + /* Because tbegin always fails, the tcheck implementation + * is simple: + * + * CR[CRF] = TDOOMED || MSR[TS] || 0b0 + * = 0b1 || 0b00 || 0b0 + */ + tcg_gen_movi_i32(cpu_crf[crfD(ctx->opcode)], 0x8); +} + static opcode_t opcodes[] = { GEN_HANDLER(invalid, 0x00, 0x00, 0x00, 0xFFFFFFFF, PPC_NONE), GEN_HANDLER(cmp, 0x1F, 0x00, 0x00, 0x00400000, PPC_INTEGER), @@ -11136,6 +11151,8 @@ GEN_HANDLER2_E(tabortdci, "tabortdci", 0x1F, 0x0E, 0x1B, 0x00000000, \ PPC_NONE, PPC2_TM), GEN_HANDLER2_E(tsr, "tsr", 0x1F, 0x0E, 0x17, 0x03DFF800, \ PPC_NONE, PPC2_TM), +GEN_HANDLER2_E(tcheck, "tcheck", 0x1F, 0x0E, 0x16, 0x007FF800, \ + PPC_NONE, PPC2_TM), }; #include "helper_regs.h" From f83c2378bb412b205e9d14dca2f7758d3d23cc88 Mon Sep 17 00:00:00 2001 From: Tom Musta Date: Thu, 18 Dec 2014 10:34:37 -0600 Subject: [PATCH 28/37] target-ppc: Introduce Privileged TM Noops Add the supervisory Transactional Memory instructions treclaim. and trechkpt. The implementation is a degenerate one that simply checks privileged state, TM availability and then sets CR[0] to 0b0000, just like the unprivileged noops. Signed-off-by: Tom Musta Signed-off-by: Alexander Graf --- target-ppc/translate.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/target-ppc/translate.c b/target-ppc/translate.c index 95a2198462..58d7db33c6 100644 --- a/target-ppc/translate.c +++ b/target-ppc/translate.c @@ -9722,6 +9722,40 @@ static void gen_tcheck(DisasContext *ctx) tcg_gen_movi_i32(cpu_crf[crfD(ctx->opcode)], 0x8); } +#if defined(CONFIG_USER_ONLY) +#define GEN_TM_PRIV_NOOP(name) \ +static inline void gen_##name(DisasContext *ctx) \ +{ \ + gen_inval_exception(ctx, POWERPC_EXCP_PRIV_OPC); \ +} + +#else + +#define GEN_TM_PRIV_NOOP(name) \ +static inline void gen_##name(DisasContext *ctx) \ +{ \ + if (unlikely(ctx->pr)) { \ + gen_inval_exception(ctx, POWERPC_EXCP_PRIV_OPC); \ + return; \ + } \ + if (unlikely(!ctx->tm_enabled)) { \ + gen_exception_err(ctx, POWERPC_EXCP_FU, FSCR_IC_TM); \ + return; \ + } \ + /* Because tbegin always fails, the implementation is \ + * simple: \ + * \ + * CR[0] = 0b0 || MSR[TS] || 0b0 \ + * = 0b0 || 0b00 | 0b0 \ + */ \ + tcg_gen_movi_i32(cpu_crf[0], 0); \ +} + +#endif + +GEN_TM_PRIV_NOOP(treclaim); +GEN_TM_PRIV_NOOP(trechkpt); + static opcode_t opcodes[] = { GEN_HANDLER(invalid, 0x00, 0x00, 0x00, 0xFFFFFFFF, PPC_NONE), GEN_HANDLER(cmp, 0x1F, 0x00, 0x00, 0x00400000, PPC_INTEGER), @@ -11153,6 +11187,10 @@ GEN_HANDLER2_E(tsr, "tsr", 0x1F, 0x0E, 0x17, 0x03DFF800, \ PPC_NONE, PPC2_TM), GEN_HANDLER2_E(tcheck, "tcheck", 0x1F, 0x0E, 0x16, 0x007FF800, \ PPC_NONE, PPC2_TM), +GEN_HANDLER2_E(treclaim, "treclaim", 0x1F, 0x0E, 0x1D, 0x03E0F800, \ + PPC_NONE, PPC2_TM), +GEN_HANDLER2_E(trechkpt, "trechkpt", 0x1F, 0x0E, 0x1F, 0x03FFF800, \ + PPC_NONE, PPC2_TM), }; #include "helper_regs.h" From 82e345f57e6482cef960677613125c5aaf2b1654 Mon Sep 17 00:00:00 2001 From: Amit Tomar Date: Fri, 19 Dec 2014 14:20:37 +0000 Subject: [PATCH 29/37] PPC: e500: Fix GPIO controller interrupt number The GPIO controller lives at IRQ 47, not 43 on real hardware. This is a problem because IRQ 43 is occupied by the I2C controller which we want to implement next, so we'd have a conflict on that IRQ number. Move the GPIO controller to IRQ 47 where it belongs. Signed-off-by: Amit Singh Tomar Signed-off-by: Alexander Graf --- hw/ppc/e500.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c index a2e60b4896..7e17d180c6 100644 --- a/hw/ppc/e500.c +++ b/hw/ppc/e500.c @@ -60,7 +60,7 @@ #define MPC8544_PCI_REGS_SIZE 0x1000ULL #define MPC8544_UTIL_OFFSET 0xe0000ULL #define MPC8XXX_GPIO_OFFSET 0x000FF000ULL -#define MPC8XXX_GPIO_IRQ 43 +#define MPC8XXX_GPIO_IRQ 47 struct boot_info { From 466976d9eed8d618aed93cb1fac04845e86253cf Mon Sep 17 00:00:00 2001 From: Peter Maydell Date: Tue, 23 Dec 2014 22:22:15 +0000 Subject: [PATCH 30/37] target-ppc: Mark SR() and gen_sync_exception() as !CONFIG_USER_ONLY The functions SR() and gen_sync_exception() are only used in softmmu configs; wrap them in #ifndef CONFIG_USER_ONLY to suppress clang warnings on the linux-user builds. Signed-off-by: Peter Maydell Signed-off-by: Alexander Graf --- target-ppc/translate.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/target-ppc/translate.c b/target-ppc/translate.c index 58d7db33c6..6e9ab02f33 100644 --- a/target-ppc/translate.c +++ b/target-ppc/translate.c @@ -331,11 +331,13 @@ static inline void gen_stop_exception(DisasContext *ctx) ctx->exception = POWERPC_EXCP_STOP; } +#ifndef CONFIG_USER_ONLY /* No need to update nip here, as execution flow will change */ static inline void gen_sync_exception(DisasContext *ctx) { ctx->exception = POWERPC_EXCP_SYNC; } +#endif #define GEN_HANDLER(name, opc1, opc2, opc3, inval, type) \ GEN_OPCODE(name, opc1, opc2, opc3, inval, type, PPC_NONE) @@ -437,7 +439,10 @@ EXTRACT_HELPER(ME, 1, 5); EXTRACT_HELPER(TO, 21, 5); EXTRACT_HELPER(CRM, 12, 8); + +#ifndef CONFIG_USER_ONLY EXTRACT_HELPER(SR, 16, 4); +#endif /* mtfsf/mtfsfi */ EXTRACT_HELPER(FPBF, 23, 3); From 2f285bdd54bb2ff25a213b3b77e9bf46f4306320 Mon Sep 17 00:00:00 2001 From: Peter Maydell Date: Tue, 23 Dec 2014 22:22:16 +0000 Subject: [PATCH 31/37] target-ppc: Cast ssize_t to size_t before printing with %zx The mingw32 compiler complains about trying to print variables of type ssize_t with the %z format string specifier. Since we're printing it as unsigned hex anyway, cast to size_t to silence the warning. Signed-off-by: Peter Maydell Signed-off-by: Alexander Graf --- hw/ppc/spapr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 720aab5624..2850624942 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1482,7 +1482,7 @@ static void ppc_spapr_init(MachineState *machine) } if (spapr->rtas_size > RTAS_MAX_SIZE) { hw_error("RTAS too big ! 0x%zx bytes (max is 0x%x)\n", - spapr->rtas_size, RTAS_MAX_SIZE); + (size_t)spapr->rtas_size, RTAS_MAX_SIZE); exit(1); } g_free(filename); From c760dbb9dc4dfceeb5d4ae07876b10da58d4c630 Mon Sep 17 00:00:00 2001 From: Marcel Apfelbaum Date: Tue, 6 Jan 2015 15:29:12 +0200 Subject: [PATCH 32/37] hw/ppc: modified the condition for usb controllers to be created for some ppc machines Some ppc machines create a default usb controller based on a 'machine condition'. Until now the logic was: create the usb controller if: - the usb option was supplied in cli and value is true or - the usb option was absent and both set_defaults and the machine condition were true. Modified the logic to: Create the usb controller if: - the machine condition is true and defaults are enabled or - the usb option is supplied and true. The main for this is to simplify the usb_enabled method. Signed-off-by: Marcel Apfelbaum Reviewed-by: Paolo Bonzini Reviewed-by: Stefan Hajnoczi Signed-off-by: Alexander Graf --- hw/ppc/mac_newworld.c | 3 ++- hw/ppc/spapr.c | 2 +- include/sysemu/sysemu.h | 1 + vl.c | 7 ++++++- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c index b60a832c0a..8ba9499695 100644 --- a/hw/ppc/mac_newworld.c +++ b/hw/ppc/mac_newworld.c @@ -417,7 +417,8 @@ static void ppc_core99_init(MachineState *machine) dev = qdev_create(adb_bus, TYPE_ADB_MOUSE); qdev_init_nofail(dev); - if (usb_enabled(machine_arch == ARCH_MAC99_U3)) { + if ((machine_arch == ARCH_MAC99_U3 && defaults_enabled()) || + usb_enabled(false)) { pci_create_simple(pci_bus, -1, "pci-ohci"); /* U3 needs to use USB for input because Linux doesn't support via-cuda on PPC64 */ diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 2850624942..2b2cc0cfc7 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1530,7 +1530,7 @@ static void ppc_spapr_init(MachineState *machine) spapr->has_graphics = true; } - if (usb_enabled(spapr->has_graphics)) { + if ((spapr->has_graphics && defaults_enabled()) || usb_enabled(false)) { pci_create_simple(phb->bus, -1, "pci-ohci"); if (spapr->has_graphics) { usbdevice_create("keyboard"); diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h index 503e5a48a7..a31044c271 100644 --- a/include/sysemu/sysemu.h +++ b/include/sysemu/sysemu.h @@ -227,6 +227,7 @@ void qemu_boot_set(const char *boot_order, Error **errp); QemuOpts *qemu_get_machine_opts(void); +bool defaults_enabled(void); bool usb_enabled(bool default_usb); extern QemuOptsList qemu_legacy_drive_opts; diff --git a/vl.c b/vl.c index bea9656232..415535fb46 100644 --- a/vl.c +++ b/vl.c @@ -997,10 +997,15 @@ static int parse_name(QemuOpts *opts, void *opaque) return 0; } +bool defaults_enabled(void) +{ + return has_defaults; +} + bool usb_enabled(bool default_usb) { return qemu_opt_get_bool(qemu_get_machine_opts(), "usb", - has_defaults && default_usb); + default_usb); } #ifndef _WIN32 From 759bf45d81a892c359fa1a3848c36dcd74b6a42b Mon Sep 17 00:00:00 2001 From: Marcel Apfelbaum Date: Tue, 6 Jan 2015 15:29:13 +0200 Subject: [PATCH 33/37] hw/machine: added machine_usb wrapper Following QOM convention, object properties should not be accessed directly. Signed-off-by: Marcel Apfelbaum Reviewed-by: Paolo Bonzini Reviewed-by: Stefan Hajnoczi Signed-off-by: Alexander Graf --- hw/core/machine.c | 5 +++++ include/hw/boards.h | 2 ++ 2 files changed, 7 insertions(+) diff --git a/hw/core/machine.c b/hw/core/machine.c index a0ae5f94ce..fbd91be575 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -398,6 +398,11 @@ static void machine_finalize(Object *obj) g_free(ms->firmware); } +bool machine_usb(MachineState *machine) +{ + return machine->usb; +} + static const TypeInfo machine_info = { .name = TYPE_MACHINE, .parent = TYPE_OBJECT, diff --git a/include/hw/boards.h b/include/hw/boards.h index e0a67903ef..3ddc449bb6 100644 --- a/include/hw/boards.h +++ b/include/hw/boards.h @@ -65,6 +65,8 @@ int qemu_register_machine(QEMUMachine *m); MachineClass *find_default_machine(void); extern MachineState *current_machine; +bool machine_usb(MachineState *machine); + /** * MachineClass: * @qemu_machine: #QEMUMachine From 09f28e5b51e0fb822021efd8396057c818927775 Mon Sep 17 00:00:00 2001 From: Marcel Apfelbaum Date: Tue, 6 Jan 2015 15:29:14 +0200 Subject: [PATCH 34/37] hw/usb: simplified usb_enabled The argument is not longer used and the implementation uses now QOM instead of QemuOpts. Signed-off-by: Marcel Apfelbaum Reviewed-by: Stefan Hajnoczi Reviewed-by: Paolo Bonzini Signed-off-by: Alexander Graf --- hw/arm/nseries.c | 2 +- hw/arm/pxa2xx.c | 4 ++-- hw/arm/realview.c | 2 +- hw/arm/versatilepb.c | 2 +- hw/i386/pc_piix.c | 2 +- hw/i386/pc_q35.c | 2 +- hw/ppc/mac_newworld.c | 2 +- hw/ppc/mac_oldworld.c | 2 +- hw/ppc/prep.c | 2 +- hw/ppc/spapr.c | 2 +- include/sysemu/sysemu.h | 2 +- vl.c | 11 +++++------ 12 files changed, 17 insertions(+), 18 deletions(-) diff --git a/hw/arm/nseries.c b/hw/arm/nseries.c index c7ebaa6abc..4d7be5e740 100644 --- a/hw/arm/nseries.c +++ b/hw/arm/nseries.c @@ -1344,7 +1344,7 @@ static void n8x0_init(MachineState *machine, n8x0_dss_setup(s); n8x0_cbus_setup(s); n8x0_uart_setup(s); - if (usb_enabled(false)) { + if (usb_enabled()) { n8x0_usb_setup(s); } diff --git a/hw/arm/pxa2xx.c b/hw/arm/pxa2xx.c index 8967cc4e0b..165ba2a169 100644 --- a/hw/arm/pxa2xx.c +++ b/hw/arm/pxa2xx.c @@ -2143,7 +2143,7 @@ PXA2xxState *pxa270_init(MemoryRegion *address_space, s->ssp[i] = (SSIBus *)qdev_get_child_bus(dev, "ssi"); } - if (usb_enabled(false)) { + if (usb_enabled()) { sysbus_create_simple("sysbus-ohci", 0x4c000000, qdev_get_gpio_in(s->pic, PXA2XX_PIC_USBH1)); } @@ -2276,7 +2276,7 @@ PXA2xxState *pxa255_init(MemoryRegion *address_space, unsigned int sdram_size) s->ssp[i] = (SSIBus *)qdev_get_child_bus(dev, "ssi"); } - if (usb_enabled(false)) { + if (usb_enabled()) { sysbus_create_simple("sysbus-ohci", 0x4c000000, qdev_get_gpio_in(s->pic, PXA2XX_PIC_USBH1)); } diff --git a/hw/arm/realview.c b/hw/arm/realview.c index 66e51ef1ad..50cb93d8ac 100644 --- a/hw/arm/realview.c +++ b/hw/arm/realview.c @@ -261,7 +261,7 @@ static void realview_init(MachineState *machine, sysbus_connect_irq(busdev, 2, pic[50]); sysbus_connect_irq(busdev, 3, pic[51]); pci_bus = (PCIBus *)qdev_get_child_bus(dev, "pci"); - if (usb_enabled(false)) { + if (usb_enabled()) { pci_create_simple(pci_bus, -1, "pci-ohci"); } n = drive_get_max_bus(IF_SCSI); diff --git a/hw/arm/versatilepb.c b/hw/arm/versatilepb.c index 6c4c2e780e..b1dae77604 100644 --- a/hw/arm/versatilepb.c +++ b/hw/arm/versatilepb.c @@ -281,7 +281,7 @@ static void versatile_init(MachineState *machine, int board_id) pci_nic_init_nofail(nd, pci_bus, "rtl8139", NULL); } } - if (usb_enabled(false)) { + if (usb_enabled()) { pci_create_simple(pci_bus, -1, "pci-ohci"); } n = drive_get_max_bus(IF_SCSI); diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c index 220f7415fa..f0a3201e19 100644 --- a/hw/i386/pc_piix.c +++ b/hw/i386/pc_piix.c @@ -274,7 +274,7 @@ static void pc_init1(MachineState *machine, pc_cmos_init(below_4g_mem_size, above_4g_mem_size, machine->boot_order, machine, floppy, idebus[0], idebus[1], rtc_state); - if (pci_enabled && usb_enabled(false)) { + if (pci_enabled && usb_enabled()) { pci_create_simple(pci_bus, piix3_devfn + 2, "piix3-usb-uhci"); } diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c index 7ba05353aa..a432944f02 100644 --- a/hw/i386/pc_q35.c +++ b/hw/i386/pc_q35.c @@ -265,7 +265,7 @@ static void pc_q35_init(MachineState *machine) ide_drive_get(hd, ICH_AHCI(ahci)->ahci.ports); ahci_ide_create_devs(ahci, hd); - if (usb_enabled(false)) { + if (usb_enabled()) { /* Should we create 6 UHCI according to ich9 spec? */ ehci_create_ich9_with_companions(host_bus, 0x1d); } diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c index 8ba9499695..ed37d6bf19 100644 --- a/hw/ppc/mac_newworld.c +++ b/hw/ppc/mac_newworld.c @@ -418,7 +418,7 @@ static void ppc_core99_init(MachineState *machine) qdev_init_nofail(dev); if ((machine_arch == ARCH_MAC99_U3 && defaults_enabled()) || - usb_enabled(false)) { + usb_enabled()) { pci_create_simple(pci_bus, -1, "pci-ohci"); /* U3 needs to use USB for input because Linux doesn't support via-cuda on PPC64 */ diff --git a/hw/ppc/mac_oldworld.c b/hw/ppc/mac_oldworld.c index c7224d70b5..3079510058 100644 --- a/hw/ppc/mac_oldworld.c +++ b/hw/ppc/mac_oldworld.c @@ -304,7 +304,7 @@ static void ppc_heathrow_init(MachineState *machine) dev = qdev_create(adb_bus, TYPE_ADB_MOUSE); qdev_init_nofail(dev); - if (usb_enabled(false)) { + if (usb_enabled()) { pci_create_simple(pci_bus, -1, "pci-ohci"); } diff --git a/hw/ppc/prep.c b/hw/ppc/prep.c index dd8433d0c9..15df7f3dae 100644 --- a/hw/ppc/prep.c +++ b/hw/ppc/prep.c @@ -539,7 +539,7 @@ static void ppc_prep_init(MachineState *machine) memory_region_add_subregion(sysmem, 0xFEFF0000, xcsr); #endif - if (usb_enabled(false)) { + if (usb_enabled()) { pci_create_simple(pci_bus, -1, "pci-ohci"); } diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 2b2cc0cfc7..d2b8b12150 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1530,7 +1530,7 @@ static void ppc_spapr_init(MachineState *machine) spapr->has_graphics = true; } - if ((spapr->has_graphics && defaults_enabled()) || usb_enabled(false)) { + if ((spapr->has_graphics && defaults_enabled()) || usb_enabled()) { pci_create_simple(phb->bus, -1, "pci-ohci"); if (spapr->has_graphics) { usbdevice_create("keyboard"); diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h index a31044c271..748d0597f0 100644 --- a/include/sysemu/sysemu.h +++ b/include/sysemu/sysemu.h @@ -228,7 +228,7 @@ void qemu_boot_set(const char *boot_order, Error **errp); QemuOpts *qemu_get_machine_opts(void); bool defaults_enabled(void); -bool usb_enabled(bool default_usb); +bool usb_enabled(void); extern QemuOptsList qemu_legacy_drive_opts; extern QemuOptsList qemu_common_drive_opts; diff --git a/vl.c b/vl.c index 415535fb46..7786b2f921 100644 --- a/vl.c +++ b/vl.c @@ -1002,10 +1002,9 @@ bool defaults_enabled(void) return has_defaults; } -bool usb_enabled(bool default_usb) +bool usb_enabled(void) { - return qemu_opt_get_bool(qemu_get_machine_opts(), "usb", - default_usb); + return machine_usb(current_machine); } #ifndef _WIN32 @@ -1229,7 +1228,7 @@ static int usb_device_add(const char *devname) const char *p; #endif - if (!usb_enabled(false)) { + if (!usb_enabled()) { return -1; } @@ -1261,7 +1260,7 @@ static int usb_device_del(const char *devname) return -1; } - if (!usb_enabled(false)) { + if (!usb_enabled()) { return -1; } @@ -4230,7 +4229,7 @@ int main(int argc, char **argv, char **envp) set_numa_modes(); /* init USB devices */ - if (usb_enabled(false)) { + if (usb_enabled()) { if (foreach_device_config(DEV_USB, usb_parse) < 0) exit(1); } From b8cbc738de38f2a669de9920fc0b0ee14c1d2dd8 Mon Sep 17 00:00:00 2001 From: Marcel Apfelbaum Date: Tue, 6 Jan 2015 15:29:15 +0200 Subject: [PATCH 35/37] hw/ppc/mac_newworld: QOMified mac99 machines Signed-off-by: Marcel Apfelbaum Reviewed-by: Stefan Hajnoczi Reviewed-by: Paolo Bonzini Signed-off-by: Alexander Graf --- hw/ppc/mac_newworld.c | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c index ed37d6bf19..b54f94ad53 100644 --- a/hw/ppc/mac_newworld.c +++ b/hw/ppc/mac_newworld.c @@ -502,18 +502,27 @@ static int core99_kvm_type(const char *arg) return 2; } -static QEMUMachine core99_machine = { - .name = "mac99", - .desc = "Mac99 based PowerMAC", - .init = ppc_core99_init, - .max_cpus = MAX_CPUS, - .default_boot_order = "cd", - .kvm_type = core99_kvm_type, -}; - -static void core99_machine_init(void) +static void core99_machine_class_init(ObjectClass *oc, void *data) { - qemu_register_machine(&core99_machine); + MachineClass *mc = MACHINE_CLASS(oc); + + mc->name = "mac99"; + mc->desc = "Mac99 based PowerMAC"; + mc->init = ppc_core99_init; + mc->max_cpus = MAX_CPUS; + mc->default_boot_order = "cd"; + mc->kvm_type = core99_kvm_type; } -machine_init(core99_machine_init); +static const TypeInfo core99_machine_info = { + .name = "mac99-machine", + .parent = TYPE_MACHINE, + .class_init = core99_machine_class_init, +}; + +static void mac_machine_register_types(void) +{ + type_register_static(&core99_machine_info); +} + +type_init(mac_machine_register_types) From 4ee9ced979e68522ee38ea759e7630ac70f15fa8 Mon Sep 17 00:00:00 2001 From: Marcel Apfelbaum Date: Tue, 6 Jan 2015 15:29:16 +0200 Subject: [PATCH 36/37] hw/ppc/spapr: simplify usb controller creation logic Signed-off-by: Marcel Apfelbaum Reviewed-by: Stefan Hajnoczi Reviewed-by: Paolo Bonzini Signed-off-by: Alexander Graf --- hw/ppc/spapr.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index d2b8b12150..b560459e83 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1528,9 +1528,10 @@ static void ppc_spapr_init(MachineState *machine) /* Graphics */ if (spapr_vga_init(phb->bus)) { spapr->has_graphics = true; + machine->usb |= defaults_enabled(); } - if ((spapr->has_graphics && defaults_enabled()) || usb_enabled()) { + if (machine->usb) { pci_create_simple(phb->bus, -1, "pci-ohci"); if (spapr->has_graphics) { usbdevice_create("keyboard"); From 75c74ccbe1d4175edb79c6f810c2207dcf5edb22 Mon Sep 17 00:00:00 2001 From: Marcel Apfelbaum Date: Tue, 6 Jan 2015 15:29:17 +0200 Subject: [PATCH 37/37] hw/ppc/mac_newworld: simplify usb controller creation logic Signed-off-by: Marcel Apfelbaum Reviewed-by: Stefan Hajnoczi Reviewed-by: Paolo Bonzini Signed-off-by: Alexander Graf --- hw/ppc/mac_newworld.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c index b54f94ad53..c3770121e2 100644 --- a/hw/ppc/mac_newworld.c +++ b/hw/ppc/mac_newworld.c @@ -371,6 +371,7 @@ static void ppc_core99_init(MachineState *machine) /* 970 gets a U3 bus */ pci_bus = pci_pmac_u3_init(pic, get_system_memory(), get_system_io()); machine_arch = ARCH_MAC99_U3; + machine->usb |= defaults_enabled(); } else { pci_bus = pci_pmac_init(pic, get_system_memory(), get_system_io()); machine_arch = ARCH_MAC99; @@ -417,8 +418,7 @@ static void ppc_core99_init(MachineState *machine) dev = qdev_create(adb_bus, TYPE_ADB_MOUSE); qdev_init_nofail(dev); - if ((machine_arch == ARCH_MAC99_U3 && defaults_enabled()) || - usb_enabled()) { + if (machine->usb) { pci_create_simple(pci_bus, -1, "pci-ohci"); /* U3 needs to use USB for input because Linux doesn't support via-cuda on PPC64 */