Extended K8T890 driver to include the K8T800 and K8M800 northbridges.
The K8T800 is almost identical to the K8T800Pro, also added to this
patch. The K8T800_OLD is also defined, which is an older  version of 
the K8T800, but which has no driver and early HT code yet.
Also extended the K8M890 VGA driver to work for the K8M800 (not tested).
According to the datasheet, the K8T890 and K8T800 are similar enough
to be able to use the same initialization code. At least for the
K8T800, this is sufficient to have a working HT link with the CPU, and
to initialise the V-Link to the southbridge.

Signed-off-by Alexandru Gagniuc <mr.nuke.me@gmail.com>


Index: src/southbridge/via/vt8237r/vt8237r.c
===================================================================
--- src/southbridge/via/vt8237r/vt8237r.c	(revision 6342)
+++ src/southbridge/via/vt8237r/vt8237r.c	(working copy)
@@ -40,9 +40,9 @@
 	if (regval != what) {
 		print_debug("Writeback to ");
 		print_debug_hex8(where);
-		print_debug("failed ");
+		print_debug(" failed ");
 		print_debug_hex8(regval);
-		print_debug("\n ");	/* TODO: Drop the space? */
+		print_debug("\n");
 	}
 }
 #else
Index: src/southbridge/via/vt8237r/ctrl.c
===================================================================
--- src/southbridge/via/vt8237r/ctrl.c	(revision 6342)
+++ src/southbridge/via/vt8237r/ctrl.c	(working copy)
@@ -2,6 +2,7 @@
  * This file is part of the coreboot project.
  *
  * Copyright (C) 2008 Rudolf Marek <r.marek@assembler.cz>
+ * Copyright (C) 2011 Alexandru Gagniuc <mr.nuke.me@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
@@ -32,9 +33,15 @@
 	device_t devfun3;
 
 	devfun3 = dev_find_device(PCI_VENDOR_ID_VIA,
-				  PCI_DEVICE_ID_VIA_K8T890CE_3, 0);
+				  PCI_DEVICE_ID_VIA_K8T800_DRAM, 0);
 	if (!devfun3)
 		devfun3 = dev_find_device(PCI_VENDOR_ID_VIA,
+					  PCI_DEVICE_ID_VIA_K8M800_DRAM, 0);
+	if (!devfun3)
+	  devfun3 = dev_find_device(PCI_VENDOR_ID_VIA,
+				    PCI_DEVICE_ID_VIA_K8T890CE_3, 0);
+	if (!devfun3)
+		devfun3 = dev_find_device(PCI_VENDOR_ID_VIA,
 					  PCI_DEVICE_ID_VIA_K8M890CE_3, 0);
 	if (!devfun3)
 		devfun3 = dev_find_device(PCI_VENDOR_ID_VIA,
@@ -108,16 +115,25 @@
 	device_t devfun7;
 
 	devfun7 = dev_find_device(PCI_VENDOR_ID_VIA,
-				  PCI_DEVICE_ID_VIA_K8T890CE_7, 0);
+				  PCI_DEVICE_ID_VIA_K8T800_NB_SB_CTR, 0);
 	if (!devfun7)
 		devfun7 = dev_find_device(PCI_VENDOR_ID_VIA,
+					  PCI_DEVICE_ID_VIA_K8M800_NB_SB_CTR, 0);
+	if (!devfun7)
+		devfun7 = dev_find_device(PCI_VENDOR_ID_VIA,
+					  PCI_DEVICE_ID_VIA_K8T890CE_7, 0);
+	if (!devfun7)
+		devfun7 = dev_find_device(PCI_VENDOR_ID_VIA,
 					  PCI_DEVICE_ID_VIA_K8M890CE_7, 0);
 	if (!devfun7)
 		devfun7 = dev_find_device(PCI_VENDOR_ID_VIA,
 					  PCI_DEVICE_ID_VIA_K8T890CF_7, 0);
 	/* No pairing NB was found. */
 	if (!devfun7)
+	{
+		print_debug("vt8237s_vlink_init: No pairing NB was found.\n");
 		return;
+	}
 
 	/*
 	 * This init code is valid only for the VT8237S! For different
@@ -174,16 +190,25 @@
 	device_t devfun7;
 
 	devfun7 = dev_find_device(PCI_VENDOR_ID_VIA,
-				  PCI_DEVICE_ID_VIA_K8T890CE_7, 0);
+				  PCI_DEVICE_ID_VIA_K8T800_NB_SB_CTR, 0);
 	if (!devfun7)
 		devfun7 = dev_find_device(PCI_VENDOR_ID_VIA,
+					  PCI_DEVICE_ID_VIA_K8M800_NB_SB_CTR, 0);
+	if (!devfun7)
+		devfun7 = dev_find_device(PCI_VENDOR_ID_VIA,
+					  PCI_DEVICE_ID_VIA_K8T890CE_7, 0);
+	if (!devfun7)
+		devfun7 = dev_find_device(PCI_VENDOR_ID_VIA,
 					  PCI_DEVICE_ID_VIA_K8M890CE_7, 0);
 	if (!devfun7)
 		devfun7 = dev_find_device(PCI_VENDOR_ID_VIA,
 					  PCI_DEVICE_ID_VIA_K8T890CF_7, 0);
 	/* No pairing NB was found. */
 	if (!devfun7)
