VGA support: Difference between revisions

From coreboot
Jump to navigation Jump to search
(add a perl script to dump out the video)
m (beautifying)
Line 20: Line 20:


1. in MB Config.lb  You need to specify for your onboard VGA
1. in MB Config.lb  You need to specify for your onboard VGA
                                      device pci 9.0 on  # PCI
device pci 9.0 on  # PCI
                                              chip drivers/pci/onboard
        chip drivers/pci/onboard
                                                      device pci 9.0 on end
                device pci 9.0 on end
                                                      register "rom_address" = "0xfff80000" #512k image
                register "rom_address" = "0xfff80000" #512k image
                                                      #register "rom_address" = "0xfff00000" #1M image
                #register "rom_address" = "0xfff00000" #1M image
                                              end
        end
                                      end
end


Please make sure the device num should be right. Otherwise it can not
Please make sure the device num should be right. Otherwise it can not

Revision as of 23:09, 19 August 2005

There are two kinds of VGA support we have

    1. onboard vga
    2. addon card.

You need to enable two CONFIG options in your Mainboard Option.lb

    #VGA Console
    option CONFIG_CONSOLE_VGA=1
    option CONFIG_PCI_ROM_RUN=1

CONFIG_PCI_ROM_RUN will use the embedded x86 emulator to run the BIOS image in the expansion ROM of PCI device. CONFIG_CONSOLE_VGA will redirect console messages to the VGA screen once VGA card is initialized.

For addon VGA cards, you don't have to do anyting else besides these two CONFIG options. If your mainboard has an onboard VGA chip and you insert another VGA addon card, the addon VGA card will be used instead of the onboard VGA chip.

If you want to use the onboard VGA chip, you have to do the following in additional to the CONFIG options described above.

1. in MB Config.lb You need to specify for your onboard VGA

device pci 9.0 on  # PCI
        chip drivers/pci/onboard
                device pci 9.0 on end
                register "rom_address" = "0xfff80000" #512k image
                #register "rom_address" = "0xfff00000" #1M image
        end
end

Please make sure the device num should be right. Otherwise it can not get exact ROM address.


2. You still need to modify your target Config.lb. in normal section

      romimage "normal"
      #       48K for SCSI FW or ATI ROM
      option ROM_SIZE = 475136

It will leave space for vga option rom in flash.

3. So at last for your linuxbios.rom, you should do

     cat atix.rom linuxbios.rom > final_linuxbios.rom

you need to make sure the final_linuxbios.rom size is 512k or 1M.

please use dd to get you atix.rom when running Normal BIOS.

How to retrieve a good video bios

There are sites that have video bios roms on their website. (I know of this one for nvidia cards: [1])

However you should be able to retrieve your own video bios as well with linux.

  • Boot up a machine with a commercial bios (not linux bios) with the video card you wish to work under linux bios.
  • From the command line enter:
    dd if=/dev/mem of=vgabios.bin skip=1536 count=128 or
    dd if=/dev/mem of=vgabios.bin bs=1k count=64 skip=786432
    This assumes you card's bios is cached in 0xc0000. You
    can see where and how much your card's bios is using by
    doing a cat iomem | grep "Video ROM"
    • dd Explained (man dd to learn more):
      • if is the location to retrieve from.
      • of is the output file (your rom image)
      • skip jumps n blocks where the default n is 512 bytes
      • count is how many blocks you wish to read
      • bs is the block size
  • You now have a video bios image
Perl script to dump out your video bios

This is a simple script that computes the size and offset then uses the command dd to dump your video bios to a file.

#!/usr/bin/perl

($range, $info) = split /:/, `grep "Video ROM" /proc/iomem`;
($start, $end) = split /-/, $range;

if( $start eq "" ) {
       print "Couldn't find Video ROM in /proc/iomem\n";
       exit;
}

$offset = hex "0x$start";
$tmp = hex "0x$end";
$size = 1 + $tmp - $offset;

$command = "dd if=/dev/mem of=saved_vgabios.bin bs=1c count=$size skip=$offset";
print "range = $range, start = $start, size = $size\n";
print "$command\n";
system $command;