diff --git a/src/devices/Kconfig b/src/devices/Kconfig index cec2048931..d83d551b5f 100644 --- a/src/devices/Kconfig +++ b/src/devices/Kconfig @@ -98,6 +98,18 @@ config YABEL_PCI_ACCESS_OTHER_DEVICES onboard graphics chips whose Option ROM needs to reconfigure the north bridge. +config YABEL_PCI_FAKE_WRITING_OTHER_DEVICES_CONFIG + prompt "Fake success on writing other device's config space" + bool + depends on YABEL_PCI_ACCESS_OTHER_DEVICES + help + By default, YABEL aborts when the Option ROM tries to write to other + devices' config spaces. With this option enabled, the write doesn't + follow through, but the Option ROM is allowed to go on. + This can create issues such as hanging Option ROMs (if it depends on + that other register changing to the written value), so test for + impact before using this option. + config YABEL_VIRTMEM_LOCATION prompt "Location of YABEL's virtual memory" hex diff --git a/src/devices/oprom/yabel/io.c b/src/devices/oprom/yabel/io.c index 00bb1a0d2f..5c19b5142c 100644 --- a/src/devices/oprom/yabel/io.c +++ b/src/devices/oprom/yabel/io.c @@ -524,7 +524,9 @@ pci_cfg_write(X86EMU_pioAddr addr, u32 val, u8 size) printf ("Config write access invalid! PCI device %x:%x.%x, offs: %x\n", bus, devfn >> 3, devfn & 7, offs); +#if !CONFIG_YABEL_PCI_FAKE_WRITING_OTHER_DEVICES_CONFIG HALT_SYS(); +#endif } else { #if CONFIG_PCI_OPTION_ROM_RUN_YABEL switch (size) {