+	{
+		print_debug("vt8237a_vlink_init: No pairing NB was found.\n");
 		return;
+	}
 
 	/*
 	 * This init code is valid only for the VT8237A! For different
Index: src/southbridge/via/vt8237r/lpc.c
===================================================================
--- src/southbridge/via/vt8237r/lpc.c	(revision 6342)
+++ src/southbridge/via/vt8237r/lpc.c	(working copy)
@@ -299,11 +299,20 @@
 	 */
 	pci_write_config8(dev, 0x48, 0x0c);
 #else
+	
+  #if CONFIG_SOUTHBRIDGE_VIA_K8T800
+	/* It seems that when we pair with the K8T800, we need to disable
+	 * the A2 mask
+	 */
+	pci_write_config8(dev, 0x48, 0x0c);
+  #else
 	/*
 	 * Set Read Pass Write Control Enable
 	 * (force A2 from APIC FSB to low).
 	 */
 	pci_write_config8(dev, 0x48, 0x8c);
+  #endif
+	
 #endif
 
 	southbridge_init_common(dev);
@@ -319,6 +328,8 @@
 #endif
 
 	printk(BIOS_SPEW, "Leaving %s.\n", __func__);
+	printk(BIOS_SPEW, "And taking a dump:\n");
+	dump_south(dev);	
 }
 
 static void vt8237a_init(struct device *dev)
@@ -469,6 +480,7 @@
 	 * Bit | Meaning
 	 * -------------
 	 *   3 | Bypass APIC De-Assert Message (1=Enable)
+	 *   2 | APIC HyperTransport Mode (1=Enable)
 	 *   1 | possibly "INTE#, INTF#, INTG#, INTH# as PCI"
 	 *     | bit 1=1 works for Aaron at VIA, bit 1=0 works for jakllsch
 	 *   0 | Dynamic Clock Gating Main Switch (1=Enable)
@@ -485,12 +497,13 @@
 	pci_write_config8(dev, 0x4c, 0x44);
 
 	/* ROM memory cycles go to LPC. */
-	pci_write_config8(dev, 0x59, 0x80);
+ 	pci_write_config8(dev, 0x59, 0x80);
 
 	/*
 	 * Bit | Meaning
 	 * -------------
 	 *   3 | Bypass APIC De-Assert Message (1=Enable)
+	 *   2 | APIC HyperTransport Mode (1=Enable)
 	 *   1 | possibly "INTE#, INTF#, INTG#, INTH# as PCI"
 	 *     | bit 1=1 works for Aaron at VIA, bit 1=0 works for jakllsch
 	 *   0 | Dynamic Clock Gating Main Switch (1=Enable)
Index: src/southbridge/via/Makefile.inc
===================================================================
--- src/southbridge/via/Makefile.inc	(revision 6342)
+++ src/southbridge/via/Makefile.inc	(working copy)
@@ -1,3 +1,7 @@
+subdirs-$(CONFIG_SOUTHBRIDGE_VIA_K8T800_OLD) += k8t890 # lspci lists B188 and 3188
+subdirs-$(CONFIG_SOUTHBRIDGE_VIA_K8T800) += k8t890     # lspci lists 0282, 1282, 2282, 3282, and 7282
+subdirs-$(CONFIG_SOUTHBRIDGE_VIA_K8T800PRO) += k8t890  # lspci lists 0282, 1282, 2282, 3282, and 7282
+subdirs-$(CONFIG_SOUTHBRIDGE_VIA_K8M800) += k8t890
 subdirs-$(CONFIG_SOUTHBRIDGE_VIA_K8T890) += k8t890
 subdirs-$(CONFIG_SOUTHBRIDGE_VIA_K8M890) += k8t890
 subdirs-$(CONFIG_SOUTHBRIDGE_VIA_VT8231) += vt8231
Index: src/southbridge/via/k8t890/romstrap.inc
===================================================================
--- src/southbridge/via/k8t890/romstrap.inc	(revision 6342)
+++ src/southbridge/via/k8t890/romstrap.inc	(working copy)
@@ -33,7 +33,28 @@
  * Below are some Dev0 Func2 HT control registers values,
  * depending on strap pin, one of below lines is used.
  */
