[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v4 08/20] nubus: generate bus error when attempting to access
From: |
Laurent Vivier |
Subject: |
Re: [PATCH v4 08/20] nubus: generate bus error when attempting to access empty slots |
Date: |
Mon, 20 Sep 2021 21:59:11 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 |
Le 17/09/2021 à 09:50, Mark Cave-Ayland a écrit :
> According to "Designing Cards and Drivers for the Macintosh Family" any
> attempt
> to access an unimplemented address location on Nubus generates a bus error.
> MacOS
> uses a custom bus error handler to detect empty Nubus slots, and with the
> current
> implementation assumes that all slots are occupied as the Nubus transactions
> never fail.
>
> Switch nubus_slot_ops and nubus_super_slot_ops over to use
> {read,write}_with_attrs
> and hard-code them to return MEMTX_DECODE_ERROR so that unoccupied Nubus slots
> will generate the expected bus error.
>
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
> hw/nubus/nubus-bus.c | 34 ++++++++++++++++++----------------
> 1 file changed, 18 insertions(+), 16 deletions(-)
>
> diff --git a/hw/nubus/nubus-bus.c b/hw/nubus/nubus-bus.c
> index 39182db065..a617459a4f 100644
> --- a/hw/nubus/nubus-bus.c
> +++ b/hw/nubus/nubus-bus.c
> @@ -20,23 +20,23 @@ static NubusBus *nubus_find(void)
> return NUBUS_BUS(object_resolve_path_type("", TYPE_NUBUS_BUS, NULL));
> }
>
> -static void nubus_slot_write(void *opaque, hwaddr addr, uint64_t val,
> - unsigned int size)
> +static MemTxResult nubus_slot_write(void *opaque, hwaddr addr, uint64_t val,
> + unsigned size, MemTxAttrs attrs)
> {
> - /* read only */
> trace_nubus_slot_write(addr, val, size);
> + return MEMTX_DECODE_ERROR;
> }
>
> -static uint64_t nubus_slot_read(void *opaque, hwaddr addr,
> - unsigned int size)
> +static MemTxResult nubus_slot_read(void *opaque, hwaddr addr, uint64_t *data,
> + unsigned size, MemTxAttrs attrs)
> {
> trace_nubus_slot_read(addr, size);
> - return 0;
> + return MEMTX_DECODE_ERROR;
> }
>
> static const MemoryRegionOps nubus_slot_ops = {
> - .read = nubus_slot_read,
> - .write = nubus_slot_write,
> + .read_with_attrs = nubus_slot_read,
> + .write_with_attrs = nubus_slot_write,
> .endianness = DEVICE_BIG_ENDIAN,
> .valid = {
> .min_access_size = 1,
> @@ -44,23 +44,25 @@ static const MemoryRegionOps nubus_slot_ops = {
> },
> };
>
> -static void nubus_super_slot_write(void *opaque, hwaddr addr, uint64_t val,
> - unsigned int size)
> +static MemTxResult nubus_super_slot_write(void *opaque, hwaddr addr,
> + uint64_t val, unsigned size,
> + MemTxAttrs attrs)
> {
> - /* read only */
> trace_nubus_super_slot_write(addr, val, size);
> + return MEMTX_DECODE_ERROR;
> }
>
> -static uint64_t nubus_super_slot_read(void *opaque, hwaddr addr,
> - unsigned int size)
> +static MemTxResult nubus_super_slot_read(void *opaque, hwaddr addr,
> + uint64_t *data, unsigned size,
> + MemTxAttrs attrs)
> {
> trace_nubus_super_slot_read(addr, size);
> - return 0;
> + return MEMTX_DECODE_ERROR;
> }
>
> static const MemoryRegionOps nubus_super_slot_ops = {
> - .read = nubus_super_slot_read,
> - .write = nubus_super_slot_write,
> + .read_with_attrs = nubus_super_slot_read,
> + .write_with_attrs = nubus_super_slot_write,
> .endianness = DEVICE_BIG_ENDIAN,
> .valid = {
> .min_access_size = 1,
>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
- Re: [PATCH v4 04/20] nubus: use bitmap to manage available slots, (continued)
- [PATCH v4 05/20] nubus: move slot bitmap checks from NubusDevice realize() to BusClass check_address(), Mark Cave-Ayland, 2021/09/17
- [PATCH v4 06/20] nubus: implement BusClass get_dev_path(), Mark Cave-Ayland, 2021/09/17
- [PATCH v4 11/20] nubus-device: add romfile property for loading declaration ROMs, Mark Cave-Ayland, 2021/09/17
- [PATCH v4 08/20] nubus: generate bus error when attempting to access empty slots, Mark Cave-Ayland, 2021/09/17
- Re: [PATCH v4 08/20] nubus: generate bus error when attempting to access empty slots,
Laurent Vivier <=
- [PATCH v4 10/20] nubus-device: remove nubus_register_rom() and nubus_register_format_block(), Mark Cave-Ayland, 2021/09/17
- [PATCH v4 07/20] nubus: add trace-events for empty slot accesses, Mark Cave-Ayland, 2021/09/17
- [PATCH v4 09/20] macfb: don't register declaration ROM, Mark Cave-Ayland, 2021/09/17