[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 1/6] hw/char: QOM'ify pl011 model
From: |
Markus Armbruster |
Subject: |
Re: [Qemu-devel] [PATCH 1/6] hw/char: QOM'ify pl011 model |
Date: |
Mon, 30 May 2016 13:35:09 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) |
Peter Maydell <address@hidden> writes:
> On 25 May 2016 at 11:58, xiaoqiang zhao <address@hidden> wrote:
>> * drop qemu_char_get_next_serial and use chardev prop
>> * add pl011_create wrapper function to create pl011 uart device
>> * change affected board code to use the new way
>>
>> Signed-off-by: xiaoqiang zhao <address@hidden>
>> ---
>> hw/arm/bcm2835_peripherals.c | 16 +++-----------
>> hw/arm/highbank.c | 3 ++-
>> hw/arm/integratorcp.c | 5 +++--
>> hw/arm/realview.c | 9 ++++----
>> hw/arm/stellaris.c | 6 +++--
>> hw/arm/versatilepb.c | 9 ++++----
>> hw/arm/vexpress.c | 9 ++++----
>> hw/arm/virt.c | 1 +
>> hw/char/pl011.c | 11 +++++-----
>> include/hw/char/pl011.h | 52
>> ++++++++++++++++++++++++++++++++++++++++++++
>> 10 files changed, 86 insertions(+), 35 deletions(-)
>> create mode 100644 include/hw/char/pl011.h
>>
>> diff --git a/hw/arm/bcm2835_peripherals.c b/hw/arm/bcm2835_peripherals.c
>> index 234d518..46c320f 100644
>> --- a/hw/arm/bcm2835_peripherals.c
>> +++ b/hw/arm/bcm2835_peripherals.c
>> @@ -14,6 +14,7 @@
>> #include "hw/misc/bcm2835_mbox_defs.h"
>> #include "hw/arm/raspi_platform.h"
>> #include "sysemu/char.h"
>> +#include "sysemu/sysemu.h"
>>
>> /* Peripheral base address on the VC (GPU) system bus */
>> #define BCM2835_VC_PERI_BASE 0x7e000000
>> @@ -106,7 +107,6 @@ static void bcm2835_peripherals_realize(DeviceState
>> *dev, Error **errp)
>> MemoryRegion *ram;
>> Error *err = NULL;
>> uint32_t ram_size, vcram_size;
>> - CharDriverState *chr;
>> int n;
>>
>> obj = object_property_get_link(OBJECT(dev), "ram", &err);
>> @@ -147,6 +147,7 @@ static void bcm2835_peripherals_realize(DeviceState
>> *dev, Error **errp)
>> sysbus_pass_irq(SYS_BUS_DEVICE(s), SYS_BUS_DEVICE(&s->ic));
>>
>> /* UART0 */
>> + qdev_prop_set_chr(DEVICE(&s->uart0), "chardev", serial_hds[0]);
>> object_property_set_bool(OBJECT(s->uart0), true, "realized", &err);
>> if (err) {
>> error_propagate(errp, err);
>> @@ -158,17 +159,8 @@ static void bcm2835_peripherals_realize(DeviceState
>> *dev, Error **errp)
>> sysbus_connect_irq(s->uart0, 0,
>> qdev_get_gpio_in_named(DEVICE(&s->ic), BCM2835_IC_GPU_IRQ,
>> INTERRUPT_UART));
>> -
>> /* AUX / UART1 */
>> - /* TODO: don't call qemu_char_get_next_serial() here, instead set
>> - * chardev properties for each uart at the board level, once pl011
>> - * (uart0) has been updated to avoid qemu_char_get_next_serial()
>> - */
>
> This comment says this should be fixed by having board-level
> properties; you've removed it but this patch isn't adding
> the properties to this (SoC-level) device. I think the board
> level should be looking at serial_hds[], not this code.
Device models should not fish backends out of global state. Whether
they fish directly or via some helper like qemu_char_get_next_serial()
doesn't matter. The ones that still do need to set
cannot_instantiate_with_device_add_yet with a suitable comment.
>> @@ -310,8 +312,7 @@ static void pl011_class_init(ObjectClass *oc, void *data)
>>
>> dc->realize = pl011_realize;
>> dc->vmsd = &vmstate_pl011;
>> - /* Reason: realize() method uses qemu_char_get_next_serial() */
>> - dc->cannot_instantiate_with_device_add_yet = true;
>
> Why does instantiating with device_add work now? There's
> still no way to wire up interrupt lines or map mmio regions.
> (This has never made much sense to me -- Markus?)
Uh, which part does "this" refer to?
I systematically reviewed devices for my "Clean up and fix no_user"
series (commit f976b09..7ea5e78), and wrote down my findings in
"Reason:" comments next to cannot_instantiate_with_device_add_yet
assignments. Any such assignment must have such a comment.
Testing can catch cases where we missed *all* reasons. Example: my "Fix
device introspection regressions" series (commit b37686f..33fe968). It
can't catch cases where we missed *some* reasons.
Note that cannot_instantiate_with_device_add_yet can get set by
(possibly abstract) parent devices as well. If a parent device sets it,
its children should nevertheless set it *again* if they have additional
reasons. I believe this is such a case. I'm not 100% sure, because I
haven't been 100% sure about anything related to sysbus devices ever
since Alex's commit 33cd52b "sysbus: Make devices spawnable via -device"
dropped cannot_instantiate_with_device_add_yet from
sysbus_device_class_init(), quoted below. As you see, that assignment
covered "no way to wire up interrupt lines or map mmio regions."
diff --git a/hw/core/sysbus.c b/hw/core/sysbus.c
index 19437e6..7bfe381 100644
--- a/hw/core/sysbus.c
+++ b/hw/core/sysbus.c
@@ -283,13 +283,6 @@ static void sysbus_device_class_init(ObjectClass *klass, vo
id *data)
DeviceClass *k = DEVICE_CLASS(klass);
k->init = sysbus_device_init;
k->bus_type = TYPE_SYSTEM_BUS;
- /*
- * device_add plugs devices into suitable bus. For "real" buses,
- * that actually connects the device. For sysbus, the connections
- * need to be made separately, and device_add can't do that. The
- * device would be left unconnected, and could not possibly work.
- */
- k->cannot_instantiate_with_device_add_yet = true;
}
- [Qemu-devel] [PATCH 1/6] hw/char: QOM'ify pl011 model, (continued)
- [Qemu-devel] [PATCH 1/6] hw/char: QOM'ify pl011 model, xiaoqiang zhao, 2016/05/25
- Re: [Qemu-devel] [PATCH 1/6] hw/char: QOM'ify pl011 model, xiaoqiang zhao, 2016/05/26
- Re: [Qemu-devel] [PATCH 1/6] hw/char: QOM'ify pl011 model, Peter Maydell, 2016/05/27
- Re: [Qemu-devel] [PATCH 1/6] hw/char: QOM'ify pl011 model, Paolo Bonzini, 2016/05/27
- Re: [Qemu-devel] [PATCH 1/6] hw/char: QOM'ify pl011 model, xiaoqiang zhao, 2016/05/27
- Re: [Qemu-devel] [PATCH 1/6] hw/char: QOM'ify pl011 model,
Markus Armbruster <=
[Qemu-devel] [PATCH 5/6] hw/char: QOM'ify xilinx_uartlite model, xiaoqiang zhao, 2016/05/25
[Qemu-devel] [PATCH 2/6] hw/char: QOM'ify cadence_uart model, xiaoqiang zhao, 2016/05/25
[Qemu-devel] [PATCH 6/6] char: get rid of qemu_char_get_next_serial, xiaoqiang zhao, 2016/05/25
[Qemu-devel] [PATCH 4/6] hw/char: QOM'ify stm32f2xx_usart model, xiaoqiang zhao, 2016/05/25
Re: [Qemu-devel] [PATCH 0/6] Drop the qemu_char_get_next_serial function, Paolo Bonzini, 2016/05/25