Skip to content

Commit 097ccbb

Browse files
committed
Merge tag 'qemu-sparc-20220626' of https://github.com/mcayland/qemu into staging
qemu-sparc queue # -----BEGIN PGP SIGNATURE----- # # iQFSBAABCgA8FiEEzGIauY6CIA2RXMnEW8LFb64PMh8FAmK4moUeHG1hcmsuY2F2 # ZS1heWxhbmRAaWxhbmRlLmNvLnVrAAoJEFvCxW+uDzIfaXsH/0+FT9TbHXCplB8h # gvOETq9r5UscYMqUIbRPv7eFIhhZUfq4mCzpthZHYfMA6Tag0jMqaP5ymATm6Jm/ # GgS/7Fx+14uO54Cu4NwIFylRuDt39cESrBHrVjmXmYzOXx7a040+TPxtHHwSRXiQ # Vvx5Oo0P8qQfADQe/Y9iray3JBdFMg4yejO37yrdfP58Nh2dzr9dNKw6apY8dwcv # eTVTqVbYY5AAKOjStpxb0x8dFq/WXttclbeaiSZsK1wnuqhJdUtiMY3UaAfYdMEW # kputMhTZqV/oopUY0mHmBEUK843s8bSQs2aoCSXLamGTWcrm27XNOsX0f4AYwf/y # jWBcSvg= # =0MrK # -----END PGP SIGNATURE----- # gpg: Signature made Sun 26 Jun 2022 11:12:29 PM +0530 # gpg: using RSA key CC621AB98E82200D915CC9C45BC2C56FAE0F321F # gpg: issuer "[email protected]" # gpg: Good signature from "Mark Cave-Ayland <[email protected]>" [undefined] # gpg: WARNING: This key is not certified with a trusted signature! # gpg: There is no indication that the signature belongs to the owner. # Primary key fingerprint: CC62 1AB9 8E82 200D 915C C9C4 5BC2 C56F AE0F 321F * tag 'qemu-sparc-20220626' of https://github.com/mcayland/qemu: (55 commits) artist: set memory region owners for buffers to the artist device ps2: remove update_irq() function and update_arg parameter pckbd: add QEMU interface comment for I8042 device pckbd: switch I8042 device from update_irq() function to PS2 device gpio pckbd: add i8042_reset() function to I8042 device pckbd: add QEMU interface comment for I8042_MMIO device pckbd: switch I8042_MMIO device from update_irq() function to PS2 device gpio lasips2: add QEMU interface comment lasips2: switch over from update_irq() function to PS2 device gpio lasips2: use sysbus IRQ for output IRQ lasips2: implement lasips2_realize() lasips2: add base property lasips2: move initialisation of PS2 ports from lasi_initfn() to lasi_init() lasips2: move mapping of LASIPS2 registers to HPPA machine lasips2: implement lasips2_init() function lasips2: rename lasips2_init() to lasips2_initfn() and update it to return the LASIPS2 device lasips2: move lasips2 QOM types from lasips2.c to lasips2.h lasips2: QOMify LASIPS2State pl050: add QEMU interface comment pl050: switch over from update_irq() function to PS2 device gpio ... Signed-off-by: Richard Henderson <[email protected]>
2 parents 40d5224 + 39fbaec commit 097ccbb

File tree

10 files changed

+846
-389
lines changed

10 files changed

+846
-389
lines changed

