hi, I find most code is already there in scitech's x86emu-0.8. in one day it is adapted into linux kernel. If anybody is interested,my code can be fetched from ftp://ftp.gnuchina.org/incoming/mips-vga-init/freebiosvga.tar.gz For a short description,the READ in the package is paste here: This is x86/bios emulator adapted for used in 2.4 kernel to do initialize pc VGA cards. Port it to pmon/yamon should be easy,if you want an userland executable,please download the original x86emu-0.8 from SciTech Software, Inc. Usage: here is my choice: 1.add code in new directory arch/mips/freebiosvga/ 2.arch/mips/config.in: add config option CONFIG_VGA_POST to proper place bool ' Support for VGA POST' CONFIG_VGA_POST 3.arch/mips/Makefile add directory and target objects of freevgabios ifdef CONFIG_VGA_POST SUBDIRS += arch/mips/freebiosvga LIBS += arch/mips/freebiosvga/vga.o SUBDIRS += arch/mips/freebiosvga/x86emu LIBS += arch/mips/freebiosvga/x86emu/x86emu.o endif 4.init/main.c: add call to vgabios_init (right after pci_init) #ifdef CONFIG_VGA_POST vgabios_init(); #endif 5.select 'VGA text console' or proper framebuffer, you may need to slightly modify the code,because many of them is for x86 for 'VGA text console',the file is drivers/video/vgacon.c,propably you need to comment out the check for card's presence in vgacon_startup. Because card initialization is later than console_init,so at that time pci address 0xa0000-0xc0000 may not response to your requests. Problems & limits: 1.currently the code rely on system's pci resource allocator to assign a valid address to rom base register(offset 0x30 in pci header). I have modified the pci_auto.c to handle rom. Patch is here: diff -r1.2 pci_auto.c 107a108,110 > u32 bases[7] = {PCI_BASE_ADDRESS_0,PCI_BASE_ADDRESS_1,PCI_BASE_ADDRESS_2, > PCI_BASE_ADDRESS_3,PCI_BASE_ADDRESS_4,PCI_BASE_ADDRESS_5, > PCI_ROM_ADDRESS}; 110c113,116 < for (bar = PCI_BASE_ADDRESS_0; bar <= PCI_BASE_ADDRESS_5; bar+=4) { --- > for (bar_nr=0; bar_nr<7; bar_nr++) { > > bar = bases[bar_nr]; > 137c143 < if (bar_response & PCI_BASE_ADDRESS_SPACE) { --- > if (bar_nr != 6 && (bar_response & PCI_BASE_ADDRESS_SPACE)) { 209d214 < bar_nr++; 349,350d353 < < DBG("Skipping legacy mode IDE controller\n"); if you don't use pci_auto,then make sure your pmon/yamon do it. Of course,you can write an absolute,safe value for your specific platform to see it works:) If the base address read from your card is invalid,you will get message like: "No address assigned to rom" or "No valid bios found" 2. i am assuming ioremap(a_pci_address) will return a valid cpu virtue address for accessing memory located at 'a_pci_address'. 3. Multiple cards are not supported currently,though it may be a piece of cake.Complex cards,e.g. those contain bridges,may fail. 4. cards tested here include: trident 3Dimage9750,S3virge,Riva TNT2 DISCLAIMER: It is provided "as is" without express or implied warranty. Any problems you can contact fxzhang@ict.ac.cn. Happy hacking and good luck. -- Zhang Fuxin System Architecture Lab Institute of Computing Technology Chinese Academy of Sciences,China http://www.ict.ac.cn Regards Zhang Fuxin fxzhang@ict.ac.cn