[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v6 00/20] nubus: bus, device, bridge, IRQ and address space impro
From: |
Mark Cave-Ayland |
Subject: |
[PATCH v6 00/20] nubus: bus, device, bridge, IRQ and address space improvements |
Date: |
Fri, 24 Sep 2021 08:37:48 +0100 |
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
--
2.20.1
- [PATCH v6 00/20] nubus: bus, device, bridge, IRQ and address space improvements,
Mark Cave-Ayland <=
- [PATCH v6 02/20] nubus-device: rename slot_nb variable to slot, Mark Cave-Ayland, 2021/09/24
- [PATCH v6 03/20] nubus-device: expose separate super slot memory region, Mark Cave-Ayland, 2021/09/24
- [PATCH v6 01/20] nubus: add comment indicating reference documents, Mark Cave-Ayland, 2021/09/24
- [PATCH v6 04/20] nubus: use bitmap to manage available slots, Mark Cave-Ayland, 2021/09/24
- [PATCH v6 05/20] nubus: move slot bitmap checks from NubusDevice realize() to BusClass check_address(), Mark Cave-Ayland, 2021/09/24
- [PATCH v6 06/20] nubus: implement BusClass get_dev_path(), Mark Cave-Ayland, 2021/09/24
- [PATCH v6 08/20] nubus: generate bus error when attempting to access empty slots, Mark Cave-Ayland, 2021/09/24
- [PATCH v6 07/20] nubus: add trace-events for empty slot accesses, Mark Cave-Ayland, 2021/09/24