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-ayl...@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