[coreboot] [commit] r6466 - in trunk/src/mainboard/supermicro: . h8scm_fam10 h8scm_fam10/acpi

repository service svn at coreboot.org
Mon Mar 28 06:38:15 CEST 2011


Author: zbao
Date: Mon Mar 28 06:38:14 2011
New Revision: 6466
URL: https://tracker.coreboot.org/trac/coreboot/changeset/6466

Log:
Add support for Supermicro H8scm.
It is AMD C32 + SR5650 + SP5100.
It is created by svn copy amd/tilapia_fam10.

Signed-off-by: Zheng Bao <zheng.bao at amd.com>
Acked-by: Marc Jones <marcj303 at gmail.com>

Added:
   trunk/src/mainboard/supermicro/h8scm_fam10/   (props changed)
      - copied from r6459, trunk/src/mainboard/amd/tilapia_fam10/
Modified:
   trunk/src/mainboard/supermicro/Kconfig
   trunk/src/mainboard/supermicro/h8scm_fam10/Kconfig
   trunk/src/mainboard/supermicro/h8scm_fam10/acpi/routing.asl
   trunk/src/mainboard/supermicro/h8scm_fam10/acpi_tables.c
   trunk/src/mainboard/supermicro/h8scm_fam10/devicetree.cb
   trunk/src/mainboard/supermicro/h8scm_fam10/dsdt.asl
   trunk/src/mainboard/supermicro/h8scm_fam10/get_bus_conf.c
   trunk/src/mainboard/supermicro/h8scm_fam10/irq_tables.c
   trunk/src/mainboard/supermicro/h8scm_fam10/mainboard.c
   trunk/src/mainboard/supermicro/h8scm_fam10/mptable.c
   trunk/src/mainboard/supermicro/h8scm_fam10/romstage.c

Modified: trunk/src/mainboard/supermicro/Kconfig
==============================================================================
--- trunk/src/mainboard/supermicro/Kconfig	Mon Mar 28 06:36:21 2011	(r6465)
+++ trunk/src/mainboard/supermicro/Kconfig	Mon Mar 28 06:38:14 2011	(r6466)
@@ -11,6 +11,8 @@
 	bool "H8DMR-i2 (Fam10)"
 config BOARD_SUPERMICRO_H8QME_FAM10
 	bool "H8QME-2+ (Fam10)"
+config BOARD_SUPERMICRO_H8SCM_FAM10
+	bool "H8SCM (Fam10)"
 config BOARD_SUPERMICRO_X6DAI_G
 	bool "X6DAi-G"
 config BOARD_SUPERMICRO_X6DHE_G2
@@ -28,6 +30,7 @@
 source "src/mainboard/supermicro/h8dmr/Kconfig"
 source "src/mainboard/supermicro/h8dmr_fam10/Kconfig"
 source "src/mainboard/supermicro/h8qme_fam10/Kconfig"
+source "src/mainboard/supermicro/h8scm_fam10/Kconfig"
 source "src/mainboard/supermicro/x6dai_g/Kconfig"
 source "src/mainboard/supermicro/x6dhe_g2/Kconfig"
 source "src/mainboard/supermicro/x6dhe_g/Kconfig"

Modified: trunk/src/mainboard/supermicro/h8scm_fam10/Kconfig
==============================================================================
--- trunk/src/mainboard/amd/tilapia_fam10/Kconfig	Tue Mar 22 14:40:09 2011	(r6459)
+++ trunk/src/mainboard/supermicro/h8scm_fam10/Kconfig	Mon Mar 28 06:38:14 2011	(r6466)
@@ -1,35 +1,34 @@
-if BOARD_AMD_TILAPIA_FAM10
+if BOARD_SUPERMICRO_H8SCM_FAM10
 
 config BOARD_SPECIFIC_OPTIONS # dummy
 	def_bool y
 	select ARCH_X86
-	select CPU_AMD_SOCKET_AM3
+	select CPU_AMD_SOCKET_C32
 	select DIMM_DDR3
 	select DIMM_REGISTERED
 	select NORTHBRIDGE_AMD_AMDFAM10
-	select SOUTHBRIDGE_AMD_RS780
-	select SOUTHBRIDGE_AMD_SB700
-	select SUPERIO_ITE_IT8718F
+	select SOUTHBRIDGE_AMD_SR5650
+	select SOUTHBRIDGE_AMD_SP5100
+	select SUPERIO_WINBOND_W83627HF
 	select HAVE_BUS_CONFIG
 	select HAVE_OPTION_TABLE
-	select HAVE_PIRQ_TABLE
-	select HAVE_MP_TABLE
+	select GENERATE_PIRQ_TABLE
+	select GENERATE_MP_TABLE
 	select HAVE_MAINBOARD_RESOURCES
 	select HAVE_HARD_RESET
 	select SB_HT_CHAIN_UNITID_OFFSET_ONLY
 	select LIFT_BSP_APIC_ID
 	select SERIAL_CPU_INIT
 	select AMDMCT
-	select HAVE_ACPI_TABLES
-	select BOARD_ROMSIZE_KB_1024
+	select GENERATE_ACPI_TABLES
+	select BOARD_ROMSIZE_KB_2048
 	select RAMINIT_SYSINFO
 	select ENABLE_APIC_EXT_ID
 	select GFXUMA
-	select QRANK_DIMM_SUPPORT
 
 config MAINBOARD_DIR
 	string
-	default amd/tilapia_fam10
+	default supermicro/h8scm_fam10
 
 config APIC_ID_OFFSET
 	hex
@@ -37,15 +36,15 @@
 
 config MAINBOARD_PART_NUMBER
 	string
-	default "Tilapia (Fam10)"
+	default "H8SCM (Fam10)"
 
 config MAX_CPUS
 	int
-	default 8
+	default 16
 
 config MAX_PHYSICAL_CPUS
 	int
-	default 2
+	default 1
 
 config MEM_TRAIN_SEQ
 	int
@@ -69,7 +68,7 @@
 
 config AMD_UCODE_PATCH_FILE
 	string
-	default "mc_patch_010000b6.h"
+	default "mc_patch_010000c4.h"
 
 config RAMTOP
 	hex
@@ -79,8 +78,12 @@
 	hex
 	default 0xc0000
 
+config ACPI_SSDTX_NUM
+	int
+	default 0
+
 config RAMBASE
 	hex
 	default 0x200000
 
-endif # BOARD_AMD_TILAPIA_FAM10
+endif # BOARD_AMD_H8SCM_FAM10

