Skip to content

Commit 4a6a6cb

Browse files
committed
Merge tag 'm68k-pull-2023-11-02' of https://gitlab.com/huth/qemu into staging
* Avoid qemu_get_cpu() and first_cpu, and use properties instead * Mirror next-cube bios to address 0 * Instantiate ESP SCSI controller in the next-cube machine * Fix URL in the next-cube avocado test # -----BEGIN PGP SIGNATURE----- # # iQJHBAABCAAxFiEEJ7iIR+7gJQEY8+q5LtnXdP5wLbUFAmVDbcETHGh1dGhAdHV4 # ZmFtaWx5Lm9yZwAKCRAu2dd0/nAttY1UEACfU8+L6ySkA6X0gtHKyMCQTna+RgGw # TCQM3eUcL+/ZhcKrBBj397ea80h+VWrniixEpB2VSnQJsHraaIWtLTiOQFPRfVF9 # 4K5Nx/yuNq/6LX+jB5rvntKBeiU97E2XFZ7MKWQRhnjyUKeu6wAXtv4mhiLpj5wN # PwbREVb0dqI7km/RAfUPJ4cAClokTIHUiUWRcaFR646weH6SU8JIOAyaGpeOhdYY # QtWRIUThHjuGt2jfXzgOcX+kkc63BuxOn1OOVJpx5j39PhbXeIoPDQoY+EMgEztt # HS7LYNqh7K8H2nmcgX7pzMEEZlJbDp5R8nLsK7G2a3/s3eAFc1ssAUQV8ZRmncNp # gup6PDlNjoAb1qr8cu8vfdDMQzlGAIlH68YckSDHSa2H+bFF5LDWMsK1CKUz04x8 # XYub9uA2lH9j34B63Jbnk1grJsB/6gCFl3CTGgljL3kMZZncvmHSUi0TliX9v8pv # xo7CH/SlG+Xp3XG72E2O01GZ4fZqaStDySr/xCc1hySurR2Ylw7qlu5e40nh8+CT # CPjY9eWx/4mv7sNTCC/TndawKOBBfQpV3m+mWB2gNnLIuZmdnigcY+GuQaTwpTma # PteoEMNgqE+H0FAC88n5SL9+tiAoEQ/Xu6HuBDqwJJC1d/+KqvJrkFH6BxzyFrH4 # nSBXNb8y1+qpkA== # =MOWk # -----END PGP SIGNATURE----- # gpg: Signature made Thu 02 Nov 2023 17:37:05 HKT # gpg: using RSA key 27B88847EEE0250118F3EAB92ED9D774FE702DB5 # gpg: issuer "huth@tuxfamily.org" # 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 * tag 'm68k-pull-2023-11-02' of https://gitlab.com/huth/qemu: tests/avocado/machine_m68k_nextcube: Fix the download URL for the ROM image m68k: Instantiate the ESP SCSI controller for the NeXTcube machine hw/m68k/next-cube: Mirror BIOS to address 0 hw/char/mcf_uart: Have mcf_uart_create() return DeviceState hw/m68k/virt: Do not open-code sysbus_create_simple() hw/m68k/next-cube: Do not open-code sysbus_create_simple() hw/m68k/mcf_intc: Pass CPU using QOM link property hw/m68k/mcf_intc: Expose MMIO region via SysBus API hw/m68k/mcf5206: Pass CPU using QOM link property hw/m68k/irqc: Pass CPU using QOM link property Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2 parents 6c9ae1c + a35c209 commit 4a6a6cb

File tree

11 files changed

+172
-47
lines changed

11 files changed

+172
-47
lines changed

hw/char/mcf_uart.c

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -342,25 +342,26 @@ static void mcf_uart_register(void)
342342

343343
type_init(mcf_uart_register)
344344

345-
void *mcf_uart_init(qemu_irq irq, Chardev *chrdrv)
345+
DeviceState *mcf_uart_create(qemu_irq irq, Chardev *chrdrv)
346346
{
347-
DeviceState *dev;
347+
DeviceState *dev;
348348

349349
dev = qdev_new(TYPE_MCF_UART);
350350
if (chrdrv) {
351351
qdev_prop_set_chr(dev, "chardev", chrdrv);
352352
}
353353
sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
354-
355354
sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, irq);
356355

357356
return dev;
358357
}
359358

