[Open-graphics] re: VGA decode on PCI
Paul Brook
paul at codesourcery.com
Fri Aug 31 22:30:18 EDT 2007
> > 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
More information about the Open-graphics
mailing list