Message ID | 20210917075057.20924-3-mark.cave-ayland@ilande.co.uk (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | nubus: bus, device, bridge, IRQ and address space improvements | expand |
Le 17/09/2021 à 09:50, Mark Cave-Ayland a écrit : > According to "Designing Cards and Drivers for the Macintosh Family" each physical > nubus slot can access 2 separate address ranges: a super slot memory region which > is 256MB and a standard slot memory region which is 16MB. > > Currently a Nubus device uses the physical slot number to determine whether it is > using a standard slot memory region or a super slot memory region rather than > exposing both memory regions for use as required. > > Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> > Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> > --- > hw/nubus/nubus-device.c | 36 ++++++++++++++++++------------------ > include/hw/nubus/nubus.h | 1 + > 2 files changed, 19 insertions(+), 18 deletions(-) > > diff --git a/hw/nubus/nubus-device.c b/hw/nubus/nubus-device.c > index be01269563..36203848e5 100644 > --- a/hw/nubus/nubus-device.c > +++ b/hw/nubus/nubus-device.c > @@ -168,26 +168,26 @@ static void nubus_device_realize(DeviceState *dev, Error **errp) > } > > nd->slot = nubus->current_slot++; > - name = g_strdup_printf("nubus-slot-%d", nd->slot); > - > - if (nd->slot < NUBUS_FIRST_SLOT) { > - /* Super */ > - slot_offset = (nd->slot - 6) * NUBUS_SUPER_SLOT_SIZE; > - > - memory_region_init(&nd->slot_mem, OBJECT(dev), name, > - NUBUS_SUPER_SLOT_SIZE); > - memory_region_add_subregion(&nubus->super_slot_io, slot_offset, > - &nd->slot_mem); > - } else { > - /* Normal */ > - slot_offset = nd->slot * NUBUS_SLOT_SIZE; > - > - memory_region_init(&nd->slot_mem, OBJECT(dev), name, NUBUS_SLOT_SIZE); > - memory_region_add_subregion(&nubus->slot_io, slot_offset, > - &nd->slot_mem); > - } > > + /* Super */ > + slot_offset = (nd->slot - 6) * NUBUS_SUPER_SLOT_SIZE; > + Is it possible to remove this patch? The "(nd->slot - 6)" looks weird and it is removed in patch 20. If not: Reviewed-by: Laurent Vivier <laurent@vivier.eu> Thanks, Laurent
On 20/09/2021 20:54, Laurent Vivier wrote: > Le 17/09/2021 à 09:50, Mark Cave-Ayland a écrit : >> According to "Designing Cards and Drivers for the Macintosh Family" each physical >> nubus slot can access 2 separate address ranges: a super slot memory region which >> is 256MB and a standard slot memory region which is 16MB. >> >> Currently a Nubus device uses the physical slot number to determine whether it is >> using a standard slot memory region or a super slot memory region rather than >> exposing both memory regions for use as required. >> >> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> >> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> >> --- >> hw/nubus/nubus-device.c | 36 ++++++++++++++++++------------------ >> include/hw/nubus/nubus.h | 1 + >> 2 files changed, 19 insertions(+), 18 deletions(-) >> >> diff --git a/hw/nubus/nubus-device.c b/hw/nubus/nubus-device.c >> index be01269563..36203848e5 100644 >> --- a/hw/nubus/nubus-device.c >> +++ b/hw/nubus/nubus-device.c >> @@ -168,26 +168,26 @@ static void nubus_device_realize(DeviceState *dev, Error **errp) >> } >> >> nd->slot = nubus->current_slot++; >> - name = g_strdup_printf("nubus-slot-%d", nd->slot); >> - >> - if (nd->slot < NUBUS_FIRST_SLOT) { >> - /* Super */ >> - slot_offset = (nd->slot - 6) * NUBUS_SUPER_SLOT_SIZE; >> - >> - memory_region_init(&nd->slot_mem, OBJECT(dev), name, >> - NUBUS_SUPER_SLOT_SIZE); >> - memory_region_add_subregion(&nubus->super_slot_io, slot_offset, >> - &nd->slot_mem); >> - } else { >> - /* Normal */ >> - slot_offset = nd->slot * NUBUS_SLOT_SIZE; >> - >> - memory_region_init(&nd->slot_mem, OBJECT(dev), name, NUBUS_SLOT_SIZE); >> - memory_region_add_subregion(&nubus->slot_io, slot_offset, >> - &nd->slot_mem); >> - } >> >> + /* Super */ >> + slot_offset = (nd->slot - 6) * NUBUS_SUPER_SLOT_SIZE; >> + > > Is it possible to remove this patch? > > The "(nd->slot - 6)" looks weird and it is removed in patch 20. This is another place where I decided to keep the existing logic as-is and then make the change to remove the -6 offset later on in patch 12 ("nubus: move nubus to its own 32-bit address space"). Certainly the existing offset is wrong, but given that there are currently no devices that use the super slot then I will bring the change to remove the offset forward to this patch in v5. > If not: > > Reviewed-by: Laurent Vivier <laurent@vivier.eu> > > Thanks, > Laurent ATB, Mark.
diff --git a/hw/nubus/nubus-device.c b/hw/nubus/nubus-device.c index be01269563..36203848e5 100644 --- a/hw/nubus/nubus-device.c +++ b/hw/nubus/nubus-device.c @@ -168,26 +168,26 @@ static void nubus_device_realize(DeviceState *dev, Error **errp) } nd->slot = nubus->current_slot++; - name = g_strdup_printf("nubus-slot-%d", nd->slot); - - if (nd->slot < NUBUS_FIRST_SLOT) { - /* Super */ - slot_offset = (nd->slot - 6) * NUBUS_SUPER_SLOT_SIZE; - - memory_region_init(&nd->slot_mem, OBJECT(dev), name, - NUBUS_SUPER_SLOT_SIZE); - memory_region_add_subregion(&nubus->super_slot_io, slot_offset, - &nd->slot_mem); - } else { - /* Normal */ - slot_offset = nd->slot * NUBUS_SLOT_SIZE; - - memory_region_init(&nd->slot_mem, OBJECT(dev), name, NUBUS_SLOT_SIZE); - memory_region_add_subregion(&nubus->slot_io, slot_offset, - &nd->slot_mem); - } + /* Super */ + slot_offset = (nd->slot - 6) * NUBUS_SUPER_SLOT_SIZE; + + name = g_strdup_printf("nubus-super-slot-%x", nd->slot); + memory_region_init(&nd->super_slot_mem, OBJECT(dev), name, + NUBUS_SUPER_SLOT_SIZE); + memory_region_add_subregion(&nubus->super_slot_io, slot_offset, + &nd->super_slot_mem); + g_free(name); + + /* Normal */ + slot_offset = nd->slot * NUBUS_SLOT_SIZE; + + name = g_strdup_printf("nubus-slot-%x", nd->slot); + memory_region_init(&nd->slot_mem, OBJECT(dev), name, NUBUS_SLOT_SIZE); + memory_region_add_subregion(&nubus->slot_io, slot_offset, + &nd->slot_mem); g_free(name); + nubus_register_format_block(nd); } diff --git a/include/hw/nubus/nubus.h b/include/hw/nubus/nubus.h index 424309dd73..89b0976aaa 100644 --- a/include/hw/nubus/nubus.h +++ b/include/hw/nubus/nubus.h @@ -43,6 +43,7 @@ struct NubusDevice { DeviceState qdev; int slot; + MemoryRegion super_slot_mem; MemoryRegion slot_mem; /* Format Block */