360-
void mcf_uart_mm_init(hwaddr base, qemu_irq irq, Chardev *chrdrv)
359+
DeviceState *mcf_uart_create_mmap(hwaddr base, qemu_irq irq, Chardev *chrdrv)
361360
{
362-
DeviceState *dev;
361+
DeviceState *dev;
363362

364-
dev = mcf_uart_init(irq, chrdrv);
363+
dev = mcf_uart_create(irq, chrdrv);
365364
sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, base);
365+
366+
return dev;
366367
}

hw/intc/m68k_irqc.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include "cpu.h"
1212
#include "migration/vmstate.h"
1313
#include "monitor/monitor.h"
14+
#include "hw/qdev-properties.h"
1415
#include "hw/nmi.h"
1516
#include "hw/intc/intc.h"
1617
#include "hw/intc/m68k_irqc.h"
@@ -35,7 +36,7 @@ static void m68k_irqc_print_info(InterruptStatsProvider *obj, Monitor *mon)
3536
static void m68k_set_irq(void *opaque, int irq, int level)
3637
{
3738
M68KIRQCState *s = opaque;
38-
M68kCPU *cpu = M68K_CPU(first_cpu);
39+
M68kCPU *cpu = M68K_CPU(s->cpu);
3940
int i;
4041

4142
if (level) {
@@ -85,12 +86,19 @@ static const VMStateDescription vmstate_m68k_irqc = {
8586
}
8687
};
8788

89+
static Property m68k_irqc_properties[] = {
90+
DEFINE_PROP_LINK("m68k-cpu", M68KIRQCState, cpu,
91+
TYPE_M68K_CPU, ArchCPU *),
92+
DEFINE_PROP_END_OF_LIST(),
93+
};
94+
8895
static void m68k_irqc_class_init(ObjectClass *oc, void *data)
8996
{
9097
DeviceClass *dc = DEVICE_CLASS(oc);
9198
NMIClass *nc = NMI_CLASS(oc);
9299
InterruptStatsProviderClass *ic = INTERRUPT_STATS_PROVIDER_CLASS(oc);
93100

101+
device_class_set_props(dc, m68k_irqc_properties);
94102
nc->nmi_monitor_handler = m68k_nmi;
95103
dc->reset = m68k_irqc_reset;
96104
dc->vmsd = &vmstate_m68k_irqc;

hw/m68k/an5206.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,14 @@
2020
#define AN5206_MBAR_ADDR 0x10000000
2121
#define AN5206_RAMBAR_ADDR 0x20000000
2222

23-
static void mcf5206_init(MemoryRegion *sysmem, uint32_t base)
23+
static void mcf5206_init(M68kCPU *cpu, MemoryRegion *sysmem, uint32_t base)
2424
{
2525
DeviceState *dev;
2626
SysBusDevice *s;
2727

2828
dev = qdev_new(TYPE_MCF5206_MBAR);
29+
object_property_set_link(OBJECT(dev), "m68k-cpu",
30+
OBJECT(cpu), &error_abort);
2931
s = SYS_BUS_DEVICE(dev);
3032
sysbus_realize_and_unref(s, &error_fatal);
3133

@@ -60,7 +62,7 @@ static void an5206_init(MachineState *machine)
6062
memory_region_init_ram(sram, NULL, "an5206.sram", 512, &error_fatal);
6163
memory_region_add_subregion(address_space_mem, AN5206_RAMBAR_ADDR, sram);
6264

63-
mcf5206_init(address_space_mem, AN5206_MBAR_ADDR);
65+
mcf5206_init(cpu, address_space_mem, AN5206_MBAR_ADDR);
6466

6567
/* Load kernel. */
6668
if (!kernel_filename) {

hw/m68k/mcf5206.c

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include "qemu/error-report.h"
1111
#include "qemu/log.h"
1212
#include "cpu.h"
13+
#include "hw/qdev-properties.h"
1314
#include "hw/boards.h"
1415
#include "hw/irq.h"
1516
#include "hw/m68k/mcf.h"
@@ -167,7 +168,7 @@ typedef struct {
167168
MemoryRegion iomem;
168169
qemu_irq *pic;
169170
m5206_timer_state *timer[2];
170-
void *uart[2];
171+
DeviceState *uart[2];
171172
uint8_t scr;
172173
uint8_t icr[14];
173174
uint16_t imr; /* 1 == interrupt is masked. */
@@ -599,15 +600,21 @@ static void mcf5206_mbar_realize(DeviceState *dev, Error **errp)
599600
s->pic = qemu_allocate_irqs(m5206_mbar_set_irq, s, 14);
600601
s->timer[0] = m5206_timer_init(s->pic[9]);
601602
s->timer[1] = m5206_timer_init(s->pic[10]);
602-
s->uart[0] = mcf_uart_init(s->pic[12], serial_hd(0));
603-
s->uart[1] = mcf_uart_init(s->pic[13], serial_hd(1));
604-
s->cpu = M68K_CPU(qemu_get_cpu(0));
603+
s->uart[0] = mcf_uart_create(s->pic[12], serial_hd(0));
604+
s->uart[1] = mcf_uart_create(s->pic[13], serial_hd(1));
605605
}
606606

607+
static Property mcf5206_mbar_properties[] = {
608+
DEFINE_PROP_LINK("m68k-cpu", m5206_mbar_state, cpu,
609+
TYPE_M68K_CPU, M68kCPU *),
610+
DEFINE_PROP_END_OF_LIST(),
611+
};
612+
607613
static void mcf5206_mbar_class_init(ObjectClass *oc, void *data)
608614
{
609615
DeviceClass *dc = DEVICE_CLASS(oc);
610616

617+
device_class_set_props(dc, mcf5206_mbar_properties);
611618
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
612619
dc->desc = "MCF5206 system integration module";
613620
dc->realize = mcf5206_mbar_realize;

hw/m68k/mcf5208.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -261,9 +261,9 @@ static void mcf5208evb_init(MachineState *machine)
261261
/* Internal peripherals. */
262262
pic = mcf_intc_init(address_space_mem, 0xfc048000, cpu);
263263

264-
mcf_uart_mm_init(0xfc060000, pic[26], serial_hd(0));
265-
mcf_uart_mm_init(0xfc064000, pic[27], serial_hd(1));
266-
mcf_uart_mm_init(0xfc068000, pic[28], serial_hd(2));
264+
mcf_uart_create_mmap(0xfc060000, pic[26], serial_hd(0));
265+
mcf_uart_create_mmap(0xfc064000, pic[27], serial_hd(1));
266+
mcf_uart_create_mmap(0xfc068000, pic[28], serial_hd(2));
267267

268268
mcf5208_sys_init(address_space_mem, pic);
269269

hw/m68k/mcf_intc.c

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include "hw/irq.h"
1515
#include "hw/sysbus.h"
1616
#include "hw/m68k/mcf.h"
17+
#include "hw/qdev-properties.h"
1718
#include "qom/object.h"
1819

1920
#define TYPE_MCF_INTC "mcf-intc"
@@ -173,12 +174,20 @@ static void mcf_intc_instance_init(Object *obj)
173174
mcf_intc_state *s = MCF_INTC(obj);
174175

175176
memory_region_init_io(&s->iomem, obj, &mcf_intc_ops, s, "mcf", 0x100);
177+
sysbus_init_mmio(SYS_BUS_DEVICE(obj), &s->iomem);
176178
}
177179

180+
static Property mcf_intc_properties[] = {
181+
DEFINE_PROP_LINK("m68k-cpu", mcf_intc_state, cpu,
182+
TYPE_M68K_CPU, M68kCPU *),
183+
DEFINE_PROP_END_OF_LIST(),
184+
};
185+
178186
static void mcf_intc_class_init(ObjectClass *oc, void *data)
179187
{
180188
DeviceClass *dc = DEVICE_CLASS(oc);
181189

190+
device_class_set_props(dc, mcf_intc_properties);
182191
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
183192
dc->reset = mcf_intc_reset;
184193
}
@@ -203,15 +212,13 @@ qemu_irq *mcf_intc_init(MemoryRegion *sysmem,
203212
M68kCPU *cpu)
204213
{
205214
DeviceState *dev;
206-
mcf_intc_state *s;
207215

208216
dev = qdev_new(TYPE_MCF_INTC);
217+
object_property_set_link(OBJECT(dev), "m68k-cpu",
218+
OBJECT(cpu), &error_abort);
209219
sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
220+
memory_region_add_subregion(sysmem, base,
221+
sysbus_mmio_get_region(SYS_BUS_DEVICE(dev), 0));
210222

211-
s = MCF_INTC(dev);
212-
s->cpu = cpu;
213-
214-
memory_region_add_subregion(sysmem, base, &s->iomem);
215-
216-
return qemu_allocate_irqs(mcf_intc_set_irq, s, 64);
223+
return qemu_allocate_irqs(mcf_intc_set_irq, dev, 64);
217224
}

0 commit comments

Comments
 (0)