Re: [PATCH] hw/ide/ahci: Rename ahci_internal.h to ahci-internal.h

2024-02-27 Thread Philippe Mathieu-Daudé

On 27/2/24 14:13, BALATON Zoltan wrote:

Other headers now use dash instead of underscore. Rename
ahci_internal.h accordingly for consistency.

Signed-off-by: BALATON Zoltan 
---
  hw/ide/{ahci_internal.h => ahci-internal.h} | 0
  hw/ide/ahci.c   | 2 +-
  hw/ide/ich.c| 2 +-
  3 files changed, 2 insertions(+), 2 deletions(-)
  rename hw/ide/{ahci_internal.h => ahci-internal.h} (100%)


Reviewed-by: Philippe Mathieu-Daudé 

Thanks!



Re: [PATCH] hw/ide/ahci: Rename ahci_internal.h to ahci-internal.h

2024-02-27 Thread Thomas Huth

On 27/02/2024 14.13, BALATON Zoltan wrote:

Other headers now use dash instead of underscore. Rename
ahci_internal.h accordingly for consistency.

Signed-off-by: BALATON Zoltan 
---
  hw/ide/{ahci_internal.h => ahci-internal.h} | 0
  hw/ide/ahci.c   | 2 +-
  hw/ide/ich.c| 2 +-
  3 files changed, 2 insertions(+), 2 deletions(-)
  rename hw/ide/{ahci_internal.h => ahci-internal.h} (100%)

diff --git a/hw/ide/ahci_internal.h b/hw/ide/ahci-internal.h
similarity index 100%
rename from hw/ide/ahci_internal.h
rename to hw/ide/ahci-internal.h
diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c
index b8123bc73d..bfefad2965 100644
--- a/hw/ide/ahci.c
+++ b/hw/ide/ahci.c
@@ -37,7 +37,7 @@
  #include "hw/ide/pci.h"
  #include "hw/ide/ahci-pci.h"
  #include "hw/ide/ahci-sysbus.h"
-#include "ahci_internal.h"
+#include "ahci-internal.h"
  #include "ide-internal.h"
  
  #include "trace.h"

diff --git a/hw/ide/ich.c b/hw/ide/ich.c
index 3ea793d790..9b909c87f3 100644
--- a/hw/ide/ich.c
+++ b/hw/ide/ich.c
@@ -70,7 +70,7 @@
  #include "sysemu/dma.h"
  #include "hw/ide/pci.h"
  #include "hw/ide/ahci-pci.h"
-#include "ahci_internal.h"
+#include "ahci-internal.h"
  
  #define ICH9_MSI_CAP_OFFSET 0x80

  #define ICH9_SATA_CAP_OFFSET0xA8


Reviewed-by: Thomas Huth 




Re: [PATCH] hw/ide/ahci: Rename ahci_internal.h to ahci-internal.h

2024-02-27 Thread Markus Armbruster
BALATON Zoltan  writes:

> Other headers now use dash instead of underscore. Rename
> ahci_internal.h accordingly for consistency.
>
> Signed-off-by: BALATON Zoltan 

Reviewed-by: Markus Armbruster 




[PATCH] hw/ide/ahci: Rename ahci_internal.h to ahci-internal.h

2024-02-27 Thread BALATON Zoltan
Other headers now use dash instead of underscore. Rename
ahci_internal.h accordingly for consistency.

Signed-off-by: BALATON Zoltan 
---
 hw/ide/{ahci_internal.h => ahci-internal.h} | 0
 hw/ide/ahci.c   | 2 +-
 hw/ide/ich.c| 2 +-
 3 files changed, 2 insertions(+), 2 deletions(-)
 rename hw/ide/{ahci_internal.h => ahci-internal.h} (100%)

diff --git a/hw/ide/ahci_internal.h b/hw/ide/ahci-internal.h
similarity index 100%
rename from hw/ide/ahci_internal.h
rename to hw/ide/ahci-internal.h
diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c
index b8123bc73d..bfefad2965 100644
--- a/hw/ide/ahci.c
+++ b/hw/ide/ahci.c
@@ -37,7 +37,7 @@
 #include "hw/ide/pci.h"
 #include "hw/ide/ahci-pci.h"
 #include "hw/ide/ahci-sysbus.h"
-#include "ahci_internal.h"
+#include "ahci-internal.h"
 #include "ide-internal.h"
 
 #include "trace.h"
diff --git a/hw/ide/ich.c b/hw/ide/ich.c
index 3ea793d790..9b909c87f3 100644
--- a/hw/ide/ich.c
+++ b/hw/ide/ich.c
@@ -70,7 +70,7 @@
 #include "sysemu/dma.h"
 #include "hw/ide/pci.h"
 #include "hw/ide/ahci-pci.h"
-#include "ahci_internal.h"
+#include "ahci-internal.h"
 
 #define ICH9_MSI_CAP_OFFSET 0x80
 #define ICH9_SATA_CAP_OFFSET0xA8
-- 
2.30.9




Re: [PULL 00/30] Misc HW patches for 2024-02-27

2024-02-27 Thread Peter Maydell
On Tue, 27 Feb 2024 at 12:33, Peter Maydell  wrote:
>
> On Tue, 27 Feb 2024 at 08:40, Philippe Mathieu-Daudé  
> wrote:
> >
> > The following changes since commit 03d496a992d98650315af41be7c0ca6de2a28da1:
> >
> >   Merge tag 'pull-qapi-2024-02-26' of https://repo.or.cz/qemu/armbru into 
> > staging (2024-02-26 11:22:32 +)
> >
> > are available in the Git repository at:
> >
> >   https://github.com/philmd/qemu.git tags/hw-misc-20240227
> >
> > for you to fetch changes up to 0316482e876988f7526ebe62d579ad069f485957:
> >
> >   hw/ide: Include 'ide-internal.h' from current path (2024-02-27 09:37:30 
> > +0100)
> >
> > 
> > Misc HW patch queue
> >
> > hw: Remove sysbus_address_space() (Phil)
> > hw/nubus: Add nubus-virtio-mmio device (Mark)
> > hw/usb: Remove usb_bus_find() (Paolo)
> > hw/usb: Extract sysbus-ohci from ohci (Paolo)
> > hw/nvme: Fix invalid endian conversion
> > hw/i386: More PC machine housekeeping (Bernhard, Phil)
> > hw/ide: Restrict "ide-internal.h" (Zoltan, Phil)
> > qom: Expose object_resolve_type_unambiguous() (Paolo)
> >
> > 
> >
>
> Reviewed-by: Peter Maydell 

Whoops, wrong canned response again. I meant:


Applied, thanks.

Please update the changelog at https://wiki.qemu.org/ChangeLog/9.0
for any user-visible changes.

-- PMM



Re: [PULL 00/30] Misc HW patches for 2024-02-27

2024-02-27 Thread Peter Maydell
On Tue, 27 Feb 2024 at 08:40, Philippe Mathieu-Daudé  wrote:
>
> The following changes since commit 03d496a992d98650315af41be7c0ca6de2a28da1:
>
>   Merge tag 'pull-qapi-2024-02-26' of https://repo.or.cz/qemu/armbru into 
> staging (2024-02-26 11:22:32 +)
>
> are available in the Git repository at:
>
>   https://github.com/philmd/qemu.git tags/hw-misc-20240227
>
> for you to fetch changes up to 0316482e876988f7526ebe62d579ad069f485957:
>
>   hw/ide: Include 'ide-internal.h' from current path (2024-02-27 09:37:30 
> +0100)
>
> 
> Misc HW patch queue
>
> hw: Remove sysbus_address_space() (Phil)
> hw/nubus: Add nubus-virtio-mmio device (Mark)
> hw/usb: Remove usb_bus_find() (Paolo)
> hw/usb: Extract sysbus-ohci from ohci (Paolo)
> hw/nvme: Fix invalid endian conversion
> hw/i386: More PC machine housekeeping (Bernhard, Phil)
> hw/ide: Restrict "ide-internal.h" (Zoltan, Phil)
> qom: Expose object_resolve_type_unambiguous() (Paolo)
>
> 
>

Reviewed-by: Peter Maydell 

thanks
-- PMM



[PULL 24/30] hw/i386/pc: Rename "bus" attribute to "pcibus"

2024-02-27 Thread Philippe Mathieu-Daudé
From: Bernhard Beschow 

The attribute is of type PCIBus; reflect that in the name. It will also make the
next change more intuitive.

