qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/3] uninorth: move wiring of macio IRQs to Mac New World machine
@ 2018-05-03 20:24 Mark Cave-Ayland
  2018-05-03 20:24 ` [Qemu-devel] [PATCH 1/3] uninorth: create new uninorth device Mark Cave-Ayland
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Mark Cave-Ayland @ 2018-05-03 20:24 UTC (permalink / raw)
  To: qemu-devel, qemu-ppc, david

This is the remaining set of patches from my previous uninorth patchset which
moves the uninorth token register to its own separate device, and then moves
the wiring of macio IRQs to the Mac New World machine (similar to as already
has been done with the Old World machine).

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>

Not strictly a v2 but contains the following changes from the original
submission to patch 1:

- Change DEVICE_NATIVE_ENDIAN to DEVICE_BIG_ENDIAN for the Uninorth device
- Add Philippe's R-B tag


Mark Cave-Ayland (3):
  uninorth: create new uninorth device
  mac_newworld: remove pics IRQ array and wire up macio to OpenPIC
    directly
  mac_newworld: move wiring of macio IRQs to macio_newworld_realize()

 hw/misc/macio/macio.c          | 39 ++++++++++++++++------------
 hw/pci-host/trace-events       |  2 ++
 hw/pci-host/uninorth.c         | 58 ++++++++++++++++++++++++++++++++++++++++++
 hw/ppc/mac.h                   |  9 +++++++
 hw/ppc/mac_newworld.c          | 56 +++++-----------------------------------
 hw/ppc/trace-events            |  4 ---
 include/hw/misc/macio/macio.h  |  1 -
 include/hw/pci-host/uninorth.h | 11 ++++++++
 8 files changed, 110 insertions(+), 70 deletions(-)

-- 
2.11.0

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PATCH 1/3] uninorth: create new uninorth device
  2018-05-03 20:24 [Qemu-devel] [PATCH 0/3] uninorth: move wiring of macio IRQs to Mac New World machine Mark Cave-Ayland
@ 2018-05-03 20:24 ` Mark Cave-Ayland
  2018-05-04  0:02   ` David Gibson
  2018-05-03 20:24 ` [Qemu-devel] [PATCH 2/3] mac_newworld: remove pics IRQ array and wire up macio to OpenPIC directly Mark Cave-Ayland
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 6+ messages in thread
From: Mark Cave-Ayland @ 2018-05-03 20:24 UTC (permalink / raw)
  To: qemu-devel, qemu-ppc, david

Commit 4e46dcdbd3 "PPC: Newworld: Add uninorth token register" added a TODO
which was to convert the uninorth registers hack to a proper device. Move
these registers to a new uninorth device, removing the old hacks from
mac_newworld.c.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
 hw/pci-host/trace-events       |  2 ++
 hw/pci-host/uninorth.c         | 58 ++++++++++++++++++++++++++++++++++++++++++
 hw/ppc/mac_newworld.c          | 41 +++++------------------------
 hw/ppc/trace-events            |  4 ---
 include/hw/pci-host/uninorth.h | 11 ++++++++
 5 files changed, 77 insertions(+), 39 deletions(-)

diff --git a/hw/pci-host/trace-events b/hw/pci-host/trace-events
index 341a87a702..dd7a398e96 100644
--- a/hw/pci-host/trace-events
+++ b/hw/pci-host/trace-events
@@ -18,3 +18,5 @@ unin_set_irq(int irq_num, int level) "setting INT %d = %d"
 unin_get_config_reg(uint32_t reg, uint32_t addr, uint32_t retval) "converted config space accessor 0x%"PRIx32 "/0x%"PRIx32 " -> 0x%"PRIx32
 unin_data_write(uint64_t addr, unsigned len, uint64_t val) "write addr 0x%"PRIx64 " len %d val 0x%"PRIx64
 unin_data_read(uint64_t addr, unsigned len, uint64_t val) "read addr 0x%"PRIx64 " len %d val 0x%"PRIx64
+unin_write(uint64_t addr, uint64_t value) "addr=0x%" PRIx64 " val=0x%"PRIx64
+unin_read(uint64_t addr, uint64_t value) "addr=0x%" PRIx64 " val=0x%"PRIx64
diff --git a/hw/pci-host/uninorth.c b/hw/pci-host/uninorth.c
index fada0ffd5f..ba76b84dbc 100644
--- a/hw/pci-host/uninorth.c
+++ b/hw/pci-host/uninorth.c
@@ -519,6 +519,62 @@ static const TypeInfo pci_unin_internal_info = {
     .class_init    = pci_unin_internal_class_init,
 };
 