Modified: trunk/src/mainboard/supermicro/h8scm_fam10/acpi/routing.asl
==============================================================================
--- trunk/src/mainboard/amd/tilapia_fam10/acpi/routing.asl	Tue Mar 22 14:40:09 2011	(r6459)
+++ trunk/src/mainboard/supermicro/h8scm_fam10/acpi/routing.asl	Mon Mar 28 06:38:14 2011	(r6466)
@@ -30,6 +30,8 @@
 	Name(PR0, Package(){
 		/* NB devices */
 		/* Bus 0, Dev 0 - RS780 Host Controller */
+		Package (0x04) { 0xFFFF, Zero, INTA, Zero },
+
 		/* Bus 0, Dev 1 - PCI Bridge for Internal Graphics */
 		/* Bus 0, Dev 2 - PCIe Bridge for x8 PCIe Slot (GFX0) */
 		Package(){0x0002FFFF, 0, INTC, 0 },
@@ -37,16 +39,20 @@
 		Package(){0x0002FFFF, 2, INTA, 0 },
 		Package(){0x0002FFFF, 3, INTB, 0 },
 		/* Bus 0, Dev 3 - PCIe graphics port 1 bridge */
+		Package(){0x0003FFFF, 0, INTD, 0 },
+		Package(){0x0003FFFF, 1, INTA, 0 },
+		Package(){0x0003FFFF, 2, INTB, 0 },
+		Package(){0x0003FFFF, 3, INTC, 0 },
 		/* Bus 0, Dev 4 - PCIe Bridge for Express Card Slot */
 		Package(){0x0004FFFF, 0, INTA, 0 },
 		Package(){0x0004FFFF, 1, INTB, 0 },
 		Package(){0x0004FFFF, 2, INTC, 0 },
 		Package(){0x0004FFFF, 3, INTD, 0 },
 		/* Bus 0, Dev 5 - General purpose PCIe bridge 5 */
-		/* Package(){0x0005FFFF, 0, INTB, 0 }, */
-		/* Package(){0x0005FFFF, 1, INTC, 0 }, */
-		/* Package(){0x0005FFFF, 2, INTD, 0 }, */
-		/* Package(){0x0005FFFF, 3, INTA, 0 }, */
+		Package(){0x0005FFFF, 0, INTB, 0 },
+		Package(){0x0005FFFF, 1, INTC, 0 },
+		Package(){0x0005FFFF, 2, INTD, 0 },
+		Package(){0x0005FFFF, 3, INTA, 0 },
 		/* Bus 0, Dev 6 - PCIe Bridge for Ethernet Chip */
 		Package(){0x0006FFFF, 0, INTC, 0 },
 		Package(){0x0006FFFF, 1, INTD, 0 },
@@ -59,17 +65,43 @@
 		Package(){0x0007FFFF, 3, INTC, 0 },
 		/* Bus 0, Funct 8 - Southbridge port (normally hidden) */
 
-		/* SB devices */
-		/* Bus 0, Dev 17 - SATA controller #2 */
-		/* Bus 0, Dev 18 - SATA controller #1 */
-		Package(){0x0011FFFF, 1, INTA, 0 },
+		/* Bus 0, Dev 9 - PCIe Bridge for network card */
+		 Package(){0x0009FFFF, 0, INTB, 0 },
+		 Package(){0x0009FFFF, 1, INTC, 0 },
+		 Package(){0x0009FFFF, 2, INTD, 0 },
+		 Package(){0x0009FFFF, 3, INTA, 0 },
+
+		/* Bus 0, Dev a - PCIe Bridge for network card */
+		 Package(){0x000AFFFF, 0, INTC, 0 },
+		 Package(){0x000AFFFF, 1, INTD, 0 },
+		 Package(){0x000AFFFF, 2, INTA, 0 },
+		 Package(){0x000AFFFF, 3, INTB, 0 },
+
+		/* Bus 0, Dev b - */
+		 Package(){0x000BFFFF, 0, INTD, 0 },
+		 Package(){0x000BFFFF, 1, INTA, 0 },
+		 Package(){0x000BFFFF, 2, INTB, 0 },
+		 Package(){0x000BFFFF, 3, INTC, 0 },
+
+		/* Bus 0, Dev c - */
+		 Package(){0x000CFFFF, 0, INTA, 0 },
+		 Package(){0x000CFFFF, 1, INTB, 0 },
+		 Package(){0x000CFFFF, 2, INTC, 0 },
+		 Package(){0x000CFFFF, 3, INTD, 0 },
+
+		/* Bus 0, Dev 17 - SATA controller */
+		Package(){0x0011FFFF, 0, INTG, 0 },
 
 		/* Bus 0, Dev 19 - USB: OHCI, funct 0-4; EHCI, funct 5 */
 		Package(){0x0012FFFF, 0, INTA, 0 },
 		Package(){0x0012FFFF, 1, INTB, 0 },
-		Package(){0x0013FFFF, 0, INTA, 0 },
-		Package(){0x0013FFFF, 1, INTB, 0 },
-		Package(){0x0014FFFF, 2, INTA, 0 },
+		Package(){0x0012FFFF, 2, INTC, 0 },
+		Package(){0x0012FFFF, 3, INTD, 0 },
+
+		Package(){0x0013FFFF, 0, INTC, 0 },
+		Package(){0x0013FFFF, 1, INTD, 0 },
+		Package(){0x0013FFFF, 2, INTA, 0 },
+		Package(){0x0013FFFF, 3, INTB, 0 },
 
 		/* Bus 0, Dev 20 - F0:SMBus/ACPI,F1:IDE;F2:HDAudio;F3:LPC;F4:PCIBridge;F5:AC97 Audio;F6:AC97 Modem */
 		Package(){0x0014FFFF, 0, INTA, 0 },
@@ -81,71 +113,89 @@
 	Name(APR0, Package(){
 		/* NB devices in APIC mode */
 		/* Bus 0, Dev 0 - RS780 Host Controller */
+		Package (0x04) { 0xFFFF, Zero, Zero, 16 },
 
 		/* Bus 0, Dev 1 - PCI Bridge for Internal Graphics */
-		/* Package(){0x0001FFFF, 0, 0, 18 }, */
-		/* package(){0x0001FFFF, 1, 0, 19 }, */
 
 		/* Bus 0, Dev 2 - PCIe Bridge for x8 PCIe Slot (GFX0) */
 		Package(){0x0002FFFF, 0, 0, 18 },
-		/* Package(){0x0002FFFF, 1, 0, 19 }, */
-		/* Package(){0x0002FFFF, 2, 0, 16 }, */
-		/* Package(){0x0002FFFF, 3, 0, 17 }, */
+		Package(){0x0002FFFF, 1, 0, 19 },
+		Package(){0x0002FFFF, 2, 0, 16 },
+		Package(){0x0002FFFF, 3, 0, 17 },
 
 		/* Bus 0, Dev 3 - PCIe graphics port 1 bridge */
 		Package(){0x0003FFFF, 0, 0, 19 },
+		Package(){0x0003FFFF, 1, 0, 16 },
+		Package(){0x0003FFFF, 2, 0, 17 },
+		Package(){0x0003FFFF, 3, 0, 18 },
 
 		/* Bus 0, Dev 4 - PCIe Bridge for Express Card Slot */
 		Package(){0x0004FFFF, 0, 0, 16 },
-		/* Package(){0x0004FFFF, 1, 0, 17 }, */
-		/* Package(){0x0004FFFF, 2, 0, 18 }, */
-		/* Package(){0x0004FFFF, 3, 0, 19 }, */
+		Package(){0x0004FFFF, 1, 0, 17 },
+		Package(){0x0004FFFF, 2, 0, 18 },
+		Package(){0x0004FFFF, 3, 0, 19 },
 
 		/* Bus 0, Dev 5 - General purpose PCIe bridge 5 */
-		/* Package(){0x0005FFFF, 0, 0, 17 }, */
-		/* Package(){0x0005FFFF, 1, 0, 18 }, */
-		/* Package(){0x0005FFFF, 2, 0, 19 }, */
-		/* Package(){0x0005FFFF, 3, 0, 16 }, */
+		Package(){0x0005FFFF, 0, 0, 17 },
+		Package(){0x0005FFFF, 1, 0, 18 },
+		Package(){0x0005FFFF, 2, 0, 19 },
+		Package(){0x0005FFFF, 3, 0, 16 },
 
 		/* Bus 0, Dev 6 - General purpose PCIe bridge 6 */
-		/* Package(){0x0006FFFF, 0, 0, 18 }, */
-		/* Package(){0x0006FFFF, 1, 0, 19 }, */
-		/* Package(){0x0006FFFF, 2, 0, 16 }, */
-		/* Package(){0x0006FFFF, 3, 0, 17 }, */
+		Package(){0x0006FFFF, 0, 0, 18 },
+		Package(){0x0006FFFF, 1, 0, 19 },
+		Package(){0x0006FFFF, 2, 0, 16 },
+		Package(){0x0006FFFF, 3, 0, 17 },
 
 		/* Bus 0, Dev 7 - PCIe Bridge for network card */
-		/* Package(){0x0007FFFF, 0, 0, 19 }, */
-		/* Package(){0x0007FFFF, 1, 0, 16 }, */
-		/* Package(){0x0007FFFF, 2, 0, 17 }, */
-		/* Package(){0x0007FFFF, 3, 0, 18 }, */
+		Package(){0x0007FFFF, 0, 0, 19 },
+		Package(){0x0007FFFF, 1, 0, 16 },
+		Package(){0x0007FFFF, 2, 0, 17 },
+		Package(){0x0007FFFF, 3, 0, 18 },
+
+		/* Bus 0, Funct 8 - Southbridge port (normally hidden) */
 
 		/* Bus 0, Dev 9 - PCIe Bridge for network card */
 		Package(){0x0009FFFF, 0, 0, 17 },
-		/* Package(){0x0009FFFF, 1, 0, 16 }, */
-		/* Package(){0x0009FFFF, 2, 0, 17 }, */
-		/* Package(){0x0009FFFF, 3, 0, 18 }, */
+		Package(){0x0009FFFF, 1, 0, 18 },
+		Package(){0x0009FFFF, 2, 0, 19 },
+		Package(){0x0009FFFF, 3, 0, 16 },
+
 		/* Bus 0, Dev A - PCIe Bridge for network card */
 		Package(){0x000AFFFF, 0, 0, 18 },
-		/* Package(){0x000AFFFF, 1, 0, 16 }, */
-		/* Package(){0x000AFFFF, 2, 0, 17 }, */
-		/* Package(){0x000AFFFF, 3, 0, 18 }, */
-		/* Bus 0, Funct 8 - Southbridge port (normally hidden) */
+		Package(){0x000AFFFF, 1, 0, 19 },
+		Package(){0x000AFFFF, 2, 0, 16 },
+		Package(){0x000AFFFF, 3, 0, 17 },
+
+		/* Bus 0, Dev b - */
+		Package(){0x000BFFFF, 0, 0, 19 },
+		Package(){0x000BFFFF, 1, 0, 16 },
+		Package(){0x000BFFFF, 2, 0, 17 },
+		Package(){0x000BFFFF, 3, 0, 18 },
+
+		/* Bus 0, Dev c - */
+		Package(){0x000CFFFF, 0, 0, 16 },
+		Package(){0x000CFFFF, 1, 0, 17 },
+		Package(){0x000CFFFF, 2, 0, 18 },
+		Package(){0x000CFFFF, 3, 0, 19 },
 
-		/* SB devices in APIC mode */
-		/* Bus 0, Dev 17 - SATA controller #2 */
-		/* Bus 0, Dev 18 - SATA controller #1 */
+		/* Bus 0, Dev 17 - SATA controller */
 		Package(){0x0011FFFF, 0, 0, 22 },
 
 		/* Bus 0, Dev 19 - USB: OHCI, funct 0-4; EHCI, funct 5 */
 		Package(){0x0012FFFF, 0, 0, 16 },
 		Package(){0x0012FFFF, 1, 0, 17 },
+		Package(){0x0012FFFF, 2, 0, 18 },
+		Package(){0x0012FFFF, 3, 0, 19 },
+
 		Package(){0x0013FFFF, 0, 0, 18 },
 		Package(){0x0013FFFF, 1, 0, 19 },
-		Package(){0x0014FFFF, 0, 0, 16 },
+		Package(){0x0013FFFF, 2, 0, 16 },
+		Package(){0x0013FFFF, 3, 0, 17 },
 		/* Package(){0x00130004, 2, 0, 18 }, */
 		/* Package(){0x00130005, 3, 0, 19 }, */
 
-		/* Bus 0, Dev 20 - F0:SMBus/ACPI, F1:IDE; F2:HDAudio; F3:LPC; F4:PCIBridge; F5:AC97 Audio; F6:AC97 Modem */
+		/* Bus 0, Dev 20 - F0:SMBus/ACPI,F1:IDE;F2:HDAudio;F3:LPC;F4:PCIBridge;F5:AC97 Audio;F6:AC97 Modem */
 		Package(){0x0014FFFF, 0, 0, 16 },
 		Package(){0x0014FFFF, 1, 0, 17 },
 		Package(){0x0014FFFF, 2, 0, 18 },
@@ -214,10 +264,10 @@
 
 	Name(APS5, Package(){
 		/* PCIe slot - Hooked to PCIe slot 5 */
-		Package(){0x0000FFFF, 0, 0, 17 },
-		Package(){0x0000FFFF, 1, 0, 18 },
-		Package(){0x0000FFFF, 2, 0, 19 },
-		Package(){0x0000FFFF, 3, 0, 16 },
+		Package(){0x0000FFFF, 0, 0, 45 },
+		Package(){0x0000FFFF, 1, 0, 46 },
+		Package(){0x0000FFFF, 2, 0, 47 },
+		Package(){0x0000FFFF, 3, 0, 44 },
 	})
 
 	Name(PS6, Package(){
@@ -230,10 +280,10 @@
 
 	Name(APS6, Package(){
 		/* PCIe slot - Hooked to PCIe slot 6 */
-		Package(){0x0000FFFF, 0, 0, 18 },
-		Package(){0x0000FFFF, 1, 0, 19 },
-		Package(){0x0000FFFF, 2, 0, 16 },
-		Package(){0x0000FFFF, 3, 0, 17 },
+		Package(){0x0000FFFF, 0, 0, 46 },
+		Package(){0x0000FFFF, 1, 0, 47 },
+		Package(){0x0000FFFF, 2, 0, 44 },
+		Package(){0x0000FFFF, 3, 0, 45 },
 	})
 
 	Name(PS7, Package(){
@@ -246,17 +296,18 @@
 
 	Name(APS7, Package(){
 		/* The onboard Ethernet chip - Hooked to PCIe slot 7 */
-		Package(){0x0000FFFF, 0, 0, 19 },
-		Package(){0x0000FFFF, 1, 0, 16 },
-		Package(){0x0000FFFF, 2, 0, 17 },
-		Package(){0x0000FFFF, 3, 0, 18 },
+		Package(){0x0000FFFF, 0, 0, 47 },
+		Package(){0x0000FFFF, 1, 0, 44 },
+		Package(){0x0000FFFF, 2, 0, 45 },
+		Package(){0x0000FFFF, 3, 0, 46 },
 	})
+
 	Name(PS9, Package(){
 		/* PCIe slot - Hooked to PCIe slot 9 */
-		Package(){0x0000FFFF, 0, INTD, 0 },
-		Package(){0x0000FFFF, 1, INTA, 0 },
-		Package(){0x0000FFFF, 2, INTB, 0 },
-		Package(){0x0000FFFF, 3, INTC, 0 },
+		Package(){0x0000FFFF, 0, INTB, 0 },
+		Package(){0x0000FFFF, 1, INTC, 0 },
+		Package(){0x0000FFFF, 2, INTD, 0 },
+		Package(){0x0000FFFF, 3, INTA, 0 },
 	})
 
 	Name(APS9, Package(){
@@ -268,10 +319,10 @@
 	})
 	Name(PSa, Package(){
 		/* PCIe slot - Hooked to PCIe slot 10 */
-		Package(){0x0000FFFF, 0, INTD, 0 },
-		Package(){0x0000FFFF, 1, INTA, 0 },
-		Package(){0x0000FFFF, 2, INTB, 0 },
-		Package(){0x0000FFFF, 3, INTC, 0 },
+		Package(){0x0000FFFF, 0, INTC, 0 },
+		Package(){0x0000FFFF, 1, INTD, 0 },
+		Package(){0x0000FFFF, 2, INTA, 0 },
+		Package(){0x0000FFFF, 3, INTB, 0 },
 	})
 
 	Name(APSa, Package(){
@@ -282,6 +333,38 @@
 		Package(){0x0000FFFF, 3, 0, 17 },
 	})
 
+	Name(PSb, Package(){
+		/* PCIe slot - Hooked to PCIe slot 11 */
+		Package(){0x0000FFFF, 0, INTD, 0 },
+		Package(){0x0000FFFF, 1, INTA, 0 },
+		Package(){0x0000FFFF, 2, INTB, 0 },
+		Package(){0x0000FFFF, 3, INTC, 0 },
+	})
+
+	Name(APSb, Package(){
+		/* PCIe slot - Hooked to PCIe slot 11 */
+		Package(){0x0000FFFF, 0, 0, 32 },
+		Package(){0x0000FFFF, 1, 0, 33 },
+		Package(){0x0000FFFF, 2, 0, 34 },
+		Package(){0x0000FFFF, 3, 0, 34 },
+	})
+
+	Name(PSc, Package(){
+		/* PCIe slot - Hooked to PCIe slot 12 */
+		Package(){0x0000FFFF, 0, INTD, 0 },
+		Package(){0x0000FFFF, 1, INTA, 0 },
+		Package(){0x0000FFFF, 2, INTB, 0 },
+		Package(){0x0000FFFF, 3, INTC, 0 },
+	})
+
+	Name(APSc, Package(){
+		/* PCIe slot - Hooked to PCIe slot 12 */
+		Package(){0x0000FFFF, 0, 0, 36 },
+		Package(){0x0000FFFF, 1, 0, 37 },
+		Package(){0x0000FFFF, 2, 0, 38 },
+		Package(){0x0000FFFF, 3, 0, 39 },
+	})
+
 	Name(PCIB, Package(){
 		/* PCI slots: slot 0, slot 1, slot 2 behind Dev14, Fun4. */
 		Package(){0x0005FFFF, 0, 0, 0x14 },

Modified: trunk/src/mainboard/supermicro/h8scm_fam10/acpi_tables.c
==============================================================================
--- trunk/src/mainboard/amd/tilapia_fam10/acpi_tables.c	Tue Mar 22 14:40:09 2011	(r6459)
+++ trunk/src/mainboard/supermicro/h8scm_fam10/acpi_tables.c	Mon Mar 28 06:38:14 2011	(r6466)
@@ -65,12 +65,25 @@
 
 unsigned long acpi_fill_madt(unsigned long current)
 {
+	device_t dev;
+	u32 dword;
+	u32 gsi_base=0;
 	/* create all subtables for processors */
 	current = acpi_create_madt_lapics(current);
 
 	/* Write SB700 IOAPIC, only one */
 	current += acpi_create_madt_ioapic((acpi_madt_ioapic_t *) current, 2,
-					   IO_APIC_ADDR, 0);
+					   IO_APIC_ADDR, gsi_base);
+	/* IOAPIC on rs5690 */
+	gsi_base += 24;		/* SB700 has 24 IOAPIC entries. */
+	dev = dev_find_slot(0, PCI_DEVFN(0, 0));
+	if (dev) {
+		pci_write_config32(dev, 0xF8, 0x1);
+		dword = pci_read_config32(dev, 0xFC) & 0xfffffff0;
+		current += acpi_create_madt_ioapic((acpi_madt_ioapic_t *) current, 2+1,
+						   dword, gsi_base);
+	}
+
 
 	current += acpi_create_madt_irqoverride((acpi_madt_irqoverride_t *)
 						current, 0, 0, 2, 0);

Modified: trunk/src/mainboard/supermicro/h8scm_fam10/devicetree.cb
==============================================================================
--- trunk/src/mainboard/amd/tilapia_fam10/devicetree.cb	Tue Mar 22 14:40:09 2011	(r6459)
+++ trunk/src/mainboard/supermicro/h8scm_fam10/devicetree.cb	Mon Mar 28 06:38:14 2011	(r6466)
@@ -1,39 +1,42 @@
-# sample config for amd/tilapia_fam10
+# GPP1 (dev2,3)   --> slot 7
+# GPP2 (dev12) --> slot 6
+# GPP3A (dev9,A) --> Lan1, Lan2
+
+# sample config for supermicro/h8scm_fam10
 chip northbridge/amd/amdfam10/root_complex
 	device lapic_cluster 0 on
-		chip cpu/amd/socket_AM3  #L1 and DDR3
+		chip cpu/amd/socket_C32  #L1 and DDR3
 			 device lapic 0 on end
 		end
 	end
 	device pci_domain 0 on
-		subsystemid 0x1022 0x3060 inherit
+		subsystemid 0x15d9 0x1511 inherit
 		chip northbridge/amd/amdfam10
+			##device pci 18.0 on end
+			##device pci 18.0 on end
 			device pci 18.0 on #  northbridge
-				chip southbridge/amd/rs780
+				chip southbridge/amd/sr5650
 					device pci 0.0 on end # HT  	0x9600
-					device pci 1.0 on end # Internal Graphics P2P bridge 0x9602
+					device pci 0.1 on end # CLKCONFIG
 					device pci 2.0 on end # PCIE P2P bridge (external graphics) 0x9603
-					device pci 3.0 on end # PCIE P2P bridge	0x960b
-					device pci 4.0 on end # PCIE P2P bridge 0x9604
+					device pci 3.0 off end # PCIE P2P bridge	0x960b
+					device pci 4.0 off end # PCIE P2P bridge 0x9604
 					device pci 5.0 off end # PCIE P2P bridge 0x9605
-					device pci 6.0 off end # PCIE P2P bridge 0x9606
-					device pci 7.0 off end # PCIE P2P bridge 0x9607
-					device pci 8.0 off end # NB/SB Link P2P bridge
-					device pci 9.0 on end #
-					device pci a.0 on end #
-					register "gppsb_configuration" = "1"   # Configuration B
-					register "gpp_configuration" = "3"   # Configuration D default
-					register "port_enable" = "0x6fc"
-					register "gfx_dev2_dev3" = "1"
-					register "gfx_dual_slot" = "2"
-
-					register "gfx_lane_reversal" = "0"
-					register "gfx_tmds" = "0"
-					register "gfx_compliance" = "0"
-					register "gfx_reconfiguration" = "1"
-					register "gfx_link_width" = "0"
+					device pci 6.0 on  end # PCIE P2P bridge 0x9606
+					device pci 7.0 on  end # PCIE P2P bridge 0x9607
+					device pci 8.0 on  end # NB/SB Link P2P bridge
+					device pci 9.0 on  end #
+					device pci a.0 on  end #
+					device pci b.0 on  end #
+					device pci c.0 on  end #
+					device pci d.0 on  end #
+					register "gpp1_configuration" = "0"   # Configuration 16:0 default
+					register "gpp2_configuration" = "1"   # Configuration 8:8
+					#register "gpp3a_configuration" = "2"   # Configuration 4:1:1:0:0:0
+					register "gpp3a_configuration" = "11"   # Configuration 1:1:1:1:1:1
+					register "port_enable" = "0x1ffc"
 				end
-				chip southbridge/amd/sb700 # it is under NB/SB Link, but on the same pri bus
+				chip southbridge/amd/sp5100 # it is under NB/SB Link, but on the same pri bus
 					device pci 11.0 on end # SATA
 					device pci 12.0 on end # USB
 					device pci 12.1 on end # USB
@@ -41,75 +44,65 @@
 					device pci 13.0 on end # USB
 					device pci 13.1 on end # USB
 					device pci 13.2 on end # USB
-	 				device pci 14.0 on # SM
-						chip drivers/generic/generic #dimm 0-0-0
-							device i2c 50 on end
-						end
-						chip drivers/generic/generic #dimm 0-0-1
-							device i2c 51 on end
-						end
-						chip drivers/generic/generic #dimm 0-1-0
-							device i2c 52 on end
-						end
-						chip drivers/generic/generic #dimm 0-1-1
-							device i2c 53 on end
-						end
-					end # SM
+	 				device pci 14.0 on end # SM
 					device pci 14.1 on end # IDE    0x439c
-					device pci 14.2 on end # HDA    0x4383
+					device pci 14.2 off end # HDA    0x4383, h8scm doesnt have codec.
 					device pci 14.3 on # LPC	0x439d
-						chip superio/ite/it8718f
+						chip superio/winbond/w83627hf
 							device pnp 2e.0 off #  Floppy
-								io 0x60 = 0x3f0
-								irq 0x70 = 6
-								drq 0x74 = 2
-							end
-							device pnp 2e.1 on #  Com1
-								io 0x60 = 0x3f8
-								irq 0x70 = 4
-							end
-							device pnp 2e.2 off #  Com2
-								io 0x60 = 0x2f8
-								irq 0x70 = 3
-							end
-							device pnp 2e.3 off #  Parallel Port
-								io 0x60 = 0x378
-								irq 0x70 = 7
-							end
-							device pnp 2e.4 off end #  EC
-							device pnp 2e.5 on #  Keyboard
-								io 0x60 = 0x60
-								io 0x62 = 0x64
-								irq 0x70 = 1
-							end
-							device pnp 2e.6 on #  Mouse
-								irq 0x70 = 12
+                	                 			io 0x60 = 0x3f0
+                	                			irq 0x70 = 6
+                	                			drq 0x74 = 2
+							end
+                	        			device pnp 2e.1 off #  Parallel Port
+                	                 			io 0x60 = 0x378
+                	                			irq 0x70 = 7
+							end
+                	        			device pnp 2e.2 off #  Com1
+                	                 			io 0x60 = 0x3f8
+                	                			irq 0x70 = 4
+							end
+                	        			device pnp 2e.3 off #  Com2
+                	                 			io 0x60 = 0x2f8
+                	                			irq 0x70 = 3
+							end
+                	        			device pnp 2e.5 on #  Keyboard
+                	                 			io 0x60 = 0x60
+                	                 			io 0x62 = 0x64
+                	                			irq 0x70 = 1
+								irq 0x72 = 12
 							end
-							device pnp 2e.7 off #  GPIO, must be closed for unresolved reason.
-							end
-							device pnp 2e.8 off #  MIDI
-								io 0x60 = 0x300
-								irq 0x70 = 9
+                	        			device pnp 2e.6 off  # SFI
+                	                 			io 0x62 = 0x100
 							end
-							device pnp 2e.9 off #  GAME
+                	        			device pnp 2e.7 off #  GPIO_GAME_MIDI
 								io 0x60 = 0x220
+								io 0x62 = 0x300
+								irq 0x70 = 9
 							end
-							device pnp 2e.a off end #  CIR
-						end	#superio/ite/it8718f
+                	        			device pnp 2e.8 off end #  WDTO_PLED
+                	        			device pnp 2e.9 off end #  GPIO_SUSLED
+                	        			device pnp 2e.a off end #  ACPI
+                	        			device pnp 2e.b on #  HW Monitor
+ 					 			io 0x60 = 0x290
+								irq 0x70 = 5
+                					end
+						end	#superio/winbond/w83627hf
 					end		#LPC
 					device pci 14.4 on end # PCI 0x4384
 					device pci 14.5 on end # USB 2
-					register "boot_switch_sata_ide" = "0"	# 0: boot from SATA. 1: IDE
-				end	#southbridge/amd/sb700
+					register "boot_switch_sata_ide" = "0"   # 0: boot from SATA. 1: IDE
+				end	#southbridge/amd/sp5100
 			end #  device pci 18.0
-
-			device pci 18.0 on end
-			device pci 18.0 on end
 			device pci 18.1 on end
 			device pci 18.2 on end
 			device pci 18.3 on end
 			device pci 18.4 on end
-#			device pci 00.5 on end
+			device pci 19.0 on end
+			device pci 19.1 on end
+			device pci 19.2 on end
+			device pci 19.3 on end
+			device pci 19.4 on end
 		end
 	end #pci_domain
 	#for node 32 to node 63
@@ -140,4 +133,7 @@
 #		  device pnp 0.9 off end # mcp55
 #		  device pnp 0.a on end # GH ext table
 #	 end
+
 end
+
+

Modified: trunk/src/mainboard/supermicro/h8scm_fam10/dsdt.asl
==============================================================================
--- trunk/src/mainboard/amd/tilapia_fam10/dsdt.asl	Tue Mar 22 14:40:09 2011	(r6459)
+++ trunk/src/mainboard/supermicro/h8scm_fam10/dsdt.asl	Mon Mar 28 06:38:14 2011	(r6466)
@@ -1,7 +1,7 @@
 /*
  * This file is part of the coreboot project.
  *
- * Copyright (C) 2010 Advanced Micro Devices, Inc.
+ * Copyright (C) 2009 Advanced Micro Devices, Inc.
  *
  * 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
@@ -19,11 +19,11 @@
 
 /* DefinitionBlock Statement */
 DefinitionBlock (
-	"DSDT.AML",           /* Output filename */
-	"DSDT",                 /* Signature */
+	"DSDT.AML",	/* Output filename */
+	"DSDT",		/* Signature */
 	0x02,		/* DSDT Revision, needs to be 2 for 64bit */
-	"AMD   ",               /* OEMID */
-	"TILAPIA ",	     /* TABLE ID */
+	"AMD   ",	/* OEMID */
+	"H8SCM   ",	/* TABLE ID */
 	0x00010001	/* OEM Revision */
 	)
 {	/* Start of ASL file */
@@ -98,6 +98,24 @@
 			) {
 			#include "acpi/cpstate.asl"
 		}
+
+		Processor(
+			CPU4,		/* name space name */
+			4,		/* Unique number for this processor */
+			0x0000,		/* PBLK system I/O address !hardcoded! */
+			0x00		/* PBLKLEN for boot processor */
+			) {
+			#include "acpi/cpstate.asl"
+		}
+
+		Processor(
+			CPU5,		/* name space name */
+			5,		/* Unique number for this processor */
+			0x0000,		/* PBLK system I/O address !hardcoded! */
+			0x00		/* PBLKLEN for boot processor */
+			) {
+			#include "acpi/cpstate.asl"
+		}
 	} /* End _PR scope */
 
 	/* PIC IRQ mapping registers, C00h-C01h */
@@ -1160,7 +1178,7 @@
 
 	#include "acpi/usb.asl"
 
-	/* South Bridge */
+	/* System Bus */
 	Scope(\_SB) { /* Start \_SB scope */
 		#include "../../../arch/x86/acpi/globutil.asl" /* global utility methods expected within the \_SB scope */
 
@@ -1266,6 +1284,24 @@
 				} /* end _PRT */
 			} /* end PBRa */
 
+			Device(PBRb) {
+				Name(_ADR, 0x000b0000)
+				Name(_PRW, Package() {0x18, 4})
+				Method(_PRT,0) {
+					If(PMOD){ Return(APSb) }   /* APIC mode */
+					Return (PSb)                  /* PIC Mode */
+				} /* end _PRT */
+			} /* end PBRb */
+
+			Device(PBRc) {
+				Name(_ADR, 0x000c0000)
+				Name(_PRW, Package() {0x18, 4})
+				Method(_PRT,0) {
+					If(PMOD){ Return(APSc) }   /* APIC mode */
+					Return (PSc)                  /* PIC Mode */
+				} /* end _PRT */
+			} /* end PBRc */
+
 
 			/* PCI slot 1, 2, 3 */
 			Device(PIBR) {
@@ -1544,6 +1580,7 @@
 					0xF300			/* length */
 				)
 
+#if 0
 				Memory32Fixed(READWRITE, 0, 0xA0000, BSMM)
 				Memory32Fixed(READONLY, 0x000A0000, 0x00020000, VGAM) 	/* VGA memory space */
 				Memory32Fixed(READONLY, 0x000C0000, 0x00020000, EMM1)	/* Assume C0000-E0000 empty */
@@ -1585,12 +1622,16 @@
 					,,
 					PEBM
 				)
+#endif
 
+				/* memory space for PCI BARs below 4GB */
+				Memory32Fixed(ReadOnly, 0x00000000, 0x00000000, MMIO)
 			}) /* End Name(_SB.PCI0.CRES) */
 
 			Method(_CRS, 0) {
 				/* DBGO("\\_SB\\PCI0\\_CRS\n") */
 
+#if 0
 				CreateDWordField(CRES, ^EMM1._BAS, EM1B)
 				CreateDWordField(CRES, ^EMM1._LEN, EM1L)
 				CreateDWordField(CRES, ^DMLO._BAS, DMLB)
@@ -1614,8 +1655,7 @@
 				/*
 				* If(LNotEqual(TOM2, 0x00000000)){
 				*	Store(0x100000000,DMHB)			DRAM from 4GB to TopMem2
-				*	ShiftLeft(TOM2, 20, Local0)
-				*	Subtract(Local0, 0x100000000, DMHL)
+				*	Subtract(TOM2, 0x100000000, DMHL)
 				* }
 				*/
 
@@ -1628,6 +1668,22 @@
 					ShiftLeft(PBAD,16,EBMB)		/* Reserve the "BIOS" space */
 					Store(PBLN,EBML)
 				}
+#endif
+
+				CreateDWordField(CRES, ^MMIO._BAS, MM1B)
+				CreateDWordField(CRES, ^MMIO._LEN, MM1L)
+				/*
+				 * Declare memory between TOM1 and 4GB as available
+				 * for PCI MMIO.
+				 * Use ShiftLeft to avoid 64bit constant (for XP).
+				 * This will work even if the OS does 32bit arithmetic, as
+				 * 32bit (0x00000000 - TOM1) will wrap and give the same
+				 * result as 64bit (0x100000000 - TOM1).
+				 */
+				Store(TOM1, MM1B)
+				ShiftLeft(0x10000000, 4, Local0)
+				Subtract(Local0, TOM1, Local0)
+				Store(Local0, MM1L)
 
 				Return(CRES) /* note to change the Name buffer */
 			}  /* end of Method(_SB.PCI0._CRS) */

Modified: trunk/src/mainboard/supermicro/h8scm_fam10/get_bus_conf.c
==============================================================================
--- trunk/src/mainboard/amd/tilapia_fam10/get_bus_conf.c	Tue Mar 22 14:40:09 2011	(r6459)
+++ trunk/src/mainboard/supermicro/h8scm_fam10/get_bus_conf.c	Mon Mar 28 06:38:14 2011	(r6466)
@@ -32,9 +32,10 @@
 /* Global variables for MB layouts and these will be shared by irqtable mptable
 * and acpi_tables busnum is default.
 */
-u8 bus_rs780[11];
-u8 bus_sb700[2];
-u32 apicid_sb700;
+u8 bus_isa;
+u8 bus_sr5650[14];
+u8 bus_sp5100[2];
+u32 apicid_sp5100;
 
 /*
 * Here you only need to set value in pci1234 for HT-IO that could be installed or not
@@ -53,8 +54,10 @@
 	0x20202020,
 };
 
-u32 sbdn_rs780;
-u32 sbdn_sb700;
+u32 bus_type[256];
+
+u32 sbdn_sr5650;
+u32 sbdn_sp5100;
 
 extern void get_pci1234(void);
 
@@ -64,7 +67,7 @@
 {
 	u32 apicid_base;
 	device_t dev;
-	int i;
+	int i, j;
 
 	if (get_bus_conf_done == 1)
 		return;		/* do it only once */
@@ -79,38 +82,56 @@
 	get_pci1234();
 
 	sysconf.sbdn = (sysconf.hcdn[0] & 0xff);
-	sbdn_rs780 = sysconf.sbdn;
-	sbdn_sb700 = 0;
+	sbdn_sr5650 = sysconf.sbdn;
+	sbdn_sp5100 = 0;
 
 	for (i = 0; i < 2; i++) {
-		bus_sb700[i] = 0;
+		bus_sp5100[i] = 0;
+	}
+	for (i = 0; i < ARRAY_SIZE(bus_sr5650); i++) {
+		bus_sr5650[i] = 0;
 	}
-	for (i = 0; i < ARRAY_SIZE(bus_rs780); i++) {
-		bus_rs780[i] = 0;
+
+	for (i = 0; i < 256; i++) {
+		bus_type[i] = 0; /* default ISA bus. */
 	}
 
-	bus_rs780[0] = (sysconf.pci1234[0] >> 16) & 0xff;
-	bus_sb700[0] = bus_rs780[0];
+	bus_type[0] = 1;	/* pci */
+
+	bus_sr5650[0] = (sysconf.pci1234[0] >> 16) & 0xff;
+	bus_sp5100[0] = bus_sr5650[0];
+
+	bus_type[bus_sr5650[0]] = 1;
 
-	/* sb700 */
-	dev = dev_find_slot(bus_sb700[0], PCI_DEVFN(sbdn_sb700 + 0x14, 4));
+	/* sp5100 */
+	dev = dev_find_slot(bus_sp5100[0], PCI_DEVFN(sbdn_sp5100 + 0x14, 4));
 	if (dev) {
-		bus_sb700[1] = pci_read_config8(dev, PCI_SECONDARY_BUS);
+		bus_sp5100[1] = pci_read_config8(dev, PCI_SECONDARY_BUS);
+		bus_isa = pci_read_config8(dev, PCI_SUBORDINATE_BUS);
+		bus_isa++;
+		for (j = bus_sp5100[1]; j < bus_isa; j++)
+			bus_type[j] = 1;
 	}
 
-	/* rs780 */
-	for (i = 1; i < ARRAY_SIZE(bus_rs780); i++) {
-		dev = dev_find_slot(bus_rs780[0], PCI_DEVFN(sbdn_rs780 + i, 0));
+	/* sr5650 */
+	for (i = 1; i < ARRAY_SIZE(bus_sr5650); i++) {
+		dev = dev_find_slot(bus_sr5650[0], PCI_DEVFN(sbdn_sr5650 + i, 0));
 		if (dev) {
-			bus_rs780[i] = pci_read_config8(dev, PCI_SECONDARY_BUS);
+			bus_sr5650[i] = pci_read_config8(dev, PCI_SECONDARY_BUS);
+			if(255 != bus_sr5650[i]) {
+				bus_isa = pci_read_config8(dev, PCI_SUBORDINATE_BUS);
+				bus_isa++;
+				bus_type[bus_sr5650[i]] = 1; /* PCI bus. */
+			}
 		}
 	}
 
 	/* I/O APICs:   APIC ID Version State   Address */
+	bus_isa = 10;
 #if CONFIG_LOGICAL_CPUS==1
 	apicid_base = get_apicid_base(1);
 #else
 	apicid_base = CONFIG_MAX_PHYSICAL_CPUS;
 #endif
-	apicid_sb700 = apicid_base + 0;
+	apicid_sp5100 = apicid_base + 0;
 }

Modified: trunk/src/mainboard/supermicro/h8scm_fam10/irq_tables.c
==============================================================================
--- trunk/src/mainboard/amd/tilapia_fam10/irq_tables.c	Tue Mar 22 14:40:09 2011	(r6459)
+++ trunk/src/mainboard/supermicro/h8scm_fam10/irq_tables.c	Mon Mar 28 06:38:14 2011	(r6466)
@@ -45,9 +45,10 @@
 	pirq_info->slot = slot;
 	pirq_info->rfu = rfu;
 }
+extern u8 bus_isa;
 extern u8 bus_rs780[8];
-extern u8 bus_sb700[2];
-extern unsigned long sbdn_sb700;
+extern u8 bus_sp5100[2];
+extern unsigned long sbdn_sp5100;
 
 unsigned long write_pirq_routing_table(unsigned long addr)
 {
@@ -74,8 +75,8 @@
 	pirq->signature = PIRQ_SIGNATURE;
 	pirq->version = PIRQ_VERSION;
 
-	pirq->rtr_bus = bus_sb700[0];
-	pirq->rtr_devfn = ((sbdn_sb700 + 0x14) << 3) | 4;
+	pirq->rtr_bus = bus_sp5100[0];
+	pirq->rtr_devfn = ((sbdn_sp5100 + 0x14) << 3) | 4;
 
 	pirq->exclusive_irqs = 0;
 
@@ -90,7 +91,7 @@
 	slot_num = 0;
 
 	/* pci bridge */
-	write_pirq_info(pirq_info, bus_sb700[0], ((sbdn_sb700 + 0x14) << 3) | 4,
+	write_pirq_info(pirq_info, bus_sp5100[0], ((sbdn_sp5100 + 0x14) << 3) | 4,
 			0x1, 0xdef8, 0x2, 0xdef8, 0x3, 0xdef8, 0x4, 0xdef8, 0,
 			0);
 	pirq_info++;

Modified: trunk/src/mainboard/supermicro/h8scm_fam10/mainboard.c
==============================================================================
--- trunk/src/mainboard/amd/tilapia_fam10/mainboard.c	Tue Mar 22 14:40:09 2011	(r6459)
+++ trunk/src/mainboard/supermicro/h8scm_fam10/mainboard.c	Mon Mar 28 06:38:14 2011	(r6466)
@@ -26,281 +26,78 @@
 #include <cpu/amd/mtrr.h>
 #include <device/pci_def.h>
 #include <southbridge/amd/sb700/sb700.h>
+#include <southbridge/amd/sr5650/cmn.h>
 #include "chip.h"
 
-#define ADT7461_ADDRESS 0x4C
-#define ARA_ADDRESS     0x0C /* Alert Response Address */
-
-extern int do_smbus_read_byte(u32 smbus_io_base, u32 device, u32 address);
-extern int do_smbus_write_byte(u32 smbus_io_base, u32 device, u32 address,
-			       u8 val);
-
-#define ADT7461_read_byte(address) \
-	do_smbus_read_byte(SMBUS_IO_BASE, ADT7461_ADDRESS, address)
-#define ARA_read_byte(address) \
-	do_smbus_read_byte(SMBUS_IO_BASE, ARA_ADDRESS, address)
-#define ADT7461_write_byte(address, val) \
-	do_smbus_write_byte(SMBUS_IO_BASE, ADT7461_ADDRESS, address, val)
-
 #define SMBUS_IO_BASE 0x6000
 
 uint64_t uma_memory_base, uma_memory_size;
 
-void set_pcie_dereset(void);
 void set_pcie_reset(void);
+void set_pcie_dereset(void);
 u8 is_dev3_present(void);
 
-void set_pcie_dereset()
-{
-	u8 byte;
-	u16 word;
-	device_t sm_dev;
-	/* set 0 to bit1 :disable GPM9 as SLP_S2 output */
-	/* set 0 to bit2 :disable GPM8 as AZ_RST output */
-	byte = pm_ioread(0x8d);
-	byte &= ~((1 << 1) | (1 << 2));
-	pm_iowrite(0x8d, byte);
-
-	/* set the GPM8 and GPM9 output enable and the value to 1 */
-	byte = pm_ioread(0x94);
-	byte &= ~((1 << 2) | (1 << 3));
-	byte |=  ((1 << 0) | (1 << 1));
-	pm_iowrite(0x94, byte);
-
-	/* set the GPIO65 output enable and the value is 1 */
-	sm_dev = dev_find_slot(0, PCI_DEVFN(0x14, 0));
-	word = pci_read_config16(sm_dev, 0x7e);
-	word |= (1 << 0);
-	word &= ~(1 << 4);
-	pci_write_config16(sm_dev, 0x7e, word);
-}
-
-void set_pcie_reset()
-{
-	u8 byte;
-	u16 word;
-	device_t sm_dev;
-
-	/* set 0 to bit1 :disable GPM9 as SLP_S2 output */
-	/* set 0 to bit2 :disable GPM8 as AZ_RST output */
-	byte = pm_ioread(0x8d);
-	byte &= ~((1 << 1) | (1 << 2));
-	pm_iowrite(0x8d, byte);
-
-	/* set the GPM8 and GPM9 output enable and the value to 0 */
-	byte = pm_ioread(0x94);
-	byte &= ~((1 << 2) | (1 << 3));
-	byte &= ~((1 << 0) | (1 << 1));
-	pm_iowrite(0x94, byte);
-
-	/* set the GPIO65 output enable and the value is 0 */
-	sm_dev = dev_find_slot(0, PCI_DEVFN(0x14, 0));
-	word = pci_read_config16(sm_dev, 0x7e);
-	word &= ~(1 << 0);
-	word &= ~(1 << 4);
-	pci_write_config16(sm_dev, 0x7e, word);
-}
-
-#if 0	     /* TODO: */
-/********************************************************
-* tilapia uses SB700 GPIO8 to detect IDE_DMA66.
-* IDE_DMA66 is routed to GPIO 8. So we read Gpio 8 to
-* get the cable type, 40 pin or 80 pin?
-********************************************************/
-static void get_ide_dma66(void)
-{
-	u8 byte;
-	/*u32 sm_dev, ide_dev; */
-	device_t sm_dev, ide_dev;
-
-	sm_dev = dev_find_slot(0, PCI_DEVFN(0x14, 0));
-
-	byte = pci_read_config8(sm_dev, 0xA9);
-	byte |= (1 << 4);	/* Set Gpio8 as input */
-	pci_write_config8(sm_dev, 0xA9, byte);
-
-	ide_dev = dev_find_slot(0, PCI_DEVFN(0x14, 1));
-	byte = pci_read_config8(ide_dev, 0x56);
-	byte &= ~(7 << 0);
-	if ((1 << 4) & pci_read_config8(sm_dev, 0xAA))
-		byte |= 2 << 0;	/* mode 2 */
-	else
-		byte |= 5 << 0;	/* mode 5 */
-	pci_write_config8(ide_dev, 0x56, byte);
-}
-#endif
-
-/*
- * justify the dev3 is exist or not
- */
+/* 780 board use this function*/
 u8 is_dev3_present(void)
 {
-	u16 word;
-	device_t sm_dev;
-
-	/* access the smbus extended register */
-	sm_dev = dev_find_slot(0, PCI_DEVFN(0x14, 0));
-
-	/* put the GPIO68 output to tristate */
-	word = pci_read_config16(sm_dev, 0x7e);
-	word |= 1 << 6;
-	pci_write_config16(sm_dev, 0x7e,word);
-
-	/* read the GPIO68 input status */
-	word = pci_read_config16(sm_dev, 0x7e);
-
-	if(word & (1 << 10)){
-		/*not exist*/
-		return 0;
-	}else{
-		/*exist*/
-		return 1;
-	}
-}
-
-
-/*
- * set gpio40 gfx
- */
-static void set_gpio40_gfx(void)
-{
-	u8 byte;
-	u32 dword;
-	device_t sm_dev;
-	/* disable the GPIO40 as CLKREQ2# function */
-	byte = pm_ioread(0xd3);
-	byte &= ~(1 << 7);
-	pm_iowrite(0xd3, byte);
-
-	/* disable the GPIO40 as CLKREQ3# function */
-	byte = pm_ioread(0xd4);
-	byte &= ~(1 << 0);
-	pm_iowrite(0xd4, byte);
-
-	/* enable pull up for GPIO68 */
-	byte = pm2_ioread(0xf1);
-	byte &=	~(1 << 4);
-	pm2_iowrite(0xf1, byte);
-
-	/* access the smbus extended register */
-	sm_dev = dev_find_slot(0, PCI_DEVFN(0x14, 0));
-
-	/*if the dev3 is present, set the gfx to 2x8 lanes*/
-	/*otherwise set the gfx to 1x16 lanes*/
-	if(is_dev3_present()){
-
-		printk(BIOS_INFO, "Dev3 is present. GFX Configuration is Two x8 slots\n");
-		/* when the gpio40 is configured as GPIO, this will enable the output */
-		pci_write_config32(sm_dev, 0xf8, 0x4);
-		dword = pci_read_config32(sm_dev, 0xfc);
-		dword &= ~(1 << 10);
-
-	        /* When the gpio40 is configured as GPIO, this will represent the output value*/
-		/* 1 :enable two x8  , 0 : master slot enable only */
-		dword |= (1 << 26);
-		pci_write_config32(sm_dev, 0xfc, dword);
-
-	}else{
-		printk(BIOS_INFO, "Dev3 is not present. GFX Configuration is One x16 slot\n");
-		/* when the gpio40 is configured as GPIO, this will enable the output */
-		pci_write_config32(sm_dev, 0xf8, 0x4);
-		dword = pci_read_config32(sm_dev, 0xfc);
-		dword &= ~(1 << 10);
-
-        	/* When the gpio40 is configured as GPIO, this will represent the output value*/
-		/* 1 :enable two x8  , 0 : master slot enable only */
-		dword &=  ~(1 << 26);
-		pci_write_config32(sm_dev, 0xfc, dword);
-	}
+	return 0;
 }
 
 /*
- * set thermal config
- */
-static void set_thermal_config(void)
-{
-	u8 byte;
-	u16 word;
-	device_t sm_dev;
-
-	/* set ADT 7461 */
-	ADT7461_write_byte(0x0B, 0x50);	/* Local Temperature Hight limit */
-	ADT7461_write_byte(0x0C, 0x00);	/* Local Temperature Low limit */
-	ADT7461_write_byte(0x0D, 0x50);	/* External Temperature Hight limit  High Byte */
-	ADT7461_write_byte(0x0E, 0x00);	/* External Temperature Low limit High Byte */
-
-	ADT7461_write_byte(0x19, 0x55);	/* External THERM limit */
-	ADT7461_write_byte(0x20, 0x55);	/* Local THERM limit */
-
-	byte = ADT7461_read_byte(0x02);	/* read status register to clear it */
-	ARA_read_byte(0x05); /* A hardware alert can only be cleared by the master sending an ARA as a read command */
-	printk(BIOS_INFO, "Init adt7461 end , status 0x02 %02x\n", byte);
-
-	/* sb700 settings for thermal config */
-	/* set SB700 GPIO 64 to GPIO with pull-up */
-	byte = pm2_ioread(0x42);
-	byte &= 0x3f;
-	pm2_iowrite(0x42, byte);
-
-	/* set GPIO 64 to input */
-	sm_dev = dev_find_slot(0, PCI_DEVFN(0x14, 0));
-	word = pci_read_config16(sm_dev, 0x56);
-	word |= 1 << 7;
-	pci_write_config16(sm_dev, 0x56, word);
-
-	/* set GPIO 64 internal pull-up */
-	byte = pm2_ioread(0xf0);
-	byte &= 0xee;
-	pm2_iowrite(0xf0, byte);
-
-	/* set Talert to be active low */
-	byte = pm_ioread(0x67);
-	byte &= ~(1 << 5);
-	pm_iowrite(0x67, byte);
-
-	/* set Talert to generate ACPI event */
-	byte = pm_ioread(0x3c);
-	byte &= 0xf3;
-	pm_iowrite(0x3c, byte);
-
-	/* THERMTRIP pin */
-	/* byte = pm_ioread(0x68);
-	 * byte |= 1 << 3;
-	 * pm_iowrite(0x68, byte);
-	 *
-	 * byte = pm_ioread(0x55);
-	 * byte |= 1 << 0;
-	 * pm_iowrite(0x55, byte);
-	 *
-	 * byte = pm_ioread(0x67);
-	 * byte &= ~( 1 << 6);
-	 * pm_iowrite(0x67, byte);
-	 */
+ * TODO: Add the routine info of each PCIE_RESET_L.
+ * TODO: Add the reset of each PCIE_RESET_L.
+ * PCIE_RESET_GPIO1 -> Slot 0
+ * PCIE_RESET_GPIO2 -> On-board NIC Bcm5709
+ * PCIE_RESET_GPIO3 -> TMS
+ * PCIE_RESET_GPIO4 -> Slot 1
+ * PCIE_RESET_GPIO5 -> Slot 2
+ ***/
+void set_pcie_reset(void)
+{
+	device_t pcie_core_dev;
+
+	pcie_core_dev = dev_find_slot(0, PCI_DEVFN(0, 0));
+	set_htiu_enable_bits(pcie_core_dev, 0xA8, 0xFFFFFFFF, 0x28282828);
+	set_htiu_enable_bits(pcie_core_dev, 0xA9, 0x000000FF, 0x00000028);
+}
+
+void set_pcie_dereset(void)
+{
+	device_t pcie_core_dev;
+
+	pcie_core_dev = dev_find_slot(0, PCI_DEVFN(0, 0));
+	set_htiu_enable_bits(pcie_core_dev, 0xA8, 0xFFFFFFFF, 0x6F6F6F6F);
+	set_htiu_enable_bits(pcie_core_dev, 0xA9, 0x000000FF, 0x0000006F);
 }
 
 /*************************************************
-* enable the dedicated function in tilapia board.
-* This function called early than rs780_enable.
+* enable the dedicated function in h8scm board.
+* This function called early than sr5650_enable.
 *************************************************/
-static void tilapia_enable(device_t dev)
+static void h8scm_enable(device_t dev)
 {
-	printk(BIOS_INFO, "Mainboard TILAPIA Enable. dev=0x%p\n", dev);
+	/* Leave it for furture use. */
+	/* struct mainboard_config *mainboard =
+	   (struct mainboard_config *)dev->chip_info; */
+
+	printk(BIOS_INFO, "Mainboard H8SCM Enable. dev=0x%p\n", dev);
 
-#if (CONFIG_GFXUMA == 1)
 	msr_t msr, msr2;
 
 	/* TOP_MEM: the top of DRAM below 4G */
 	msr = rdmsr(TOP_MEM);
-	printk(BIOS_INFO,
-	    "%s, TOP MEM: msr.lo = 0x%08x, msr.hi = 0x%08x\n",
+	printk
+	    (BIOS_INFO, "%s, TOP MEM: msr.lo = 0x%08x, msr.hi = 0x%08x\n",
 	     __func__, msr.lo, msr.hi);
 
 	/* TOP_MEM2: the top of DRAM above 4G */
 	msr2 = rdmsr(TOP_MEM2);
-	printk(BIOS_INFO,
-	    "%s, TOP MEM2: msr2.lo = 0x%08x, msr2.hi = 0x%08x\n",
+	printk
+	    (BIOS_INFO, "%s, TOP MEM2: msr2.lo = 0x%08x, msr2.hi = 0x%08x\n",
 	     __func__, msr2.lo, msr2.hi);
+#if (CONFIG_GFXUMA == 1)
 
+	/* refer to UMA Size Consideration in 780 BDG. */
 	switch (msr.lo) {
 	case 0x10000000:	/* 256M system memory */
 		uma_memory_size = 0x4000000;	/* 64M recommended UMA */
@@ -314,21 +111,16 @@
 		uma_memory_size = 0x10000000;	/* 256M recommended UMA */
 		break;
 	}
-
+#else
+	/* TODO: TOP_MEM2 */
+	uma_memory_size = 0;//0x8000000;	/* 128M recommended UMA */
+#endif
 	uma_memory_base = msr.lo - uma_memory_size;	/* TOP_MEM1 */
 	printk(BIOS_INFO, "%s: uma size 0x%08llx, memory start 0x%08llx\n",
 		    __func__, uma_memory_size, uma_memory_base);
 
-	/* TODO: TOP_MEM2 */
-#else
-	uma_memory_size = 0x8000000;	/* 128M recommended UMA */
-	uma_memory_base = 0x38000000;	/* 1GB  system memory supposed */
-#endif
-
 	set_pcie_dereset();
 	/* get_ide_dma66(); */
-	set_thermal_config();
-	set_gpio40_gfx();
 }
 
 int add_mainboard_resources(struct lb_memory *mem)
@@ -346,6 +138,6 @@
 }
 
 struct chip_operations mainboard_ops = {
-	CHIP_NAME("AMD TILAPIA   Mainboard")
-	.enable_dev = tilapia_enable,
+	CHIP_NAME("AMD H8SCM   Mainboard")
+	.enable_dev = h8scm_enable,
 };

Modified: trunk/src/mainboard/supermicro/h8scm_fam10/mptable.c
==============================================================================
--- trunk/src/mainboard/amd/tilapia_fam10/mptable.c	Tue Mar 22 14:40:09 2011	(r6459)
+++ trunk/src/mainboard/supermicro/h8scm_fam10/mptable.c	Mon Mar 28 06:38:14 2011	(r6466)
@@ -17,6 +17,7 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
+
 #include <console/console.h>
 #include <arch/smp/mpspec.h>
 #include <device/pci.h>
@@ -25,18 +26,20 @@
 #include <stdint.h>
 #include <cpu/amd/amdfam10_sysconf.h>
 
-extern u8 bus_rs780[11];
-extern u8 bus_sb700[2];
+extern u8 bus_sr5650[14];
+extern u8 bus_sp5100[2];
+
+extern u32 apicid_sp5100;
 
-extern u32 apicid_sb700;
+extern u32 sbdn_sr5650;
+extern u32 sbdn_sp5100;
 
-extern u32 sbdn_rs780;
-extern u32 sbdn_sb700;
 
 static void *smp_write_config_table(void *v)
 {
 	struct mp_config_table *mc;
 	int bus_isa;
+	u32 apicid_sr5650;
 
 	mc = (void *)(((char *)v) + SMP_FLOATING_TABLE_LEN);
 
@@ -46,20 +49,21 @@
 
 	get_bus_conf();
 
-	mptable_write_buses(mc, NULL, &bus_isa);
+	apicid_sp5100 = 0x20;
+	apicid_sr5650 = apicid_sp5100 + 1;
 
+	mptable_write_buses(mc, NULL, &bus_isa);
 	/* I/O APICs:   APIC ID Version State   Address */
 	{
 		device_t dev;
 		u32 dword;
 		u8 byte;
 
-		dev =
-		    dev_find_slot(bus_sb700[0],
-				  PCI_DEVFN(sbdn_sb700 + 0x14, 0));
+		dev = dev_find_slot(0, //bus_sp5100[0], TODO: why bus_sp5100[0] use same value of bus_sr5650[0] assigned by get_pci1234(), instead of 0.
+				  PCI_DEVFN(sbdn_sp5100 + 0x14, 0));
 		if (dev) {
 			dword = pci_read_config32(dev, 0x74) & 0xfffffff0;
-			smp_write_ioapic(mc, apicid_sb700, 0x11, dword);
+			smp_write_ioapic(mc, apicid_sp5100, 0x11, dword);
 
 			/* Initialize interrupt mapping */
 			/* aza */
@@ -89,70 +93,80 @@
 			 * 00:14.6: INTB MCI
 			 */
 		}
+		dev = dev_find_slot(0, PCI_DEVFN(0, 0));
+		if (dev) {
+			pci_write_config32(dev, 0xF8, 0x1);
+			dword = pci_read_config32(dev, 0xFC) & 0xfffffff0;
+			smp_write_ioapic(mc, apicid_sp5100+1, 0x11, dword);
+		}
 	}
 
 	/* I/O Ints:    Type    Polarity    Trigger     Bus ID   IRQ    APIC ID PIN# */
 #define IO_LOCAL_INT(type, intr, apicid, pin) \
 	smp_write_lintsrc(mc, (type), MP_IRQ_TRIGGER_EDGE | MP_IRQ_POLARITY_HIGH, bus_isa, (intr), (apicid), (pin));
 
-	mptable_add_isa_interrupts(mc, bus_isa, apicid_sb700, 0);
+	mptable_add_isa_interrupts(mc, bus_isa, apicid_sp5100, 0);
 
 	/* PCI interrupts are level triggered, and are
 	 * associated with a specific bus/device/function tuple.
 	 */
 #if CONFIG_GENERATE_ACPI_TABLES == 0
 #define PCI_INT(bus, dev, fn, pin) \
-        smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, (bus), (((dev)<<2)|(fn)), apicid_sb700, (pin))
+        smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, (bus), (((dev)<<2)|(fn)), apicid_sp5100, (pin))
 #else
 #define PCI_INT(bus, dev, fn, pin)
 #endif
-
 	/* usb */
 	PCI_INT(0x0, 0x12, 0x0, 0x10); /* USB */
 	PCI_INT(0x0, 0x12, 0x1, 0x11);
 	PCI_INT(0x0, 0x13, 0x0, 0x12);
 	PCI_INT(0x0, 0x13, 0x1, 0x13);
-	PCI_INT(0x0, 0x14, 0x0, 0x10);
+	//PCI_INT(0x0, 0x14, 0x0, 0x10);
 
 	/* sata */
 	PCI_INT(0x0, 0x11, 0x0, 0x16);
 
 	/* HD Audio: b0:d20:f1:reg63 should be 0. */
-	/* PCI_INT(0x0, 0x14, 0x2, 0x12); */
+	PCI_INT(0x0, 0x14, 0x2, 0x10);
 
 	/* on board NIC & Slot PCIE.  */
-	/* PCI_INT(bus_rs780[0x1], 0x5, 0x0, 0x12); */
-/* 	PCI_INT(bus_rs780[0x1], 0x5, 0x1, 0x13); */
-	PCI_INT(bus_rs780[0x2], 0x0, 0x0, 0x12); /* Dev 2, external GFX */
-	/* PCI_INT(bus_rs780[0x3], 0x0, 0x0, 0x13); */
-	PCI_INT(bus_rs780[0x4], 0x0, 0x0, 0x10);
 	/* configuration B doesnt need dev 5,6,7 */
 	/*
-	 * PCI_INT(bus_rs780[0x5], 0x0, 0x0, 0x11);
-	 * PCI_INT(bus_rs780[0x6], 0x0, 0x0, 0x12);
-	 * PCI_INT(bus_rs780[0x7], 0x0, 0x0, 0x13);
+	 * PCI_INT(bus_sr5650[0x5], 0x0, 0x0, 0x11);
+	 * PCI_INT(bus_sr5650[0x6], 0x0, 0x0, 0x12);
+	 * PCI_INT(bus_sr5650[0x7], 0x0, 0x0, 0x13);
 	 */
-	PCI_INT(bus_rs780[0x9], 0x0, 0x0, 0x11);
-	PCI_INT(bus_rs780[0xA], 0x0, 0x0, 0x12); /* NIC */
+	smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, 0, (((2)<<2)|(0)), apicid_sp5100+1, 28); /* dev 2 */
+	smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, 0, (((4)<<2)|(0)), apicid_sp5100+1, 28); /* dev 4 */
+	smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, 0, (((12)<<2)|(0)), apicid_sp5100+1, 30); /* dev 11 */
+	smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, 0, (((12)<<2)|(0)), apicid_sp5100+1, 30); /* dev 12 */
+
+	smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, bus_sr5650[2], (((0)<<2)|(0)), apicid_sp5100+1, 0); /* card behind dev2 */
+	smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, bus_sr5650[4], (((0)<<2)|(0)), apicid_sp5100+1, 20);
+	smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, bus_sr5650[4], (((0)<<2)|(1)), apicid_sp5100+1, 21); /* NIC */
+	smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, bus_sr5650[11], (((0)<<2)|(0)), apicid_sp5100+1, 8);
+	smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, bus_sr5650[11], (((0)<<2)|(1)), apicid_sp5100+1, 9); /* card behind dev11 */
+	smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, bus_sr5650[12], (((0)<<2)|(0)), apicid_sp5100+1, 12);
+	smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, bus_sr5650[12], (((0)<<2)|(1)), apicid_sp5100+1, 13); /* card behind dev12 */
 
 	/* PCI slots */
 	/* PCI_SLOT 0. */
