> > Later on, an OS can go do its own PCI scan, assign real BARs to the > > non-primary VGA cards (or the BIOS may have done so), and run drivers > > that can talk to them. > > There is still one thing that all that does not explain, however. Once > all cards have IO decoding turned on (`lspci -vv' on my machine clearly > shows that all my three video cards decode IO), how comes only one card > actually decodes VGA IO?
The system bios picks a card, and runs the expansion rom for that card, which enables the legacy decoding. All other vga devices are just initialized as regular PCI devices, without loading their extension rom. Don't confuse the IO enable bit in the command register with enabling responds to legacy VGA regions. Most drivers will talk to the card using the standard PCI resources (as defined by the BAR), not the legacy VGA addresses. My understanding is that enabling response to the legacy VGA addresses (ie. IO ports 0x3b0-3bb and 0x3c0-3df and memory addresses 0xa0000-bffff) is done in a card specific manner. IIUC this is the reason some cards only work as the primary display. To bring up secondary cards your OS needs to either a) Initialize the card from scratch b) Disable legacy encoding on all other cards, and let the vgabios init as if from the system bios c) Ask the bios to initialize the card without setting up the legacy address decoding. Paul _______________________________________________ Open-graphics mailing list [email protected] http://lists.duskglow.com/mailman/listinfo/open-graphics List service provided by Duskglow Consulting, LLC (www.duskglow.com)
