On Wed, Jan 28, 2009 at 8:42 AM, Mark Cave-Ayland mark.cave-ayland@siriusit.co.uk wrote:
Aurelien Jarno wrote:
The rationale is available here: http://lists.openbios.org/pipermail/openbios/2009-January/003391.html
Thanks for link - I must have missed that whilst scanning the archives :)
This commit fixes two different problems encountered on SPARC64 and PowerPC. First of all it makes sure that no PCI device get allocated port 0, which doesn't exists.
Secondly it fixes problems with non-PCI devices that are using I/O ports at fixed location. This includes the video card, i8259, rtc, serial port, hard-disk controller, etc. Without this patch, the PCI cards are getting allocated the I/O ports of those devices, thus causing crashes.
I wonder why it causes problem on x86. What is the initial value of arch->io_base? I am unable to find that looking at the code.
Well, I just added the following diff to my OpenBIOS build (latest SVN):
Index: drivers/pci.c
--- drivers/pci.c (revision 428) +++ drivers/pci.c (working copy) @@ -762,6 +762,9 @@ mem_base = arch->mem_base; /* I/O ports under 0x400 are used by devices mapped at fixed location. */
printk("### io_base: %x\n", arch->io_base);
io_base = arch->io_base + 0x400; path = strdup(""); for (bus = 0; bus<0x100; bus++) {
...and in my output I got this:
### io_base: 0
That's actually what I would have expected. The IO address range is only 16 bits from 0-64K.
I guess we'll have to get more information from qemu so we know which port address is being accessed when it dies.
Myles