I have successfully built LinuxBIOS to load a kernel from my IDE drive and boot using a serial console. Now I would like to test the VGA funtionality of my board. Has anyone had any experience getting the VGA to turn on and work within LinuxBIOS and/or Linux? John
I have successfully built LinuxBIOS to load a kernel from my IDE drive and boot using a serial console. Now I would like to test the VGA funtionality of my board. Has anyone had any experience getting the VGA to turn on and work within LinuxBIOS and/or Linux? John
From my previos posts of the last few days:
-------------------- I have the code to set the legacy registers to start VGA for a vga console, integrated into linuxbios, working on two different integrated chips, the stpc cpu/chipset, and the sis 630 chipset. It sets the registers for 640x400 std text vga, and also 640x480x4 graphics. I was working on the display of a .pcx graphics file when I had to get onto something else, but it was all working the last time I tried it.
The only reason this hasn't been integrated into linuxbios codebase at this point is partly lack of interest (I think) in this group, since most use the serial console, and partly that I have been off on other things lately.
Until this gets into the linuxbios base, anyone that wants the code just send me an email. -----------------------
I guess as interest picks up, we need to integrate it into linuxbios. File list is below.
-Steve
#added files
#vga generic src/include/pc80/vga.h src/pc80/beep.c src/pc80/font_8x16.c src/pc80/vga_load_pcx.c src/pc80/vga_load_regs.c src/pc80/vga_set_mode.c
#this is a replacement src/lib/video_subr.c
#pcchips 787 specific util/config/pcchips787.config src/mainboard/pcchips/m787cl+/irq_tables.c src/mainboard/pcchips/m787cl+/Config src/mainboard/pcchips/m787cl+/dll.inc src/mainboard/pcchips/m787cl+/mainboard.c
#sis-vga specific src/northsouthbridge/sis/630/chipinit.h src/northsouthbridge/sis/630/chipinit.inc src/northsouthbridge/sis/630/sis630_vga.c
#stpc specific util/config/stpc.config src/include/cpu/stpc/consumer2/stpc.h src/include/cpu/stpc/consumer2/vga_stpc.h src/cpu/stpc/consumer2/stpc_ram_init.inc src/cpu/stpc/consumer2/stpc_shadow_rom.inc src/cpu/stpc/consumer2/stpc_chip.inc src/cpu/stpc/consumer2/stpc_ioinit.inc src/cpu/stpc/consumer2/stpc_memsize.inc src/cpu/stpc/consumer2/stpc_cache.inc src/cpu/stpc/consumer2/stpc_idt.inc src/cpu/stpc/consumer2/stpc_framebuffer.inc src/cpu/stpc/consumer2/stpc_vga.c src/cpu/stpc/consumer2/Config src/cpu/stpc/consumer2/stpc_conf.c src/superio/SMC/fdc37b78x src/superio/SMC/fdc37b78x/setup_serial.inc src/superio/SMC/fdc37b78x/superio.c src/superio/SMC/fdc37b78x/superio.o src/mainboard/stpc/consumer2/Config src/mainboard/stpc/consumer2/mainboard.c src/mainboard/stpc/consumer2/irq_tables.c src/northsouthbridge/stpc/consumer2/Config src/northsouthbridge/stpc/consumer2/nsbridge.c
#changed (diff) files
src/include/pc80/ide.h src/pc80/Config src/pc80/ide/ide.c src/lib/linuxbiosmain.c src/arch/i386/lib/hardwaremain.c src/arch/i386/lib/params.c src/arch/i386/include/arch/pirq_routing.h src/rom/ide_fill_inbuf.c src/rom/floppy_fill_inbuf.c src/cpu/p5/Config src/cpu/p5/delay_tsc.c src/northsouthbridge/sis/630/Config src/northsouthbridge/sis/630/raminit.inc src/northsouthbridge/sis/630/southbridge.c
On Thu, 12 Dec 2002 10:01:42 -0800, Steve M. Gehlbach wrote:
#stpc specific src/cpu/stpc/consumer2/stpc_ram_init.inc src/cpu/stpc/consumer2/stpc_shadow_rom.inc src/cpu/stpc/consumer2/stpc_chip.inc src/cpu/stpc/consumer2/stpc_ioinit.inc src/cpu/stpc/consumer2/stpc_memsize.inc src/cpu/stpc/consumer2/stpc_cache.inc src/cpu/stpc/consumer2/stpc_idt.inc src/cpu/stpc/consumer2/stpc_framebuffer.inc src/cpu/stpc/consumer2/stpc_vga.c src/cpu/stpc/consumer2/Config src/cpu/stpc/consumer2/stpc_conf.c
I've got an atlas board I'd like to try booting linux bios on. Any idea when you might commit this stuff?
-- Richard A. Smith Bitworks, Inc. rsmith@bitworks.com 479.846.5777 x104 Sr. Design Engineer http://www.bitworks.com
Once I understand all the ins and outs of the changes it gets comitted, unless andrew ip does it first :-)
ron
I have successfully built LinuxBIOS to load a kernel from my IDE drive and boot using a serial console. Now I would like to test the VGA funtionality of my board. Has anyone had any experience getting the VGA to turn on and work within LinuxBIOS and/or Linux? John
From my previos posts of the last few days:
I have the code to set the legacy registers to start VGA for a vga console, integrated into linuxbios, working on two different integrated chips, the stpc cpu/chipset, and the sis 630 chipset. It sets the registers for 640x400 std text vga, and also 640x480x4 graphics. I was working on the display of a .pcx graphics file when I had to get onto something else, but it was all working the last time I tried it.
The only reason this hasn't been integrated into linuxbios codebase at this point is partly lack of interest (I think) in this group, since most use the serial console, and partly that I have been off on other things lately.
Hi Steve,
Well, just to let you know: I'm *VERY* intersted in having VGA on my Geode GX1 boards (the sc2200 is, as I understand it, compatible with the GX1) ! :-)
I haven't used linuxbios yet, but somewhere in the next weeks I'll start experimenting with it.
greetings, Rob van Nieuwkerk
Well, just to let you know: I'm *VERY* intersted in having VGA on my Geode GX1 boards (the sc2200 is, as I understand it, compatible with the GX1) ! :-)
I haven't used linuxbios yet, but somewhere in the next weeks I'll start experimenting with it.
greetings, Rob van Nieuwkerk
The vga code has now been integrated into the linuxbios codebase. Look at the code in /src/northsouthbridge/sis/630 for examples to extending it to the Geode. This is all legacy text mode, or in the case of the splash screen, simple legacy graphics mode. If you are interested in the linux framebuffer, that would be different matter.
-Steve
John Allen jallen@integraltech.com writes:
I have successfully built LinuxBIOS to load a kernel from my IDE drive and boot using a serial console. Now I would like to test the VGA funtionality of my board. Has anyone had any experience getting the VGA to turn on and work within LinuxBIOS and/or Linux? John
<cut'n'paste> There is no video support in LinuxBIOS itself, so you won't get any video until you have loaded the NatSemi Geode Linux framebuffer driver (can be found at www.linux4.tv under the heading SP1SC10 Platform Image). </cut'n'paste>
Go fetch the NatSemi driver, that will give you video in Linux.
/Christer (who _definitely_ has to write a FAQ soon)
Christer Weinigel christer@weinigel.se writes:
John Allen jallen@integraltech.com writes:
I have successfully built LinuxBIOS to load a kernel from my IDE drive and boot using a serial console. Now I would like to test the VGA funtionality of my board. Has anyone had any experience getting the VGA to turn on and work within LinuxBIOS and/or Linux? John
<cut'n'paste> There is no video support in LinuxBIOS itself, so you won't get any video until you have loaded the NatSemi Geode Linux framebuffer driver (can be found at www.linux4.tv under the heading SP1SC10 Platform Image). </cut'n'paste>
Go fetch the NatSemi driver, that will give you video in Linux.
/Christer (who _definitely_ has to write a FAQ soon)
<confession time>
Ok, I downloaded the linux4.tv driver again and tried it on my SC2200 board and I can't get it to work either. Very strange, since I had it working with LinuxBIOS a couple of months ago. It might be that I had to turn on some clock or PLL by hand.
</confession time>
Oh well, I'll try to see if I can find a backup of the kernel I used then and see if I can get it running again.
/Christer
Christer Weinigel christer@weinigel.se writes:
<confession time>
Ok, I downloaded the linux4.tv driver again and tried it on my SC2200 board and I can't get it to work either. Very strange, since I had it working with LinuxBIOS a couple of months ago. It might be that I had to turn on some clock or PLL by hand.
</confession time>
Oh well, I'll try to see if I can find a backup of the kernel I used then and see if I can get it running again.
Following up to myself... Backups are a good thing :-)
This patch initializes a few registers on the SC2200 that the geodefb code from linux4.tv doesn't seem to touch. The values I'm storing into the registers are read from a system running with the XpressROM BIOS. Now I can see the penguin when booting Linux from LinuxBIOS. The timing for the video mode seems strange, my monitor has some trouble syncing on this signal, but at least I get some kind of video. I guess that something similar is needed to get video from a CS5530 based system.
I think I'll give up on this for the moment, I'm not all that interested in video myself, I just wanted to know why it didn't work when I knew that I had had it running before. If anyone needs video to work on a SC2200, make a dump of the F4BAR1 registers and the GCR registers and compare them with a working system (booted from XPressROM) and look in the data sheets to see if the differences seem significant.
/Christer (off to sleep)
diff -ur linux-2.4.19/drivers/video/geode/geodefb.c.orig linux-2.4.19/drivers/video/geode/geodefb.c --- linux-2.4.19/drivers/video/geode/geodefb.c.orig Tue Apr 10 17:09:01 2001 +++ linux-2.4.19/drivers/video/geode/geodefb.c Mon Jan 6 23:27:31 2003 @@ -182,6 +182,8 @@ #include <linux/init.h> #include <linux/devfs_fs_kernel.h>
+#include <linux/pci.h> + #include <asm/io.h> #include <asm/mtrr.h>
@@ -1350,6 +1352,36 @@ return(-EBUSY); }
+ if (1) /* wingel */ + { + struct pci_dev *pdev; + u8 *video; + + if ((pdev = pci_find_device(PCI_VENDOR_ID_NS, + PCI_DEVICE_ID_NS_SCx200_VIDEO, + NULL)) == NULL) { + printk("can't find scx200\n"); + } else if (!(video = ioremap(pci_resource_start(pdev, 1), 0x1000))) { + printk(KERN_ERR "unable to ioremap video\n"); + } else { + writel(0x00001000, gfx_virt_regptr + 0x8308); /* disable timing generator */ + + writel(0x0020030f, video + 0x04); + writel(0x00001000, video + 0x28); + writel(0x0070e00c, video + 0x2c); + + writel(0x00000100, video + 0x44); + writel(0x00000156, video + 0x48); + writel(0x00060000, video + 0x4c); + writel(0x00ffffff, video + 0x50); + writel(0x00ffffff, video + 0x54); + + writel(0x1000102f, gfx_virt_regptr + 0x8308); + + iounmap(video); + } + } + geode_create_galdevice();
strcpy(gen.info.modename, geodefb_name);