-	PCI_INT(bus_sb700[1], 0x5, 0x0, 0x14);
-	PCI_INT(bus_sb700[1], 0x5, 0x1, 0x15);
-	PCI_INT(bus_sb700[1], 0x5, 0x2, 0x16);
-	PCI_INT(bus_sb700[1], 0x5, 0x3, 0x17);
+	PCI_INT(bus_sp5100[1], 0x5, 0x0, 0x14);
+	PCI_INT(bus_sp5100[1], 0x5, 0x1, 0x15);
+	PCI_INT(bus_sp5100[1], 0x5, 0x2, 0x16);
+	PCI_INT(bus_sp5100[1], 0x5, 0x3, 0x17);
 
 	/* PCI_SLOT 1. */
-	PCI_INT(bus_sb700[1], 0x6, 0x0, 0x15);
-	PCI_INT(bus_sb700[1], 0x6, 0x1, 0x16);
-	PCI_INT(bus_sb700[1], 0x6, 0x2, 0x17);
-	PCI_INT(bus_sb700[1], 0x6, 0x3, 0x14);
+	PCI_INT(bus_sp5100[1], 0x6, 0x0, 0x15);
+	PCI_INT(bus_sp5100[1], 0x6, 0x1, 0x16);
+	PCI_INT(bus_sp5100[1], 0x6, 0x2, 0x17);
+	PCI_INT(bus_sp5100[1], 0x6, 0x3, 0x14);
 
 	/* PCI_SLOT 2. */
