From patchwork Sun Feb 12 12:37:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bernhard Beschow X-Patchwork-Id: 13137406 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 0012CC636D3 for ; Sun, 12 Feb 2023 12:39:35 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pRBdD-0007b9-9X; Sun, 12 Feb 2023 07:39:00 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pRBcx-0007Z3-LW; Sun, 12 Feb 2023 07:38:43 -0500 Received: from mail-ej1-x634.google.com ([2a00:1450:4864:20::634]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pRBcu-0001IL-D6; Sun, 12 Feb 2023 07:38:43 -0500 Received: by mail-ej1-x634.google.com with SMTP id rp23so25842752ejb.7; Sun, 12 Feb 2023 04:38:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=ltcxifq61V4rDMel4CBHsMiq2/OUsO7+K0soBC8TVN0=; b=KJIm/2i/WgflfeDbvGJfuBn4toj0pPgExD8g8wjWkY86F2VhEPYHWfCHX599NQFnlh XN8NyKeKn2UxltziChyHhGjCEgSdnaxTnjR+SnfsK/r9EUTlrw2OJcVb1Mv+rAEtjp7a Q+o0YwCU0XIX7vah+UJa0K0AsSP7vIRi7cEw1ggesMXdRC8XUYuwmirNjTAf7RTiS/TN 5VYSpS9D1XVMJnGl+Yjo9JQgkT8IyeQO7YEdta2UUDB+x2rKf5R0c+apjeyPaM/MS+Lk DOe2aLK6Uj9IExYvMxVRRRC2fhWt6tv+Uyriu6LZj0zeNyr1GC1PdoBEcZpd0E5zwpsw LKuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=ltcxifq61V4rDMel4CBHsMiq2/OUsO7+K0soBC8TVN0=; b=vE9+AqPfQ1RBbjAQCuxjez+ntmELPinIbPgKb+tGTwMUyfxnKN486OkVzhpFS7rVyH QifCrbU91xFLivbI2fdU4BaKrh1HhdLWggju1wLcQyZBQZaRikRjgh4KJCCotKH4qVC2 005ic5gKROWWdrK0lcrJziXUEh8IbTkYKIz70ExyJdT1zi5A6kQi0tsbBAQZHgWktrIT Ik39edEH94DgyDsCtGE72tNkQDLnO2FOePHjUPYlEvKkXmxs7ghEiWjdozEN3Zl5kMaH BxrewbsHZiavBG1S6+l+PEjrY+MLChUHzy3oIKw0/PJIl2CRhXenQM4u8Ew6/L+bUl1z PHqA== X-Gm-Message-State: AO0yUKU5qO31EctipxljQPAr6N5sDaPhC/iFR/pS4khoTRzneQifi6gf f/2X7Mo49S0f+tdLT4czspLWJyqVH1k= X-Google-Smtp-Source: AK7set83exuNgP5ptDTO/++1m2/rnDJrTdm7v6XCAxFiwdfjQVp+3jP1GgblpdepviRu5oUKsqfa6g== X-Received: by 2002:a17:906:c401:b0:88d:ba89:1837 with SMTP id u1-20020a170906c40100b0088dba891837mr16759280ejz.8.1676205516618; Sun, 12 Feb 2023 04:38:36 -0800 (PST) Received: from localhost.localdomain (dynamic-077-011-172-153.77.11.pool.telefonica.de. [77.11.172.153]) by smtp.gmail.com with ESMTPSA id qw14-20020a170906fcae00b008af1f1bee79sm5233164ejb.9.2023.02.12.04.38.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Feb 2023 04:38:36 -0800 (PST) From: Bernhard Beschow To: qemu-devel@nongnu.org Cc: =?utf-8?q?Herv=C3=A9_Poussineau?= , qemu-arm@nongnu.org, Elena Ufimtseva , qemu-block@nongnu.org, Richard Henderson , Jiaxun Yang , Peter Maydell , Gerd Hoffmann , Ani Sinha , John Snow , Marcel Apfelbaum , Aurelien Jarno , =?utf-8?q?Philippe_Mathieu-Daud?= =?utf-8?q?=C3=A9?= , Paolo Bonzini , Jagannathan Raman , qemu-ppc@nongnu.org, "Michael S. Tsirkin" , Eduardo Habkost , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Igor Mammedov , John G Johnson , Bernhard Beschow Subject: [PATCH v7 00/23] Consolidate PIIX south bridges Date: Sun, 12 Feb 2023 13:37:42 +0100 Message-Id: <20230212123805.30799-1-shentey@gmail.com> X-Mailer: git-send-email 2.39.1 MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::634; envelope-from=shentey@gmail.com; helo=mail-ej1-x634.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org 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: Move sub devices into the PIIX3 south bridge, like PIIX4 does already: * hw/i386/pc: Create RTC controllers in south bridges * hw/i386/pc: No need for rtc_state to be an out-parameter * hw/i386/pc_piix: Allow for setting properties before realizing PIIX3 south bridge * hw/isa/piix3: Create USB controller in host device * hw/isa/piix3: Create power management controller in host device * hw/isa/piix3: Move ISA bus IRQ assignments into host device * hw/isa/piix3: Create IDE controller in host device * hw/isa/piix3: Wire up ACPI interrupt internally Make PIIX3 and PIIX4 south bridges more similar: * 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: Drop the "3" from PIIX base class * hw/isa/piix4: Make PIIX4's ACPI and USB functions optional * hw/isa/piix4: Remove unused inbound ISA interrupt lines * hw/isa/piix4: Reuse struct PIIXState from PIIX3 * hw/isa/piix4: Create the "intr" property during init() already * hw/isa/piix4: Rename reset control operations to match PIIX3 This patch achieves the main goal of the series: * hw/isa/piix3: Merge hw/isa/piix4.c Perform some further consolidations which were easier to do after the merge: * 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's base class with PIIX4 One challenge was dealing with optional devices where Peter already gave advice in [1] which this series implements. There are still some differences in the device models: - PIIX4 instantiates its own PIC and PIT while PIIX3 doesn't - PIIX4 wires up the RTC IRQ itself while PIIX3 doesn't - Different binary layout in VM state v7: - Rebase onto master - Avoid the PIC proxy (Phil) The motivation for the PIC proxy was to allow for wiring up ISA interrupts in the south bridges. ISA interrupt wiring requires the GPIO lines to be populated already but pc_piix assigned the interrupts only after realizing PIIX3. By shifting interrupt assignment before realizing, the ISA interrupts are already populated during PIIX3's realize phase where the ISA interrupts are wired up. - New patches: * hw/isa/piix4: Reuse struct PIIXState from PIIX3 * hw/isa/piix4: Create the "intr" property during init() already - Patches with substantial changes (Reviewed-by dropped): * hw/isa/piix3: Move ISA bus IRQ assignments into host device Testing done: * `make check` * 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=ttyS0"` * Run HVM domU guest under Xen with manjaro-kde-21.3.2-220704-linux515.iso image v6: - Fix some comments about TYPE_ISA_PIC (Mark) ... and use it consistently within the patch series. - Incorporate series "[PATCH v2 0/3] Decouple INTx-to-LNKx routing from south bridges" [2] for maintainer convenience. - Merge v5's 'hw/i386/pc_piix: Associate pci_map_irq_fn as soon as PCI bus is created' into https://lists.nongnu.org/archive/html/qemu-devel/2022-11/msg03312.html . Do similar for Malta. - Rebase onto latest master (d6271b657286 "Merge tag 'for_upstream' of https://git.kernel.org/pub/scm/virt/kvm/mst/qemu into staging") v5: - Pick up Reviewed-by tags from https://lists.nongnu.org/archive/html/qemu-devel/2023-01/msg00116.html - Add patch to make usage of the isa_pic global more type-safe - Re-introduce isa-pic as PIC specific proxy (Mark) v4: - Rebase onto "[PATCH v2 0/3] Decouple INTx-to-LNKx routing from south bridges" since it is already queued via mips-next. This eliminates patches 'hw/isa/piix3: Prefix pci_slot_get_pirq() with "piix3_"' and 'hw/isa/piix4: Prefix pci_slot_get_pirq() with "piix4_"'. - Squash 'hw/isa/piix: Drop the "3" from the PIIX base class' into 'hw/isa/piix3: Rename typedef PIIX3State to PIIXState'. I originally only split these patches since I wasn't sure whether renaming a type was allowed. - Add new patch 'hw/i386/pc_piix: Associate pci_map_irq_fn as soon as PCI bus is created' for forther cleanup of INTx-to-LNKx route decoupling. v3: - Introduce one TYPE_ICH9_USB_UHCI(fn) rather than several TYPE_ICH9_USB_UHCIx (Philippe) - Make proxy PIC generic (Philippe) - Track Malta's PIIX dependencies through KConfig - Rebase onto Philippe's 'hw/isa/piix4: Remove MIPS Malta specific bits' series [3] - Also rebase onto latest master to resolve merge conflicts. This required copying Philippe's series as first three patches - please ignore. 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 [1] https://lists.nongnu.org/archive/html/qemu-devel/2022-07/msg02348.html [2] https://lists.nongnu.org/archive/html/qemu-devel/2022-11/msg03310.html [3] https://lists.nongnu.org/archive/html/qemu-devel/2022-10/msg05367.html Bernhard Beschow (23): hw/i386/pc: Create RTC controllers in south bridges hw/i386/pc: No need for rtc_state to be an out-parameter hw/i386/pc_piix: Allow for setting properties before realizing PIIX3 south bridge hw/isa/piix3: Create USB controller in host device hw/isa/piix3: Create power management controller in host device hw/isa/piix3: Move ISA bus IRQ assignments into host device hw/isa/piix3: Create IDE controller in host device hw/isa/piix3: Wire up ACPI interrupt internally 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: Drop the "3" from PIIX base class hw/isa/piix4: Make PIIX4's ACPI and USB functions optional hw/isa/piix4: Remove unused inbound ISA interrupt lines hw/isa/piix4: Reuse struct PIIXState from PIIX3 hw/isa/piix4: Create the "intr" property during init() already hw/isa/piix4: Rename reset control operations to match PIIX3 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's base class with PIIX4 MAINTAINERS | 6 +- include/hw/i386/ich9.h | 2 + include/hw/i386/pc.h | 2 +- include/hw/southbridge/piix.h | 28 +++- hw/i386/pc.c | 16 +- hw/i386/pc_piix.c | 67 ++++---- hw/i386/pc_q35.c | 3 +- hw/isa/lpc_ich9.c | 8 + hw/isa/{piix3.c => piix.c} | 306 ++++++++++++++++++++++++++-------- hw/isa/piix4.c | 302 --------------------------------- hw/mips/malta.c | 6 +- hw/i386/Kconfig | 3 +- hw/isa/Kconfig | 8 +- hw/isa/meson.build | 3 +- hw/mips/Kconfig | 2 +- 15 files changed, 333 insertions(+), 429 deletions(-) rename hw/isa/{piix3.c => piix.c} (55%) delete mode 100644 hw/isa/piix4.c