[coreboot] r973 - coreboot-v3/mainboard/via/epia-cn

svn at coreboot.org svn at coreboot.org
Fri Oct 31 19:57:37 CET 2008


Author: rminnich
Date: 2008-10-31 19:57:37 +0100 (Fri, 31 Oct 2008)
New Revision: 973

Added:
   coreboot-v3/mainboard/via/epia-cn/cmos.layout
   coreboot-v3/mainboard/via/epia-cn/dts
   coreboot-v3/mainboard/via/epia-cn/initram.c
   coreboot-v3/mainboard/via/epia-cn/mainboard.h
   coreboot-v3/mainboard/via/epia-cn/stage1.c
Log:
new files
Signed-off-by: Ronald G. Minnich <rminnich at gmail.com>
Acked-by: Ronald G. Minnich <rminnich at gmail.com>



Added: coreboot-v3/mainboard/via/epia-cn/cmos.layout
===================================================================
--- coreboot-v3/mainboard/via/epia-cn/cmos.layout	                        (rev 0)
+++ coreboot-v3/mainboard/via/epia-cn/cmos.layout	2008-10-31 18:57:37 UTC (rev 973)
@@ -0,0 +1,131 @@
+#
+# This file is part of the coreboot project.
+# 
+# Copyright (C) 2007-2008 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
+#
+
+# TODO verify that these are correct for this part on the VIA
+
+# -----------------------------------------------------------------
+entries
+
+#start-bit length  config config-ID    name
+#0            8       r       0        seconds
+#8            8       r       0        alarm_seconds
+#16           8       r       0        minutes
+#24           8       r       0        alarm_minutes
+#32           8       r       0        hours
+#40           8       r       0        alarm_hours
+#48           8       r       0        day_of_week
+#56           8       r       0        day_of_month
+#64           8       r       0        month
+#72           8       r       0        year
+# -----------------------------------------------------------------
+# Status Register A
+#80           4       r       0        rate_select
+#84           3       r       0        REF_Clock
+#87           1       r       0        UIP
+# -----------------------------------------------------------------
+# Status Register B
+#88           1       r       0        auto_switch_DST
+#89           1       r       0        24_hour_mode
+#90           1       r       0        binary_values_enable
+#91           1       r       0        square-wave_out_enable
+#92           1       r       0        update_finished_enable
+#93           1       r       0        alarm_interrupt_enable
+#94           1       r       0        periodic_interrupt_enable
+#95           1       r       0        disable_clock_updates
+# -----------------------------------------------------------------
+# Status Register C
+#96           4       r       0        status_c_rsvd
+#100          1       r       0        uf_flag
+#101          1       r       0        af_flag
+#102          1       r       0        pf_flag
+#103          1       r       0        irqf_flag
+# -----------------------------------------------------------------
+# Status Register D
+#104          7       r       0        status_d_rsvd
+#111          1       r       0        valid_cmos_ram
+# -----------------------------------------------------------------
+# Diagnostic Status Register
+#112          8       r       0        diag_rsvd1
+
+# -----------------------------------------------------------------
+0          120       r       0        reserved_memory
+#120        264       r       0        unused
+
+# -----------------------------------------------------------------
+# RTC_BOOT_BYTE (coreboot hardcoded)
+384          1       e       4        boot_option
+385          1       e       4        last_boot
+388          4       r       0        reboot_bits
+#390          2       r       0        unused?
+
+# -----------------------------------------------------------------
+# coreboot config options: console
+392          3       e       5        baud_rate
+395          4       e       6        debug_level
+#399          1       r       0        unused
+
+# coreboot config options: southbridge
+408          1       e       1        nmi
+409          1       e       1        power_on_after_fail
+#410          6       r       0        unused
+
+# coreboot config options: bootloader
+416        512       s       0        boot_devices
+#928         80       r       0        unused
+
+# coreboot config options: check sums
+984         16       h       0        check_sum
+
+# -----------------------------------------------------------------
+
+enumerations
+
+#ID value   text
+1     0     Disable
+1     1     Enable
+2     0     Enable
+2     1     Disable
+4     0     Fallback
+4     1     Normal
+5     0     115200
+5     1     57600
+5     2     38400
+5     3     19200
+5     4     9600
+5     5     4800
+5     6     2400
+5     7     1200
+6     1     Emergency
+6     2     Alert
+6     3     Critical
+6     4     Error
+6     5     Warning
+6     6     Notice
+6     7     Info
+6     8     Debug
+6     9     Spew
+
+# -----------------------------------------------------------------
+checksums
+
+checksum 392 983 984
+
+

