All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bernhard Beschow <shentey@gmail.com>
To: qemu-devel@nongnu.org
Cc: "Philippe Mathieu-Daudé" <f4bug@amsat.org>,
	"Hervé Poussineau" <hpoussin@reactos.org>,
	"Aurelien Jarno" <aurelien@aurel32.net>,
	"Paolo Bonzini" <pbonzini@redhat.com>,
	"Eduardo Habkost" <eduardo@habkost.net>,
	"Richard Henderson" <richard.henderson@linaro.org>,
	"Jiaxun Yang" <jiaxun.yang@flygoat.com>,
	"Ani Sinha" <ani@anisinha.ca>,
	"Igor Mammedov" <imammedo@redhat.com>,
	"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	"Bernhard Beschow" <shentey@gmail.com>
Subject: [PATCH 09/42] hw/isa/piix3: Create IDE controller in host device
Date: Thu,  1 Sep 2022 18:25:40 +0200	[thread overview]
Message-ID: <20220901162613.6939-10-shentey@gmail.com> (raw)
In-Reply-To: <20220901162613.6939-1-shentey@gmail.com>

Now that PIIX3 contains the new isa-pic, it is possible to instantiate
PIIX3 IDE in the PIIX3 southbridge. PIIX3 IDE wires up its interrupts to
the ISA bus in its realize method which requires the interrupt
controller to provide fully populated qemu_irqs. This is the case for
isa-pic even though the virtualization technology not known yet.

Signed-off-by: Bernhard Beschow <shentey@gmail.com>
---
 hw/i386/Kconfig               |  1 -
 hw/i386/pc_piix.c             | 14 ++++++--------
 hw/isa/Kconfig                |  1 +
 hw/isa/piix3.c                |  7 +++++++
 include/hw/southbridge/piix.h |  2 ++
 5 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/hw/i386/Kconfig b/hw/i386/Kconfig
index d22ac4a4b9..dd247f215c 100644
--- a/hw/i386/Kconfig
+++ b/hw/i386/Kconfig
@@ -74,7 +74,6 @@ config I440FX
     select ACPI_SMBUS
     select PCI_I440FX
     select PIIX3
-    select IDE_PIIX
     select DIMM
     select SMBIOS
     select FW_CFG_DMA
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index b7fcafb77e..c76afbc7e3 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -85,7 +85,6 @@ static void pc_init1(MachineState *machine,
     PCIBus *pci_bus;
     ISABus *isa_bus;
     Object *piix4_pm;
-    int piix3_devfn = -1;
     qemu_irq smi_irq;
     GSIState *gsi_state;
     BusState *idebus[MAX_IDE_BUS];
@@ -235,11 +234,14 @@ static void pc_init1(MachineState *machine,
         for (i = 0; i < ISA_NUM_IRQS; i++) {
             qdev_connect_gpio_out(dev, i, x86ms->gsi[i]);
         }
-        piix3_devfn = pci_dev->devfn;
         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"));
         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));