+/* UniN device */
+static void unin_write(void *opaque, hwaddr addr, uint64_t value,
+                       unsigned size)
+{
+    trace_unin_write(addr, value);
+    if (addr == 0x0) {
+        *(int *)opaque = value;
+    }
+}
+
+static uint64_t unin_read(void *opaque, hwaddr addr, unsigned size)
+{
+    uint32_t value;
+
+    value = 0;
+    switch (addr) {
+    case 0:
+        value = *(int *)opaque;
+    }
+
+    trace_unin_read(addr, value);
+
+    return value;
+}
+
+static const MemoryRegionOps unin_ops = {
+    .read = unin_read,
+    .write = unin_write,
+    .endianness = DEVICE_BIG_ENDIAN,
+};
+
+static void unin_init(Object *obj)
+{
+    UNINState *s = UNI_NORTH(obj);
+    SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
+
+    memory_region_init_io(&s->mem, obj, &unin_ops, &s->token, "unin", 0x1000);
+
+    sysbus_init_mmio(sbd, &s->mem);
+}
+
+static void unin_class_init(ObjectClass *klass, void *data)
+{
+    DeviceClass *dc = DEVICE_CLASS(klass);
+
+    set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
+}
+
+static const TypeInfo unin_info = {
+    .name          = TYPE_UNI_NORTH,
+    .parent        = TYPE_SYS_BUS_DEVICE,
+    .instance_size = sizeof(UNINState),
+    .instance_init = unin_init,
+    .class_init    = unin_class_init,
+};
+
 static void unin_register_types(void)
 {
     type_register_static(&unin_main_pci_host_info);
@@ -530,6 +586,8 @@ static void unin_register_types(void)
     type_register_static(&pci_u3_agp_info);
     type_register_static(&pci_unin_agp_info);
     type_register_static(&pci_unin_internal_info);
+
+    type_register_static(&unin_info);
 }
 
 type_init(unin_register_types)
diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c
index 29bd3838bf..9a382f992d 100644
--- a/hw/ppc/mac_newworld.c
+++ b/hw/ppc/mac_newworld.c
@@ -82,36 +82,6 @@
 
 #define NDRV_VGA_FILENAME "qemu_vga.ndrv"
 
-/* UniN device */
-static void unin_write(void *opaque, hwaddr addr, uint64_t value,
-                       unsigned size)
-{
-    trace_mac99_uninorth_write(addr, value);
-    if (addr == 0x0) {
-        *(int*)opaque = value;
-    }
-}
-
-static uint64_t unin_read(void *opaque, hwaddr addr, unsigned size)
-{
-    uint32_t value;
-
-    value = 0;
-    switch (addr) {
-    case 0:
-        value = *(int*)opaque;
-    }
-
-    trace_mac99_uninorth_read(addr, value);
-
-    return value;
-}
-
-static const MemoryRegionOps unin_ops = {
-    .read = unin_read,
-    .write = unin_write,
-    .endianness = DEVICE_NATIVE_ENDIAN,
-};
 
 static void fw_cfg_boot_set(void *opaque, const char *boot_device,
                             Error **errp)
@@ -145,7 +115,6 @@ static void ppc_core99_init(MachineState *machine)
     CPUPPCState *env = NULL;
     char *filename;
     qemu_irq *pic, **openpic_irqs;
-    MemoryRegion *unin_memory = g_new(MemoryRegion, 1);
     int linux_boot, i, j, k;
     MemoryRegion *ram = g_new(MemoryRegion, 1), *bios = g_new(MemoryRegion, 1);
     hwaddr kernel_base, initrd_base, cmdline_base = 0;
@@ -164,7 +133,6 @@ static void ppc_core99_init(MachineState *machine)
     int machine_arch;
     SysBusDevice *s;
     DeviceState *dev, *pic_dev;
-    int *token = g_new(int, 1);
     hwaddr nvram_addr = 0xFFF04000;
     uint64_t tbfreq;
 
@@ -272,9 +240,12 @@ static void ppc_core99_init(MachineState *machine)
         }
     }
 
-    /* UniN init: XXX should be a real device */
-    memory_region_init_io(unin_memory, NULL, &unin_ops, token, "unin", 0x1000);
-    memory_region_add_subregion(get_system_memory(), 0xf8000000, unin_memory);
+    /* UniN init */
+    dev = qdev_create(NULL, TYPE_UNI_NORTH);
+    qdev_init_nofail(dev);
+    s = SYS_BUS_DEVICE(dev);
+    memory_region_add_subregion(get_system_memory(), 0xf8000000,
+                                sysbus_mmio_get_region(s, 0));
 
     openpic_irqs = g_malloc0(smp_cpus * sizeof(qemu_irq *));
     openpic_irqs[0] =