+#if CONFIG_SOUTHBRIDGE_VIA_K8M800 || CONFIG_SOUTHBRIDGE_VIA_K8T800
+
 tblpointer:
+.long 0x50220000, 0X619707C2
+.long 0x50220000, 0X619707C2
+.long 0x50220000, 0X619707C2
+.long 0x0
+.long 0x0
+.long 0x0
+.long 0x0
+.long 0x0
+.long 0x0
+.long 0x0
+.long 0x0
+.long 0x0
+.long 0x0
+.long 0x0
+.long 0x0
+
+#elif CONFIG_SOUTHBRIDGE_VIA_K8M890 || CONFIG_SOUTHBRIDGE_VIA_K8T890
+
+tblpointer:
 .long 0x504400AA, 0x61970FC2	//;200M
 .long 0x504400AA, 0x61970FC2	//;400M
 .long 0x504400AA, 0x61970FC2	//;600M
@@ -50,6 +71,7 @@
 .long 0x0
 .long 0x0
 
+#endif
 /*
  * The pointer to above table should be at 0xffffd,
  * the table itself MUST be aligned to 128B it seems!
Index: src/southbridge/via/k8t890/Kconfig
===================================================================
--- src/southbridge/via/k8t890/Kconfig	(revision 6342)
+++ src/southbridge/via/k8t890/Kconfig	(working copy)
@@ -1,3 +1,15 @@
+config SOUTHBRIDGE_VIA_K8M800 #K8M800 not tested
+	bool
+
+config SOUTHBRIDGE_VIA_K8T800_OLD # not tested
+	bool
+
+config SOUTHBRIDGE_VIA_K8T800
+	bool
+
+config SOUTHBRIDGE_VIA_K8T800PRO
+	bool
+
 config SOUTHBRIDGE_VIA_K8M890
 	bool
 
@@ -40,5 +52,5 @@
 
 config ID_SECTION_OFFSET
 	hex
-	default 0x80 if SOUTHBRIDGE_VIA_K8M890 || SOUTHBRIDGE_VIA_K8T890
+	default 0x80 if SOUTHBRIDGE_VIA_K8M800 || SOUTHBRIDGE_VIA_K8T800_OLD || SOUTHBRIDGE_VIA_K8T800 || SOUTHBRIDGE_VIA_K8T800PRO || SOUTHBRIDGE_VIA_K8M890 || SOUTHBRIDGE_VIA_K8T890
 
Index: src/southbridge/via/k8t890/early_car.c
===================================================================
--- src/southbridge/via/k8t890/early_car.c	(revision 6342)
+++ src/southbridge/via/k8t890/early_car.c	(working copy)
@@ -2,6 +2,7 @@
  * This file is part of the coreboot project.
  *
  * Copyright (C) 2007 Rudolf Marek <r.marek@assembler.cz>
+ * Copyright (C) 2011 Alexandru Gagniuc <mr.nuke.me@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
@@ -25,7 +26,7 @@
 #include <stdlib.h>
 #include <cbmem.h>
 #include <arch/io.h>
-#include "k8t890.h"
+#include "k8x8xx.h"
 
 /* The 256 bytes of NVRAM for S3 storage, 256B aligned */
 #define K8T890_NVRAM_IO_BASE	0xf00
@@ -36,6 +37,8 @@
 
 /* This functions sets KT890 link frequency and width to same values as
  * it has been setup on K8 side, by AMD NB init.
+ * This will not work for K8T800_OLD, which has a slightly different
+ * register arrangement (device 3188)
  */
 
 u8 k8t890_early_setup_ht(void)
@@ -66,7 +69,17 @@
 		ldtnr = 2;
 	}
 
+#if defined(CONFIG_SOUTHBRIDGE_VIA_K8M800)
+	print_debug("K8M800 found at LDT ");
+#elif defined(CONFIG_SOUTHBRIDGE_VIA_K8T800)
+	print_debug("K8T800 found at LDT ");
+#elif defined(CONFIG_SOUTHBRIDGE_VIA_K8T800PRO)
+	print_debug("K8T800 Pro found at LDT ");
+#elif defined(CONFIG_SOUTHBRIDGE_VIA_K8M890)
+	print_debug("K8M890 found at LDT ");
+#elif defined(CONFIG_SOUTHBRIDGE_VIA_K8T890)
 	print_debug("K8T890 found at LDT ");
+#endif
 	print_debug_hex8(ldtnr);
 
 	/* get the maximum widths for both sides */
