From: Bernhard Beschow <shentey@gmail.com>
To: qemu-devel@nongnu.org
Cc: "Eduardo Habkost" <eduardo@habkost.net>,
"Hervé Poussineau" <hpoussin@reactos.org>,
"Aurelien Jarno" <aurelien@aurel32.net>,
"Igor Mammedov" <imammedo@redhat.com>,
"Gerd Hoffmann" <kraxel@redhat.com>,
"John Snow" <jsnow@redhat.com>,
"Jiaxun Yang" <jiaxun.yang@flygoat.com>,
"Ani Sinha" <ani@anisinha.ca>,
"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
qemu-block@nongnu.org,
"Richard Henderson" <richard.henderson@linaro.org>,
"Philippe Mathieu-Daudé" <f4bug@amsat.org>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"Michael S. Tsirkin" <mst@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Bernhard Beschow" <shentey@gmail.com>
Subject: [PATCH v2 00/43] Consolidate PIIX south bridges
Date: Sat, 22 Oct 2022 17:04:25 +0200 [thread overview]
Message-ID: <20221022150508.26830-1-shentey@gmail.com> (raw)
This series consolidates the implementations of the PIIX3 and PIIX4 south
bridges and is an extended version of [1]. The motivation is to share as much
code as possible and to bring both device models to feature parity such that
perhaps PIIX4 can become a drop-in-replacement for PIIX3 in the pc machine. This
could resolve the "Frankenstein" PIIX4-PM problem in PIIX3 discussed on this
list before.
The series is structured as follows: First, PIIX3 is changed to instantiate
internal devices itself, like PIIX4 does already. Second, PIIX3 gets prepared
for the merge with PIIX4 which includes some fixes, cleanups, and renamings.
Third, the same is done for PIIX4. In step four the implementations are merged.
Since some consolidations could be done easier with merged implementations, the
consolidation continues in step five which concludes the series.
One particular challenge in this series was that the PIC of PIIX3 used to be
instantiated outside of the south bridge while some sub functions require a PIC
with populated qemu_irqs. This has been solved by introducing a proxy PIC which
furthermore allows PIIX3 to be agnostic towards the virtualization technology
used (KVM, TCG, Xen). Due to consolidation PIIX4 gained the PIC as well,
possibly allowing the Malta board to gain KVM capabilities in the future.
Another challenge was dealing with optional devices where Peter already gave
advice in [1] which this series implements.
A challenge still remains with consolidating PCI interrupt handling. There are
still board-specific piix3_pci_slot_get_pirq() and piix4_pci_slot_get_pirq()
which are implemented in isa/piix.c. Any advice how to resolve these would be
highly appreaciated.
Last but not least there might be some opportunity to consolidate VM state
handling, probably by reusing the one from PIIX3. Since I'm not very familiar
with the requirements I didn't touch it so far.
Testing done:
* make check
* make check-avocado
* Boot live CD:
* `qemu-system-x86_64 -M pc -m 2G -accel kvm -cpu host -cdrom manjaro-kde-21.3.2-220704-linux515.iso`
* `qemu-system-x86_64 -M q35 -m 2G -accel kvm -cpu host -cdrom manjaro-kde-21.3.2-220704-linux515.iso`
* 'qemu-system-mips64el -M malta -kernel vmlinux-3.2.0-4-5kc-malta -hda debian_wheezy_mipsel_standard.qcow2 -append "root=/dev/sda1 console=tty0"`
[1] https://lists.nongnu.org/archive/html/qemu-devel/2022-07/msg02348.html
v2:
- Introduce TYPE_ defines for IDE and USB device models (Mark)
- Omit unexporting of PIIXState (Mark)
- Improve commit message of patch 5 to mention reset triggering through PCI
configuration space (Mark)
- Move reviewed patches w/o dependencies to the bottom of the series for early
upstreaming -> @Michael?
Bernhard Beschow (43):
hw/i386/pc: Create DMA controllers in south bridges
hw/i386/pc_piix: Allow for setting properties before realizing PIIX3
south bridge
hw/isa/piix3: Remove extra ';' outside of functions
hw/isa/piix3: Add size constraints to rcr_ops
hw/isa/piix3: Modernize reset handling
hw/isa/piix3: Prefer pci_address_space() over get_system_memory()
hw/isa/piix4: Rename wrongly named method
hw/ide/piix: Introduce TYPE_ macros for PIIX IDE controllers
hw/usb/hcd-uhci: Introduce TYPE_ defines for device models
hw/i386/pc: Create RTC controllers in south bridges
hw/i386/pc: No need for rtc_state to be an out-parameter
hw/isa/piix3: Create USB controller in host device
hw/isa/piix3: Create power management controller in host device
hw/intc/i8259: Introduce i8259 proxy "isa-pic"
hw/isa/piix3: Create ISA PIC in host device
hw/isa/piix3: Create IDE controller in host device
hw/isa/piix3: Wire up ACPI interrupt internally
hw/isa/piix3: Remove unused include
hw/isa/piix3: Allow board to provide PCI interrupt routes
hw/isa/piix3: Resolve redundant PIIX_NUM_PIC_IRQS
hw/isa/piix3: Rename pci_piix3_props for sharing with PIIX4
hw/isa/piix3: Rename piix3_reset() for sharing with PIIX4
hw/isa/piix3: Prefix pci_slot_get_pirq() with "piix3_"
hw/isa/piix3: Rename typedef PIIX3State to PIIXState
hw/mips/malta: Reuse dev variable
meson: Fix dependencies of piix4 southbridge
hw/isa/piix4: Add missing initialization
hw/isa/piix4: Move pci_ide_create_devs() call to board code
hw/isa/piix4: Make PIIX4's ACPI and USB functions optional
hw/isa/piix4: Allow board to provide PCI interrupt routes
hw/isa/piix4: Remove unused code
hw/isa/piix4: Use ISA PIC device
hw/isa/piix4: Reuse struct PIIXState from PIIX3
hw/isa/piix4: Rename reset control operations to match PIIX3
hw/isa/piix4: Prefix pci_slot_get_pirq() with "piix4_"
hw/isa/piix3: Merge hw/isa/piix4.c
hw/isa/piix: Harmonize names of reset control memory regions
hw/isa/piix: Reuse PIIX3 base class' realize method in PIIX4
hw/isa/piix: Rename functions to be shared for interrupt triggering
hw/isa/piix: Consolidate IRQ triggering
hw/isa/piix: Share PIIX3 base class with PIIX4
hw/isa/piix: Drop the "3" from the PIIX base class
hw/i386/acpi-build: Resolve PIIX ISA bridge rather than ACPI
controller
MAINTAINERS | 6 +-
configs/devices/mips-softmmu/common.mak | 3 +-
hw/i386/Kconfig | 3 +-
hw/i386/acpi-build.c | 4 +-
hw/i386/pc.c | 19 +-
hw/i386/pc_piix.c | 72 ++---
hw/i386/pc_q35.c | 16 +-
hw/ide/piix.c | 5 +-
hw/intc/i8259.c | 27 ++
hw/isa/Kconfig | 14 +-
hw/isa/lpc_ich9.c | 11 +
hw/isa/meson.build | 3 +-
hw/isa/{piix3.c => piix.c} | 337 ++++++++++++++++++------
hw/isa/piix4.c | 325 -----------------------
hw/mips/malta.c | 34 ++-
hw/usb/hcd-uhci.c | 16 +-
hw/usb/hcd-uhci.h | 9 +
include/hw/i386/ich9.h | 2 +
include/hw/i386/pc.h | 2 +-
include/hw/ide/piix.h | 7 +
include/hw/intc/i8259.h | 14 +
include/hw/southbridge/piix.h | 33 ++-
22 files changed, 473 insertions(+), 489 deletions(-)
rename hw/isa/{piix3.c => piix.c} (51%)
delete mode 100644 hw/isa/piix4.c
create mode 100644 include/hw/ide/piix.h
--
2.38.1
next reply other threads:[~2022-10-23 20:13 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-22 15:04 Bernhard Beschow [this message]
2022-10-22 15:04 ` [PATCH v2 01/43] hw/i386/pc: Create DMA controllers in south bridges Bernhard Beschow
2022-10-22 15:04 ` [PATCH v2 02/43] hw/i386/pc_piix: Allow for setting properties before realizing PIIX3 south bridge Bernhard Beschow
2022-10-22 15:04 ` [PATCH v2 03/43] hw/isa/piix3: Remove extra ';' outside of functions Bernhard Beschow
2022-10-22 15:04 ` [PATCH v2 04/43] hw/isa/piix3: Add size constraints to rcr_ops Bernhard Beschow
2022-10-22 15:04 ` [PATCH v2 05/43] hw/isa/piix3: Modernize reset handling Bernhard Beschow
2022-10-22 15:04 ` [PATCH v2 06/43] hw/isa/piix3: Prefer pci_address_space() over get_system_memory() Bernhard Beschow
2022-10-22 15:04 ` [PATCH v2 07/43] hw/isa/piix4: Rename wrongly named method Bernhard Beschow
2022-10-22 15:04 ` [PATCH v2 08/43] hw/ide/piix: Introduce TYPE_ macros for PIIX IDE controllers Bernhard Beschow
2022-10-25 23:30 ` Philippe Mathieu-Daudé
2022-10-22 15:04 ` [PATCH v2 09/43] hw/usb/hcd-uhci: Introduce TYPE_ defines for device models Bernhard Beschow
2022-10-27 20:57 ` Philippe Mathieu-Daudé
2022-10-22 15:04 ` [PATCH v2 10/43] hw/i386/pc: Create RTC controllers in south bridges Bernhard Beschow
2022-10-22 15:04 ` [PATCH v2 11/43] hw/i386/pc: No need for rtc_state to be an out-parameter Bernhard Beschow
2022-10-22 15:04 ` [PATCH v2 12/43] hw/isa/piix3: Create USB controller in host device Bernhard Beschow
2022-10-22 15:04 ` [PATCH v2 13/43] hw/isa/piix3: Create power management " Bernhard Beschow
2022-10-22 15:04 ` [PATCH v2 14/43] hw/intc/i8259: Introduce i8259 proxy "isa-pic" Bernhard Beschow
2022-10-24 7:35 ` Philippe Mathieu-Daudé
2022-10-26 19:56 ` B
2022-10-22 15:04 ` [PATCH v2 15/43] hw/isa/piix3: Create ISA PIC in host device Bernhard Beschow
2022-10-22 15:04 ` [PATCH v2 16/43] hw/isa/piix3: Create IDE controller " Bernhard Beschow
2022-10-22 15:04 ` [PATCH v2 17/43] hw/isa/piix3: Wire up ACPI interrupt internally Bernhard Beschow
2022-10-22 15:04 ` [PATCH v2 18/43] hw/isa/piix3: Remove unused include Bernhard Beschow
2022-10-23 21:05 ` Philippe Mathieu-Daudé
2022-10-22 15:04 ` [PATCH v2 19/43] hw/isa/piix3: Allow board to provide PCI interrupt routes Bernhard Beschow
2022-10-24 5:12 ` Philippe Mathieu-Daudé
2022-10-25 23:34 ` Philippe Mathieu-Daudé
2022-10-26 9:45 ` Bernhard Beschow
2022-10-22 15:04 ` [PATCH v2 20/43] hw/isa/piix3: Resolve redundant PIIX_NUM_PIC_IRQS Bernhard Beschow
2022-10-22 15:04 ` [PATCH v2 21/43] hw/isa/piix3: Rename pci_piix3_props for sharing with PIIX4 Bernhard Beschow
2022-10-24 5:08 ` Philippe Mathieu-Daudé
2022-10-22 15:04 ` [PATCH v2 22/43] hw/isa/piix3: Rename piix3_reset() " Bernhard Beschow
2022-10-24 5:08 ` Philippe Mathieu-Daudé
2022-10-22 15:04 ` [PATCH v2 23/43] hw/isa/piix3: Prefix pci_slot_get_pirq() with "piix3_" Bernhard Beschow
2022-10-24 5:07 ` Philippe Mathieu-Daudé
2022-10-22 15:04 ` [PATCH v2 24/43] hw/isa/piix3: Rename typedef PIIX3State to PIIXState Bernhard Beschow
2022-10-24 5:07 ` Philippe Mathieu-Daudé
2022-10-22 15:04 ` [PATCH v2 25/43] hw/mips/malta: Reuse dev variable Bernhard Beschow
2022-10-24 5:07 ` Philippe Mathieu-Daudé
2022-10-22 15:04 ` [PATCH v2 26/43] meson: Fix dependencies of piix4 southbridge Bernhard Beschow
2022-10-22 15:04 ` [PATCH v2 27/43] hw/isa/piix4: Add missing initialization Bernhard Beschow
2022-10-22 15:04 ` [PATCH v2 28/43] hw/isa/piix4: Move pci_ide_create_devs() call to board code Bernhard Beschow
2022-10-22 15:04 ` [PATCH v2 29/43] hw/isa/piix4: Make PIIX4's ACPI and USB functions optional Bernhard Beschow
2022-10-22 15:04 ` [PATCH v2 30/43] hw/isa/piix4: Allow board to provide PCI interrupt routes Bernhard Beschow
2022-10-22 15:04 ` [PATCH v2 31/43] hw/isa/piix4: Remove unused code Bernhard Beschow
2022-10-22 15:04 ` [PATCH v2 32/43] hw/isa/piix4: Use ISA PIC device Bernhard Beschow
2022-10-22 15:04 ` [PATCH v2 33/43] hw/isa/piix4: Reuse struct PIIXState from PIIX3 Bernhard Beschow
2022-10-22 15:04 ` [PATCH v2 34/43] hw/isa/piix4: Rename reset control operations to match PIIX3 Bernhard Beschow
2022-10-24 5:20 ` Philippe Mathieu-Daudé
2022-10-22 15:05 ` [PATCH v2 35/43] hw/isa/piix4: Prefix pci_slot_get_pirq() with "piix4_" Bernhard Beschow
2022-10-22 15:05 ` [PATCH v2 36/43] hw/isa/piix3: Merge hw/isa/piix4.c Bernhard Beschow
2022-10-22 15:05 ` [PATCH v2 37/43] hw/isa/piix: Harmonize names of reset control memory regions Bernhard Beschow
2022-10-24 5:21 ` Philippe Mathieu-Daudé
2022-10-22 15:05 ` [PATCH v2 38/43] hw/isa/piix: Reuse PIIX3 base class' realize method in PIIX4 Bernhard Beschow
2022-10-22 15:05 ` [PATCH v2 39/43] hw/isa/piix: Rename functions to be shared for interrupt triggering Bernhard Beschow
2022-10-22 15:05 ` [PATCH v2 40/43] hw/isa/piix: Consolidate IRQ triggering Bernhard Beschow
2022-10-22 15:05 ` [PATCH v2 41/43] hw/isa/piix: Share PIIX3 base class with PIIX4 Bernhard Beschow
2022-10-22 15:05 ` [PATCH v2 42/43] hw/isa/piix: Drop the "3" from the PIIX base class Bernhard Beschow
2022-10-22 15:05 ` [PATCH v2 43/43] hw/i386/acpi-build: Resolve PIIX ISA bridge rather than ACPI controller 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=20221022150508.26830-1-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=jsnow@redhat.com \
--cc=kraxel@redhat.com \
--cc=marcel.apfelbaum@gmail.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=philmd@linaro.org \
--cc=qemu-block@nongnu.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).