diff --git a/hw/ppc/trace-events b/hw/ppc/trace-events
index 66ec7eda6e..dc5e65aee9 100644
--- a/hw/ppc/trace-events
+++ b/hw/ppc/trace-events
@@ -92,10 +92,6 @@ rs6000mc_size_read(uint32_t addr, uint32_t val) "read addr=0x%x val=0x%x"
 rs6000mc_size_write(uint32_t addr, uint32_t val) "write addr=0x%x val=0x%x"
 rs6000mc_parity_read(uint32_t addr, uint32_t val) "read addr=0x%x val=0x%x"
 
-# hw/ppc/mac_newworld.c
-mac99_uninorth_write(uint64_t addr, uint64_t value) "addr=0x%" PRIx64 " val=0x%"PRIx64
-mac99_uninorth_read(uint64_t addr, uint64_t value) "addr=0x%" PRIx64 " val=0x%"PRIx64
-
 # hw/ppc/ppc4xx_pci.c
 ppc4xx_pci_map_irq(int32_t devfn, int irq_num, int slot) "devfn 0x%x irq %d -> %d"
 ppc4xx_pci_set_irq(int irq_num) "PCI irq %d"
diff --git a/include/hw/pci-host/uninorth.h b/include/hw/pci-host/uninorth.h
index f0e6836c76..f6654bad9b 100644
--- a/include/hw/pci-host/uninorth.h
+++ b/include/hw/pci-host/uninorth.h
@@ -53,4 +53,15 @@ typedef struct UNINHostState {
     MemoryRegion pci_io;
 } UNINHostState;
 
+typedef struct UNINState {
+    SysBusDevice parent_obj;
+
+    MemoryRegion mem;
+    int token[1];
+} UNINState;
+
+#define TYPE_UNI_NORTH "uni-north"
+#define UNI_NORTH(obj) \
+    OBJECT_CHECK(UNINState, (obj), TYPE_UNI_NORTH)
+
 #endif /* UNINORTH_H */
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PATCH 2/3] mac_newworld: remove pics IRQ array and wire up macio to OpenPIC directly
  2018-05-03 20:24 [Qemu-devel] [PATCH 0/3] uninorth: move wiring of macio IRQs to Mac New World machine Mark Cave-Ayland
  2018-05-03 20:24 ` [Qemu-devel] [PATCH 1/3] uninorth: create new uninorth device Mark Cave-Ayland
@ 2018-05-03 20:24 ` Mark Cave-Ayland
  2018-05-03 20:24 ` [Qemu-devel] [PATCH 3/3] mac_newworld: move wiring of macio IRQs to macio_newworld_realize() Mark Cave-Ayland
  2018-05-04  0:04 ` [Qemu-devel] [PATCH 0/3] uninorth: move wiring of macio IRQs to Mac New World machine David Gibson
  3 siblings, 0 replies; 6+ messages in thread
From: Mark Cave-Ayland @ 2018-05-03 20:24 UTC (permalink / raw)
  To: qemu-devel, qemu-ppc, david

Introduce constants for the pre-defined New World IRQs to help keep things
readable.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
 hw/ppc/mac.h          |  9 +++++++++
 hw/ppc/mac_newworld.c | 29 +++++++++++++++--------------
 2 files changed, 24 insertions(+), 14 deletions(-)

diff --git a/hw/ppc/mac.h b/hw/ppc/mac.h
index 892dd03789..22a7efbed6 100644
--- a/hw/ppc/mac.h
+++ b/hw/ppc/mac.h
@@ -56,6 +56,15 @@
 #define OLDWORLD_IDE1_IRQ      0xe
 #define OLDWORLD_IDE1_DMA_IRQ  0x3
 
+/* New World IRQs */
+#define NEWWORLD_CUDA_IRQ      0x19
+#define NEWWORLD_ESCCB_IRQ     0x24
+#define NEWWORLD_ESCCA_IRQ     0x25
+#define NEWWORLD_IDE0_IRQ      0xd
+#define NEWWORLD_IDE0_DMA_IRQ  0x2
+#define NEWWORLD_IDE1_IRQ      0xe
+#define NEWWORLD_IDE1_DMA_IRQ  0x3
+
 /* MacIO */
 #define TYPE_MACIO_IDE "macio-ide"
 #define MACIO_IDE(obj) OBJECT_CHECK(MACIOIDEState, (obj), TYPE_MACIO_IDE)
diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c
index 9a382f992d..6a070f13bd 100644
--- a/hw/ppc/mac_newworld.c
+++ b/hw/ppc/mac_newworld.c
@@ -114,7 +114,7 @@ static void ppc_core99_init(MachineState *machine)
     PowerPCCPU *cpu = NULL;
     CPUPPCState *env = NULL;
     char *filename;
-    qemu_irq *pic, **openpic_irqs;
+    qemu_irq **openpic_irqs;
     int linux_boot, i, j, k;
     MemoryRegion *ram = g_new(MemoryRegion, 1), *bios = g_new(MemoryRegion, 1);
     hwaddr kernel_base, initrd_base, cmdline_base = 0;
