From 0d2f830255c758240dccbeb732a2c21f4eea995c Mon Sep 17 00:00:00 2001 From: Alexey Kardashevskiy Date: Fri, 13 Mar 2015 22:45:13 +1100 Subject: [PATCH 1/5] pseries: Update SLOF firmware image to qemu-slof-20150313 The changelog is: > virtio: Fix vring allocation > helpers: Fix SLOF_alloc_mem_aligned to meet callers expectation > Set default palette according to "16-color Text Extension" document > Fix rectangle drawing functions to work also with higher bit depths > Fix the x86emu patch file > Silence compiler warning when building the biosemu > Use device-type Forth word to set up the corresponding property > Improve /openprom node > pci-properties: Remove redundant call to device-type > cas: reconfigure memory nodes > pci: use 64bit bar ranges Signed-off-by: Alexey Kardashevskiy Signed-off-by: Alexander Graf --- pc-bios/README | 2 +- pc-bios/slof.bin | Bin 911704 -> 912192 bytes roms/SLOF | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pc-bios/README b/pc-bios/README index 8a85e69d3b3e..63e725444d3c 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-20141202. + built from git tag qemu-slof-20150313. - 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 031e3063a277e769c78b637de13c93f4074389f5..ab72cba80c528aea2545974e9c717cee583c254c 100644 GIT binary patch delta 10238 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 delta 9777 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 Date: Sat, 14 Mar 2015 16:29:09 +0100 Subject: [PATCH 2/5] spapr: Add missing checks for NULL pointers and report failures This fixes potential runtime crashes and two warnings from Coverity. The new error message does not add a prefix "qemu:" because that is already done in function hw_error. It also starts with an uppercase letter because that seems to be the mostly used form. Signed-off-by: Stefan Weil [agraf: fix typo] Signed-off-by: Alexander Graf --- hw/ppc/spapr.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 0487f52819d5..7febff7ed27d 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1506,6 +1506,10 @@ static void ppc_spapr_init(MachineState *machine) } filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, "spapr-rtas.bin"); + if (!filename) { + hw_error("Could not find LPAR rtas '%s'\n", "spapr-rtas.bin"); + exit(1); + } spapr->rtas_size = get_image_size(filename); spapr->rtas_blob = g_malloc(spapr->rtas_size); if (load_image_size(filename, spapr->rtas_blob, spapr->rtas_size) < 0) { @@ -1623,6 +1627,10 @@ static void ppc_spapr_init(MachineState *machine) bios_name = FW_FILE_NAME; } filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name); + if (!filename) { + hw_error("Could not find LPAR rtas '%s'\n", bios_name); + exit(1); + } fw_size = load_image_targphys(filename, 0, FW_MAX_SIZE); if (fw_size < 0) { hw_error("qemu: could not load LPAR rtas '%s'\n", filename); From fda276c7aafe2bfc9df808e61abd25cb834a0254 Mon Sep 17 00:00:00 2001 From: Alexey Kardashevskiy Date: Wed, 18 Mar 2015 14:11:21 +1100 Subject: [PATCH 3/5] target-ppc: Remove POWER5+ v0.0 that never existed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit IBM uses low 16bits to specify the chip version of a POWER CPU. So there has never been an actual silicon with PVR = 0x003B0000. The first silicon would have PVR 0x003B0100 but it is very unlikely to find it in any machine shipped to any customer as it was too raw. This removes CPU_POWERPC_POWER5P_v00 definition and changes POWER5+ and POWERgs aliases (which are synonyms) to point to POWER5+_v2.1 which can still be found in real machines. Signed-off-by: Alexey Kardashevskiy Reviewed-by: Andreas Färber [agraf: fix commit message] Signed-off-by: Alexander Graf --- target-ppc/cpu-models.c | 6 ++---- target-ppc/cpu-models.h | 1 - 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/target-ppc/cpu-models.c b/target-ppc/cpu-models.c index 2b560a47572d..4d5ab4ba1880 100644 --- a/target-ppc/cpu-models.c +++ b/target-ppc/cpu-models.c @@ -1124,8 +1124,6 @@ POWERPC_DEF("POWER5", CPU_POWERPC_POWER5, POWER5, "POWER5") #endif - POWERPC_DEF("POWER5+_v0.0", CPU_POWERPC_POWER5P_v00, POWER5P, - "POWER5+ v0.0") POWERPC_DEF("POWER5+_v2.1", CPU_POWERPC_POWER5P_v21, POWER5P, "POWER5+ v2.1") #if defined(TODO) @@ -1387,8 +1385,8 @@ PowerPCCPUAlias ppc_cpu_aliases[] = { { "Dino", "POWER3" }, { "POWER3+", "631" }, { "POWER5gr", "POWER5" }, - { "POWER5+", "POWER5+_v0.0" }, - { "POWER5gs", "POWER5+_v0.0" }, + { "POWER5+", "POWER5+_v2.1" }, + { "POWER5gs", "POWER5+_v2.1" }, { "POWER7", "POWER7_v2.3" }, { "POWER7+", "POWER7+_v2.1" }, { "POWER8E", "POWER8E_v1.0" }, diff --git a/target-ppc/cpu-models.h b/target-ppc/cpu-models.h index ee693af8736b..9d80e72271bc 100644 --- a/target-ppc/cpu-models.h +++ b/target-ppc/cpu-models.h @@ -547,7 +547,6 @@ enum { CPU_POWERPC_POWER4P = 0x00380000, /* XXX: missing 0x003A0201 */ CPU_POWERPC_POWER5 = 0x003A0203, - CPU_POWERPC_POWER5P_v00 = 0x003B0000, CPU_POWERPC_POWER5P_v21 = 0x003B0201, CPU_POWERPC_POWER6 = 0x003E0000, CPU_POWERPC_POWER6_5 = 0x0F000001, /* POWER6 in POWER5 mode */ From 5b2128d27051fe036ac36e8e860e72490b27a369 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Wed, 18 Mar 2015 13:30:44 +0100 Subject: [PATCH 4/5] PPC: pseries: Implement boot once=foo On sPAPR we haven't supported boot once ever since it emerged, but recently grew need for it. This patch implements boot once logic to it. While at it, we also move to the new bootdevice handling that got introduced to the tree recently. Reported-by: Dinar Valeev Signed-off-by: Alexander Graf --- hw/ppc/spapr.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index 7febff7ed27d..ca0a060b9258 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -314,7 +314,6 @@ static void *spapr_create_fdt_skel(hwaddr initrd_base, hwaddr initrd_size, hwaddr kernel_size, bool little_endian, - const char *boot_device, const char *kernel_cmdline, uint32_t epow_irq) { @@ -407,9 +406,6 @@ static void *spapr_create_fdt_skel(hwaddr initrd_base, _FDT((fdt_property(fdt, "qemu,boot-kernel-le", NULL, 0))); } } - if (boot_device) { - _FDT((fdt_property_string(fdt, "qemu,boot-device", boot_device))); - } if (boot_menu) { _FDT((fdt_property_cell(fdt, "qemu,boot-menu", boot_menu))); } @@ -721,6 +717,8 @@ static void spapr_finalize_fdt(sPAPREnvironment *spapr, hwaddr rtas_addr, hwaddr rtas_size) { + MachineState *machine = MACHINE(qdev_get_machine()); + const char *boot_device = machine->boot_order; int ret, i; size_t cb = 0; char *bootlist; @@ -780,6 +778,15 @@ static void spapr_finalize_fdt(sPAPREnvironment *spapr, ret = fdt_setprop_string(fdt, offset, "qemu,boot-list", bootlist); } + if (boot_device && strlen(boot_device)) { + int offset = fdt_path_offset(fdt, "/chosen"); + + if (offset < 0) { + exit(1); + } + fdt_setprop_string(fdt, offset, "qemu,boot-device", boot_device); + } + if (!spapr->has_graphics) { spapr_populate_chosen_stdout(fdt, spapr->vio_bus); } @@ -1370,6 +1377,13 @@ static SaveVMHandlers savevm_htab_handlers = { .load_state = htab_load, }; +static void spapr_boot_set(void *opaque, const char *boot_device, + Error **errp) +{ + MachineState *machine = MACHINE(qdev_get_machine()); + machine->boot_order = g_strdup(boot_device); +} + /* pSeries LPAR / sPAPR hardware init */ static void ppc_spapr_init(MachineState *machine) { @@ -1378,7 +1392,6 @@ static void ppc_spapr_init(MachineState *machine) const char *kernel_filename = machine->kernel_filename; const char *kernel_cmdline = machine->kernel_cmdline; const char *initrd_filename = machine->initrd_filename; - const char *boot_device = machine->boot_order; PowerPCCPU *cpu; CPUPPCState *env; PCIHostState *phb; @@ -1647,9 +1660,10 @@ static void ppc_spapr_init(MachineState *machine) /* Prepare the device tree */ spapr->fdt_skel = spapr_create_fdt_skel(initrd_base, initrd_size, kernel_size, kernel_le, - boot_device, kernel_cmdline, - spapr->epow_irq); + kernel_cmdline, spapr->epow_irq); assert(spapr->fdt_skel != NULL); + + qemu_register_boot_set(spapr_boot_set, spapr); } static int spapr_kvm_type(const char *vm_type) @@ -1779,7 +1793,7 @@ static void spapr_machine_class_init(ObjectClass *oc, void *data) mc->block_default_type = IF_SCSI; mc->max_cpus = MAX_CPUS; mc->no_parallel = 1; - mc->default_boot_order = NULL; + mc->default_boot_order = ""; mc->kvm_type = spapr_kvm_type; mc->has_dynamic_sysbus = true; From c6e765035bc5e0d73231c2c0fbd54620201d6655 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Mon, 23 Mar 2015 18:05:28 +0100 Subject: [PATCH 5/5] powerpc: fix -machine usb=no for newworld and pseries machines Capture the explicit setting of "usb=no" into a separate bool, and use it to skip the update of machine->usb in the board init function. Signed-off-by: Paolo Bonzini Signed-off-by: Alexander Graf --- hw/core/machine.c | 1 + hw/ppc/mac_newworld.c | 2 +- hw/ppc/spapr.c | 2 +- include/hw/boards.h | 1 + 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/hw/core/machine.c b/hw/core/machine.c index cb1185ada479..25c45e6f9da1 100644 --- a/hw/core/machine.c +++ b/hw/core/machine.c @@ -223,6 +223,7 @@ static void machine_set_usb(Object *obj, bool value, Error **errp) MachineState *ms = MACHINE(obj); ms->usb = value; + ms->usb_disabled = !value; } static char *machine_get_firmware(Object *obj, Error **errp) diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c index 624b4ab50bbb..7cc5106c79dc 100644 --- a/hw/ppc/mac_newworld.c +++ b/hw/ppc/mac_newworld.c @@ -371,7 +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(); + machine->usb |= defaults_enabled() && !machine->usb_disabled; } else { pci_bus = pci_pmac_init(pic, get_system_memory(), get_system_io()); machine_arch = ARCH_MAC99; diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c index ca0a060b9258..61ddc7994df5 100644 --- a/hw/ppc/spapr.c +++ b/hw/ppc/spapr.c @@ -1580,7 +1580,7 @@ static void ppc_spapr_init(MachineState *machine) /* Graphics */ if (spapr_vga_init(phb->bus)) { spapr->has_graphics = true; - machine->usb |= defaults_enabled(); + machine->usb |= defaults_enabled() && !machine->usb_disabled; } if (machine->usb) { diff --git a/include/hw/boards.h b/include/hw/boards.h index 78838d13d426..1f118811a28e 100644 --- a/include/hw/boards.h +++ b/include/hw/boards.h @@ -146,6 +146,7 @@ struct MachineState { bool dump_guest_core; bool mem_merge; bool usb; + bool usb_disabled; char *firmware; bool iommu; bool suppress_vmdesc;