Added: coreboot-v3/mainboard/via/epia-cn/dts
===================================================================
--- coreboot-v3/mainboard/via/epia-cn/dts	                        (rev 0)
+++ coreboot-v3/mainboard/via/epia-cn/dts	2008-10-31 18:57:37 UTC (rev 973)
@@ -0,0 +1,76 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2008 Corey Osgood <corey.osgood at gmail.com>
+ *
+ * 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; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * 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
+ */
+
+/*
+-[0000:00]-+-00.0  VIA Technologies, Inc. CN700/VN800/P4M800CE/Pro Host Bridge
+           +-00.1  VIA Technologies, Inc. CN700/VN800/P4M800CE/Pro Host Bridge
+           +-00.2  VIA Technologies, Inc. CN700/VN800/P4M800CE/Pro Host Bridge
+           +-00.3  VIA Technologies, Inc. PT890 Host Bridge
+           +-00.4  VIA Technologies, Inc. CN700/VN800/P4M800CE/Pro Host Bridge
+           +-00.7  VIA Technologies, Inc. CN700/VN800/P4M800CE/Pro Host Bridge
+           +-01.0-[0000:01]----00.0  VIA Technologies, Inc. UniChrome Pro IGP
+           +-08.0  RaLink RT2561/RT61 802.11g PCI
+           +-0a.0  VIA Technologies, Inc. IEEE 1394 Host Controller
+           +-0f.0  VIA Technologies, Inc. VIA VT6420 SATA RAID Controller
+           +-0f.1  VIA Technologies, Inc. VT82C586A/B/VT82C686/A/B/VT823x/A/C PIPC Bus Master IDE
+           +-10.0  VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller
+           +-10.1  VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller
+           +-10.2  VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller
+           +-10.3  VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller
+           +-10.4  VIA Technologies, Inc. USB 2.0
+           +-11.0  VIA Technologies, Inc. VT8237 ISA bridge [KT600/K8T800/K8T890 South]
+           +-11.5  VIA Technologies, Inc. VT8233/A/8235/8237 AC97 Audio Controller
+           \-12.0  VIA Technologies, Inc. VT6102 [Rhine-II]
+*/
+
+/{
+	mainboard_vendor = "VIA";
+	mainboard_name = "EPIA-CN";
+	mainboard_pci_subsystem_vendor = "0xdead"; /* TODO */
+	mainboard_pci_subsystem_device = "0xbeef"; /* TODO */
+	cpus { };
+	apic at 0 {
+	};
+	domain at 0 {
+		pci at 0,0 {};
+		pci at 0,1 {};
+		pci at 0,2 {};
+		pci at 0,3 {};
+		pci at 0,4 {};
+		pci at 0,7 {};
+		pci at 1,0 {};
+		pci at f,0 {};
+		pci at 10,0 {
+			/config/("southbridge/via/vt8237/sata.dts");
+		};
+		pci at 10,1 {
+			/config/("southbridge/via/vt8237/ide.dts");
+		};
+		pci at 11,0 {
+			/config/("southbridge/via/vt8237/lpc.dts");
+		};
+		ioport at 4e {
+/*
+			/config/("superio/via/vt1221/dts");
+			com1enable = "1";
+*/
+		};
+	};
+};

