* [PATCH v2 0/9] hw/arm/pxa2xx: SysBus/QDev fixes
@ 2023-10-19 13:09 Philippe Mathieu-Daudé
2023-10-19 13:09 ` [PATCH v2 1/9] hw/sd/pxa2xx: Realize sysbus device before accessing it Philippe Mathieu-Daudé
` (8 more replies)
0 siblings, 9 replies; 16+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-10-19 13:09 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Maydell, qemu-arm, Thomas Huth, Philippe Mathieu-Daudé
Hi,
Extracted from a bigger series which enforce QDev state machine
(qdev instance must be realized before external API is used on
it).
While here, pxa2xx i2c/intc devices received some qdev fondness.
Since v2:
- Fixed i2c_init_bus() call in pxa2xx_i2c_init() (new patch)
Philippe Mathieu-Daudé (9):
hw/sd/pxa2xx: Realize sysbus device before accessing it
hw/sd/pxa2xx: Do not open-code sysbus_create_simple()
hw/pcmcia/pxa2xx: Realize sysbus device before accessing it
hw/pcmcia/pxa2xx: Do not open-code sysbus_create_simple()
hw/pcmcia/pxa2xx: Inline pxa2xx_pcmcia_init()
hw/intc/pxa2xx: Convert to Resettable interface
hw/intc/pxa2xx: Pass CPU reference using QOM link property
hw/intc/pxa2xx: Factor pxa2xx_pic_realize() out of pxa2xx_pic_init()
hw/arm/pxa2xx: Realize PXA2XX_I2C device before accessing it
include/hw/arm/pxa.h | 2 --
hw/arm/pxa2xx.c | 17 +++++++++++------
hw/arm/pxa2xx_pic.c | 38 +++++++++++++++++++++++++++++---------
hw/pcmcia/pxa2xx.c | 15 ---------------
hw/sd/pxa2xx_mmci.c | 7 +------
5 files changed, 41 insertions(+), 38 deletions(-)
--
2.41.0
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v2 1/9] hw/sd/pxa2xx: Realize sysbus device before accessing it
2023-10-19 13:09 [PATCH v2 0/9] hw/arm/pxa2xx: SysBus/QDev fixes Philippe Mathieu-Daudé
@ 2023-10-19 13:09 ` Philippe Mathieu-Daudé
2023-10-19 16:00 ` Thomas Huth
2023-10-19 13:09 ` [PATCH v2 2/9] hw/sd/pxa2xx: Do not open-code sysbus_create_simple() Philippe Mathieu-Daudé
` (7 subsequent siblings)
8 siblings, 1 reply; 16+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-10-19 13:09 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Maydell, qemu-arm, Thomas Huth, Philippe Mathieu-Daudé
sysbus_mmio_map() and sysbus_connect_irq() should not be
called on unrealized device.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/sd/pxa2xx_mmci.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/hw/sd/pxa2xx_mmci.c b/hw/sd/pxa2xx_mmci.c
index 124fbf8bbd..9f7a880bac 100644
--- a/hw/sd/pxa2xx_mmci.c
+++ b/hw/sd/pxa2xx_mmci.c
@@ -483,11 +483,11 @@ PXA2xxMMCIState *pxa2xx_mmci_init(MemoryRegion *sysmem,
dev = qdev_new(TYPE_PXA2XX_MMCI);
sbd = SYS_BUS_DEVICE(dev);
+ sysbus_realize_and_unref(sbd, &error_fatal);
sysbus_mmio_map(sbd, 0, base);
sysbus_connect_irq(sbd, 0, irq);
qdev_connect_gpio_out_named(dev, "rx-dma", 0, rx_dma);
qdev_connect_gpio_out_named(dev, "tx-dma", 0, tx_dma);
- sysbus_realize_and_unref(sbd, &error_fatal);
return PXA2XX_MMCI(dev);
}
--
2.41.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 2/9] hw/sd/pxa2xx: Do not open-code sysbus_create_simple()
2023-10-19 13:09 [PATCH v2 0/9] hw/arm/pxa2xx: SysBus/QDev fixes Philippe Mathieu-Daudé
2023-10-19 13:09 ` [PATCH v2 1/9] hw/sd/pxa2xx: Realize sysbus device before accessing it Philippe Mathieu-Daudé
@ 2023-10-19 13:09 ` Philippe Mathieu-Daudé
2023-10-19 16:04 ` Thomas Huth
2023-10-19 13:09 ` [PATCH v2 3/9] hw/pcmcia/pxa2xx: Realize sysbus device before accessing it Philippe Mathieu-Daudé
` (6 subsequent siblings)
8 siblings, 1 reply; 16+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-10-19 13:09 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Maydell, qemu-arm, Thomas Huth, Philippe Mathieu-Daudé
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/sd/pxa2xx_mmci.c | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/hw/sd/pxa2xx_mmci.c b/hw/sd/pxa2xx_mmci.c
index 9f7a880bac..4749e935d8 100644
--- a/hw/sd/pxa2xx_mmci.c
+++ b/hw/sd/pxa2xx_mmci.c
@@ -479,13 +479,8 @@ PXA2xxMMCIState *pxa2xx_mmci_init(MemoryRegion *sysmem,
qemu_irq irq, qemu_irq rx_dma, qemu_irq tx_dma)
{
DeviceState *dev;
- SysBusDevice *sbd;
- dev = qdev_new(TYPE_PXA2XX_MMCI);
- sbd = SYS_BUS_DEVICE(dev);
- sysbus_realize_and_unref(sbd, &error_fatal);
- sysbus_mmio_map(sbd, 0, base);
- sysbus_connect_irq(sbd, 0, irq);
+ dev = sysbus_create_simple(TYPE_PXA2XX_MMCI, base, irq);
qdev_connect_gpio_out_named(dev, "rx-dma", 0, rx_dma);
qdev_connect_gpio_out_named(dev, "tx-dma", 0, tx_dma);
--
2.41.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 3/9] hw/pcmcia/pxa2xx: Realize sysbus device before accessing it
2023-10-19 13:09 [PATCH v2 0/9] hw/arm/pxa2xx: SysBus/QDev fixes Philippe Mathieu-Daudé
2023-10-19 13:09 ` [PATCH v2 1/9] hw/sd/pxa2xx: Realize sysbus device before accessing it Philippe Mathieu-Daudé
2023-10-19 13:09 ` [PATCH v2 2/9] hw/sd/pxa2xx: Do not open-code sysbus_create_simple() Philippe Mathieu-Daudé
@ 2023-10-19 13:09 ` Philippe Mathieu-Daudé
2023-10-19 16:05 ` Thomas Huth
2023-10-19 13:09 ` [PATCH v2 4/9] hw/pcmcia/pxa2xx: Do not open-code sysbus_create_simple() Philippe Mathieu-Daudé
` (5 subsequent siblings)
8 siblings, 1 reply; 16+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-10-19 13:09 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Maydell, qemu-arm, Thomas Huth, Philippe Mathieu-Daudé
sysbus_mmio_map() should not be called on unrealized device.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/pcmcia/pxa2xx.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/hw/pcmcia/pxa2xx.c b/hw/pcmcia/pxa2xx.c
index fcca7e571b..e7264feb45 100644
--- a/hw/pcmcia/pxa2xx.c
+++ b/hw/pcmcia/pxa2xx.c
@@ -142,15 +142,12 @@ PXA2xxPCMCIAState *pxa2xx_pcmcia_init(MemoryRegion *sysmem,
hwaddr base)
{
DeviceState *dev;
- PXA2xxPCMCIAState *s;
dev = qdev_new(TYPE_PXA2XX_PCMCIA);
- sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, base);
- s = PXA2XX_PCMCIA(dev);
-
sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
+ sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, base);
- return s;
+ return PXA2XX_PCMCIA(dev);
}
static void pxa2xx_pcmcia_initfn(Object *obj)
--
2.41.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 4/9] hw/pcmcia/pxa2xx: Do not open-code sysbus_create_simple()
2023-10-19 13:09 [PATCH v2 0/9] hw/arm/pxa2xx: SysBus/QDev fixes Philippe Mathieu-Daudé
` (2 preceding siblings ...)
2023-10-19 13:09 ` [PATCH v2 3/9] hw/pcmcia/pxa2xx: Realize sysbus device before accessing it Philippe Mathieu-Daudé
@ 2023-10-19 13:09 ` Philippe Mathieu-Daudé
2023-10-19 16:07 ` Thomas Huth
2023-10-19 13:09 ` [PATCH v2 5/9] hw/pcmcia/pxa2xx: Inline pxa2xx_pcmcia_init() Philippe Mathieu-Daudé
` (4 subsequent siblings)
8 siblings, 1 reply; 16+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-10-19 13:09 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Maydell, qemu-arm, Thomas Huth, Philippe Mathieu-Daudé
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/pcmcia/pxa2xx.c | 8 +-------
1 file changed, 1 insertion(+), 7 deletions(-)
diff --git a/hw/pcmcia/pxa2xx.c b/hw/pcmcia/pxa2xx.c
index e7264feb45..a2ab96d749 100644
--- a/hw/pcmcia/pxa2xx.c
+++ b/hw/pcmcia/pxa2xx.c
@@ -141,13 +141,7 @@ static void pxa2xx_pcmcia_set_irq(void *opaque, int line, int level)
PXA2xxPCMCIAState *pxa2xx_pcmcia_init(MemoryRegion *sysmem,
hwaddr base)
{
- DeviceState *dev;
-
- dev = qdev_new(TYPE_PXA2XX_PCMCIA);
- sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
- sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, base);
-
- return PXA2XX_PCMCIA(dev);
+ return PXA2XX_PCMCIA(sysbus_create_simple(TYPE_PXA2XX_PCMCIA, base, NULL));
}
static void pxa2xx_pcmcia_initfn(Object *obj)
--
2.41.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 5/9] hw/pcmcia/pxa2xx: Inline pxa2xx_pcmcia_init()
2023-10-19 13:09 [PATCH v2 0/9] hw/arm/pxa2xx: SysBus/QDev fixes Philippe Mathieu-Daudé
` (3 preceding siblings ...)
2023-10-19 13:09 ` [PATCH v2 4/9] hw/pcmcia/pxa2xx: Do not open-code sysbus_create_simple() Philippe Mathieu-Daudé
@ 2023-10-19 13:09 ` Philippe Mathieu-Daudé
2023-10-19 16:09 ` Thomas Huth
2023-10-19 13:09 ` [PATCH v2 6/9] hw/intc/pxa2xx: Convert to Resettable interface Philippe Mathieu-Daudé
` (3 subsequent siblings)
8 siblings, 1 reply; 16+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-10-19 13:09 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Maydell, qemu-arm, Thomas Huth, Philippe Mathieu-Daudé
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
include/hw/arm/pxa.h | 2 --
hw/arm/pxa2xx.c | 12 ++++++++----
hw/pcmcia/pxa2xx.c | 6 ------
3 files changed, 8 insertions(+), 12 deletions(-)
diff --git a/include/hw/arm/pxa.h b/include/hw/arm/pxa.h
index 54eb895e42..4c6caee113 100644
--- a/include/hw/arm/pxa.h
+++ b/include/hw/arm/pxa.h
@@ -100,8 +100,6 @@ void pxa2xx_mmci_handlers(PXA2xxMMCIState *s, qemu_irq readonly,
#define TYPE_PXA2XX_PCMCIA "pxa2xx-pcmcia"
OBJECT_DECLARE_SIMPLE_TYPE(PXA2xxPCMCIAState, PXA2XX_PCMCIA)
-PXA2xxPCMCIAState *pxa2xx_pcmcia_init(MemoryRegion *sysmem,
- hwaddr base);
int pxa2xx_pcmcia_attach(void *opaque, PCMCIACardState *card);
int pxa2xx_pcmcia_detach(void *opaque);
void pxa2xx_pcmcia_set_irq_cb(void *opaque, qemu_irq irq, qemu_irq cd_irq);
diff --git a/hw/arm/pxa2xx.c b/hw/arm/pxa2xx.c
index 07d5dd8691..601ddd8766 100644
--- a/hw/arm/pxa2xx.c
+++ b/hw/arm/pxa2xx.c
@@ -2205,8 +2205,10 @@ PXA2xxState *pxa270_init(unsigned int sdram_size, const char *cpu_type)
sysbus_create_simple("sysbus-ohci", 0x4c000000,
qdev_get_gpio_in(s->pic, PXA2XX_PIC_USBH1));
- s->pcmcia[0] = pxa2xx_pcmcia_init(address_space, 0x20000000);
- s->pcmcia[1] = pxa2xx_pcmcia_init(address_space, 0x30000000);
+ s->pcmcia[0] = PXA2XX_PCMCIA(sysbus_create_simple(TYPE_PXA2XX_PCMCIA,
+ 0x20000000, NULL));
+ s->pcmcia[1] = PXA2XX_PCMCIA(sysbus_create_simple(TYPE_PXA2XX_PCMCIA,
+ 0x30000000, NULL));
sysbus_create_simple(TYPE_PXA2XX_RTC, 0x40900000,
qdev_get_gpio_in(s->pic, PXA2XX_PIC_RTCALARM));
@@ -2338,8 +2340,10 @@ PXA2xxState *pxa255_init(unsigned int sdram_size)
s->ssp[i] = (SSIBus *)qdev_get_child_bus(dev, "ssi");
}
- s->pcmcia[0] = pxa2xx_pcmcia_init(address_space, 0x20000000);
- s->pcmcia[1] = pxa2xx_pcmcia_init(address_space, 0x30000000);
+ s->pcmcia[0] = PXA2XX_PCMCIA(sysbus_create_simple(TYPE_PXA2XX_PCMCIA,
+ 0x20000000, NULL));
+ s->pcmcia[1] = PXA2XX_PCMCIA(sysbus_create_simple(TYPE_PXA2XX_PCMCIA,
+ 0x30000000, NULL));
sysbus_create_simple(TYPE_PXA2XX_RTC, 0x40900000,
qdev_get_gpio_in(s->pic, PXA2XX_PIC_RTCALARM));
diff --git a/hw/pcmcia/pxa2xx.c b/hw/pcmcia/pxa2xx.c
index a2ab96d749..e3111fdf1a 100644
--- a/hw/pcmcia/pxa2xx.c
+++ b/hw/pcmcia/pxa2xx.c
@@ -138,12 +138,6 @@ static void pxa2xx_pcmcia_set_irq(void *opaque, int line, int level)
qemu_set_irq(s->irq, level);
}
-PXA2xxPCMCIAState *pxa2xx_pcmcia_init(MemoryRegion *sysmem,
- hwaddr base)
-{
- return PXA2XX_PCMCIA(sysbus_create_simple(TYPE_PXA2XX_PCMCIA, base, NULL));
-}
-
static void pxa2xx_pcmcia_initfn(Object *obj)
{
SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
--
2.41.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 6/9] hw/intc/pxa2xx: Convert to Resettable interface
2023-10-19 13:09 [PATCH v2 0/9] hw/arm/pxa2xx: SysBus/QDev fixes Philippe Mathieu-Daudé
` (4 preceding siblings ...)
2023-10-19 13:09 ` [PATCH v2 5/9] hw/pcmcia/pxa2xx: Inline pxa2xx_pcmcia_init() Philippe Mathieu-Daudé
@ 2023-10-19 13:09 ` Philippe Mathieu-Daudé
2023-10-19 13:09 ` [PATCH v2 7/9] hw/intc/pxa2xx: Pass CPU reference using QOM link property Philippe Mathieu-Daudé
` (2 subsequent siblings)
8 siblings, 0 replies; 16+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-10-19 13:09 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Maydell, qemu-arm, Thomas Huth, Philippe Mathieu-Daudé
Factor reset code out of the DeviceRealize() handler.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/arm/pxa2xx_pic.c | 17 ++++++++++++-----
1 file changed, 12 insertions(+), 5 deletions(-)
diff --git a/hw/arm/pxa2xx_pic.c b/hw/arm/pxa2xx_pic.c
index 47132ab982..2eb869a605 100644
--- a/hw/arm/pxa2xx_pic.c
+++ b/hw/arm/pxa2xx_pic.c
@@ -271,12 +271,9 @@ static int pxa2xx_pic_post_load(void *opaque, int version_id)
return 0;
}
-DeviceState *pxa2xx_pic_init(hwaddr base, ARMCPU *cpu)
+static void pxa2xx_pic_reset_hold(Object *obj)
{
- DeviceState *dev = qdev_new(TYPE_PXA2XX_PIC);
- PXA2xxPICState *s = PXA2XX_PIC(dev);
-
- s->cpu = cpu;
+ PXA2xxPICState *s = PXA2XX_PIC(obj);
s->int_pending[0] = 0;
s->int_pending[1] = 0;
@@ -284,6 +281,14 @@ DeviceState *pxa2xx_pic_init(hwaddr base, ARMCPU *cpu)
s->int_enabled[1] = 0;
s->is_fiq[0] = 0;
s->is_fiq[1] = 0;
+}
+
+DeviceState *pxa2xx_pic_init(hwaddr base, ARMCPU *cpu)
+{
+ DeviceState *dev = qdev_new(TYPE_PXA2XX_PIC);
+ PXA2xxPICState *s = PXA2XX_PIC(dev);
+
+ s->cpu = cpu;
sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
@@ -319,9 +324,11 @@ static const VMStateDescription vmstate_pxa2xx_pic_regs = {
static void pxa2xx_pic_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
+ ResettableClass *rc = RESETTABLE_CLASS(klass);
dc->desc = "PXA2xx PIC";
dc->vmsd = &vmstate_pxa2xx_pic_regs;
+ rc->phases.hold = pxa2xx_pic_reset_hold;
}
static const TypeInfo pxa2xx_pic_info = {
--
2.41.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 7/9] hw/intc/pxa2xx: Pass CPU reference using QOM link property
2023-10-19 13:09 [PATCH v2 0/9] hw/arm/pxa2xx: SysBus/QDev fixes Philippe Mathieu-Daudé
` (5 preceding siblings ...)
2023-10-19 13:09 ` [PATCH v2 6/9] hw/intc/pxa2xx: Convert to Resettable interface Philippe Mathieu-Daudé
@ 2023-10-19 13:09 ` Philippe Mathieu-Daudé
2023-10-19 13:09 ` [PATCH v2 8/9] hw/intc/pxa2xx: Factor pxa2xx_pic_realize() out of pxa2xx_pic_init() Philippe Mathieu-Daudé
2023-10-19 13:09 ` [PATCH v2 9/9] hw/arm/pxa2xx: Realize PXA2XX_I2C device before accessing it Philippe Mathieu-Daudé
8 siblings, 0 replies; 16+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-10-19 13:09 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Maydell, qemu-arm, Thomas Huth, Philippe Mathieu-Daudé
QOM objects shouldn't access each other internals fields
except using the QOM API.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/arm/pxa2xx_pic.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/hw/arm/pxa2xx_pic.c b/hw/arm/pxa2xx_pic.c
index 2eb869a605..7e180635c2 100644
--- a/hw/arm/pxa2xx_pic.c
+++ b/hw/arm/pxa2xx_pic.c
@@ -15,6 +15,7 @@
#include "cpu.h"
#include "hw/arm/pxa.h"
#include "hw/sysbus.h"
+#include "hw/qdev-properties.h"
#include "migration/vmstate.h"
#include "qom/object.h"
#include "target/arm/cpregs.h"
@@ -288,7 +289,8 @@ DeviceState *pxa2xx_pic_init(hwaddr base, ARMCPU *cpu)
DeviceState *dev = qdev_new(TYPE_PXA2XX_PIC);
PXA2xxPICState *s = PXA2XX_PIC(dev);
- s->cpu = cpu;
+ object_property_set_link(OBJECT(dev), "arm-cpu",
+ OBJECT(cpu), &error_abort);
sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
@@ -321,11 +323,18 @@ static const VMStateDescription vmstate_pxa2xx_pic_regs = {
},
};
+static Property pxa2xx_pic_properties[] = {
+ DEFINE_PROP_LINK("arm-cpu", PXA2xxPICState, cpu,
+ TYPE_ARM_CPU, ARMCPU *),
+ DEFINE_PROP_END_OF_LIST(),
+};
+
static void pxa2xx_pic_class_init(ObjectClass *klass, void *data)
{
DeviceClass *dc = DEVICE_CLASS(klass);
ResettableClass *rc = RESETTABLE_CLASS(klass);
+ device_class_set_props(dc, pxa2xx_pic_properties);
dc->desc = "PXA2xx PIC";
dc->vmsd = &vmstate_pxa2xx_pic_regs;
rc->phases.hold = pxa2xx_pic_reset_hold;
--
2.41.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 8/9] hw/intc/pxa2xx: Factor pxa2xx_pic_realize() out of pxa2xx_pic_init()
2023-10-19 13:09 [PATCH v2 0/9] hw/arm/pxa2xx: SysBus/QDev fixes Philippe Mathieu-Daudé
` (6 preceding siblings ...)
2023-10-19 13:09 ` [PATCH v2 7/9] hw/intc/pxa2xx: Pass CPU reference using QOM link property Philippe Mathieu-Daudé
@ 2023-10-19 13:09 ` Philippe Mathieu-Daudé
2023-10-19 13:09 ` [PATCH v2 9/9] hw/arm/pxa2xx: Realize PXA2XX_I2C device before accessing it Philippe Mathieu-Daudé
8 siblings, 0 replies; 16+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-10-19 13:09 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Maydell, qemu-arm, Thomas Huth, Philippe Mathieu-Daudé
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/arm/pxa2xx_pic.c | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/hw/arm/pxa2xx_pic.c b/hw/arm/pxa2xx_pic.c
index 7e180635c2..1373a0d275 100644
--- a/hw/arm/pxa2xx_pic.c
+++ b/hw/arm/pxa2xx_pic.c
@@ -287,12 +287,18 @@ static void pxa2xx_pic_reset_hold(Object *obj)
DeviceState *pxa2xx_pic_init(hwaddr base, ARMCPU *cpu)
{
DeviceState *dev = qdev_new(TYPE_PXA2XX_PIC);
- PXA2xxPICState *s = PXA2XX_PIC(dev);
object_property_set_link(OBJECT(dev), "arm-cpu",
OBJECT(cpu), &error_abort);
-
sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
+ sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, base);
+
+ return dev;
+}
+
+static void pxa2xx_pic_realize(DeviceState *dev, Error **errp)
+{
+ PXA2xxPICState *s = PXA2XX_PIC(dev);
qdev_init_gpio_in(dev, pxa2xx_pic_set_irq, PXA2XX_PIC_SRCS);
@@ -300,12 +306,9 @@ DeviceState *pxa2xx_pic_init(hwaddr base, ARMCPU *cpu)
memory_region_init_io(&s->iomem, OBJECT(s), &pxa2xx_pic_ops, s,
"pxa2xx-pic", 0x00100000);
sysbus_init_mmio(SYS_BUS_DEVICE(dev), &s->iomem);
- sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, base);
/* Enable IC coprocessor access. */
- define_arm_cp_regs_with_opaque(cpu, pxa_pic_cp_reginfo, s);
-
- return dev;
+ define_arm_cp_regs_with_opaque(s->cpu, pxa_pic_cp_reginfo, s);
}
static const VMStateDescription vmstate_pxa2xx_pic_regs = {
@@ -335,6 +338,7 @@ static void pxa2xx_pic_class_init(ObjectClass *klass, void *data)
ResettableClass *rc = RESETTABLE_CLASS(klass);
device_class_set_props(dc, pxa2xx_pic_properties);
+ dc->realize = pxa2xx_pic_realize;
dc->desc = "PXA2xx PIC";
dc->vmsd = &vmstate_pxa2xx_pic_regs;
rc->phases.hold = pxa2xx_pic_reset_hold;
--
2.41.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v2 9/9] hw/arm/pxa2xx: Realize PXA2XX_I2C device before accessing it
2023-10-19 13:09 [PATCH v2 0/9] hw/arm/pxa2xx: SysBus/QDev fixes Philippe Mathieu-Daudé
` (7 preceding siblings ...)
2023-10-19 13:09 ` [PATCH v2 8/9] hw/intc/pxa2xx: Factor pxa2xx_pic_realize() out of pxa2xx_pic_init() Philippe Mathieu-Daudé
@ 2023-10-19 13:09 ` Philippe Mathieu-Daudé
8 siblings, 0 replies; 16+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-10-19 13:09 UTC (permalink / raw)
To: qemu-devel
Cc: Peter Maydell, qemu-arm, Thomas Huth, Philippe Mathieu-Daudé
qbus_new(), called in i2c_init_bus(), should not be called
on unrealized device.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/arm/pxa2xx.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/hw/arm/pxa2xx.c b/hw/arm/pxa2xx.c
index 601ddd8766..f0bf407e66 100644
--- a/hw/arm/pxa2xx.c
+++ b/hw/arm/pxa2xx.c
@@ -1513,14 +1513,15 @@ PXA2xxI2CState *pxa2xx_i2c_init(hwaddr base,
qdev_prop_set_uint32(dev, "size", region_size + 1);
qdev_prop_set_uint32(dev, "offset", base & region_size);
+ /* FIXME: Should the slave device really be on a separate bus? */
+ i2cbus = i2c_init_bus(dev, "dummy");
+
i2c_dev = SYS_BUS_DEVICE(dev);
sysbus_realize_and_unref(i2c_dev, &error_fatal);
sysbus_mmio_map(i2c_dev, 0, base & ~region_size);
sysbus_connect_irq(i2c_dev, 0, irq);
s = PXA2XX_I2C(i2c_dev);
- /* FIXME: Should the slave device really be on a separate bus? */
- i2cbus = i2c_init_bus(dev, "dummy");
s->slave = PXA2XX_I2C_SLAVE(i2c_slave_create_simple(i2cbus,
TYPE_PXA2XX_I2C_SLAVE,
0));
--
2.41.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH v2 1/9] hw/sd/pxa2xx: Realize sysbus device before accessing it
2023-10-19 13:09 ` [PATCH v2 1/9] hw/sd/pxa2xx: Realize sysbus device before accessing it Philippe Mathieu-Daudé
@ 2023-10-19 16:00 ` Thomas Huth
2023-10-19 16:01 ` Thomas Huth
0 siblings, 1 reply; 16+ messages in thread
From: Thomas Huth @ 2023-10-19 16:00 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel; +Cc: Peter Maydell, qemu-arm
On 19/10/2023 15.09, Philippe Mathieu-Daudé wrote:
> sysbus_mmio_map() and sysbus_connect_irq() should not be
> called on unrealized device.
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> hw/sd/pxa2xx_mmci.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/hw/sd/pxa2xx_mmci.c b/hw/sd/pxa2xx_mmci.c
> index 124fbf8bbd..9f7a880bac 100644
> --- a/hw/sd/pxa2xx_mmci.c
> +++ b/hw/sd/pxa2xx_mmci.c
> @@ -483,11 +483,11 @@ PXA2xxMMCIState *pxa2xx_mmci_init(MemoryRegion *sysmem,
>
> dev = qdev_new(TYPE_PXA2XX_MMCI);
> sbd = SYS_BUS_DEVICE(dev);
> + sysbus_realize_and_unref(sbd, &error_fatal);
> sysbus_mmio_map(sbd, 0, base);
> sysbus_connect_irq(sbd, 0, irq);
> qdev_connect_gpio_out_named(dev, "rx-dma", 0, rx_dma);
> qdev_connect_gpio_out_named(dev, "tx-dma", 0, tx_dma);
> - sysbus_realize_and_unref(sbd, &error_fatal);
>
> return PXA2XX_MMCI(dev);
> }
Signed-off-by: Thomas Huth <thuth@redhat.com>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 1/9] hw/sd/pxa2xx: Realize sysbus device before accessing it
2023-10-19 16:00 ` Thomas Huth
@ 2023-10-19 16:01 ` Thomas Huth
0 siblings, 0 replies; 16+ messages in thread
From: Thomas Huth @ 2023-10-19 16:01 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel; +Cc: Peter Maydell, qemu-arm
On 19/10/2023 18.00, Thomas Huth wrote:
> On 19/10/2023 15.09, Philippe Mathieu-Daudé wrote:
>> sysbus_mmio_map() and sysbus_connect_irq() should not be
>> called on unrealized device.
>>
>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>> ---
>> hw/sd/pxa2xx_mmci.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/hw/sd/pxa2xx_mmci.c b/hw/sd/pxa2xx_mmci.c
>> index 124fbf8bbd..9f7a880bac 100644
>> --- a/hw/sd/pxa2xx_mmci.c
>> +++ b/hw/sd/pxa2xx_mmci.c
>> @@ -483,11 +483,11 @@ PXA2xxMMCIState *pxa2xx_mmci_init(MemoryRegion *sysmem,
>> dev = qdev_new(TYPE_PXA2XX_MMCI);
>> sbd = SYS_BUS_DEVICE(dev);
>> + sysbus_realize_and_unref(sbd, &error_fatal);
>> sysbus_mmio_map(sbd, 0, base);
>> sysbus_connect_irq(sbd, 0, irq);
>> qdev_connect_gpio_out_named(dev, "rx-dma", 0, rx_dma);
>> qdev_connect_gpio_out_named(dev, "tx-dma", 0, tx_dma);
>> - sysbus_realize_and_unref(sbd, &error_fatal);
>> return PXA2XX_MMCI(dev);
>> }
>
> Signed-off-by: Thomas Huth <thuth@redhat.com>
Drat, copy-n-paste failure. That should be:
Reviewed-by: Thomas Huth <thuth@redhat.com>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 2/9] hw/sd/pxa2xx: Do not open-code sysbus_create_simple()
2023-10-19 13:09 ` [PATCH v2 2/9] hw/sd/pxa2xx: Do not open-code sysbus_create_simple() Philippe Mathieu-Daudé
@ 2023-10-19 16:04 ` Thomas Huth
0 siblings, 0 replies; 16+ messages in thread
From: Thomas Huth @ 2023-10-19 16:04 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel; +Cc: Peter Maydell, qemu-arm
On 19/10/2023 15.09, Philippe Mathieu-Daudé wrote:
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> hw/sd/pxa2xx_mmci.c | 7 +------
> 1 file changed, 1 insertion(+), 6 deletions(-)
>
> diff --git a/hw/sd/pxa2xx_mmci.c b/hw/sd/pxa2xx_mmci.c
> index 9f7a880bac..4749e935d8 100644
> --- a/hw/sd/pxa2xx_mmci.c
> +++ b/hw/sd/pxa2xx_mmci.c
> @@ -479,13 +479,8 @@ PXA2xxMMCIState *pxa2xx_mmci_init(MemoryRegion *sysmem,
> qemu_irq irq, qemu_irq rx_dma, qemu_irq tx_dma)
> {
> DeviceState *dev;
> - SysBusDevice *sbd;
>
> - dev = qdev_new(TYPE_PXA2XX_MMCI);
> - sbd = SYS_BUS_DEVICE(dev);
> - sysbus_realize_and_unref(sbd, &error_fatal);
> - sysbus_mmio_map(sbd, 0, base);
> - sysbus_connect_irq(sbd, 0, irq);
> + dev = sysbus_create_simple(TYPE_PXA2XX_MMCI, base, irq);
> qdev_connect_gpio_out_named(dev, "rx-dma", 0, rx_dma);
> qdev_connect_gpio_out_named(dev, "tx-dma", 0, tx_dma);
Reviewed-by: Thomas Huth <thuth@redhat.com>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 3/9] hw/pcmcia/pxa2xx: Realize sysbus device before accessing it
2023-10-19 13:09 ` [PATCH v2 3/9] hw/pcmcia/pxa2xx: Realize sysbus device before accessing it Philippe Mathieu-Daudé
@ 2023-10-19 16:05 ` Thomas Huth
0 siblings, 0 replies; 16+ messages in thread
From: Thomas Huth @ 2023-10-19 16:05 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel; +Cc: Peter Maydell, qemu-arm
On 19/10/2023 15.09, Philippe Mathieu-Daudé wrote:
> sysbus_mmio_map() should not be called on unrealized device.
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> hw/pcmcia/pxa2xx.c | 7 ++-----
> 1 file changed, 2 insertions(+), 5 deletions(-)
>
> diff --git a/hw/pcmcia/pxa2xx.c b/hw/pcmcia/pxa2xx.c
> index fcca7e571b..e7264feb45 100644
> --- a/hw/pcmcia/pxa2xx.c
> +++ b/hw/pcmcia/pxa2xx.c
> @@ -142,15 +142,12 @@ PXA2xxPCMCIAState *pxa2xx_pcmcia_init(MemoryRegion *sysmem,
> hwaddr base)
> {
> DeviceState *dev;
> - PXA2xxPCMCIAState *s;
>
> dev = qdev_new(TYPE_PXA2XX_PCMCIA);
> - sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, base);
> - s = PXA2XX_PCMCIA(dev);
> -
> sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
> + sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, base);
>
> - return s;
> + return PXA2XX_PCMCIA(dev);
> }
>
> static void pxa2xx_pcmcia_initfn(Object *obj)
Reviewed-by: Thomas Huth <thuth@redhat.com>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 4/9] hw/pcmcia/pxa2xx: Do not open-code sysbus_create_simple()
2023-10-19 13:09 ` [PATCH v2 4/9] hw/pcmcia/pxa2xx: Do not open-code sysbus_create_simple() Philippe Mathieu-Daudé
@ 2023-10-19 16:07 ` Thomas Huth
0 siblings, 0 replies; 16+ messages in thread
From: Thomas Huth @ 2023-10-19 16:07 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel; +Cc: Peter Maydell, qemu-arm
On 19/10/2023 15.09, Philippe Mathieu-Daudé wrote:
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> hw/pcmcia/pxa2xx.c | 8 +-------
> 1 file changed, 1 insertion(+), 7 deletions(-)
>
> diff --git a/hw/pcmcia/pxa2xx.c b/hw/pcmcia/pxa2xx.c
> index e7264feb45..a2ab96d749 100644
> --- a/hw/pcmcia/pxa2xx.c
> +++ b/hw/pcmcia/pxa2xx.c
> @@ -141,13 +141,7 @@ static void pxa2xx_pcmcia_set_irq(void *opaque, int line, int level)
> PXA2xxPCMCIAState *pxa2xx_pcmcia_init(MemoryRegion *sysmem,
> hwaddr base)
> {
> - DeviceState *dev;
> -
> - dev = qdev_new(TYPE_PXA2XX_PCMCIA);
> - sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
> - sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, base);
> -
> - return PXA2XX_PCMCIA(dev);
> + return PXA2XX_PCMCIA(sysbus_create_simple(TYPE_PXA2XX_PCMCIA, base, NULL));
> }
I'd maybe prefer
dev = sysbus_create_simple(TYPE_PXA2XX_PCMCIA, base, NULL);
return PXA2XX_PCMCIA(dev);
for readability, but that's just a matter of taste, so:
Reviewed-by: Thomas Huth <thuth@redhat.com>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v2 5/9] hw/pcmcia/pxa2xx: Inline pxa2xx_pcmcia_init()
2023-10-19 13:09 ` [PATCH v2 5/9] hw/pcmcia/pxa2xx: Inline pxa2xx_pcmcia_init() Philippe Mathieu-Daudé
@ 2023-10-19 16:09 ` Thomas Huth
0 siblings, 0 replies; 16+ messages in thread
From: Thomas Huth @ 2023-10-19 16:09 UTC (permalink / raw)
To: Philippe Mathieu-Daudé, qemu-devel; +Cc: Peter Maydell, qemu-arm
On 19/10/2023 15.09, Philippe Mathieu-Daudé wrote:
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> include/hw/arm/pxa.h | 2 --
> hw/arm/pxa2xx.c | 12 ++++++++----
> hw/pcmcia/pxa2xx.c | 6 ------
> 3 files changed, 8 insertions(+), 12 deletions(-)
>
> diff --git a/include/hw/arm/pxa.h b/include/hw/arm/pxa.h
> index 54eb895e42..4c6caee113 100644
> --- a/include/hw/arm/pxa.h
> +++ b/include/hw/arm/pxa.h
> @@ -100,8 +100,6 @@ void pxa2xx_mmci_handlers(PXA2xxMMCIState *s, qemu_irq readonly,
> #define TYPE_PXA2XX_PCMCIA "pxa2xx-pcmcia"
> OBJECT_DECLARE_SIMPLE_TYPE(PXA2xxPCMCIAState, PXA2XX_PCMCIA)
>
> -PXA2xxPCMCIAState *pxa2xx_pcmcia_init(MemoryRegion *sysmem,
> - hwaddr base);
> int pxa2xx_pcmcia_attach(void *opaque, PCMCIACardState *card);
> int pxa2xx_pcmcia_detach(void *opaque);
> void pxa2xx_pcmcia_set_irq_cb(void *opaque, qemu_irq irq, qemu_irq cd_irq);
> diff --git a/hw/arm/pxa2xx.c b/hw/arm/pxa2xx.c
> index 07d5dd8691..601ddd8766 100644
> --- a/hw/arm/pxa2xx.c
> +++ b/hw/arm/pxa2xx.c
> @@ -2205,8 +2205,10 @@ PXA2xxState *pxa270_init(unsigned int sdram_size, const char *cpu_type)
> sysbus_create_simple("sysbus-ohci", 0x4c000000,
> qdev_get_gpio_in(s->pic, PXA2XX_PIC_USBH1));
>
> - s->pcmcia[0] = pxa2xx_pcmcia_init(address_space, 0x20000000);
> - s->pcmcia[1] = pxa2xx_pcmcia_init(address_space, 0x30000000);
> + s->pcmcia[0] = PXA2XX_PCMCIA(sysbus_create_simple(TYPE_PXA2XX_PCMCIA,
> + 0x20000000, NULL));
> + s->pcmcia[1] = PXA2XX_PCMCIA(sysbus_create_simple(TYPE_PXA2XX_PCMCIA,
> + 0x30000000, NULL));
>
> sysbus_create_simple(TYPE_PXA2XX_RTC, 0x40900000,
> qdev_get_gpio_in(s->pic, PXA2XX_PIC_RTCALARM));
> @@ -2338,8 +2340,10 @@ PXA2xxState *pxa255_init(unsigned int sdram_size)
> s->ssp[i] = (SSIBus *)qdev_get_child_bus(dev, "ssi");
> }
>
> - s->pcmcia[0] = pxa2xx_pcmcia_init(address_space, 0x20000000);
> - s->pcmcia[1] = pxa2xx_pcmcia_init(address_space, 0x30000000);
> + s->pcmcia[0] = PXA2XX_PCMCIA(sysbus_create_simple(TYPE_PXA2XX_PCMCIA,
> + 0x20000000, NULL));
> + s->pcmcia[1] = PXA2XX_PCMCIA(sysbus_create_simple(TYPE_PXA2XX_PCMCIA,
> + 0x30000000, NULL));
>
> sysbus_create_simple(TYPE_PXA2XX_RTC, 0x40900000,
> qdev_get_gpio_in(s->pic, PXA2XX_PIC_RTCALARM));
> diff --git a/hw/pcmcia/pxa2xx.c b/hw/pcmcia/pxa2xx.c
> index a2ab96d749..e3111fdf1a 100644
> --- a/hw/pcmcia/pxa2xx.c
> +++ b/hw/pcmcia/pxa2xx.c
> @@ -138,12 +138,6 @@ static void pxa2xx_pcmcia_set_irq(void *opaque, int line, int level)
> qemu_set_irq(s->irq, level);
> }
>
> -PXA2xxPCMCIAState *pxa2xx_pcmcia_init(MemoryRegion *sysmem,
> - hwaddr base)
> -{
> - return PXA2XX_PCMCIA(sysbus_create_simple(TYPE_PXA2XX_PCMCIA, base, NULL));
> -}
Ok, it's removed here anyway, so never mind my comment for the previous
patch :-)
Reviewed-by: Thomas Huth <thuth@redhat.com>
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2023-10-19 16:10 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-10-19 13:09 [PATCH v2 0/9] hw/arm/pxa2xx: SysBus/QDev fixes Philippe Mathieu-Daudé
2023-10-19 13:09 ` [PATCH v2 1/9] hw/sd/pxa2xx: Realize sysbus device before accessing it Philippe Mathieu-Daudé
2023-10-19 16:00 ` Thomas Huth
2023-10-19 16:01 ` Thomas Huth
2023-10-19 13:09 ` [PATCH v2 2/9] hw/sd/pxa2xx: Do not open-code sysbus_create_simple() Philippe Mathieu-Daudé
2023-10-19 16:04 ` Thomas Huth
2023-10-19 13:09 ` [PATCH v2 3/9] hw/pcmcia/pxa2xx: Realize sysbus device before accessing it Philippe Mathieu-Daudé
2023-10-19 16:05 ` Thomas Huth
2023-10-19 13:09 ` [PATCH v2 4/9] hw/pcmcia/pxa2xx: Do not open-code sysbus_create_simple() Philippe Mathieu-Daudé
2023-10-19 16:07 ` Thomas Huth
2023-10-19 13:09 ` [PATCH v2 5/9] hw/pcmcia/pxa2xx: Inline pxa2xx_pcmcia_init() Philippe Mathieu-Daudé
2023-10-19 16:09 ` Thomas Huth
2023-10-19 13:09 ` [PATCH v2 6/9] hw/intc/pxa2xx: Convert to Resettable interface Philippe Mathieu-Daudé
2023-10-19 13:09 ` [PATCH v2 7/9] hw/intc/pxa2xx: Pass CPU reference using QOM link property Philippe Mathieu-Daudé
2023-10-19 13:09 ` [PATCH v2 8/9] hw/intc/pxa2xx: Factor pxa2xx_pic_realize() out of pxa2xx_pic_init() Philippe Mathieu-Daudé
2023-10-19 13:09 ` [PATCH v2 9/9] hw/arm/pxa2xx: Realize PXA2XX_I2C device before accessing it Philippe Mathieu-Daudé
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).