@@ -291,8 +291,6 @@ static void ppc_core99_init(MachineState *machine)
         }
     }
 
-    pic = g_new0(qemu_irq, 64);
-
     pic_dev = qdev_create(NULL, TYPE_OPENPIC);
     qdev_prop_set_uint32(pic_dev, "model", OPENPIC_MODEL_KEYLARGO);
     qdev_init_nofail(pic_dev);
@@ -304,10 +302,6 @@ static void ppc_core99_init(MachineState *machine)
         }
     }
 
-    for (i = 0; i < 64; i++) {
-        pic[i] = qdev_get_gpio_in(pic_dev, i);
-    }
-
     if (PPC_INPUT(env) == PPC_FLAGS_INPUT_970) {
         /* 970 gets a U3 bus */
         /* Uninorth AGP bus */
@@ -381,13 +375,20 @@ static void ppc_core99_init(MachineState *machine)
     /* MacIO */
     macio = NEWWORLD_MACIO(pci_create(pci_bus, -1, TYPE_NEWWORLD_MACIO));
     dev = DEVICE(macio);
-    qdev_connect_gpio_out(dev, 0, pic[0x19]); /* CUDA */
-    qdev_connect_gpio_out(dev, 1, pic[0x24]); /* ESCC-B */
-    qdev_connect_gpio_out(dev, 2, pic[0x25]); /* ESCC-A */
-    qdev_connect_gpio_out(dev, 3, pic[0x0d]); /* IDE */
-    qdev_connect_gpio_out(dev, 4, pic[0x02]); /* IDE DMA */
-    qdev_connect_gpio_out(dev, 5, pic[0x0e]); /* IDE */
-    qdev_connect_gpio_out(dev, 6, pic[0x03]); /* IDE DMA */
+    qdev_connect_gpio_out(dev, 0,
+        qdev_get_gpio_in(pic_dev, NEWWORLD_CUDA_IRQ));
+    qdev_connect_gpio_out(dev, 1,
+        qdev_get_gpio_in(pic_dev, NEWWORLD_ESCCB_IRQ));
+    qdev_connect_gpio_out(dev, 2,
+        qdev_get_gpio_in(pic_dev, NEWWORLD_ESCCA_IRQ));
+    qdev_connect_gpio_out(dev, 3,
+        qdev_get_gpio_in(pic_dev, NEWWORLD_IDE0_IRQ));
+    qdev_connect_gpio_out(dev, 4,
+        qdev_get_gpio_in(pic_dev, NEWWORLD_IDE0_DMA_IRQ));
+    qdev_connect_gpio_out(dev, 5,
+        qdev_get_gpio_in(pic_dev, NEWWORLD_IDE1_IRQ));
+    qdev_connect_gpio_out(dev, 6,
+        qdev_get_gpio_in(pic_dev, NEWWORLD_IDE1_DMA_IRQ));
     qdev_prop_set_uint64(dev, "frequency", tbfreq);
     object_property_set_link(OBJECT(macio), OBJECT(pic_dev), "pic",
                              &error_abort);
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PATCH 3/3] mac_newworld: move wiring of macio IRQs to macio_newworld_realize()
  2018-05-03 20:24 [Qemu-devel] [PATCH 0/3] uninorth: move wiring of macio IRQs to Mac New World machine Mark Cave-Ayland
  2018-05-03 20:24 ` [Qemu-devel] [PATCH 1/3] uninorth: create new uninorth device Mark Cave-Ayland
  2018-05-03 20:24 ` [Qemu-devel] [PATCH 2/3] mac_newworld: remove pics IRQ array and wire up macio to OpenPIC directly Mark Cave-Ayland
@ 2018-05-03 20:24 ` Mark Cave-Ayland
  2018-05-04  0:04 ` [Qemu-devel] [PATCH 0/3] uninorth: move wiring of macio IRQs to Mac New World machine David Gibson
  3 siblings, 0 replies; 6+ messages in thread
From: Mark Cave-Ayland @ 2018-05-03 20:24 UTC (permalink / raw)
  To: qemu-devel, qemu-ppc, david

Since the macio device has a link to the PIC device, we can now wire up the
IRQs directly via qdev GPIOs rather than having to use an intermediate array.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
 hw/misc/macio/macio.c         | 39 +++++++++++++++++++++++----------------
 hw/ppc/mac_newworld.c         | 14 --------------
 include/hw/misc/macio/macio.h |  1 -
 3 files changed, 23 insertions(+), 31 deletions(-)

