Patchwork cleanup CS5535/CS5536 specific init in GX2 code

login
register
about
Submitter Stefan Reinauer
Date 2010-05-14 11:13:39
Message ID <4BED3063.7050300@coresystems.de>
Download mbox | patch
Permalink /patch/1327/
State New
Headers show

Comments

Stefan Reinauer - 2010-05-14 11:13:39
This patch should fix the hda interrupt lost problem on the Wyse S50
Move CS5535 specific setup from GX2 driver to CS5535. 

To apply this patch you need to 
cp src/northbridge/amd/gx2/chipsetinit.c src/southbridge/amd/cs5535/

Signed-off-by: Stefan Reinauer <stepan@coresystems.de>
Nils - 2010-05-14 17:57:22
Op vrijdag 14 mei 2010 13:13:39 schreef u:
> This patch should fix the hda interrupt lost problem on the Wyse S50
> 
Hi Stefan,
Thanks for making this patch. :)
Unfortunately i have no time today to test it, maybe tomorrow evening.
I quickly browsed the code, am i correct that you disabled the CS5536
code for GX2 ?
You are aware of the fact that the wyse s50 has a CS5536? (i think the Rumba 
and olpc`s also)

Thanks,Nils.
Joseph Smith - 2010-05-14 18:03:25
On Fri, 14 May 2010 19:57:22 +0200, Nils <njacobs8@hetnet.nl> wrote:
> Op vrijdag 14 mei 2010 13:13:39 schreef u:
>> This patch should fix the hda interrupt lost problem on the Wyse S50
>>
> Hi Stefan,
> Thanks for making this patch. :)
> Unfortunately i have no time today to test it, maybe tomorrow evening.
> I quickly browsed the code, am i correct that you disabled the CS5536
> code for GX2 ?
> You are aware of the fact that the wyse s50 has a CS5536? (i think the
> Rumba
> and olpc`s also)
> 
Really? The Wyse S30 has GX2 and CS5535
Nils - 2010-05-14 18:17:08
Op vrijdag 14 mei 2010 20:03:25 schreef u:
> On Fri, 14 May 2010 19:57:22 +0200, Nils <njacobs8@hetnet.nl> wrote:
> > Op vrijdag 14 mei 2010 13:13:39 schreef u:
> >> This patch should fix the hda interrupt lost problem on the Wyse S50
> >
> > Hi Stefan,
> > Thanks for making this patch. :)
> > Unfortunately i have no time today to test it, maybe tomorrow evening.
> > I quickly browsed the code, am i correct that you disabled the CS5536
> > code for GX2 ?
> > You are aware of the fact that the wyse s50 has a CS5536? (i think the
> > Rumba
> > and olpc`s also)
> 
> Really? The Wyse S30 has GX2 and CS5535
> 
Hi Joseph,
Really!
See the attached lspci.
Then your s30 has unfortunately slow usb ports.

Thanks,Nils.
-[0000:00]-+-01.0  National Semiconductor Corporation Geode GX2 Host Bridge [100b:0028]
           +-01.1  National Semiconductor Corporation Geode GX2 Graphics Processor [100b:0030]
           +-0e.0  Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ [10ec:8139]
           +-0f.0  Advanced Micro Devices [AMD] CS5536 [Geode companion] ISA [1022:2090]
           +-0f.2  Advanced Micro Devices [AMD] CS5536 [Geode companion] IDE [1022:209a]
           +-0f.3  Advanced Micro Devices [AMD] CS5536 [Geode companion] Audio [1022:2093]
           +-0f.4  Advanced Micro Devices [AMD] CS5536 [Geode companion] OHC [1022:2094]
           \-0f.5  Advanced Micro Devices [AMD] CS5536 [Geode companion] EHC [1022:2095]
Stefan Reinauer - 2010-05-14 18:37:49
On 5/14/10 7:57 PM, Nils wrote:
> Op vrijdag 14 mei 2010 13:13:39 schreef u:
>   
>> This patch should fix the hda interrupt lost problem on the Wyse S50
>>
>>     
> Hi Stefan,
> Thanks for making this patch. :)
> Unfortunately i have no time today to test it, maybe tomorrow evening.
> I quickly browsed the code, am i correct that you disabled the CS5536
> code for GX2 ?
> You are aware of the fact that the wyse s50 has a CS5536? (i think the Rumba 
> and olpc`s also)
>   
Hi Nils,

