aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2018-03-19 09:39:29 +0000
committerPeter Maydell <peter.maydell@linaro.org>2018-03-19 09:39:29 +0000
commit870c75b54343581edd1f03ed2035232893138749 (patch)
treec0b02db1652bda1e758bf54a05d255651a15655c
parente1e44a9916b4318e943aecd669e096222cb3eaeb (diff)
parent91c60f124e682a78c9a2ef951e8e58ebab6441d0 (diff)
Merge remote-tracking branch 'remotes/dgibson/tags/ppc-for-2.12-20180319' into staging
ppc patch queue for 2018-03-19 This pull request supersedes the one for 2018-03-15. The only difference is one patch is removed, since it exposed some code which triggers ubsan warnings. Here's the set of accumulated patches now that we're into soft freeze. I've split new functionality into a ppc-for-2.13 branch, so this only has bugfixes. Well.. and a couple of simple cleanups to make bugfixes easier, some test improvements and a trivial change to make command line options more obvious. I think those are all acceptable for soft freeze. # gpg: Signature made Mon 19 Mar 2018 00:34:56 GMT # gpg: using RSA key 6C38CACA20D9B392 # gpg: Good signature from "David Gibson <david@gibson.dropbear.id.au>" # gpg: aka "David Gibson (Red Hat) <dgibson@redhat.com>" # gpg: aka "David Gibson (ozlabs.org) <dgibson@ozlabs.org>" # gpg: aka "David Gibson (kernel.org) <dwg@kernel.org>" # Primary key fingerprint: 75F4 6586 AE61 A66C C44E 87DC 6C38 CACA 20D9 B392 * remotes/dgibson/tags/ppc-for-2.12-20180319: target/ppc: fix tlbsync to check privilege level depending on GTSE ppc440_pcix: Change some error_report to qemu_log_mask(LOG_UNIMP, ...) hw/ppc/spapr: Allow "spapr-vlan" as NIC model name beside "ibmveth" PPC e500: Fix gap between u-boot and kernel hw/misc/macio: Mark the macio devices with user_creatable = false hw/ppc/prep: Fix implicit creation of "-drive if=scsi" devices tests/boot-serial: Check the 40p machine, too sii3112: Remove unneeded exit function Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
-rw-r--r--hw/ide/sii3112.c12
-rw-r--r--hw/misc/macio/macio.c2
-rw-r--r--hw/ppc/e500.c9
-rw-r--r--hw/ppc/ppc440_pcix.c11
-rw-r--r--hw/ppc/prep.c2
-rw-r--r--hw/ppc/spapr.c5
-rw-r--r--hw/scsi/lsi53c895a.c7
-rw-r--r--include/hw/pci/pci.h1
-rw-r--r--target/ppc/translate.c9
-rw-r--r--tests/boot-serial-test.c6
10 files changed, 36 insertions, 28 deletions
diff --git a/hw/ide/sii3112.c b/hw/ide/sii3112.c
index e3896c65b4..743a50ed51 100644
--- a/hw/ide/sii3112.c
+++ b/hw/ide/sii3112.c
@@ -327,17 +327,6 @@ static void sii3112_pci_realize(PCIDevice *dev, Error **errp)
qemu_register_reset(sii3112_reset, s);
}
-static void sii3112_pci_exitfn(PCIDevice *dev)
-{
- PCIIDEState *d = PCI_IDE(dev);
- int i;
-
- for (i = 0; i < 2; ++i) {
- memory_region_del_subregion(&d->bmdma_bar, &d->bmdma[i].extra_io);
- memory_region_del_subregion(&d->bmdma_bar, &d->bmdma[i].addr_ioport);
- }
-}
-
static void sii3112_pci_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
@@ -348,7 +337,6 @@ static void sii3112_pci_class_init(ObjectClass *klass, void *data)
pd->class_id = PCI_CLASS_STORAGE_RAID;
pd->revision = 1;
pd->realize = sii3112_pci_realize;
- pd->exit = sii3112_pci_exitfn;
dc->desc = "SiI3112A SATA controller";
set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
}
diff --git a/hw/misc/macio/macio.c b/hw/misc/macio/macio.c
index af1bd46b4b..454244f59e 100644
--- a/hw/misc/macio/macio.c
+++ b/hw/misc/macio/macio.c
@@ -406,6 +406,8 @@ static void macio_class_init(ObjectClass *klass, void *data)
k->class_id = PCI_CLASS_OTHERS << 8;
dc->props = macio_properties;
set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
+ /* Reason: Uses serial_hds in macio_instance_init */
+ dc->user_creatable = false;
}
static const TypeInfo macio_oldworld_type_info = {
diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c
index 2238f963c4..9a85a41362 100644
--- a/hw/ppc/e500.c
+++ b/hw/ppc/e500.c
@@ -1009,6 +1009,10 @@ void ppce500_init(MachineState *machine, PPCE500Params *params)
}
cur_base = loadaddr + payload_size;
+ if (cur_base < (32 * 1024 * 1024)) {
+ /* u-boot occupies memory up to 32MB, so load blobs above */
+ cur_base = (32 * 1024 * 1024);
+ }
/* Load bare kernel only if no bios/u-boot has been provided */
if (machine->kernel_filename && !kernel_as_payload) {
@@ -1025,11 +1029,6 @@ void ppce500_init(MachineState *machine, PPCE500Params *params)
cur_base += kernel_size;
}
- if (cur_base < (32 * 1024 * 1024)) {
- /* u-boot occupies memory up to 32MB, so load blobs above */
- cur_base = (32 * 1024 * 1024);
- }
-
/* Load initrd. */
if (machine->initrd_filename) {
initrd_base = (cur_base + INITRD_LOAD_PAD) & ~INITRD_PAD_MASK;
diff --git a/hw/ppc/ppc440_pcix.c b/hw/ppc/ppc440_pcix.c
index ab2626a9de..b1307e6477 100644
--- a/hw/ppc/ppc440_pcix.c
+++ b/hw/ppc/ppc440_pcix.c
@@ -21,6 +21,7 @@
#include "qemu/osdep.h"
#include "qemu/error-report.h"
+#include "qemu/log.h"
#include "hw/hw.h"
#include "hw/ppc/ppc.h"
#include "hw/ppc/ppc4xx.h"
@@ -286,8 +287,9 @@ static void ppc440_pcix_reg_write4(void *opaque, hwaddr addr,
break;
default:
- error_report("%s: unhandled PCI internal register 0x%lx", __func__,
- (unsigned long)addr);
+ qemu_log_mask(LOG_UNIMP,
+ "%s: unhandled PCI internal register 0x%"HWADDR_PRIx"\n",
+ __func__, addr);
break;
}
}
@@ -377,8 +379,9 @@ static uint64_t ppc440_pcix_reg_read4(void *opaque, hwaddr addr,
break;
default:
- error_report("%s: invalid PCI internal register 0x%lx", __func__,
- (unsigned long)addr);
+ qemu_log_mask(LOG_UNIMP,
+ "%s: invalid PCI internal register 0x%" HWADDR_PRIx "\n",
+ __func__, addr);
val = 0;
}
diff --git a/hw/ppc/prep.c b/hw/ppc/prep.c
index 5c78503069..a1e7219db6 100644
--- a/hw/ppc/prep.c
+++ b/hw/ppc/prep.c
@@ -787,7 +787,7 @@ static void ibm_40p_init(MachineState *machine)
qdev_prop_set_uint32(dev, "equipment", 0xc0);
qdev_init_nofail(dev);
- pci_create_simple(pci_bus, PCI_DEVFN(1, 0), "lsi53c810");
+ lsi53c810_create(pci_bus, PCI_DEVFN(1, 0));
/* XXX: s3-trio at PCI_DEVFN(2, 0) */
pci_vga_init(pci_bus);
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 032d03423f..fba76abee2 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -2607,10 +2607,11 @@ static void spapr_machine_init(MachineState *machine)
NICInfo *nd = &nd_table[i];
if (!nd->model) {
- nd->model = g_strdup("ibmveth");
+ nd->model = g_strdup("spapr-vlan");
}
- if (strcmp(nd->model, "ibmveth") == 0) {
+ if (g_str_equal(nd->model, "spapr-vlan") ||
+ g_str_equal(nd->model, "ibmveth")) {
spapr_vlan_create(spapr->vio_bus, nd);
} else {
pci_nic_init_nofail(&nd_table[i], phb->bus, nd->model, NULL);
diff --git a/hw/scsi/lsi53c895a.c b/hw/scsi/lsi53c895a.c
index f3d4c4d230..160657f4b9 100644
--- a/hw/scsi/lsi53c895a.c
+++ b/hw/scsi/lsi53c895a.c
@@ -2279,3 +2279,10 @@ void lsi53c895a_create(PCIBus *bus)
scsi_bus_legacy_handle_cmdline(&s->bus);
}
+
+void lsi53c810_create(PCIBus *bus, int devfn)
+{
+ LSIState *s = LSI53C895A(pci_create_simple(bus, devfn, "lsi53c810"));
+
+ scsi_bus_legacy_handle_cmdline(&s->bus);
+}
diff --git a/include/hw/pci/pci.h b/include/hw/pci/pci.h
index d8c18c7fa4..e255941b5a 100644
--- a/include/hw/pci/pci.h
+++ b/include/hw/pci/pci.h
@@ -708,6 +708,7 @@ PCIDevice *pci_create(PCIBus *bus, int devfn, const char *name);
PCIDevice *pci_create_simple(PCIBus *bus, int devfn, const char *name);
void lsi53c895a_create(PCIBus *bus);
+void lsi53c810_create(PCIBus *bus, int devfn);
qemu_irq pci_allocate_irq(PCIDevice *pci_dev);
void pci_set_irq(PCIDevice *pci_dev, int level);
diff --git a/target/ppc/translate.c b/target/ppc/translate.c
index 0a0c090c99..218665b408 100644
--- a/target/ppc/translate.c
+++ b/target/ppc/translate.c
@@ -4526,7 +4526,7 @@ static void gen_tlbie(DisasContext *ctx)
TCGv_i32 t1;
if (ctx->gtse) {
- CHK_SV; /* If gtse is set then tblie is supervisor privileged */
+ CHK_SV; /* If gtse is set then tlbie is supervisor privileged */
} else {
CHK_HV; /* Else hypervisor privileged */
}
@@ -4553,7 +4553,12 @@ static void gen_tlbsync(DisasContext *ctx)
#if defined(CONFIG_USER_ONLY)
GEN_PRIV;
#else
- CHK_HV;
+
+ if (ctx->gtse) {
+ CHK_SV; /* If gtse is set then tlbsync is supervisor privileged */
+ } else {
+ CHK_HV; /* Else hypervisor privileged */
+ }
/* BookS does both ptesync and tlbsync make tlbsync a nop for server */
if (ctx->insns_flags & PPC_BOOKE) {
diff --git a/tests/boot-serial-test.c b/tests/boot-serial-test.c
index ece25c694f..5b24cd26c1 100644
--- a/tests/boot-serial-test.c
+++ b/tests/boot-serial-test.c
@@ -75,11 +75,13 @@ typedef struct testdef {
static testdef_t tests[] = {
{ "alpha", "clipper", "", "PCI:" },
{ "ppc", "ppce500", "", "U-Boot" },
- { "ppc", "prep", "", "Open Hack'Ware BIOS" },
+ { "ppc", "prep", "-m 96", "Memory size: 96 MB" },
+ { "ppc", "40p", "-boot d", "Booting from device d" },
{ "ppc", "g3beige", "", "PowerPC,750" },
{ "ppc", "mac99", "", "PowerPC,G4" },
{ "ppc64", "ppce500", "", "U-Boot" },
- { "ppc64", "prep", "", "Open Hack'Ware BIOS" },
+ { "ppc64", "prep", "-boot e", "Booting from device e" },
+ { "ppc64", "40p", "-m 192", "Memory size: 192 MB" },
{ "ppc64", "mac99", "", "PowerPC,970FX" },
{ "ppc64", "pseries", "", "Open Firmware" },
{ "ppc64", "powernv", "-cpu POWER8", "OPAL" },