sun4u: remap ebus BAR0 to use unassigned_io_ops instead of alias to PCI IO space
During kernel startup OpenBSD accesses addresses mapped by BAR0 of the ebus device but at offsets where no IO devices exist. Before commit4aa07e8649
("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> Message-ID: <20240311064345.2531197-1-mark.cave-ayland@ilande.co.uk> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
This commit is contained in:
parent
b691b250d3
commit
c1c73b31d9
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user