Patch queue for 2.3 ppc - 2015-03-25
Just a few bug fixes before 2.3 gets released: - pseries: Firmware update, bugfixes - remove POWER5+ v0.0 that we incorrectly introduced in 2.3 - Fix -machine usb=no - Fix -boot once=foo in pseries - Add NULL pointer check in pseries machine init -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.19 (GNU/Linux) iQIcBAABAgAGBQJVEy5QAAoJECszeR4D/txgJLoQAI1ILcPuLAVqjhAKzP6LuKAC chtrSn982d3Tfu0gS6NW4iWoUDIx1ucrLnP8YrHWaUMBcGR0iz9z+2EhjgTH5+/g Zo9ngoYUc6a2QgoBhiKkJmxcY23pwmZKrYNwc3efOThHRSV4VGDY3zDG1RgM6Cp7 pz0PeSkjtOHjmcbBF5lHJVkvV9tb4ztAuMS5D22jEw+k8rsjz+c+dC2/nUQgCuSA pFfpL7DWqOACa547iEhDCCZQwdXrcZKF9hO1CNeGBIgrLD/wxbbaR9JqToF2KkFK vrmvCfPtw4a2kjc8VqoNFKS43TyzFR3w5vtreoG76d9ctpSvWUJR6SwoPUpqMBiJ V1H2V2wH5kghKH6QebGUKi0as1/w9pQNZf241E9JzT5UrpA/4N3Y9qQO4LHnwFFg j9qJronESn+RzCVeIi9COkHqpqD/T0shPAF2JJqLDNZW6eD5iU/fCTZmZn397fsH CLU1g7MWDoWaZbcfcSdRSYslXe9nM4YXI8SWq6Ni7kOaPvkbMNeD+sFNnM8ifd2y AFYFNLrSbBQ7H2M+Gwpe5TQnz/9DMLBrKlSTP/ikjWgEX9W1YCZipuOEwIcth18S 7jmoVaNbvFeBmxR4TttWXb9i4Thfu/UHq23zElTknN2QeEA9XS68fN7u4ikJan7T K1hkIPvDBN3w9OvEimOB =8Ygi -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/agraf/tags/signed-ppc-for-upstream' into staging Patch queue for 2.3 ppc - 2015-03-25 Just a few bug fixes before 2.3 gets released: - pseries: Firmware update, bugfixes - remove POWER5+ v0.0 that we incorrectly introduced in 2.3 - Fix -machine usb=no - Fix -boot once=foo in pseries - Add NULL pointer check in pseries machine init # gpg: Signature made Wed Mar 25 21:53:20 2015 GMT using RSA key ID 03FEDC60 # gpg: Good signature from "Alexander Graf <agraf@suse.de>" # gpg: aka "Alexander Graf <alex@csgraf.de>" * remotes/agraf/tags/signed-ppc-for-upstream: powerpc: fix -machine usb=no for newworld and pseries machines PPC: pseries: Implement boot once=foo target-ppc: Remove POWER5+ v0.0 that never existed spapr: Add missing checks for NULL pointers and report failures pseries: Update SLOF firmware image to qemu-slof-20150313 Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
1ee76e5191
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
@ -1506,6 +1519,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) {
|
||||
|
@ -1563,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) {
|
||||
|
@ -1623,6 +1640,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);
|
||||
|
@ -1639,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)
|
||||
|
@ -1771,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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
BIN
pc-bios/slof.bin
BIN
pc-bios/slof.bin
Binary file not shown.
|
@ -1 +1 @@
|
|||
Subproject commit a70dbda2e21f6e438b3617c44ff180c3418dc30f
|
||||
Subproject commit c89b0df661c0a6bfa9ff0ed4a371f631f5ee38b0
|
|
@ -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" },
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Reference in a new issue