Skip to content

Commit c1322be

Browse files
mcaylandhuth
authored andcommitted
next-cube: add rtc-cmd-reset named gpio to reset the rtc state machine
This allows us to decouple the next-pc and next-rtc devices from each other in next_scr2_rtc_update(). Signed-off-by: Mark Cave-Ayland <[email protected]> Message-ID: <[email protected]> Reviewed-by: Philippe Mathieu-Daudé <[email protected]> Signed-off-by: Thomas Huth <[email protected]>
1 parent 44df953 commit c1322be

File tree

1 file changed

+19
-4
lines changed

1 file changed

+19
-4
lines changed

hw/m68k/next-cube.c

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ struct NeXTPC {
108108
NeXTRTC rtc;
109109
qemu_irq rtc_power_irq;
110110
qemu_irq rtc_data_irq;
111+
qemu_irq rtc_cmd_reset_irq;
111112
};
112113

113114
typedef struct next_dma {
@@ -264,7 +265,6 @@ static void next_rtc_data_in_irq(void *opaque, int n, int level)
264265
static void next_scr2_rtc_update(NeXTPC *s)
265266
{
266267
uint8_t old_scr2, scr2_2;
267-
NeXTRTC *rtc = &s->rtc;
268268

269269
old_scr2 = extract32(s->old_scr2, 8, 8);
270270
scr2_2 = extract32(s->scr2, 8, 8);
@@ -282,9 +282,7 @@ static void next_scr2_rtc_update(NeXTPC *s)
282282
}
283283
} else {
284284
/* else end or abort */
285-
rtc->phase = 0;
286-
rtc->command = 0;
287-
rtc->value = 0;
285+
qemu_irq_raise(s->rtc_cmd_reset_irq);
288286
}
289287
}
290288

@@ -1015,6 +1013,17 @@ static const MemoryRegionOps next_dummy_en_ops = {
10151013
.endianness = DEVICE_BIG_ENDIAN,
10161014
};
10171015

1016+
static void next_rtc_cmd_reset_irq(void *opaque, int n, int level)
1017+
{
1018+
NeXTRTC *rtc = NEXT_RTC(opaque);
1019+
1020+
if (level) {
1021+
rtc->phase = 0;
1022+
rtc->command = 0;
1023+
rtc->value = 0;
1024+
}
1025+
}
1026+
10181027
static void next_rtc_reset_hold(Object *obj, ResetType type)
10191028
{
10201029
NeXTRTC *rtc = NEXT_RTC(obj);
@@ -1033,6 +1042,8 @@ static void next_rtc_init(Object *obj)
10331042
"rtc-data-in", 1);
10341043
qdev_init_gpio_out_named(DEVICE(obj), &rtc->data_out_irq,
10351044
"rtc-data-out", 1);
1045+
qdev_init_gpio_in_named(DEVICE(obj), next_rtc_cmd_reset_irq,
1046+
"rtc-cmd-reset", 1);
10361047
}
10371048

10381049
static const VMStateDescription next_rtc_vmstate = {
@@ -1143,6 +1154,8 @@ static void next_pc_realize(DeviceState *dev, Error **errp)
11431154
qdev_connect_gpio_out_named(d, "rtc-data-out", 0,
11441155
qdev_get_gpio_in_named(dev,
11451156
"rtc-data-in", 0));
1157+
qdev_connect_gpio_out_named(dev, "rtc-cmd-reset", 0,
1158+
qdev_get_gpio_in_named(d, "rtc-cmd-reset", 0));
11461159
}
11471160

11481161
static void next_pc_init(Object *obj)
@@ -1183,6 +1196,8 @@ static void next_pc_init(Object *obj)
11831196
"rtc-data-in", 1);
11841197
qdev_init_gpio_out_named(DEVICE(obj), &s->rtc_data_irq,
11851198
"rtc-data-out", 1);
1199+
qdev_init_gpio_out_named(DEVICE(obj), &s->rtc_cmd_reset_irq,
1200+
"rtc-cmd-reset", 1);
11861201
}
11871202

11881203
/*

0 commit comments

Comments
 (0)