hw/display/artist.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -1358,7 +1358,7 @@ static void artist_create_buffer(ARTISTState *s, const char *name,
13581358
{
13591359
struct vram_buffer *buf = s->vram_buffer + idx;
13601360

1361-
memory_region_init_ram(&buf->mr, NULL, name, width * height,
1361+
memory_region_init_ram(&buf->mr, OBJECT(s), name, width * height,
13621362
&error_fatal);
13631363
memory_region_add_subregion_overlap(&s->mem_as_root, *offset, &buf->mr, 0);
13641364

hw/hppa/machine.c

+9-2
Original file line numberDiff line numberDiff line change
@@ -280,8 +280,15 @@ static void machine_hppa_init(MachineState *machine)
280280
}
281281

282282
/* PS/2 Keyboard/Mouse */
283-
lasips2_init(addr_space, LASI_PS2KBD_HPA,
284-
qdev_get_gpio_in(lasi_dev, LASI_IRQ_PS2KBD_HPA));
283+
dev = DEVICE(lasips2_initfn(LASI_PS2KBD_HPA,
284+
qdev_get_gpio_in(lasi_dev,
285+
LASI_IRQ_PS2KBD_HPA)));
286+
memory_region_add_subregion(addr_space, LASI_PS2KBD_HPA,
287+
sysbus_mmio_get_region(SYS_BUS_DEVICE(dev),
288+
0));
289+
memory_region_add_subregion(addr_space, LASI_PS2KBD_HPA + 0x100,
290+
sysbus_mmio_get_region(SYS_BUS_DEVICE(dev),
291+
1));
285292

286293
/* register power switch emulation */
287294
qemu_register_powerdown_notifier(&hppa_system_powerdown_notifier);

hw/input/lasips2.c

+87-36
Original file line numberDiff line numberDiff line change
@@ -24,33 +24,17 @@
2424
#include "qemu/osdep.h"
2525
#include "qemu/log.h"
2626
#include "hw/qdev-properties.h"
27+
#include "hw/sysbus.h"
2728
#include "hw/input/ps2.h"
2829
#include "hw/input/lasips2.h"
2930
#include "exec/hwaddr.h"
3031
#include "trace.h"
3132
#include "exec/address-spaces.h"
3233
#include "migration/vmstate.h"
3334
#include "hw/irq.h"
35+
#include "qapi/error.h"
3436

3537

36-
struct LASIPS2State;
37-
typedef struct LASIPS2Port {
38-
struct LASIPS2State *parent;
39-
MemoryRegion reg;
40-
void *dev;
41-
uint8_t id;
42-
uint8_t control;
43-
uint8_t buf;
44-
bool loopback_rbne;
45-
bool irq;
46-
} LASIPS2Port;
47-
48-
typedef struct LASIPS2State {
49-
LASIPS2Port kbd;
50-
LASIPS2Port mouse;
51-
qemu_irq irq;
52-
} LASIPS2State;
53-
5438
static const VMStateDescription vmstate_lasips2 = {
5539
.name = "lasips2",
5640
.version_id = 0,
@@ -205,7 +189,6 @@ static uint64_t lasips2_reg_read(void *opaque, hwaddr addr, unsigned size)
205189
break;
206190

207191
case REG_PS2_STATUS:
208-
209192
ret = LASIPS2_STATUS_DATSHD | LASIPS2_STATUS_CLKSHD;
210193

211194
if (port->control & LASIPS2_CONTROL_DIAG) {
@@ -238,9 +221,9 @@ static uint64_t lasips2_reg_read(void *opaque, hwaddr addr, unsigned size)
238221
__func__, addr);
239222
break;
240223
}
224+
241225
trace_lasips2_reg_read(size, port->id, addr,
242226
lasips2_read_reg_name(addr), ret);
243-
244227
return ret;
245228
}
246229

@@ -254,35 +237,103 @@ static const MemoryRegionOps lasips2_reg_ops = {
254237
.endianness = DEVICE_NATIVE_ENDIAN,
255238
};
256239

257-
static void ps2dev_update_irq(void *opaque, int level)
240+
static void lasips2_set_kbd_irq(void *opaque, int n, int level)
258241
{
259-
LASIPS2Port *port = opaque;
242+
LASIPS2State *s = LASIPS2(opaque);
243+
LASIPS2Port *port = &s->kbd;
244+
245+
port->irq = level;
246+
lasips2_update_irq(port->parent);
247+
}
248+
249+
static void lasips2_set_mouse_irq(void *opaque, int n, int level)
250+
{
251+
LASIPS2State *s = LASIPS2(opaque);
252+
LASIPS2Port *port = &s->mouse;
253+
260254
port->irq = level;
261255
lasips2_update_irq(port->parent);
262256
}
263257

264-
void lasips2_init(MemoryRegion *address_space,
265-
hwaddr base, qemu_irq irq)
258+
LASIPS2State *lasips2_initfn(hwaddr base, qemu_irq irq)
259+
{
260+
DeviceState *dev;
261+
262+
dev = qdev_new(TYPE_LASIPS2);
263+
qdev_prop_set_uint64(dev, "base", base);
264+
sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
265+
266+
sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, irq);
267+
268+
return LASIPS2(dev);
269+
}
270+
271+
static void lasips2_realize(DeviceState *dev, Error **errp)
266272
{
267-
LASIPS2State *s;
273+
LASIPS2State *s = LASIPS2(dev);
274+
275+
vmstate_register(NULL, s->base, &vmstate_lasips2, s);
276+
277+
s->kbd.dev = ps2_kbd_init();
278+
qdev_connect_gpio_out(DEVICE(s->kbd.dev), PS2_DEVICE_IRQ,
279+
qdev_get_gpio_in_named(dev, "ps2-kbd-input-irq",
280+
0));
281+
s->mouse.dev = ps2_mouse_init();
282+
qdev_connect_gpio_out(DEVICE(s->mouse.dev), PS2_DEVICE_IRQ,
283+
qdev_get_gpio_in_named(dev, "ps2-mouse-input-irq",
284+
0));
285+
}
268286

