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 zcmce<34B!5^*Da-nsC-=Q`=IMa}b#3`&+|sB1=As5I-O}~i z(k+)683t|JQvN!>oyw8o&b8%+H#}RuG+bN$1@JN(ln+B0;J*M~7TaXR0_hQ8iaogH zUvB~`4&Yk=djWhKU_8Kg0QLs>2Y?9x{|K-Tz;^-m1=s>G5#XNy+5!FfeX18fC20N}>}2Lk*Hz(D~23NQuWCjbWn{1o62fPVux6yQ;S z!vMAc91id^fFl6@9bhWJV*pKnp935T@C$&W0DcK@G{CO_o&~TS;240%0geUuHNbHI zI{>BuJOOY#z>@$c0Q?8Qi2yqRP6F5kFdg7Gp8c0i8RB$YJS*eUOD?^5+L~!oFFSk9 zjOqJp+y@L-&YIPxInA7wF?EJHb>^IDv*t|8NK7yntuj}xx%RrX>#i~9o0qR$pB}+o znSI5fgsUq@js7FylJ%~7LOi5Ax4Arq{*m@xT~Rs2 zwzoZNb@SplnqthcP(StOs838_-z+x<2F{NON?@*UJb0?Xx$w%nK zJ4k|iXQ16xN)kP!IF{E}`?x(TPHj)1SJGc|Mw4wypmv(V9!#KxV^X@@JIMv}{!Z?i zpG9I^SERMi?$t=<{XKAIA>dqxm($QbqOmyHGz=s zFGs}Re0Shj=Ivw{h`4KZLL*xRg#Lx|<=xg0w#F>ofx*qfuqY`4>dxJJ_c%IGHMPNZiA%LkdmPA7Aj zM;h48b~=WY*{NOVc$Sx^i>i&XsuinBScjcXqz!CPKd_>qn@1wQAHAG5vMEkF$_|dT z2T1(v@$fHK;KuYho~jUw8d-k_a5u7r4mt(EItR@M@VtXA1d%^F=vX^MryU{#0vxlm zLxdtu3gyffIq67tI*G=!wj3I3v^TOtP9eO*NoRr2$1fs;wGE&H*!(1#2n_j2bULW< zCDB1pU7E$KljtyZFp1g+OZwxzpf!&`OCA;paF^@L26i-wPBa<`t4g8+fqis;I*x~C zZyGD?PiOJlV`=POxE;{YJ>MX)t}h!2_rLuuXm!t8_7PM$f$EX9UA*mimFv|8mYPiG z0`u%e4eTPg1^XV9;G<+Z3rhV4Ku{W4;Q�uLOrBuniQ*g#(dtAp7+|Iv&WI2Z|6J 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 UV|({ssXn&%gcl4Q@n5jS5Vv)CNjn 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%0AL+&n4~9&`uE?gH z=fY(v=Bk0LE3F&lC4eN~utm&-B;AbON+n;Tk@D^Ye7`H&j$=?O!ANH}<0D?zFZbd= zaO5%?yGaEFaP6u|P4`w@Q`F|Ib2+@#E}V)cbseWMJGp&TPLn%-r@zR%C=72)zNG-F z&#z?Ws=-auDuy2NR17I{RE=lJ!&5MQ&P#g1`!dzyc3IWTtx5%dR z(SZ36_>23`O^KyRxn9rrY5Dmq)jM!K(!RwTON*SvV$ym33>)IT@*ANL;JJW*O^la(#Ox4q zBYk)H%qiYUn2+x3?I9&_Bj!Vb({}`qTs+@S&m&i3!gelCPNtTOV@*v}@QM<1)7PYc zZ@>SRyla@L@6Z%h{*^P`+rW4Jub$!c7o$^J@|<$nvUqx@vt%1b1(vBxnXT$BW~nH? zW`v9Rg}S(?W1$YDm?h{c3v7#Xnq~nne0NIpl$;{JXV^(MGg8@6Sug~Nh8VnbCrZSz z%7W4POIbJ9ZOkv)i%4%@vS{|yNhOk_K2*{Nu*Fo;aWR5i280#TbJe&` zZDNmNc{GH<8KRNK&lYH-Ek^$+Tz+m953a=ZayZf)+$SJMLeyy%4hcUQ8$=v7`=^nw zAo*EEtjTiZkc%-cU}hiD!f~a84lZ&G$Msw1ytDhr*~#ivL;S^gll{{s{0+?92j3`%X!g1@fJ%5j#!(TSI8bJU&r5kQ@_&NKK$MOEDMq! zlNoP&AIAY^s<_&je(U6LJ96vP@)|GXVW@bj6fot;tUOT_+fMw6sCVBUurA> z%98xpe}B_7ba<^Kk^j3l@W}_D2>L&7d5$KQ;Ul| zqsysf_*+Oin%vy+7B+F4aK8VmhZp=Eo7zpK3Wiblt3$!=Gl?OGZEv>T`7+(=zoKB0@pw-=%R4Z6jHL}8Hwp_&aE`IJcG`iPN{+cZt$5w3xE zE;l9frT@VFo!~$8D=uhSM7JOpF(f1SVO`7Hde0uqnT895NrlU`MwDhCzU7X$^%2)& z&Uo5|q1$mo&Q85TqkeIYzX%bd9A8Dm80Wk&I4!}LJX=tIB1z;lNM`?}) zU?Os)PHU*?a8L&cE4Z84MLu@VX6#{Ci-1aI0zTunbvs`r>$abDd>lP;5HCEH=XLRv zzu9?Jz7sRuWHvA#1al^*>?6f1Ci6?`^&YpbU}Z01VGEbFyflvKFZIPiIu>G!r!&iY z%b51wbe4=y3gG4?6|C!f6)Y9YL+rIZb&$lpJe{QhmY#>>YR7K26B7}7j@Q)dV{8>e zU2X4~(3A<+jnX%Iw#2PXD zhu`8-E+(9`!nq*6(m#{0GcJ@aV7;Bov?H;L8RYL7{F!5VDsKO&C3mTEHBA$)B3<+2SHEB>BbQV5#6l=F(AVKCWw0CKa2M7pGmwSV>;QP5cG5trEl{!EI7=qbJVx<+ z9MAKc2J+xP@e`K#c9C#*FGQI0(I+&S&mYLTL8aV$ocL4p_RgK0mVYOb9$aR2u_rT0 z%_-5N!au#ONZ*l@h`9@R+%daG;f4EQG^V__on_4bq@e3d`N)T`k%zJ`N{#ZN_g-dM z$c4PIqz65=;1n@H(lbP^azv7ZWN3j9xFjEb3_(y7$<9xIAzImk?cdV(*vGrQ+yxq{msR9WP7^~Xn=OQrC6p3zU$ZI0OaaSxKUN2|@9TYUtHyG% znsru^79*p2YsEk~_abcoIqfi%fEABi)Oi!0>mR%bE5xUKGzb=ejv-iIhVLFnb+pZK z4;IuS0Hx01mesnA2lpYAg5*k&6e#j5@ZBCy-ha1PB$utmnc{UTsA?Zxzgq9qrGsJq zeLT2YpQ_z_ot(`aALy-`566!U`kN^wEiR;(ytzTYs>kkV1DzU)EB~fw@C?E`_nWjd zFI`E&+GrH*2Z3C;>adqt^4Pts69!RnK6c+>&YXOP&wQ3SVGkRXA8m1amrhQb`y|fr zdb+>fXR)u?~Y1>Abw%IJW|{UU6OD z#pZ6JiX<4;GI{Q2wu%{((_q;!`n6B~;|Qt!ri^&+O{UGAn{0y*Fk~;6m3u!=^WMAN z<9^*|LO>fwJb<$}Ug^|^IEt`dDLmK3a>ZJKXo2sJSXx#-6YGV&ndG{|E~AQ=hevtQ zO?kOT8qp#?#gsaTU)YR$c{KfbVF((lX)pv5*7mo&pGtkk{)#Ckz}OSNVl@kWD))UP z^dbF_CruZu2e47)wf{=<9o$(&#_}u>ZRidf#EoBcqQSHiyCZG#VY74OlQiA4K5)xX z{`+^Din#M5JL*!OBbui#bmxXkpeSccInD(ETi@;!)ubA)$NRLLLT+5A#LikU1Xm%JV^ zX%Vf9dEjkU@$y9!jE;COTJQ0O@wXR>KGFZ6&%*41Au?w$4}PK#@a`-^-Uf?mc6dE{ zT6<>kcymU6yV*u^gfo(S$ayI@g!84x3#lFX0oG5-dVDcG%U&@J61u{>k-eXq65S(o zLOG6TF#nCN0`K9AAa5aZ#lLFFi^h#Nn@7UU3bE$LI7gDZXOv(#Uo0Q@;aSWsi^iM# zkb=W{v*br|ShR3nv;l9Yd>YX&?S3~hse5LaWAg*R*SDB15l1rTQ%3F&>d9Vehl|Y~ zN+M`a67^_e%cN&HH$*9GWAq`r(n!S$b{j@oDE||2;VT=H(<)Kd$NFKHKICHaw-LRn z@22ncfgIsr-OK!idFzzcwmnRE#uq zs-VX_Q4c{T-uzE}_!9T6Dc0$=P(avB;qc1*KXvO9-oWJ{l}62f{)smX>5?CjQw?nC*MatZmOmXwLHHIB`Ju|rm3g0 z+gIeT!Dc5`?k@J2=to~0OQUC8hD?nXMOPL z``4YUABA4v+g$9C`w54Q^c$%}y%e#%RKn^Y>>mURAnPPyQ=*|A^ej?nAJKMhK9$ez zWZshP9s-`qZX1P*A!X3kPYyJ;ime6{;mK2?KXj+cD8(~*qP+Xjxfu!r{)$jQ#ZFh? z9Lsob8DIOQUU;35N}Dw}nDUdL{5!B42b0dl1qf)s$h4#cCb1F{LZ)>tZ}-s2JWvphg1L@v4HXbFy-@~^PAJS0`U7yfT=vFa~aPY9R4AF%CnS9;& z6KnN*wMPf@&{};!zei1OfU)jl)t_J^4eOrra#vBgHw&yE+5dsUUgfDCd~Yud(^EU zxFK}N55?{ppTUVk>Fd-OvLl7)mk;iF?d3yzUPs7Iq34%!_pF=}-4yS2mCS*9!t12_ zCuhjyq*U0IzVq^Cz5k7C#BvqREgT&VKP7sgW3)L!(Wq}-SR_xtclR8irJXjYnR=mRDE+s%53IKYgVcmmv*a+LhJB`uVrxi39q%`ht8&9pPFLq6nNw}S^>grKfCR6Qm7wa^e{HqoN&dy2kb zR-+U>2{T|alA2qbe?{(%

