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>
Acked-by: Nils Jacobs <njacobs8@hetnet.nl>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@5589 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
Stefan Reinauer
2010-05-25 23:06:42 +00:00
committed by Stefan Reinauer
parent 7e00a44b77
commit 2305f74895
13 changed files with 43 additions and 68 deletions

View File

@@ -1,5 +1,4 @@
chip northbridge/amd/gx2 chip northbridge/amd/gx2
register "setupflash" = "0"
#register "irqmap" = "0xaa5b" #register "irqmap" = "0xaa5b"
device lapic_cluster 0 on device lapic_cluster 0 on
chip cpu/amd/model_gx2 chip cpu/amd/model_gx2

View File

@@ -1,9 +1,15 @@
chip northbridge/amd/gx2 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" #register "irqmap" = "0xaa5b"
device pci_domain 0 on device pci_domain 0 on
device pci 0.0 on end device pci 0.0 on end
chip southbridge/amd/cs5535 chip southbridge/amd/cs5535
register "setupflash" = "0"
device pci 12.0 on device pci 12.0 on
device pci 12.1 off end # SMI device pci 12.1 off end # SMI
device pci 12.2 on end # IDE device pci 12.2 on end # IDE
@@ -12,9 +18,5 @@ chip northbridge/amd/gx2
end end
end end
end end
chip cpu/amd/model_gx2
end
end end

View File

@@ -1,6 +1,5 @@
chip northbridge/amd/gx2 chip northbridge/amd/gx2
register "irqmap" = "0xaa5b" register "irqmap" = "0xaa5b"
register "setupflash" = "0"
device lapic_cluster 0 on device lapic_cluster 0 on
chip cpu/amd/model_gx2 chip cpu/amd/model_gx2
device lapic 0 on end device lapic 0 on end

View File

@@ -1,6 +1,5 @@
chip northbridge/amd/gx2 chip northbridge/amd/gx2
register "irqmap" = "0xaa5b" register "irqmap" = "0xaa5b"
register "setupflash" = "0"
device lapic_cluster 0 on device lapic_cluster 0 on
chip cpu/amd/model_gx2 chip cpu/amd/model_gx2
device lapic 0 on end device lapic 0 on end

View File

@@ -21,7 +21,7 @@
chip northbridge/amd/gx2 chip northbridge/amd/gx2
register "irqmap" = "0xaa5b" register "irqmap" = "0xaa5b"
register "setupflash" = "0"
device lapic_cluster 0 on device lapic_cluster 0 on
chip cpu/amd/model_gx2 chip cpu/amd/model_gx2
device lapic 0 on end device lapic 0 on end

View File

@@ -1,4 +1,3 @@
driver-y += northbridge.o driver-y += northbridge.o
obj-y += northbridgeinit.o obj-y += northbridgeinit.o
obj-y += chipsetinit.o
obj-y += grphinit.o obj-y += grphinit.o

View File

@@ -1,7 +1,6 @@
struct northbridge_amd_gx2_config struct northbridge_amd_gx2_config
{ {
uint16_t irqmap; uint16_t irqmap;
int setupflash;
}; };
extern struct chip_operations northbridge_amd_gx2_ops; extern struct chip_operations northbridge_amd_gx2_ops;

View File