Suggested-by: Philippe Mathieu-Daudé 
Signed-off-by: Bernhard Beschow 
Reviewed-by: Philippe Mathieu-Daudé 
Reviewed-by: Zhao Liu 
Message-ID: <20240224135851.100361-3-shen...@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé 
---
 include/hw/i386/pc.h | 2 +-
 hw/i386/acpi-build.c | 2 +-
 hw/i386/amd_iommu.c  | 2 +-
 hw/i386/intel_iommu.c| 2 +-
 hw/i386/kvm/xen_evtchn.c | 2 +-
 hw/i386/pc.c | 8 
 hw/i386/pc_piix.c| 6 +++---
 hw/i386/pc_q35.c | 2 +-
 hw/i386/x86-iommu.c  | 2 +-
 9 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index e88468131a..27834043c3 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -31,7 +31,7 @@ typedef struct PCMachineState {
 Notifier machine_done;
 
 /* Pointers to devices and objects: */
-PCIBus *bus;
+PCIBus *pcibus;
 I2CBus *smbus;
 PFlashCFI01 *flash[2];
 ISADevice *pcspk;
diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
index 896ff87519..15242b9096 100644
--- a/hw/i386/acpi-build.c
+++ b/hw/i386/acpi-build.c
@@ -1546,7 +1546,7 @@ build_dsdt(GArray *table_data, BIOSLinker *linker,
 }
 
 crs_range_set_init(&crs_range_set);
-bus = PC_MACHINE(machine)->bus;
+bus = PC_MACHINE(machine)->pcibus;
 if (bus) {
 QLIST_FOREACH(bus, &bus->child, sibling) {
 uint8_t bus_num = pci_bus_num(bus);
diff --git a/hw/i386/amd_iommu.c b/hw/i386/amd_iommu.c
index 7329553ad3..6d4fde72f9 100644
--- a/hw/i386/amd_iommu.c
+++ b/hw/i386/amd_iommu.c
@@ -1584,7 +1584,7 @@ static void amdvi_sysbus_realize(DeviceState *dev, Error 
**errp)
 MachineState *ms = MACHINE(qdev_get_machine());
 PCMachineState *pcms = PC_MACHINE(ms);
 X86MachineState *x86ms = X86_MACHINE(ms);
-PCIBus *bus = pcms->bus;
+PCIBus *bus = pcms->pcibus;
 
 s->iotlb = g_hash_table_new_full(amdvi_uint64_hash,
  amdvi_uint64_equal, g_free, g_free);
diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c
index cf933189d3..cc8e59674e 100644
--- a/hw/i386/intel_iommu.c
+++ b/hw/i386/intel_iommu.c
@@ -4183,7 +4183,7 @@ static void vtd_realize(DeviceState *dev, Error **errp)
 MachineState *ms = MACHINE(qdev_get_machine());
 PCMachineState *pcms = PC_MACHINE(ms);
 X86MachineState *x86ms = X86_MACHINE(ms);
-PCIBus *bus = pcms->bus;
+PCIBus *bus = pcms->pcibus;
 IntelIOMMUState *s = INTEL_IOMMU_DEVICE(dev);
 X86IOMMUState *x86_iommu = X86_IOMMU_DEVICE(s);
 
diff --git a/hw/i386/kvm/xen_evtchn.c b/hw/i386/kvm/xen_evtchn.c
index 0171ef6d59..a5052c0ea3 100644
--- a/hw/i386/kvm/xen_evtchn.c
+++ b/hw/i386/kvm/xen_evtchn.c
@@ -371,7 +371,7 @@ static int set_callback_pci_intx(XenEvtchnState *s, 
uint64_t param)
 return 0;
 }
 
-pdev = pci_find_device(pcms->bus, bus, devfn);
+pdev = pci_find_device(pcms->pcibus, bus, devfn);
 if (!pdev) {
 return 0;
 }
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index f8eb684a49..353edeb2ea 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -675,7 +675,7 @@ void pc_machine_done(Notifier *notifier, void *data)
 PCMachineState, machine_done);
 X86MachineState *x86ms = X86_MACHINE(pcms);
 
-cxl_hook_up_pxb_registers(pcms->bus, &pcms->cxl_devices_state,
+cxl_hook_up_pxb_registers(pcms->pcibus, &pcms->cxl_devices_state,
   &error_fatal);
 
 if (pcms->cxl_devices_state.is_enabled) {
@@ -685,7 +685,7 @@ void pc_machine_done(Notifier *notifier, void *data)
 /* set the number of CPUs */
 x86_rtc_set_cpus_count(x86ms->rtc, x86ms->boot_cpus);
 
-fw_cfg_add_extra_pci_roots(pcms->bus, x86ms->fw_cfg);
+fw_cfg_add_extra_pci_roots(pcms->pcibus, x86ms->fw_cfg);
 
 acpi_setup();
 if (x86ms->fw_cfg) {
@@ -1250,8 +1250,8 @@ void pc_basic_device_init(struct PCMachineState *pcms,
 xen_evtchn_create(IOAPIC_NUM_PINS, gsi);
 xen_gnttab_create();
 xen_xenstore_create();
-if (pcms->bus) {
-pci_create_simple(pcms->bus, -1, "xen-platform");
+if (pcms->pcibus) {
+pci_create_simple(pcms->pcibus, -1, "xen-platform");
 }
 xen_bus_init();
 xen_be_init();
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index 7724396ead..3393b93007 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -216,7 +216,7 @@ static void pc_init1(MachineState *machine,
 pci_bus_map_irqs(pci_bus,
  xen_enabled() ? xen_pci_slot_get_pirq
: pc_pci_slot_get_pirq);
-pcms->bus = pci_bus;
+pcms->pcibus = pci_bus;
 
 hole64_size = object_property_get_uint(phb,
PCI_HOST_PROP_PCI_HOLE64_SIZE,
@@ -480,8 

[PULL 28/30] hw/arm/sbsa-ref: Do not open-code ahci_ide_create_devs()

2024-02-27 Thread Philippe Mathieu-Daudé
Use ahci_ide_create_devs() instead of open-coding it.
Not accessing AHCIDevice internals anymore allows to
remove "hw/ide/ahci_internal.h" (which isn't really a
public header).

Reviewed-by: Thomas Huth 
Signed-off-by: Philippe Mathieu-Daudé 
Message-Id: <20240226080632.9596-2-phi...@linaro.org>
---
 hw/arm/sbsa-ref.c | 11 +--
 1 file changed, 1 insertion(+), 10 deletions(-)

diff --git a/hw/arm/sbsa-ref.c b/hw/arm/sbsa-ref.c
index 5d3a574664..4a59e2fd37 100644
--- a/hw/arm/sbsa-ref.c
+++ b/hw/arm/sbsa-ref.c
@@ -37,7 +37,6 @@
 #include "hw/block/flash.h"
 #include "hw/boards.h"
 #include "hw/ide/internal.h"
-#include "hw/ide/ahci_internal.h"
 #include "hw/ide/ahci-sysbus.h"
 #include "hw/intc/arm_gicv3_common.h"
 #include "hw/intc/arm_gicv3_its_common.h"
@@ -571,8 +570,6 @@ static void create_ahci(const SBSAMachineState *sms)
 DeviceState *dev;
 DriveInfo *hd[NUM_SATA_PORTS];
 SysbusAHCIState *sysahci;
-AHCIState *ahci;
-int i;
 
 dev = qdev_new("sysbus-ahci");
 qdev_prop_set_uint32(dev, "num-ports", NUM_SATA_PORTS);
@@ -581,14 +578,8 @@ static void create_ahci(const SBSAMachineState *sms)
 sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, qdev_get_gpio_in(sms->gic, 
irq));
 
 sysahci = SYSBUS_AHCI(dev);
-ahci = &sysahci->ahci;
 ide_drive_get(hd, ARRAY_SIZE(hd));
-for (i = 0; i < ahci->ports; i++) {
-if (hd[i] == NULL) {
-continue;
-}
-ide_bus_create_drive(&ahci->dev[i].port, 0, hd[i]);
-}
+ahci_ide_create_devs(&sysahci->ahci, hd);
 }
 
 static void create_xhci(const SBSAMachineState *sms)
-- 
2.41.0




[PULL 12/30] hw/sh4/r2d: do not use usb_bus_find()

2024-02-27 Thread Philippe Mathieu-Daudé
From: Paolo Bonzini 

usb_bus_find() is always used with argument -1; it can be replaced with
a search of the single USB bus on the machine.

Suggested-by: Philippe Mathieu-Daudé 
Signed-off-by: Paolo Bonzini 
Reviewed-by: Thomas Huth 
Message-ID: <20240223124406.234509-4-pbonz...@redhat.com>
[PMD: Fixed style]
Signed-off-by: Philippe Mathieu-Daudé 
---
 hw/sh4/r2d.c | 5 -
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/hw/sh4/r2d.c b/hw/sh4/r2d.c
index c73e8f49b8..e5ac6751bd 100644
--- a/hw/sh4/r2d.c
+++ b/hw/sh4/r2d.c
@@ -244,6 +244,7 @@ static void r2d_init(MachineState *machine)
 SysBusDevice *busdev;
 MemoryRegion *address_space_mem = get_system_memory();
 PCIBus *pci_bus;
+USBBus *usb_bus;
 
 cpu = SUPERH_CPU(cpu_create(machine->cpu_type));
 env = &cpu->env;
@@ -312,7 +313,9 @@ static void r2d_init(MachineState *machine)
 pci_init_nic_devices(pci_bus, mc->default_nic);
 
 /* USB keyboard */
-usb_create_simple(usb_bus_find(-1), "usb-kbd");
+usb_bus = USB_BUS(object_resolve_type_unambiguous(TYPE_USB_BUS,
+  &error_abort));
+usb_create_simple(usb_bus, "usb-kbd");
 
 /* Todo: register on board registers */
 memset(&boot_params, 0, sizeof(boot_params));
-- 
2.41.0




[PULL 18/30] hw/usb: extract sysbus-ohci to a separate file

2024-02-27 Thread Philippe Mathieu-Daudé
From: Paolo Bonzini 

Split the sysbus version to a separate file so that it is not
included in PCI-only machines, and adjust Kconfig for machines
that do need sysbus-ohci.  The copyrights are based on the
time and employer of balrog and Paul Brook's contributions.

While adjusting the SM501 dependency, move it to the right place
instead of keeping it in the R4D machine.

Signed-off-by: Paolo Bonzini 
Reviewed-by: Thomas Huth 
Reviewed-by: Philippe Mathieu-Daudé 
Message-ID: <20240223124406.234509-10-pbonz...@redhat.com>
[PMD: Rename some functions using 'ohci_sysbus_' prefix]
Signed-off-by: Philippe Mathieu-Daudé 
---
 hw/usb/hcd-ohci-sysbus.c | 88 
 hw/usb/hcd-ohci.c| 58 --
 hw/arm/Kconfig   | 12 +++---
 hw/display/Kconfig   |  1 +
 hw/ppc/Kconfig   |  2 +-
 hw/sh4/Kconfig   |  1 -
 hw/usb/Kconfig   |  4 ++
 hw/usb/meson.build   |  1 +
 8 files changed, 102 insertions(+), 65 deletions(-)
 create mode 100644 hw/usb/hcd-ohci-sysbus.c

diff --git a/hw/usb/hcd-ohci-sysbus.c b/hw/usb/hcd-ohci-sysbus.c
new file mode 100644
index 00..6fba7f50f8
--- /dev/null
+++ b/hw/usb/hcd-ohci-sysbus.c
@@ -0,0 +1,88 @@
+/*
+ * QEMU USB OHCI Emulation
+ * Copyright (c) 2006 Openedhand Ltd.
+ * Copyright (c) 2010 CodeSourcery
+ * Copyright (c) 2024 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see .
+ */
+
+#include "qemu/osdep.h"
+#include "hw/irq.h"
+#include "qapi/error.h"
+#include "qemu/module.h"
+#include "qemu/timer.h"
+#include "hw/usb.h"
+#include "migration/vmstate.h"
+#include "hw/sysbus.h"
+#include "hw/qdev-dma.h"
+#include "hw/qdev-properties.h"
+#include "trace.h"
+#include "hcd-ohci.h"
+
+
+static void ohci_sysbus_realize(DeviceState *dev, Error **errp)
+{
+OHCISysBusState *s = SYSBUS_OHCI(dev);
+SysBusDevice *sbd = SYS_BUS_DEVICE(dev);
+Error *err = NULL;
+
+usb_ohci_init(&s->ohci, dev, s->num_ports, s->dma_offset,
+  s->masterbus, s->firstport,
+  &address_space_memory, ohci_sysbus_die, &err);
+if (err) {
+error_propagate(errp, err);
+return;
+}
+sysbus_init_irq(sbd, &s->ohci.irq);
+sysbus_init_mmio(sbd, &s->ohci.mem);
+}
+
+static void ohci_sysbus_reset(DeviceState *dev)
+{
+OHCISysBusState *s = SYSBUS_OHCI(dev);
+OHCIState *ohci = &s->ohci;
+
+ohci_hard_reset(ohci);
+}
+
+static Property ohci_sysbus_properties[] = {
+DEFINE_PROP_STRING("masterbus", OHCISysBusState, masterbus),
+DEFINE_PROP_UINT32("num-ports", OHCISysBusState, num_ports, 3),
+DEFINE_PROP_UINT32("firstport", OHCISysBusState, firstport, 0),
+DEFINE_PROP_DMAADDR("dma-offset", OHCISysBusState, dma_offset, 0),
+DEFINE_PROP_END_OF_LIST(),
+};
+
+static void ohci_sysbus_class_init(ObjectClass *klass, void *data)
+{
+DeviceClass *dc = DEVICE_CLASS(klass);
+
+dc->realize = ohci_sysbus_realize;
+set_bit(DEVICE_CATEGORY_USB, dc->categories);
+dc->desc = "OHCI USB Controller";
+device_class_set_props(dc, ohci_sysbus_properties);
+dc->reset = ohci_sysbus_reset;
+}
+
+static const TypeInfo ohci_sysbus_types[] = {
+{
+.name  = TYPE_SYSBUS_OHCI,
+.parent= TYPE_SYS_BUS_DEVICE,
+.instance_size = sizeof(OHCISysBusState),
+.class_init= ohci_sysbus_class_init,
+},
+};
+
+DEFINE_TYPES(ohci_sysbus_types);
diff --git a/hw/usb/hcd-ohci.c b/hw/usb/hcd-ohci.c
index d73b53f33c..fc8fc91a1d 100644
--- a/hw/usb/hcd-ohci.c
+++ b/hw/usb/hcd-ohci.c
@@ -1955,31 +1955,6 @@ void ohci_sysbus_die(struct OHCIState *ohci)
 ohci_bus_stop(ohci);
 }
 
-static void ohci_realize_pxa(DeviceState *dev, Error **errp)
-{
-OHCISysBusState *s = SYSBUS_OHCI(dev);
-SysBusDevice *sbd = SYS_BUS_DEVICE(dev);
-Error *err = NULL;
-
-usb_ohci_init(&s->ohci, dev, s->num_ports, s->dma_offset,
-  s->masterbus, s->firstport,
-  &address_space_memory, ohci_sysbus_die, &err);
-if (err) {
-error_propagate(errp, err);
-return;
-}
-sysbus_init_irq(sbd, &s->ohci.irq);
-sysbus_init_mmio(sbd, &s->ohci.mem);
-}
-
-static void usb_ohci_reset_sysbus(DeviceState *dev)
-{
-OHCISysBusState *s = SYSBUS_OHCI(dev);
-OHCIState *ohci = &s->ohci;
-
-ohci_hard_reset(ohci);
-}
-
 static c

[PULL 17/30] hw/usb: remove usb_bus_find

2024-02-27 Thread Philippe Mathieu-Daudé
From: Paolo Bonzini 

Inline the sole remaining use, which is for the -usbdevice command line.

Signed-off-by: Paolo Bonzini 
Reviewed-by: Philippe Mathieu-Daudé 
Message-ID: <20240223124406.234509-9-pbonz...@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé 
---
 include/hw/usb.h |  1 -
 hw/usb/bus.c | 15 +--
 2 files changed, 1 insertion(+), 15 deletions(-)

diff --git a/include/hw/usb.h b/include/hw/usb.h
index cfeead2840..d46d96779a 100644
--- a/include/hw/usb.h
+++ b/include/hw/usb.h
@@ -498,7 +498,6 @@ struct USBBusOps {
 void usb_bus_new(USBBus *bus, size_t bus_size,
  USBBusOps *ops, DeviceState *host);
 void usb_bus_release(USBBus *bus);
-USBBus *usb_bus_find(int busnr);
 void usb_legacy_register(const char *typename, const char *usbdevice_name,
  USBDevice *(*usbdevice_init)(void));
 USBDevice *usbdevice_create(const char *cmdline);
diff --git a/hw/usb/bus.c b/hw/usb/bus.c
index 76fda41b7e..796769fadb 100644
--- a/hw/usb/bus.c
+++ b/hw/usb/bus.c
@@ -100,19 +100,6 @@ void usb_bus_release(USBBus *bus)
 QTAILQ_REMOVE(&busses, bus, next);
 }
 
-USBBus *usb_bus_find(int busnr)
-{
-USBBus *bus;
-
-if (-1 == busnr)
-return QTAILQ_FIRST(&busses);
-QTAILQ_FOREACH(bus, &busses, next) {
-if (bus->busnr == busnr)
-return bus;
-}
-return NULL;
-}
-
 static void usb_device_realize(USBDevice *dev, Error **errp)
 {
 USBDeviceClass *klass = USB_DEVICE_GET_CLASS(dev);
@@ -643,7 +630,7 @@ HumanReadableText *qmp_x_query_usb(Error **errp)
 /* handle legacy -usbdevice cmd line option */
 USBDevice *usbdevice_create(const char *driver)
 {
-USBBus *bus = usb_bus_find(-1 /* any */);
+USBBus *bus = QTAILQ_FIRST(&busses);
 LegacyUSBFactory *f = NULL;
 Error *err = NULL;
 GSList *i;
-- 
2.41.0




[PULL 19/30] hw/usb: remove duplicate file in system_ss

2024-02-27 Thread Philippe Mathieu-Daudé
From: Paolo Bonzini 

Because USB_EHCI_SYSBUS selects USB_EHCI, there is no need to include
hcd-ehci.c explicitly.

Signed-off-by: Paolo Bonzini 
Reviewed-by: Philippe Mathieu-Daudé 
Message-ID: <20240223124406.234509-11-pbonz...@redhat.com>
Signed-off-by: Philippe Mathieu-Daudé 
---
 hw/usb/meson.build | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/hw/usb/meson.build b/hw/usb/meson.build
index 94f0e3b034..aac3bb35f2 100644
--- a/hw/usb/meson.build
+++ b/hw/usb/meson.build
@@ -18,7 +18,7 @@ system_ss.add(when: 'CONFIG_USB_OHCI_PCI', if_true: 
files('hcd-ohci-pci.c'))
 system_ss.add(when: 'CONFIG_USB_OHCI_SYSBUS', if_true: 
files('hcd-ohci-sysbus.c'))
 system_ss.add(when: 'CONFIG_USB_EHCI', if_true: files('hcd-ehci.c'))
 system_ss.add(when: 'CONFIG_USB_EHCI_PCI', if_true: files('hcd-ehci-pci.c'))
-system_ss.add(when: 'CONFIG_USB_EHCI_SYSBUS', if_true: files('hcd-ehci.c', 
'hcd-ehci-sysbus.c'))
+system_ss.add(when: 'CONFIG_USB_EHCI_SYSBUS', if_true: 
files('hcd-ehci-sysbus.c'))
 system_ss.add(when: 'CONFIG_USB_XHCI', if_true: files('hcd-xhci.c'))
 system_ss.add(when: 'CONFIG_USB_XHCI_PCI', if_true: files('hcd-xhci-pci.c'))
 system_ss.add(when: 'CONFIG_USB_XHCI_SYSBUS', if_true: 
files('hcd-xhci-sysbus.c'))
-- 
2.41.0




[PULL 30/30] hw/ide: Include 'ide-internal.h' from current path

2024-02-27 Thread Philippe Mathieu-Daudé
Rename "internal.h" as "ide-internal.h", and include
it via its relative local path, instead of absolute
to the project root path.

Signed-off-by: Philippe Mathieu-Daudé 
Message-Id: <20240226080632.9596-4-phi...@linaro.org>
---
 hw/ide/ahci_internal.h| 2 +-
 hw/ide/{internal.h => ide-internal.h} | 0
 hw/ide/ahci.c | 2 +-
 hw/ide/atapi.c| 2 +-
 hw/ide/cmd646.c   | 2 +-
 hw/ide/core.c | 2 +-
 hw/ide/ide-bus.c  | 2 +-
 hw/ide/ide-dev.c  | 2 +-
 hw/ide/ioport.c   | 2 +-
 hw/ide/isa.c  | 2 +-
 hw/ide/macio.c| 2 +-
 hw/ide/microdrive.c   | 2 +-
 hw/ide/mmio.c | 2 +-
 hw/ide/pci.c  | 2 +-
 hw/ide/piix.c | 2 +-
 hw/ide/sii3112.c  | 2 +-
 hw/ide/via.c  | 2 +-
 17 files changed, 16 insertions(+), 16 deletions(-)
 rename hw/ide/{internal.h => ide-internal.h} (100%)

diff --git a/hw/ide/ahci_internal.h b/hw/ide/ahci_internal.h
index 4e13329bb2..7e63ea2310 100644
--- a/hw/ide/ahci_internal.h
+++ b/hw/ide/ahci_internal.h
@@ -25,8 +25,8 @@
 #define HW_IDE_AHCI_INTERNAL_H
 
 #include "hw/ide/ahci.h"
-#include "hw/ide/internal.h"
 #include "hw/pci/pci_device.h"
+#include "ide-internal.h"
 
 #define AHCI_MEM_BAR_SIZE 0x1000
 #define AHCI_MAX_PORTS32
diff --git a/hw/ide/internal.h b/hw/ide/ide-internal.h
similarity index 100%
rename from hw/ide/internal.h
rename to hw/ide/ide-internal.h
diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c
index 54c9685495..b8123bc73d 100644
--- a/hw/ide/ahci.c
+++ b/hw/ide/ahci.c
@@ -34,11 +34,11 @@
 #include "qemu/module.h"
 #include "sysemu/block-backend.h"
 #include "sysemu/dma.h"
-#include "hw/ide/internal.h"
 #include "hw/ide/pci.h"
 #include "hw/ide/ahci-pci.h"
 #include "hw/ide/ahci-sysbus.h"
 #include "ahci_internal.h"
+#include "ide-internal.h"
 
 #include "trace.h"
 
diff --git a/hw/ide/atapi.c b/hw/ide/atapi.c
index dcc39df9a4..73ec373184 100644
--- a/hw/ide/atapi.c
+++ b/hw/ide/atapi.c
@@ -24,10 +24,10 @@
  */
 
 #include "qemu/osdep.h"
-#include "hw/ide/internal.h"
 #include "hw/scsi/scsi.h"
 #include "sysemu/block-backend.h"
 #include "scsi/constants.h"
+#include "ide-internal.h"
 #include "trace.h"
 
 #define ATAPI_SECTOR_BITS (2 + BDRV_SECTOR_BITS)
diff --git a/hw/ide/cmd646.c b/hw/ide/cmd646.c
index 23d213ff01..8cebd1b63d 100644
--- a/hw/ide/cmd646.c
+++ b/hw/ide/cmd646.c
@@ -33,7 +33,7 @@
 #include "sysemu/reset.h"
 
 #include "hw/ide/pci.h"
-#include "hw/ide/internal.h"
+#include "ide-internal.h"
 #include "trace.h"
 
 /* CMD646 specific */
diff --git a/hw/ide/core.c b/hw/ide/core.c
index 9c4a812902..130c4d8865 100644
--- a/hw/ide/core.c
+++ b/hw/ide/core.c
@@ -41,7 +41,7 @@
 #include "qemu/cutils.h"
 #include "sysemu/replay.h"
 #include "sysemu/runstate.h"
-#include "hw/ide/internal.h"
+#include "ide-internal.h"
 #include "trace.h"
 
 /* These values were based on a Seagate ST3500418AS but have been modified
diff --git a/hw/ide/ide-bus.c b/hw/ide/ide-bus.c
index 57fe67b29c..37d003dd9a 100644
--- a/hw/ide/ide-bus.c
+++ b/hw/ide/ide-bus.c
@@ -21,10 +21,10 @@
 #include "qapi/error.h"
 #include "qemu/error-report.h"
 #include "qemu/module.h"
-#include "hw/ide/internal.h"
 #include "sysemu/block-backend.h"
 #include "sysemu/blockdev.h"
 #include "sysemu/runstate.h"
+#include "ide-internal.h"
 
 static char *idebus_get_fw_dev_path(DeviceState *dev);
 static void idebus_unrealize(BusState *qdev);
diff --git a/hw/ide/ide-dev.c b/hw/ide/ide-dev.c
index c8e2033469..799bd4b6ec 100644
--- a/hw/ide/ide-dev.c
+++ b/hw/ide/ide-dev.c
@@ -23,11 +23,11 @@
 #include "qemu/error-report.h"
 #include "qemu/module.h"
 #include "hw/ide/ide-dev.h"
-#include "hw/ide/internal.h"
 #include "sysemu/block-backend.h"
 #include "sysemu/blockdev.h"
 #include "sysemu/sysemu.h"
 #include "qapi/visitor.h"
+#include "ide-internal.h"
 
 static Property ide_props[] = {
 DEFINE_PROP_UINT32("unit", IDEDevice, unit, -1),
diff --git a/hw/ide/ioport.c b/hw/ide/ioport.c
index 0b283ac783..a2f457f0bd 100644
--- a/hw/ide/ioport.c
+++ b/hw/ide/ioport.c
@@ -25,7 +25,7 @@
 
 #include "qemu/osdep.h"
 #include "hw/isa/isa.h"
-#include "hw/ide/internal.h"
+#include "ide-internal.h"
 #include "trace.h"
 
 int ide_init_ioport(IDEBus *bus, ISADevice *dev, int iobase, int iobase2)
diff --git a/hw/ide/isa.c b/hw/ide/isa.c
index cc865c83dc..934c45887c 100644
--- a/hw/ide/isa.c
+++ b/hw/ide/isa.c
@@ -32,8 +32,8 @@
 #include "sysemu/dma.h"
 
 #include "hw/ide/isa.h"
-#include "hw/ide/internal.h"
 #include "qom/object.h"
+#include "ide-internal.h"
 
 /***/
 /* ISA IDE definitions */
diff --git a/hw/ide/macio.c b/hw/ide/macio.c
index 0d2c6ba910..aca90d04f0 100644
--- a/hw/ide/macio.c
+++ b/hw/ide/macio.c
@@ -33,7 +33,7 @@
 

[PULL 13/30] hw/mips/loongson3_virt: do not require CONFIG_USB

2024-02-27 Thread Philippe Mathieu-Daudé
From: Paolo Bonzini 

Once the Kconfig for hw/mips is cleaned up, it will be possible to build a
binary that does not include any USB host controller and therefore that
does not include the code guarded by CONFIG_USB.  While the simpler
creation functions such as usb_create_simple can be inlined, this is not
true of usb_bus_find().  Remove it, replacing it with a search of the
single USB bus created by loongson3_virt_devices_init().

Signed-off-by: Paolo Bonzini 
Message-ID: <20240223124406.234509-5-pbonz...@redhat.com>
[PMD: Fixed style]
Signed-off-by: Philippe Mathieu-Daudé 
---
 hw/mips/loongson3_virt.c | 8 ++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/hw/mips/loongson3_virt.c b/hw/mips/loongson3_virt.c
index caedde2df0..b10a611a98 100644
--- a/hw/mips/loongson3_virt.c
+++ b/hw/mips/loongson3_virt.c
@@ -446,9 +446,13 @@ static inline void 
loongson3_virt_devices_init(MachineState *machine,
 pci_vga_init(pci_bus);
 
 if (defaults_enabled() && object_class_by_name("pci-ohci")) {
+USBBus *usb_bus;
+
 pci_create_simple(pci_bus, -1, "pci-ohci");
-usb_create_simple(usb_bus_find(-1), "usb-kbd");
-usb_create_simple(usb_bus_find(-1), "usb-tablet");
+usb_bus = USB_BUS(object_resolve_type_unambiguous(TYPE_USB_BUS,
+  &error_abort));
+usb_create_simple(usb_bus, "usb-kbd");
+usb_create_simple(usb_bus, "usb-tablet");
 }
 
 pci_init_nic_devices(pci_bus, mc->default_nic);
-- 
2.41.0




[PULL 16/30] hw/ppc/pseries: do not require CONFIG_USB

2024-02-27 Thread Philippe Mathieu-Daudé
From: Paolo Bonzini 

With --without-default-devices it is possible to build a binary that
does not include any USB host controller and therefore that does not
include the code guarded by CONFIG_USB.  While the simpler creation
functions such as usb_create_simple can be inlined, this is not true
of usb_bus_find().  Remove it, replacing it with a search of the single
USB bus on the machine.

Suggested-by: Philippe Mathieu-Daudé 
Signed-off-by: Paolo Bonzini 
Reviewed-by: Philippe Mathieu-Daudé 
Message-ID: <20240223124406.234509-8-pbonz...@redhat.com>
[PMD: Fixed style]
Signed-off-by: Philippe Mathieu-Daudé 
---
 hw/ppc/spapr.c | 4 +++-
 hw/ppc/Kconfig | 1 +
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index d1c6d70d8d..55263f0815 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -3024,8 +3024,10 @@ static void spapr_machine_init(MachineState *machine)
 }
 
 if (has_vga) {
-USBBus *usb_bus = usb_bus_find(-1);
+USBBus *usb_bus;
 
+usb_bus = USB_BUS(object_resolve_type_unambiguous(TYPE_USB_BUS,
+  &error_abort));
 usb_create_simple(usb_bus, "usb-kbd");
 usb_create_simple(usb_bus, "usb-mouse");
 }
diff --git a/hw/ppc/Kconfig b/hw/ppc/Kconfig
index c5aeb6b3f2..b664d0eb37 100644
--- a/hw/ppc/Kconfig
+++ b/hw/ppc/Kconfig
@@ -1,5 +1,6 @@
 config PSERIES
 bool
+imply USB_OHCI_PCI
 imply PCI_DEVICES
 imply TEST_DEVICES
 imply VIRTIO_VGA
-- 
2.41.0




[PULL 14/30] hw/hppa: do not require CONFIG_USB

2024-02-27 Thread Philippe Mathieu-Daudé
From: Paolo Bonzini 

With --without-default-devices it is possible to build a binary that
does not include any USB host controller and therefore that does not
include the code guarded by CONFIG_USB.  While the simpler creation
functions such as usb_create_simple can be inlined, this is not true
of usb_bus_find().  Remove it, replacing it with a search of the single
USB bus on the machine.

Suggested-by: Philippe Mathieu-Daudé 
Signed-off-by: Paolo Bonzini 
Reviewed-by: Philippe Mathieu-Daudé 
Message-ID: <20240223124406.234509-6-pbonz...@redhat.com>
[PMD: Fixed style]
Signed-off-by: Philippe Mathieu-Daudé 
---
 hw/hppa/machine.c | 10 +++---
 hw/hppa/Kconfig   |  2 +-
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/hw/hppa/machine.c b/hw/hppa/machine.c
index 5fcaf5884b..37ee6387e0 100644
--- a/hw/hppa/machine.c
+++ b/hw/hppa/machine.c
@@ -396,10 +396,14 @@ static void machine_HP_common_init_tail(MachineState 
*machine, PCIBus *pci_bus,
 }
 
 /* create USB OHCI controller for USB keyboard & mouse on Astro machines */
-if (!lasi_dev && machine->enable_graphics) {
+if (!lasi_dev && machine->enable_graphics && defaults_enabled()) {
+USBBus *usb_bus;
+
 pci_create_simple(pci_bus, -1, "pci-ohci");
-usb_create_simple(usb_bus_find(-1), "usb-kbd");
-usb_create_simple(usb_bus_find(-1), "usb-mouse");
+usb_bus = USB_BUS(object_resolve_type_unambiguous(TYPE_USB_BUS,
+  &error_abort));
+usb_create_simple(usb_bus, "usb-kbd");
+usb_create_simple(usb_bus, "usb-mouse");
 }
 
 /* register power switch emulation */
diff --git a/hw/hppa/Kconfig b/hw/hppa/Kconfig
index dff5df7f72..ee7ffd2bfb 100644
--- a/hw/hppa/Kconfig
+++ b/hw/hppa/Kconfig
@@ -2,6 +2,7 @@ config HPPA_B160L
 bool
 imply PCI_DEVICES
 imply E1000_PCI
+imply USB_OHCI_PCI
 imply VIRTIO_VGA
 select ASTRO
 select DINO
@@ -17,4 +18,3 @@ config HPPA_B160L
 select LASIPS2
 select PARALLEL
 select ARTIST
-select USB_OHCI_PCI
-- 
2.41.0




[PULL 20/30] hw/nvme: fix invalid endian conversion

2024-02-27 Thread Philippe Mathieu-Daudé
From: Klaus Jensen 

numcntl is one byte and so is max_vfs. Using cpu_to_le16 on big endian
hosts results in numcntl being set to 0.

Fix by dropping the endian conversion.

Fixes: 99f48ae7ae ("hw/nvme: Add support for Secondary Controller List")
Reported-by: Kevin Wolf 
Signed-off-by: Klaus Jensen 
Reviewed-by: Minwoo Im 
Message-ID: <20240222-fix-sriov-numcntl-v1-1-d60bea5e7...@samsung.com>
Signed-off-by: Philippe Mathieu-Daudé 
---
 hw/nvme/ctrl.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c
index f026245d1e..76fe039704 100644
--- a/hw/nvme/ctrl.c
+++ b/hw/nvme/ctrl.c
@@ -7924,7 +7924,7 @@ static void nvme_init_state(NvmeCtrl *n)
 n->aer_reqs = g_new0(NvmeRequest *, n->params.aerl + 1);
 QTAILQ_INIT(&n->aer_queue);
 
-list->numcntl = cpu_to_le16(max_vfs);
+list->numcntl = max_vfs;
 for (i = 0; i < max_vfs; i++) {
 sctrl = &list->sec[i];
 sctrl->pcid = cpu_to_le16(n->cntlid);
-- 
2.41.0




[PULL 25/30] hw/i386/pc_{piix, q35}: Eliminate local pci_bus/pci_host variables

2024-02-27 Thread Philippe Mathieu-Daudé
From: Bernhard Beschow 

There is no advantage in having these local variables which 1/ needlessly have
different identifiers in both machines and 2/ which are redundant to pcms->bus
which is almost as short.

Signed-off-by: Bernhard Beschow 
Reviewed-by: Michael S. Tsirkin 
Reviewed-by: Zhao Liu 
Message-ID: <20240224135851.100361-4-shen...@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé 
---
 hw/i386/pc_piix.c | 14 ++
 hw/i386/pc_q35.c  | 16 +++-
 2 files changed, 13 insertions(+), 17 deletions(-)

diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index 3393b93007..814d24326d 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -108,7 +108,6 @@ static void pc_init1(MachineState *machine,
 MemoryRegion *system_memory = get_system_memory();
 MemoryRegion *system_io = get_system_io();
 Object *phb = NULL;
-PCIBus *pci_bus = NULL;
 ISABus *isa_bus;
 Object *piix4_pm = NULL;
 qemu_irq smi_irq;
@@ -212,11 +211,10 @@ static void pc_init1(MachineState *machine,
 &error_fatal);
 sysbus_realize_and_unref(SYS_BUS_DEVICE(phb), &error_fatal);
 
-pci_bus = PCI_BUS(qdev_get_child_bus(DEVICE(phb), "pci.0"));
-pci_bus_map_irqs(pci_bus,
+pcms->pcibus = PCI_BUS(qdev_get_child_bus(DEVICE(phb), "pci.0"));
+pci_bus_map_irqs(pcms->pcibus,
  xen_enabled() ? xen_pci_slot_get_pirq
: pc_pci_slot_get_pirq);
-pcms->pcibus = pci_bus;
 
 hole64_size = object_property_get_uint(phb,
PCI_HOST_PROP_PCI_HOLE64_SIZE,
@@ -261,7 +259,7 @@ static void pc_init1(MachineState *machine,
 for (i = 0; i < ISA_NUM_IRQS; i++) {
 qdev_connect_gpio_out_named(dev, "isa-irqs", i, x86ms->gsi[i]);
 }
-pci_realize_and_unref(pci_dev, pci_bus, &error_fatal);
+pci_realize_and_unref(pci_dev, pcms->pcibus, &error_fatal);
 
 if (xen_enabled()) {
 pci_device_set_intx_routing_notifier(
@@ -273,7 +271,7 @@ static void pc_init1(MachineState *machine,
  * connected to the IOAPIC directly.
  * These additional routes can be discovered through ACPI.
  */
-pci_bus_irqs(pci_bus, xen_intx_set_irq, pci_dev,
+pci_bus_irqs(pcms->pcibus, xen_intx_set_irq, pci_dev,
  XEN_IOAPIC_NUM_PIRQS);
 }
 
@@ -310,7 +308,7 @@ static void pc_init1(MachineState *machine,
 x86_register_ferr_irq(x86ms->gsi[13]);
 }
 
-pc_vga_init(isa_bus, pcmc->pci_enabled ? pci_bus : NULL);
+pc_vga_init(isa_bus, pcmc->pci_enabled ? pcms->pcibus : NULL);
 
 assert(pcms->vmport != ON_OFF_AUTO__MAX);
 if (pcms->vmport == ON_OFF_AUTO_AUTO) {
@@ -321,7 +319,7 @@ static void pc_init1(MachineState *machine,
 pc_basic_device_init(pcms, isa_bus, x86ms->gsi, rtc_state, true,
  0x4);
 
-pc_nic_init(pcmc, isa_bus, pci_bus);
+pc_nic_init(pcmc, isa_bus, pcms->pcibus);
 
 #ifdef CONFIG_IDE_ISA
 if (!pcmc->pci_enabled) {
diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
index 549c0bc041..9e4b8f79c2 100644
--- a/hw/i386/pc_q35.c
+++ b/hw/i386/pc_q35.c
@@ -123,7 +123,6 @@ static void pc_q35_init(MachineState *machine)
 PCMachineClass *pcmc = PC_MACHINE_GET_CLASS(pcms);
 X86MachineState *x86ms = X86_MACHINE(machine);
 Object *phb;
-PCIBus *host_bus;
 PCIDevice *lpc;
 DeviceState *lpc_dev;
 ISADevice *rtc_state;
@@ -217,8 +216,7 @@ static void pc_q35_init(MachineState *machine)
 sysbus_realize_and_unref(SYS_BUS_DEVICE(phb), &error_fatal);
 
 /* pci */
-host_bus = PCI_BUS(qdev_get_child_bus(DEVICE(phb), "pcie.0"));
-pcms->pcibus = host_bus;
+pcms->pcibus = PCI_BUS(qdev_get_child_bus(DEVICE(phb), "pcie.0"));
 
 /* irq lines */
 gsi_state = pc_gsi_create(&x86ms->gsi, true);
@@ -232,7 +230,7 @@ static void pc_q35_init(MachineState *machine)
 for (i = 0; i < IOAPIC_NUM_PINS; i++) {
 qdev_connect_gpio_out_named(lpc_dev, ICH9_GPIO_GSI, i, x86ms->gsi[i]);
 }
-pci_realize_and_unref(lpc, host_bus, &error_fatal);
+pci_realize_and_unref(lpc, pcms->pcibus, &error_fatal);
 
 rtc_state = ISA_DEVICE(object_resolve_path_component(OBJECT(lpc), "rtc"));
 
@@ -284,7 +282,7 @@ static void pc_q35_init(MachineState *machine)
 AHCIPCIState *ich9;
 
 /* ahci and SATA device, for q35 1 ahci controller is built-in */
-pdev = pci_create_simple_multifunction(host_bus,
+pdev = pci_create_simple_multifunction(pcms->pcibus,
PCI_DEVFN(ICH9_SATA1_DEV,
  ICH9_SATA1_FUNC),
"ich9-ahci");
@@ -298,14 +296,14 @@ static void pc_q35_init(MachineState *machine)
 
 if (machine_usb(machine)) {
 /* Should we create 6 UHCI accor

[PULL 26/30] hw/i386/pc: Remove unneeded class attribute "kvmclock_enabled"

2024-02-27 Thread Philippe Mathieu-Daudé
From: Bernhard Beschow 

PCMachineClass introduces the attribute into the class hierarchy and sets it to
true. There is no sub class overriding the attribute. Commit 30d2a17b46e9
"hw/i386: Remove the deprecated machines 0.12 up to 0.15" removed the last
overrides of this attribute. The attribute is now unneeded and can be removed.

Fixes: 30d2a17b46e9 "hw/i386: Remove the deprecated machines 0.12 up to 0.15"
Cc: Thomas Huth 
Signed-off-by: Bernhard Beschow 
Reviewed-by: Philippe Mathieu-Daudé 
Reviewed-by: Thomas Huth 
Reviewed-by: Zhao Liu 
Message-ID: <20240224135851.100361-5-shen...@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé 
---
 include/hw/i386/pc.h | 1 -
 hw/i386/pc.c | 1 -
 hw/i386/pc_piix.c| 2 +-
 3 files changed, 1 insertion(+), 3 deletions(-)

diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index 27834043c3..4bb1899602 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -92,7 +92,6 @@ struct PCMachineClass {
 
 /* Device configuration: */
 bool pci_enabled;
-bool kvmclock_enabled;
 const char *default_south_bridge;
 
 /* Compat options: */
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index 353edeb2ea..a80f809b83 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -1799,7 +1799,6 @@ static void pc_machine_class_init(ObjectClass *oc, void 
*data)
 pcmc->smbios_uuid_encoded = true;
 pcmc->gigabyte_align = true;
 pcmc->has_reserved_memory = true;
-pcmc->kvmclock_enabled = true;
 pcmc->enforce_aligned_dimm = true;
 pcmc->enforce_amd_1tb_hole = true;
 /* BIOS ACPI tables: 128K. Other BIOS datastructures: less than 4K reported
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index 814d24326d..49d5d48db9 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -184,7 +184,7 @@ static void pc_init1(MachineState *machine,
 pc_machine_init_sgx_epc(pcms);
 x86_cpus_init(x86ms, pcmc->default_cpu_version);
 
-if (kvm_enabled() && pcmc->kvmclock_enabled) {
+if (kvm_enabled()) {
 kvmclock_create(pcmc->kvmclock_create_always);
 }
 
-- 
2.41.0




[PULL 03/30] hw/arm/exynos4210: Inline sysbus_create_varargs(EXYNOS4210_FIMD)

2024-02-27 Thread Philippe Mathieu-Daudé
We want to set another qdev property (a link) for the FIMD
device, we can not use sysbus_create_varargs() 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é 
Reviewed-by: Richard Henderson 
Message-Id: <20240216153517.49422-4-phi...@linaro.org>
---
 hw/arm/exynos4210.c | 12 +++-
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/hw/arm/exynos4210.c b/hw/arm/exynos4210.c
index 57c77b140c..ab18836943 100644
--- a/hw/arm/exynos4210.c
+++ b/hw/arm/exynos4210.c
@@ -769,11 +769,13 @@ static void exynos4210_realize(DeviceState *socdev, Error 
**errp)
 }
 
 /*** Display controller (FIMD) ***/
-sysbus_create_varargs("exynos4210.fimd", EXYNOS4210_FIMD0_BASE_ADDR,
-s->irq_table[exynos4210_get_irq(11, 0)],
-s->irq_table[exynos4210_get_irq(11, 1)],
-s->irq_table[exynos4210_get_irq(11, 2)],
-NULL);
+dev = qdev_new("exynos4210.fimd");
+busdev = SYS_BUS_DEVICE(dev);
+sysbus_realize_and_unref(busdev, &error_fatal);
+sysbus_mmio_map(busdev, 0, EXYNOS4210_FIMD0_BASE_ADDR);
+for (n = 0; n < 3; n++) {
+sysbus_connect_irq(busdev, n, s->irq_table[exynos4210_get_irq(11, n)]);
+}
 
 sysbus_create_simple(TYPE_EXYNOS4210_EHCI, EXYNOS4210_EHCI_BASE_ADDR,
 s->irq_table[exynos4210_get_irq(28, 3)]);
-- 
2.41.0




[PULL 29/30] hw/ide: Remove last two uses of ide/internal.h outside of hw/ide/

2024-02-27 Thread Philippe Mathieu-Daudé
From: BALATON Zoltan 

Remove last two includes of hw/ide/intarnal.h outside of hw/ide and
replace them with newly added public header to allow moving internal.h
into hw/ide to really stop exposing it.

Fixes: a11f439a0e (hw/ide: Stop exposing internal.h to non-IDE files)
Signed-off-by: BALATON Zoltan 
Reviewed-by: Philippe Mathieu-Daudé 
Reviewed-by: Thomas Huth 
Message-ID: <20240223142633.933694e6...@zero.eik.bme.hu>
Signed-off-by: Philippe Mathieu-Daudé 
---
 {include/hw => hw}/ide/internal.h | 0
 include/hw/misc/macio/macio.h | 2 +-
 hw/arm/sbsa-ref.c | 2 +-
 3 files changed, 2 insertions(+), 2 deletions(-)
 rename {include/hw => hw}/ide/internal.h (100%)

diff --git a/include/hw/ide/internal.h b/hw/ide/internal.h
similarity index 100%
rename from include/hw/ide/internal.h
rename to hw/ide/internal.h
diff --git a/include/hw/misc/macio/macio.h b/include/hw/misc/macio/macio.h
index 86df2c2b60..2b54da6b31 100644
--- a/include/hw/misc/macio/macio.h
+++ b/include/hw/misc/macio/macio.h
@@ -28,7 +28,7 @@
 
 #include "hw/char/escc.h"
 #include "hw/pci/pci_device.h"
-#include "hw/ide/internal.h"
+#include "hw/ide/ide-bus.h"
 #include "hw/intc/heathrow_pic.h"
 #include "hw/misc/macio/cuda.h"
 #include "hw/misc/macio/gpio.h"
diff --git a/hw/arm/sbsa-ref.c b/hw/arm/sbsa-ref.c
index 4a59e2fd37..13dde50cba 100644
--- a/hw/arm/sbsa-ref.c
+++ b/hw/arm/sbsa-ref.c
@@ -36,7 +36,7 @@
 #include "hw/arm/smmuv3.h"
 #include "hw/block/flash.h"
 #include "hw/boards.h"
-#include "hw/ide/internal.h"
+#include "hw/ide/ide-bus.h"
 #include "hw/ide/ahci-sysbus.h"
 #include "hw/intc/arm_gicv3_common.h"
 #include "hw/intc/arm_gicv3_its_common.h"
-- 
2.41.0




[PULL 23/30] hw/i386/q35: Include missing 'hw/acpi/acpi.h' header

2024-02-27 Thread Philippe Mathieu-Daudé
"hw/acpi/acpi.h" is implicitly included. Include it
explicitly to avoid the following error when refactoring
headers:

hw/i386/pc_q35.c:209:43: error: use of undeclared identifier 
'ACPI_PM_PROP_ACPI_PCIHP_BRIDGE'
  ACPI_PM_PROP_ACPI_PCIHP_BRIDGE,
  ^

Signed-off-by: Philippe Mathieu-Daudé 
Reviewed-by: Zhao Liu 
Message-Id: <20240226090600.31952-3-phi...@linaro.org>
---
 hw/i386/pc_q35.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
index c89ff63579..3c80f37ead 100644
--- a/hw/i386/pc_q35.c
+++ b/hw/i386/pc_q35.c
@@ -30,6 +30,7 @@
 
 #include "qemu/osdep.h"
 #include "qemu/units.h"
+#include "hw/acpi/acpi.h"
 #include "hw/char/parallel-isa.h"
 #include "hw/loader.h"
 #include "hw/i2c/smbus_eeprom.h"
-- 
2.41.0




[PULL 04/30] hw/display/exynos4210_fimd: Pass frame buffer memory region as link

2024-02-27 Thread Philippe Mathieu-Daudé
Add the Exynos4210fimdState::'framebuffer-memory' property. Have
the board set it. We don't need to call sysbus_address_space()
anymore.

Signed-off-by: Philippe Mathieu-Daudé 
Reviewed-by: Richard Henderson 
Message-Id: <20240226173805.289-5-phi...@linaro.org>
---
 hw/arm/exynos4210.c  |  2 ++
 hw/display/exynos4210_fimd.c | 19 ---
 2 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/hw/arm/exynos4210.c b/hw/arm/exynos4210.c
index ab18836943..e3f1de2631 100644
--- a/hw/arm/exynos4210.c
+++ b/hw/arm/exynos4210.c
@@ -770,6 +770,8 @@ static void exynos4210_realize(DeviceState *socdev, Error 
**errp)
 
 /*** Display controller (FIMD) ***/
 dev = qdev_new("exynos4210.fimd");
+object_property_set_link(OBJECT(dev), "framebuffer-memory",
+ OBJECT(system_mem), &error_fatal);
 busdev = SYS_BUS_DEVICE(dev);
 sysbus_realize_and_unref(busdev, &error_fatal);
 sysbus_mmio_map(busdev, 0, EXYNOS4210_FIMD0_BASE_ADDR);
diff --git a/hw/display/exynos4210_fimd.c b/hw/display/exynos4210_fimd.c
index 84687527d5..5712558e13 100644
--- a/hw/display/exynos4210_fimd.c
+++ b/hw/display/exynos4210_fimd.c
@@ -23,6 +23,7 @@
  */
 
 #include "qemu/osdep.h"
+#include "hw/qdev-properties.h"
 #include "hw/hw.h"
 #include "hw/irq.h"
 #include "hw/sysbus.h"
@@ -32,6 +33,7 @@
 #include "qemu/bswap.h"
 #include "qemu/module.h"
 #include "qemu/log.h"
+#include "qapi/error.h"
 #include "qom/object.h"
 
 /* Debug messages configuration */
@@ -302,6 +304,7 @@ struct Exynos4210fimdState {
 MemoryRegion iomem;
 QemuConsole *console;
 qemu_irq irq[3];
+MemoryRegion *fbmem;
 
 uint32_t vidcon[4]; /* Video main control registers 0-3 */
 uint32_t vidtcon[4];/* Video time control registers 0-3 */
@@ -1119,7 +1122,6 @@ static void exynos4210_fimd_invalidate(void *opaque)
  * VIDOSDA, VIDOSDB, VIDWADDx and SHADOWCON registers */
 static void fimd_update_memory_section(Exynos4210fimdState *s, unsigned win)
 {
-SysBusDevice *sbd = SYS_BUS_DEVICE(s);
 Exynos4210fimdWindow *w = &s->window[win];
 hwaddr fb_start_addr, fb_mapped_len;
 
@@ -1147,8 +1149,7 @@ static void 
fimd_update_memory_section(Exynos4210fimdState *s, unsigned win)
 memory_region_unref(w->mem_section.mr);
 }
 
-w->mem_section = memory_region_find(sysbus_address_space(sbd),
-fb_start_addr, w->fb_len);
+w->mem_section = memory_region_find(s->fbmem, fb_start_addr, w->fb_len);
 assert(w->mem_section.mr);
 assert(w->mem_section.offset_within_address_space == fb_start_addr);
 DPRINT_TRACE("Window %u framebuffer changed: address=0x%08x, len=0x%x\n",
@@ -1924,6 +1925,12 @@ static const GraphicHwOps exynos4210_fimd_ops = {
 .gfx_update  = exynos4210_fimd_update,
 };
 
+static Property exynos4210_fimd_properties[] = {
+DEFINE_PROP_LINK("framebuffer-memory", Exynos4210fimdState, fbmem,
+ TYPE_MEMORY_REGION, MemoryRegion *),
+DEFINE_PROP_END_OF_LIST(),
+};
+
 static void exynos4210_fimd_init(Object *obj)
 {
 Exynos4210fimdState *s = EXYNOS4210_FIMD(obj);
@@ -1944,6 +1951,11 @@ static void exynos4210_fimd_realize(DeviceState *dev, 
Error **errp)
 {
 Exynos4210fimdState *s = EXYNOS4210_FIMD(dev);
 
+if (!s->fbmem) {
+error_setg(errp, "'framebuffer-memory' property was not set");
+return;
+}
+
 s->console = graphic_console_init(dev, 0, &exynos4210_fimd_ops, s);
 }
 
@@ -1954,6 +1966,7 @@ static void exynos4210_fimd_class_init(ObjectClass 
*klass, void *data)
 dc->vmsd = &exynos4210_fimd_vmstate;
 dc->reset = exynos4210_fimd_reset;
 dc->realize = exynos4210_fimd_realize;
+device_class_set_props(dc, exynos4210_fimd_properties);
 }
 
 static const TypeInfo exynos4210_fimd_info = {
-- 
2.41.0




[PULL 22/30] hw/i386/sgx: Use QDev API

2024-02-27 Thread Philippe Mathieu-Daudé
Prefer the QDev API over the low level QOM one.
No logical change intended.

Reviewed-by: Michael Tokarev 
Signed-off-by: Philippe Mathieu-Daudé 
Message-Id: <20240215142035.73331-4-phi...@linaro.org>
---
 hw/i386/sgx.c | 14 ++
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/hw/i386/sgx.c b/hw/i386/sgx.c
index 70305547d4..de76397bcf 100644
--- a/hw/i386/sgx.c
+++ b/hw/i386/sgx.c
@@ -286,7 +286,6 @@ void pc_machine_init_sgx_epc(PCMachineState *pcms)
 SGXEPCState *sgx_epc = &pcms->sgx_epc;
 X86MachineState *x86ms = X86_MACHINE(pcms);
 SgxEPCList *list = NULL;
-Object *obj;
 
 memset(sgx_epc, 0, sizeof(SGXEPCState));
 if (!x86ms->sgx_epc_list) {
@@ -300,16 +299,15 @@ void pc_machine_init_sgx_epc(PCMachineState *pcms)
 &sgx_epc->mr);
 
 for (list = x86ms->sgx_epc_list; list; list = list->next) {
-obj = object_new("sgx-epc");
+DeviceState *dev = qdev_new(TYPE_SGX_EPC);
 
 /* set the memdev link with memory backend */
-object_property_parse(obj, SGX_EPC_MEMDEV_PROP, list->value->memdev,
-  &error_fatal);
+object_property_parse(OBJECT(dev), SGX_EPC_MEMDEV_PROP,
+  list->value->memdev, &error_fatal);
 /* set the numa node property for sgx epc object */
-object_property_set_uint(obj, SGX_EPC_NUMA_NODE_PROP, 
list->value->node,
- &error_fatal);
-object_property_set_bool(obj, "realized", true, &error_fatal);
-object_unref(obj);
+object_property_set_uint(OBJECT(dev), SGX_EPC_NUMA_NODE_PROP,
+ list->value->node, &error_fatal);
+qdev_realize_and_unref(dev, NULL, &error_fatal);
 }
 
 if ((sgx_epc->base + sgx_epc->size) < sgx_epc->base) {
-- 
2.41.0




[PULL 21/30] hw/i386/x86: Let ioapic_init_gsi() take parent as pointer

2024-02-27 Thread Philippe Mathieu-Daudé
From: Bernhard Beschow 

Rather than taking a QOM name which has to be resolved, let's pass the parent
directly as pointer. This simplifies the code.

Signed-off-by: Bernhard Beschow 
Reviewed-by: Michael S. Tsirkin 
Reviewed-by: Philippe Mathieu-Daudé 
Reviewed-by: Zhao Liu 
Message-ID: <20240224135851.100361-2-shen...@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé 
---
 include/hw/i386/x86.h | 2 +-
 hw/i386/microvm.c | 2 +-
 hw/i386/pc_piix.c | 7 +++
 hw/i386/pc_q35.c  | 2 +-
 hw/i386/x86.c | 7 +++
 5 files changed, 9 insertions(+), 11 deletions(-)

diff --git a/include/hw/i386/x86.h b/include/hw/i386/x86.h
index 8e306db7bb..4dc30dcb4d 100644
--- a/include/hw/i386/x86.h
+++ b/include/hw/i386/x86.h
@@ -139,7 +139,7 @@ typedef struct GSIState {
 
 qemu_irq x86_allocate_cpu_irq(void);
 void gsi_handler(void *opaque, int n, int level);
-void ioapic_init_gsi(GSIState *gsi_state, const char *parent_name);
+void ioapic_init_gsi(GSIState *gsi_state, Object *parent);
 DeviceState *ioapic_init_secondary(GSIState *gsi_state);
 
 /* pc_sysfw.c */
diff --git a/hw/i386/microvm.c b/hw/i386/microvm.c
index ca55aecc3b..61a772dfe6 100644
--- a/hw/i386/microvm.c
+++ b/hw/i386/microvm.c
@@ -175,7 +175,7 @@ static void microvm_devices_init(MicrovmMachineState *mms)
   &error_abort);
 isa_bus_register_input_irqs(isa_bus, x86ms->gsi);
 
-ioapic_init_gsi(gsi_state, "machine");
+ioapic_init_gsi(gsi_state, OBJECT(mms));
 if (ioapics > 1) {
 x86ms->ioapic2 = ioapic_init_secondary(gsi_state);
 }
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index ec7c07b362..7724396ead 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -107,6 +107,7 @@ static void pc_init1(MachineState *machine,
 X86MachineState *x86ms = X86_MACHINE(machine);
 MemoryRegion *system_memory = get_system_memory();
 MemoryRegion *system_io = get_system_io();
+Object *phb = NULL;
 PCIBus *pci_bus = NULL;
 ISABus *isa_bus;
 Object *piix4_pm = NULL;
@@ -189,8 +190,6 @@ static void pc_init1(MachineState *machine,
 }
 
 if (pcmc->pci_enabled) {
-Object *phb;
-
 pci_memory = g_new(MemoryRegion, 1);
 memory_region_init(pci_memory, NULL, "pci", UINT64_MAX);
 rom_memory = pci_memory;
@@ -303,8 +302,8 @@ static void pc_init1(MachineState *machine,
 pc_i8259_create(isa_bus, gsi_state->i8259_irq);
 }
 
-if (pcmc->pci_enabled) {
-ioapic_init_gsi(gsi_state, "i440fx");
+if (phb) {
+ioapic_init_gsi(gsi_state, phb);
 }
 
 if (tcg_enabled()) {
diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
index 53fb3db26d..c89ff63579 100644
--- a/hw/i386/pc_q35.c
+++ b/hw/i386/pc_q35.c
@@ -263,7 +263,7 @@ static void pc_q35_init(MachineState *machine)
 pc_i8259_create(isa_bus, gsi_state->i8259_irq);
 }
 
-ioapic_init_gsi(gsi_state, "q35");
+ioapic_init_gsi(gsi_state, OBJECT(phb));
 
 if (tcg_enabled()) {
 x86_register_ferr_irq(x86ms->gsi[13]);
diff --git a/hw/i386/x86.c b/hw/i386/x86.c
index 684dce90e9..807e09bcdb 100644
--- a/hw/i386/x86.c
+++ b/hw/i386/x86.c
@@ -640,20 +640,19 @@ void gsi_handler(void *opaque, int n, int level)
 }
 }
 
-void ioapic_init_gsi(GSIState *gsi_state, const char *parent_name)
+void ioapic_init_gsi(GSIState *gsi_state, Object *parent)
 {
 DeviceState *dev;
 SysBusDevice *d;
 unsigned int i;
 
-assert(parent_name);
+assert(parent);
 if (kvm_ioapic_in_kernel()) {
 dev = qdev_new(TYPE_KVM_IOAPIC);
 } else {
 dev = qdev_new(TYPE_IOAPIC);
 }
-object_property_add_child(object_resolve_path(parent_name, NULL),
-  "ioapic", OBJECT(dev));
+object_property_add_child(parent, "ioapic", OBJECT(dev));
 d = SYS_BUS_DEVICE(dev);
 sysbus_realize_and_unref(d, &error_fatal);
 sysbus_mmio_map(d, 0, IO_APIC_DEFAULT_ADDRESS);
-- 
2.41.0




[PULL 27/30] hw/i386/pc: Populate RTC attribute directly

2024-02-27 Thread Philippe Mathieu-Daudé
From: Bernhard Beschow 

Both the piix and the q35 machines introduce an rtc_state variable and defer the
initialization of the X86MachineState::rtc attribute to pc_cmos_init(). Resolve
this complication which makes pc_cmos_init() do what it says on the tin.

Signed-off-by: Bernhard Beschow 
Reviewed-by: Michael S. Tsirkin 
Reviewed-by: Zhao Liu 
Message-ID: <20240224135851.100361-6-shen...@gmail.com>
Signed-off-by: Philippe Mathieu-Daudé 
---
 hw/i386/pc.c  |  8 
 hw/i386/pc_piix.c | 15 +++
 hw/i386/pc_q35.c  |  7 +++
 3 files changed, 10 insertions(+), 20 deletions(-)

diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index a80f809b83..880e95de26 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -611,14 +611,6 @@ void pc_cmos_init(PCMachineState *pcms,
 mc146818rtc_set_cmos_data(s, 0x5c, val >> 8);
 mc146818rtc_set_cmos_data(s, 0x5d, val >> 16);
 
-object_property_add_link(OBJECT(pcms), "rtc_state",
- TYPE_ISA_DEVICE,
- (Object **)&x86ms->rtc,
- object_property_allow_set_link,
- OBJ_PROP_LINK_STRONG);
-object_property_set_link(OBJECT(pcms), "rtc_state", OBJECT(s),
- &error_abort);
-
 set_boot_dev(s, MACHINE(pcms)->boot_config.order, &error_fatal);
 
 val = 0;
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index 49d5d48db9..ce6aad758d 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -112,7 +112,6 @@ static void pc_init1(MachineState *machine,
 Object *piix4_pm = NULL;
 qemu_irq smi_irq;
 GSIState *gsi_state;
-ISADevice *rtc_state;
 MemoryRegion *ram_memory;
 MemoryRegion *pci_memory = NULL;
 MemoryRegion *rom_memory = system_memory;
@@ -276,8 +275,8 @@ static void pc_init1(MachineState *machine,
 }
 
 isa_bus = ISA_BUS(qdev_get_child_bus(DEVICE(pci_dev), "isa.0"));
-rtc_state = ISA_DEVICE(object_resolve_path_component(OBJECT(pci_dev),
- "rtc"));
+x86ms->rtc = ISA_DEVICE(object_resolve_path_component(OBJECT(pci_dev),
+  "rtc"));
 piix4_pm = object_resolve_path_component(OBJECT(pci_dev), "pm");
 dev = DEVICE(object_resolve_path_component(OBJECT(pci_dev), "ide"));
 pci_ide_create_devs(PCI_DEVICE(dev));
@@ -288,9 +287,9 @@ static void pc_init1(MachineState *machine,
   &error_abort);
 isa_bus_register_input_irqs(isa_bus, x86ms->gsi);
 
-rtc_state = isa_new(TYPE_MC146818_RTC);
-qdev_prop_set_int32(DEVICE(rtc_state), "base_year", 2000);
-isa_realize_and_unref(rtc_state, isa_bus, &error_fatal);
+x86ms->rtc = isa_new(TYPE_MC146818_RTC);
+qdev_prop_set_int32(DEVICE(x86ms->rtc), "base_year", 2000);
+isa_realize_and_unref(x86ms->rtc, isa_bus, &error_fatal);
 
 i8257_dma_init(OBJECT(machine), isa_bus, 0);
 pcms->hpet_enabled = false;
@@ -316,7 +315,7 @@ static void pc_init1(MachineState *machine,
 }
 
 /* init basic PC hardware */
-pc_basic_device_init(pcms, isa_bus, x86ms->gsi, rtc_state, true,
+pc_basic_device_init(pcms, isa_bus, x86ms->gsi, x86ms->rtc, true,
  0x4);
 
 pc_nic_init(pcmc, isa_bus, pcms->pcibus);
@@ -343,7 +342,7 @@ static void pc_init1(MachineState *machine,
 }
 #endif
 
-pc_cmos_init(pcms, rtc_state);
+pc_cmos_init(pcms, x86ms->rtc);
 
 if (piix4_pm) {
 smi_irq = qemu_allocate_irq(pc_acpi_smi_interrupt, first_cpu, 0);
diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c
index 9e4b8f79c2..45a4102e75 100644
--- a/hw/i386/pc_q35.c
+++ b/hw/i386/pc_q35.c
@@ -125,7 +125,6 @@ static void pc_q35_init(MachineState *machine)
 Object *phb;
 PCIDevice *lpc;
 DeviceState *lpc_dev;
-ISADevice *rtc_state;
 MemoryRegion *system_memory = get_system_memory();
 MemoryRegion *system_io = get_system_io();
 MemoryRegion *pci_memory = g_new(MemoryRegion, 1);
@@ -232,7 +231,7 @@ static void pc_q35_init(MachineState *machine)
 }
 pci_realize_and_unref(lpc, pcms->pcibus, &error_fatal);
 
-rtc_state = ISA_DEVICE(object_resolve_path_component(OBJECT(lpc), "rtc"));
+x86ms->rtc = ISA_DEVICE(object_resolve_path_component(OBJECT(lpc), "rtc"));
 
 object_property_add_link(OBJECT(machine), PC_MACHINE_ACPI_DEVICE_PROP,
  TYPE_HOTPLUG_HANDLER,
@@ -274,7 +273,7 @@ static void pc_q35_init(MachineState *machine)
 }
 
 /* init basic PC hardware */
-pc_basic_device_init(pcms, isa_bus, x86ms->gsi, rtc_state, !mc->no_floppy,
+pc_basic_device_init(pcms, isa_bus, x86ms->gsi, x86ms->rtc, !mc->no_floppy,
  0xff0104);
 
 if (pcms->sata_enabled) {
@@ -312,7 +311,7 @@ static void pc_q35_init(MachineState *machine)
 smbus_eeprom_init(pcms->smbus, 8, NULL, 0);
 }
 
- 

[PULL 11/30] hw/ppc/sam460ex: do not use usb_bus_find()

2024-02-27 Thread Philippe Mathieu-Daudé
From: Paolo Bonzini 

usb_bus_find() is always used with argument -1; it can be replaced with
a search of the single USB bus on the machine.

Suggested-by: Philippe Mathieu-Daudé 
Signed-off-by: Paolo Bonzini 
Reviewed-by: Thomas Huth 
Message-ID: <20240223124406.234509-3-pbonz...@redhat.com>
[PMD: Fixed style]
Signed-off-by: Philippe Mathieu-Daudé 
---
 hw/ppc/sam460ex.c | 7 +--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/hw/ppc/sam460ex.c b/hw/ppc/sam460ex.c
index a28498f39c..7e34b6c5e0 100644
--- a/hw/ppc/sam460ex.c
+++ b/hw/ppc/sam460ex.c
@@ -274,6 +274,7 @@ static void sam460ex_init(MachineState *machine)
 DeviceState *uic[4];
 int i;
 PCIBus *pci_bus;
+USBBus *usb_bus;
 PowerPCCPU *cpu;
 CPUPPCState *env;
 I2CBus *i2c;
@@ -421,8 +422,10 @@ static void sam460ex_init(MachineState *machine)
 sysbus_realize_and_unref(sbdev, &error_fatal);
 sysbus_mmio_map(sbdev, 0, 0x4bffd);
 sysbus_connect_irq(sbdev, 0, qdev_get_gpio_in(uic[2], 30));
-usb_create_simple(usb_bus_find(-1), "usb-kbd");
-usb_create_simple(usb_bus_find(-1), "usb-mouse");
+usb_bus = USB_BUS(object_resolve_type_unambiguous(TYPE_USB_BUS,
+  &error_abort));
+usb_create_simple(usb_bus, "usb-kbd");
+usb_create_simple(usb_bus, "usb-mouse");
 
 /* PCIe buses */
 dev = qdev_new(TYPE_PPC460EX_PCIE_HOST);
-- 
2.41.0




[PULL 10/30] hw/acpi: move object_resolve_type_unambiguous to core QOM

2024-02-27 Thread Philippe Mathieu-Daudé
From: Paolo Bonzini 

object_resolve_type_unambiguous provides a useful functionality, that
is currently emulated for example by usb_bus_find().  Move it to core
code and add error reporting for increased generality.

Signed-off-by: Paolo Bonzini 
Reviewed-by: Thomas Huth 
Reviewed-by: Philippe Mathieu-Daudé 
Message-ID: <20240223124406.234509-2-pbonz...@redhat.com>
[PMD: Fixed style]
Signed-off-by: Philippe Mathieu-Daudé 
---
 include/qom/object.h | 13 +
 hw/i386/acpi-build.c | 20 +---
 qom/object.c | 16 
 3 files changed, 34 insertions(+), 15 deletions(-)

diff --git a/include/qom/object.h b/include/qom/object.h
index afccd24ca7..e9ed9550f0 100644
--- a/include/qom/object.h
+++ b/include/qom/object.h
@@ -1550,6 +1550,19 @@ Object *object_resolve_path(const char *path, bool 
*ambiguous);
 Object *object_resolve_path_type(const char *path, const char *typename,
  bool *ambiguous);
 
+/**
+ * object_resolve_type_unambiguous:
+ * @typename: the type to look for
+ * @errp: pointer to error object
+ *
+ * Return the only object in the QOM tree of type @typename.
+ * If no match or more than one match is found, an error is
+ * returned.
+ *
+ * Returns: The matched object or NULL on path lookup failure.
+ */
+Object *object_resolve_type_unambiguous(const char *typename, Error **errp);
+
 /**
  * object_resolve_path_at:
  * @parent: the object in which to resolve the path
diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
index d3ce96dd9f..896ff87519 100644
--- a/hw/i386/acpi-build.c
+++ b/hw/i386/acpi-build.c
@@ -192,21 +192,10 @@ static void init_common_fadt_data(MachineState *ms, 
Object *o,
 *data = fadt;
 }
 
-static Object *object_resolve_type_unambiguous(const char *typename)
-{
-bool ambig;
-Object *o = object_resolve_path_type("", typename, &ambig);
-
-if (ambig || !o) {
-return NULL;
-}
-return o;
-}
-
 static void acpi_get_pm_info(MachineState *machine, AcpiPmInfo *pm)
 {
-Object *piix = object_resolve_type_unambiguous(TYPE_PIIX4_PM);
-Object *lpc = object_resolve_type_unambiguous(TYPE_ICH9_LPC_DEVICE);
+Object *piix = object_resolve_type_unambiguous(TYPE_PIIX4_PM, NULL);
+Object *lpc = object_resolve_type_unambiguous(TYPE_ICH9_LPC_DEVICE, NULL);
 Object *obj = piix ? piix : lpc;
 QObject *o;
 pm->cpu_hp_io_base = 0;
@@ -1428,8 +1417,9 @@ build_dsdt(GArray *table_data, BIOSLinker *linker,
AcpiPmInfo *pm, AcpiMiscInfo *misc,
Range *pci_hole, Range *pci_hole64, MachineState *machine)
 {
-Object *i440fx = 
object_resolve_type_unambiguous(TYPE_I440FX_PCI_HOST_BRIDGE);
-Object *q35 = object_resolve_type_unambiguous(TYPE_Q35_HOST_DEVICE);
+Object *i440fx = 
object_resolve_type_unambiguous(TYPE_I440FX_PCI_HOST_BRIDGE,
+ NULL);
+Object *q35 = object_resolve_type_unambiguous(TYPE_Q35_HOST_DEVICE, NULL);
 CrsRangeEntry *entry;
 Aml *dsdt, *sb_scope, *scope, *dev, *method, *field, *pkg, *crs;
 CrsRangeSet crs_range_set;
diff --git a/qom/object.c b/qom/object.c
index 2c4c64d2b6..d4a001cf41 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -2229,6 +2229,22 @@ Object *object_resolve_path_at(Object *parent, const 
char *path)
 return object_resolve_abs_path(parent, parts, TYPE_OBJECT);
 }
 
+Object *object_resolve_type_unambiguous(const char *typename, Error **errp)
+{
+bool ambig;
+Object *o = object_resolve_path_type("", typename, &ambig);
+
+if (ambig) {
+error_setg(errp, "More than one object of type %s", typename);
+return NULL;
+}
+if (!o) {
+error_setg(errp, "No object found of type %s", typename);
+return NULL;
+}
+return o;
+}
+
 typedef struct StringProperty
 {
 char *(*get)(Object *, Error **);
-- 
2.41.0




[PULL 15/30] hw/ppc/mac_newworld: do not require CONFIG_USB

2024-02-27 Thread Philippe Mathieu-Daudé
From: Paolo Bonzini 

With --without-default-devices it should not be required to have
devices in the binary that are removed by -nodefaults.  It should be
therefore possible to build a binary that does not include any USB
host controller or any of the code guarded by CONFIG_USB.  While the
simpler creation functions such as usb_create_simple can be inlined,
this is not true of usb_bus_find().  Remove it, replacing it with a
search of the single USB bus on the machine.

With this change, it is possible to change "select USB_OHCI_PCI" into
an "imply" directive.

Suggested-by: Philippe Mathieu-Daudé 
Signed-off-by: Paolo Bonzini 
Reviewed-by: Philippe Mathieu-Daudé 
Message-ID: <20240223124406.234509-7-pbonz...@redhat.com>
[PMD: Fixed style]
Signed-off-by: Philippe Mathieu-Daudé 
---
 hw/ppc/mac_newworld.c | 4 +++-
 hw/ppc/Kconfig| 2 +-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c
index b36dbaf2b6..3e796d2f6d 100644
--- a/hw/ppc/mac_newworld.c
+++ b/hw/ppc/mac_newworld.c
@@ -431,8 +431,10 @@ static void ppc_core99_init(MachineState *machine)
 /* U3 needs to use USB for input because Linux doesn't support via-cuda
 on PPC64 */
 if (!has_adb || machine_arch == ARCH_MAC99_U3) {
-USBBus *usb_bus = usb_bus_find(-1);
+USBBus *usb_bus;
 
+usb_bus = USB_BUS(object_resolve_type_unambiguous(TYPE_USB_BUS,
+  &error_abort));
 usb_create_simple(usb_bus, "usb-kbd");
 usb_create_simple(usb_bus, "usb-mouse");
 }
diff --git a/hw/ppc/Kconfig b/hw/ppc/Kconfig
index a890699082..c5aeb6b3f2 100644
--- a/hw/ppc/Kconfig
+++ b/hw/ppc/Kconfig
@@ -119,13 +119,13 @@ config MAC_NEWWORLD
 imply PCI_DEVICES
 imply SUNGEM
 imply TEST_DEVICES
+imply USB_OHCI_PCI
 select ADB
 select MACIO
 select MACIO_GPIO
 select MAC_PMU
 select UNIN_PCI
 select FW_CFG_PPC
-select USB_OHCI_PCI
 
 config E500
 bool
-- 
2.41.0




[PULL 01/30] hw/arm: Inline sysbus_create_simple(PL110 / PL111)

2024-02-27 Thread Philippe Mathieu-Daudé
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é 
Reviewed-by: Richard Henderson 
Message-Id: <20240226173805.289-2-phi...@linaro.org>
---
 hw/arm/integratorcp.c |  5 -
 hw/arm/realview.c |  5 -
 hw/arm/versatilepb.c  |  6 +-
 hw/arm/vexpress.c | 10 --
 4 files changed, 21 insertions(+), 5 deletions(-)

diff --git a/hw/arm/integratorcp.c b/hw/arm/integratorcp.c
index f016d20485..5b002da350 100644
--- a/hw/arm/integratorcp.c
+++ b/hw/arm/integratorcp.c
@@ -670,7 +670,10 @@ static void integratorcp_init(MachineState *machine)
 smc91c111_init(0xc800, pic[27]);
 }
 
-sysbus_create_simple("pl110", 0xc000, pic[22]);
+dev = qdev_new("pl110");
+sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
+sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, 0xc000);
+sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, pic[22]);
 
 integrator_binfo.ram_size = ram_size;
 arm_load_kernel(cpu, machine, &integrator_binfo);
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", 0x1002, pic[23]);
+dev = qdev_new("pl111");
+sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
+sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, 0x1002);
+sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, pic[23]);
 
 dev = sysbus_create_varargs("pl181", 0x10005000, pic[17], pic[18], NULL);
 /* Wire up MMC card detect and read-only signals. These have
diff --git a/hw/arm/versatilepb.c b/hw/arm/versatilepb.c
index d10b75dfdb..7e04b23af8 100644
--- a/hw/arm/versatilepb.c
+++ b/hw/arm/versatilepb.c
@@ -299,7 +299,11 @@ static void versatile_init(MachineState *machine, int 
board_id)
 
 /* The versatile/PB actually has a modified Color LCD controller
that includes hardware cursor support from the PL111.  */
-dev = sysbus_create_simple("pl110_versatile", 0x1012, pic[16]);
+dev = qdev_new("pl110_versatile");
+sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
+sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, 0x1012);
+sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, pic[16]);
+
 /* Wire up the mux control signals from the SYS_CLCD register */
 qdev_connect_gpio_out(sysctl, 0, qdev_get_gpio_in(dev, 0));
 
diff --git a/hw/arm/vexpress.c b/hw/arm/vexpress.c
index aa5f3ca0d4..671986c21e 100644
--- a/hw/arm/vexpress.c
+++ b/hw/arm/vexpress.c
@@ -276,6 +276,7 @@ static void a9_daughterboard_init(VexpressMachineState *vms,
 {
 MachineState *machine = MACHINE(vms);
 MemoryRegion *sysmem = get_system_memory();
+DeviceState *dev;
 
 if (ram_size > 0x4000) {
 /* 1GB is the maximum the address space permits */
@@ -297,7 +298,9 @@ static void a9_daughterboard_init(VexpressMachineState *vms,
 /* Daughterboard peripherals : 0x1002 .. 0x2000 */
 
 /* 0x1002 PL111 CLCD (daughterboard) */
-sysbus_create_simple("pl111", 0x1002, pic[44]);
+dev = qdev_new("pl111");
+sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, 0x1002);
+sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, pic[44]);
 
 /* 0x1006 AXI RAM */
 /* 0x100e PL341 Dynamic Memory Controller */
@@ -650,7 +653,10 @@ static void vexpress_common_init(MachineState *machine)
 
 /* VE_COMPACTFLASH: not modelled */
 
-sysbus_create_simple("pl111", map[VE_CLCD], pic[14]);
+dev = qdev_new("pl111");
+sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
+sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, map[VE_CLCD]);
+sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, pic[14]);
 
 dinfo = drive_get(IF_PFLASH, 0, 0);
 pflash0 = ve_pflash_cfi01_register(map[VE_NORFLASH0], "vexpress.flash0",
-- 
2.41.0




[PULL 02/30] hw/display/pl110: Pass frame buffer memory region as link property

2024-02-27 Thread Philippe Mathieu-Daudé
Add the PL110::'framebuffer-memory' property. Have the different
ARM boards set it. We don't need to call sysbus_address_space()
anymore.

Signed-off-by: Philippe Mathieu-Daudé 
Reviewed-by: Richard Henderson 
Message-Id: <20240226173805.289-3-phi...@linaro.org>
---
 hw/arm/integratorcp.c |  2 ++
 hw/arm/realview.c |  2 ++
 hw/arm/versatilepb.c  |  2 ++
 hw/arm/vexpress.c |  5 +
 hw/display/pl110.c| 20 
 5 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/hw/arm/integratorcp.c b/hw/arm/integratorcp.c
index 5b002da350..feb0dd63df 100644
--- a/hw/arm/integratorcp.c
+++ b/hw/arm/integratorcp.c
@@ -671,6 +671,8 @@ static void integratorcp_init(MachineState *machine)
 }
 
 dev = qdev_new("pl110");
+object_property_set_link(OBJECT(dev), "framebuffer-memory",
+ OBJECT(address_space_mem), &error_fatal);
 sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
 sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, 0xc000);
 sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, pic[22]);
diff --git a/hw/arm/realview.c b/hw/arm/realview.c
index 77300e92e5..b186f965c6 100644
--- a/hw/arm/realview.c
+++ b/hw/arm/realview.c
@@ -239,6 +239,8 @@ static void realview_init(MachineState *machine,
 gpio2 = sysbus_create_simple("pl061", 0x10015000, pic[8]);
 
 dev = qdev_new("pl111");
+object_property_set_link(OBJECT(dev), "framebuffer-memory",
+ OBJECT(sysmem), &error_fatal);
 sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
 sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, 0x1002);
 sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, pic[23]);
diff --git a/hw/arm/versatilepb.c b/hw/arm/versatilepb.c
index 7e04b23af8..d48235453e 100644
--- a/hw/arm/versatilepb.c
+++ b/hw/arm/versatilepb.c
@@ -300,6 +300,8 @@ static void versatile_init(MachineState *machine, int 
board_id)
 /* The versatile/PB actually has a modified Color LCD controller
that includes hardware cursor support from the PL111.  */
 dev = qdev_new("pl110_versatile");
+object_property_set_link(OBJECT(dev), "framebuffer-memory",
+ OBJECT(sysmem), &error_fatal);
 sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
 sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, 0x1012);
 sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, pic[16]);
diff --git a/hw/arm/vexpress.c b/hw/arm/vexpress.c
index 671986c21e..de815d84cc 100644
--- a/hw/arm/vexpress.c
+++ b/hw/arm/vexpress.c
@@ -299,6 +299,9 @@ static void a9_daughterboard_init(VexpressMachineState *vms,
 
 /* 0x1002 PL111 CLCD (daughterboard) */
 dev = qdev_new("pl111");
+object_property_set_link(OBJECT(dev), "framebuffer-memory",
+ OBJECT(sysmem), &error_fatal);
+sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
 sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, 0x1002);
 sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, pic[44]);
 
@@ -654,6 +657,8 @@ static void vexpress_common_init(MachineState *machine)
 /* VE_COMPACTFLASH: not modelled */
 
 dev = qdev_new("pl111");
+object_property_set_link(OBJECT(dev), "framebuffer-memory",
+ OBJECT(sysmem), &error_fatal);
 sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
 sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, map[VE_CLCD]);
 sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, pic[14]);
diff --git a/hw/display/pl110.c b/hw/display/pl110.c
index 4b83db9322..7f145bbdba 100644
--- a/hw/display/pl110.c
+++ b/hw/display/pl110.c
@@ -10,6 +10,7 @@
 #include "qemu/osdep.h"
 #include "hw/irq.h"
 #include "hw/sysbus.h"
+#include "hw/qdev-properties.h"
 #include "migration/vmstate.h"
 #include "ui/console.h"
 #include "framebuffer.h"
@@ -17,6 +18,7 @@
 #include "qemu/timer.h"
 #include "qemu/log.h"
 #include "qemu/module.h"
+#include "qapi/error.h"
 #include "qom/object.h"
 
 #define PL110_CR_EN   0x001
@@ -74,6 +76,7 @@ struct PL110State {
 uint32_t palette[256];
 uint32_t raw_palette[128];
 qemu_irq irq;
+MemoryRegion *fbmem;
 };
 
 static int vmstate_pl110_post_load(void *opaque, int version_id);
@@ -210,7 +213,6 @@ static int pl110_enabled(PL110State *s)
 static void pl110_update_display(void *opaque)
 {
 PL110State *s = (PL110State *)opaque;
-SysBusDevice *sbd;
 DisplaySurface *surface = qemu_console_surface(s->con);
 drawfn fn;
 int src_width;
@@ -222,8 +224,6 @@ static void pl110_update_display(void *opaque)
 return;
 }
 
-sbd = SYS_BUS_DEVICE(s);
-
 if (s->cr & PL110_CR_BGR)
 bpp_offset = 0;
 else
@@ -290,7 +290,7 @@ static void pl110_update_display(void *opaque)
 first = 0;
 if (s->invalidate) {
 framebuffer_update_memory_section(&s->fbsection,
-  sysbus_address_space(sbd),
+  s->fbmem,
   s

[PULL 09/30] hw/nubus: add nubus-virtio-mmio device

2024-02-27 Thread Philippe Mathieu-Daudé
From: Mark Cave-Ayland 

The nubus-virtio-mmio device is a Nubus card that contains a set of 32 
virtio-mmio
devices and a goldfish PIC similar to the m68k virt machine that can be plugged
into the m68k q800 machine.

There are currently a number of drivers under development that can be used in
conjunction with this device to provide accelerated and/or additional hypervisor
services to 68k Classic MacOS.

Signed-off-by: Mark Cave-Ayland 
Reviewed-by: Laurent Vivier 
Message-ID: <2024002954.449462-4-mark.cave-ayl...@ilande.co.uk>
Signed-off-by: Philippe Mathieu-Daudé 
---
 include/hw/nubus/nubus-virtio-mmio.h |  36 ++
 hw/nubus/nubus-virtio-mmio.c | 102 +++
 hw/nubus/meson.build |   1 +
 3 files changed, 139 insertions(+)
 create mode 100644 include/hw/nubus/nubus-virtio-mmio.h
 create mode 100644 hw/nubus/nubus-virtio-mmio.c

diff --git a/include/hw/nubus/nubus-virtio-mmio.h 
b/include/hw/nubus/nubus-virtio-mmio.h
new file mode 100644
index 00..de497b7f76
--- /dev/null
+++ b/include/hw/nubus/nubus-virtio-mmio.h
@@ -0,0 +1,36 @@
+/*
+ * QEMU Macintosh Nubus Virtio MMIO card
+ *
+ * Copyright (c) 2023 Mark Cave-Ayland 
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#ifndef HW_NUBUS_VIRTIO_MMIO_H
+#define HW_NUBUS_VIRTIO_MMIO_H
+
+#include "hw/nubus/nubus.h"
+#include "qom/object.h"
+#include "hw/intc/goldfish_pic.h"
+#include "hw/virtio/virtio-mmio.h"
+
+#define TYPE_NUBUS_VIRTIO_MMIO "nubus-virtio-mmio"
+OBJECT_DECLARE_TYPE(NubusVirtioMMIO, NubusVirtioMMIODeviceClass,
+NUBUS_VIRTIO_MMIO)
+
+struct NubusVirtioMMIODeviceClass {
+DeviceClass parent_class;
+
+DeviceRealize parent_realize;
+};
+
+#define NUBUS_VIRTIO_MMIO_NUM_DEVICES 32
+
+struct NubusVirtioMMIO {
+NubusDevice parent_obj;
+
+GoldfishPICState pic;
+VirtIOMMIOProxy virtio_mmio[NUBUS_VIRTIO_MMIO_NUM_DEVICES];
+};
+
+#endif
diff --git a/hw/nubus/nubus-virtio-mmio.c b/hw/nubus/nubus-virtio-mmio.c
new file mode 100644
index 00..58a63c84d0
--- /dev/null
+++ b/hw/nubus/nubus-virtio-mmio.c
@@ -0,0 +1,102 @@
+/*
+ * QEMU Macintosh Nubus Virtio MMIO card
+ *
+ * Copyright (c) 2024 Mark Cave-Ayland 
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include "qemu/osdep.h"
+#include "hw/nubus/nubus-virtio-mmio.h"
+
+
+#define NUBUS_VIRTIO_MMIO_PIC_OFFSET   0
+#define NUBUS_VIRTIO_MMIO_DEV_OFFSET   0x200
+
+
+static void nubus_virtio_mmio_set_input_irq(void *opaque, int n, int level)
+{
+NubusDevice *nd = NUBUS_DEVICE(opaque);
+
+nubus_set_irq(nd, level);
+}
+
+static void nubus_virtio_mmio_realize(DeviceState *dev, Error **errp)
+{
+NubusVirtioMMIODeviceClass *nvmdc = NUBUS_VIRTIO_MMIO_GET_CLASS(dev);
+NubusVirtioMMIO *s = NUBUS_VIRTIO_MMIO(dev);
+NubusDevice *nd = NUBUS_DEVICE(dev);
+SysBusDevice *sbd;
+int i, offset;
+
+nvmdc->parent_realize(dev, errp);
+if (*errp) {
+return;
+}
+
+/* Goldfish PIC */
+sbd = SYS_BUS_DEVICE(&s->pic);
+if (!sysbus_realize(sbd, errp)) {
+return;
+}
+memory_region_add_subregion(&nd->slot_mem, NUBUS_VIRTIO_MMIO_PIC_OFFSET,
+sysbus_mmio_get_region(sbd, 0));
+sysbus_connect_irq(sbd, 0,
+   qdev_get_gpio_in_named(dev, "pic-input-irq", 0));
+
+/* virtio-mmio devices */
+offset = NUBUS_VIRTIO_MMIO_DEV_OFFSET;
+for (i = 0; i < NUBUS_VIRTIO_MMIO_NUM_DEVICES; i++) {
+sbd = SYS_BUS_DEVICE(&s->virtio_mmio[i]);
+qdev_prop_set_bit(DEVICE(sbd), "force-legacy", false);
+if (!sysbus_realize_and_unref(sbd, errp)) {
+return;
+}
+
+memory_region_add_subregion(&nd->slot_mem, offset,
+sysbus_mmio_get_region(sbd, 0));
+offset += 0x200;
+
+sysbus_connect_irq(sbd, 0, qdev_get_gpio_in(DEVICE(&s->pic), i));
+}
+}
+
+static void nubus_virtio_mmio_init(Object *obj)
+{
+NubusVirtioMMIO *s = NUBUS_VIRTIO_MMIO(obj);
+int i;
+
+object_initialize_child(obj, "pic", &s->pic, TYPE_GOLDFISH_PIC);
+for (i = 0; i < NUBUS_VIRTIO_MMIO_NUM_DEVICES; i++) {
+char *name = g_strdup_printf("virtio-mmio[%d]", i);
+object_initialize_child(obj, name, &s->virtio_mmio[i],
+TYPE_VIRTIO_MMIO);
+g_free(name);
+}
+
+/* Input from goldfish PIC */
+qdev_init_gpio_in_named(DEVICE(obj), nubus_virtio_mmio_set_input_irq,
+"pic-input-irq", 1);
+}
+
+static void nubus_virtio_mmio_class_init(ObjectClass *oc, void *data)
+{
+DeviceClass *dc = DEVICE_CLASS(oc);
+NubusVirtioMMIODeviceClass *nvmdc = NUBUS_VIRTIO_MMIO_CLASS(oc);
+
+device_class_set_parent_realize(dc, nubus_virtio_mmio_realize,
+&nvmdc->parent_realize);
+}
+
+static const TypeInfo nubus_virtio_mmio_types[] = {
+{
+.name = TYPE_NUBUS_VIRTIO_MMIO,
+.parent = TYPE_NUBUS_DEVICE,

[PULL 07/30] hw/nubus-device: round Declaration ROM memory region address to qemu_target_page_size()

2024-02-27 Thread Philippe Mathieu-Daudé
From: Mark Cave-Ayland 

Declaration ROM binary images can be any arbitrary size, however if a host ROM
memory region is not aligned to qemu_target_page_size() then we fail the
"assert(!(iotlb & ~TARGET_PAGE_MASK))" check in tlb_set_page_full().

Ensure that the host ROM memory region is aligned to qemu_target_page_size()
and adjust the offset at which the Declaration ROM image is loaded, since Nubus
ROM images are unusual in that they are aligned to the end of the slot address
space.

Signed-off-by: Mark Cave-Ayland 
Reviewed-by: Philippe Mathieu-Daudé 
Reviewed-by: Laurent Vivier 
Message-ID: <2024002954.449462-2-mark.cave-ayl...@ilande.co.uk>
Signed-off-by: Philippe Mathieu-Daudé 
---
 hw/nubus/nubus-device.c | 18 ++
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/hw/nubus/nubus-device.c b/hw/nubus/nubus-device.c
index 49008e4938..be4cb24696 100644
--- a/hw/nubus/nubus-device.c
+++ b/hw/nubus/nubus-device.c
@@ -10,6 +10,7 @@
 
 #include "qemu/osdep.h"
 #include "qemu/datadir.h"
+#include "exec/target_page.h"
 #include "hw/irq.h"
 #include "hw/loader.h"
 #include "hw/nubus/nubus.h"
@@ -30,7 +31,8 @@ static void nubus_device_realize(DeviceState *dev, Error 
**errp)
 NubusDevice *nd = NUBUS_DEVICE(dev);
 char *name, *path;
 hwaddr slot_offset;
-int64_t size;
+int64_t size, align_size;
+uint8_t *rom_ptr;
 int ret;
 
 /* Super */
@@ -76,16 +78,24 @@ static void nubus_device_realize(DeviceState *dev, Error 
**errp)
 }
 
 name = g_strdup_printf("nubus-slot-%x-declaration-rom", nd->slot);
-memory_region_init_rom(&nd->decl_rom, OBJECT(dev), name, size,
+
+/*
+ * Ensure ROM memory region is aligned to target page size regardless
+ * of the size of the Declaration ROM image
+ */
+align_size = ROUND_UP(size, qemu_target_page_size());
+memory_region_init_rom(&nd->decl_rom, OBJECT(dev), name, align_size,
&error_abort);
-ret = load_image_mr(path, &nd->decl_rom);
+rom_ptr = memory_region_get_ram_ptr(&nd->decl_rom);
+ret = load_image_size(path, rom_ptr + (uintptr_t)(align_size - size),
+  size);
 g_free(path);
 g_free(name);
 if (ret < 0) {
 error_setg(errp, "could not load romfile \"%s\"", nd->romfile);
 return;
 }
-memory_region_add_subregion(&nd->slot_mem, NUBUS_SLOT_SIZE - size,
+memory_region_add_subregion(&nd->slot_mem, NUBUS_SLOT_SIZE - 
align_size,
 &nd->decl_rom);
 }
 }
-- 
2.41.0




[PULL 08/30] hw/nubus: increase maximum Declaration ROM size from 128k to 1Mb

2024-02-27 Thread Philippe Mathieu-Daudé
From: Mark Cave-Ayland 

Whilst 128k is more than enough for a typical Declaration ROM, a C compiler
configured to produce an unstripped debug binary can generate a ROM image that
exceeds this limit. Increase the maximum size to 1Mb to help make life easier
for developers.

Signed-off-by: Mark Cave-Ayland 
Reviewed-by: Laurent Vivier 
Message-ID: <2024002954.449462-3-mark.cave-ayl...@ilande.co.uk>
Signed-off-by: Philippe Mathieu-Daudé 
---
 include/hw/nubus/nubus.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/hw/nubus/nubus.h b/include/hw/nubus/nubus.h
index b3b4d2eadb..fee79b71d1 100644
--- a/include/hw/nubus/nubus.h
+++ b/include/hw/nubus/nubus.h
@@ -51,7 +51,7 @@ struct NubusBus {
 qemu_irq irqs[NUBUS_IRQS];
 };
 
-#define NUBUS_DECL_ROM_MAX_SIZE(128 * KiB)
+#define NUBUS_DECL_ROM_MAX_SIZE(1 * MiB)
 
 struct NubusDevice {
 DeviceState qdev;
-- 
2.41.0




[PULL 06/30] hw/sysbus: Remove now unused sysbus_address_space()

2024-02-27 Thread Philippe Mathieu-Daudé
sysbus_address_space() is not more used, remove it.

Signed-off-by: Philippe Mathieu-Daudé 
Reviewed-by: Richard Henderson 
Message-Id: <20240216153517.49422-7-phi...@linaro.org>
---
 include/hw/sysbus.h | 1 -
 hw/core/sysbus.c| 5 -
 2 files changed, 6 deletions(-)

diff --git a/include/hw/sysbus.h b/include/hw/sysbus.h
index 14dbc22d0c..3cb29a480e 100644
--- a/include/hw/sysbus.h
+++ b/include/hw/sysbus.h
@@ -83,7 +83,6 @@ void sysbus_mmio_map(SysBusDevice *dev, int n, hwaddr addr);
 void sysbus_mmio_map_overlap(SysBusDevice *dev, int n, hwaddr addr,
  int priority);
 void sysbus_mmio_unmap(SysBusDevice *dev, int n);
-MemoryRegion *sysbus_address_space(SysBusDevice *dev);
 
 bool sysbus_realize(SysBusDevice *dev, Error **errp);
 bool sysbus_realize_and_unref(SysBusDevice *dev, Error **errp);
diff --git a/hw/core/sysbus.c b/hw/core/sysbus.c
index 9f1d5b2d6d..ad34fb7344 100644
--- a/hw/core/sysbus.c
+++ b/hw/core/sysbus.c
@@ -298,11 +298,6 @@ static char *sysbus_get_fw_dev_path(DeviceState *dev)
 return g_strdup(qdev_fw_name(dev));
 }
 
-MemoryRegion *sysbus_address_space(SysBusDevice *dev)
-{
-return get_system_memory();
-}
-
 static void sysbus_device_class_init(ObjectClass *klass, void *data)
 {
 DeviceClass *k = DEVICE_CLASS(klass);
-- 
2.41.0




[PULL 05/30] hw/i386/kvmvapic: Inline sysbus_address_space()

2024-02-27 Thread Philippe Mathieu-Daudé
sysbus_address_space(...) is a simple wrapper to
get_system_memory(). Use it in place, since KVM
VAPIC doesn't distinct address spaces.

Rename the 'as' variable as 'mr' since it is a
MemoryRegion type, not an AddressSpace one.

Signed-off-by: Philippe Mathieu-Daudé 
Reviewed-by: Richard Henderson 
Message-Id: <20240216153517.49422-6-phi...@linaro.org>
---
 hw/i386/kvmvapic.c | 11 +--
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/hw/i386/kvmvapic.c b/hw/i386/kvmvapic.c
index 20b0300357..61a65ef2ab 100644
--- a/hw/i386/kvmvapic.c
+++ b/hw/i386/kvmvapic.c
@@ -58,6 +58,7 @@ typedef struct GuestROMState {
 
 struct VAPICROMState {
 SysBusDevice busdev;
+
 MemoryRegion io;
 MemoryRegion rom;
 uint32_t state;
@@ -581,19 +582,17 @@ static int vapic_map_rom_writable(VAPICROMState *s)
 {
 hwaddr rom_paddr = s->rom_state_paddr & ROM_BLOCK_MASK;
 MemoryRegionSection section;
-MemoryRegion *as;
+MemoryRegion *mr = get_system_memory();
 size_t rom_size;
 uint8_t *ram;
 
-as = sysbus_address_space(&s->busdev);
-
 if (s->rom_mapped_writable) {
-memory_region_del_subregion(as, &s->rom);
+memory_region_del_subregion(mr, &s->rom);
 object_unparent(OBJECT(&s->rom));
 }
 
 /* grab RAM memory region (region @rom_paddr may still be pc.rom) */
-section = memory_region_find(as, 0, 1);
+section = memory_region_find(mr, 0, 1);
 
 /* read ROM size from RAM region */
 if (rom_paddr + 2 >= memory_region_size(section.mr)) {
@@ -614,7 +613,7 @@ static int vapic_map_rom_writable(VAPICROMState *s)
 
 memory_region_init_alias(&s->rom, OBJECT(s), "kvmvapic-rom", section.mr,
  rom_paddr, rom_size);
-memory_region_add_subregion_overlap(as, rom_paddr, &s->rom, 1000);
+memory_region_add_subregion_overlap(mr, rom_paddr, &s->rom, 1000);
 s->rom_mapped_writable = true;
 memory_region_unref(section.mr);
 
-- 
2.41.0




[PULL 00/30] Misc HW patches for 2024-02-27

2024-02-27 Thread Philippe Mathieu-Daudé
The following changes since commit 03d496a992d98650315af41be7c0ca6de2a28da1:

  Merge tag 'pull-qapi-2024-02-26' of https://repo.or.cz/qemu/armbru into 
staging (2024-02-26 11:22:32 +)

are available in the Git repository at:

  https://github.com/philmd/qemu.git tags/hw-misc-20240227

for you to fetch changes up to 0316482e876988f7526ebe62d579ad069f485957:

  hw/ide: Include 'ide-internal.h' from current path (2024-02-27 09:37:30 +0100)


Misc HW patch queue

hw: Remove sysbus_address_space() (Phil)
hw/nubus: Add nubus-virtio-mmio device (Mark)
hw/usb: Remove usb_bus_find() (Paolo)
hw/usb: Extract sysbus-ohci from ohci (Paolo)
hw/nvme: Fix invalid endian conversion
hw/i386: More PC machine housekeeping (Bernhard, Phil)
hw/ide: Restrict "ide-internal.h" (Zoltan, Phil)
qom: Expose object_resolve_type_unambiguous() (Paolo)



BALATON Zoltan (1):
  hw/ide: Remove last two uses of ide/internal.h outside of hw/ide/

Bernhard Beschow (5):
  hw/i386/x86: Let ioapic_init_gsi() take parent as pointer
  hw/i386/pc: Rename "bus" attribute to "pcibus"
  hw/i386/pc_{piix, q35}: Eliminate local pci_bus/pci_host variables
  hw/i386/pc: Remove unneeded class attribute "kvmclock_enabled"
  hw/i386/pc: Populate RTC attribute directly

Klaus Jensen (1):
  hw/nvme: fix invalid endian conversion

Mark Cave-Ayland (3):
  hw/nubus-device: round Declaration ROM memory region address to
qemu_target_page_size()
  hw/nubus: increase maximum Declaration ROM size from 128k to 1Mb
  hw/nubus: add nubus-virtio-mmio device

Paolo Bonzini (10):
  hw/acpi: move object_resolve_type_unambiguous to core QOM
  hw/ppc/sam460ex: do not use usb_bus_find()
  hw/sh4/r2d: do not use usb_bus_find()
  hw/mips/loongson3_virt: do not require CONFIG_USB
  hw/hppa: do not require CONFIG_USB
  hw/ppc/mac_newworld: do not require CONFIG_USB
  hw/ppc/pseries: do not require CONFIG_USB
  hw/usb: remove usb_bus_find
  hw/usb: extract sysbus-ohci to a separate file
  hw/usb: remove duplicate file in system_ss

Philippe Mathieu-Daudé (10):
  hw/arm: Inline sysbus_create_simple(PL110 / PL111)
  hw/display/pl110: Pass frame buffer memory region as link property
  hw/arm/exynos4210: Inline sysbus_create_varargs(EXYNOS4210_FIMD)
  hw/display/exynos4210_fimd: Pass frame buffer memory region as link
  hw/i386/kvmvapic: Inline sysbus_address_space()
  hw/sysbus: Remove now unused sysbus_address_space()
  hw/i386/sgx: Use QDev API
  hw/i386/q35: Include missing 'hw/acpi/acpi.h' header
  hw/arm/sbsa-ref: Do not open-code ahci_ide_create_devs()
  hw/ide: Include 'ide-internal.h' from current path

 hw/ide/ahci_internal.h|   2 +-
 .../ide/internal.h => hw/ide/ide-internal.h   |   0
 include/hw/i386/pc.h  |   3 +-
 include/hw/i386/x86.h |   2 +-
 include/hw/misc/macio/macio.h |   2 +-
 include/hw/nubus/nubus-virtio-mmio.h  |  36 +++
 include/hw/nubus/nubus.h  |   2 +-
 include/hw/sysbus.h   |   1 -
 include/hw/usb.h  |   1 -
 include/qom/object.h  |  13 +++
 hw/arm/exynos4210.c   |  14 ++-
 hw/arm/integratorcp.c |   7 +-
 hw/arm/realview.c |   7 +-
 hw/arm/sbsa-ref.c |  13 +--
 hw/arm/versatilepb.c  |   8 +-
 hw/arm/vexpress.c |  15 ++-
 hw/core/sysbus.c  |   5 -
 hw/display/exynos4210_fimd.c  |  19 +++-
 hw/display/pl110.c|  20 +++-
 hw/hppa/machine.c |  10 +-
 hw/i386/acpi-build.c  |  22 ++--
 hw/i386/amd_iommu.c   |   2 +-
 hw/i386/intel_iommu.c |   2 +-
 hw/i386/kvm/xen_evtchn.c  |   2 +-
 hw/i386/kvmvapic.c|  11 +-
 hw/i386/microvm.c |   2 +-
 hw/i386/pc.c  |  17 +--
 hw/i386/pc_piix.c |  42 
 hw/i386/pc_q35.c  |  26 +++--
 hw/i386/sgx.c |  14 ++-
 hw/i386/x86-iommu.c   |   2 +-
 hw/i386/x86.c |   7 +-
 hw/ide/ahci.c |   2 +-
 hw/ide/atapi.c|   2 +-
 hw/ide/cmd646.c   |   2 +-
 hw/ide/core.c |   2 +-
 hw/ide/ide-bus.c  |   2 +-
 hw/ide/ide-dev.c  |   2 +-
 hw/ide/ioport.c

Re: [PATCH v3 0/3] hw/ide: Make "ide_internal.h" really internal

2024-02-27 Thread Philippe Mathieu-Daudé

On 26/2/24 09:06, Philippe Mathieu-Daudé wrote:

Missing review: 3



BALATON Zoltan (1):
   hw/ide: Remove last two uses of ide/internal.h outside of hw/ide/

Philippe Mathieu-Daudé (2):
   hw/arm/sbsa-ref: Do not open-code ahci_ide_create_devs()
   hw/ide: Include 'ide_internal.h' from current path


Series queued.