From patchwork Thu Sep 1 16:25:31 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bernhard Beschow X-Patchwork-Id: 1673020 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=NN6Wu2Zu; dkim-atps=neutral Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4MJRLY1hTYz1ynJ for ; Fri, 2 Sep 2022 02:28:37 +1000 (AEST) Received: from localhost ([::1]:48162 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oTn3S-0001e9-4E for incoming@patchwork.ozlabs.org; Thu, 01 Sep 2022 12:28:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35130) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oTn1n-0001bY-9p for qemu-devel@nongnu.org; Thu, 01 Sep 2022 12:26:53 -0400 Received: from mail-ej1-x62b.google.com ([2a00:1450:4864:20::62b]:44991) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oTn1l-0001Sg-7N for qemu-devel@nongnu.org; Thu, 01 Sep 2022 12:26:51 -0400 Received: by mail-ej1-x62b.google.com with SMTP id kk26so35777665ejc.11 for ; Thu, 01 Sep 2022 09:26:48 -0700 (PDT) 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; bh=bXQsIF8kH/zcvVwSgijUJg04+KihRkyVLjU4F7uhh8s=; b=NN6Wu2Zu1Vgasdk1Es93aPpho5OB6yvmQboK+nShRhTUpdqLzV5aTSMkZywpyycYUf uB4Pf0bkpX20abbXg4mbvjw5bLoku1NW6jkbAeOlxnKcLtjrChvA0wp+SlnFyzNpoHDx 2a0gCFu6pZFP0mEzQXpSl3GAq6LVCCeFDfjycMPVJ97CxD+kyOIF+T79LpyIBgu6ONgX gFJhL00U7C0BxaFhOjnH0gwh6wMGoCCqOQPbFl2SUOr4XNnTaVUzGTiQdnIDveJaIIWS XfuICFuX41gcME2W5kBi1zX7oPQ8a+V84CSRC0TyEnPlO1NU29h7SK0RuQ4fpFd192qI ll/w== 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; bh=bXQsIF8kH/zcvVwSgijUJg04+KihRkyVLjU4F7uhh8s=; b=H4o+dUL2nuvnj0ZJ5q0XefA1XyXhk81dVv83lNqs6xf3PYvcTf6LANPuO+4cEwfYQQ fHYH0avSXJtoZBUNYHFlYdMZYrZHAvJ+rl/U6wktHYI6mj40Q5lka1mk5zASVvQdirJX xHJGVgrgWzsNQUhAe9NKAxemZxmYvWxb1UvM3nl1+tFHJUeGSZ7NU6wE8lMWrIGrT4bB Dr8pBil7ujJagfanrjBmfceMzi13hLCt2ETcXINeTXMevimfxbLVjp80PvwyaZ53HiLd PlzMwHOloNeksKkY68AtSY8E95y7PCEo5/JMRLgQcZEvl7VRR2Oi//uwWJAJRA+gc3UR dFPw== X-Gm-Message-State: ACgBeo2Bhnf29OE1shbsZDxzlwceuWWorYEv29onJ6dwCD06FwO2jHTY D9HUv6q8LCI0kvaxJrsH8/FvJIzHoHI= X-Google-Smtp-Source: AA6agR6x4BlE1ys5jypYMiy5zzC96M1wjX23++69bsK2A4Uif4TcBetl/1y1s/e8DdPCujLwC4DzgQ== X-Received: by 2002:a17:907:948f:b0:731:3f2e:8916 with SMTP id dm15-20020a170907948f00b007313f2e8916mr25108786ejc.442.1662049607338; Thu, 01 Sep 2022 09:26:47 -0700 (PDT) Received: from osoxes.fritz.box (p200300faaf0bb2009c4947838afc41b6.dip0.t-ipconnect.de. [2003:fa:af0b:b200:9c49:4783:8afc:41b6]) by smtp.gmail.com with ESMTPSA id p6-20020aa7d306000000b00447c0dcbb99sm1587672edq.83.2022.09.01.09.26.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 Sep 2022 09:26:47 -0700 (PDT) From: Bernhard Beschow To: qemu-devel@nongnu.org Cc: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , =?utf-8?q?Her?= =?utf-8?q?v=C3=A9_Poussineau?= , Aurelien Jarno , Paolo Bonzini , Eduardo Habkost , Richard Henderson , Jiaxun Yang , Ani Sinha , Igor Mammedov , Marcel Apfelbaum , "Michael S. Tsirkin" , Bernhard Beschow Subject: [PATCH 00/42] Consolidate PIIX south bridges Date: Thu, 1 Sep 2022 18:25:31 +0200 Message-Id: <20220901162613.6939-1-shentey@gmail.com> X-Mailer: git-send-email 2.37.3 MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::62b; envelope-from=shentey@gmail.com; helo=mail-ej1-x62b.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, T_SCC_BODY_TEXT_LINE=-0.01 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+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" 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. An unsolved problem still is PCI interrupt handling. The first function passed to pci_bus_irqs() is device-specific while the second one seems board-specific. This causes both PIIX device models to be coupled to a particular board. Any advice how to resolve this 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 * 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` [1] https://lists.nongnu.org/archive/html/qemu-devel/2022-07/msg02348.html Bernhard Beschow (42): hw/i386/pc: Create DMA controllers in south bridges 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/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 extra ';' outside of functions hw/isa/piix3: Remove unused include 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/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: Rename wrongly named method 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: Unexport PIIXState 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 | 3 +- hw/intc/i8259.c | 27 + hw/isa/Kconfig | 14 +- hw/isa/lpc_ich9.c | 11 + hw/isa/meson.build | 3 +- hw/isa/piix.c | 669 ++++++++++++++++++++++++ hw/isa/piix3.c | 431 --------------- hw/isa/piix4.c | 325 ------------ hw/mips/malta.c | 34 +- include/hw/i386/ich9.h | 2 + include/hw/i386/pc.h | 2 +- include/hw/intc/i8259.h | 14 + include/hw/southbridge/piix.h | 41 +- 19 files changed, 823 insertions(+), 860 deletions(-) create mode 100644 hw/isa/piix.c delete mode 100644 hw/isa/piix3.c delete mode 100644 hw/isa/piix4.c