Le 24/09/2021 à 09:37, Mark Cave-Ayland a écrit :
> 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 <mark.cave-ayland@ilande.co.uk>
>
>
> v6:
> - Rebase onto master
> - Add extra R-B tags from Laurent and Philippe
> - Use int for ctz32() result in patches 4 and 5
> - Change slot_available_mask to uint16_t in patches 4 and 17
> - Fix typo in commit message for patch 4
>
> 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 | 120 ++++++++++++---
> 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, 278 insertions(+), 229 deletions(-)
> create mode 100644 hw/nubus/trace-events
> create mode 100644 hw/nubus/trace.h
>
Applied to my q800-for-6.2 branch
Thanks,
Laurent