I found the cause of the regression. As as Stefan Weil already figured,
it was caused by the following commit:
commit d0ed8076cbdc26138a7e33fed5e45a35d019a103
Author: Avi Kivity <email address hidden>
Date: Sun Jul 24 17:47:18 2011 +0300
pci_host: convert conf index and data ports to memory API
Reviewed-by: Richard Henderson <email address hidden> Signed-off-by: Avi Kivity <email address hidden>
This commit incorrectly changed the emulation of the PCI configuration
register at I/O port 0xCF8. Before the commit, an outb to port 0xCFB
or an outw to port 0xCFA had no effect, but after the commit, they
change the value of the CONFIG_ADDRESS DWORD register at 0xCF8. This
is contrary to the behavior of real PC hardware, and contrary to the
PCI standard which clearly states that the only I/O space consumed by
the CONFIG_ADDRESS register is the DWORD at address 0xCF8.
Changing pci_host_config_write() to ignore writes with addr != 0 is
sufficient for qemu to again be able to boot NetBSD. For full
compliance with the PCI standard, it should also ignore writes with
size != 4, and a similar change should probably also be made to
pci_host_config_read().
I found the cause of the regression. As as Stefan Weil already figured,
it was caused by the following commit:
commit d0ed8076cbdc261 38a7e33fed5e45a 35d019a103
Author: Avi Kivity <email address hidden>
Date: Sun Jul 24 17:47:18 2011 +0300
pci_host: convert conf index and data ports to memory API
This commit incorrectly changed the emulation of the PCI configuration
register at I/O port 0xCF8. Before the commit, an outb to port 0xCFB
or an outw to port 0xCFA had no effect, but after the commit, they
change the value of the CONFIG_ADDRESS DWORD register at 0xCF8. This
is contrary to the behavior of real PC hardware, and contrary to the
PCI standard which clearly states that the only I/O space consumed by
the CONFIG_ADDRESS register is the DWORD at address 0xCF8.
Changing pci_host_ config_ write() to ignore writes with addr != 0 is config_ read().
sufficient for qemu to again be able to boot NetBSD. For full
compliance with the PCI standard, it should also ignore writes with
size != 4, and a similar change should probably also be made to
pci_host_