Added: coreboot-v3/mainboard/via/epia-cn/initram.c
===================================================================
--- coreboot-v3/mainboard/via/epia-cn/initram.c	                        (rev 0)
+++ coreboot-v3/mainboard/via/epia-cn/initram.c	2008-10-31 18:57:37 UTC (rev 973)
@@ -0,0 +1,213 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2008 Corey Osgood <corey.osgood at gmail.com>
+ *
+ * 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
+ */
+
+#define _MAINOBJECT
+
+#include <types.h>
+#include <lib.h>
+#include <console.h>
+#include <io.h>
+#include <spd.h>
+#include <via_c7.h>
+#include <arch/x86/pci_ops.h>
+#include <device/pci.h>
+#include <device/pci_ids.h>
+#include <superio/via/vt1211/vt1211.h>
+#include <southbridge/via/vt8237/vt8237.h>
+#include <northbridge/via/cn700/cn700.h>
+
+#define SMBUS_IO_BASE	0x0400
+
+u8 spd_read_byte(u16 dev, u8 addr)
+{
+	return smbus_read_byte(dev, addr, SMBUS_IO_BASE);
+}
+
+void find_smbus_devices(u8 min, u8 max)
+{
+	u8 dev;
+	u8 result;
+	for(dev = min; dev < max; dev++)
+	{
+		result = spd_read_byte(dev, SPD_MEMORY_TYPE);
+		switch(result)
+		{
+			case SPD_MEMORY_TYPE_SDRAM: printk(BIOS_DEBUG,
+				"Possible SDRAM spd at address 0x%2x\n", dev);
+				break;
+			case SPD_MEMORY_TYPE_SDRAM_DDR: printk(BIOS_DEBUG,
+				"Possible DDR SDRAM spd at address 0x%2x\n", dev);
+				break;
+			case SPD_MEMORY_TYPE_SDRAM_DDR2: printk(BIOS_DEBUG,
+				"Possible DDR2 SDRAM spd at address 0x%2x\n", dev);
+				break;
+		};
+	}
+}
+
+
+void dump_smbus_registers(void)
+{
+	int device;
+	for(device = 1; device < (int)0x80; device++) {
+		int j;
+		//if(spd_read_byte(device, 0) < 0 )
+		//	continue;
+		printk(BIOS_DEBUG, "smbus: %02x", device);
+		for(j = 0; j < 256; j++) {
+			int status;
+			u8 byte;
+			status = spd_read_byte(device, j);
+			if (status < 0) {
+				break;
+			}
+			if ((j & 0xf) == 0) {
+				printk(BIOS_DEBUG, "\n%02x: ",j);
+			}
+			byte = status & 0xff;
+			printk(BIOS_DEBUG, "%02x ", byte);
+		}
+		printk(BIOS_DEBUG, "\n");
+	}
+}
+
+static void enable_mainboard_devices(void) 
+{
+	u32 dev;
+
+	pci_conf1_find_device(0x1106, 0x3227, &dev);
+	/* Disable GP3 */
+	pci_conf1_write_config8(dev, 0x98, 0x00);
+
+	pci_conf1_write_config8(dev, 0x50, 0x88);//disable mc97, sata
+	pci_conf1_write_config8(dev, 0x51, 0x1f);
+	pci_conf1_write_config8(dev, 0x58, 0x60);
+	pci_conf1_write_config8(dev, 0x59, 0x80);
+	pci_conf1_write_config8(dev, 0x5b, 0x08);
+
+	pci_conf1_find_device(0x1106, 0x0571, &dev);
+
+	/* Make it respond to IO space */
+	pci_conf1_write_config8(dev, 0x04, 0x07);
+
+	/* Compatibility mode addresses */
+	//pci_conf1_write_config32(dev, 0x10, 0);
+	//pci_conf1_write_config32(dev, 0x14, 0);
+	//pci_conf1_write_config32(dev, 0x18, 0);
+	//pci_conf1_write_config32(dev, 0x1b, 0);
+
+	/* Native mode base address */
+	//pci_conf1_write_config32(dev, 0x20, BUS_MASTER_ADDR | 1);
+
+	pci_conf1_write_config8(dev, 0x40, 0x4b);//was 0x3
+	pci_conf1_write_config8(dev, 0x41, 0xf2);
+	pci_conf1_write_config8(dev, 0x42, 0x09);
+	/* I'll be damned if I know what these do */
+	pci_conf1_write_config8(dev, 0x3c, 0xff);//was 0x0e
+	pci_conf1_write_config8(dev, 0x3d, 0x00);//was 0x00
+}
+
+static void enable_shadow_ram(void) 
+{
+	u8 shadowreg;
+
+	printk(BIOS_DEBUG, "Enabling shadow ram\n");
+	/* Enable shadow ram as normal dram */
+	/* 0xc0000-0xcffff */
+	pci_conf1_write_config8(PCI_BDF(0, 0, 3), 0x80, 0xff);
+	pci_conf1_write_config8(PCI_BDF(0, 0, 7), 0x61, 0xff);
+	/* 0xd0000-0xdffff */
+	pci_conf1_write_config8(PCI_BDF(0, 0, 3), 0x81, 0xff);
+	pci_conf1_write_config8(PCI_BDF(0, 0, 7), 0x62, 0xff);
+	/* 0xe0000-0xeffff */
+	pci_conf1_write_config8(PCI_BDF(0, 0, 3), 0x82, 0xff);
+	pci_conf1_write_config8(PCI_BDF(0, 0, 7), 0x64, 0xff);
+
+	/* 0xf0000-0xfffff */
+	shadowreg = pci_conf1_read_config8(PCI_BDF(0, 0, 3), 0x83);
+	shadowreg |= 0x30;
+	pci_conf1_write_config8(PCI_BDF(0, 0, 3), 0x83, shadowreg);
+
+	/* Do it again for the vlink controller */
+	shadowreg = pci_conf1_read_config8(PCI_BDF(0, 0, 7), 0x63);
+	shadowreg |= 0x30;
+	pci_conf1_write_config8(PCI_BDF(0, 0, 7), 0x63, shadowreg);
+}
+
+static void enable_vlink(void)
+{
+	printk(BIOS_DEBUG, "Enabling Via V-Link\n");
+
+	/* Enable V-Link statically in 8x mode, using Jetway default values */
+//40: 14 19 88 80 82 44 00 04 13 b9 88 80 82 44 00 01
+	pci_conf1_write_config8(PCI_BDF(0, 0, 7), 0x42, 0x88);
+	pci_conf1_write_config8(PCI_BDF(0, 0, 7), 0x45, 0x44);
+	pci_conf1_write_config8(PCI_BDF(0, 0, 7), 0x46, 0x00);
+	pci_conf1_write_config8(PCI_BDF(0, 0, 7), 0x47, 0x04);
+	//pci_conf1_write_config8(PCI_BDF(0, 0, 7), 0x48, 0x13);
+	pci_conf1_write_config8(PCI_BDF(0, 0, 7), 0x4b, 0x80);
+	pci_conf1_write_config8(PCI_BDF(0, 0, 7), 0x4c, 0x82);
+	pci_conf1_write_config8(PCI_BDF(0, 0, 7), 0x4d, 0x44);
+	pci_conf1_write_config8(PCI_BDF(0, 0, 7), 0x4e, 0x00);
+	pci_conf1_write_config8(PCI_BDF(0, 0, 7), 0x4f, 0x01);
+//b0: 05 01 00 83 35 66 66 64 45 98 77 11 00 00 00 00
+	pci_conf1_write_config8(PCI_BDF(0, 0, 7), 0xb4, 0x35);
+	pci_conf1_write_config8(PCI_BDF(0, 0, 7), 0xb5, 0x66);
+	pci_conf1_write_config8(PCI_BDF(0, 0, 7), 0xb6, 0x66);
+	pci_conf1_write_config8(PCI_BDF(0, 0, 7), 0xb7, 0x64);
+	pci_conf1_write_config8(PCI_BDF(0, 0, 7), 0xb8, 0x45);
+	pci_conf1_write_config8(PCI_BDF(0, 0, 7), 0xb9, 0x98);
+	pci_conf1_write_config8(PCI_BDF(0, 0, 7), 0xba, 0x77);
+
+	/* This has to be done last, I think */
+	pci_conf1_write_config8(PCI_BDF(0, 0, 7), 0x48, 0x13);
+}
+
+int main(void)
+{
+	struct board_info ctrl[] = {
+		{
+		.d0f2 = PCI_BDF(0, 0, 2),
+		.d0f3 = PCI_BDF(0, 0, 3),
+		.d0f4 = PCI_BDF(0, 0, 4),
+		.d0f7 = PCI_BDF(0, 0, 7),
+		.d1f0 = PCI_BDF(0, 1, 0),
+		.spd_channel0 = {0x50},
+		},
+	};
+
+	printk(BIOS_DEBUG, "In initram.c main()\n");
+
+	enable_vlink();
+	enable_mainboard_devices();
+	enable_shadow_ram();
+
+	c7_cpu_setup(PCI_BDF(0, 0, 2));
+
+	enable_smbus(SMBUS_IO_BASE);
+	//find_smbus_devices(0x00, 0xff);
+	sdram_set_registers(ctrl);
+	sdram_set_spd_registers(ctrl);
+	ddr2_sdram_enable(ctrl);
+	
+	//ram_check(0, 640*1024);
+	//ram_check((8 * 1024 * 1024), (16 * 1024 * 1024));
+
+	return 0;
+}

