> > 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)

Reply via email to