Author: stepan
Date: Thu Apr 22 20:15:32 2010
New Revision: 5478
URL: https://tracker.coreboot.org/trac/coreboot/changeset/5478

Log:
via epia-m now works with default x86.c instead of its own copy of vgabios.c.
Allows to drop quite a bunch of nasty code

Signed-off-by: Stefan Reinauer <ste...@coresystems.de>
Acked-by: Stefan Reinauer <ste...@coresystems.de>

Added:
   trunk/src/northbridge/via/vt8623/vga.c
Deleted:
   trunk/src/mainboard/via/epia-m/Makefile.inc
   trunk/src/mainboard/via/epia-m/vgabios.c
   trunk/src/mainboard/via/epia-m/vgachip.h
Modified:
   trunk/src/devices/oprom/x86.c
   trunk/src/devices/oprom/x86_asm.S
   trunk/src/mainboard/via/epia-m/Kconfig
   trunk/src/mainboard/via/epia-m/devicetree.cb
   trunk/src/mainboard/via/epia-m/mainboard.c
   trunk/src/mainboard/via/epia-m/romstage.c
   trunk/src/northbridge/via/vt8623/Makefile.inc
   trunk/src/northbridge/via/vt8623/northbridge.c
   trunk/src/northbridge/via/vt8623/northbridge.h