-	PCI_INT(bus_sb700[1], 0x7, 0x0, 0x16);
-	PCI_INT(bus_sb700[1], 0x7, 0x1, 0x17);
-	PCI_INT(bus_sb700[1], 0x7, 0x2, 0x14);
-	PCI_INT(bus_sb700[1], 0x7, 0x3, 0x15);
+	PCI_INT(bus_sp5100[1], 0x7, 0x0, 0x16);
+	PCI_INT(bus_sp5100[1], 0x7, 0x1, 0x17);
+	PCI_INT(bus_sp5100[1], 0x7, 0x2, 0x14);
+	PCI_INT(bus_sp5100[1], 0x7, 0x3, 0x15);
 
 	/*Local Ints:   Type    Polarity    Trigger     Bus ID   IRQ    APIC ID PIN# */
 	IO_LOCAL_INT(mp_ExtINT, 0x0, MP_APIC_ALL, 0x0);

Modified: trunk/src/mainboard/supermicro/h8scm_fam10/romstage.c
==============================================================================
--- trunk/src/mainboard/amd/tilapia_fam10/romstage.c	Tue Mar 22 14:40:09 2011	(r6459)
+++ trunk/src/mainboard/supermicro/h8scm_fam10/romstage.c	Mon Mar 28 06:38:14 2011	(r6466)
@@ -17,7 +17,7 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
-//#define SYSTEM_TYPE 0	/* SERVER */
+//#define SYSTEM_TYPE 0	/* SERVER */ //FIXME SERVER enable ECC, cause linux hang
 #define SYSTEM_TYPE 1	/* DESKTOP */
 //#define SYSTEM_TYPE 2	/* MOBILE */
 