@@ -486,13 +486,12 @@ static void enable_dev(struct device *dev)
/* Set the operations if it is a special bus type */ /* Set the operations if it is a special bus type */
if (dev->path.type == DEVICE_PATH_PCI_DOMAIN) { if (dev->path.type == DEVICE_PATH_PCI_DOMAIN) {
struct northbridge_amd_gx2_config *nb = (struct northbridge_amd_gx2_config *)dev->chip_info;
u32 tomk; u32 tomk;
printk(BIOS_DEBUG, "DEVICE_PATH_PCI_DOMAIN\n"); printk(BIOS_DEBUG, "DEVICE_PATH_PCI_DOMAIN\n");
/* cpubug MUST be called before setup_gx2(), so we force the issue here */ /* cpubug MUST be called before setup_gx2(), so we force the issue here */
northbridgeinit(); northbridgeinit();
cpubug(); cpubug();
gx2_chipsetinit(nb); chipsetinit();
setup_gx2(); setup_gx2();
do_vsmbios(); do_vsmbios();
graphics_init(); graphics_init();

View File

@@ -6,7 +6,6 @@
#else #else
unsigned int gx2_scan_root_bus(device_t root, unsigned int max); unsigned int gx2_scan_root_bus(device_t root, unsigned int max);
int sizeram(void); int sizeram(void);
void gx2_chipsetinit (struct northbridge_amd_gx2_config *nb);
void graphics_init(void); void graphics_init(void);
void northbridgeinit(void); void northbridgeinit(void);
#endif #endif

View File

@@ -1,3 +1,4 @@
driver-y += cs5535.o driver-y += cs5535.o
#driver-y += cs5535_pci.o #driver-y += cs5535_pci.o
#driver-y += cs5535_ide.o #driver-y += cs5535_ide.o
obj-y += chipsetinit.o

View File

@@ -4,7 +4,7 @@
extern struct chip_operations southbridge_amd_cs5535_ops; extern struct chip_operations southbridge_amd_cs5535_ops;
struct southbridge_amd_cs5535_config { struct southbridge_amd_cs5535_config {
int none; int setupflash;
}; };
#endif /* _SOUTHBRIDGE_AMD_CS5536 */ #endif /* _SOUTHBRIDGE_AMD_CS5536 */

View File

@@ -8,10 +8,12 @@
#include <string.h> #include <string.h>
#include <bitops.h> #include <bitops.h>
#include "chip.h" #include "chip.h"
#include "northbridge.h" #include "northbridge/amd/gx2/northbridge.h"
#include <cpu/amd/gx2def.h> #include <cpu/amd/gx2def.h>
#include <cpu/x86/msr.h> #include <cpu/x86/msr.h>
#include <cpu/x86/cache.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" #include "southbridge/amd/cs5536/cs5536.h"
/* the structs in this file only set msr.lo. But ... that may not always be true */ /* the structs in this file only set msr.lo. But ... that may not always be true */
@@ -47,18 +49,6 @@ static struct msrinit CS5535_CLOCK_GATING_TABLE[] = {
{ 0, {.hi=0, .lo=0x000000000} } { 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 #ifdef UNUSED_CODE
struct acpiinit { struct acpiinit {
unsigned short ioreg; unsigned short ioreg;
@@ -81,19 +71,7 @@ static struct acpiinit acpi_init_table[] = {
{PM_WKXD, 0x0000000A0, 4}, {PM_WKXD, 0x0000000A0, 4},
{0,0,0} {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 * pmChipsetInit
@@ -256,9 +234,6 @@ ChipsetGeodeLinkInit(void)
unsigned long msrnum; unsigned long msrnum;
unsigned long totalmem; unsigned long totalmem;
if (is_5536())
return;
/* SWASIF for A1 DMA */ /* SWASIF for A1 DMA */
/* Set all memory to "just above systop" PCI so DMA will work */ /* Set all memory to "just above systop" PCI so DMA will work */
@@ -279,18 +254,33 @@ ChipsetGeodeLinkInit(void)
} }
void void
gx2_chipsetinit (struct northbridge_amd_gx2_config *nb) chipsetinit(void)
{ {
device_t dev;
struct southbridge_amd_cs5535_config *sb;
msr_t msr; msr_t msr;
struct msrinit *csi; struct msrinit *csi;
int i; int i;
unsigned long msrnum; 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); outb( P80_CHIPSET_INIT, 0x80);
ChipsetGeodeLinkInit(); ChipsetGeodeLinkInit();
printk(BIOS_DEBUG, "Companion is a %s\n", is_5536()?"CS5536":"CS5535");
#ifdef UNUSED_CODE #ifdef UNUSED_CODE
/* we hope NEVER to be in coreboot when S3 resumes /* we hope NEVER to be in coreboot when S3 resumes
if (! IsS3Resume()) */ if (! IsS3Resume()) */
@@ -310,7 +300,6 @@ gx2_chipsetinit (struct northbridge_amd_gx2_config *nb)
} }
#endif #endif
if (!is_5536()) {
/* Setup USB. Need more details. #118.18 */ /* Setup USB. Need more details. #118.18 */
msrnum = MSR_SB_USB1 + 8; msrnum = MSR_SB_USB1 + 8;
msr.lo = 0x00012090; msr.lo = 0x00012090;
@@ -318,7 +307,6 @@ gx2_chipsetinit (struct northbridge_amd_gx2_config *nb)
wrmsr(msrnum, msr); wrmsr(msrnum, msr);
msrnum = MSR_SB_USB2 + 8; msrnum = MSR_SB_USB2 + 8;
wrmsr(msrnum, msr); wrmsr(msrnum, msr);
}
/* set hd IRQ */ /* set hd IRQ */
outl (GPIOL_2_SET, GPIOL_INPUT_ENABLE); outl (GPIOL_2_SET, GPIOL_INPUT_ENABLE);
@@ -340,9 +328,6 @@ gx2_chipsetinit (struct northbridge_amd_gx2_config *nb)
/* Set up Master Configuration Register */ /* Set up Master Configuration Register */
/* If 5536, use same master config settings as 5535, except for OHCI MSRs */ /* 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]; csi = &SB_MASTER_CONF_TABLE[i];
@@ -354,18 +339,15 @@ gx2_chipsetinit (struct northbridge_amd_gx2_config *nb)
/* Flash Setup */ /* Flash Setup */
printk(BIOS_INFO, "%sDOING ChipsetFlashSetup()!\n", printk(BIOS_INFO, "%sDOING ChipsetFlashSetup()!\n",
nb->setupflash ? "" : "NOT "); sb->setupflash ? "" : "NOT ");
if (nb->setupflash) if (sb->setupflash)
ChipsetFlashSetup(); ChipsetFlashSetup();
/* Set up Hardware Clock Gating */ /* Set up Hardware Clock Gating */
/* if (getnvram(TOKEN_SB_CLK_GATE) != TVALUE_DISABLE) */ /* 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++){ for(; csi->msrnum; csi++){

View File

@@ -518,9 +518,6 @@ static void enable_USB_port4(struct southbridge_amd_cs5536_config *sb)
* *
* Called from northbridge init (Pre-VSA). * 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) void chipsetinit(void)
{ {