diff --git a/hw/misc/macio/macio.c b/hw/misc/macio/macio.c
index dac7bcd15e..79621eb879 100644
--- a/hw/misc/macio/macio.c
+++ b/hw/misc/macio/macio.c
@@ -279,11 +279,10 @@ static void macio_newworld_realize(PCIDevice *d, Error **errp)
 {
     MacIOState *s = MACIO(d);
     NewWorldMacIOState *ns = NEWWORLD_MACIO(d);
+    DeviceState *pic_dev = DEVICE(ns->pic);
     Error *err = NULL;
     SysBusDevice *sysbus_dev;
     MemoryRegion *timer_memory = NULL;
-    int i;
-    int cur_irq = 0;
 
     macio_common_realize(d, &err);
     if (err) {
@@ -292,11 +291,14 @@ static void macio_newworld_realize(PCIDevice *d, Error **errp)
     }
 
     sysbus_dev = SYS_BUS_DEVICE(&s->cuda);
-    sysbus_connect_irq(sysbus_dev, 0, ns->irqs[cur_irq++]);
+    sysbus_connect_irq(sysbus_dev, 0, qdev_get_gpio_in(pic_dev,
+                                                       NEWWORLD_CUDA_IRQ));
 
     sysbus_dev = SYS_BUS_DEVICE(&s->escc);
-    sysbus_connect_irq(sysbus_dev, 0, ns->irqs[cur_irq++]);
-    sysbus_connect_irq(sysbus_dev, 1, ns->irqs[cur_irq++]);
+    sysbus_connect_irq(sysbus_dev, 0, qdev_get_gpio_in(pic_dev,
+                                                       NEWWORLD_ESCCB_IRQ));
+    sysbus_connect_irq(sysbus_dev, 1, qdev_get_gpio_in(pic_dev,
+                                                       NEWWORLD_ESCCA_IRQ));
 
     /* OpenPIC */
     sysbus_dev = SYS_BUS_DEVICE(ns->pic);
@@ -304,15 +306,22 @@ static void macio_newworld_realize(PCIDevice *d, Error **errp)
                                 sysbus_mmio_get_region(sysbus_dev, 0));
 
     /* IDE buses */
