diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2020-09-03 16:58:24 +0100 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2020-09-03 16:58:25 +0100 |
commit | 67a7bfe560a1bba59efab085cb3430f45176d382 (patch) | |
tree | 90c5e259a2f38dcf199bedb93b51bf6542486bc1 /hw | |
parent | 3dd23a4fb8fd72d2220a90a809f213999ffe7f3a (diff) | |
parent | 0a796d63bcd4e840bb94fbe894ae2ad77b9ee2f7 (diff) |
Merge remote-tracking branch 'remotes/huth-gitlab/tags/pull-request-2020-09-03' into staging
* Cirrus-CI improvements and fixes (compile with -Werror & fix for 1h problem)
* Two build system fixes to fix some failures the CI
* One m68k QOMification patch
* Some trivial qtest patches
* Some small improvements for the Gitlab CI
# gpg: Signature made Thu 03 Sep 2020 12:04:32 BST
# gpg: using RSA key 27B88847EEE0250118F3EAB92ED9D774FE702DB5
# gpg: issuer "thuth@redhat.com"
# gpg: Good signature from "Thomas Huth <th.huth@gmx.de>" [full]
# gpg: aka "Thomas Huth <thuth@redhat.com>" [full]
# gpg: aka "Thomas Huth <huth@tuxfamily.org>" [full]
# gpg: aka "Thomas Huth <th.huth@posteo.de>" [unknown]
# Primary key fingerprint: 27B8 8847 EEE0 2501 18F3 EAB9 2ED9 D774 FE70 2DB5
* remotes/huth-gitlab/tags/pull-request-2020-09-03:
gitlab-ci.yml: Set artifacts expiration time
gitlab-ci.yml: Run check-qtest and check-unit at the end of the fuzzer job
gitlab/travis: Rework the disabled features tests
libqtest: Rename qmp_assert_error_class() to qmp_expect_error_and_unref()
tests/qtest/ipmi-kcs: Fix assert side-effect
tests/qtest/tpm: Declare input buffers const and static
tests/qtest/ahci: Improve error handling (NEGATIVE_RETURNS)
hw/m68k: QOMify the mcf5206 system integration module
configure: Add system = 'linux' for meson when cross-compiling
meson: fix keymaps without qemu-keymap
cirrus.yml: Split FreeBSD job into two parts
cirrus.yml: Update the macOS jobs to Catalina
cirrus.yml: Compile macOS with -Werror
cirrus.yml: Compile FreeBSD with -Werror
configure: Fix atomic64 test for --enable-werror on macOS
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'hw')
-rw-r--r-- | hw/m68k/an5206.c | 14 | ||||
-rw-r--r-- | hw/m68k/mcf5206.c | 44 |
2 files changed, 47 insertions, 11 deletions
diff --git a/hw/m68k/an5206.c b/hw/m68k/an5206.c index 846f4e40c6..673898b0ea 100644 --- a/hw/m68k/an5206.c +++ b/hw/m68k/an5206.c @@ -21,7 +21,17 @@ #define AN5206_MBAR_ADDR 0x10000000 #define AN5206_RAMBAR_ADDR 0x20000000 -/* Board init. */ +static void mcf5206_init(MemoryRegion *sysmem, uint32_t base) +{ + DeviceState *dev; + SysBusDevice *s; + + dev = qdev_new(TYPE_MCF5206_MBAR); + s = SYS_BUS_DEVICE(dev); + sysbus_realize_and_unref(s, &error_fatal); + + memory_region_add_subregion(sysmem, base, sysbus_mmio_get_region(s, 0)); +} static void an5206_init(MachineState *machine) { @@ -51,7 +61,7 @@ static void an5206_init(MachineState *machine) memory_region_init_ram(sram, NULL, "an5206.sram", 512, &error_fatal); memory_region_add_subregion(address_space_mem, AN5206_RAMBAR_ADDR, sram); - mcf5206_init(address_space_mem, AN5206_MBAR_ADDR, cpu); + mcf5206_init(address_space_mem, AN5206_MBAR_ADDR); /* Load kernel. */ if (!kernel_filename) { diff --git a/hw/m68k/mcf5206.c b/hw/m68k/mcf5206.c index 94a37a1a46..51d2e0da1c 100644 --- a/hw/m68k/mcf5206.c +++ b/hw/m68k/mcf5206.c @@ -15,6 +15,7 @@ #include "qemu/timer.h" #include "hw/ptimer.h" #include "sysemu/sysemu.h" +#include "hw/sysbus.h" /* General purpose timer module. */ typedef struct { @@ -159,6 +160,8 @@ static m5206_timer_state *m5206_timer_init(qemu_irq irq) /* System Integration Module. */ typedef struct { + SysBusDevice parent_obj; + M68kCPU *cpu; MemoryRegion iomem; m5206_timer_state *timer[2]; @@ -174,6 +177,8 @@ typedef struct { uint8_t uivr[2]; } m5206_mbar_state; +#define MCF5206_MBAR(obj) OBJECT_CHECK(m5206_mbar_state, (obj), TYPE_MCF5206_MBAR) + /* Interrupt controller. */ static int m5206_find_pending_irq(m5206_mbar_state *s) @@ -257,8 +262,10 @@ static void m5206_mbar_set_irq(void *opaque, int irq, int level) /* System Integration Module. */ -static void m5206_mbar_reset(m5206_mbar_state *s) +static void m5206_mbar_reset(DeviceState *dev) { + m5206_mbar_state *s = MCF5206_MBAR(dev); + s->scr = 0xc0; s->icr[1] = 0x04; s->icr[2] = 0x08; @@ -578,24 +585,43 @@ static const MemoryRegionOps m5206_mbar_ops = { .endianness = DEVICE_NATIVE_ENDIAN, }; -qemu_irq *mcf5206_init(MemoryRegion *sysmem, uint32_t base, M68kCPU *cpu) +static void mcf5206_mbar_realize(DeviceState *dev, Error **errp) { - m5206_mbar_state *s; + m5206_mbar_state *s = MCF5206_MBAR(dev); qemu_irq *pic; - s = g_new0(m5206_mbar_state, 1); - memory_region_init_io(&s->iomem, NULL, &m5206_mbar_ops, s, "mbar", 0x00001000); - memory_region_add_subregion(sysmem, base, &s->iomem); + sysbus_init_mmio(SYS_BUS_DEVICE(dev), &s->iomem); pic = qemu_allocate_irqs(m5206_mbar_set_irq, s, 14); s->timer[0] = m5206_timer_init(pic[9]); s->timer[1] = m5206_timer_init(pic[10]); s->uart[0] = mcf_uart_init(pic[12], serial_hd(0)); s->uart[1] = mcf_uart_init(pic[13], serial_hd(1)); - s->cpu = cpu; + s->cpu = M68K_CPU(qemu_get_cpu(0)); +} + +static void mcf5206_mbar_class_init(ObjectClass *oc, void *data) +{ + DeviceClass *dc = DEVICE_CLASS(oc); - m5206_mbar_reset(s); - return pic; + set_bit(DEVICE_CATEGORY_MISC, dc->categories); + dc->desc = "MCF5206 system integration module"; + dc->realize = mcf5206_mbar_realize; + dc->reset = m5206_mbar_reset; } + +static const TypeInfo mcf5206_mbar_info = { + .name = TYPE_MCF5206_MBAR, + .parent = TYPE_SYS_BUS_DEVICE, + .instance_size = sizeof(m5206_mbar_state), + .class_init = mcf5206_mbar_class_init, +}; + +static void mcf5206_mbar_register_types(void) +{ + type_register_static(&mcf5206_mbar_info); +} + +type_init(mcf5206_mbar_register_types) |