From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9FC0EC433F5 for ; Thu, 23 Sep 2021 09:16:35 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 3C89960F23 for ; Thu, 23 Sep 2021 09:16:35 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 3C89960F23 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ilande.co.uk Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=nongnu.org Received: from localhost ([::1]:49646 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mTKqI-0003m9-B3 for qemu-devel@archiver.kernel.org; Thu, 23 Sep 2021 05:16:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42484) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mTKnI-00015P-2a for qemu-devel@nongnu.org; Thu, 23 Sep 2021 05:13:28 -0400 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:48602 helo=mail.default.ilande.bv.iomart.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mTKnE-0007Bj-Rn for qemu-devel@nongnu.org; Thu, 23 Sep 2021 05:13:27 -0400 Received: from [2a00:23c4:8b9d:4100:5d98:71b5:90ca:dad1] (helo=kentang.home) by mail.default.ilande.bv.iomart.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mTKn3-0003vl-NV; Thu, 23 Sep 2021 10:13:17 +0100 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, laurent@vivier.eu Date: Thu, 23 Sep 2021 10:12:48 +0100 Message-Id: <20210923091308.13832-1-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-SA-Exim-Connect-IP: 2a00:23c4:8b9d:4100:5d98:71b5:90ca:dad1 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH v5 00/20] nubus: bus, device, bridge, IRQ and address space improvements X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.bv.iomart.io) Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.bv.iomart.io X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, 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.23 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" This patchset is the next set of changes required to boot MacOS on the q800 machine. The main aim of these patches is to improve the Nubus support so that devices can be plugged into the Nubus from the command line i.e. -device nubus-macfb[,slot=num][,romfile=decl.rom] At the moment the only device that can be plugged into the Nubus is the macfb framebuffer however with these changes it is possible to take a ROM from a real Nubus card and attempt to use it in QEMU, and also allow for future interfaces such as virtio. Patches 1 to 6 move the logic which manages bus addresses from the NubusDevice into the NubusBus itself, including the introduction of a bitmap to manage available slots on the bus. Patches 7 and 8 change the handling for unassigned (empty) slots to generate a bus fault and add trace events to allow logging of empty slot accesses during Nubus enumeration. Patches 9 to 11 remove the existing stubs for generating the format block (the epilogue of the Nubus device embedded ROM consisting of metadata and a checksum) and replace them with a romfile device property to allow the entire Nubus ROM to be loaded from a file into the ROM area, similar to a PCI option ROM. Patch 12 moves the Nubus into its own separate address space whilst patches 13 to 17 update the NubusBridge (and MacNubusBridge) devices to allow machines to map the required slots from the Nubus address space using sysbus_mmio_map(). Finally patches 18 to 20 add support for Nubus IRQs and wire them up appropriately for the q800 machine through VIA2, which is required for the next set of macfb updates. Signed-off-by: Mark Cave-Ayland v5: - Rebase onto master - Add R-B tags from Laurent - Introduce NUBUS_FIRST_SLOT/NUBUS_LAST_SLOT and MAC_NUBUS_FIRST_SLOT/MAC_NUBUS_LAST_SLOT and fix up NUBUS_SUPER_SLOT_NB/NUBUS_SLOT_NB in patch 4 - Fix super slot offset calculation in patch 4 - Squash original patch 3 ("nubus-device: add device slot parameter") into patch 4 ("nubus: use bitmap to manage available slots") - Add new patch 1 ("nubus: add comment indicating reference documents") containing documentation references - Drop "nubus->slot_available_mask = MAKE_64BIT_MASK(0, 16);" from nubus_init() in patch 17 v4: - Rebase onto master - Pass &error_abort to memory_region_init_rom() in patch 11 - Change warn_error() to error_setg() and tweak message in patch 11 v3: - Rebase onto master - Add Phil's R-B for patch 7 - Move NUBUS_FIRST_SLOT/NUBUS_LAST_SLOT check to end of nubus_device_realize() in patch 4 - Use BIT() macro in patches 4 and 20 v2: - Rebase onto master - Tweak the cover letter by adding the optional slot parameter in the -device example - Add R-B tags from Phil - Document the increase in max_access_size in patch 7 - Change the maximum declaration ROM size to 128KiB using (128 * KiB) in patch 11 - use MAKE_64BIT_MASK() in patches 4 and 16 Mark Cave-Ayland (20): nubus: add comment indicating reference documents nubus-device: rename slot_nb variable to slot nubus-device: expose separate super slot memory region nubus: use bitmap to manage available slots nubus: move slot bitmap checks from NubusDevice realize() to BusClass check_address() nubus: implement BusClass get_dev_path() nubus: add trace-events for empty slot accesses nubus: generate bus error when attempting to access empty slots macfb: don't register declaration ROM nubus-device: remove nubus_register_rom() and nubus_register_format_block() nubus-device: add romfile property for loading declaration ROMs nubus: move nubus to its own 32-bit address space nubus-bridge: introduce separate NubusBridge structure mac-nubus-bridge: rename MacNubusState to MacNubusBridge nubus: move NubusBus from mac-nubus-bridge to nubus-bridge nubus-bridge: embed the NubusBus object directly within nubus-bridge nubus-bridge: make slot_available_mask a qdev property nubus: add support for slot IRQs q800: wire up nubus IRQs q800: configure nubus available slots for Quadra 800 hw/display/macfb.c | 6 - hw/m68k/q800.c | 26 +++- hw/nubus/mac-nubus-bridge.c | 34 ++++- hw/nubus/nubus-bridge.c | 23 ++- hw/nubus/nubus-bus.c | 121 ++++++++++++--- hw/nubus/nubus-device.c | 227 ++++++++-------------------- hw/nubus/trace-events | 7 + hw/nubus/trace.h | 1 + include/hw/nubus/mac-nubus-bridge.h | 13 +- include/hw/nubus/nubus.h | 49 +++--- meson.build | 1 + 11 files changed, 279 insertions(+), 229 deletions(-) create mode 100644 hw/nubus/trace-events create mode 100644 hw/nubus/trace.h -- 2.20.1