Index: src/southbridge/via/k8t890/host_ctrl.c
===================================================================
--- src/southbridge/via/k8t890/host_ctrl.c	(revision 6342)
+++ src/southbridge/via/k8t890/host_ctrl.c	(working copy)
@@ -2,6 +2,7 @@
  * This file is part of the coreboot project.
  *
  * Copyright (C) 2007 Rudolf Marek <r.marek@assembler.cz>
+ * Copyright (C) 2011 Alexandru Gagniuc <mr.nuke.me@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
@@ -24,15 +25,13 @@
 #include <console/console.h>
 #include <cbmem.h>
 #include <arch/io.h>
-#include "k8t890.h"
+#include "k8x8xx.h"
 
 /* this may be later merged */
 
 /* This fine tunes the HT link settings, which were loaded by ROM strap. */
-static void host_ctrl_enable_k8t890(struct device *dev)
+static void host_ctrl_enable_k8t8xx(struct device *dev)
 {
-	dump_south(dev);
-
 	/*
 	 * Bit 4 is reserved but set by AW. Set PCI to HT outstanding
 	 * requests to 3.
@@ -85,11 +84,12 @@
 	writeback(dev, 0xc4, 0x50);
 	writeback(dev, 0xc5, 0x50);
 
+	print_debug(" VIA_X_2 device dump:\n");
 	dump_south(dev);
 }
 
 /* This fine tunes the HT link settings, which were loaded by ROM strap. */
-static void host_ctrl_enable_k8m890(struct device *dev) {
+static void host_ctrl_enable_k8m8xx(struct device *dev) {
 
 	/*
 	 * Set PCI to HT outstanding requests to 03.
@@ -126,7 +126,7 @@
 	.read_resources		= pci_dev_read_resources,
 	.set_resources		= pci_dev_set_resources,
 	.enable_resources	= pci_dev_enable_resources,
-	.enable			= host_ctrl_enable_k8t890,
+	.enable			= host_ctrl_enable_k8t8xx,
 	.ops_pci		= 0,
 };
 
@@ -134,17 +134,29 @@
 	.read_resources		= pci_dev_read_resources,
 	.set_resources		= pci_dev_set_resources,
 	.enable_resources	= pci_dev_enable_resources,
-	.enable			= host_ctrl_enable_k8m890,
+	.enable			= host_ctrl_enable_k8m8xx,
 	.ops_pci		= 0,
 };
 
-static const struct pci_driver northbridge_driver_t __pci_driver = {
+static const struct pci_driver northbridge_driver_t800 __pci_driver = {
 	.ops	= &host_ctrl_ops_t,
 	.vendor	= PCI_VENDOR_ID_VIA,
+	.device	= PCI_DEVICE_ID_VIA_K8T800_HOST_CTR,
+};
+
+static const struct pci_driver northbridge_driver_m800 __pci_driver = {
+	.ops	= &host_ctrl_ops_m,
+	.vendor	= PCI_VENDOR_ID_VIA,
+	.device	= PCI_DEVICE_ID_VIA_K8M800_HOST_CTR,
+};
+
+static const struct pci_driver northbridge_driver_t890 __pci_driver = {
+	.ops	= &host_ctrl_ops_t,
+	.vendor	= PCI_VENDOR_ID_VIA,
 	.device	= PCI_DEVICE_ID_VIA_K8T890CE_2,
 };
 
-static const struct pci_driver northbridge_driver_m __pci_driver = {
+static const struct pci_driver northbridge_driver_m890 __pci_driver = {
 	.ops	= &host_ctrl_ops_m,
 	.vendor	= PCI_VENDOR_ID_VIA,
 	.device	= PCI_DEVICE_ID_VIA_K8M890CE_2,
Index: src/southbridge/via/k8t890/ctrl.c
===================================================================
--- src/southbridge/via/k8t890/ctrl.c	(revision 6342)
+++ src/southbridge/via/k8t890/ctrl.c	(working copy)
@@ -2,6 +2,7 @@
  * This file is part of the coreboot project.
  *
  * Copyright (C) 2007 Rudolf Marek <r.marek@assembler.cz>
+ * Copyright (C) 2011 Alexandru Gagniuc <mr.nuke.me@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
@@ -22,6 +23,7 @@
 #include <device/pci_ops.h>
 #include <device/pci_ids.h>
 #include <console/console.h>
+#include "k8x8xx.h"
 
 /* We support here K8M890/K8T890 and VT8237R PCI1/Vlink which setup is not in separate
  * PCI device 0:11.7, but it is mapped to PCI 0:0.7 (0x70-0x7c for PCI1)
@@ -32,20 +34,31 @@
 	u8 regm, regm3;
 
 	device_t devfun3;
-
+	
 	devfun3 = dev_find_device(PCI_VENDOR_ID_VIA,
-					   PCI_DEVICE_ID_VIA_K8T890CE_3, 0);
+					   PCI_DEVICE_ID_VIA_K8T800_DRAM, 0);
 
 	if (!devfun3)
 		devfun3 = dev_find_device(PCI_VENDOR_ID_VIA,
+					   PCI_DEVICE_ID_VIA_K8M800_DRAM, 0);
+
+	if (!devfun3)
+		devfun3 = dev_find_device(PCI_VENDOR_ID_VIA,
+					   PCI_DEVICE_ID_VIA_K8T890CE_3, 0);
+		
+	if (!devfun3)
+		devfun3 = dev_find_device(PCI_VENDOR_ID_VIA,
 					   PCI_DEVICE_ID_VIA_K8T890CF_3, 0);
 
 	if (!devfun3)
 		devfun3 = dev_find_device(PCI_VENDOR_ID_VIA,
 					   PCI_DEVICE_ID_VIA_K8M890CE_3, 0);
+	
+	if(!devfun3)
+		die("\n vt8237r_cfg: Unable to find K8x8xx bridge via PCI scan. Stopping.\n");
 
 	pci_write_config8(dev, 0x70, 0xc2);
-
+	
 	/* PCI Control */
 	pci_write_config8(dev, 0x72, 0xee);
 	pci_write_config8(dev, 0x73, 0x01);
@@ -87,6 +100,7 @@
 	/* Shadow page F + memhole copy */
 	regm = pci_read_config8(devfun3, 0x83);
 	pci_write_config8(dev, 0x63, regm3 | (regm & 0x3F));
+
 }
 
 
@@ -143,8 +157,10 @@
 	pci_write_config8(dev, 0x48, 0xa3);
 }
 
-static void ctrl_init(struct device *dev) {
+static void ctrl_init(struct device *dev) 
+{
 
+	print_debug("K8x8xx: Initializing V-Link to VT8237R sb: ");
 	/* TODO: Fix some ordering issue fo V-link set Rx77[6] and PCI1_Rx4F[0]
 	   should to 1 */
 
@@ -161,7 +177,13 @@
 	if (devsb) {
 		vt8237r_vlink_init(dev);
 		vt8237r_cfg(dev, devsb);
+	} else {
+		print_debug("VT8237R LPC not found !\n");
+		return;
 	}
+	print_debug(" Done\n");
+	print_debug(" VIA_X_7 device dump:\n");
+	dump_south(dev);
 
 }
 
@@ -173,19 +195,31 @@
 	.ops_pci		= 0,
 };
 
-static const struct pci_driver northbridge_driver_t __pci_driver = {
+static const struct pci_driver northbridge_driver_t800 __pci_driver = {
 	.ops	= &ctrl_ops,
 	.vendor	= PCI_VENDOR_ID_VIA,
+	.device	= PCI_DEVICE_ID_VIA_K8T800_NB_SB_CTR,
+};
+
+static const struct pci_driver northbridge_driver_m800 __pci_driver = {
+	.ops	= &ctrl_ops,
+	.vendor	= PCI_VENDOR_ID_VIA,
+	.device	= PCI_DEVICE_ID_VIA_K8M800_NB_SB_CTR,
+};
+
+static const struct pci_driver northbridge_driver_t890 __pci_driver = {
+	.ops	= &ctrl_ops,
+	.vendor	= PCI_VENDOR_ID_VIA,
 	.device	= PCI_DEVICE_ID_VIA_K8T890CE_7,
 };
 
-static const struct pci_driver northbridge_driver_tcf __pci_driver = {
+static const struct pci_driver northbridge_driver_t890cf __pci_driver = {
 	.ops	= &ctrl_ops,
 	.vendor	= PCI_VENDOR_ID_VIA,
 	.device	= PCI_DEVICE_ID_VIA_K8T890CF_7,
 };
 
-static const struct pci_driver northbridge_driver_m __pci_driver = {
+static const struct pci_driver northbridge_driver_m890 __pci_driver = {
 	.ops	= &ctrl_ops,
 	.vendor	= PCI_VENDOR_ID_VIA,
 	.device	= PCI_DEVICE_ID_VIA_K8M890CE_7,
Index: src/southbridge/via/k8t890/k8t890.h
===================================================================
--- src/southbridge/via/k8t890/k8t890.h	(revision 6342)
+++ src/southbridge/via/k8t890/k8t890.h	(working copy)
@@ -41,6 +41,7 @@
 
 #ifdef __PRE_RAM__
 u8 k8t890_early_setup_ht(void);
+#define k8x8xx_early_setup_ht() k8t890_early_setup_ht()
 #else
 #include <device/device.h>
 #if 0
Index: src/southbridge/via/k8t890/chrome.c
===================================================================
--- src/southbridge/via/k8t890/chrome.c	(revision 6342)
+++ src/southbridge/via/k8t890/chrome.c	(working copy)
@@ -23,7 +23,7 @@
 #include <device/pci.h>
 #include <device/pci_ids.h>
 #include <string.h> /* for memset */
-#include "k8t890.h"
+#include "k8x8xx.h"
 
 #if CONFIG_VGA
 #include <pc80/vga_io.h>
@@ -167,8 +167,14 @@
 	.enable           = 0,
 };
 
-static const struct pci_driver unichrome_driver __pci_driver = {
+static const struct pci_driver unichrome_driver_800 __pci_driver = {
 	.ops    = &chrome_ops,
-	.vendor = 0x1106,
-	.device = 0x3230,
+	.vendor = PCI_VENDOR_ID_VIA,
+	.device = PCI_DEVICE_ID_VIA_K8M800_CHROME,
 };
+
+static const struct pci_driver unichrome_driver_890 __pci_driver = {
+	.ops    = &chrome_ops,
+	.vendor = PCI_VENDOR_ID_VIA,
+	.device = PCI_DEVICE_ID_VIA_K8M890_CHROME,
+};
Index: src/southbridge/via/k8t890/host.c
===================================================================
--- src/southbridge/via/k8t890/host.c	(revision 6342)
+++ src/southbridge/via/k8t890/host.c	(working copy)
@@ -2,6 +2,7 @@
  * This file is part of the coreboot project.
  *
  * Copyright (C) 2007 Rudolf Marek <r.marek@assembler.cz>
+ * Copyright (C) 2011 Alexandru Gagniuc <mr.nuke.me@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
@@ -22,13 +23,15 @@
 #include <device/pci_ops.h>
 #include <device/pci_ids.h>
 #include <console/console.h>
-#include "k8t890.h"
+#include "k8x8xx.h"
 
 static void host_enable(struct device *dev)
 {
 	/* Multiple function control */
 	pci_write_config8(dev, K8T890_MULTIPLE_FN_EN, 0x01);
 
+	print_debug(" VIA_X_0 device dump:\n");
+	dump_south(dev);
 }
 
 
@@ -70,19 +73,31 @@
 	.ops_pci		= 0,
 };
 
-static const struct pci_driver northbridge_driver_t __pci_driver = {
+static const struct pci_driver northbridge_driver_t800 __pci_driver = {
 	.ops	= &host_ops_t,
 	.vendor	= PCI_VENDOR_ID_VIA,
+	.device	= PCI_DEVICE_ID_VIA_K8T800_HT_AGP_CTR,
+};
+
+static const struct pci_driver northbridge_driver_m800 __pci_driver = {
+	.ops	= &host_ops_m,
+	.vendor	= PCI_VENDOR_ID_VIA,
+	.device	= PCI_DEVICE_ID_VIA_K8M800_HT_AGP_CTR,
+};
+
+static const struct pci_driver northbridge_driver_t890 __pci_driver = {
+	.ops	= &host_ops_t,
+	.vendor	= PCI_VENDOR_ID_VIA,
 	.device	= PCI_DEVICE_ID_VIA_K8T890CE_0,
 };
 
-static const struct pci_driver northbridge_driver_tcf __pci_driver = {
+static const struct pci_driver northbridge_driver_t890cf __pci_driver = {
 	.ops	= &host_ops_t,
 	.vendor	= PCI_VENDOR_ID_VIA,
 	.device	= PCI_DEVICE_ID_VIA_K8T890CF_0,
 };
 
-static const struct pci_driver northbridge_driver_m __pci_driver = {
+static const struct pci_driver northbridge_driver_m890 __pci_driver = {
 	.ops	= &host_ops_m,
 	.vendor	= PCI_VENDOR_ID_VIA,
 	.device	= PCI_DEVICE_ID_VIA_K8M890CE_0,
Index: src/southbridge/via/k8t890/traf_ctrl.c
===================================================================
--- src/southbridge/via/k8t890/traf_ctrl.c	(revision 6342)
+++ src/southbridge/via/k8t890/traf_ctrl.c	(working copy)
@@ -138,6 +138,9 @@
 	.ops_pci		= 0,
 };
 
+/* K8X800 chipsets have no APIC; no 800 PCI ids here */
+
+
 static const struct pci_driver northbridge_driver_t __pci_driver = {
 	.ops	= &traf_ctrl_ops_t,
 	.vendor	= PCI_VENDOR_ID_VIA,
Index: src/southbridge/via/k8t890/dram.c
===================================================================
--- src/southbridge/via/k8t890/dram.c	(revision 6342)
+++ src/southbridge/via/k8t890/dram.c	(working copy)
@@ -2,6 +2,7 @@
  * This file is part of the coreboot project.
  *
  * Copyright (C) 2007 Rudolf Marek <r.marek@assembler.cz>
+ * Copyright (C) 2011 Alexandru Gagniuc <mr.nuke.me@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
@@ -25,7 +26,7 @@
 #include <cpu/amd/mtrr.h>
 #include <pc80/mc146818rtc.h>
 #include <bitops.h>
-#include "k8t890.h"
+#include "k8x8xx.h"
 
 static void dram_enable(struct device *dev)
 {
@@ -34,9 +35,9 @@
 
 	/*
 	 * Enable Lowest Interrupt arbitration for APIC, enable NB APIC
-	 * decoding, MSI support, no SMRAM, compatible SMM.
+	 * decoding, MSI support, no SMRAM, compatible SMM.
 	 */
-	pci_write_config8(dev, 0x86, 0x39);
+	pci_write_config8(dev, 0x86, 0x19);
 
 	/*
 	 * We want to use the 0xC0000-0xEFFFF as RAM mark area as RW, even if
@@ -64,6 +65,9 @@
 
 	/* The Address Next to the Last Valid DRAM Address */
 	pci_write_config16(dev, 0x88, (msr.lo >> 24) | reg);
+	
+	print_debug(" VIA_X_3 device dump:\n");
+	dump_south(dev);
 
 }
 
@@ -110,6 +114,8 @@
 k8m890_host_fb_size_get(void)
 {
 	struct device *dev = dev_find_device(PCI_VENDOR_ID_VIA,
+					     PCI_DEVICE_ID_VIA_K8M800_DRAM, 0);
+	if(!dev) dev = dev_find_device(PCI_VENDOR_ID_VIA,
 					     PCI_DEVICE_ID_VIA_K8M890CE_3, 0);
 	unsigned char tmp;
 
@@ -164,19 +170,31 @@
 	.ops_pci		= 0,
 };
 
-static const struct pci_driver northbridge_driver_t __pci_driver = {
+static const struct pci_driver northbridge_driver_t800 __pci_driver = {
 	.ops	= &dram_ops_t,
 	.vendor	= PCI_VENDOR_ID_VIA,
+	.device	= PCI_DEVICE_ID_VIA_K8T800_DRAM,
+};
+
+static const struct pci_driver northbridge_driver_m800 __pci_driver = {
+	.ops	= &dram_ops_m,
+	.vendor	= PCI_VENDOR_ID_VIA,
+	.device	= PCI_DEVICE_ID_VIA_K8M800_DRAM,
+};
+
+static const struct pci_driver northbridge_driver_t890 __pci_driver = {
+	.ops	= &dram_ops_t,
+	.vendor	= PCI_VENDOR_ID_VIA,
 	.device	= PCI_DEVICE_ID_VIA_K8T890CE_3,
 };
 
-static const struct pci_driver northbridge_driver_tcf __pci_driver = {
+static const struct pci_driver northbridge_driver_t890cf __pci_driver = {
 	.ops	= &dram_ops_t,
 	.vendor	= PCI_VENDOR_ID_VIA,
 	.device	= PCI_DEVICE_ID_VIA_K8T890CF_3,
 };
 
-static const struct pci_driver northbridge_driver_m __pci_driver = {
+static const struct pci_driver northbridge_driver_m890 __pci_driver = {
 	.ops	= &dram_ops_m,
 	.vendor	= PCI_VENDOR_ID_VIA,
 	.device	= PCI_DEVICE_ID_VIA_K8M890CE_3,
Index: src/southbridge/via/k8t890/k8x8xx.h
===================================================================
--- src/southbridge/via/k8t890/k8x8xx.h	(revision 0)
+++ src/southbridge/via/k8t890/k8x8xx.h	(revision 0)
@@ -0,0 +1,25 @@
+/*
+ * This file is part of the coreboot project.
+ * 
+ * Copyright (C) 2011  Alexandru Gagniuc <mr.nuke.me@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 3 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef SOUTHBRIDGE_VIA_K8T890_K8X8XX_H
+#define SOUTHBRIDGE_VIA_K8T890_K8X8XX_H
+
+#include "k8t890.h"
+
+#endif//SOUTHBRIDGE_VIA_K8T890_K8X8XX_H
\ No newline at end of file
Index: src/southbridge/via/k8t890/error.c
===================================================================
--- src/southbridge/via/k8t890/error.c	(revision 6342)
+++ src/southbridge/via/k8t890/error.c	(working copy)
@@ -2,6 +2,7 @@
  * This file is part of the coreboot project.
  *
  * Copyright (C) 2007 Rudolf Marek <r.marek@assembler.cz>
+ * Copyright (C) 2011 Alexandru Gagniuc <mr.nuke.me@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
@@ -21,9 +22,11 @@
 #include <device/pci.h>
 #include <device/pci_ids.h>
 #include <console/console.h>
+#include "k8x8xx.h"
 
 static void error_enable(struct device *dev)
 {
+	print_debug(" K8x8xx: Enabling NB error reporting: ");
 	/*
 	 * bit0 - Enable V-link parity error reporting in 0x50 bit0 (RWC)
 	 * bit6 - Parity Error/SERR# Report Through V-Link to SB
@@ -31,7 +34,11 @@
 	 */
 	pci_write_config8(dev, 0x58, 0x81);
 
+	print_debug("Done\n");
 	/* TODO: enable AGP errors reporting on K8M890 */
+	
+	print_debug(" VIA_X_1 device dump:\n");
+	dump_south(dev);
 }
 
 static const struct device_operations error_ops = {
@@ -42,9 +49,21 @@
 	.ops_pci		= 0,
 };
 
-static const struct pci_driver northbridge_driver_t __pci_driver = {
+static const struct pci_driver northbridge_driver_t800 __pci_driver = {
 	.ops	= &error_ops,
 	.vendor	= PCI_VENDOR_ID_VIA,
+	.device	= PCI_DEVICE_ID_VIA_K8T800_ERR,
+};
+
+static const struct pci_driver northbridge_driver_m800 __pci_driver = {
+	.ops	= &error_ops,
+	.vendor	= PCI_VENDOR_ID_VIA,
+	.device	= PCI_DEVICE_ID_VIA_K8M800_ERR,
+};
+
+static const struct pci_driver northbridge_driver_t890 __pci_driver = {
+	.ops	= &error_ops,
+	.vendor	= PCI_VENDOR_ID_VIA,
 	.device	= PCI_DEVICE_ID_VIA_K8T890CE_1,
 };
 
Index: src/southbridge/via/k8t890/bridge.c
===================================================================
--- src/southbridge/via/k8t890/bridge.c	(revision 6342)
+++ src/southbridge/via/k8t890/bridge.c	(working copy)
@@ -2,7 +2,7 @@
  * This file is part of the coreboot project.
  *
  * Copyright (C) 2007 Rudolf Marek <r.marek@assembler.cz>
- *
+ * Copyright (C) 2011 Alexandru Gagniuc <mr.nuke.me@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.
@@ -21,12 +21,13 @@
 #include <device/pci.h>
 #include <device/pci_ids.h>
 #include <console/console.h>
-#include "k8t890.h"
+#include "k8x8xx.h"
 
 static void bridge_enable(struct device *dev)
 {
 	u8 tmp;
 	print_debug("B188 device dump\n");
+	
 	/* VIA recommends this, sorry no known info. */
 
 	writeback(dev, 0x40, 0x91);
@@ -63,8 +64,12 @@
 	.ops_pci		= 0,
 };
 
-static const struct pci_driver northbridge_driver __pci_driver = {
+/*
+ * K8T890 and K8T800 both use device B188 as the bridge, so no need to
+ * add a separate driver
+ */
+static const struct pci_driver northbridge_driver_890 __pci_driver = {
 	.ops	= &bridge_ops,
 	.vendor	= PCI_VENDOR_ID_VIA,
 	.device	= PCI_DEVICE_ID_VIA_K8T890CE_BR,
-};
+};
\ No newline at end of file
Index: src/include/device/pci_ids.h
===================================================================
--- src/include/device/pci_ids.h	(revision 6342)
+++ src/include/device/pci_ids.h	(working copy)
@@ -1236,6 +1236,7 @@
 #define PCI_DEVICE_ID_VIA_K8M800_5		0x5204
 #define PCI_DEVICE_ID_VIA_K8M800_6		0x6204
 #define PCI_DEVICE_ID_VIA_K8M800_NB_SB_CTR	0x7204
+#define PCI_DEVICE_ID_VIA_K8M800_CHROME		0x3108
 #define PCI_DEVICE_ID_VIA_K8T800_AGP		0x3188
 #define PCI_DEVICE_ID_VIA_K8T800_BR		0xb188
 #define PCI_DEVICE_ID_VIA_K8T890CE_0	0x0238
@@ -1259,6 +1260,7 @@
 #define PCI_DEVICE_ID_VIA_K8M890CE_4	0x4336
 #define PCI_DEVICE_ID_VIA_K8M890CE_5	0x5336
 #define PCI_DEVICE_ID_VIA_K8M890CE_7	0x7336
+#define PCI_DEVICE_ID_VIA_K8M890_CHROME	0x3220
 #define PCI_DEVICE_ID_VIA_K8T890CE_PEG	0xa238
 #define PCI_DEVICE_ID_VIA_K8T890CE_PEX0	0xc238
 #define PCI_DEVICE_ID_VIA_K8T890CE_PEX1	0xd238