-    for (i = 0; i < ARRAY_SIZE(ns->ide); i++) {
-        qemu_irq irq0 = ns->irqs[cur_irq++];
-        qemu_irq irq1 = ns->irqs[cur_irq++];
-
-        macio_realize_ide(s, &ns->ide[i], irq0, irq1, 0x16 + (i * 4), &err);
-        if (err) {
-            error_propagate(errp, err);
-            return;
-        }
+    macio_realize_ide(s, &ns->ide[0],
+                      qdev_get_gpio_in(pic_dev, NEWWORLD_IDE0_IRQ),
+                      qdev_get_gpio_in(pic_dev, NEWWORLD_IDE0_DMA_IRQ),
+                      0x16, &err);
+    if (err) {
+        error_propagate(errp, err);
+        return;
+    }
+
+    macio_realize_ide(s, &ns->ide[1],
+                      qdev_get_gpio_in(pic_dev, NEWWORLD_IDE1_IRQ),
+                      qdev_get_gpio_in(pic_dev, NEWWORLD_IDE1_DMA_IRQ),
+                      0x1a, &err);
+    if (err) {
+        error_propagate(errp, err);
+        return;
     }
 
     /* Timer */
@@ -328,8 +337,6 @@ static void macio_newworld_init(Object *obj)
     NewWorldMacIOState *ns = NEWWORLD_MACIO(obj);
     int i;
 
-    qdev_init_gpio_out(DEVICE(obj), ns->irqs, ARRAY_SIZE(ns->irqs));
-
     object_property_add_link(obj, "pic", TYPE_OPENPIC,
                              (Object **) &ns->pic,
                              qdev_prop_allow_set_link_before_realize,
diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c
index 6a070f13bd..744acdfd2e 100644
--- a/hw/ppc/mac_newworld.c
+++ b/hw/ppc/mac_newworld.c
@@ -375,20 +375,6 @@ static void ppc_core99_init(MachineState *machine)
     /* MacIO */
     macio = NEWWORLD_MACIO(pci_create(pci_bus, -1, TYPE_NEWWORLD_MACIO));
     dev = DEVICE(macio);
-    qdev_connect_gpio_out(dev, 0,
-        qdev_get_gpio_in(pic_dev, NEWWORLD_CUDA_IRQ));
-    qdev_connect_gpio_out(dev, 1,
-        qdev_get_gpio_in(pic_dev, NEWWORLD_ESCCB_IRQ));
-    qdev_connect_gpio_out(dev, 2,
-        qdev_get_gpio_in(pic_dev, NEWWORLD_ESCCA_IRQ));
-    qdev_connect_gpio_out(dev, 3,
-        qdev_get_gpio_in(pic_dev, NEWWORLD_IDE0_IRQ));
-    qdev_connect_gpio_out(dev, 4,
-        qdev_get_gpio_in(pic_dev, NEWWORLD_IDE0_DMA_IRQ));
-    qdev_connect_gpio_out(dev, 5,
-        qdev_get_gpio_in(pic_dev, NEWWORLD_IDE1_IRQ));
-    qdev_connect_gpio_out(dev, 6,
-        qdev_get_gpio_in(pic_dev, NEWWORLD_IDE1_DMA_IRQ));
     qdev_prop_set_uint64(dev, "frequency", tbfreq);
     object_property_set_link(OBJECT(macio), OBJECT(pic_dev), "pic",
                              &error_abort);
diff --git a/include/hw/misc/macio/macio.h b/include/hw/misc/macio/macio.h
index 64a2584a77..838eaf1db0 100644
--- a/include/hw/misc/macio/macio.h
+++ b/include/hw/misc/macio/macio.h
@@ -71,7 +71,6 @@ typedef struct NewWorldMacIOState {
     /*< public >*/
 
     OpenPICState *pic;
-    qemu_irq irqs[7];
     MACIOIDEState ide[2];
 } NewWorldMacIOState;
 
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH 1/3] uninorth: create new uninorth device
  2018-05-03 20:24 ` [Qemu-devel] [PATCH 1/3] uninorth: create new uninorth device Mark Cave-Ayland
@ 2018-05-04  0:02   ` David Gibson
  0 siblings, 0 replies; 6+ messages in thread
From: David Gibson @ 2018-05-04  0:02 UTC (permalink / raw)
  To: Mark Cave-Ayland; +Cc: qemu-devel, qemu-ppc

[-- Attachment #1: Type: text/plain, Size: 7916 bytes --]

On Thu, May 03, 2018 at 09:24:39PM +0100, Mark Cave-Ayland wrote:
> Commit 4e46dcdbd3 "PPC: Newworld: Add uninorth token register" added a TODO
> which was to convert the uninorth registers hack to a proper device. Move
> these registers to a new uninorth device, removing the old hacks from
> mac_newworld.c.
> 
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
>  hw/pci-host/trace-events       |  2 ++
>  hw/pci-host/uninorth.c         | 58 ++++++++++++++++++++++++++++++++++++++++++
>  hw/ppc/mac_newworld.c          | 41 +++++------------------------
>  hw/ppc/trace-events            |  4 ---
>  include/hw/pci-host/uninorth.h | 11 ++++++++
>  5 files changed, 77 insertions(+), 39 deletions(-)
> 
> diff --git a/hw/pci-host/trace-events b/hw/pci-host/trace-events
> index 341a87a702..dd7a398e96 100644
> --- a/hw/pci-host/trace-events
> +++ b/hw/pci-host/trace-events
> @@ -18,3 +18,5 @@ unin_set_irq(int irq_num, int level) "setting INT %d = %d"
>  unin_get_config_reg(uint32_t reg, uint32_t addr, uint32_t retval) "converted config space accessor 0x%"PRIx32 "/0x%"PRIx32 " -> 0x%"PRIx32
>  unin_data_write(uint64_t addr, unsigned len, uint64_t val) "write addr 0x%"PRIx64 " len %d val 0x%"PRIx64
>  unin_data_read(uint64_t addr, unsigned len, uint64_t val) "read addr 0x%"PRIx64 " len %d val 0x%"PRIx64
> +unin_write(uint64_t addr, uint64_t value) "addr=0x%" PRIx64 " val=0x%"PRIx64
> +unin_read(uint64_t addr, uint64_t value) "addr=0x%" PRIx64 " val=0x%"PRIx64
> diff --git a/hw/pci-host/uninorth.c b/hw/pci-host/uninorth.c
> index fada0ffd5f..ba76b84dbc 100644
> --- a/hw/pci-host/uninorth.c
> +++ b/hw/pci-host/uninorth.c
> @@ -519,6 +519,62 @@ static const TypeInfo pci_unin_internal_info = {
>      .class_init    = pci_unin_internal_class_init,
>  };
>  
> +/* UniN device */
> +static void unin_write(void *opaque, hwaddr addr, uint64_t value,
> +                       unsigned size)
> +{
> +    trace_unin_write(addr, value);
> +    if (addr == 0x0) {
> +        *(int *)opaque = value;
> +    }
> +}
> +
> +static uint64_t unin_read(void *opaque, hwaddr addr, unsigned size)
> +{
> +    uint32_t value;
> +
> +    value = 0;
> +    switch (addr) {
> +    case 0:
> +        value = *(int *)opaque;
> +    }
> +
> +    trace_unin_read(addr, value);
> +
> +    return value;
> +}
> +
> +static const MemoryRegionOps unin_ops = {
> +    .read = unin_read,
> +    .write = unin_write,
> +    .endianness = DEVICE_BIG_ENDIAN,

This should really declare allowed / implemented sizes, but that can
be a later followup, since this is basically just code motion.

> +};
> +
> +static void unin_init(Object *obj)
> +{
> +    UNINState *s = UNI_NORTH(obj);
> +    SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
> +
> +    memory_region_init_io(&s->mem, obj, &unin_ops, &s->token, "unin", 0x1000);
> +
> +    sysbus_init_mmio(sbd, &s->mem);
> +}
> +
> +static void unin_class_init(ObjectClass *klass, void *data)
> +{
> +    DeviceClass *dc = DEVICE_CLASS(klass);
> +
> +    set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
> +}
> +
> +static const TypeInfo unin_info = {
> +    .name          = TYPE_UNI_NORTH,
> +    .parent        = TYPE_SYS_BUS_DEVICE,
> +    .instance_size = sizeof(UNINState),
> +    .instance_init = unin_init,
> +    .class_init    = unin_class_init,
> +};
> +
>  static void unin_register_types(void)
>  {
>      type_register_static(&unin_main_pci_host_info);
> @@ -530,6 +586,8 @@ static void unin_register_types(void)
>      type_register_static(&pci_u3_agp_info);
>      type_register_static(&pci_unin_agp_info);
>      type_register_static(&pci_unin_internal_info);
> +
> +    type_register_static(&unin_info);
>  }
>  
>  type_init(unin_register_types)
> diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c
> index 29bd3838bf..9a382f992d 100644
> --- a/hw/ppc/mac_newworld.c
> +++ b/hw/ppc/mac_newworld.c
> @@ -82,36 +82,6 @@
>  
>  #define NDRV_VGA_FILENAME "qemu_vga.ndrv"
>  
> -/* UniN device */
> -static void unin_write(void *opaque, hwaddr addr, uint64_t value,
> -                       unsigned size)
> -{
> -    trace_mac99_uninorth_write(addr, value);
> -    if (addr == 0x0) {
> -        *(int*)opaque = value;
> -    }
> -}
> -
> -static uint64_t unin_read(void *opaque, hwaddr addr, unsigned size)
> -{
> -    uint32_t value;
> -
> -    value = 0;
> -    switch (addr) {
> -    case 0:
> -        value = *(int*)opaque;
> -    }
> -
> -    trace_mac99_uninorth_read(addr, value);
> -
> -    return value;
> -}
> -
> -static const MemoryRegionOps unin_ops = {
> -    .read = unin_read,
> -    .write = unin_write,
> -    .endianness = DEVICE_NATIVE_ENDIAN,
> -};
>  
>  static void fw_cfg_boot_set(void *opaque, const char *boot_device,
>                              Error **errp)
> @@ -145,7 +115,6 @@ static void ppc_core99_init(MachineState *machine)
>      CPUPPCState *env = NULL;
>      char *filename;
>      qemu_irq *pic, **openpic_irqs;
> -    MemoryRegion *unin_memory = g_new(MemoryRegion, 1);
>      int linux_boot, i, j, k;
>      MemoryRegion *ram = g_new(MemoryRegion, 1), *bios = g_new(MemoryRegion, 1);
>      hwaddr kernel_base, initrd_base, cmdline_base = 0;
> @@ -164,7 +133,6 @@ static void ppc_core99_init(MachineState *machine)
>      int machine_arch;
>      SysBusDevice *s;
>      DeviceState *dev, *pic_dev;
> -    int *token = g_new(int, 1);
>      hwaddr nvram_addr = 0xFFF04000;
>      uint64_t tbfreq;
>  
> @@ -272,9 +240,12 @@ static void ppc_core99_init(MachineState *machine)
>          }
>      }
>  
> -    /* UniN init: XXX should be a real device */
> -    memory_region_init_io(unin_memory, NULL, &unin_ops, token, "unin", 0x1000);
> -    memory_region_add_subregion(get_system_memory(), 0xf8000000, unin_memory);
> +    /* UniN init */
> +    dev = qdev_create(NULL, TYPE_UNI_NORTH);
> +    qdev_init_nofail(dev);
> +    s = SYS_BUS_DEVICE(dev);
> +    memory_region_add_subregion(get_system_memory(), 0xf8000000,
> +                                sysbus_mmio_get_region(s, 0));
>  
>      openpic_irqs = g_malloc0(smp_cpus * sizeof(qemu_irq *));
>      openpic_irqs[0] =
> diff --git a/hw/ppc/trace-events b/hw/ppc/trace-events
> index 66ec7eda6e..dc5e65aee9 100644
> --- a/hw/ppc/trace-events
> +++ b/hw/ppc/trace-events
> @@ -92,10 +92,6 @@ rs6000mc_size_read(uint32_t addr, uint32_t val) "read addr=0x%x val=0x%x"
>  rs6000mc_size_write(uint32_t addr, uint32_t val) "write addr=0x%x val=0x%x"
>  rs6000mc_parity_read(uint32_t addr, uint32_t val) "read addr=0x%x val=0x%x"
>  
> -# hw/ppc/mac_newworld.c
> -mac99_uninorth_write(uint64_t addr, uint64_t value) "addr=0x%" PRIx64 " val=0x%"PRIx64
> -mac99_uninorth_read(uint64_t addr, uint64_t value) "addr=0x%" PRIx64 " val=0x%"PRIx64
> -
>  # hw/ppc/ppc4xx_pci.c
>  ppc4xx_pci_map_irq(int32_t devfn, int irq_num, int slot) "devfn 0x%x irq %d -> %d"
>  ppc4xx_pci_set_irq(int irq_num) "PCI irq %d"
> diff --git a/include/hw/pci-host/uninorth.h b/include/hw/pci-host/uninorth.h
> index f0e6836c76..f6654bad9b 100644
> --- a/include/hw/pci-host/uninorth.h
> +++ b/include/hw/pci-host/uninorth.h
> @@ -53,4 +53,15 @@ typedef struct UNINHostState {
>      MemoryRegion pci_io;
>  } UNINHostState;
>  
> +typedef struct UNINState {
> +    SysBusDevice parent_obj;
> +
> +    MemoryRegion mem;
> +    int token[1];
> +} UNINState;
> +
> +#define TYPE_UNI_NORTH "uni-north"
> +#define UNI_NORTH(obj) \
> +    OBJECT_CHECK(UNINState, (obj), TYPE_UNI_NORTH)
> +
>  #endif /* UNINORTH_H */

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH 0/3] uninorth: move wiring of macio IRQs to Mac New World machine
  2018-05-03 20:24 [Qemu-devel] [PATCH 0/3] uninorth: move wiring of macio IRQs to Mac New World machine Mark Cave-Ayland
                   ` (2 preceding siblings ...)
  2018-05-03 20:24 ` [Qemu-devel] [PATCH 3/3] mac_newworld: move wiring of macio IRQs to macio_newworld_realize() Mark Cave-Ayland