+        idebus[0] = qdev_get_child_bus(dev, "ide.0");
+        idebus[1] = qdev_get_child_bus(dev, "ide.1");
     } else {
         pci_bus = NULL;
         piix4_pm = NULL;
@@ -253,6 +255,8 @@ static void pc_init1(MachineState *machine,
 
         i8257_dma_init(isa_bus, 0);
         pcms->hpet_enabled = false;
+        idebus[0] = NULL;
+        idebus[1] = NULL;
     }
 
     if (x86ms->pic == ON_OFF_AUTO_ON || x86ms->pic == ON_OFF_AUTO_AUTO) {
@@ -281,12 +285,6 @@ static void pc_init1(MachineState *machine,
     pc_nic_init(pcmc, isa_bus, pci_bus);
 
     if (pcmc->pci_enabled) {
-        PCIDevice *dev;
-
-        dev = pci_create_simple(pci_bus, piix3_devfn + 1, "piix3-ide");
-        pci_ide_create_devs(dev);
-        idebus[0] = qdev_get_child_bus(&dev->qdev, "ide.0");
-        idebus[1] = qdev_get_child_bus(&dev->qdev, "ide.1");
         pc_cmos_init(pcms, idebus[0], idebus[1], rtc_state);
     }
 #ifdef CONFIG_IDE_ISA
diff --git a/hw/isa/Kconfig b/hw/isa/Kconfig
index 24e79a9a41..a021e1cbfc 100644
--- a/hw/isa/Kconfig
+++ b/hw/isa/Kconfig
@@ -36,6 +36,7 @@ config PIIX3
     select ACPI_PIIX4
     select I8257
     select I8259
+    select IDE_PIIX
     select ISA_BUS
     select MC146818RTC
     select USB_UHCI
diff --git a/hw/isa/piix3.c b/hw/isa/piix3.c
index 39d8cb787f..0e86a9a3cb 100644
--- a/hw/isa/piix3.c
+++ b/hw/isa/piix3.c
@@ -328,6 +328,12 @@ static void pci_piix3_realize(PCIDevice *dev, Error **errp)
         return;
     }
 
+    /* IDE */
+    qdev_prop_set_int32(DEVICE(&d->ide), "addr", dev->devfn + 1);
+    if (!qdev_realize(DEVICE(&d->ide), BUS(pci_bus), errp)) {
+        return;
+    }
+
     /* USB */
     if (d->has_usb) {
         object_initialize_child(OBJECT(dev), "uhci", &d->uhci,
@@ -369,6 +375,7 @@ static void pci_piix3_init(Object *obj)
 
     object_initialize_child(obj, "pic", &d->pic, TYPE_ISA_PIC);
     object_initialize_child(obj, "rtc", &d->rtc, TYPE_MC146818_RTC);
+    object_initialize_child(obj, "ide", &d->ide, "piix3-ide");
 }
 
 static Property pci_piix3_props[] = {
diff --git a/include/hw/southbridge/piix.h b/include/hw/southbridge/piix.h
index 7178147b75..1f22eb1444 100644
--- a/include/hw/southbridge/piix.h
+++ b/include/hw/southbridge/piix.h
@@ -15,6 +15,7 @@
 #include "hw/pci/pci.h"
 #include "qom/object.h"
 #include "hw/acpi/piix4.h"
+#include "hw/ide/pci.h"
 #include "hw/intc/i8259.h"
 #include "hw/rtc/mc146818rtc.h"
 #include "hw/usb/hcd-uhci.h"
@@ -56,6 +57,7 @@ struct PIIXState {
 
     ISAPICState pic;
     RTCState rtc;
+    PCIIDEState ide;
     UHCIState uhci;
     PIIX4PMState pm;
 
-- 
2.37.3



  parent reply	other threads:[~2022-09-01 16:36 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-01 16:25 [PATCH 00/42] Consolidate PIIX south bridges Bernhard Beschow
2022-09-01 16:25 ` [PATCH 01/42] hw/i386/pc: Create DMA controllers in " Bernhard Beschow
2022-09-01 19:08   ` Philippe Mathieu-Daudé via
2022-09-01 16:25 ` [PATCH 02/42] hw/i386/pc: Create RTC " Bernhard Beschow
2022-09-01 16:25 ` [PATCH 03/42] hw/i386/pc: No need for rtc_state to be an out-parameter Bernhard Beschow
2022-09-01 16:25 ` [PATCH 04/42] hw/i386/pc_piix: Allow for setting properties before realizing PIIX3 south bridge Bernhard Beschow
2022-09-01 16:25 ` [PATCH 05/42] hw/isa/piix3: Create USB controller in host device Bernhard Beschow
2022-09-01 19:13   ` Philippe Mathieu-Daudé via
2022-09-18 21:46     ` Bernhard Beschow
2022-09-01 16:25 ` [PATCH 06/42] hw/isa/piix3: Create power management " Bernhard Beschow
2022-09-01 16:25 ` [PATCH 07/42] hw/intc/i8259: Introduce i8259 proxy "isa-pic" Bernhard Beschow
2022-09-18 19:38   ` Mark Cave-Ayland
2022-09-01 16:25 ` [PATCH 08/42] hw/isa/piix3: Create ISA PIC in host device Bernhard Beschow
2022-09-01 16:25 ` Bernhard Beschow [this message]
2022-09-01 16:25 ` [PATCH 10/42] hw/isa/piix3: Wire up ACPI interrupt internally Bernhard Beschow
2022-09-01 16:25 ` [PATCH 11/42] hw/isa/piix3: Remove extra ';' outside of functions Bernhard Beschow
2022-09-01 20:26   ` [PATCH 11/42] hw/isa/piix3: Remove extra '; ' " Philippe Mathieu-Daudé via
2022-09-01 16:25 ` [PATCH 12/42] hw/isa/piix3: Remove unused include Bernhard Beschow
2022-09-01 16:25 ` [PATCH 13/42] hw/isa/piix3: Add size constraints to rcr_ops Bernhard Beschow
2022-09-01 23:12   ` Philippe Mathieu-Daudé via
2022-09-01 16:25 ` [PATCH 14/42] hw/isa/piix3: Modernize reset handling Bernhard Beschow
2022-09-01 20:33   ` Philippe Mathieu-Daudé via
2022-09-18 19:44   ` Mark Cave-Ayland
2022-09-01 16:25 ` [PATCH 15/42] hw/isa/piix3: Prefer pci_address_space() over get_system_memory() Bernhard Beschow
2022-09-01 20:33   ` Philippe Mathieu-Daudé via
2022-09-01 16:25 ` [PATCH 16/42] hw/isa/piix3: Allow board to provide PCI interrupt routes Bernhard Beschow
2022-09-01 16:25 ` [PATCH 17/42] hw/isa/piix3: Resolve redundant PIIX_NUM_PIC_IRQS Bernhard Beschow
2022-09-01 16:25 ` [PATCH 18/42] hw/isa/piix3: Rename pci_piix3_props for sharing with PIIX4 Bernhard Beschow
2022-09-01 16:25 ` [PATCH 19/42] hw/isa/piix3: Rename piix3_reset() " Bernhard Beschow
2022-09-01 16:25 ` [PATCH 20/42] hw/isa/piix3: Prefix pci_slot_get_pirq() with "piix3_" Bernhard Beschow
2022-09-01 16:25 ` [PATCH 21/42] hw/isa/piix3: Rename typedef PIIX3State to PIIXState Bernhard Beschow
2022-09-01 16:25 ` [PATCH 22/42] hw/mips/malta: Reuse dev variable Bernhard Beschow
2022-09-01 20:53   ` Philippe Mathieu-Daudé via
2022-09-01 16:25 ` [PATCH 23/42] meson: Fix dependencies of piix4 southbridge Bernhard Beschow
2022-09-01 16:25 ` [PATCH 24/42] hw/isa/piix4: Add missing initialization Bernhard Beschow
2022-09-01 16:25 ` [PATCH 25/42] hw/isa/piix4: Move pci_ide_create_devs() call to board code Bernhard Beschow
2022-09-01 20:54   ` Philippe Mathieu-Daudé via
2022-09-01 16:25 ` [PATCH 26/42] hw/isa/piix4: Make PIIX4's ACPI and USB functions optional Bernhard Beschow
2022-09-18 20:10   ` Mark Cave-Ayland
2022-09-18 21:47     ` Bernhard Beschow
2022-09-01 16:25 ` [PATCH 27/42] hw/isa/piix4: Allow board to provide PCI interrupt routes Bernhard Beschow
2022-09-01 20:57   ` Philippe Mathieu-Daudé via
2022-09-01 16:25 ` [PATCH 28/42] hw/isa/piix4: Remove unused code Bernhard Beschow
2022-09-01 16:26 ` [PATCH 29/42] hw/isa/piix4: Use ISA PIC device Bernhard Beschow
2022-09-01 16:26 ` [PATCH 30/42] hw/isa/piix4: Reuse struct PIIXState from PIIX3 Bernhard Beschow
2022-09-01 16:26 ` [PATCH 31/42] hw/isa/piix4: Rename reset control operations to match PIIX3 Bernhard Beschow
2022-09-01 16:26 ` [PATCH 32/42] hw/isa/piix4: Rename wrongly named method Bernhard Beschow
2022-09-01 20:58   ` Philippe Mathieu-Daudé via
2022-09-01 16:26 ` [PATCH 33/42] hw/isa/piix4: Prefix pci_slot_get_pirq() with "piix4_" Bernhard Beschow
2022-09-01 16:26 ` [PATCH 34/42] hw/isa/piix3: Merge hw/isa/piix4.c Bernhard Beschow
2022-09-01 16:26 ` [PATCH 35/42] hw/isa/piix: Harmonize names of reset control memory regions Bernhard Beschow
2022-09-01 16:26 ` [PATCH 36/42] hw/isa/piix: Reuse PIIX3 base class' realize method in PIIX4 Bernhard Beschow
2022-09-01 16:26 ` [PATCH 37/42] hw/isa/piix: Rename functions to be shared for interrupt triggering Bernhard Beschow
2022-09-01 16:26 ` [PATCH 38/42] hw/isa/piix: Consolidate IRQ triggering Bernhard Beschow
2022-09-01 16:26 ` [PATCH 39/42] hw/isa/piix: Unexport PIIXState Bernhard Beschow
2022-09-18 20:21   ` Mark Cave-Ayland
2022-09-18 21:31     ` Bernhard Beschow
2022-09-01 16:26 ` [PATCH 40/42] hw/isa/piix: Share PIIX3 base class with PIIX4 Bernhard Beschow
2022-09-01 16:26 ` [PATCH 41/42] hw/isa/piix: Drop the "3" from the PIIX base class Bernhard Beschow
2022-09-01 16:26 ` [PATCH 42/42] hw/i386/acpi-build: Resolve PIIX ISA bridge rather than ACPI controller Bernhard Beschow
2022-09-01 21:05   ` Philippe Mathieu-Daudé via
2022-09-08 20:30     ` Bernhard Beschow
2022-09-08  8:39 ` [PATCH 00/42] Consolidate PIIX south bridges Bernhard Beschow
2022-09-18 20:22 ` Mark Cave-Ayland
2022-09-18 22:30   ` Bernhard Beschow

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220901162613.6939-10-shentey@gmail.com \
    --to=shentey@gmail.com \
    --cc=ani@anisinha.ca \
    --cc=aurelien@aurel32.net \
    --cc=eduardo@habkost.net \
    --cc=f4bug@amsat.org \
    --cc=hpoussin@reactos.org \
    --cc=imammedo@redhat.com \
    --cc=jiaxun.yang@flygoat.com \
    --cc=marcel.apfelbaum@gmail.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.