Added: coreboot-v3/mainboard/via/epia-cn/mainboard.h
===================================================================
--- coreboot-v3/mainboard/via/epia-cn/mainboard.h	                        (rev 0)
+++ coreboot-v3/mainboard/via/epia-cn/mainboard.h	2008-10-31 18:57:37 UTC (rev 973)
@@ -0,0 +1,20 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2008 Corey Osgood <corey.osgood at gmail.com>
+ *
+ * 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; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * 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
+ */
+

Added: coreboot-v3/mainboard/via/epia-cn/stage1.c
===================================================================
--- coreboot-v3/mainboard/via/epia-cn/stage1.c	                        (rev 0)
+++ coreboot-v3/mainboard/via/epia-cn/stage1.c	2008-10-31 18:57:37 UTC (rev 973)
@@ -0,0 +1,58 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2007 Advanced Micro Devices, Inc.
+ * Copyright (C) 2008 Ronald G. Minnich <rminnich at gmail.com>
+ *
+ * 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; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * 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 <types.h>
+#include <lib.h>
+#include <console.h>
+#include <io.h>
+#include <arch/x86/pci_ops.h>
+#include <device/pci.h>
+#include <device/pci_ids.h>
+#include <superio/fintek/f71805f/f71805f.h>
+#include <northbridge/via/cn700/cn700.h>
+
+/* Someday, we're all going multicore. */
+void stop_ap(void)
+{
+}
+
+void hardware_stage1(void)
+{
+	void vt1211_enable_serial(u8 dev, u8 serial, u16 iobase);
+	u32 dev;
+
+	post_code(POST_START_OF_MAIN);
+	vt1211_enable_serial(0x2e, 2, 0x3f8);
+	
+	/* Enable multifunction for northbridge. */
+	pci_conf1_write_config8(0x00, 0x4f, 0x01);
+
+	printk(BIOS_SPEW, "In hardware_stage1()\n");
+	/* Disabled GP3, to keep the system from rebooting automatically */
+	//pci_conf1_find_device(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VT8237R_LPC, &dev);
+	dev = PCI_BDF(0, 17, 0);
+	pci_conf1_write_config8(dev, 0x98, 0x00);
+}
+
+void mainboard_pre_payload(void)
+{
+	//banner(BIOS_DEBUG, "mainboard_pre_payload: done");
+}





More information about the coreboot mailing list