@@ -42,16 +42,18 @@
 #include "northbridge/amd/amdfam10/reset_test.c"
 #include <console/loglevel.h>
 #include "cpu/x86/bist.h"
-#include "superio/ite/it8718f/early_serial.c"
+#include "superio/nuvoton/wpcm450/early_init.c"
 #include <usbdebug.h>
 #include "cpu/x86/mtrr/earlymtrr.c"
 #include <cpu/amd/mtrr.h>
 #include "northbridge/amd/amdfam10/setup_resource_map.c"
-#include "southbridge/amd/rs780/early_setup.c"
 #include "southbridge/amd/sb700/early_setup.c"
+#include "southbridge/amd/sr5650/early_setup.c"
 #include "northbridge/amd/amdfam10/debug.c"
 
-static void activate_spd_rom(const struct mem_controller *ctrl) { }
+static void activate_spd_rom(const struct mem_controller *ctrl)
+{
+}
 
 static int spd_read_byte(u32 device, u32 address)
 {
@@ -69,16 +71,28 @@
 #if CONFIG_UPDATE_CPU_MICROCODE
 #include "cpu/amd/model_10xxx/update_microcode.c"
 #endif
-
 #include "cpu/amd/model_10xxx/init_cpus.c"
 #include "northbridge/amd/amdfam10/early_ht.c"
 #include <spd.h>
 
+//#include "spd_addr.h"
+
+#define RC00  0
+
+#define DIMM0 0x50
+#define DIMM1 0x51
+#define DIMM2 0x52
+#define DIMM3 0x53
+
 void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
 {
 	struct sys_info *sysinfo = (struct sys_info *)(CONFIG_DCACHE_RAM_BASE + CONFIG_DCACHE_RAM_SIZE - CONFIG_DCACHE_RAM_GLOBAL_VAR_SIZE);
-	static const u8 spd_addr[] = {RC00, DIMM0, DIMM2, 0, 0, DIMM1, DIMM3, 0, 0, };
-	u32 bsp_apicid = 0, val;
+	static const u8 spd_addr[] = {
+				RC00, 0x52,  0x53,  0, 0, 0x50,  0x51,  0, 0,
+				//RC00, DIMM2, DIMM3, 0, 0, DIMM0, DIMM1, 0, 0,
+			};
+	u32 bsp_apicid = 0;
+	u32 val;
 	msr_t msr;
 
 	if (!cpu_init_detectedx && boot_cpu()) {
@@ -87,7 +101,9 @@
 		/* mov bsp to bus 0xff when > 8 nodes */
 		set_bsp_node_CHtExtNodeCfgEn();
 		enumerate_ht_chain();
-		sb700_pci_port80();
+
+		disable_pcie_bridge();
+		sb7xx_51xx_lpc_port80();
 	}
 
 	post_code(0x30);
@@ -99,17 +115,20 @@
 
 	post_code(0x32);
 
-	enable_rs780_dev8();
-	sb700_lpc_init();
+	enable_sr5650_dev8();
+	sb7xx_51xx_lpc_init();
+
+	sb7xx_51xx_enable_wideio(0, 0x1600);
+
+	wpcm450_enable_dev(WPCM450_SP1, 0x164E, CONFIG_TTYS0_BASE);
 
-	it8718f_enable_serial(0, CONFIG_TTYS0_BASE);
+	sb7xx_51xx_disable_wideio(0);
 	uart_init();
 
 #if CONFIG_USBDEBUG
-	sb700_enable_usbdebug(CONFIG_USBDEBUG_DEFAULT_PORT);
+	sb7xx_51xx_enable_usbdebug(CONFIG_USBDEBUG_DEFAULT_PORT);
 	early_usbdebug_init();
 #endif
-
 	console_init();
 	printk(BIOS_DEBUG, "\n");
 
@@ -136,6 +155,8 @@
 	cpuSetAMDMSR();
 	post_code(0x34);
 
+	/* TODO: The Kernel must support 12 processor, otherwise the interrupt
+	 * can not work correctly. */
 	amd_ht_init(sysinfo);
 	post_code(0x35);
 
@@ -165,8 +186,9 @@
 	post_code(0x38);
 
 	/* run _early_setup before soft-reset. */
-	rs780_early_setup();
-	sb700_early_setup();
+	sr5650_early_setup();
+	disable_pcie_bridge();
+	sb7xx_51xx_early_setup();
 
 #if CONFIG_SET_FIDVID
 	msr = rdmsr(0xc0010071);
@@ -191,7 +213,7 @@
 	printk(BIOS_DEBUG, "End FIDVIDMSR 0xc0010071 0x%08x 0x%08x \n", msr.hi, msr.lo);
 #endif
 
-	rs780_htinit();
+	sr5650_htinit();
 
 	/* Reset for HT, FIDVID, PLL and errata changes to take affect. */
 	if (!warm_reset_detect(0)) {
@@ -208,7 +230,6 @@
 
 	post_code(0x40);
 
-//	die("Die Before MCT init.");
 
 	printk(BIOS_DEBUG, "raminit_amdmct()\n");
 	raminit_amdmct(sysinfo);
@@ -221,13 +242,15 @@
 	dump_pci_device_range(PCI_DEV(0, 0x18, 3), 0, 0x200);
 */
 
+//	ram_check(0x00200000, 0x00200000 + (640 * 1024));
+//	ram_check(0x40200000, 0x40200000 + (640 * 1024));
+
 //	die("After MCT init before CAR disabled.");
 
-	rs780_before_pci_init();
-	sb700_before_pci_init();
+	sr5650_before_pci_init();
+	sb7xx_51xx_before_pci_init();
 
 	post_code(0x42);
-	printk(BIOS_DEBUG, "\n*** Yes, the copy/decompress is taking a while, FIXME!\n");
 	post_cache_as_ram();	// BSP switch stack to ram, copy then execute LB.
 	post_code(0x43);	// Should never see this post code.
 }




More information about the coreboot mailing list