269-
s = g_new0(LASIPS2State, 1);
287+
static void lasips2_init(Object *obj)
288+
{
289+
LASIPS2State *s = LASIPS2(obj);
270290

271-
s->irq = irq;
291+
s->kbd.id = 0;
272292
s->mouse.id = 1;
273293
s->kbd.parent = s;
274294
s->mouse.parent = s;
275295

276-
vmstate_register(NULL, base, &vmstate_lasips2, s);
296+
memory_region_init_io(&s->kbd.reg, obj, &lasips2_reg_ops, &s->kbd,
297+
"lasips2-kbd", 0x100);
298+
memory_region_init_io(&s->mouse.reg, obj, &lasips2_reg_ops, &s->mouse,
299+
"lasips2-mouse", 0x100);
277300

278-
s->kbd.dev = ps2_kbd_init(ps2dev_update_irq, &s->kbd);
279-
s->mouse.dev = ps2_mouse_init(ps2dev_update_irq, &s->mouse);
301+
sysbus_init_mmio(SYS_BUS_DEVICE(obj), &s->kbd.reg);
302+
sysbus_init_mmio(SYS_BUS_DEVICE(obj), &s->mouse.reg);
280303

281-
memory_region_init_io(&s->kbd.reg, NULL, &lasips2_reg_ops, &s->kbd,
282-
"lasips2-kbd", 0x100);
283-
memory_region_add_subregion(address_space, base, &s->kbd.reg);
304+
sysbus_init_irq(SYS_BUS_DEVICE(obj), &s->irq);
284305

285-
memory_region_init_io(&s->mouse.reg, NULL, &lasips2_reg_ops, &s->mouse,
286-
"lasips2-mouse", 0x100);
287-
memory_region_add_subregion(address_space, base + 0x100, &s->mouse.reg);
306+
qdev_init_gpio_in_named(DEVICE(obj), lasips2_set_kbd_irq,
307+
"ps2-kbd-input-irq", 1);
308+
qdev_init_gpio_in_named(DEVICE(obj), lasips2_set_mouse_irq,
309+
"ps2-mouse-input-irq", 1);
310+
}
311+
312+
static Property lasips2_properties[] = {
313+
DEFINE_PROP_UINT64("base", LASIPS2State, base, UINT64_MAX),
314+
DEFINE_PROP_END_OF_LIST(),
315+
};
316+
317+
static void lasips2_class_init(ObjectClass *klass, void *data)
318+
{
319+
DeviceClass *dc = DEVICE_CLASS(klass);
320+
321+
dc->realize = lasips2_realize;
322+
device_class_set_props(dc, lasips2_properties);
323+
set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
288324
}
325+
326+
static const TypeInfo lasips2_info = {
327+
.name = TYPE_LASIPS2,
328+
.parent = TYPE_SYS_BUS_DEVICE,
329+
.instance_init = lasips2_init,
330+
.instance_size = sizeof(LASIPS2State),
331+
.class_init = lasips2_class_init,
332+
};
333+
334+
static void lasips2_register_types(void)
335+
{
336+
type_register_static(&lasips2_info);
337+
}
338+
339+
type_init(lasips2_register_types)

0 commit comments

Comments
 (0)