X4t>t*9M4NslDm6Oa%Abn~XfDe}#Qhj)+B4YaW$LPR zExxD4c5XRuBk`PEVKnxcH24=z{21N~uHY(uYs*4`h6J0OpK{vYUL67UndR$L* z(G4El4G`Vvsv9t5{`afPbWf+}@8{{%)LY-JzWS=Vy1Kd(%c~p8hm-J{V2}L}eq6?n z1DaHOXr>_Mx(?Nu}&V)YqT*;OnQ|yG!s;O^JWv z!>^w~rY-~^*2Oc82Yb2Qi|Z`qd6RekQ+xB(Xy>l_2b(y_{F9XK(V)f{MSv0 zl=mbNVfEwBH|BbjgeTrso_(yqhHWx7`08I%pfr^(Eqd=evxD)C;GLa%U*P=tMye3? zK;HZQml*&ogOLCVfN*v3In)nZcuc5u zdo$w?L#E<`&^BZa@%XddNU=xV^1h1m4K(^qeu7qJ)HaW5Eq5@|g0Rn$%C zQb$3ENoykVv5%ogVWQa#Sb4P7o?hBsOKq@!{P}$(p2XJAx_lblqtUCZVm(>JYBmMJ zulAxl9Ab5Gxp&5Oi5-+4H2xG4`NWZU(x_k#T}A%)Dz~1~>Y!)Xs>_6vNjzZA)9)D4 z`B>KZ2F?4q9sk4oT{W&hHnq9y6N7jyugcv_`#-)rqs4x1-!UjZluTj4o-CIC1)I(i zgHZcN?cnFwR{Gsw?W51_!~C6txvMYZAwwvGRMJULfM^6@RrD(p{AGWsB~R}6>ecru zD_K)9&!V|7-Z1)Kc~RxZS^i|6AJqacXj4co*JX<(myzrlV`sCWrIG4JBOCcFP}z>@ z%b(sR2C94eZRhbxm@hCsuX5WIQ%g8HRLdVd(v%goisHyQtmDd>?sHyY)G(?l1Oq|E;{U zVk!-uSnL(5exgKq3hnj^lLLn%|LhYb>K!<@;@pJuC7i#*`A3xfu`u-g=f?g>S4Uj! zMl*g~4doS&^~GjP-*H8RKiJsiznx|e?DF`*-Nb+j*~k$Trx++32$LsTUxvm6godXu zbO9SdF4u<3cgA;7XM&=DSGk250D0kn(*mdMGyN;(5&eB7vHyjBL#;f@4L)~$!V#~s zf(;VXcrq{{e_!6J_%7D5Y4r}HAL!Uri8|^XqBn_{7cxL`CRe9(oZIjEg96wxj{G(l8e& z$ooC^i6BDY5bo@J_DueC!C~9kS)~|F{))BPyUrhE5%2_Csl@Hnid?dSJ4c;>5i}kH zRtg5Pxufu7I&QHWxX__55+Mk(;Ng2{_6VXyc-W7yEk0uqvS#vI)RML;QY0b(>!roa zKcbJaCIT=f)u{7jDzMCFs=Iz8P+A3ulwl;h~bnN_T!Gj>Pm`6je1+;NkvC36Gr9NrE7 z9{as8c=E3dbeH0}^JS_!!5qQg9h8rK zDc-%xa#rbwkHll5^41FCM|uaP@`PO0Pk=M|VjkB4TRlYMXLHN&R-EPK1R}&cDW$Ww zqb|J&Ct-R0@)|0qsiG9d^H>qu!G`a_EML!NQpxPb1dFvWnsqZg3ro-SC~+ASPmirq z24l0L`WQgGZ}T=WLO~VHs8aC`p{t z4XpF+$UL9=L?zV1*L*;x7+5hy+kMvlM!%(ZlME_*;wZfgy995^e1m>^zKQL&N~4a5 zh1WECq2dE+pV;FP{GoiWk}?>( za5Csc*TkgYlNjv%N>*X0WgF0J?f7OjQQQ1C`^ zw08S;+f6E841c*DyL^_vqP4Z-vx-HBiLo&B`shc`;R;!_O{<>f$kOJXgBO0bYgOm$ z(Xsd9O+X$ z(urPWSsW>z{CnIyKZR9bdN^Euz6k?Dv3Qt+W?IZVlm8Azwl+LNS$n>TzY)3x-L2N6QQk?xa8H$fA77LdBN4w;V1x*HKHrj+i;M?!6tSwB!r;YQZ<> zgQWSFZ_XdPn8p02UL1pUjj{Zq*mVqVv5r*|e|eYO(-TLUNQnDy9nHi?`CNNPMee+g z6S-r)b^Y>pMfs&2=XspxFe7WD+jINwgxAr|FRyBH+h2Ihl zT5%iEVZUNKT|?cwR~_^!-W2WSZ|$qn7clb?`Phw=YCIR7^h=iBX2Yc3p7Ymekuqo#wJo};vdmgES_%*=a1^zK^J?xA-Grs!a z;0+mCph!*fk)d6C&o?t?H{)w@p`G1w7(r0%g(R#ou`fK}7W@TfBT^QOg`t0cjwG^` z3CuUHw6kaHbFr@Bl7lua2Bo^d@gh-*YvReguduf96z z+)pf^Cd*+KicQI>2y=V_22XYlhw4a<7W@%Ah|f1`$v~1^C;K4Bf3j9arJJ?J zBwOkz)~@3_#HH!tej1YLQzaJ*;(Zr0<16rteFpxII%53$Ozrqj_7Pdfe@nvA-g4o$ z2{Fc;PO_*$=rNx=pk4aOK3em)s6*-bFV;rSfB10LLRSVwAsfrFrC3B@Jyq4K%$cI? z``JEy*gpm^4QJwgpmjmhbUm{EaZx+_vwg(O+3aeChEowdZ{hrXVd&rPFj>~@Rc8N@ zut>`kuh#vOeXizvKusy5FSTI~op%;bl5vTqi5P_^S;oe?%zrL{b?Ae$bD4Bligng_ zsy{F`XrfQE=`Nm~fd zG%?5Vz+n=*+3iu>xmn+)X}&J|R$IYDt+mTOR^9yQMf-G{2TQpZ@zmn{DXr=vUi0=8 zaGR1UAdPvA#@B*fYFB%GJl(v+yLXeFp21qjMLZds#k^KOD?XOZ@AoQw`E2)jb_pj7 z5tHhElp|pAlP)h8jxrr**n2>%HS*dNmA6Pd9`twAv+{cO-WhK9wdzXI1~Rq z&i^b79qYqroZ+B}KLw&n?a(Fr%tbTLQ6UsDcaYQh69p!SF&2h?^9U0V!9VkR!pLP% zx+gb_1>N{x>Du7j}`iH8rcm#a{|g7VNu6uFir;7?klsNj0`D4D;`ip&dN`qHXnHcgF;5sd_+df>)*Rs0l{tPz^-B{S|sL(39 zF}*^%uiL(G_M90cg*Okr;}PV0S-ndBH-yXATKNLZj1Qt;&bQ#~Ofx0!9FqQ1#f;)AP2G z|lXCpHX02*POw-Nx zB6iDmb~z@ybN@u*C~o-h>1U5Y9zF-Y?hw@Z75ODc>fuzGx@VSCPk--`Y{#^IbFU+I zgjyA`*N^urkJLIQKJuJnh(GVm^DXoq4E4jjFY$5$eL<0)sk6lg8h=#GiQM0k0P5ZK z<1dhXwB$@_JYrPI3ov^dXb&@++y@i>gb^jFF!UOmufXou-}w~>Zp;$JICzRZ%>2VY z`4)xWtx!kn&s@HA=f+=X(>hc~y5l(OSD?ec+)cvr zq_{!9^meG}673ri`$cE~qPH?=XFXMz)-zGzDYXA`Rw*jyUDb)3a_krmg^p&e`VkwX z*t1UlBvoba_v7k^2D#=|GAz;|HhKjXkHOVWKf3@1;29Urw{hzjTGgKSA8HyKcj^>J zd&Pw|+^o30%G6~fsBWvA22P#F@_2Wahv?L+S-uu|Hba>@n({lQy^-o}#;&4qw5u!O zPdmoFlS-c-tzAR=1O9I`debYvB|^AfeK8+yAE8XSu=he6c22ozTIf}-`cf;3aSR+k z?LDHSnzY|0jk@YZ!q_&JI=(0i`omgdj3a%-G&T&8`+;o<)9nNuThzR&MEfYlF{Fsq zLqMz*<*pbu%lm3!D%dlLopniUq#%)eRymDdfA_80+Zk z=UydG<~^Zg<3i00sv~bP19Qrmh8XOzVaDY!Z~N2IQ@J;DxRuBkhRzHo+V)@6WcNX( zZ=PG3Cil3oG5GIF8e6Q&r9IkbSbr$=hb{+MlcI^KNm;X_nW?#X^G^AOgz5%O`7_IJ zlg&HjJ<9vtAExHzDkJD^H*VMz)_N?^bH7fdK*t!uo+kTqVLVn50_X6k`L0p1F4R23 zjk%VESOhQ5j+r3OX(D1U;lyhS*bW#VHwF`GrbTvjtpyhMNM;{pUC2K1t7wfU?4xK!UfrLMH7#uZ znt%_@;M-5wH|tn7K7J;?gqu)sIA$(&({1Ah9Lx14WMEU=^E(zSO{Fiy(yLwyzSV>? zR#9wc`EMKU4sB11-@D21qxtI8qr-Z;p3LRAx;gLv z&{>!qwSq^>WOf}3cO=L|M;h!xe_%b2-^=3lEjEHo`bMixbPV#d5sa*-JtMgz@kQ2k z7rOZ-qPU0Q-s1eP`P?LUk3SLH-6v98A-K-cE78x{{nSEi+<0;Ph3>r5Vx&a3qf5rN zA+b65@J_2AOMG2ugf0X}Hs;q;$*f$LO?fe2oq%Ux%Y>Qim0PBMHq1ph;_Bd{Joqn? zNoXEg1;bt=ebr2qUt*0qmX%*Zc?;p<^pk*JC=&LMX9T~1pvgc$<=qAaxYM~DeuznQ zD8Fn_fM<}Gt4;iP3m_~X%XF8E3PXSSBhj>XYY#Xau4$*Ap&Y8u?m*~wQ@1*mwB~wv zk0K5A2_0$pXtumgb!lfEjuC!lHD3Siem8Jhbx+@mZ zR}J^`pTFLYw(O%e^yb!F2rbWi3j3)cpBDvsd2zgE03;Jr>@*Mf4xIQ1oVCIA0i{PSvp>6)f z+qfGGEI%zEf#jBRV=-JfI+7?)ZOw*`L<|-Q9ZA^4PG1R!V=lE4EkzF-JOfIm96+_C zBuC%*Po1F(!nJ7>=FcTi1-kWb>*BQ^DwiiY!c`Xfxv{c?Ig<@e<2y36;v~m-e}{`! zn7Y$CK-@6d6?LyO_z7_r@K-mb`a&j81r&Ru*U_A}@5l#qHm{s>|(Hu}htH(p)o- zjHX>Kd2g;xbC<2gxN;2}KWHq0QxQ);yiLaaa_T~7Vd%g&M9&xN{BX#DpC}K955?G& z&3`|_2K;lYRZsmawW!{KD;B-%cUU=u&Fa`0cQ0ksLnvItTabF@0T!_0CcT+4k5^*x z7$X+73F3m0$SxKQ?B4C^pkJMeFFva%`;@M`*c>(S+;G(sXom;z4o@Re$YkRg(j~$$ z3c~@4*)q@JP?eV7*OB3(ATYi_dU5=P&czs$iJeZZy02rnI#p}z>liX|FCkETMk+=> zn7d}S?J^(CQO)m3_B5X3G%wqv3qC;TygK*NoBooLt<->YP>;bYQBeskn`C_a{^ zd%1Y@RG;Nf+FuZpgrNqvp$=N&#a)-<#=N63S!e=m+VU2GE_L#giXC(-@!s=k!r84c z|EyIknynZL_mV=ATkrKJ!Ar5&8`6Pk5?)=YkD)0yLSqcO)bgbawH38VHk2^|qU_|} zOxrOU|1j}wg0kJ9qh$_~kx7auKA<=$uPsvPjs^IX@(~+*49jKv858TneDdaa+N3yz z1d6g7@x9CH!q7n$L^EdNTgc=6eaSnh&B?$SrJ4tp?^NyC`L^0`_Kc|g+xsJG{~qtc z2ZqOy94xdPpj4juwC~tmq8@YaUV}&;5l02?diCGkzU=tI&=#IYIm#BWvY@h`FD9wS z3PUw_Yk>id8~m(!scGSa6Zj71ejuY%tQ3~I>r4rteJ1pNF?AQbAsl}s(diTfh84QCK`qzR`W?k0Wi z0}wbGQ%ql1!P5=;d^0-8MU~c15k~Z1L%NKHP>aDB`g}QziL2nD*t2NzlhjA9Xu=bW z*em@{(&a2ER)z(dxQK+%U1Fdeqj(50cMrY~a-Q|fD*T49*wcZxV^-3}e&!9@Du{>Y z?lUny`eX^N%WPzz+C!<03`DO!Kt_5FtD{(@>Xl>evXT>i|2MP-H1RUkj^^07Y-NdB zV;q|J4dJF*;~Lx5N7mYND3pvEVQtmXJVS&PhFs}6gv~_OL5m! z?8{!ejfx6G$Ip>+QUs%(o?ai5z4KSUuBDDq82TSpLrljG5)Q$qs0=ZbjBxuC@$tBi zUxT>8hnQlLM5T&g5bGCQmp|N=h}nPT3T19yqoh;3t@=zrdb!|8(x*tf3ywJFBK@V{ zNZ(GRmyjMpdJ(A?X;;CKK0hM;7t&zvEX7Fy=sD~-39J=ZKGOe1`^O^vjD7dYbENwO ztf@eoR?&n_bgD+YvGW|&M06^=0?GG#Q@K|e_FGmK(Wy2tkKw9zKRmOB${9@w_GjY7 z1bBzVl~)-a?lsA9k3xa=Sf=_L3N~%!U`M*Yq-a~*d>i{nQNsHpwk6Uqz&~?MH+B?! z6nN(r`1{f`JPO3f0Q`Z)lQ97C0>b9P(3|tfAk3&MrXP)=Cko2WXa21gJ!uV%==jq6 z-Bh0MhZks%xO?~NcCV6o2Z6jjW3q`5j4BMrhqYqxR>Oershomu`e$tAGKsz?N!Nbf zIMgO@?Z45B%g8FMpTis&-rIec-#!)IcOv0cSaFSEx; zVo}RJ!~k489rGtqZOH(tE!D2zp%~ZnqZp6_X15NULcGkQ^)YFMp-&1Z&poP)+MB7e zOA>lwKJmJP4lG5N#H1m}E^2`xnCh?!Pkxh4^lCvzuZSs+;Zg=N`5g%KykYF(49v^r zV7V9`2Y!_F6+G01nMF?>>xq2)X~3+ioXQYR4Ty7G82;xK%5xgjrL3e0Q=M_l;B%`L z{C|u~9ZV^@Jn!zq-XjKH8QZ61Hw_1(jCCMUwwnglb6Nhrkg<|GOl`1sSSkxC;jm=y zmCC>rT}gz;>O@Vk^)Ch<82Y-_oZ%QWk30Bf?l4@6Cdg3p$Dt!4-o1F$k3`bI?|1y6 z7VrN}=DUv-^flW-D$~-2Iwtv7cfx_=C{Oi3`0k@YLUfNVl(E3zWtUkUdryFR&Qce^ z*DnrHgV1d~$zw7C)Zp|D!_3iy(RZxaH1E*m#Kw}Cm9&1Dh}NNriU)+4sAPOegm5C8 zhN1q{7tt`?+2jN1kLk@cXUMpNXvx_!V#olZp@k+P?>eFZuSfENFPE@_hkiQghhXfl zN2>;yrO86@U?L#F7)?BpHF4caWqM71=|)YcUttTEF*-7q5gqs3#Rho^E;w?rj)x;? zgNh%mI^WO(;aO zrGW=~Gf~dVSZII;Uh&gh67FZNAMy+d<4ivt6wM;$k3$x4MLz|YYiWkUc~}z&9xr&R z#RD!h<&Xh_Cp@frmE;n_t~?+{x7Ba;+(@pM12yl_DTj%O+)l#0O20QLPfBoqVHi#V3;j6YkX)c%JNE$;G386t2d=mvjJY7OG*DbGgb zhyLk9L!Dp^72uJx^UL4C)WOWu$o|-uI%G0)E`@>C>T=BV_q|NQ@HH(y%)fQ1!RUwS zXf5!tI3>gBeI&e55yf!jxG+4K<|!~jCE2>+efLv7cSfj(zDh#_K^^_qyMnhavCbl$ zPYiI{dqga}<;4pFf2MqIZ(Zz=O5p`BK1_W-(HWEur93q#_t^JcnAsJviBte|JQmYd z5E0#JLrA!H@BEZpnKpx$T{^}>4op1c(nfRq@>zX8;|pTQWBo|XXYjc8hxU3^*=?X{ zHB3AFV&0K?k%S2*3^VIqXZaGE1f{Yjf>OhsMLBB{OoASVf|qsSC262vZ;+J;Sv=2W zv5u42k_rEGy4$DmDpWa(D$%fN0XYnLbz!eKT>;gq+^1Ajc&r4BCq1&zTkIV0}4ZH zw=osWg#K@`-x0nkyT~wK=mG3H$0N%Ak5Qh<++B98ZVSDu=3=IkS+tSWP+nWNg}uz? zn#Y82rEyRiM|r`(;$POAu)x#~bvA`R zW8lYK)fyfktSp7qQ96?73qz%ujNTVIh)+5kqPZhBL?q$X!N=?c4erHp$r-lSAU73q zd82T-_xt<`>!*e;Q}Tfj{2&C+)rFN|?v~8E7;o(~v?kAUVFipYqLL*$gsl5u9NU^t z#=Ccyc0m?vB){<3AP8ds_eL`JUZk)oLfAeCJFXj6+6rOitc)AhAF_C!8J7H9Z^L}t zqrQ;85yA{ED{X?X!3JUdAdKg^uv;yJJ;pF!2yak)$G$frYKa-G^N$8uDQGsH=dx0K z$||$_eb)(L4`CC`DMKxN5LRyxmJDG$&xG;oKxB;gR4q2kk%@oB(%(;?zxV~)9BRM9 z?GW}-(UV&m{kt-I3fO0( zF~Rnu;xjxD$6}1k!Q98LrHyw?O@slr(r4hc6XP7i3x3P=ZDW;a@xS$_7sy5uh&AXJ zbsNnvlm5#CgOy2$b zzDGiEBaCr+M?64fyA{B%tA_ z`g+6L>KllSu7)$}f9zG&lMq->jPMwQZ25_P*JrW~j8eONpQV?5xU zNA!FhIKVs(=$w2%`cVbr`Z=B&Nm^74E$(o_4LPM(qX@POfUlrGfrK9eKz2EOarRgQAuxL??_xe~Mv^ zO2%RBvYmTtEk>#VtXU%D`QbXVK)p7~3KA^7e8QIOaJRom2s{OWEKK44Col?$HRZKI z;If@DmF|HAcBp|EzTi1w6mF$FhzVoq-6Bfj=>{t>oUA9bVp(6#;bi$hv#%+3cIdJ^Ih#2 zF?8Jt*~+5TYK7!xG=TQxRL2k|{A$NdLq$}FTIjZkc4FeWD(f={vXffiB0kf0!!*ad zI8x-(4o`Djk4KN+PIEknWXCm*Yw6R|XUVA0iF;dl9Z?bu{ z;7zt9Z9<--f+&+7-K^SQdoIt>Uj_f0`Hry+)jIPXUahs*mixOGtA3?2?A2M0R`p@` z!amwJ9>+Y}w^^@EC~*8uwXOP-mO95V-nQx)%`?ZbH2&Kx_gV$JUR&|z)2TU*AGMB2 zHoNxTT*qoHc7<({wsf9jgf{mQ{ypQYuW{#i`;c0<-=D1=nCG}rRO;J#jxX7NRGRNt zYD?Rqxvq6wvR%9HwG6N0jf8lAQDNxkgW95>?XHJcmQA-gzty^Kwz;*F%kY0810lTo zk~=SSdD+6)nY13AJFX&4d%DOm-S%yp)>ed8{I>1YC64VjTSeOMPOm+p+HQp4WsV84 zkKXKX`xkF?Z7AQox^hG1X4l#+8_G6UZrtE1*;-OrRZ?1o_lsot#*xiIvPSK%7+1*MM~s+$xc>s*+8cCYEhn!^J7goSH4et2b}r0$to$E-uKmcH@=} zYh3u|;;oJm&h^_SR+rS2Z`iE(Kp=Q%NHEehb(2Avsofb`-oi3f^pu_ifVgN%WH+ zPQ~e?U%g%JY?ip@si=yDwQSinncvBR-1-Mnr3=UW`q`RWvZPxgZ zpf#Qm&~fR1AWmhdp@2yE;Z%kN=vVKycO_fnnN%|i`VmFFaMJHoMzr-RVED-13>@#Y zrXSU4jgQWbg152y_paF(pEbjnHfwxr6#B7I=(8lf!T$<*VjTWjxo%v*8Xq6UL*t`( z=t`4^gnp+oA&P`l8@b6i=$Qq`yL$>X8Lnb+yHSG%X;@DV2v)xyDozUgA_{ z1?gAsCiQr%@q$QPHi%Oxh@zmN&05gxDD-o(t?B0!S>YIv=2Tl10B^R&=O#zNeb)Fq zf-O8WZvtSe0coBm3PV#Aywe(=AH~r5**d-SKM z`UOS3)^tTe>ugprz3S1)?YjM!}l}Zty=4 zr*cEGHN#EW*7(gHYy6gIxG$1k=yxhBgOLT4BZF3Uvb5KA|5jHN+!F;avc&z$s%Faq z#n)numqhWz+9){tq?<+X-p=%9^ltmAut8eOCW{fWrqSB4El~{ET4YUM>$AqU2P1G9 zAx`D4wul1C;BYFtnpoPaiGCHd#&^4-;B8hoM#zSMRe@8v*A)f#SmXCap}#L^O}~#k zYBfUcYqn;%KS~qaUu{kQ0Kpcq@t{k`rT>XgX>8LA=oden%6=F9>K#iDd#v$Cnyhh+ z;7B>7--%D*_9|fbW6jq1fgI&!8U6JM+4UQQ?4j@6hnV4=?(se z1gG-rW@|xDN2$TH9&7sN+N|-WW$&yIpeG4!8p*7QGlfM@iw$f^7+1!)_n*)nNuJemD* zfnLSQ4yW2Djea=QzHX5g?O&2Q%Bc>=^CrTRs(Cux$J3#0A`LuTaOa_^5Fjd&6yya- zCq&x9(>^|)_B|!iru|F$YyA@vQgfLZPSq(WojeMN42M%qZWbvelozHZXKSvwgj6k< zkPxeR;u8|ICleFmlALPlK~9+JMjcX-4~Tq)NQ*RgrDLsazefvJI))|eZvxyQKT-Grc4k%7{QxC z=gZ=BqnbsUD+RW3KnP5k*v0bFFxA<>%bh`^5k$XZwARFg;VIdKLcj@1 z6?K$bJLO0iIXVv+!J$YU%|t;YES<7GQ)}Dl7@}QyMMC-&>L`BKhbMKK&yUZ1j7?@# zO7bbBcASYC_8(7jT+_<&gm1JqzhhYpOxKD6jsf`5{IKhe)L5r#>(rV8j!CwpA}u*7 zA=MwYj&qLgC#sL;CgF6DTk=xy79wSwIgMGA;_%>Hpwss)A`piMXOWH%?IIAzT%0%Q z_`q7^S!j}ib$S8seXxV@^*TO8)LQKTewU8-XKq%MI5K#@jt@VEJRKD{4;t`BhBAZv z%27kjh>(s%oWF%OUSoCCDTeYtuj_*PPz~q^;(SZT2N6FG`Y3_&fsPLqxI%n?W;oT~ zsSfZUp(7RNUv-9o41^sA@Z+4056BV)8A$)7<9y*6_Cv9%>iD1{POnY{o)oSyI-a-+ zkzwipondgNP_P^L@G!3MC2}EbOc+;(vTz$>_JHr@Nyj=28Ha%2VSM)8KMHQ`+(n}<3m~meKqi%DTqHA)d1K5SEvm- z!$1l`I*_W5={O&&fJ31Af{rJ988tWbKXja5n-CMtpnoTf`_@ z4)|FecM1Ac3#1nvcXt&R_e$LLTILpDPbr)6>6HUYT*W}Ts*wDcns+^*vTJ2^wF3;3Nn z-UkZV(E=Q8DVkDTmrzm!{9fQ}Ja?-6It3h_vmHog^r*j6TnM==+fiLXdXvCX!SGvM z!9*9wX`HaVVxV^md@Asdbi8kuz~K?wX&vv=$j3i6fY{FH1p^uk4Bs1YSk4X-^ox!U zYZo{?5)-S}cqBZ)4i|8zPCv*k@HEsvX0To`JewD&t-xJ6-nT+9oCQ8n$NL`>_yOS4 zb$n1j;G=-g*YR{|5Mm-`IdH#dn;{K?p&A7xIs<3H9Opg#uuO&w2>ILUcW z$NT#jJ^mMA7YaVs3;5&*g`WaH8xFdhMyc2X{GU4g5E#M^^qSZt9Uq*=;rLU)({#K~ ztDyG)AMV!+h82r~P81l%_H+oK!?p%^j!w@f%_u-y#$Kc28O=nkC<7M(pQYo&q@ge% z_F7RftU%>7p5P4Bonk2{L`)3x2>cN6RXWb6{V2njA8Wi82svs7a6_zQG;%q%HsD)y zIYV7y{-JC}!S1lDQzn9t9cjSt)fqBiIUO-K0)Je`hXomoT^+!U^ND7GQ^gF|2!8*9 zvRd^2SmOZFB^coH*ps>fREQr3fq$suLn}B;*NE6p^nRZy$W=G+zw7jan?(U)E0)C& zjsKW{^vehz*=`sHwUMoIFlK zxFj_j_&6OO)Fd>ZQt^ff$Y9}Wnxe%UZb2#!3oFRk z?-KNhz~9#83^=;Zl3@LC1aebyZu+*#=E*T%)64WX<~Z8`rEZ z-L`u3w(4?atkW+Y@PfTYGavFR!I`eD$2`lUtO{R0yb>gj1ujoM#ua_w$qYi{;Sb((|}DIZeI=J zEmh^4NHzbd-Mrs%|6l<#OBH4_)|tvnHkE6C+waJl1firw+Px0-U0+frHgayRDcP{8 zs$_Hd>XJ2UYRWfl()vH-$h=C5ghSSoI#vVXtlom%mgf2~OSSnAIr6o~9&%)5tgWos zw0ZT0^2&7;r5kI=(HqFqTgdO)UmtQ5##h&1@8#{EKQXEEN~Cy zaY(#dYd+{0Xv1#o#vaGObQ|FqCKLw|$pd>)U0U_yc=ltv4VY2Bi)c`8c9g^~q1b{x zhA=ukIO%ZFAEy%YED|gF7Z`qJFNWBUP;dmN$>6vwt>`gSEY72~w7~GVt=59$whP>Y zlnxjDaVl|NAu$?~CGfuq+(UUB0;h?hp}~}2j!~ggNl0gSf7xPsL5AjAoPcFZ46$0E zE+I7rzqAMc;TV)d6O0I1ZOB7bBCVO}jj#M7aeV$8qNajkIw*`*yO1Z&nF9Av9*2wm z0LNy2s0OEfJOGlNLnVsR&He(PgdYZ-VLV%!Z?6u^_(af387>k68J`JUM1Qx$Tcr#K zHqCQ895sSg%J3o&84hYcqa6~j4a;cMI{z0fenl4R)3z%-TH`+u(n+`+GEN>LYEm=u zkeD<%RV4);oODP*LHxE7^uFdosQdeTh;k#J8+lUnvB0ICB7uKm!i7uwd?9cT(czHv z<}Tr(LdgFb2|oO#8!QE#X9eMyqWJ-1kb{(m@;E&72ZDY;Vyu9m?@KXAxU7H=zd_$O z!s9fg%7SVw`7k`v_f=q4jBg3tgOm;*{lRYRQY04i&b0#fAf>}ce?Tt>1CwD+UO|IL z1VeHQ_#VeO0Vj?CCN3l>xfMwaPL4Z6hd7=>#?U#7@;GYg54L$zEE(}?fhQxS+c*|$ z+M$UFiFg*8k`E+aqDa{Rd?|kPmZD}-gx-#G3?meOoN6XXFSEeYfRRQseKs&Z#_V1N zZeR~u;2vNvTHq8=^%i&$ux%E2C$L|09E~6k)SwH$e~Z&(=?EfOWr33?uD8I+6MZaj z@q2r}L;=IueH`^^lR-(f!05P&C;TrS|2E*4k={ooz#A#WVWtm~eglK* zBPuW)qZEgk;RG-vJ-L$Tn<>R%rf&geptl8x2=uL#;_#ap+5s9EVuC~k2BruNCM@SK~Ph7L15HGx6CKStD`kBg{rm>IHx85m-#i3keZl;SYcdx06~<9$Q~`XWkk zMADb3eS8273<;!=7%C{m5y_ykM{frDL?#&Y0Y=@MzEN{6zhZ!2?Q<{+!7<X#6km}{RA6YM6o;9i6PQ846-7h@`YuXwnCSZ^ z0yEM#5)n2@Fg=1^@8~FS0W>hswSh5Yu^+t^P+J@6vjx2;3OyNYq_1YnJy2X6g`vX4 z&`flo2O~SoH4XqZDBw*6`UXzk%R>k0`fFh5>mx!i1S!Q~R?q~@NZ(9Epg%z=4m15J zU`F~jA_9F2r8utA{f`_9+K{}2(=@X6Z3jk&Spl{Eew-$HC(+VjqG!u8!+=YA?f1*C zh%Z!~X^h%TucXufrwWK`bvLyLT}o-TMR+#lG4Yl7ZY}v0$H3B*2LRGVQt&AO{3gDK zkPz;{Nk@SG0DlUJQBQ-wpBK2)Bk?A!XdAl^NNLfMf5m^D)r#(;4Gc=krATR)6S=g0 zq}gC~7^exvH8|;V96p>%zuCwTkF15z-fuoIqqWt<1p0+Y{KVkFNrz-ujNb;u-I8G! za4Q9S1if_oLF7rny@K9Dc^pzcxm(C*5!Edj-a&ztg7*c3RM3e$Dfm#(dnk`XD)<<` zjTMmep8=1QPx>K3xye=pxT>k9WY+t(v2SEp>x0_foD@*Q7(JvFL3;)tswgMfN99m)SL4qCsvE{ z=>q3`IzAJ)Asj9j3HsRrmwF^VSLj(N&NC8bFMC0?3mc_X=F7T9C~=BJqx@8MlGn-Q zWqfFoC-Kva-=9Ht7=x}s@R1#abNiDM1wJ$$nC@rQDFS*Zg@zGtL>~Sh+Si2p1kU3H zS7fe07c@{XNL&gUX2PYQR|PH|*@ZkQrkLBsq zJQzxc{~*dGpNsPi|JlSRa2L@T>e<8U>(U($2Cb22YQ+9?Nx5wg<>JHvPy zw{t`-ujhzek^DW?+@2Bl3S8Dx;!ksaY&vIt8X4J%mCMbXpZ2;K<1mclA5xN^M+OAH z)Fb?Sxkd0lWa5`N27mCYqqN}{@t9=PctIxFPjU89ls9w(Iku0&KW-uQqnf$;Q6EO~ z_XGt0Cz1SN{723|x`OkMt}*e8up7PI#4qt6=N}{7H^$_?o(8Ue%s>;r#4(nW{bPjt z#+cmK(`KgjvVn)ORu=pQTek2UMh7W`)Y5*PZjg#Ij({>z=5 zKg*;)j0^o)joklPkBfSW_U{P_e%bw)UPTGx@ACSOgB z9*K+azp{m!f8`e@{x-q?wTWNiUEKT$Nt}OzY$mC{o%2tKyz(kN5_b#!gMwc+ljQFb z{Lh>8OZ)`qpD4m-qA7er#E#K@qO>cU0ZJGb;WJT$&qP!Bgpvinv`g|!{3O>uDUI7d zX$0sESE-PT^G}lPBKalmVf>|&K8xg&SLsQn_6RY4r!wg)K`-Qm=}qkvrpGXa@U~6P zX8IORo-6ptU$EHONr_XLyqt14rT;}YpS)J!QlG>tgxq~hZq8)W)htvDK9Xy?nuT#5 zcecqL+z*p42|Yr8$SwGLOt_ch**1X-yCi*fKNBwLCvbbSi$m!(ytCCo`|Eg|bhsn=VZ;Zr~6Oo6XrdG40 z*Im-oR|UPPU8a60a8tWXJq`R$MH_w5kz$+L&5S9%S~^7v$pR6SUM)L^#9abUM`|22 zB)z#aOZp;S`K#ena@N&Bkw3-qIahZ=9xdH+XW$1NPG#C5B&0_;NjhU1Iv1Q{#!dbs6aBI_aXsmxx#dp5`n`s|52C&3brN>bhE`_RDkLgBTi^xZ`!07W3W&jjlMcxsM-NHg zNQJ22ZAkRdMs@lGzCqx;;=24ABYq=>Eh%Wbu>iOac~bC{z(oz@FzJ@V6jz{xao(MC z+;2tlg=&R78Hs`~jEk#yu4vI*Q;UWIoIiJjkSqBm&MyNw_%ELkEtSESgcAL8A4`ttw{#`L(5Cm}BgTslGG zpYq{nIx0<-%5(92o}0_dn=SabQ&qXUEKgRN%hPcL1r29;b%K9S1i#YLh&=4cdqCjQ z9*GA9f3x8KFoIv@t1aM{jV<-F6!?#f-=EhFzT-GePR@@9X2U6hLCqCsxK7(($thr&P>JAV^-%IIcQdsQ~y0Bzi-t zPN`rFaFW9-jvsV@emoL78LoYF6WeH$KM4p);nccx(q_b^^u@p}M)mxqCOjE=(n_N- z(R*+jM)mwsVE7!=!AZ`0yy*D2!17uALsnDukXDy82 z*YT%-TeR~m+5XwYk7?R?r(AkcK=QJck;Na1TzZkHi}_*Rq7vt3dHSa4Sx;CnTrlpOi2F zPi^K71f%W>HM0$QsGKYNnlw@3qfkr(j00!*0KKddcWJmvb7zCd5S!8kbJqf&Xi!Y= zuQ0{8MKXl(TCM26(Fx~DUvNcXU(9^~eB=Rcu#Pusfl2Jq*4(EAg_-ktfqRe|ygRpv zd6%3--Zj{o*+_)IKNh%jlECNLfYUh(Cml`n2mAGkkdT})l*beC7D|8@Qx2!Z+XY^M zl)dmP3Y^WNpc<)xfp2Glpjs2on_C?bFyYzAlVS>RgPi^c1>U6Nn58Rff43+&r57+f zAaJUQQ4m>93R+Eg5yzcb5xA1<6F4&rzx91N^oZv~5nDN1pe>05yr=raPck=lqFhnb;MYrf@*0YlW}E?#aXNWs-^CGGr7NsdC` z0&Y<0Y9TtO%0Cm1pC*m$?M?%IW|5%xP>RD$Pvyp)pP6k$1qH>F;xIE%;~EsOahB+- z8Fg>^fQi17=s@2NN~o)olGio;A#ZEd7)BO<)UP6-_*dVEy|^*1n#@evgm(kR7Y zX2=3&q;Df4(6gH3rKLN}@Kc2}2eKQf`Fwy(_wE#3Q zTp1uLFtk#N!^FToH)Eu4BO=f;_w|4iFLOS&E-# z`bJ=EiIPvflxYMI!$C@Mm>HU6`sIT z4h0917#QXx3p_|E4zoc`T62k=CatL_I6*H8YVC({iYVh$pl^vn-v<0QIL-9!mh{TJ z*}&%+ZwwoW(5cLukHmPpB=MJk&&0`ZlJJ8L(7&n`6-czKMuHpGGMTGkq2?BYh_kfj*m3>Mv#n4=@A6JW@yuUP^J8 z>5G9G>6u{A`-m7vB)u}9Zdj#gBKue}+BR72jzs(gd;+ERgYgLS+@ zYyKFI(XQPt6mY(5JFU&4qSx*exU8te-vMsWlgWY<^dAab=n3O3Opoo_4xW1PEmP>V zdGjAVNlBgNyU4c4dQWQAqp<$6z{OwAT~Nn8x}cGz{spAK;34^xXMyyzFf@!yPm78< z4}c#PTkwUDBk3jnl}Wy6@de*8e2!d%$acztpG^#n$diIg0+$K|zHk%^4gW&wX@6MZ2K4+cjSK8-x&6!Osly-64rE}+mcG6V&~ zsz_XVwva-K=%t(>ev^W=NDO$GzDD4z0yiqzg@*)#j6Eqx;_su}5Mzo@(3_TK!gw3S z)SxLpfQTBV{sVpML8{|o|7m?!$H<`U?C6Cxe zn^~H(C;%EOxupN!aGLcU)0+N?CD}!9pv<6G2Hc`|1TOT3@efV(BBB?Oy9{>99%C8$A$yg}HgzKh9DhlKIf{*rTJ?t*RIbAs|2TZBkrUM_G`L@h3jLT~D6VL984^nNAW1s0n; z>6Dh5JSkgz@t#P7!u0n7xAMdT0ykFpYN|2C7P-mP1dC4qvuOIoAMrl4xQ+LP>z@Uk z!DG^p>z@a1VaW9_33}nlF#W57-e@4~yZ#-Me9;%Kf1lA~u;j6)W_AJ~h7SdUR3I5X zVGOeG==5I;dM+nC_Fexs6COmK>;L=dh+is{a(GyNFcH_)Q206*P(d5!F&RrMwP#AwFQqGc>ktg}@N8(}n4=KhB zu@PqYL@$ z%TA*_h?B<0Uc=<(tgZ%~m0aqX3vrtDao?w}Zb2CZnYp|}OU7%< z{?$LDY%5M)PyC<*cJ&}3oZCep4yWQffW$(dk7B`4zgrsx{j&n+a;Ajw6Tpuu+9NZr zNGbJw5rz4yD9mKEQQ1M{$+$}U3NWL&m<1Ym`cTTvmOUN;X zz?VT#vX3`b$)k~cN;UGZuY{ar;0xnHtr_bbIVCTd_-X|ojcP_diJugFADZ|Ag6|U( zpTt`kpREKB2ASR-K_}`dzYtIwZ{nv5A?i_@#Q4%n$C&s;qnBoha*}7XTb9q|`b$@e zG^hnNbiUG)%zx>nr@&_s>}87>U1^zYFK%x*sLE=!l$Wlb^?i(AY! zrNBupw^LPV04Msj0_XM8@d_>bchI-y1h;q1JAzK~yO1aT_XRHbC4P$WFI>|u%1!lI zV~&e9&_Q0gIW8og$mNy0KxW~$^6|h8^-~&=CwY?uF6;~A`8A&x!LI!n^oDW8*Ni;uTl<;7xqVZ@co%SE98g?< ze%%;BZ;H2dRDX+jTQ`&8;k%^pRbbuxNQRq&$diHq5-Y_);Pp6pL*fS=pr;15z$@^V$v@ugRiCyWY(+{!F|9j=_K zHO|1(kjj;yTZq%-;mTS*bX5jWHrt~701vgwr`a6FR@o}#w(%jO5_35W8MfOLwq}oy zsoZuWq|E6p>9zo`>1_|8j4YO(piTl$-1fM@rRyY)K@EdN`t5{USa`dK&DwHqUygDM z58i&Wz&%I}9=yGR*X;HNJ_y}zy7;L9B6ljco9&YL)66bg6%Q?2m50l#TFKK5wJc5F z@DaoqLT*qom%EX-P|im3gTWu{8-38bak{{TKf*Y#udVu1uIG*)Sz2226zGlh7oEE1 zS!?+<&kK4ke@cm@f5}>J&AYrlo9XV7beSS)vn=nhF5i+w{DY?OF+(SS~A~c z&X$#YjN7tSl=HBeQgRk~xM|C6Cj1+L(;UbsPtw0w}PE z$1SYK3{sCVyGysUfXvwZLFCD9vS%SqlN+~u2h7ln>%<7QQs= z=+@JG61DY5p5B?pCsTJ$)vEu9$-$kid}O+_9lRFtR;w_&(pug?y#lIs7c)q2Hxb{p zdw?4%EGNOWRAItJ#lrZ@%nn=ayDatBek|k)M^-i?4+qzNCU6hsl__Do6*-d2>#q(H z4O;s(FhfIEO8Y3j41pWQ$q$1SZOezag|6-74+Cnu09wq*wt0Zh!D({(HdB;W(%=N+ zw@D|8)(+#1D7J9^Ho{_*Tf$xsGd#-*q!*`z@mB>d!%ui&+gp+JGOV|K#9M!RD$0%C zYe60cZ+G)n*^c3%8Mh$YUl4MHd^wtJe@Wn?VqyFvKCEn)ttR=zFtPm$lRPm@Z2ti4RF`^NV&2B?jkxvc$Rb`4?FIf9!Vd@`C~EvUGpRPDq95K;z+(Q?gMUY;2`p( zXETz8IL-Buk!r5TF3`qM%!`7sf<3Gt?C5X>?~TO6^auHXde<>NO&sDZSU z{_Tnp57SfMe+s851a^!O^s=SJAhu(?Ne-oA*Y5n^UX9!(6q}6{YaAU)e-p_!OJ-p+G*EQ?E5;&*V@iu;K zq;72$NV_tamveTJJPWzIrd!M1mCx(3tD3jcE^N`bleOP2{1XQJ9}(NGHr^7yI?4YT z!>`Wr7TG-$6361?HNX!#oXT!$T*7$`2*d%rmOqlXo8M$kxtsWm9&6=vcax>YJ}PnT z_t-;ZySrL*4aH5u-B_@teQI~VE7CTtD1>{mL~vV#*Pc-dIYDLZx1lyHRJaRdb2#5McFOr9|A^l%=C{ldQ4Qz z1xHXoz1Xbyd4ZehUjR;(H`Bi=a5MeKz{8Hc5#w1K07U%%tLti@qpI%w%zzjJk}NA9 zMub^pJ+yT_Fm>ImwVroc>S1%NO}iX7%UX9#v8Cv`DYZ81p(a|7r7UZw2u%182E-5$ zAw+~2Kt?{phZvv>(M6lOuFX=w6s;Sr$L{ZU@BjaD=kn&B^YVZ9cYptn`@i?y_vX!; zmtUNahJbYk=lLpB0M7M`{5J&;Sarp;d=pRh6BGhf=?Ul zyl;OLun}COd_xszpdlY02aJY%{HAPx|0|Zr+?uUhX_kV_9d?z>Ot-6KCJik(@)xa4 z9k7ViGgEIY;r?=_$Wffxn(g`~ecJnwi449ZHjZIfz_;HmRxE4> zNIlygAER+}+tq3z=Tt=d(=pTD@N}|B`wYP~PWnNdPv7I=t%BEjcusJxhV(CX^gFPp zmlzy(h_u7%V3{Z=t`2zg(vadg>@%P>5Dp$XXw7E$uiKtJn(e~BW=kv@CUTO&Q;WVL zdfLG}>ae${N^td~c#Rpr)S_l-SG^4C)Z;vN;?N1PsMYvQEjsM!b&B3GPfu|y_g}z# zU0iPT8y5Q$uFL8#_9vX;yf}Ldn>TS5-z@&T_!s*VQ2Mnv0DovK``7DA|17om@j_)y z_Tu@1PljX~RC$5z{Ng=8-IcDNw6fUZ1A<$xRW|7twpKh~8O`|1s+H zbJ61~{*lN3MEIW>Je-|VzAp`&wNcNVEMb--PEt!o2yQz_ZIrUu68vXHJf~8zq!QIC zY}5}6+NayYcS$`!&Q!l$t}d5!XX}1q{uM@cI9N`KXB%r}G5*6*g9iqf65^v!=X{lU z@E5%7LuA=;g3C~b_$0w?B=M_zP$!@I?)xu71)XTVp-Q{dX9Kg;*Jh`|K*W-sZ3G^1 z3TR>g5rH=`0nP!aaWsv!*H2BY_S0Nb2Y3;QYSOtFpdDvjO;i&;C9cI~=F(cA5qe7> z6g+@*^p?sHEnRCqz2ko~ETxAUY&PX&qX0h)LEM`pOWy_d6gHc3?68#KKcv~ovy6v$ z#N=3JKY!IOW81^nJb%lo1o!+cTL|3kVF~K=$5~H2z{Vab-er!`isi$AM#Q-sA5AdH z6U*yoh+0+w1<+@<-7g5%2OR1^41zf$z3>MZCg(`c158%=YcZNUdPJ5m%lo zRtoOfdFCo>=b3sVQ_nPm7m`?ASqvr@15JQ(+4OJNI3S!~UXs1Wxw*W3nd z6E>fJyWl>b!xzP8v?JNzD{Qn~U1LAtCf4-W`SGj<9#cR537oX)y=N>`j zsADC0_OReKf+@2VzX+UbxAhdCFc|yfe^iLay9NJ5aBF9P{~7R+G$akGu(sShjnS}n zoG5yZ)=r2vxb}MB5gl2}F(mGFWbMsjNA07^j;!Ta#bbEDMe@vnz}mHI z3~?Y6%4-(f*S`QfDnMp5BEaY5mov{X5su#dV^Bw+&oL2>UWoIUt-@A{EiB-3vPG;R z&wW>L8?R`9pU3V~OoVT!*DQh~niC+nfhDuK2}4H?opOH?4T!LLqPYv*&`ht+oQd~I zJ696NfX=bzM};pL4Ec`>-{Rq%Y+Zr%M5OCx2p$+>80fm0s7D04ZmwC7YS(c{qU>=W1~~V8pdaULm;f@2^B1_BTv0 zI4*qx0$3Nc;Re*0O`DwfHF6HvfNuo&y!VDm`xMcJD&bkf@d+Gl8umsb#Jv^x{%YYr z4(WDO@aGf22Sz)#VXWmp&$yhQ6c04a5kuNjHKdLM8bC)C_ty>6UKV?PK3GmB?^nD{ zaAO}|Ip5Fug&seDSQ;j??%*8SfgZ%;y=(^mtl*YEfcFD$!Nwkjr7X6w92FlQ3qu=e zU=223!F+*Nv9ZYf-}q2Azsg*6ZsggIUDcG`ihUZMFSzzd@nyiB9_iR_WDvxqM75ZiXOk?GQu(J{Q7FQm^MPEHn*jC_HLjSR%MJG=Mh)cRL=SP6rzV z*A6ItKyVW%C#g0ZE~22Buss{#pN-~k8sa(_u)m2N^^Y3O0R0z#N4_$tVW%lbomZgM^_Z*Y~4QUUQuhT?3ptugZ&woYiC_jn%wT$S1Gz5@zoTLDb zPu6%EyJ7PMRHKIIqTtq1xHhzo0PglYKppm4D+JfT6dxzJ26i{<Bq> zg>MP24iwj+QwK@m&k%mV`as89??El>0EcKA+YwQ%G^hi`XS)jEbE1N;w)@R|-EM4;@fGmX?Ns$)^fBXT*Vi zZf!jbb!V=``)LmW9fNQtamYU*e4B}Q$bVDt6qLD}&=j39w;-xo-wO%0oqy@*EQGUe zgnBxO#Zf}}edbn1)fU#>!&v-n83H_<3&@PoFNcmxqAd0z`{Rs4B0!xuN7WgHM1VSR`{T*l7r6qsdNtBs zE4ap|I1gx-pB6q3Xa}D#OmO-A*o*U}UG1f%ePJOU>f!er{IThaJF{K5WnJ-NFL>** zdGp}K{%p^u;B8G>{?E%@3SU-i-Q(%!P^UhZ z12>% zmjZJSB=HhnX~)OOUiy{Db5?E}Bho%@mfGg$P5f;0^QO4XTWZ^#5}(H1f;#fG?OTFt zz7?Nt^Sy0Ww*2OyqpxlR?QgMp;cv^B;Y@66wTJb#cKhw*wmi5I%fhxE;1PDVd&5yu z0v^KKJ{-asju0PX!`nVFTh6p?pO#Hl4jmoGb1;|TX~FHYMNN9Evv&KOLUSSBZtp~G z-%~`-n^mD6er?64VYcI`1IqTKwbOocw4L@_qW!nqhu{+Jbz?P`{4KOya+cX^lS>B&#@Li~(hIJ675xy$*WLW; zY3DpU_jeY#_qnsh%zZptw^JjLOlanIc9};j8g}YY=C{8ikx2xh-q|AfXN5f(EIr<3 z=e&Myi--6a@XPUx(u;UTY1f28Wp%bohdn^MGrYT|n&}wdmHozbLq{ie&0T^69WR&N z^(0x?q%#RQPN3`d8ypJMD!$;gPC<Pe8O zQ#@ynl-)b+S!s8-J>quj{PTun_XV*NKsr+;U(Spp5&2}c`Zwrc-gdMip9U==)A=W4 zGUdG^C(%d4FmwunLm?4|c(<8Msk|3qg6AjdUG(%6|Iq5asz-{~vsZ@~>gf=_iYIY- z`SI#ZdlmO;#*W~tTSaz??6q>wV9VcggU#rk=~izKZaDM$VNXWt^3JS1^3?4fxz5ZIe2nV=i-HP`A}Pz|J{yFU0Zq63+_<@Sbg6 z6CIce9+wR7C_GSO&I?#756l)z;$bk?V?=gfj^Hx8L;N9o)pg(r@sI&8%EQ{w!#1%b z9uj%f>ERW@_4rXdFCMzY!x`|RJmA443=aBm&^uy=q@e*12Q_=*A;j^}7_wA*@Osb& z7Sou?7WHlv-0BVB_Z0Bsmsg`s{&x%b1NbaE8VBobPY!a{MD*lflj#W_Gd$Q*gwZA* zB!@%Dqi4;n_E7Pi#&gxd&LZ|sc=qbW-YLP=p5pdCQ{tdpYai^7w%cj1wb7H#u|*h# zIgby?gNL4UejdV^(L?g66UVb#7^|vI-fD};UFYq<2gWcyq+9f=1lOJ@UM=?SE@Dr| zQZtE6|}5@FMzg zXsjN+hxBMu4|D(zhxFQAJt&U56&230 zNyhiEW>2%E_+;zha3CJ;DB>X9G%o7l?cpenL%6d35(Rw(-EJlp< zk*T4FyF3qR)RCnldT!8hP&_Rj>cm5lb>aw)d-MSps7LS~O#Z^^=wSQM`_bWW;LP5V zM%3Z)=qSO(V~CG6zdorwdK21PurViLfnE(NQFvVuoVkkPx7wZ^#kCIJ(^7Ht40sV& z{73OVGrouPXg}Kd#ex^lYenLGZF;od*Kiky*KV)PvvyxwRK)HH;BMa759IANJytbu ziuc%0F0Y-7ws$O1Xzz+jYwwuOIk6Ywa<}$aMWJ3vwdhR{T;ovO-mOg?;~aM5Zx_8= zJUzt&8~-sL=@EH8Hlxtq6*Px@9IF*v<5zr^*n0>-l)cAAPmZ-Kl2nAf`GTuG#WP}W z1=^$RZ4f=NSJI6-?X?N6c~acoH>^6g5A9L*PKch`%b`wt{`f0y$G_rOk@0{1R(nnV zy1l=fczvFHn0UR(eoT42U4c#mRJ`5;hdfHX8Q*0;b)>p<=17F4G84P>h?gFRc)87B z*Cg1CxPjeO1>Bi2SM;Nf9(U=Qr6Zy^)+XLv>w3W6!0uXLKFOuJmK5444aCke!8I<$ zSBRY!`?8F#ZNig&4eAvAjzawq#~Yzc96jRyLZN|-7I`Vt`QNcAYic{*nt>bM% z(xlX*PGwD&DC@o8<92!{j^hR$I+HrC7hIxWI!5%*id}WCIF?-|^~5lll_$p9S$Tr% z?I>(suTM-@;!Gj(R24;Bp+tP)!n?sI_DBdCS{>@>+6nKxUaC0G>n5~5F?2F!Jf=>L zC^U3MwKa5-Q84k+#}K#Qz*L=_hPH@EPwLVpfn6aJ@#J?sdy3m7FLlxz=qqyIqeCaX zfe!IT+oAv5XHMBwr|uN{;x|6e>YwubhB!YMF2v>y$*C3g1$w8piacZNCr;ZJmKhWx}SZWA}+jY|@jEx!Z5oQP`% z->{i#c%u#m{}P+$_zljWf4&5dk0hTNx*i+K*V6ope|fxVsV={ZExL%P*GQl&KB|Ng#pUDaqxh&X038R_NwR<&iCtHL_+(%%KR}&$B_)c_XG&at znk4Yiar7U>S4abM6uy~6oeHxkQG9+qFqa>Y1b!nWiqFpgvwZ9Sn`yG3&_s#iE3^P} z9W;^zek&!4&(8yM`8m|d@1#Tt`NlsQx&gWhd9r}_P@;qitN`zWaQNRU7rdVm#p91I z0p{@UnoLqzd~}0Rj8I4da}@qDK%EMcC{cU|mB1YSjDRHYjl{0cuLcHwgC55-(g3JX zLy6)m%mU^(_@^96;MY;2`20p-F29c?@aIvYSiT*9)6fLaQMfxv78G)nD87SMU@ku( z3H)|S6rbM-%;hr!G5ia^EFiQ?O92j=h}(uCwmM)CPw zz}$a-{G)2J;Gmll#aG}^I}U!FCJFpLN)(TOH8F?(Z#e>G@vBQHQ4D{W-8T(mviZwO z_`h_oP73OqWS<<9kF}Bqeq|9p2iM_0o+A%@(^c&H_S3-JS@_c=04mI)MDZ2sfjJI- z+Cvifjg%-pKLgC+|E!TD@S7-6z}Hm(H8iw9I0`>cqE6iO9J{`QJTR9ZpiX`#C5q4Q z2IlbRCyjq7^pK6>EA#<#6>=nj-%p9+@heJzIsAX0Oj23AqMQ=N=O@{JS0PUp6edxk z_zIQ49R31z5Ri=G^Q(cm{5q0gzlIW}!B?0C&{6mg!-9fQM8)Sf7V@7;qD}|%C{cWV z6EMeq!!LTsf zN|Zu{ctt-jhtJO&YX{&@Ur%7M9j6A1WYsKD{}6($ubH04pJgUOUAK0g5FI9Qq? z3H)i4C_cXinDXg=X)9S!NK>Nt3U$C#0lUk(NCLl}62<4w1Lp8oQJ?$_C5pp`e>CI( zx(Yq06K|nJaTE;R4$R@_8c6~_Pl@958L-1&okX4dZe4$Tgl*PxEP@?$!F~AI;`A1ok=U*r!DN%fd$-o>3&$374S5l(*{As`({&N9I;8#lLWn_Rm7B>gvL9>Yx#kbf3%;C2s zNdmu>62<4|fw`xzt!V&M=%hsP6}o{r4h|c`;P;S>;`94}Is9YgB!S;gi2}Y1A8Tdt zYfB&;g%df!jUx6v2iGQnIsB8X)6OJH6rW!S%;o1|-v9!I0D{F=s0QXJ{K}BPuQ5B9 z@@HlHeu%5IYwL=%Hv)I;oo1c>=TV~g{+oa~{8M?7z|T>l6!K$lv;$ic@m7d8a94L- z>BxrowXI+{7Q1t((;_ul3N6O3(1Zx|BzU1sM}evikmCJ+2xN{+VgpdXm)pa*p* zjH6)j_~XifIs7*RlE5EBiQ@A)7nD!`Z)V7X!emMmUm*ad3fTRxI{YDj8YN00KlWAt zYz;Q=F3?-mm*PWUDE3wpzZ1k*jH>~|@pPsfb$Uuuq7-_Hk7Fbb|1CoTzuxRz%Ae=) z1MHlqP#zEff_zvRZ zx`3+!c7L5D4*_*kq7()cAJ+@a(p$bMDaDx0wc#JnGBS& zSTA!xd@}1=%3}YU#C|Kb!W_rPw*WK0!IvAjzwH4)$0V~9I*wl#0Aunkf64=m*a!c* zG=z(Hp^kvgPRdsE{o!Zl8rkr>Ie^(w3H}iao!PW*g3T zdg^_sBVFfvJY3BdiSoikk1uvERC>7BxsV1fuk38NU~@8%5>?I=QC{oe%HIckAvT*@ z?68!@F7!Y|4hxOO6QN{*tZN)ygIa{~eyl&)!O0>9r zw6iEaJ}}snaN%f{+KDE&{G8O^YBL05zwba0{t{Vvjoa(UAeHq^l6j^oyk3@ zb6U-#L@AtB@g#dfL&Ey=HG&Dkd z51Vg@LmbuP4DbyR{3esxFHOv$?Q;?BEx`UE0&fLo1Izwk`IRGo_TZ0)Zh!E{!z#Cz z4rdd}@SkjNz46Lf!?R<*eC5@nzf?N&zK6g6o%{akz6WQPe(`T^N`9w~hs*Z%FJHOh M`N2Q`pJ}uIA11p`>i_@% 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 */