@ 2018-05-04  0:04 ` David Gibson
  3 siblings, 0 replies; 6+ messages in thread
From: David Gibson @ 2018-05-04  0:04 UTC (permalink / raw)
  To: Mark Cave-Ayland; +Cc: qemu-devel, qemu-ppc

[-- Attachment #1: Type: text/plain, Size: 1630 bytes --]

On Thu, May 03, 2018 at 09:24:38PM +0100, Mark Cave-Ayland wrote:
> This is the remaining set of patches from my previous uninorth patchset which
> moves the uninorth token register to its own separate device, and then moves
> the wiring of macio IRQs to the Mac New World machine (similar to as already
> has been done with the Old World machine).
> 
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>

Applied to ppc-for-2.13, thanks.

> 
> Not strictly a v2 but contains the following changes from the original
> submission to patch 1:
> 
> - Change DEVICE_NATIVE_ENDIAN to DEVICE_BIG_ENDIAN for the Uninorth device
> - Add Philippe's R-B tag
> 
> 
> Mark Cave-Ayland (3):
>   uninorth: create new uninorth device
>   mac_newworld: remove pics IRQ array and wire up macio to OpenPIC
>     directly
>   mac_newworld: move wiring of macio IRQs to macio_newworld_realize()
> 
>  hw/misc/macio/macio.c          | 39 ++++++++++++++++------------
>  hw/pci-host/trace-events       |  2 ++
>  hw/pci-host/uninorth.c         | 58 ++++++++++++++++++++++++++++++++++++++++++
>  hw/ppc/mac.h                   |  9 +++++++
>  hw/ppc/mac_newworld.c          | 56 +++++-----------------------------------
>  hw/ppc/trace-events            |  4 ---
>  include/hw/misc/macio/macio.h  |  1 -
>  include/hw/pci-host/uninorth.h | 11 ++++++++
>  8 files changed, 110 insertions(+), 70 deletions(-)
> 

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2018-05-04  1:26 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-05-03 20:24 [Qemu-devel] [PATCH 0/3] uninorth: move wiring of macio IRQs to Mac New World machine Mark Cave-Ayland
2018-05-03 20:24 ` [Qemu-devel] [PATCH 1/3] uninorth: create new uninorth device Mark Cave-Ayland
2018-05-04  0:02   ` David Gibson
2018-05-03 20:24 ` [Qemu-devel] [PATCH 2/3] mac_newworld: remove pics IRQ array and wire up macio to OpenPIC directly Mark Cave-Ayland
2018-05-03 20:24 ` [Qemu-devel] [PATCH 3/3] mac_newworld: move wiring of macio IRQs to macio_newworld_realize() Mark Cave-Ayland
2018-05-04  0:04 ` [Qemu-devel] [PATCH 0/3] uninorth: move wiring of macio IRQs to Mac New World machine David Gibson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).