until a while back the GX2 code contained code to set up the CS5535 and
the CS5536. The CS5536 code under src/southbridge contained a different
version of that code. But gcc chose to use the code under
src/southbridge. Because that choice was rather arbitrary we cleaned up
the GX2 code a while back to not call the src/southbridge init code but
the version in src/northbridge, so it would work with the same code path
of CS5535 and CS5536. However, the CS5536 code in src/northbridge is no
good and so moved all CS5535/CS5536 code out of the GX2. The CS5535 code
was moved to src/southbridge/CS5535, while the CS5536 code already
contains a (working) version of that code that was previously living in
the GX2 component.
So, what I did is move CS5535 code to the CS5535 directory and make sure
there is no southbridge code in the northbridge directory because it
really does not belong there.

Stefan
Joseph Smith - 2010-05-14 18:41:01
On Fri, 14 May 2010 20:17:08 +0200, Nils <njacobs8@hetnet.nl> wrote:
> Op vrijdag 14 mei 2010 20:03:25 schreef u:
>> On Fri, 14 May 2010 19:57:22 +0200, Nils <njacobs8@hetnet.nl> wrote:
>> > Op vrijdag 14 mei 2010 13:13:39 schreef u:
>> >> This patch should fix the hda interrupt lost problem on the Wyse S50
>> >
>> > Hi Stefan,
>> > Thanks for making this patch. :)
>> > Unfortunately i have no time today to test it, maybe tomorrow evening.
>> > I quickly browsed the code, am i correct that you disabled the CS5536
>> > code for GX2 ?
>> > You are aware of the fact that the wyse s50 has a CS5536? (i think the
>> > Rumba
>> > and olpc`s also)
>>
>> Really? The Wyse S30 has GX2 and CS5535
>>
> Hi Joseph,
> Really!
> See the attached lspci.
> Then your s30 has unfortunately slow usb ports.
> 
No it has a VIA USB 2.0 chip onboard. 
Kind of a funny combo AMD and VIA chips on the same board :-)

Patch

Index: src/southbridge/amd/cs5535/chipsetinit.c
===================================================================
--- src/southbridge/amd/cs5535/chipsetinit.c	(revision 5543)
+++ src/southbridge/amd/cs5535/chipsetinit.c	(working copy)
@@ -8,10 +8,12 @@ 
 #include <string.h>
 #include <bitops.h>
 #include "chip.h"
-#include "northbridge.h"
+#include "northbridge/amd/gx2/northbridge.h"
 #include <cpu/amd/gx2def.h>
 #include <cpu/x86/msr.h>
 #include <cpu/x86/cache.h>
+#include "southbridge/amd/cs5535/cs5535.h"
+// This code uses some cs5536 includes because cs5535 includes are empty:
 #include "southbridge/amd/cs5536/cs5536.h"
 
 /* the structs in this file only set msr.lo. But ... that may not always be true */
@@ -47,18 +49,6 @@ 
 	{ 0,			{.hi=0, .lo=0x000000000} }
 };
 
-/*  5536 Clock Gating*/
-static struct msrinit CS5536_CLOCK_GATING_TABLE[] = {
-/* MSR		  Setting*/
-	{ GLIU_SB_GLD_MSR_PM,	{.hi=0, .lo=0x000000004} },
-	{ GLPCI_SB_GLD_MSR_PM,	{.hi=0, .lo=0x000000005} },
-	{ GLCP_SB_GLD_MSR_PM,	{.hi=0, .lo=0x000000004} },
-	{ MDD_SB_GLD_MSR_PM,	{.hi=0, .lo=0x050554111} }, /*  SMBus clock gating errata (PBZ 2226 & SiBZ 3977) */
-	{ ATA_SB_GLD_MSR_PM,	{.hi=0, .lo=0x000000005} },
-	{ AC97_SB_GLD_MSR_PM,	{.hi=0, .lo=0x000000005} },
-	{ 0,			{.hi=0, .lo=0x000000000} }
-};
-
 #ifdef UNUSED_CODE
 struct acpiinit {
 	unsigned short ioreg;
@@ -81,19 +71,7 @@ 
 	{PM_WKXD, 0x0000000A0, 4},
 	{0,0,0}
 };
-#endif
 
-/* return 1 if we are a 5536-based system */
-static int is_5536(void)
-{
-	msr_t msr;
-	msr = rdmsr(GLIU_SB_GLD_MSR_CAP);
-	msr.lo >>= 20;
-	printk(BIOS_DEBUG, "is_5536: msr.lo is 0x%x(==5 means 5536)\n", msr.lo&0xf);
-	return ((msr.lo&0xf) == 5);
-}
-
-#ifdef UNUSED_CODE
 /*****************************************************************************
  *
  *	pmChipsetInit
@@ -256,9 +234,6 @@ 
 	unsigned long msrnum;
 	unsigned long totalmem;
 
-	if (is_5536())
-		return;
-
 	/*  SWASIF for A1 DMA */
 	/*  Set all memory to  "just above systop" PCI so DMA will work */
 
@@ -279,18 +254,33 @@ 
 }
 
 void
-gx2_chipsetinit (struct northbridge_amd_gx2_config *nb)
+chipsetinit(void)
 {
+	device_t dev;
+	struct southbridge_amd_cs5535_config *sb;
 	msr_t msr;
 	struct msrinit *csi;
 	int i;
 	unsigned long msrnum;
 
+	dev = dev_find_device(PCI_VENDOR_ID_AMD,
+			PCI_DEVICE_ID_NS_CS5535_ISA, 0);
+
+	if (!dev) {
+		printk(BIOS_ERR, "CS5535 not found.\n");
+		return;
+	}
+
+	sb = (struct southbridge_amd_cs5535_config *)dev->chip_info;
+
+	if (!sb) {
+		printk(BIOS_ERR, "CS5535 configuration not found.\n");
+		return;
+	}
+
 	outb( P80_CHIPSET_INIT, 0x80);
 	ChipsetGeodeLinkInit();
 
-	printk(BIOS_DEBUG, "Companion is a %s\n", is_5536()?"CS5536":"CS5535");
-
 #ifdef UNUSED_CODE
 	/* we hope NEVER to be in coreboot when S3 resumes
 	if (! IsS3Resume()) */
@@ -310,15 +300,13 @@ 
 	}
 #endif
 
-	if (!is_5536()) {
-		/*  Setup USB. Need more details. #118.18 */
-		msrnum = MSR_SB_USB1 + 8;
-		msr.lo =  0x00012090;
-		msr.hi = 0;
-		wrmsr(msrnum, msr);
-		msrnum = MSR_SB_USB2 + 8;
-		wrmsr(msrnum, msr);
-	}
+	/*  Setup USB. Need more details. #118.18 */
+	msrnum = MSR_SB_USB1 + 8;
+	msr.lo =  0x00012090;
+	msr.hi = 0;
+	wrmsr(msrnum, msr);
+	msrnum = MSR_SB_USB2 + 8;
+	wrmsr(msrnum, msr);
 
 	/* set hd IRQ */
 	outl	(GPIOL_2_SET, GPIOL_INPUT_ENABLE);
@@ -340,10 +328,7 @@ 
 
 	/*  Set up Master Configuration Register */
 	/*  If 5536, use same master config settings as 5535, except for OHCI MSRs */
-	if (is_5536())
-		i = 2;
-	else
-		i = 0;
+	i = 0;
 
 	csi = &SB_MASTER_CONF_TABLE[i];
 	for(; csi->msrnum; csi++){
@@ -354,19 +339,16 @@ 
 
 	/*  Flash Setup */
 	printk(BIOS_INFO, "%sDOING ChipsetFlashSetup()!\n",
-			nb->setupflash ? "" : "NOT ");
+			sb->setupflash ? "" : "NOT ");
 
-	if (nb->setupflash)
+	if (sb->setupflash)
 		ChipsetFlashSetup();
 
 	/*  Set up Hardware Clock Gating */
 
 	/* if (getnvram(TOKEN_SB_CLK_GATE) != TVALUE_DISABLE) */
 	{
-		if (is_5536())
-			csi = CS5536_CLOCK_GATING_TABLE;
-		else
-			csi = CS5535_CLOCK_GATING_TABLE;
+		csi = CS5535_CLOCK_GATING_TABLE;
 
 		for(; csi->msrnum; csi++){
 			msr.lo = csi->msr.lo;
Index: src/southbridge/amd/cs5535/Makefile.inc
===================================================================
--- src/southbridge/amd/cs5535/Makefile.inc	(revision 5543)
+++ src/southbridge/amd/cs5535/Makefile.inc	(working copy)
@@ -1,3 +1,4 @@ 
 driver-y += cs5535.o
 #driver-y += cs5535_pci.o
 #driver-y += cs5535_ide.o
+obj-y += chipsetinit.o
Index: src/southbridge/amd/cs5535/chip.h
===================================================================
--- src/southbridge/amd/cs5535/chip.h	(revision 5543)
+++ src/southbridge/amd/cs5535/chip.h	(working copy)
@@ -4,7 +4,7 @@ 
 extern struct chip_operations southbridge_amd_cs5535_ops;
 
 struct southbridge_amd_cs5535_config {
-	int none;
+	int setupflash;
 };
 
 #endif	/* _SOUTHBRIDGE_AMD_CS5536 */
Index: src/southbridge/amd/cs5536/cs5536.c
===================================================================
--- src/southbridge/amd/cs5536/cs5536.c	(revision 5543)
+++ src/southbridge/amd/cs5536/cs5536.c	(working copy)
@@ -518,9 +518,6 @@ 
  *
  *	Called from northbridge init (Pre-VSA).
  *
- *	NOTE! This function is NOT called if the CS5536 is combined with
- *	an AMD Geode GX2. It's ONLY used on Geode LX based systems.
- *
  ****************************************************************************/
 void chipsetinit(void)
 {
Index: src/mainboard/wyse/s50/devicetree.cb
===================================================================
--- src/mainboard/wyse/s50/devicetree.cb	(revision 5544)
+++ src/mainboard/wyse/s50/devicetree.cb	(working copy)
@@ -21,7 +21,7 @@ 
 
 chip northbridge/amd/gx2
 	register "irqmap" = "0xaa5b"
-	register "setupflash" = "0"
+
 	device lapic_cluster 0 on
 		chip cpu/amd/model_gx2
 			device lapic 0 on end
Index: src/mainboard/olpc/btest/devicetree.cb
===================================================================
--- src/mainboard/olpc/btest/devicetree.cb	(revision 5543)
+++ src/mainboard/olpc/btest/devicetree.cb	(working copy)
@@ -1,6 +1,5 @@ 
 chip northbridge/amd/gx2
 	register "irqmap" = "0xaa5b"
-	register "setupflash" = "0"
 	device lapic_cluster 0 on
 		chip cpu/amd/model_gx2
 			device lapic 0 on end
Index: src/mainboard/olpc/rev_a/devicetree.cb
===================================================================
--- src/mainboard/olpc/rev_a/devicetree.cb	(revision 5543)
+++ src/mainboard/olpc/rev_a/devicetree.cb	(working copy)
@@ -1,6 +1,5 @@ 
 chip northbridge/amd/gx2
 	register "irqmap" = "0xaa5b"
-	register "setupflash" = "0"
 	device lapic_cluster 0 on
 		chip cpu/amd/model_gx2
 			device lapic 0 on end
Index: src/mainboard/amd/rumba/devicetree.cb
===================================================================
--- src/mainboard/amd/rumba/devicetree.cb	(revision 5543)
+++ src/mainboard/amd/rumba/devicetree.cb	(working copy)
@@ -1,5 +1,4 @@ 
 chip northbridge/amd/gx2
-	register "setupflash" = "0"
   	#register "irqmap" = "0xaa5b"
 	device lapic_cluster 0 on
 		chip cpu/amd/model_gx2
Index: src/mainboard/lippert/frontrunner/devicetree.cb
===================================================================
--- src/mainboard/lippert/frontrunner/devicetree.cb	(revision 5543)
+++ src/mainboard/lippert/frontrunner/devicetree.cb	(working copy)
@@ -1,9 +1,15 @@ 
 chip northbridge/amd/gx2
-  register "setupflash" = "0"
+  device lapic_cluster 0 on
+    chip cpu/amd/model_gx2
+      device lapic 0 on end
+    end
+  end
+
   #register "irqmap" = "0xaa5b"
   device pci_domain 0 on
     device pci 0.0 on end
       chip southbridge/amd/cs5535
+  	register "setupflash" = "0"
         device pci 12.0 on
         device pci 12.1 off end		# SMI
         device pci 12.2 on  end		# IDE
@@ -12,9 +18,5 @@ 
       end
     end
   end
-
-  chip cpu/amd/model_gx2
-  end
-
 end
 
Index: src/northbridge/amd/gx2/chipsetinit.c
===================================================================
--- src/northbridge/amd/gx2/chipsetinit.c	(revision 5543)
+++ src/northbridge/amd/gx2/chipsetinit.c	(working copy)
@@ -1,378 +0,0 @@ 
-#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 "chip.h"
-#include "northbridge.h"
-#include <cpu/amd/gx2def.h>
-#include <cpu/x86/msr.h>
-#include <cpu/x86/cache.h>
-#include "southbridge/amd/cs5536/cs5536.h"
-
-/* the structs in this file only set msr.lo. But ... that may not always be true */
-
-struct msrinit {
-	unsigned long msrnum;
-	msr_t msr;
-};
-
-/*  Master Configuration Register for Bus Masters. */
-static struct msrinit SB_MASTER_CONF_TABLE[] = {
-	{ USB1_SB_GLD_MSR_CONF,	{.hi=0,.lo=0x00008f000} },	/*  NOTE: Must be 1st entry in table */
-	{ USB2_SB_GLD_MSR_CONF,	{.hi=0,.lo=0x00008f000} },
-	{ ATA_SB_GLD_MSR_CONF,	{.hi=0,.lo=0x00048f000} },
-	{ AC97_SB_GLD_MSR_CONF,	{.hi=0,.lo=0x00008f000} },
-	{ MDD_SB_GLD_MSR_CONF,	{.hi=0,.lo=0x00000f000} },
-/* GLPCI_SB_GLD_MSR_CONF,	0x0FFFFFFFF*/
-/* GLCP_SB_GLD_MSR_CONF,	0x0FFFFFFFF*/
-/* GLIU_SB_GLD_MSR_CONF,	0x0*/
-	{0,{0,0}}
-};
-
-/*  5535_A3 Clock Gating*/
-static struct msrinit CS5535_CLOCK_GATING_TABLE[] = {
-	{ USB1_SB_GLD_MSR_PM,	{.hi=0, .lo=0x000000005} },
-	{ USB2_SB_GLD_MSR_PM,	{.hi=0, .lo=0x000000005} },
-	{ GLIU_SB_GLD_MSR_PM,	{.hi=0, .lo=0x000000004} },
-	{ GLPCI_SB_GLD_MSR_PM,	{.hi=0, .lo=0x000000005} },
-	{ GLCP_SB_GLD_MSR_PM,	{.hi=0, .lo=0x000000004} },
-	{ MDD_SB_GLD_MSR_PM,	{.hi=0, .lo=0x050554111} },
-	{ ATA_SB_GLD_MSR_PM,	{.hi=0, .lo=0x000000005} },
-	{ AC97_SB_GLD_MSR_PM,	{.hi=0, .lo=0x000000005} },
-	{ 0,			{.hi=0, .lo=0x000000000} }
-};
-
-/*  5536 Clock Gating*/
-static struct msrinit CS5536_CLOCK_GATING_TABLE[] = {
-/* MSR		  Setting*/
-	{ GLIU_SB_GLD_MSR_PM,	{.hi=0, .lo=0x000000004} },
-	{ GLPCI_SB_GLD_MSR_PM,	{.hi=0, .lo=0x000000005} },
-	{ GLCP_SB_GLD_MSR_PM,	{.hi=0, .lo=0x000000004} },
-	{ MDD_SB_GLD_MSR_PM,	{.hi=0, .lo=0x050554111} }, /*  SMBus clock gating errata (PBZ 2226 & SiBZ 3977) */
-	{ ATA_SB_GLD_MSR_PM,	{.hi=0, .lo=0x000000005} },
-	{ AC97_SB_GLD_MSR_PM,	{.hi=0, .lo=0x000000005} },
-	{ 0,			{.hi=0, .lo=0x000000000} }
-};
-
-#ifdef UNUSED_CODE
-struct acpiinit {
-	unsigned short ioreg;
-	unsigned long regdata;
-	unsigned short iolen;
-};
-
-static struct acpiinit acpi_init_table[] = {
-	{ACPI_BASE+0x00, 0x01000000, 4},
-	{ACPI_BASE+0x08, 0, 4},
-	{ACPI_BASE+0x0C, 0, 4},
-	{ACPI_BASE+0x1C, 0, 4},
-	{ACPI_BASE+0x18, 0x0FFFFFFFF, 4},
-	{ACPI_BASE+0x00, 0x0000FFFF, 4},
-
-	{PM_SCLK, 0x000000E00, 4},
-	{PM_SED,  0x000004601, 4},
-	{PM_SIDD, 0x000008C02, 4},
-	{PM_WKD,  0x0000000A0, 4},
-	{PM_WKXD, 0x0000000A0, 4},
-	{0,0,0}
-};
-#endif
-
-/* return 1 if we are a 5536-based system */
-static int is_5536(void)
-{
-	msr_t msr;
-	msr = rdmsr(GLIU_SB_GLD_MSR_CAP);
-	msr.lo >>= 20;
-	printk(BIOS_DEBUG, "is_5536: msr.lo is 0x%x(==5 means 5536)\n", msr.lo&0xf);
-	return ((msr.lo&0xf) == 5);
-}
-
-#ifdef UNUSED_CODE
-/*****************************************************************************
- *
- *	pmChipsetInit
- *
- *	Program ACPI LBAR and initialize ACPI registers.
- *
- *****************************************************************************/
-static void pmChipsetInit(void)
-{
-	unsigned long val = 0;
-	unsigned short port;
-
-	port =  (PMLogic_BASE + 0x010);
-	val =  0x0E00		; /*  1ms*/
-	outl(val, port);
-
-	/*  PM_WKXD*/
-	/*  Make sure bits[3:0]=0000b to clear the*/
-	/*  saved Sx state*/
-	port =  (PMLogic_BASE + 0x034);
-	val =  0x0A0		; /*  5ms*/
-	outl(val, port);
-
-	/*  PM_WKD*/
-	port =  (PMLogic_BASE + 0x030);
-	outl(val, port);
-
-	/*  PM_SED*/
-	port =  (PMLogic_BASE + 0x014);
-	val =  0x04601		; /*  5ms*/
-	outl(val, port);
-
-	/*  PM_SIDD*/
-	port =  (PMLogic_BASE + 0x020);
-	val =  0x08C02		; /*  10ms*/
-	outl(val, port);
-
-	/* GPIO24 OUT_AUX1 function is the external signal for 5535's
-	 * vsb_working_aux which is de-asserted when 5535 enters Standby (S3 or
-	 * S5) state.  On Hawk, GPIO24 controls all voltage rails except Vmem
-	 * and Vstandby.  This means GX2 will be fully de-powered if this
-	 * control de-asserts in S3/S5.
-	 */
-
-	/* GPIO24 is setup in preChipsetInit for two reasons
-	 * 1. GPIO24 at reset defaults to disabled, since this signal is
-	 *    vsb_work_aux on Hawk it controls the FET's for all voltage
-	 *    rails except Vstanby & Vmem.  BIOS needs to enable GPIO24 as
-	 *    OUT_AUX1 & OUTPUT_EN early so it is driven by 5535.
-	 * 2. Non-PM builds will require GPIO24 enabled for instant-off power
-	 *    button
-	 */
-
-	/* GPIO11 OUT_AUX1 function is the external signal for 5535's
-	 * slp_clk_n which is asserted when 5535 enters Sleep(S1) state.
-	 * On Hawk, GPIO11 is connected to control input of external clock
-	 * generator for 14MHz, PCI, USB & LPC clocks.
-	 * Programming of GPIO11 will be done by VSA PM code.  During VSA
-	 * Init. BIOS writes PM Core Virual Register indicating if S1 Clocks
-	 * should be On or Off. This is based on a Setup item.  We do not want
-	 * to leave GPIO11 enabled because of a Hawk board problem.  With
-	 * GPIO11 enabled in S3, something is back-driving GPIO11 causing it
-	 * to float to 1.6-1.7V.
-	 */
-}
-#endif
-
-struct FLASH_DEVICE {
-	unsigned char fType;		/* Flash type: NOR or NAND */
-	unsigned char fInterface;	/* Flash interface: I/O or Memory */
-	unsigned long fMask;		/* Flash size/mask */
-};
-
-static struct FLASH_DEVICE FlashInitTable[] = {
-	{ FLASH_TYPE_NAND, FLASH_IF_MEM, FLASH_MEM_4K },	/* CS0, or Flash Device 0 */
-	{ FLASH_TYPE_NONE, 0, 0 },	/* CS1, or Flash Device 1 */
-	{ FLASH_TYPE_NONE, 0, 0 },	/* CS2, or Flash Device 2 */
-	{ FLASH_TYPE_NONE, 0, 0 },	/* CS3, or Flash Device 3 */
-};
-
-#define FlashInitTableLen (ARRAY_SIZE(FlashInitTable))
-
-static uint32_t FlashPort[] = {
-	MDD_LBAR_FLSH0,
-	MDD_LBAR_FLSH1,
-	MDD_LBAR_FLSH2,
-	MDD_LBAR_FLSH3
-};
-
-/***************************************************************************
- *
- *	ChipsetFlashSetup
- *
- *	Flash LBARs need to be setup before VSA init so the PCI BARs have
- *	correct size info.  Call this routine only if flash needs to be
- *	configured (don't call it if you want IDE).
- *
- **************************************************************************/
-static void ChipsetFlashSetup(void)
-{
-	msr_t msr;
-	int i;
-	int numEnabled = 0;
-
-	printk(BIOS_DEBUG, "ChipsetFlashSetup++\n");
-	for (i = 0; i < FlashInitTableLen; i++) {
-		if (FlashInitTable[i].fType != FLASH_TYPE_NONE) {
-			printk(BIOS_DEBUG, "Enable CS%d\n", i);
-			/* we need to configure the memory/IO mask */
-			msr = rdmsr(FlashPort[i]);
-			msr.hi = 0;	/* start with the "enabled" bit clear */
-			if (FlashInitTable[i].fType == FLASH_TYPE_NAND)
-				msr.hi |= 0x00000002;
-			else
-				msr.hi &= ~0x00000002;
-			if (FlashInitTable[i].fInterface == FLASH_IF_MEM)
-				msr.hi |= 0x00000004;
-			else
-				msr.hi &= ~0x00000004;
-			msr.hi |= FlashInitTable[i].fMask;
-			printk(BIOS_DEBUG, "WRMSR(0x%08X, %08X_%08X)\n", FlashPort[i], msr.hi, msr.lo);
-			wrmsr(FlashPort[i], msr);
-
-			/* now write-enable the device */
-			msr = rdmsr(MDD_NORF_CNTRL);
-			msr.lo |= (1 << i);
-			printk(BIOS_DEBUG, "WRMSR(0x%08X, %08X_%08X)\n", MDD_NORF_CNTRL, msr.hi, msr.lo);
-			wrmsr(MDD_NORF_CNTRL, msr);
-
-			/* update the number enabled */
-			numEnabled++;
-		}
-	}
-
-	/* enable the flash */
-	if (0 != numEnabled) {
-		msr = rdmsr(MDD_PIN_OPT);
-		msr.lo &= ~1; /* PIN_OPT_IDE */
-		printk(BIOS_DEBUG, "WRMSR(0x%08X, %08X_%08X)\n", MDD_PIN_OPT, msr.hi, msr.lo);
-		wrmsr(MDD_PIN_OPT, msr);
-	}
-
-	printk(BIOS_DEBUG, "ChipsetFlashSetup--\n");
-}
-
-
-
-/****************************************************************************
- *
- * 	ChipsetGeodeLinkInit
- *
- * 	Handle chipset specific GeodeLink settings here.
- * 	Called from GeodeLink init code.
- *
- ****************************************************************************/
-static void
-ChipsetGeodeLinkInit(void)
-{
-	msr_t msr;
-	unsigned long msrnum;
-	unsigned long totalmem;
-
-	if (is_5536())
-		return;
-
-	/*  SWASIF for A1 DMA */
-	/*  Set all memory to  "just above systop" PCI so DMA will work */
-
-	/*  check A1 */
-	msrnum = MSR_SB_GLCP + 0x17;
-	msr = rdmsr(msrnum);
-	if ((msr.lo&0xff) == 0x11)
-		return;
-
-	totalmem = (sizeram() << 20) - 1; // highest address
-	totalmem >>= 12;
-	totalmem = ~totalmem;
-	totalmem &= 0xfffff;
-	msr.lo = totalmem;
-	msr.hi = 0x20000000;		/*  Port 1 (PCI) */
-	msrnum = MSR_SB_GLIU + 0x20;
-	wrmsr(msrnum, msr);
-}
-
-void
-gx2_chipsetinit (struct northbridge_amd_gx2_config *nb)
-{
-	msr_t msr;
-	struct msrinit *csi;
-	int i;
-	unsigned long msrnum;
-
-	outb( P80_CHIPSET_INIT, 0x80);
-	ChipsetGeodeLinkInit();
-
-	printk(BIOS_DEBUG, "Companion is a %s\n", is_5536()?"CS5536":"CS5535");
-
-#ifdef UNUSED_CODE
-	/* we hope NEVER to be in coreboot when S3 resumes
-	if (! IsS3Resume()) */
-	{
-		struct acpiinit *aci = acpi_init_table;
-		while (aci->ioreg){
-			if (aci->iolen == 2) {
-				outw(aci->regdata, aci->ioreg);
-				inw(aci->ioreg);
-			} else {
-				outl(aci->regdata, aci->ioreg);
-				inl(aci->ioreg);
-			}
-		}
-
-		pmChipsetInit();
-	}
-#endif
-
-	if (!is_5536()) {
-		/*  Setup USB. Need more details. #118.18 */
-		msrnum = MSR_SB_USB1 + 8;
-		msr.lo =  0x00012090;
-		msr.hi = 0;
-		wrmsr(msrnum, msr);
-		msrnum = MSR_SB_USB2 + 8;
-		wrmsr(msrnum, msr);
-	}
-
-	/* set hd IRQ */
-	outl	(GPIOL_2_SET, GPIOL_INPUT_ENABLE);
-	outl	(GPIOL_2_SET, GPIOL_IN_AUX1_SELECT);
-
-	/*  Allow IO read and writes during a ATA DMA operation. */
-	/*   This could be done in the HD rom but do it here for easier debugging. */
-
-	msrnum = ATA_SB_GLD_MSR_ERR;
-	msr = rdmsr(msrnum);
-	msr.lo &= ~0x100;
-	wrmsr(msrnum, msr);
-
-	/*  Enable Post Primary IDE. */
-	msrnum = GLPCI_SB_CTRL;
-	msr = rdmsr(msrnum);
-	msr.lo |=  GLPCI_CRTL_PPIDE_SET;
-	wrmsr(msrnum, msr);
-
-	/*  Set up Master Configuration Register */
-	/*  If 5536, use same master config settings as 5535, except for OHCI MSRs */
-	if (is_5536())
-		i = 2;
-	else
-		i = 0;
-
-	csi = &SB_MASTER_CONF_TABLE[i];
-	for(; csi->msrnum; csi++){
-		msr.lo = csi->msr.lo;
-		msr.hi = csi->msr.hi;
-		wrmsr(csi->msrnum, msr); // MSR - see table above
-	}
-
-	/*  Flash Setup */
-	printk(BIOS_INFO, "%sDOING ChipsetFlashSetup()!\n",
-			nb->setupflash ? "" : "NOT ");
-
-	if (nb->setupflash)
-		ChipsetFlashSetup();
-
-	/*  Set up Hardware Clock Gating */
-
-	/* if (getnvram(TOKEN_SB_CLK_GATE) != TVALUE_DISABLE) */
-	{
-		if (is_5536())
-			csi = CS5536_CLOCK_GATING_TABLE;
-		else
-			csi = CS5535_CLOCK_GATING_TABLE;
-
-		for(; csi->msrnum; csi++){
-			msr.lo = csi->msr.lo;
-			msr.hi = csi->msr.hi;
-			wrmsr(csi->msrnum, msr);	// MSR - see table above
-		}
-	}
-}
-
Index: src/northbridge/amd/gx2/Makefile.inc
===================================================================
--- src/northbridge/amd/gx2/Makefile.inc	(revision 5543)
+++ src/northbridge/amd/gx2/Makefile.inc	(working copy)
@@ -1,4 +1,3 @@ 
 driver-y += northbridge.o
 obj-y += northbridgeinit.o
-obj-y += chipsetinit.o
 obj-y += grphinit.o
Index: src/northbridge/amd/gx2/northbridge.c
===================================================================
--- src/northbridge/amd/gx2/northbridge.c	(revision 5543)
+++ src/northbridge/amd/gx2/northbridge.c	(working copy)
@@ -488,13 +488,12 @@ 
 
         /* Set the operations if it is a special bus type */
         if (dev->path.type == DEVICE_PATH_PCI_DOMAIN) {
-		struct northbridge_amd_gx2_config *nb = (struct northbridge_amd_gx2_config *)dev->chip_info;
 		u32 tomk;
 		printk(BIOS_DEBUG, "DEVICE_PATH_PCI_DOMAIN\n");
 		/* cpubug MUST be called before setup_gx2(), so we force the issue here */
 		northbridgeinit();
 		cpubug();
-		gx2_chipsetinit(nb);
+		chipsetinit();
 		setup_gx2();
 		do_vsmbios();
 		graphics_init();
Index: src/northbridge/amd/gx2/chip.h
===================================================================
--- src/northbridge/amd/gx2/chip.h	(revision 5543)
+++ src/northbridge/amd/gx2/chip.h	(working copy)
@@ -1,7 +1,6 @@ 
 struct northbridge_amd_gx2_config
 {
  	uint16_t irqmap;
-	int setupflash;
 };
 
 extern struct chip_operations northbridge_amd_gx2_ops;
Index: src/northbridge/amd/gx2/northbridge.h
===================================================================
--- src/northbridge/amd/gx2/northbridge.h	(revision 5543)
+++ src/northbridge/amd/gx2/northbridge.h	(working copy)
@@ -6,7 +6,6 @@ 
 #else
 unsigned int gx2_scan_root_bus(device_t root, unsigned int max);
 int sizeram(void);
-void gx2_chipsetinit (struct northbridge_amd_gx2_config *nb);
 void graphics_init(void);
 void northbridgeinit(void);
 #endif