On 19/2/24 12:27, BALATON Zoltan wrote:
On Mon, 19 Feb 2024, Philippe Mathieu-Daudé wrote:
On 16/2/24 20:54, Philippe Mathieu-Daudé wrote:
On 16/2/24 18:14, BALATON Zoltan wrote:
On Fri, 16 Feb 2024, Philippe Mathieu-Daudé wrote:
We want to set another qdev property (a link) for the pl110
and pl111 devices, we can not use sysbus_create_simple() which
only passes sysbus base address and IRQs as arguments. Inline
it so we can set the link property in the next commit.
Signed-off-by: Philippe Mathieu-Daudé <philmd@xxxxxxxxxx>
---
hw/arm/realview.c | 5 ++++-
hw/arm/versatilepb.c | 6 +++++-
hw/arm/vexpress.c | 10 ++++++++--
3 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/hw/arm/realview.c b/hw/arm/realview.c
index 9058f5b414..77300e92e5 100644
--- a/hw/arm/realview.c
+++ b/hw/arm/realview.c
@@ -238,7 +238,10 @@ static void realview_init(MachineState *machine,
sysbus_create_simple("pl061", 0x10014000, pic[7]);
gpio2 = sysbus_create_simple("pl061", 0x10015000, pic[8]);
- sysbus_create_simple("pl111", 0x10020000, pic[23]);
+ dev = qdev_new("pl111");
+ sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
+ sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, 0x10020000);
+ sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, pic[23]);
Not directly related to this patch but this blows up 1 line into 4
just to allow setting a property. Maybe just to keep some simplicity
we'd rather need either a sysbus_realize_simple function that takes
a sysbus device instead of the name and does not create the device
itself or some way to pass properties to sysbus create simple (but
the latter may not be easy to do in a generic way so not sure about
that). What do you think?
Unfortunately sysbus doesn't scale in heterogeneous setup.
Regarding the HW modelling API complexity you are pointing at, we'd
like to move from the current imperative programming paradigm to a
declarative one, likely DSL driven. Meanwhile it is being investigated
(as part of "Dynamic Machine"), I'm trying to get the HW APIs right
I'm aware of that activity but we're currently still using board code to
construct machines and probably will continue to do so for a while. Also
because likely not all current machines will be converted to new
declarative way so having a convenient API for that is still useful.
(As for the language to describe the devices of a machine and their
connections declaratively the device tree does just that but dts is not
a very user friendly descrtiption language so I haven't brought that up
as a possibility. But you may still could get some clues by looking at
the problems it had to solve to at least get a requirements for the
machine description language.)
for heterogeneous emulation. Current price to pay is a verbose
imperative QDev API, hoping we'll get later a trivial declarative one
(like this single sysbus_create_simple call), where we shouldn't worry
about the order of low level calls, whether to use link or not, etc.
Having a detailed low level API does not prevent a more convenient for
current use higher level API on top so keeping that around for current
machines would allow you to chnage the low level API without having to
change all the board codes because you's only need to update the simple
high level API.
So what is your suggestion here, add a new complex helper to keep
a one-line style?
DeviceState *sysbus_create_simple_dma_link(const char *typename,
hwaddr baseaddr,
const char *linkname,
Object *linkobj,
qemu_irq irq);
I wonder why this is that important since you never modified
any of the files changed by this series:
$ git shortlog -es hw/arm/realview.c hw/arm/versatilepb.c
hw/arm/vexpress.c hw/display/pl110.c hw/arm/exynos4210.c
hw/display/exynos4210_fimd.c hw/i386/kvmvapic.c
66 Peter Maydell <peter.maydell@xxxxxxxxxx>
34 Markus Armbruster <armbru@xxxxxxxxxx>
29 Philippe Mathieu-Daudé <philmd@xxxxxxxxxx>
28 Paolo Bonzini <pbonzini@xxxxxxxxxx>
17 Andreas Färber <afaerber@xxxxxxx>
13 Eduardo Habkost <ehabkost@xxxxxxxxxx>
8 Greg Bellows <greg.bellows@xxxxxxxxxx>
7 Krzysztof Kozlowski <krzk@xxxxxxxxxx>
6 Gerd Hoffmann <kraxel@xxxxxxxxxx>
5 Richard Henderson <richard.henderson@xxxxxxxxxx>
5 Jan Kiszka <jan.kiszka@xxxxxxxxxxx>
5 Igor Mammedov <imammedo@xxxxxxxxxx>
4 Xiaoqiang Zhao <zxq_yx_007@xxxxxxx>
4 Thomas Huth <thuth@xxxxxxxxxx>
4 Anthony Liguori <anthony@xxxxxxxxxxxxx>
3 Stefan Weil <sw@xxxxxxxxxxx>
3 Pavel Dovgaluk <Pavel.Dovgaluk@xxxxxxxxx>
3 Guenter Roeck <linux@xxxxxxxxxxxx>
3 Daniel P. Berrangé <berrange@xxxxxxxxxx>
3 Alistair Francis <alistair.francis@xxxxxxxxxx>
2 Roy Franz <roy.franz@xxxxxxxxxx>
2 Pavel Dovgaluk <pavel.dovgaluk@xxxxxxxxx>
2 Marcel Apfelbaum <marcel.a@xxxxxxxxxx>
2 Linus Walleij <linus.walleij@xxxxxxxxxx>
2 Like Xu <like.xu@xxxxxxxxxxxxxxx>
2 Juan Quintela <quintela@xxxxxxxxxx>
2 Igor Mitsyanko <i.mitsyanko@xxxxxxxxxxx>
2 Hu Tao <hutao@xxxxxxxxxxxxxx>
2 David Woodhouse <dwmw@xxxxxxxxxxxx>
1 Zongyuan Li <zongyuan.li@xxxxxxxxxx>
1 Wen, Jianxian <Jianxian.Wen@xxxxxxxxxxxxxxx>
1 Vincent Palatin <vpalatin@xxxxxxxxxxxx>
1 Tao Xu <tao3.xu@xxxxxxxxx>
1 Sergey Fedorov <serge.fdrv@xxxxxxxxx>
1 Prasad J Pandit <ppandit@xxxxxxxxxx>
1 Prasad J Pandit <pjp@xxxxxxxxxxxxxxxxx>
1 Pranith Kumar <bobby.prani@xxxxxxxxx>
1 Peter Crosthwaite <peter.crosthwaite@xxxxxxxxxx>
1 Nikita Belov <zodiac@xxxxxxxxx>
1 Martin Kletzander <mkletzan@xxxxxxxxxx>
1 Mark Cave-Ayland <mark.cave-ayland@xxxxxxxxxxxx>
1 Marcelo Tosatti <mtosatti@xxxxxxxxxx>
1 Marcel Apfelbaum <marcel@xxxxxxxxxx>
1 Marc-André Lureau <marcandre.lureau@xxxxxxxxxx>
1 Laurent Vivier <lvivier@xxxxxxxxxx>
1 Laszlo Ersek <lersek@xxxxxxxxxx>
1 Kevin Wolf <kwolf@xxxxxxxxxx>
1 Jean-Christophe Dubois <jcd@xxxxxxxxxxxxxxx>
1 Igor Mitsyanko <i.mitsyanko@xxxxxxxxx>
1 Grant Likely <grant.likely@xxxxxxxxxx>
1 Gonglei (Arei) <arei.gonglei@xxxxxxxxxx>
1 Frederic Konrad <konrad.frederic@xxxxxxxx>
1 Fabian Aggeler <aggelerf@xxxxxxx>
1 Eric Auger <eric.auger@xxxxxxxxxx>
1 Emilio G. Cota <cota@xxxxxxxxx>
1 Dirk Müller <dirk@xxxxxxxx>
1 David Gibson <david@xxxxxxxxxxxxxxxxxxxxx>
1 Chen Qun <kuhn.chenqun@xxxxxxxxxx>
1 Chen Fan <chen.fan.fnst@xxxxxxxxxxxxxx>
1 Bartlomiej Zolnierkiewicz <b.zolnierkie@xxxxxxxxxxx>
1 Anthony Liguori <aliguori@xxxxxxxxxx>
1 Alexander Graf <agraf@xxxxxxxxx>
1 Alex Chen <alex.chen@xxxxxxxxxx>
1 Alex Bennée <alex.bennee@xxxxxxxxxx>