hw/sparc64/sun4u.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
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(-)
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);
--
2.39.2
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!
© 2016 - 2024 Red Hat, Inc.