Modified: trunk/src/devices/oprom/x86.c
==============================================================================
--- trunk/src/devices/oprom/x86.c       Thu Apr 22 15:18:09 2010        (r5477)
+++ trunk/src/devices/oprom/x86.c       Thu Apr 22 20:15:32 2010        (r5478)
@@ -318,7 +318,7 @@
 
        /* Pass errors back to our caller via the CARRY flag */
        if (ret) {
-               printk(BIOS_DEBUG,"error!\n");
+               printk(BIOS_DEBUG,"int%02x call returned error.\n", intnumber);
                flags |= 1;  // error: set carry
        }else{
                flags &= ~1; // no error: clear carry

Modified: trunk/src/devices/oprom/x86_asm.S
==============================================================================
--- trunk/src/devices/oprom/x86_asm.S   Thu Apr 22 15:18:09 2010        (r5477)
+++ trunk/src/devices/oprom/x86_asm.S   Thu Apr 22 20:15:32 2010        (r5478)
@@ -257,8 +257,6 @@
        .globl __run_interrupt
 __run_interrupt = RELOCATED(.)
 
-       /* paranoia -- does ecx get saved? not sure. This is
-        * the easiest safe thing to do. */
        pushal
        /* save the stack */
        mov     %esp, __stack

Modified: trunk/src/mainboard/via/epia-m/Kconfig
==============================================================================
--- trunk/src/mainboard/via/epia-m/Kconfig      Thu Apr 22 15:18:09 2010        
(r5477)
+++ trunk/src/mainboard/via/epia-m/Kconfig      Thu Apr 22 20:15:32 2010        
(r5478)
@@ -22,24 +22,8 @@
        default "EPIA-M"
        depends on BOARD_VIA_EPIA_M
 
-config RAMBASE
-       hex
-       default 0x4000
-       depends on BOARD_VIA_EPIA_M
-
 config IRQ_SLOT_COUNT
        int
        default 5
        depends on BOARD_VIA_EPIA_M
 
-# this is done by this board's vgabios.c already
-config VGA_ROM_RUN
-       bool
-       default n
-       depends on BOARD_VIA_EPIA_M
-
-config PCI_ROM_RUN
-       bool
-       default n
-       depends on BOARD_VIA_EPIA_M
-

Modified: trunk/src/mainboard/via/epia-m/devicetree.cb
==============================================================================
--- trunk/src/mainboard/via/epia-m/devicetree.cb        Thu Apr 22 15:18:09 
2010        (r5477)
+++ trunk/src/mainboard/via/epia-m/devicetree.cb        Thu Apr 22 20:15:32 
2010        (r5478)
@@ -7,6 +7,10 @@
        end
 
        device pci_domain 0 on
+
+               device pci 0.0 on end
+               device pci 1.0 on end
+
                chip southbridge/via/vt8235
 
                        device pci 10.0 on end # USB 1.1

Modified: trunk/src/mainboard/via/epia-m/mainboard.c
==============================================================================
--- trunk/src/mainboard/via/epia-m/mainboard.c  Thu Apr 22 15:18:09 2010        
(r5477)
+++ trunk/src/mainboard/via/epia-m/mainboard.c  Thu Apr 22 20:15:32 2010        
(r5478)
@@ -1,40 +1,5 @@
-#include <console/console.h>
 #include <device/device.h>
-#include <device/pci.h>
-#include <device/pci_ids.h>
-#include <device/pci_ops.h>
-#include <arch/io.h>
 #include "chip.h"
-#include "vgachip.h"
-
-static void vga_fixup(void) {
-        // we do this right here because:
-        // - all the hardware is working, and some VGA bioses seem to need
-        //   that
-        // - we need page 0 below for coreboot tables.
-
-        printk(BIOS_DEBUG, "INSTALL REAL-MODE IDT\n");
-        setup_realmode_idt();
-        printk(BIOS_DEBUG, "DO THE VGA BIOS\n");
-        do_vgabios();
-        post_code(0x93);
-       vga_enable_console();
-}
- 
-void write_protect_vgabios(void)
-{
-       device_t dev;
- 
-       printk(BIOS_INFO, "write_protect_vgabios\n");
-       /* there are two possible devices. Just do both. */
-       dev = dev_find_device(PCI_VENDOR_ID_VIA, 0x3122, 0);
-       if(dev)
-               pci_write_config8(dev, 0x61, 0xaa);
-
-       dev = dev_find_device(PCI_VENDOR_ID_VIA, 0x3123, 0);
-       if(dev)
-               pci_write_config8(dev, 0x61, 0xaa);
-}
 
 struct chip_operations mainboard_ops = {
        CHIP_NAME("VIA EPIA-M Mainboard")

Modified: trunk/src/mainboard/via/epia-m/romstage.c
==============================================================================
--- trunk/src/mainboard/via/epia-m/romstage.c   Thu Apr 22 15:18:09 2010        
(r5477)
+++ trunk/src/mainboard/via/epia-m/romstage.c   Thu Apr 22 20:15:32 2010        
(r5478)
@@ -30,7 +30,7 @@
 {
        device_t dev;
   
-       dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_VIA,
+       dev = pci_locate_device_on_bus(PCI_ID(PCI_VENDOR_ID_VIA,
                                PCI_DEVICE_ID_VIA_8235), 0);
   
        if (dev == PCI_DEV_INVALID) {
@@ -82,7 +82,7 @@
         * Disable the firewire stuff, which apparently steps on IO 0+ on
         * reset. Doh!
         */
-       dev = pci_locate_device(PCI_ID(PCI_VENDOR_ID_VIA,
+       dev = pci_locate_device_on_bus(PCI_ID(PCI_VENDOR_ID_VIA,
                                PCI_DEVICE_ID_VIA_6305), 0);
        if (dev != PCI_DEV_INVALID) {
                pci_write_config8(dev, 0x15, 0x1c);
@@ -94,14 +94,12 @@
 
        enable_smbus();
 
-       print_spew("In romstage.c:main()\n");
-
        /* Halt if there was a built in self test failure */
        report_bist_failure(bist);
 
        // init_timer();
 
-       outb(5, 0x80);  
+       post_code(0x05);
 
        print_debug(" Enabling mainboard devices\n");
        enable_mainboard_devices();
@@ -113,18 +111,11 @@
        
        /* Check all of memory */
 #if 0
-       ram_check(0x00000000, msr.lo);
-#endif
-#if 0
        static const struct {
                unsigned long lo, hi;
        } check_addrs[] = {
                /* Check 16MB of memory @ 0*/
                { 0x00000000, 0x01000000 },
-#if TOTAL_CPUS > 1
-               /* Check 16MB of memory @ 2GB */
-               { 0x80000000, 0x81000000 },
-#endif
        };
        int i;
        for(i = 0; i < ARRAY_SIZE(check_addrs); i++) {

Modified: trunk/src/northbridge/via/vt8623/Makefile.inc
==============================================================================
--- trunk/src/northbridge/via/vt8623/Makefile.inc       Thu Apr 22 15:18:09 
2010        (r5477)
+++ trunk/src/northbridge/via/vt8623/Makefile.inc       Thu Apr 22 20:15:32 
2010        (r5478)
@@ -19,4 +19,5 @@
 ##
 
 driver-y += northbridge.o
+driver-y += vga.o
 

Modified: trunk/src/northbridge/via/vt8623/northbridge.c
==============================================================================
--- trunk/src/northbridge/via/vt8623/northbridge.c      Thu Apr 22 15:18:09 
2010        (r5477)
+++ trunk/src/northbridge/via/vt8623/northbridge.c      Thu Apr 22 20:15:32 
2010        (r5478)
@@ -105,82 +105,6 @@
        .device = PCI_DEVICE_ID_VIA_8633_1,
 };
 
-static void vga_init(device_t dev)
-{
-       //unsigned long fb;
-       //msr_t clocks1,clocks2,instructions,setup;
-
-       printk(BIOS_DEBUG, "VGA random fixup ...\n");
-       pci_write_config8(dev, 0x04, 0x07);
-       pci_write_config8(dev, 0x0d, 0x20);
-       pci_write_config32(dev,0x10,0xd8000008);
-       pci_write_config32(dev,0x14,0xdc000000);
-
-       // set up performnce counters for debugging vga init sequence
-       //setup.lo = 0x1c0; // count instructions
-       //wrmsr(0x187,setup);
-       //instructions.hi = 0;
-       //instructions.lo = 0;
-       //wrmsr(0xc2,instructions);
-       //clocks1 = rdmsr(0x10);
-
-       
-#if 0
-       /* code to make vga init go through the emulator - as of yet this does 
not workfor the epia-m */
-       pci_dev_init(dev);
-       
-       call_bios_interrupt(0x10,0x4f1f,0x8003,1,0);
-       
-       //clocks2 = rdmsr(0x10);
-       //instructions = rdmsr(0xc2);
-       
-       printk(BIOS_DEBUG, "Clocks 1 = %08x:%08x\n",clocks1.hi,clocks1.lo);
-       printk(BIOS_DEBUG, "Clocks 2 = %08x:%08x\n",clocks2.hi,clocks2.lo);
-       printk(BIOS_DEBUG, "Instructions = 
%08x:%08x\n",instructions.hi,instructions.lo);
-
-#else
-
-       /* code to make vga init run in real mode - does work but against the 
current coreboot philosophy */
-       printk(BIOS_DEBUG, "INSTALL REAL-MODE IDT\n");
-        setup_realmode_idt();
-        printk(BIOS_DEBUG, "DO THE VGA BIOS\n");
-        do_vgabios();
-
-       //clocks2 = rdmsr(0x10);
-       //instructions = rdmsr(0xc2);
-       
-       //printk(BIOS_DEBUG, "Clocks 1 = %08x:%08x\n",clocks1.hi,clocks1.lo);
-       //printk(BIOS_DEBUG, "Clocks 2 = %08x:%08x\n",clocks2.hi,clocks2.lo);
-       //printk(BIOS_DEBUG, "Instructions = 
%08x:%08x\n",instructions.hi,instructions.lo);
-
-        vga_enable_console();
-       
-#endif
-
-       pci_write_config32(dev,0x30,0);
-
-       /* Set the vga mtrrs - disable for the moment as the add_var_mtrr 
function has vapourised */
-#if 0
-       add_var_mtrr( 0xd0000000 >> 10, 0x08000000>>10, MTRR_TYPE_WRCOMB);
-       fb = pci_read_config32(dev,0x10); // get the fb address
-       add_var_mtrr( fb>>10, 8192, MTRR_TYPE_WRCOMB);
-#endif
-}
-
-static struct device_operations vga_operations = {
-       .read_resources   = pci_dev_read_resources,
-       .set_resources    = pci_dev_set_resources,
-       .enable_resources = pci_dev_enable_resources,
-       .init             = vga_init,
-       .ops_pci          = 0,
-};
-
-static const struct pci_driver vga_driver __pci_driver = {
-       .ops = &vga_operations,
-       .vendor = PCI_VENDOR_ID_VIA,
-       .device = 0x3122,
-};
-
 static void ram_resource(device_t dev, unsigned long index,
         unsigned long basek, unsigned long sizek)
 {

Modified: trunk/src/northbridge/via/vt8623/northbridge.h
==============================================================================
--- trunk/src/northbridge/via/vt8623/northbridge.h      Thu Apr 22 15:18:09 
2010        (r5477)
+++ trunk/src/northbridge/via/vt8623/northbridge.h      Thu Apr 22 20:15:32 
2010        (r5478)
@@ -2,11 +2,7 @@
 #define NORTHBRIDGE_VIA_VT8623_H
 
 unsigned int vt8623_scan_root_bus(device_t root, unsigned int max);
-
-void vga_enable_console(void);
-void do_vgabios(void);
-void setup_realmode_idt(void);
+extern void (*vga_enable_console)(void) __attribute__((regparm(0)));
 void write_protect_vgabios(void);
 
-
 #endif /* NORTHBRIDGE_VIA_VT8623_H */

Added: trunk/src/northbridge/via/vt8623/vga.c
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ trunk/src/northbridge/via/vt8623/vga.c      Thu Apr 22 20:15:32 2010        
(r5478)
@@ -0,0 +1,158 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007-2009 coresystems GmbH
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#include <console/console.h>
+#include <arch/io.h>
+#include <stdint.h>
+#include <device/device.h>
+#include <device/pci.h>
+#include <device/pci_ids.h>
+#include <stdlib.h>
+#include <string.h>
+#include <bitops.h>
+#include <cpu/cpu.h>
+#include <cpu/x86/mtrr.h>
+#include <cpu/x86/msr.h>
+#include <arch/interrupt.h>
+#include "chip.h"
+#include "northbridge.h"
+
+static int via_vt8623_int15_handler(struct eregs *regs)
+{
+       int res=-1;
+       printk(BIOS_DEBUG, "via_vt8623_int15_handler\n");
+       switch(regs->eax & 0xffff) {
+       case 0x5f19:
+               break;
+       case 0x5f18:
+               regs->eax=0x5f;
+               regs->ebx=0x545; // MCLK = 133, 32M frame buffer, 256 M main 
memory
+               regs->ecx=0x060;
+               res=0;
+               break;
+       case 0x5f00:
+               regs->eax = 0x8600;
+               break;
+       case 0x5f01:
+               regs->eax = 0x5f;
+               regs->ecx = (regs->ecx & 0xffffff00 ) | 2; // panel type =  2 = 
1024 * 768
+               res = 0;
+               break;
+       case 0x5f02:
+               regs->eax=0x5f;
+               regs->ebx= (regs->ebx & 0xffff0000) | 2;
+               regs->ecx= (regs->ecx & 0xffff0000) | 0x401;  // PAL + crt only 
+               regs->edx= (regs->edx & 0xffff0000) | 0;  // TV Layout - default
+               res=0;
+               break;
+       case 0x5f0f:
+               regs->eax=0x860f;
+               break;
+        default:
+               printk(BIOS_DEBUG, "Unknown INT15 function %04x!\n", 
+                               regs->eax & 0xffff);
+               break;
+       }
+       return res;
+}
+
+void write_protect_vgabios(void)
+{
+       device_t dev;
+
+       printk(BIOS_DEBUG, "write_protect_vgabios\n");
+
+       dev = dev_find_device(PCI_VENDOR_ID_VIA, 0x3122, 0);
+       if (dev)
+               pci_write_config8(dev, 0x61, 0xaa);
+
+       dev = dev_find_device(PCI_VENDOR_ID_VIA, 0x3123, 0);
+       if (dev)
+               pci_write_config8(dev, 0x61, 0xaa);
+}
+
+static void vga_random_fixup(device_t dev)
+{
+       printk(BIOS_DEBUG, "VGA random fixup ...\n");
+       pci_write_config8(dev, 0x04, 0x07);
+       pci_write_config8(dev, 0x0d, 0x20);
+       pci_write_config32(dev,0x10,0xd8000008);
+       pci_write_config32(dev,0x14,0xdc000000);
+}
+
+static void vga_init(device_t dev)
+{
+       vga_random_fixup(dev);
+
+       mainboard_interrupt_handlers(0x15, &via_vt8623_int15_handler);
+
+#ifdef MEASURE_VGA_INIT_TIME
+       msr_t clocks1, clocks2, instructions, setup;
+
+       // set up performnce counters for debugging vga init sequence
+       setup.lo = 0x1c0; // count instructions
+       wrmsr(0x187,setup);
+       instructions.hi = 0;
+       instructions.lo = 0;
+       wrmsr(0xc2,instructions);
+       clocks1 = rdmsr(0x10);
+#endif
+       printk(BIOS_DEBUG, "Initializing VGA...\n");
+
+       pci_dev_init(dev);
+
+       printk(BIOS_DEBUG, "Enable VGA console\n");
+       // this is how it should look:
+       //   call_bios_interrupt(0x10,0x4f1f,0x8003,1,0);
+       // this is how it looks:
+       vga_enable_console();
+       
+#ifdef MEASURE_VGA_INIT_TIME
+       clocks2 = rdmsr(0x10);
+       instructions = rdmsr(0xc2);
+       
+       printk(BIOS_DEBUG, "Clocks 1 = %08x:%08x\n",clocks1.hi,clocks1.lo);
+       printk(BIOS_DEBUG, "Clocks 2 = %08x:%08x\n",clocks2.hi,clocks2.lo);
+       printk(BIOS_DEBUG, "Instructions = 
%08x:%08x\n",instructions.hi,instructions.lo);
+#endif
+
+       pci_write_config32(dev, 0x30, 0);
+
+#if 0
+       /* Set the vga mtrrs - disable for the moment as the add_var_mtrr 
function has vapourised */
+       unsigned long fb;
+       add_var_mtrr( 0xd0000000 >> 10, 0x08000000>>10, MTRR_TYPE_WRCOMB);
+       fb = pci_read_config32(dev,0x10); // get the fb address
+       add_var_mtrr( fb>>10, 8192, MTRR_TYPE_WRCOMB);
+#endif
+}
+
+static struct device_operations vga_operations = {
+       .read_resources = pci_dev_read_resources,
+       .set_resources = pci_dev_set_resources,
+       .enable_resources = pci_dev_enable_resources,
+       .init = vga_init,
+       .ops_pci = 0,
+};
+
+static const struct pci_driver vga_driver __pci_driver = {
+       .ops = &vga_operations,
+       .vendor = PCI_VENDOR_ID_VIA,
+       .device = 0x3122,
+};

-- 
coreboot mailing list: coreboot@coreboot.org
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to