* [PATCH] sun4u: remap ebus BAR0 to use unassigned_io_ops instead of alias to PCI IO space
@ 2024-03-11 6:43 Mark Cave-Ayland
2024-03-11 8:28 ` Philippe Mathieu-Daudé
0 siblings, 1 reply; 3+ messages in thread
From: Mark Cave-Ayland @ 2024-03-11 6:43 UTC (permalink / raw)
To: qemu-devel
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
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] sun4u: remap ebus BAR0 to use unassigned_io_ops instead of alias to PCI IO space
2024-03-11 6:43 [PATCH] sun4u: remap ebus BAR0 to use unassigned_io_ops instead of alias to PCI IO space Mark Cave-Ayland
@ 2024-03-11 8:28 ` Philippe Mathieu-Daudé
2024-03-12 8:17 ` Philippe Mathieu-Daudé
0 siblings, 1 reply; 3+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-03-11 8:28 UTC (permalink / raw)
To: Mark Cave-Ayland, qemu-devel
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(-)
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] sun4u: remap ebus BAR0 to use unassigned_io_ops instead of alias to PCI IO space
2024-03-11 8:28 ` Philippe Mathieu-Daudé
@ 2024-03-12 8:17 ` Philippe Mathieu-Daudé
0 siblings, 0 replies; 3+ messages in thread
From: Philippe Mathieu-Daudé @ 2024-03-12 8:17 UTC (permalink / raw)
To: Mark Cave-Ayland, qemu-devel
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!
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-03-12 8:18 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-03-11 6:43 [PATCH] sun4u: remap ebus BAR0 to use unassigned_io_ops instead of alias to PCI IO space Mark Cave-Ayland
2024-03-11 8:28 ` Philippe Mathieu-Daudé
2024-03-12 8:17 ` Philippe Mathieu-Daudé
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).