Message ID | 20240311064345.2531197-1-mark.cave-ayland@ilande.co.uk (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | sun4u: remap ebus BAR0 to use unassigned_io_ops instead of alias to PCI IO space | expand |
On 11/3/24 07:43, Mark Cave-Ayland wrote: > During kernel startup OpenBSD accesses addresses mapped by BAR0 of the ebus device > but at offsets where no IO devices exist. Before commit 4aa07e8649 ("hw/sparc64/ebus: > Access memory regions via pci_address_space_io()") BAR0 was mapped to legacy IO > space which allows accesses to unmapped devices to succeed, but afterwards these > accesses to unmapped PCI IO space cause a memory fault which prevents OpenBSD from > booting. > > Since no devices are mapped at the addresses accessed by OpenBSD, change ebus BAR0 > from a PCI IO space alias to an IO memory region using unassigned_io_ops which allows > these accesses to succeed and so allows OpenBSD to boot once again. > > Fixes: 4aa07e8649 ("hw/sparc64/ebus: Access memory regions via pci_address_space_io()") > Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> > --- > > [MCA: I'd like to merge this for 9.0 since I've been carrying various local workarounds > to allow OpenBSD to boot on SPARC64 for some time.] Sure. > hw/sparc64/sun4u.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-)
On 11/3/24 09:28, Philippe Mathieu-Daudé wrote: > On 11/3/24 07:43, Mark Cave-Ayland wrote: >> During kernel startup OpenBSD accesses addresses mapped by BAR0 of the >> ebus device >> but at offsets where no IO devices exist. Before commit 4aa07e8649 >> ("hw/sparc64/ebus: >> Access memory regions via pci_address_space_io()") BAR0 was mapped to >> legacy IO >> space which allows accesses to unmapped devices to succeed, but >> afterwards these >> accesses to unmapped PCI IO space cause a memory fault which prevents >> OpenBSD from >> booting. >> >> Since no devices are mapped at the addresses accessed by OpenBSD, >> change ebus BAR0 >> from a PCI IO space alias to an IO memory region using >> unassigned_io_ops which allows >> these accesses to succeed and so allows OpenBSD to boot once again. >> >> Fixes: 4aa07e8649 ("hw/sparc64/ebus: Access memory regions via >> pci_address_space_io()") >> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> > > Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> > >> --- >> >> [MCA: I'd like to merge this for 9.0 since I've been carrying various >> local workarounds >> to allow OpenBSD to boot on SPARC64 for some time.] > > Sure. Patch queued!
diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c index eda9b58a21..cff6d5abaf 100644 --- a/hw/sparc64/sun4u.c +++ b/hw/sparc64/sun4u.c @@ -360,8 +360,13 @@ static void ebus_realize(PCIDevice *pci_dev, Error **errp) pci_dev->config[0x09] = 0x00; // programming i/f pci_dev->config[0x0D] = 0x0a; // latency_timer - memory_region_init_alias(&s->bar0, OBJECT(s), "bar0", - pci_address_space_io(pci_dev), 0, 0x1000000); + /* + * BAR0 is accessed by OpenBSD but not for ebus device access: allow any + * memory access to this region to succeed which allows the OpenBSD kernel + * to boot. + */ + memory_region_init_io(&s->bar0, OBJECT(s), &unassigned_io_ops, s, + "bar0", 0x1000000); pci_register_bar(pci_dev, 0, PCI_BASE_ADDRESS_SPACE_MEMORY, &s->bar0); memory_region_init_alias(&s->bar1, OBJECT(s), "bar1", pci_address_space_io(pci_dev), 0, 0x8000);
During kernel startup OpenBSD accesses addresses mapped by BAR0 of the ebus device but at offsets where no IO devices exist. Before commit 4aa07e8649 ("hw/sparc64/ebus: Access memory regions via pci_address_space_io()") BAR0 was mapped to legacy IO space which allows accesses to unmapped devices to succeed, but afterwards these accesses to unmapped PCI IO space cause a memory fault which prevents OpenBSD from booting. Since no devices are mapped at the addresses accessed by OpenBSD, change ebus BAR0 from a PCI IO space alias to an IO memory region using unassigned_io_ops which allows these accesses to succeed and so allows OpenBSD to boot once again. Fixes: 4aa07e8649 ("hw/sparc64/ebus: Access memory regions via pci_address_space_io()") Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> --- [MCA: I'd like to merge this for 9.0 since I've been carrying various local workarounds to allow OpenBSD to boot on SPARC64 for some time.] hw/sparc64/sun4u.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)