Author: yhlu
Date: 2006-10-05 01:57:49 +0200 (Thu, 05 Oct 2006)
New Revision: 2442
Modified:
trunk/LinuxBIOSv2/src/mainboard/broadcom/blast/cache_as_ram_auto.c
trunk/LinuxBIOSv2/src/mainboard/broadcom/blast/cmos.layout
trunk/LinuxBIOSv2/src/mainboard/broadcom/blast/get_bus_conf.c
trunk/LinuxBIOSv2/src/mainboard/broadcom/blast/irq_tables.c
trunk/LinuxBIOSv2/src/mainboard/broadcom/blast/mptable.c
trunk/LinuxBIOSv2/src/mainboard/tyan/s2881/Options.lb
trunk/LinuxBIOSv2/src/mainboard/tyan/s2881/auto.c
trunk/LinuxBIOSv2/src/mainboard/tyan/s2881/cache_as_ram_auto.c
trunk/LinuxBIOSv2/src/mainboard/tyan/s2881/cmos.layout
trunk/LinuxBIOSv2/src/mainboard/tyan/s2881/get_bus_conf.c
trunk/LinuxBIOSv2/src/mainboard/tyan/s2881/irq_tables.c
trunk/LinuxBIOSv2/src/mainboard/tyan/s2881/mptable.c
trunk/LinuxBIOSv2/src/mainboard/tyan/s2885/Options.lb
trunk/LinuxBIOSv2/src/mainboard/tyan/s2885/auto.c
trunk/LinuxBIOSv2/src/mainboard/tyan/s2885/cache_as_ram_auto.c
trunk/LinuxBIOSv2/src/mainboard/tyan/s2885/cmos.layout
trunk/LinuxBIOSv2/src/mainboard/tyan/s2885/get_bus_conf.c
trunk/LinuxBIOSv2/src/mainboard/tyan/s2885/irq_tables.c
trunk/LinuxBIOSv2/src/mainboard/tyan/s2885/mptable.c
trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/Config.lb
trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/Options.lb
trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/auto.c
trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/cache_as_ram_auto.c
trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/cmos.layout
trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/get_bus_conf.c
trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/irq_tables.c
trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/mptable.c
trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/resourcemap.c
trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/Config.lb
trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/Options.lb
trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/auto.c
trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/cache_as_ram_auto.c
trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/cmos.layout
trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/get_bus_conf.c
trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/irq_tables.c
trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/mptable.c
trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/resourcemap.c
trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/Config.lb
trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/Options.lb
trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/auto.c
trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/cache_as_ram_auto.c
trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/cmos.layout
trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/get_bus_conf.c
trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/irq_tables.c
trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/mptable.c
trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/resourcemap.c
trunk/LinuxBIOSv2/targets/tyan/s2895/Config.lb
Log:
get_bus_cong using sysconf instead
Modified: trunk/LinuxBIOSv2/src/mainboard/broadcom/blast/cache_as_ram_auto.c
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/broadcom/blast/cache_as_ram_auto.c 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/broadcom/blast/cache_as_ram_auto.c 2006-10-04 23:57:49 UTC (rev 2442)
@@ -4,7 +4,7 @@
//#define K8_SCAN_PCI_BUS 1
-#define K8_4RANK_DIMM_SUPPORT 1
+#define QRANK_DIMM_SUPPORT 1
#if CONFIG_LOGICAL_CPUS==1
#define SET_NB_CFG_54 1
Modified: trunk/LinuxBIOSv2/src/mainboard/broadcom/blast/cmos.layout
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/broadcom/blast/cmos.layout 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/broadcom/blast/cmos.layout 2006-10-04 23:57:49 UTC (rev 2442)
@@ -78,10 +78,10 @@
7 9 Fallback_HDD
7 10 Fallback_Floppy
#7 3 ROM
-8 0 DDR400
-8 1 DDR333
-8 2 DDR266
-8 3 DDR200
+8 0 200Mhz
+8 1 166Mhz
+8 2 133Mhz
+8 3 100Mhz
9 0 off
9 1 87.5%
9 2 75.0%
Modified: trunk/LinuxBIOSv2/src/mainboard/broadcom/blast/get_bus_conf.c
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/broadcom/blast/get_bus_conf.c 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/broadcom/blast/get_bus_conf.c 2006-10-04 23:57:49 UTC (rev 2442)
@@ -7,10 +7,22 @@
#include <cpu/amd/dualcore.h>
#endif
-unsigned sblk;
-unsigned pci1234[] =
+#include <cpu/amd/amdk8_sysconf.h>
+
+
+// Global variables for MB layouts and these will be shared by irqtable mptable and acpi_tables
+//busnum is default
+unsigned char bus_isa = 10;
+unsigned char bus_bcm5780[7];
+unsigned char bus_bcm5785_0 = 1;
+unsigned char bus_bcm5785_1 = 8;
+unsigned char bus_bcm5785_1_1 = 9;
+unsigned apicid_bcm5785[3];
+
+
+unsigned pci1234x[] =
{ //Here you only need to set value in pci1234 for HT-IO that could be installed or not
- //You may need to preset pci1234 for HTIO board, please refer to src/northbridge/amd/amdk8/get_sblk_pci1234.c for detail
+ //You may need to preset pci1234 for HTIO board, please refer to src/northbridge/amd/amdk8/get_sblk_pci1234.c for detail
0x0000ff0,
// 0x0000ff0,
// 0x0000ff0,
@@ -20,9 +32,7 @@
// 0x0000ff0,
// 0x0000ff0
};
-unsigned hc_possible_num;
-unsigned sbdn;
-unsigned hcdn[] =
+unsigned hcdnx[] =
{ //HT Chain device num, actually it is unit id base of every ht device in chain, assume every chain only have 4 ht device at most
0x20202020,
// 0x20202020,
@@ -33,16 +43,6 @@
// 0x20202020,
// 0x20202020,
};
-
-// Global variables for MB layouts and these will be shared by irqtable mptable and acpi_tables
-//busnum is default
-unsigned char bus_isa = 10;
-unsigned char bus_bcm5780[7];
-unsigned char bus_bcm5785_0 = 1;
-unsigned char bus_bcm5785_1 = 8;
-unsigned char bus_bcm5785_1_1 = 9;
-unsigned apicid_bcm5785[3];
-
unsigned sbdn2;
extern void get_sblk_pci1234(void);
@@ -61,18 +61,22 @@
get_bus_conf_done = 1;
- hc_possible_num = sizeof(pci1234)/sizeof(pci1234[0]);
+ sysconf.hc_possible_num = sizeof(pci1234x)/sizeof(pci1234x[0]);
+ for(i=0;i<sysconf.hc_possible_num; i++) {
+ sysconf.pci1234[i] = pci1234x[i];
+ sysconf.hcdn[i] = hcdnx[i];
+ }
get_sblk_pci1234();
- sbdn = (hcdn[0] >> 8) & 0xff;
- sbdn2 = hcdn[0] & 0xff; // bcm5780
+ sysconf.sbdn = (sysconf.hcdn[0] >> 8) & 0xff;
+ sbdn2 = sysconf.hcdn[0] & 0xff; // bcm5780
- bus_bcm5785_0 = (pci1234[0] >> 16) & 0xff;
+ bus_bcm5785_0 = (sysconf.pci1234[0] >> 16) & 0xff;
bus_bcm5780[0] = bus_bcm5785_0;
/* bcm5785 */
- dev = dev_find_slot(bus_bcm5785_0, PCI_DEVFN(sbdn,0));
+ dev = dev_find_slot(bus_bcm5785_0, PCI_DEVFN(sysconf.sbdn,0));
if (dev) {
bus_bcm5785_1 = pci_read_config8(dev, PCI_SECONDARY_BUS);
dev = dev_find_slot(bus_bcm5785_1, PCI_DEVFN(0x0d,0));
Modified: trunk/LinuxBIOSv2/src/mainboard/broadcom/blast/irq_tables.c
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/broadcom/blast/irq_tables.c 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/broadcom/blast/irq_tables.c 2006-10-04 23:57:49 UTC (rev 2442)
@@ -10,9 +10,7 @@
#include <stdint.h>
#include <arch/pirq_routing.h>
-extern unsigned pci1234[];
-extern unsigned sbdn;
-extern unsigned hcdn[];
+#include <cpu/amd/amdk8_sysconf.h>
static void write_pirq_info(struct irq_info *pirq_info, uint8_t bus, uint8_t devfn, uint8_t link0, uint16_t bitmap0,
uint8_t link1, uint16_t bitmap1, uint8_t link2, uint16_t bitmap2,uint8_t link3, uint16_t bitmap3,
@@ -71,7 +69,7 @@
pirq->version = PIRQ_VERSION;
pirq->rtr_bus = bus_bcm5785_0;
- pirq->rtr_devfn = (sbdn<<3)|0;
+ pirq->rtr_devfn = (sysconf.sbdn<<3)|0;
pirq->exclusive_irqs = 0;
@@ -87,7 +85,7 @@
pirq_info = (void *) ( &pirq->checksum + 1);
slot_num = 0;
//pci bridge
- write_pirq_info(pirq_info, bus_bcm5785_0, (sbdn<<3)|0, 0x1, 0xdef8, 0x2, 0xdef8, 0x3, 0xdef8, 0x4, 0xdef8, 0, 0);
+ write_pirq_info(pirq_info, bus_bcm5785_0, (sysconf.sbdn<<3)|0, 0x1, 0xdef8, 0x2, 0xdef8, 0x3, 0xdef8, 0x4, 0xdef8, 0, 0);
pirq_info++; slot_num++;
pirq->size = 32 + 16 * slot_num;
Modified: trunk/LinuxBIOSv2/src/mainboard/broadcom/blast/mptable.c
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/broadcom/blast/mptable.c 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/broadcom/blast/mptable.c 2006-10-04 23:57:49 UTC (rev 2442)
@@ -8,9 +8,7 @@
#include <cpu/amd/dualcore.h>
#endif
-extern unsigned pci1234[];
-extern unsigned sbdn;
-extern unsigned hcdn[];
+#include <cpu/amd/amdk8_sysconf.h>
extern unsigned char bus_isa;
extern unsigned char bus_bcm5780[7];
@@ -95,7 +93,7 @@
//IDE
outb(0x02, 0xc00); outb(0x0e, 0xc01);
- smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_EDGE|MP_IRQ_POLARITY_HIGH, bus_bcm5785_0, ((1+sbdn)<<2)|1, apicid_bcm5785[0], 0xe); // IDE
+ smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_EDGE|MP_IRQ_POLARITY_HIGH, bus_bcm5785_0, ((1+sysconf.sbdn)<<2)|1, apicid_bcm5785[0], 0xe); // IDE
//SATA
outb(0x07, 0xc00); outb(0x0f, 0xc01);
@@ -104,7 +102,7 @@
//USB
outb(0x01, 0xc00); outb(0x0a, 0xc01);
for(i=0;i<3;i++) {
- smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, bus_bcm5785_0, ((2+sbdn)<<2)|i, apicid_bcm5785[0], 0xa); //
+ smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, bus_bcm5785_0, ((2+sysconf.sbdn)<<2)|i, apicid_bcm5785[0], 0xa); //
}
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2881/Options.lb
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2881/Options.lb 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2881/Options.lb 2006-10-04 23:57:49 UTC (rev 2442)
@@ -54,6 +54,11 @@
uses CONFIG_PCI_ROM_RUN
uses HW_MEM_HOLE_SIZEK
+uses HT_CHAIN_UNITID_BASE
+uses HT_CHAIN_END_UNITID_BASE
+uses SB_HT_CHAIN_ON_BUS0
+uses SB_HT_CHAIN_UNITID_OFFSET_ONLY
+
uses USE_DCACHE_RAM
uses DCACHE_RAM_BASE
uses DCACHE_RAM_SIZE
@@ -121,6 +126,18 @@
#CHIP_NAME ?
default CONFIG_CHIP_NAME=1
+##HT Unit ID offset, default is 1, the typical one
+default HT_CHAIN_UNITID_BASE=0x0a
+
+##real SB Unit ID, default is 0x20, mean dont touch it at last
+default HT_CHAIN_END_UNITID_BASE=0x06
+
+#make the SB HT chain on bus 0, default is not (0)
+default SB_HT_CHAIN_ON_BUS0=0
+
+##only offset for SB chain?, default is yes(1)
+#default SB_HT_CHAIN_UNITID_OFFSET_ONLY=0
+
#1G memory hole
default HW_MEM_HOLE_SIZEK=0x100000
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2881/auto.c
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2881/auto.c 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2881/auto.c 2006-10-04 23:57:49 UTC (rev 2442)
@@ -20,7 +20,7 @@
#include "cpu/x86/lapic/boot_cpu.c"
#include "northbridge/amd/amdk8/reset_test.c"
#include "northbridge/amd/amdk8/debug.c"
-#include <cpu/amd/model_fxx_rev.h>
+#include "northbridge/amd/amdk8/cpu_rev.c"
#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
#include "cpu/amd/mtrr/amd_earlymtrr.c"
#include "cpu/x86/bist.h"
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2881/cache_as_ram_auto.c
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2881/cache_as_ram_auto.c 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2881/cache_as_ram_auto.c 2006-10-04 23:57:49 UTC (rev 2442)
@@ -1,7 +1,7 @@
#define ASSEMBLY 1
#define __ROMCC__
-#define K8_4RANK_DIMM_SUPPORT 1
+#define QRANK_DIMM_SUPPORT 1
#if CONFIG_LOGICAL_CPUS==1
#define SET_NB_CFG_54 1
@@ -19,7 +19,19 @@
#include "arch/i386/lib/console.c"
#include "ram/ramtest.c"
+#if 0
+static void post_code(uint8_t value) {
+#if 1
+ int i;
+ for(i=0;i<0x80000;i++) {
+ outb(value, 0x80);
+ }
+#endif
+}
+#endif
+
#include <cpu/amd/model_fxx_rev.h>
+
#include "northbridge/amd/amdk8/incoherent_ht.c"
#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
#include "northbridge/amd/amdk8/raminit.h"
@@ -113,9 +125,11 @@
enumerate_ht_chain();
+ /* Setup the ck804 */
amd8111_enable_rom();
/* Is this a deliberate reset by the bios */
+// post_code(0x22);
if (bios_reset_detected() && last_boot_normal_x) {
goto normal_image;
}
@@ -127,12 +141,14 @@
goto fallback_image;
}
normal_image:
+// post_code(0x23);
__asm__ volatile ("jmp __normal_image"
: /* outputs */
: "a" (bist), "b" (cpu_init_detectedx) /* inputs */
);
fallback_image:
+// post_code(0x25);
;
}
#endif
@@ -170,6 +186,7 @@
bsp_apicid = init_cpus(cpu_init_detectedx);
}
+// post_code(0x32);
w83627hf_enable_serial(SERIAL_DEV, TTYS0_BASE);
uart_init();
@@ -179,6 +196,10 @@
report_bist_failure(bist);
setup_s2881_resource_map();
+#if 0
+ dump_pci_device(PCI_DEV(0, 0x18, 0));
+ dump_pci_device(PCI_DEV(0, 0x19, 0));
+#endif
needs_reset = setup_coherent_ht_domain();
@@ -197,6 +218,12 @@
}
enable_smbus();
+#if 0
+ dump_spd_registers(&cpu[0]);
+#endif
+#if 0
+ dump_smbus_registers();
+#endif
allow_all_aps_stop(bsp_apicid);
@@ -207,6 +234,9 @@
memreset_setup();
sdram_initialize(nodes, ctrl);
+#if 0
+ dump_pci_devices();
+#endif
post_cache_as_ram();
}
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2881/cmos.layout
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2881/cmos.layout 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2881/cmos.layout 2006-10-04 23:57:49 UTC (rev 2442)
@@ -78,10 +78,10 @@
7 9 Fallback_HDD
7 10 Fallback_Floppy
#7 3 ROM
-8 0 DDR400
-8 1 DDR333
-8 2 DDR266
-8 3 DDR200
+8 0 200Mhz
+8 1 166Mhz
+8 2 133Mhz
+8 3 100Mhz
9 0 off
9 1 87.5%
9 2 75.0%
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2881/get_bus_conf.c
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2881/get_bus_conf.c 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2881/get_bus_conf.c 2006-10-04 23:57:49 UTC (rev 2442)
@@ -7,7 +7,9 @@
#include <cpu/amd/dualcore.h>
#endif
+#include <cpu/amd/amdk8_sysconf.h>
+
// Global variables for MB layouts and these will be shared by irqtable mptable and acpi_tables
//busnum is default
unsigned char bus_isa = 5 ;
@@ -20,8 +22,7 @@
unsigned apicid_8131_1;
unsigned apicid_8131_2;
-unsigned sblk;
-unsigned pci1234[] =
+unsigned pci1234x[] =
{ //Here you only need to set value in pci1234 for HT-IO that could be installed or not
//You may need to preset pci1234 for HTIO board, please refer to src/northbridge/amd/amdk8/get_sblk_pci1234.c for detail
0x0000ff0,
@@ -33,9 +34,7 @@
// 0x0000ff0,
// 0x0000ff0
};
-unsigned hc_possible_num;
-unsigned sbdn;
-unsigned hcdn[] =
+unsigned hcdnx[] =
{ //HT Chain device num, actually it is unit id base of every ht device in chain, assume every chain only have 4 ht device at most
0x20202020,
// 0x20202020,
@@ -58,23 +57,28 @@
unsigned apicid_base;
device_t dev;
+ int i;
- if(get_bus_conf_done==1) return; //do it only once
+ if(get_bus_conf_done==1) return; //do it only once
- get_bus_conf_done = 1;
+ get_bus_conf_done = 1;
- hc_possible_num = sizeof(pci1234)/sizeof(pci1234[0]);
+ sysconf.hc_possible_num = sizeof(pci1234x)/sizeof(pci1234x[0]);
+ for(i=0;i<sysconf.hc_possible_num; i++) {
+ sysconf.pci1234[i] = pci1234x[i];
+ sysconf.hcdn[i] = hcdnx[i];
+ }
+
+ get_sblk_pci1234();
- get_sblk_pci1234();
-
- sbdn = (hcdn[0] >> 8) & 0xff;
- sbdn3 = hcdn[0] & 0xff;
+ sysconf.sbdn = (sysconf.hcdn[0] >> 8) & 0xff;
+ sbdn3 = sysconf.hcdn[0] & 0xff;
- bus_8131_0 = (pci1234[0] >> 16) & 0xff;
+ bus_8131_0 = (sysconf.pci1234[0] >> 16) & 0xff;
bus_8111_0 = bus_8131_0;
/* 8111 */
- dev = dev_find_slot(bus_8111_0, PCI_DEVFN(sbdn,0));
+ dev = dev_find_slot(bus_8111_0, PCI_DEVFN(sysconf.sbdn,0));
if (dev) {
bus_8111_1 = pci_read_config8(dev, PCI_SECONDARY_BUS);
#if HT_CHAIN_END_UNITID_BASE >= HT_CHAIN_UNITID_BASE
@@ -91,11 +95,6 @@
dev = dev_find_slot(bus_8131_0, PCI_DEVFN(sbdn3,0));
if (dev) {
bus_8131_1 = pci_read_config8(dev, PCI_SECONDARY_BUS);
-#if HT_CHAIN_END_UNITID_BASE < HT_CHAIN_UNITID_BASE
- bus_isa = pci_read_config8(dev, PCI_SUBORDINATE_BUS);
- bus_isa++;
-// printk_debug("bus_isa=%d\n",bus_isa);
-#endif
}
else {
printk_debug("ERROR - could not find PCI %02x:01.0, using defaults\n", bus_8131_0);
@@ -105,6 +104,11 @@
dev = dev_find_slot(bus_8131_0, PCI_DEVFN(sbdn3+1,0));
if (dev) {
bus_8131_2 = pci_read_config8(dev, PCI_SECONDARY_BUS);
+#if HT_CHAIN_END_UNITID_BASE < HT_CHAIN_UNITID_BASE
+ bus_isa = pci_read_config8(dev, PCI_SUBORDINATE_BUS);
+ bus_isa++;
+// printk_debug("bus_isa=%d\n",bus_isa);
+#endif
}
else {
printk_debug("ERROR - could not find PCI %02x:02.0, using defaults\n", bus_8131_0);
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2881/irq_tables.c
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2881/irq_tables.c 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2881/irq_tables.c 2006-10-04 23:57:49 UTC (rev 2442)
@@ -10,6 +10,8 @@
#include <stdint.h>
#include <arch/pirq_routing.h>
+#include <cpu/amd/amdk8_sysconf.h>
+
static void write_pirq_info(struct irq_info *pirq_info, uint8_t bus, uint8_t devfn, uint8_t link0, uint16_t bitmap0,
uint8_t link1, uint16_t bitmap1, uint8_t link2, uint16_t bitmap2,uint8_t link3, uint16_t bitmap3,
uint8_t slot, uint8_t rfu)
@@ -34,8 +36,6 @@
extern unsigned char bus_8111_0;
extern unsigned char bus_8111_1;
-extern unsigned sbdn;
-extern unsigned hcdn[];
extern unsigned sbdn3;
extern void get_bus_conf(void);
@@ -67,7 +67,7 @@
pirq->version = PIRQ_VERSION;
pirq->rtr_bus = bus_8111_0;
- pirq->rtr_devfn = ((sbdn+1)<<3)|0;
+ pirq->rtr_devfn = ((sysconf.sbdn+1)<<3)|0;
pirq->exclusive_irqs = 0;
@@ -81,7 +81,7 @@
pirq_info = (void *) ( &pirq->checksum + 1);
slot_num = 0;
//pci bridge
- write_pirq_info(pirq_info, bus_8111_0, ((sbdn+1)<<3)|0, 0x1, 0xdef8, 0x2, 0xdef8, 0x3, 0xdef8, 0x4, 0xdef8, 0, 0);
+ write_pirq_info(pirq_info, bus_8111_0, ((sysconf.sbdn+1)<<3)|0, 0x1, 0xdef8, 0x2, 0xdef8, 0x3, 0xdef8, 0x4, 0xdef8, 0, 0);
pirq_info++; slot_num++;
//pcix bridge
// write_pirq_info(pirq_info, bus_8131_0, (sbdn3<<3)|0, 0x1, 0xdef8, 0x2, 0xdef8, 0x3, 0xdef8, 0x4, 0xdef8, 0, 0);
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2881/mptable.c
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2881/mptable.c 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2881/mptable.c 2006-10-04 23:57:49 UTC (rev 2442)
@@ -4,6 +4,8 @@
#include <string.h>
#include <stdint.h>
+#include <cpu/amd/amdk8_sysconf.h>
+
extern unsigned char bus_isa;
extern unsigned char bus_8131_0;
extern unsigned char bus_8131_1;
@@ -14,14 +16,10 @@
extern unsigned apicid_8131_1;
extern unsigned apicid_8131_2;
-extern unsigned sbdn;
-extern unsigned hcdn[];
extern unsigned sbdn3;
extern void get_bus_conf(void);
-
-
void *smp_write_config_table(void *v)
{
static const char sig[4] = "PCMP";
@@ -100,7 +98,7 @@
smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_EDGE|MP_IRQ_POLARITY_HIGH, bus_isa, 0xf, apicid_8111, 0xf);
//8111 LPC ????
- smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, bus_8111_0, ((sbdn+1)<<2)|0, apicid_8111, 0x13);
+ smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, bus_8111_0, ((sysconf.sbdn+1)<<2)|0, apicid_8111, 0x13);
//On Board AMD USB ???
smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, bus_8111_1, (0<<2)|3, apicid_8111, 0x13);
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2885/Options.lb
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2885/Options.lb 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2885/Options.lb 2006-10-04 23:57:49 UTC (rev 2442)
@@ -63,6 +63,13 @@
uses APIC_ID_OFFSET
uses LIFT_BSP_APIC_ID
+uses HT_CHAIN_UNITID_BASE
+uses HT_CHAIN_END_UNITID_BASE
+uses SB_HT_CHAIN_ON_BUS0
+uses SB_HT_CHAIN_UNITID_OFFSET_ONLY
+
+uses CONFIG_LB_MEM_TOPK
+
###
### Build options
###
@@ -125,6 +132,18 @@
#CHIP_NAME ?
default CONFIG_CHIP_NAME=1
+##HT Unit ID offset, default is 1, the typical one
+default HT_CHAIN_UNITID_BASE=0x0a
+
+##real SB Unit ID, default is 0x20, mean dont touch it at last
+default HT_CHAIN_END_UNITID_BASE=0x06
+
+#make the SB HT chain on bus 0, default is not (0)
+default SB_HT_CHAIN_ON_BUS0=2
+
+##only offset for SB chain?, default is yes(1)
+#default SB_HT_CHAIN_UNITID_OFFSET_ONLY=0
+
#1G memory hole
default HW_MEM_HOLE_SIZEK=0x100000
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2885/auto.c
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2885/auto.c 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2885/auto.c 2006-10-04 23:57:49 UTC (rev 2442)
@@ -19,7 +19,7 @@
#include "northbridge/amd/amdk8/reset_test.c"
#include "northbridge/amd/amdk8/debug.c"
#include "northbridge/amd/amdk8/incoherent_ht.c"
-#include <cpu/amd/model_fxx_rev.h>
+#include "northbridge/amd/amdk8/cpu_rev.c"
#include "superio/winbond/w83627hf/w83627hf_early_serial.c"
#include "cpu/amd/mtrr/amd_earlymtrr.c"
#include "cpu/x86/bist.h"
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2885/cache_as_ram_auto.c
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2885/cache_as_ram_auto.c 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2885/cache_as_ram_auto.c 2006-10-04 23:57:49 UTC (rev 2442)
@@ -13,7 +13,19 @@
#include "arch/i386/lib/console.c"
#include "ram/ramtest.c"
+#if 0
+static void post_code(uint8_t value) {
+#if 1
+ int i;
+ for(i=0;i<0x80000;i++) {
+ outb(value, 0x80);
+ }
+#endif
+}
+#endif
+
#include <cpu/amd/model_fxx_rev.h>
+
#include "northbridge/amd/amdk8/incoherent_ht.c"
#include "southbridge/amd/amd8111/amd8111_early_smbus.c"
#include "northbridge/amd/amdk8/raminit.h"
@@ -68,7 +80,7 @@
return smbus_read_byte(device, address);
}
-#define K8_4RANK_DIMM_SUPPORT 1
+#define QRANK_DIMM_SUPPORT 1
#include "northbridge/amd/amdk8/raminit.c"
#include "northbridge/amd/amdk8/coherent_ht.c"
@@ -113,9 +125,11 @@
enumerate_ht_chain();
+ /* Setup the ck804 */
amd8111_enable_rom();
/* Is this a deliberate reset by the bios */
+// post_code(0x22);
if (bios_reset_detected() && last_boot_normal_x) {
goto normal_image;
}
@@ -127,12 +141,14 @@
goto fallback_image;
}
normal_image:
+// post_code(0x23);
__asm__ volatile ("jmp __normal_image"
: /* outputs */
: "a" (bist), "b" (cpu_init_detectedx) /* inputs */
);
fallback_image:
+// post_code(0x25);
;
}
#endif
@@ -170,15 +186,22 @@
bsp_apicid = init_cpus(cpu_init_detectedx);
}
+// post_code(0x32);
w83627hf_enable_serial(SERIAL_DEV, TTYS0_BASE);
uart_init();
console_init();
+// dump_mem(DCACHE_RAM_BASE+DCACHE_RAM_SIZE-0x200, DCACHE_RAM_BASE+DCACHE_RAM_SIZE);
+
/* Halt if there was a built in self test failure */
report_bist_failure(bist);
setup_s2885_resource_map();
+#if 0
+ dump_pci_device(PCI_DEV(0, 0x18, 0));
+ dump_pci_device(PCI_DEV(0, 0x19, 0));
+#endif
needs_reset = setup_coherent_ht_domain();
@@ -188,7 +211,7 @@
start_other_cores();
wait_all_other_cores_started(bsp_apicid);
#endif
-
+
needs_reset |= ht_setup_chains_x();
if (needs_reset) {
@@ -208,6 +231,10 @@
memreset_setup();
sdram_initialize(nodes, ctrl);
+#if 0
+ dump_pci_devices();
+#endif
+
post_cache_as_ram();
}
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2885/cmos.layout
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2885/cmos.layout 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2885/cmos.layout 2006-10-04 23:57:49 UTC (rev 2442)
@@ -78,10 +78,10 @@
7 9 Fallback_HDD
7 10 Fallback_Floppy
#7 3 ROM
-8 0 DDR400
-8 1 DDR333
-8 2 DDR266
-8 3 DDR200
+8 0 200Mhz
+8 1 166Mhz
+8 2 133Mhz
+8 3 100Mhz
9 0 off
9 1 87.5%
9 2 75.0%
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2885/get_bus_conf.c
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2885/get_bus_conf.c 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2885/get_bus_conf.c 2006-10-04 23:57:49 UTC (rev 2442)
@@ -7,6 +7,7 @@
#include <cpu/amd/dualcore.h>
#endif
+#include <cpu/amd/amdk8_sysconf.h>
// Global variables for MB layouts and these will be shared by irqtable mptable and acpi_tables
//busnum is default
@@ -22,8 +23,7 @@
unsigned apicid_8131_1;
unsigned apicid_8131_2;
-unsigned sblk;
-unsigned pci1234[] =
+unsigned pci1234x[] =
{ //Here you only need to set value in pci1234 for HT-IO that could be installed or not
//You may need to preset pci1234 for HTIO board, please refer to src/northbridge/amd/amdk8/get_sblk_pci1234.c for detail
0x0000ff0,
@@ -35,9 +35,7 @@
// 0x0000ff0,
// 0x0000ff0
};
-unsigned hc_possible_num;
-unsigned sbdn;
-unsigned hcdn[] =
+unsigned hcdnx[] =
{ //HT Chain device num, actually it is unit id base of every ht device in chain, assume every chain only have 4 ht device at most
0x20202020,
0x20202020,
@@ -61,24 +59,29 @@
unsigned apicid_base;
device_t dev;
+ int i;
- if(get_bus_conf_done==1) return; //do it only once
+ if(get_bus_conf_done==1) return; //do it only once
- get_bus_conf_done = 1;
+ get_bus_conf_done = 1;
- hc_possible_num = sizeof(pci1234)/sizeof(pci1234[0]);
+ sysconf.hc_possible_num = sizeof(pci1234x)/sizeof(pci1234x[0]);
+ for(i=0;i<sysconf.hc_possible_num; i++) {
+ sysconf.pci1234[i] = pci1234x[i];
+ sysconf.hcdn[i] = hcdnx[i];
+ }
+
+ get_sblk_pci1234();
- get_sblk_pci1234();
-
- sbdn = (hcdn[0] >> 8) & 0xff;
- sbdn3 = hcdn[0] & 0xff;
- sbdn5 = hcdn[1] & 0xff;
+ sysconf.sbdn = (sysconf.hcdn[0] >> 8) & 0xff;
+ sbdn3 = sysconf.hcdn[0] & 0xff;
+ sbdn5 = sysconf.hcdn[1] & 0xff;
- bus_8131_0 = (pci1234[0] >> 16) & 0xff;
+ bus_8131_0 = (sysconf.pci1234[0] >> 16) & 0xff;
bus_8111_0 = bus_8131_0;
/* 8111 */
- dev = dev_find_slot(bus_8111_0, PCI_DEVFN(sbdn,0));
+ dev = dev_find_slot(bus_8111_0, PCI_DEVFN(sysconf.sbdn,0));
if (dev) {
bus_8111_1 = pci_read_config8(dev, PCI_SECONDARY_BUS);
#if HT_CHAIN_END_UNITID_BASE >= HT_CHAIN_UNITID_BASE
@@ -95,11 +98,6 @@
dev = dev_find_slot(bus_8131_0, PCI_DEVFN(sbdn3,0));
if (dev) {
bus_8131_1 = pci_read_config8(dev, PCI_SECONDARY_BUS);
-#if HT_CHAIN_END_UNITID_BASE < HT_CHAIN_UNITID_BASE
- bus_isa = pci_read_config8(dev, PCI_SUBORDINATE_BUS);
- bus_isa++;
-// printk_debug("bus_isa=%d\n",bus_isa);
-#endif
}
else {
printk_debug("ERROR - could not find PCI %02x:01.0, using defaults\n", bus_8131_0);
@@ -109,6 +107,12 @@
dev = dev_find_slot(bus_8131_0, PCI_DEVFN(sbdn3+1,0));
if (dev) {
bus_8131_2 = pci_read_config8(dev, PCI_SECONDARY_BUS);
+#if HT_CHAIN_END_UNITID_BASE < HT_CHAIN_UNITID_BASE
+ bus_isa = pci_read_config8(dev, PCI_SUBORDINATE_BUS);
+ bus_isa++;
+// printk_debug("bus_isa=%d\n",bus_isa);
+#endif
+
}
else {
printk_debug("ERROR - could not find PCI %02x:02.0, using defaults\n", bus_8131_0);
@@ -116,7 +120,7 @@
/* HT chain 1 */
// it is on node0, so it must be there
- bus_8151_0 = (pci1234[1] >> 16) & 0xff;
+ bus_8151_0 = (sysconf.pci1234[1] >> 16) & 0xff;
/* 8151 */
dev = dev_find_slot(bus_8151_0, PCI_DEVFN(sbdn5+1, 0));
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2885/irq_tables.c
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2885/irq_tables.c 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2885/irq_tables.c 2006-10-04 23:57:49 UTC (rev 2442)
@@ -10,6 +10,8 @@
#include <stdint.h>
#include <arch/pirq_routing.h>
+#include <cpu/amd/amdk8_sysconf.h>
+
static void write_pirq_info(struct irq_info *pirq_info, uint8_t bus, uint8_t devfn, uint8_t link0, uint16_t bitmap0,
uint8_t link1, uint16_t bitmap1, uint8_t link2, uint16_t bitmap2,uint8_t link3, uint16_t bitmap3,
uint8_t slot, uint8_t rfu)
@@ -36,8 +38,6 @@
extern unsigned char bus_8151_0;
extern unsigned char bus_8151_1;
-extern unsigned sbdn;
-extern unsigned hcdn[];
extern unsigned sbdn3;
extern unsigned sbdn5;
@@ -70,7 +70,7 @@
pirq->version = PIRQ_VERSION;
pirq->rtr_bus = bus_8111_0;
- pirq->rtr_devfn = ((sbdn+1)<<3)|0;
+ pirq->rtr_devfn = ((sysconf.sbdn+1)<<3)|0;
pirq->exclusive_irqs = 0;
@@ -84,7 +84,7 @@
pirq_info = (void *) ( &pirq->checksum + 1);
slot_num = 0;
//pci bridge
- write_pirq_info(pirq_info, bus_8111_0, ((sbdn+1)<<3)|0, 0x1, 0xdef8, 0x2, 0xdef8, 0x3, 0xdef8, 0x4, 0xdef8, 0, 0);
+ write_pirq_info(pirq_info, bus_8111_0, ((sysconf.sbdn+1)<<3)|0, 0x1, 0xdef8, 0x2, 0xdef8, 0x3, 0xdef8, 0x4, 0xdef8, 0, 0);
pirq_info++; slot_num++;
//pcix bridge
// write_pirq_info(pirq_info, bus_8131_0, (sbdn3<<3)|0, 0x1, 0xdef8, 0x2, 0xdef8, 0x3, 0xdef8, 0x4, 0xdef8, 0, 0);
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2885/mptable.c
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2885/mptable.c 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2885/mptable.c 2006-10-04 23:57:49 UTC (rev 2442)
@@ -4,6 +4,8 @@
#include <string.h>
#include <stdint.h>
+#include <cpu/amd/amdk8_sysconf.h>
+
extern unsigned char bus_isa;
extern unsigned char bus_8131_0;
extern unsigned char bus_8131_1;
@@ -16,8 +18,6 @@
extern unsigned apicid_8131_1;
extern unsigned apicid_8131_2;
-extern unsigned sbdn;
-extern unsigned hcdn[];
extern unsigned sbdn3;
extern unsigned sbdn5;
@@ -99,9 +99,9 @@
smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_EDGE|MP_IRQ_POLARITY_HIGH, bus_isa, 0xe, apicid_8111, 0xe);
smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_EDGE|MP_IRQ_POLARITY_HIGH, bus_isa, 0xf, apicid_8111, 0xf);
//??? What
- smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, bus_8111_0, ((sbdn+1)<<2)|3, apicid_8111, 0x13);
+ smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, bus_8111_0, ((sysconf.sbdn+1)<<2)|3, apicid_8111, 0x13);
//Onboard AMD AC97 Audio
- smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, bus_8111_0, ((sbdn+1)<<2)|1, apicid_8111, 0x11);
+ smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, bus_8111_0, ((sysconf.sbdn+1)<<2)|1, apicid_8111, 0x11);
// Onboard AMD USB
smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, bus_8111_1, (0<<2)|3, apicid_8111, 0x13);
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/Config.lb
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/Config.lb 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/Config.lb 2006-10-04 23:57:49 UTC (rev 2442)
@@ -314,8 +314,8 @@
# chip drivers/ati/ragexl
chip drivers/pci/onboard
device pci 7.0 on end
- # register "rom_address" = "0xfff80000" #for 512K
- register "rom_address" = "0xfff00000" #for 1M
+ register "rom_address" = "0xfff80000" #for 512K
+ # register "rom_address" = "0xfff00000" #for 1M
end
end
device pci a.0 off end # NIC
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/Options.lb
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/Options.lb 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/Options.lb 2006-10-04 23:57:49 UTC (rev 2442)
@@ -54,7 +54,6 @@
uses CONFIG_CONSOLE_VGA
uses CONFIG_PCI_ROM_RUN
uses HW_MEM_HOLE_SIZEK
-uses K8_HT_FREQ_1G_SUPPORT
uses USE_DCACHE_RAM
uses DCACHE_RAM_BASE
@@ -74,12 +73,13 @@
uses CONFIG_LB_MEM_TOPK
+
## ROM_SIZE is the size of boot ROM that this board will use.
#512K bytes
-#default ROM_SIZE=524288
+default ROM_SIZE=524288
#1M bytes
-default ROM_SIZE=1048576
+#default ROM_SIZE=1048576
##
@@ -139,9 +139,6 @@
#1G memory hole
default HW_MEM_HOLE_SIZEK=0x100000
-#Opteron K8 1G HT Support
-default K8_HT_FREQ_1G_SUPPORT=1
-
##HT Unit ID offset, default is 1, the typical one
default HT_CHAIN_UNITID_BASE=0x0
@@ -152,9 +149,8 @@
default SB_HT_CHAIN_ON_BUS0=2
##only offset for SB chain?, default is yes(1)
-default SB_HT_CHAIN_UNITID_OFFSET_ONLY=0
+#default SB_HT_CHAIN_UNITID_OFFSET_ONLY=0
-
#BTEXT Console
#default CONFIG_CONSOLE_BTEXT=1
@@ -229,8 +225,8 @@
##
## The default compiler
##
-default CC="$(CROSS_COMPILE)gcc -m32"
-default HOSTCC="gcc"
+default CC="$(CROSS_COMPILE)gcc-3.3.6 -m32"
+default HOSTCC="gcc-3.3.6"
##
## Disable the gdb stub by default
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/auto.c
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/auto.c 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/auto.c 2006-10-04 23:57:49 UTC (rev 2442)
@@ -12,7 +12,7 @@
#include "arch/i386/lib/console.c"
#include "ram/ramtest.c"
-#include <cpu/amd/model_fxx_rev.h>
+#include "northbridge/amd/amdk8/cpu_rev.c"
#define K8_HT_FREQ_1G_SUPPORT 0
#include "northbridge/amd/amdk8/incoherent_ht.c"
#include "southbridge/nvidia/ck804/ck804_early_smbus.c"
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/cache_as_ram_auto.c
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/cache_as_ram_auto.c 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/cache_as_ram_auto.c 2006-10-04 23:57:49 UTC (rev 2442)
@@ -2,7 +2,7 @@
#define __ROMCC__
//used by raminit
-#define K8_4RANK_DIMM_SUPPORT 1
+#define QRANK_DIMM_SUPPORT 1
#if CONFIG_LOGICAL_CPUS==1
#define SET_NB_CFG_54 1
@@ -21,7 +21,19 @@
#include "arch/i386/lib/console.c"
#include "ram/ramtest.c"
+#if 0
+static void post_code(uint8_t value) {
+#if 1
+ int i;
+ for(i=0;i<0x80000;i++) {
+ outb(value, 0x80);
+ }
+#endif
+}
+#endif
+
#include <cpu/amd/model_fxx_rev.h>
+
#include "northbridge/amd/amdk8/incoherent_ht.c"
#include "southbridge/nvidia/ck804/ck804_early_smbus.c"
#include "northbridge/amd/amdk8/raminit.h"
@@ -42,6 +54,7 @@
#define SERIAL_DEV PNP_DEV(0x2e, W83627HF_SP1)
+
static void memreset_setup(void)
{
}
@@ -92,15 +105,21 @@
uint32_t dword;
uint8_t byte;
- byte = pci_read_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0x7b);
+ /* subject decoding*/
+ byte = pci_read_config8(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0x7b);
byte |= 0x20;
pci_write_config8(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0x7b, byte);
+ /* LPC Positive Decode 0 */
dword = pci_read_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0xa0);
+ /* Serial 0, Serial 1 */
dword |= (1<<0) | (1<<1);
pci_write_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0xa0, dword);
#if 1
+ /* s2891 has onboard LPC port 80 */
+ /*Hope I can enable port 80 here
+ It will decode port 80 to LPC, If you are using PCI post code you can not do this */
dword = pci_read_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0xa4);
dword |= (1<<16);
pci_write_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0xa4, dword);
@@ -133,6 +152,7 @@
ck804_enable_rom();
/* Is this a deliberate reset by the bios */
+// post_code(0x22);
if (bios_reset_detected() && last_boot_normal_x) {
goto normal_image;
}
@@ -144,12 +164,14 @@
goto fallback_image;
}
normal_image:
+// post_code(0x23);
__asm__ volatile ("jmp __normal_image"
: /* outputs */
: "a" (bist) , "b" (cpu_init_detectedx)/* inputs */
);
fallback_image:
+// post_code(0x25);
;
}
#endif
@@ -187,6 +209,8 @@
bsp_apicid = init_cpus(cpu_init_detectedx);
}
+// post_code(0x32);
+
w83627hf_enable_serial(SERIAL_DEV, TTYS0_BASE);
uart_init();
console_init();
@@ -195,6 +219,10 @@
report_bist_failure(bist);
setup_s2891_resource_map();
+#if 0
+ dump_pci_device(PCI_DEV(0, 0x18, 0));
+ dump_pci_device(PCI_DEV(0, 0x19, 0));
+#endif
needs_reset = setup_coherent_ht_domain();
@@ -211,7 +239,7 @@
if (needs_reset) {
print_info("ht reset -\r\n");
- soft_reset();
+// soft_reset();
}
allow_all_aps_stop(bsp_apicid);
@@ -221,9 +249,23 @@
fill_mem_ctrl(nodes, ctrl, spd_addr);
enable_smbus();
+#if 0
+ dump_spd_registers(&cpu[0]);
+#endif
+#if 0
+ dump_smbus_registers();
+#endif
memreset_setup();
sdram_initialize(nodes, ctrl);
+#if 0
+ print_pci_devices();
+#endif
+
+#if 0
+ dump_pci_devices();
+#endif
+
post_cache_as_ram();
}
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/cmos.layout
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/cmos.layout 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/cmos.layout 2006-10-04 23:57:49 UTC (rev 2442)
@@ -78,10 +78,10 @@
7 9 Fallback_HDD
7 10 Fallback_Floppy
#7 3 ROM
-8 0 DDR400
-8 1 DDR333
-8 2 DDR266
-8 3 DDR200
+8 0 200Mhz
+8 1 166Mhz
+8 2 133Mhz
+8 3 100Mhz
9 0 off
9 1 87.5%
9 2 75.0%
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/get_bus_conf.c
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/get_bus_conf.c 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/get_bus_conf.c 2006-10-04 23:57:49 UTC (rev 2442)
@@ -7,6 +7,7 @@
#include <cpu/amd/dualcore.h>
#endif
+#include <cpu/amd/amdk8_sysconf.h>
// Global variables for MB layouts and these will be shared by irqtable mptable and acpi_tables
//busnum is default
@@ -24,9 +25,9 @@
unsigned apicid_ck804;
unsigned apicid_8131_1;
unsigned apicid_8131_2;
+
-unsigned sblk;
-unsigned pci1234[] =
+unsigned pci1234x[] =
{ //Here you only need to set value in pci1234 for HT-IO that could be installed or not
//You may need to preset pci1234 for HTIO board, please refer to src/northbridge/amd/amdk8/get_sblk_pci1234.c for detail
0x0000000,
@@ -38,9 +39,7 @@
// 0x0000ff0,
// 0x0000ff0
};
-unsigned hc_possible_num;
-unsigned sbdn;
-unsigned hcdn[] =
+unsigned hcdnx[] =
{ //HT Chain device num, actually it is unit id base of every ht device in chain, assume every chain only have 4 ht device at most
0x20202020,
0x20202020,
@@ -65,29 +64,29 @@
unsigned apicid_base;
device_t dev;
+ unsigned sbdn;
+ int i;
- if(get_bus_conf_done==1) return; //do it only once
+ if(get_bus_conf_done==1) return; //do it only once
- get_bus_conf_done = 1;
+ get_bus_conf_done = 1;
- hc_possible_num = sizeof(pci1234)/sizeof(pci1234[0]);
+ sysconf.hc_possible_num = sizeof(pci1234x)/sizeof(pci1234x[0]);
+ for(i=0;i<sysconf.hc_possible_num; i++) {
+ sysconf.pci1234[i] = pci1234x[i];
+ sysconf.hcdn[i] = hcdnx[i];
+ }
+
+ get_sblk_pci1234();
- get_sblk_pci1234();
-
- sbdn = (hcdn[0] & 0xff); // first byte of first chain
+ sysconf.sbdn = (sysconf.hcdn[0] & 0xff); // first byte of first chain
+ sbdn = sysconf.sbdn;
- sbdn3 = (hcdn[1] & 0xff); // first byte of second chain
+ sbdn3 = (sysconf.hcdn[1] & 0xff); // first byte of second chain
-// bus_ck804_0 = node_link_to_bus(0, sblk);
- bus_ck804_0 = (pci1234[0] >> 16) & 0xff;
+ bus_ck804_0 = (sysconf.pci1234[0] >> 16) & 0xff;
- if(pci1234[2] & 1) {
- bus_coproc_0 = (pci1234[2] >> 16) & 0xff;
- coprocdn = (hcdn[2] & 0xff);
- }
-
-
/* CK804 */
dev = dev_find_slot(bus_ck804_0, PCI_DEVFN(sbdn + 0x09,0));
if (dev) {
@@ -153,16 +152,14 @@
dev = dev_find_slot(bus_ck804_0, PCI_DEVFN(sbdn+ 0x0e,0));
if (dev) {
bus_ck804_5 = pci_read_config8(dev, PCI_SECONDARY_BUS);
- bus_8131_0 = pci_read_config8(dev, PCI_SUBORDINATE_BUS);
- bus_8131_0++;
- bus_isa = bus_8131_0; // incase only one installed
+ bus_isa = pci_read_config8(dev, PCI_SUBORDINATE_BUS);
+ bus_isa++;
}
else {
printk_debug("ERROR - could not find PCI 1:%02x.0, using defaults\n", sbdn+ 0x0e);
-
}
- bus_8131_0 = (pci1234[1] >> 16) & 0xff;
+ bus_8131_0 = (sysconf.pci1234[1] >> 16) & 0xff;
/* 8131-1 */
dev = dev_find_slot(bus_8131_0, PCI_DEVFN(sbdn3,0));
@@ -191,8 +188,12 @@
bus_isa = bus_8131_1+2;
}
+ if(sysconf.pci1234[2] & 1) {
+ bus_coproc_0 = (sysconf.pci1234[2] >> 16) & 0xff;
+ coprocdn = (sysconf.hcdn[2] & 0xff);
+ }
+
-
/*I/O APICs: APIC ID Version State Address*/
#if CONFIG_LOGICAL_CPUS==1
apicid_base = get_apicid_base(3);
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/irq_tables.c
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/irq_tables.c 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/irq_tables.c 2006-10-04 23:57:49 UTC (rev 2442)
@@ -10,6 +10,8 @@
#include <stdint.h>
#include <arch/pirq_routing.h>
+#include <cpu/amd/amdk8_sysconf.h>
+
static void write_pirq_info(struct irq_info *pirq_info, uint8_t bus, uint8_t devfn, uint8_t link0, uint16_t bitmap0,
uint8_t link1, uint16_t bitmap1, uint8_t link2, uint16_t bitmap2,uint8_t link3, uint16_t bitmap3,
uint8_t slot, uint8_t rfu)
@@ -40,10 +42,7 @@
extern unsigned char bus_8131_2;//9
extern unsigned char bus_coproc_0;
-extern unsigned sbdn;
-extern unsigned hcdn[];
extern unsigned sbdn3;
-extern unsigned pci1234[];
extern unsigned coprocdn;
extern void get_bus_conf(void);
@@ -58,8 +57,10 @@
uint8_t sum=0;
int i;
+ unsigned sbdn;
- get_bus_conf(); // it will find out all bus num and apic that share with mptable.c and mptable.c and acpi_tables.c
+ get_bus_conf(); // it will find out all bus num and apic that share with mptable.c and mptable.c and acpi_tables.c
+ sbdn = sysconf.sbdn;
/* Align the table to be 16 byte aligned. */
addr += 15;
@@ -94,12 +95,11 @@
//pcix bridge
write_pirq_info(pirq_info, bus_8131_0, (sbdn3<<3)|0, 0x1, 0xdef8, 0x2, 0xdef8, 0x3, 0xdef8, 0x4, 0xdef8, 0, 0);
pirq_info++; slot_num++;
-
//co processor
- if(pci1234[2] & 1) {
- write_pirq_info(pirq_info, bus_coproc_0, (coprocdn<<3)|0, 0x1, 0xdef8, 0x2, 0xdef8, 0x3, 0xdef8, 0x4, 0xdef8, 0, 0);
- pirq_info++; slot_num++;
- }
+ if(sysconf.pci1234[2] & 1) {
+ write_pirq_info(pirq_info, bus_coproc_0, (coprocdn<<3)|0, 0x1, 0xdef8, 0x2, 0xdef8, 0x3, 0xdef8, 0x4, 0xdef8, 0, 0);
+ pirq_info++; slot_num++;
+ }
#if 0
//smbus
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/mptable.c
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/mptable.c 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/mptable.c 2006-10-04 23:57:49 UTC (rev 2442)
@@ -4,6 +4,8 @@
#include <string.h>
#include <stdint.h>
+#include <cpu/amd/amdk8_sysconf.h>
+
extern unsigned char bus_isa;
extern unsigned char bus_ck804_0; //1
extern unsigned char bus_ck804_1; //2
@@ -18,8 +20,6 @@
extern unsigned apicid_8131_1;
extern unsigned apicid_8131_2;
-extern unsigned sbdn;
-extern unsigned hcdn[];
extern unsigned sbdn3;
extern void get_bus_conf(void);
@@ -30,6 +30,7 @@
static const char oem[8] = "TYAN ";
static const char productid[12] = "S2891 ";
struct mp_config_table *mc;
+ unsigned sbdn;
unsigned char bus_num;
int i;
@@ -54,6 +55,7 @@
smp_write_processors(mc);
get_bus_conf();
+ sbdn = sysconf.sbdn;
/*Bus: Bus ID Type*/
/* define bus and isa numbers */
@@ -75,6 +77,7 @@
smp_write_ioapic(mc, apicid_ck804, 0x11, res->base);
}
+ /* Initialize interrupt mapping*/
dword = 0x0000d218;
pci_write_config32(dev, 0x7c, dword);
@@ -83,7 +86,6 @@
pci_write_config32(dev, 0x80, dword);
dword = 0x0000007d;
-
pci_write_config32(dev, 0x84, dword);
}
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/resourcemap.c
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/resourcemap.c 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2891/resourcemap.c 2006-10-04 23:57:49 UTC (rev 2442)
@@ -258,8 +258,8 @@
* This field defines the highest bus number in configuration region i
*/
#if 1
-// PCI_ADDR(0, 0x18, 1, 0xE0), 0x0000FC88, 0x07000003,
-// PCI_ADDR(0, 0x18, 1, 0xE4), 0x0000FC88, 0x7f080203,
+// PCI_ADDR(0, 0x18, 1, 0xE0), 0x0000FC88, 0x07000003, /* link 0 of cpu 0 --> Nvidia CK 804 Pro */
+// PCI_ADDR(0, 0x18, 1, 0xE4), 0x0000FC88, 0x7f080203, /* link 2 of cpu 0 --> AMD8131 */
PCI_ADDR(0, 0x18, 1, 0xE8), 0x0000FC88, 0x00000000,
PCI_ADDR(0, 0x18, 1, 0xEC), 0x0000FC88, 0x00000000,
#endif
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/Config.lb
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/Config.lb 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/Config.lb 2006-10-04 23:57:49 UTC (rev 2442)
@@ -313,8 +313,7 @@
# chip drivers/ati/ragexl
chip drivers/pci/onboard
device pci 6.0 on end
- # register "rom_address" = "0xfff80000" #for 512K
- register "rom_address" = "0xfff00000" #for 1M
+ register "rom_address" = "0xfff80000"
end
chip drivers/pci/onboard
device pci 8.0 on end
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/Options.lb
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/Options.lb 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/Options.lb 2006-10-04 23:57:49 UTC (rev 2442)
@@ -54,7 +54,6 @@
uses CONFIG_CONSOLE_VGA
uses CONFIG_PCI_ROM_RUN
uses HW_MEM_HOLE_SIZEK
-uses K8_HT_FREQ_1G_SUPPORT
uses USE_DCACHE_RAM
uses DCACHE_RAM_BASE
@@ -66,12 +65,14 @@
uses SB_HT_CHAIN_ON_BUS0
uses SB_HT_CHAIN_UNITID_OFFSET_ONLY
+uses CONFIG_LB_MEM_TOPK
+
## ROM_SIZE is the size of boot ROM that this board will use.
#512K bytes
-#default ROM_SIZE=524288
+default ROM_SIZE=524288
#1M bytes
-default ROM_SIZE=1048576
+#default ROM_SIZE=1048576
##
@@ -128,12 +129,6 @@
default CONFIG_MAX_PHYSICAL_CPUS=2
default CONFIG_LOGICAL_CPUS=1
-#1G memory hole
-default HW_MEM_HOLE_SIZEK=0x100000
-
-#Opteron K8 1G HT Support
-default K8_HT_FREQ_1G_SUPPORT=1
-
##HT Unit ID offset, default is 1, the typical one
default HT_CHAIN_UNITID_BASE=0x0
@@ -146,6 +141,9 @@
##only offset for SB chain?, default is yes(1)
default SB_HT_CHAIN_UNITID_OFFSET_ONLY=0
+#1G memory hole
+default HW_MEM_HOLE_SIZEK=0x100000
+
#BTEXT Console
#default CONFIG_CONSOLE_BTEXT=1
@@ -161,6 +159,7 @@
default DCACHE_RAM_SIZE=0x1000
default CONFIG_USE_INIT=0
+
##
## Build code to setup a generic IOAPIC
##
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/auto.c
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/auto.c 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/auto.c 2006-10-04 23:57:49 UTC (rev 2442)
@@ -12,7 +12,7 @@
#include "arch/i386/lib/console.c"
#include "ram/ramtest.c"
-#include <cpu/amd/model_fxx_rev.h>
+#include "northbridge/amd/amdk8/cpu_rev.c"
#define K8_HT_FREQ_1G_SUPPORT 1
#include "northbridge/amd/amdk8/incoherent_ht.c"
#include "southbridge/nvidia/ck804/ck804_early_smbus.c"
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/cache_as_ram_auto.c
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/cache_as_ram_auto.c 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/cache_as_ram_auto.c 2006-10-04 23:57:49 UTC (rev 2442)
@@ -13,6 +13,17 @@
#include "arch/i386/lib/console.c"
#include "ram/ramtest.c"
+#if 0
+static void post_code(uint8_t value) {
+#if 1
+ int i;
+ for(i=0;i<0x80000;i++) {
+ outb(value, 0x80);
+ }
+#endif
+}
+#endif
+
#include <cpu/amd/model_fxx_rev.h>
#include "northbridge/amd/amdk8/incoherent_ht.c"
#include "southbridge/nvidia/ck804/ck804_early_smbus.c"
@@ -54,7 +65,7 @@
return smbus_read_byte(device, address);
}
-#define K8_4RANK_DIMM_SUPPORT 1
+#define QRANK_DIMM_SUPPORT 1
#include "northbridge/amd/amdk8/raminit.c"
#include "northbridge/amd/amdk8/coherent_ht.c"
@@ -98,7 +109,7 @@
uint32_t dword;
uint8_t byte;
- byte = pci_read_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0x7b);
+ byte = pci_read_config8(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0x7b);
byte |= 0x20;
pci_write_config8(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0x7b, byte);
@@ -106,7 +117,6 @@
dword |= (1<<0);
pci_write_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0xa0, dword);
-
}
void failover_process(unsigned long bist, unsigned long cpu_init_detectedx)
{
@@ -132,6 +142,7 @@
ck804_enable_rom();
/* Is this a deliberate reset by the bios */
+// post_code(0x22);
if (bios_reset_detected() && last_boot_normal_x) {
goto normal_image;
}
@@ -143,12 +154,14 @@
goto fallback_image;
}
normal_image:
+// post_code(0x23);
__asm__ volatile ("jmp __normal_image"
: /* outputs */
: "a" (bist), "b"(cpu_init_detectedx) /* inputs */
);
fallback_image:
+// post_code(0x25);
;
}
#endif
@@ -167,46 +180,42 @@
void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
{
- static const struct mem_controller cpu[] = {
- {
- .node_id = 0,
- .f0 = PCI_DEV(0, 0x18, 0),
- .f1 = PCI_DEV(0, 0x18, 1),
- .f2 = PCI_DEV(0, 0x18, 2),
- .f3 = PCI_DEV(0, 0x18, 3),
- .channel0 = { (0xa<<3)|0, (0xa<<3)|2, 0, 0 },
- .channel1 = { (0xa<<3)|1, (0xa<<3)|3, 0, 0 },
- },
+
+ static const uint16_t spd_addr [] = {
+ (0xa<<3)|0, (0xa<<3)|2, 0, 0,
+ (0xa<<3)|1, (0xa<<3)|3, 0, 0,
#if CONFIG_MAX_PHYSICAL_CPUS > 1
- {
- .node_id = 1,
- .f0 = PCI_DEV(0, 0x19, 0),
- .f1 = PCI_DEV(0, 0x19, 1),
- .f2 = PCI_DEV(0, 0x19, 2),
- .f3 = PCI_DEV(0, 0x19, 3),
- .channel0 = { (0xa<<3)|4, (0xa<<3)|6, 0, 0 },
- .channel1 = { (0xa<<3)|5, (0xa<<3)|7, 0, 0 },
- },
+ (0xa<<3)|4, (0xa<<3)|6, 0, 0,
+ (0xa<<3)|5, (0xa<<3)|7, 0, 0,
#endif
- };
+ };
- unsigned bsp_apicid = 0;
int needs_reset;
+ unsigned bsp_apicid = 0;
+ struct mem_controller ctrl[8];
+ unsigned nodes;
+
if (bist == 0) {
init_cpus(cpu_init_detectedx);
}
- w83627hf_enable_serial(SERIAL_DEV, TTYS0_BASE);
+// post_code(0x32);
+
+ w83627hf_enable_serial(SERIAL_DEV, TTYS0_BASE);
uart_init();
console_init();
-
- /* Halt if there was a built in self test failure */
- report_bist_failure(bist);
+ /* Halt if there was a built in self test failure */
+ report_bist_failure(bist);
+
setup_s2892_resource_map();
+#if 0
+ dump_pci_device(PCI_DEV(0, 0x18, 0));
+ dump_pci_device(PCI_DEV(0, 0x19, 0));
+#endif
- needs_reset = setup_coherent_ht_domain();
+ needs_reset = setup_coherent_ht_domain();
wait_all_core0_started();
#if CONFIG_LOGICAL_CPUS==1
@@ -219,15 +228,35 @@
needs_reset |= ck804_early_setup_x();
- if (needs_reset) {
- print_info("ht reset -\r\n");
- soft_reset();
- }
+ if (needs_reset) {
+ print_info("ht reset -\r\n");
+ soft_reset();
+ }
- enable_smbus();
+ allow_all_aps_stop(bsp_apicid);
- memreset_setup();
- sdram_initialize(sizeof(cpu)/sizeof(cpu[0]), cpu);
+ nodes = get_nodes();
+ //It's the time to set ctrl now;
+ fill_mem_ctrl(nodes, ctrl, spd_addr);
- post_cache_as_ram();
+ enable_smbus();
+#if 0
+ dump_spd_registers(&cpu[0]);
+#endif
+#if 0
+ dump_smbus_registers();
+#endif
+
+ memreset_setup();
+ sdram_initialize(nodes, ctrl);
+
+#if 0
+ print_pci_devices();
+#endif
+
+#if 0
+ dump_pci_devices();
+#endif
+
+ post_cache_as_ram();
}
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/cmos.layout
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/cmos.layout 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/cmos.layout 2006-10-04 23:57:49 UTC (rev 2442)
@@ -78,10 +78,10 @@
7 9 Fallback_HDD
7 10 Fallback_Floppy
#7 3 ROM
-8 0 DDR400
-8 1 DDR333
-8 2 DDR266
-8 3 DDR200
+8 0 200Mhz
+8 1 166Mhz
+8 2 133Mhz
+8 3 100Mhz
9 0 off
9 1 87.5%
9 2 75.0%
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/get_bus_conf.c
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/get_bus_conf.c 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/get_bus_conf.c 2006-10-04 23:57:49 UTC (rev 2442)
@@ -7,6 +7,7 @@
#include <cpu/amd/dualcore.h>
#endif
+#include <cpu/amd/amdk8_sysconf.h>
// Global variables for MB layouts and these will be shared by irqtable mptable and acpi_tables
//busnum is default
@@ -24,8 +25,7 @@
unsigned apicid_8131_1;
unsigned apicid_8131_2;
-unsigned sblk;
-unsigned pci1234[] =
+unsigned pci1234x[] =
{ //Here you only need to set value in pci1234 for HT-IO that could be installed or not
//You may need to preset pci1234 for HTIO board, please refer to src/northbridge/amd/amdk8/get_sblk_pci1234.c for detail
0x0000ff0,
@@ -37,9 +37,7 @@
// 0x0000ff0,
// 0x0000ff0
};
-unsigned hc_possible_num;
-unsigned sbdn;
-unsigned hcdn[] =
+unsigned hcdnx[] =
{ //HT Chain device num, actually it is unit id base of every ht device in chain, assume every chain only have 4 ht device at most
0x20202020,
0x20202020,
@@ -61,23 +59,29 @@
{
unsigned apicid_base;
+ unsigned sbdn;
device_t dev;
+ int i;
- if(get_bus_conf_done==1) return; //do it only once
+ if(get_bus_conf_done==1) return; //do it only once
- get_bus_conf_done = 1;
+ get_bus_conf_done = 1;
- hc_possible_num = sizeof(pci1234)/sizeof(pci1234[0]);
+ sysconf.hc_possible_num = sizeof(pci1234x)/sizeof(pci1234x[0]);
+ for(i=0;i<sysconf.hc_possible_num; i++) {
+ sysconf.pci1234[i] = pci1234x[i];
+ sysconf.hcdn[i] = hcdnx[i];
+ }
+
+ get_sblk_pci1234();
- get_sblk_pci1234();
-
- sbdn = (hcdn[0] & 0xff); // first byte of first chain
+ sysconf.sbdn = (sysconf.hcdn[0] & 0xff); // first byte of first chain
+ sbdn = sysconf.sbdn;
- sbdn3 = (hcdn[1] & 0xff); // first byte of second chain
+ sbdn3 = (sysconf.hcdn[1] & 0xff); // first byte of second chain
-// bus_ck804_0 = node_link_to_bus(0, sblk);
- bus_ck804_0 = (pci1234[0] >> 16) & 0xff;
+ bus_ck804_0 = (sysconf.pci1234[0] >> 16) & 0xff;
/* CK804 */
@@ -145,16 +149,15 @@
dev = dev_find_slot(bus_ck804_0, PCI_DEVFN(sbdn+ 0x0e,0));
if (dev) {
bus_ck804_5 = pci_read_config8(dev, PCI_SECONDARY_BUS);
- bus_8131_0 = pci_read_config8(dev, PCI_SUBORDINATE_BUS);
- bus_8131_0++;
- bus_isa = bus_8131_0; // incase only one installed
+ bus_isa = pci_read_config8(dev, PCI_SUBORDINATE_BUS);
+ bus_isa++;
}
else {
printk_debug("ERROR - could not find PCI 1:%02x.0, using defaults\n", sbdn+ 0x0e);
-
}
- bus_8131_0 = (pci1234[1] >> 16) & 0xff;
+ bus_8131_0 = (sysconf.pci1234[1] >> 16) & 0xff;
+
/* 8131-1 */
dev = dev_find_slot(bus_8131_0, PCI_DEVFN(sbdn3,0));
if (dev) {
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/irq_tables.c
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/irq_tables.c 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/irq_tables.c 2006-10-04 23:57:49 UTC (rev 2442)
@@ -10,6 +10,8 @@
#include <stdint.h>
#include <arch/pirq_routing.h>
+#include <cpu/amd/amdk8_sysconf.h>
+
static void write_pirq_info(struct irq_info *pirq_info, uint8_t bus, uint8_t devfn, uint8_t link0, uint16_t bitmap0,
uint8_t link1, uint16_t bitmap1, uint8_t link2, uint16_t bitmap2,uint8_t link3, uint16_t bitmap3,
uint8_t slot, uint8_t rfu)
@@ -39,8 +41,6 @@
extern unsigned char bus_8131_1;//8
extern unsigned char bus_8131_2;//9
-extern unsigned sbdn;
-extern unsigned hcdn[];
extern unsigned sbdn3;
extern void get_bus_conf(void);
@@ -52,11 +52,13 @@
struct irq_info *pirq_info;
unsigned slot_num;
uint8_t *v;
+ unsigned sbdn;
uint8_t sum=0;
int i;
get_bus_conf(); // it will find out all bus num and apic that share with mptable.c and mptable.c and acpi_tables.c
+ sbdn = sysconf.sbdn;
/* Align the table to be 16 byte aligned. */
addr += 15;
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/mptable.c
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/mptable.c 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/mptable.c 2006-10-04 23:57:49 UTC (rev 2442)
@@ -4,6 +4,8 @@
#include <string.h>
#include <stdint.h>
+#include <cpu/amd/amdk8_sysconf.h>
+
extern unsigned char bus_isa;
extern unsigned char bus_ck804_0; //1
extern unsigned char bus_ck804_1; //2
@@ -18,8 +20,6 @@
extern unsigned apicid_8131_1;
extern unsigned apicid_8131_2;
-extern unsigned sbdn;
-extern unsigned hcdn[];
extern unsigned sbdn3;
@@ -29,6 +29,7 @@
static const char oem[8] = "TYAN ";
static const char productid[12] = "S2892 ";
struct mp_config_table *mc;
+ unsigned sbdn;
unsigned char bus_num;
int i;
@@ -53,6 +54,7 @@
smp_write_processors(mc);
get_bus_conf();
+ sbdn = sysconf.sbdn;
/*Bus: Bus ID Type*/
/* define bus and isa numbers */
@@ -74,11 +76,12 @@
smp_write_ioapic(mc, apicid_ck804, 0x11, res->base);
}
+ /* Initialize interrupt mapping*/
+
dword = 0x0000d218;
pci_write_config32(dev, 0x7c, dword);
dword = 0x12008a00;
-
pci_write_config32(dev, 0x80, dword);
dword = 0x0000007d;
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/resourcemap.c
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/resourcemap.c 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2892/resourcemap.c 2006-10-04 23:57:49 UTC (rev 2442)
@@ -258,8 +258,8 @@
* This field defines the highest bus number in configuration region i
*/
#if 1
-// PCI_ADDR(0, 0x18, 1, 0xE0), 0x0000FC88, 0x07000003,
-// PCI_ADDR(0, 0x18, 1, 0xE4), 0x0000FC88, 0x7f080203,
+// PCI_ADDR(0, 0x18, 1, 0xE0), 0x0000FC88, 0x07000003, /* link 0 of cpu 0 --> Nvidia CK 804 Pro */
+// PCI_ADDR(0, 0x18, 1, 0xE4), 0x0000FC88, 0x7f080203, /* link 2 of cpu 0 --> AMD8131 */
PCI_ADDR(0, 0x18, 1, 0xE8), 0x0000FC88, 0x00000000,
PCI_ADDR(0, 0x18, 1, 0xEC), 0x0000FC88, 0x00000000,
#endif
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/Config.lb
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/Config.lb 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/Config.lb 2006-10-04 23:57:49 UTC (rev 2442)
@@ -2,12 +2,17 @@
## Compute the location and size of where this firmware image
## (linuxBIOS plus bootloader) will live in the boot rom chip.
##
-if USE_FALLBACK_IMAGE
+if USE_FAILOVER_IMAGE
+ default ROM_SECTION_SIZE = FAILOVER_SIZE
+ default ROM_SECTION_OFFSET = ( ROM_SIZE - FAILOVER_SIZE )
+else
+ if USE_FALLBACK_IMAGE
default ROM_SECTION_SIZE = FALLBACK_SIZE
- default ROM_SECTION_OFFSET = ( ROM_SIZE - FALLBACK_SIZE )
-else
- default ROM_SECTION_SIZE = ( ROM_SIZE - FALLBACK_SIZE )
+ default ROM_SECTION_OFFSET = ( ROM_SIZE - FALLBACK_SIZE - FAILOVER_SIZE )
+ else
+ default ROM_SECTION_SIZE = ( ROM_SIZE - FALLBACK_SIZE - FAILOVER_SIZE )
default ROM_SECTION_OFFSET = 0
+ end
end
##
@@ -16,7 +21,6 @@
##
default PAYLOAD_SIZE = ( ROM_SECTION_SIZE - ROM_IMAGE_SIZE )
default CONFIG_ROM_STREAM_START = (0xffffffff - ROM_SIZE + ROM_SECTION_OFFSET + 1)
-default CONFIG_ROM_STREAM = 1
##
## Compute where this copy of linuxBIOS will start in the boot rom
@@ -31,11 +35,19 @@
## XIP_ROM_BASE must be a multiple of XIP_ROM_SIZE
##
default XIP_ROM_SIZE=65536
-default XIP_ROM_BASE = ( _ROMBASE + ROM_IMAGE_SIZE - XIP_ROM_SIZE )
+if USE_FAILOVER_IMAGE
+ default XIP_ROM_BASE = ( _ROMBASE - XIP_ROM_SIZE + ROM_IMAGE_SIZE)
+else
+ if USE_FALLBACK_IMAGE
+ default XIP_ROM_BASE = ( _ROMBASE - XIP_ROM_SIZE + ROM_IMAGE_SIZE + FAILOVER_SIZE)
+ else
+ default XIP_ROM_BASE = ( _ROMBASE - XIP_ROM_SIZE + ROM_IMAGE_SIZE)
+ end
+end
+
arch i386 end
-
##
## Build the objects we have code for in this directory.
##
@@ -92,9 +104,16 @@
##
## Build our 16 bit and 32 bit linuxBIOS entry code
##
-if USE_FALLBACK_IMAGE
- mainboardinit cpu/x86/16bit/entry16.inc
- ldscript /cpu/x86/16bit/entry16.lds
+if HAVE_FAILOVER_BOOT
+ if USE_FAILOVER_IMAGE
+ mainboardinit cpu/x86/16bit/entry16.inc
+ ldscript /cpu/x86/16bit/entry16.lds
+ end
+else
+ if USE_FALLBACK_IMAGE
+ mainboardinit cpu/x86/16bit/entry16.inc
+ ldscript /cpu/x86/16bit/entry16.lds
+ end
end
mainboardinit cpu/x86/32bit/entry32.inc
@@ -113,12 +132,22 @@
##
## Build our reset vector (This is where linuxBIOS is entered)
##
-if USE_FALLBACK_IMAGE
+if HAVE_FAILOVER_BOOT
+ if USE_FAILOVER_IMAGE
mainboardinit cpu/x86/16bit/reset16.inc
ldscript /cpu/x86/16bit/reset16.lds
+ else
+ mainboardinit cpu/x86/32bit/reset32.inc
+ ldscript /cpu/x86/32bit/reset32.lds
+ end
else
+ if USE_FALLBACK_IMAGE
+ mainboardinit cpu/x86/16bit/reset16.inc
+ ldscript /cpu/x86/16bit/reset16.lds
+ else
mainboardinit cpu/x86/32bit/reset32.inc
ldscript /cpu/x86/32bit/reset32.lds
+ end
end
if USE_DCACHE_RAM
@@ -136,13 +165,18 @@
##
## ROMSTRAP table for CK804
##
-if USE_FALLBACK_IMAGE
+if HAVE_FAILOVER_BOOT
+ if USE_FAILOVER_IMAGE
mainboardinit southbridge/nvidia/ck804/romstrap.inc
ldscript /southbridge/nvidia/ck804/romstrap.lds
+ end
+else
+ if USE_FALLBACK_IMAGE
+ mainboardinit southbridge/nvidia/ck804/romstrap.inc
+ ldscript /southbridge/nvidia/ck804/romstrap.lds
+ end
end
-
-
if USE_DCACHE_RAM
##
## Setup Cache-As-Ram
@@ -155,12 +189,20 @@
### Things are delicate and we test to see if we should
### failover to another image.
###
-if USE_FALLBACK_IMAGE
- ldscript /arch/i386/lib/failover.lds
+if HAVE_FAILOVER_BOOT
+ if USE_FAILOVER_IMAGE
if USE_DCACHE_RAM
+ ldscript /arch/i386/lib/failover_failover.lds
+ end
+ end
+else
+ if USE_FALLBACK_IMAGE
+ if USE_DCACHE_RAM
+ ldscript /arch/i386/lib/failover.lds
else
- mainboardinit ./failover.inc
+ mainboardinit ./failover.inc
end
+ end
end
##
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/Options.lb
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/Options.lb 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/Options.lb 2006-10-04 23:57:49 UTC (rev 2442)
@@ -2,6 +2,8 @@
uses HAVE_PIRQ_TABLE
uses USE_FALLBACK_IMAGE
uses HAVE_FALLBACK_BOOT
+uses USE_FAILOVER_IMAGE
+uses HAVE_FAILOVER_BOOT
uses HAVE_HARD_RESET
uses IRQ_SLOT_COUNT
uses HAVE_OPTION_TABLE
@@ -11,6 +13,7 @@
uses CONFIG_IOAPIC
uses CONFIG_SMP
uses FALLBACK_SIZE
+uses FAILOVER_SIZE
uses ROM_SIZE
uses ROM_SECTION_SIZE
uses ROM_IMAGE_SIZE
@@ -60,6 +63,8 @@
uses DCACHE_RAM_SIZE
uses CONFIG_USE_INIT
+uses SERIAL_CPU_INIT
+
uses ENABLE_APIC_EXT_ID
uses APIC_ID_OFFSET
uses LIFT_BSP_APIC_ID
@@ -69,28 +74,34 @@
uses SB_HT_CHAIN_ON_BUS0
uses SB_HT_CHAIN_UNITID_OFFSET_ONLY
+uses CONFIG_LB_MEM_TOPK
+
## ROM_SIZE is the size of boot ROM that this board will use.
#512K bytes
-#default ROM_SIZE=524288
+default ROM_SIZE=524288
#1M bytes
-default ROM_SIZE=1048576
+#default ROM_SIZE=1048576
##
## FALLBACK_SIZE is the amount of the ROM the complete fallback image will use
##
#default FALLBACK_SIZE=131072
-#256K
-default FALLBACK_SIZE=0x40000
+#default FALLBACK_SIZE=0x40000
-###
-### Build options
-###
+#FALLBACK: 256K-4K
+default FALLBACK_SIZE=0x3f000
+#FAILOVER: 4K
+default FAILOVER_SIZE=0x01000
+#more 1M for pgtbl
+default CONFIG_LB_MEM_TOPK=2048
+
##
## Build code for the fallback boot
##
default HAVE_FALLBACK_BOOT=1
+default HAVE_FAILOVER_BOOT=1
##
## Build code to reset the motherboard from linuxBIOS
@@ -130,15 +141,14 @@
default CONFIG_MAX_PHYSICAL_CPUS=2
default CONFIG_LOGICAL_CPUS=1
+default SERIAL_CPU_INIT=0
+
#CHIP_NAME ?
#default CONFIG_CHIP_NAME=1
#1G memory hole
default HW_MEM_HOLE_SIZEK=0x100000
-#Opteron K8 1G HT Support
-default K8_HT_FREQ_1G_SUPPORT=1
-
##HT Unit ID offset, default is 1, the typical one
default HT_CHAIN_UNITID_BASE=0x0
@@ -151,6 +161,9 @@
##only offset for SB chain?, default is yes(1)
default SB_HT_CHAIN_UNITID_OFFSET_ONLY=0
+#Opteron K8 1G HT Support
+default K8_HT_FREQ_1G_SUPPORT=1
+
#VGA
default CONFIG_CONSOLE_VGA=1
default CONFIG_PCI_ROM_RUN=1
@@ -163,7 +176,7 @@
default DCACHE_RAM_SIZE=0x1000
default CONFIG_USE_INIT=0
-default ENABLE_APIC_EXT_ID=1
+default ENABLE_APIC_EXT_ID=0
default APIC_ID_OFFSET=0x10
default LIFT_BSP_APIC_ID=0
@@ -201,12 +214,12 @@
##
## Only use the option table in a normal image
##
-default USE_OPTION_TABLE = !USE_FALLBACK_IMAGE
+default USE_OPTION_TABLE = (!USE_FALLBACK_IMAGE) && (!USE_FAILOVER_IMAGE )
##
## LinuxBIOS C code runs at this location in RAM
##
-default _RAMBASE=0x00004000
+default _RAMBASE=0x00100000
##
## Load the payload from the ROM
@@ -220,8 +233,8 @@
##
## The default compiler
##
-default CC="$(CROSS_COMPILE)gcc -m32"
-default HOSTCC="gcc"
+default CC="$(CROSS_COMPILE)gcc-4.0.2 -m32"
+default HOSTCC="gcc-4.0.2"
##
## Disable the gdb stub by default
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/auto.c
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/auto.c 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/auto.c 2006-10-04 23:57:49 UTC (rev 2442)
@@ -13,7 +13,7 @@
#include "arch/i386/lib/console.c"
#include "ram/ramtest.c"
-#include <cpu/amd/model_fxx_rev.h>
+#include "northbridge/amd/amdk8/cpu_rev.c"
//#define K8_HT_FREQ_1G_SUPPORT 1
#include "northbridge/amd/amdk8/incoherent_ht.c"
#include "southbridge/nvidia/ck804/ck804_early_smbus.c"
@@ -23,7 +23,7 @@
#include "cpu/x86/lapic/boot_cpu.c"
#include "northbridge/amd/amdk8/reset_test.c"
#include "northbridge/amd/amdk8/debug.c"
-#include <cpu/amd/model_fxx_msr.h>
+#include "cpu/amd/model_fxx/model_fxx_msr.h"
#include "superio/smsc/lpc47b397/lpc47b397_early_serial.c"
#include "cpu/amd/mtrr/amd_earlymtrr.c"
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/cache_as_ram_auto.c
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/cache_as_ram_auto.c 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/cache_as_ram_auto.c 2006-10-04 23:57:49 UTC (rev 2442)
@@ -6,7 +6,7 @@
//#define K8_SCAN_PCI_BUS 1
-#define K8_4RANK_DIMM_SUPPORT 1
+#define QRANK_DIMM_SUPPORT 1
#if CONFIG_LOGICAL_CPUS==1
#define SET_NB_CFG_54 1
@@ -21,31 +21,54 @@
#include <cpu/x86/lapic.h>
#include "option_table.h"
#include "pc80/mc146818rtc_early.c"
+
+#if USE_FAILOVER_IMAGE==0
#include "pc80/serial.c"
#include "arch/i386/lib/console.c"
#include "ram/ramtest.c"
+#if 0
+static void post_code(uint8_t value) {
+#if 1
+ int i;
+ for(i=0;i<0x8000;i++) {
+ outb(value, 0x80);
+ }
+#endif
+}
+#endif
+
#include <cpu/amd/model_fxx_rev.h>
+
#include "northbridge/amd/amdk8/incoherent_ht.c"
#include "southbridge/nvidia/ck804/ck804_early_smbus.c"
#include "northbridge/amd/amdk8/raminit.h"
#include "cpu/amd/model_fxx/apic_timer.c"
#include "lib/delay.c"
-#if CONFIG_USE_INIT == 0
-#include "lib/memcpy.c"
#endif
#include "cpu/x86/lapic/boot_cpu.c"
#include "northbridge/amd/amdk8/reset_test.c"
-#include "northbridge/amd/amdk8/debug.c"
#include "superio/smsc/lpc47b397/lpc47b397_early_serial.c"
+#include "superio/smsc/lpc47b397/lpc47b397_early_gpio.c"
+#define SUPERIO_GPIO_DEV PNP_DEV(0x2e, LPC47B397_RT)
-#include "cpu/amd/mtrr/amd_earlymtrr.c"
+#define SUPERIO_GPIO_IO_BASE 0x400
+
+#if USE_FAILOVER_IMAGE==0
+
#include "cpu/x86/bist.h"
-#include "superio/smsc/lpc47b397/lpc47b397_early_gpio.c"
+#if CONFIG_USE_INIT == 0
+#include "lib/memcpy.c"
+#endif
+#include "northbridge/amd/amdk8/debug.c"
+
+#include "cpu/amd/mtrr/amd_earlymtrr.c"
+
+
#include "northbridge/amd/amdk8/setup_resource_map.c"
#define SERIAL_DEV PNP_DEV(0x2e, LPC47B397_SP1)
@@ -58,10 +81,7 @@
{
}
-#define SUPERIO_GPIO_DEV PNP_DEV(0x2e, LPC47B397_RT)
-#define SUPERIO_GPIO_IO_BASE 0x400
-
static void sio_gpio_setup(void){
unsigned value;
@@ -94,6 +114,7 @@
#include "cpu/amd/dualcore/dualcore.c"
#define CK804_NUM 2
+#define CK804B_BUSN 0x80
#define CK804_USE_NIC 1
#define CK804_USE_ACI 1
@@ -116,8 +137,9 @@
#include "cpu/amd/model_fxx/init_cpus.c"
+#endif
-#if USE_FALLBACK_IMAGE == 1
+#if ((HAVE_FAILOVER_BOOT==1) && (USE_FAILOVER_IMAGE == 1)) || ((HAVE_FAILOVER_BOOT==0) && (USE_FALLBACK_IMAGE == 1))
#include "southbridge/nvidia/ck804/ck804_enable_rom.c"
#include "northbridge/amd/amdk8/early_ht.c"
@@ -133,7 +155,7 @@
pci_write_config32(PCI_DEV(0, CK804_DEVN_BASE+1, 0), 0xac, 0x047f0400);
- byte = pci_read_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0x7b);
+ byte = pci_read_config8(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0x7b);
byte |= 0x20;
pci_write_config8(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0x7b, byte);
@@ -141,13 +163,14 @@
dword |= (1<<29)|(1<<0);
pci_write_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0xa0, dword);
-#if 1
+ dword = pci_read_config32(PCI_DEV(0, CK804_DEVN_BASE+1, 0), 0xa4);
+ dword |= (1<<16);
+ pci_write_config32(PCI_DEV(0, CK804_DEVN_BASE+1 , 0), 0xa4, dword);
+
lpc47b397_enable_serial(SUPERIO_GPIO_DEV, SUPERIO_GPIO_IO_BASE);
-
value = lpc47b397_gpio_offset_in(SUPERIO_GPIO_IO_BASE, 0x77);
value &= 0xbf;
lpc47b397_gpio_offset_out(SUPERIO_GPIO_IO_BASE, 0x77, value);
-#endif
}
@@ -175,6 +198,7 @@
ck804_enable_rom();
/* Is this a deliberate reset by the bios */
+// post_code(0x22);
if (bios_reset_detected() && last_boot_normal_x) {
goto normal_image;
}
@@ -186,28 +210,43 @@
goto fallback_image;
}
normal_image:
+// post_code(0x23);
__asm__ volatile ("jmp __normal_image"
: /* outputs */
: "a" (bist), "b" (cpu_init_detectedx) /* inputs */
);
fallback_image:
+// post_code(0x25);
+#if HAVE_FAILOVER_BOOT==1
+ __asm__ volatile ("jmp __fallback_image"
+ : /* outputs */
+ : "a" (bist), "b" (cpu_init_detectedx) /* inputs */
+ )
+#endif
;
}
#endif
-
void real_main(unsigned long bist, unsigned long cpu_init_detectedx);
void cache_as_ram_main(unsigned long bist, unsigned long cpu_init_detectedx)
{
-
-#if USE_FALLBACK_IMAGE == 1
- failover_process(bist, cpu_init_detectedx);
+#if HAVE_FAILOVER_BOOT==1
+ #if USE_FAILOVER_IMAGE==1
+ failover_process(bist, cpu_init_detectedx);
+ #else
+ real_main(bist, cpu_init_detectedx);
+ #endif
+#else
+ #if USE_FALLBACK_IMAGE == 1
+ failover_process(bist, cpu_init_detectedx);
+ #endif
+ real_main(bist, cpu_init_detectedx);
#endif
- real_main(bist, cpu_init_detectedx);
-
}
+#if USE_FAILOVER_IMAGE==0
+
void real_main(unsigned long bist, unsigned long cpu_init_detectedx)
{
static const uint16_t spd_addr [] = {
@@ -229,6 +268,8 @@
bsp_apicid = init_cpus(cpu_init_detectedx);
}
+// post_code(0x32);
+
lpc47b397_enable_serial(SERIAL_DEV, TTYS0_BASE);
uart_init();
console_init();
@@ -236,15 +277,21 @@
/* Halt if there was a built in self test failure */
report_bist_failure(bist);
- setup_s2895_resource_map();
+ sio_gpio_setup();
+ setup_mb_resource_map();
+#if 0
+ dump_pci_device(PCI_DEV(0, 0x18, 0));
+ dump_pci_device(PCI_DEV(0, 0x19, 0));
+#endif
+
needs_reset = setup_coherent_ht_domain();
- wait_all_core0_started();
+ wait_all_core0_started();
#if CONFIG_LOGICAL_CPUS==1
// It is said that we should start core1 after all core0 launched
start_other_cores();
- wait_all_other_cores_started(bsp_apicid);
+ wait_all_other_cores_started(bsp_apicid);
#endif
needs_reset |= ht_setup_chains_x();
@@ -253,7 +300,7 @@
if (needs_reset) {
print_info("ht reset -\r\n");
- soft_reset();
+ // soft_reset();
}
allow_all_aps_stop(bsp_apicid);
@@ -263,9 +310,24 @@
fill_mem_ctrl(nodes, ctrl, spd_addr);
enable_smbus();
+#if 0
+ dump_spd_registers(&cpu[0]);
+#endif
+#if 0
+ dump_smbus_registers();
+#endif
memreset_setup();
sdram_initialize(nodes, ctrl);
+#if 0
+ print_pci_devices();
+#endif
+
+#if 0
+ dump_pci_devices();
+#endif
+
post_cache_as_ram();
}
+#endif
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/cmos.layout
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/cmos.layout 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/cmos.layout 2006-10-04 23:57:49 UTC (rev 2442)
@@ -78,10 +78,10 @@
7 9 Fallback_HDD
7 10 Fallback_Floppy
#7 3 ROM
-8 0 DDR400
-8 1 DDR333
-8 2 DDR266
-8 3 DDR200
+8 0 200Mhz
+8 1 166Mhz
+8 2 133Mhz
+8 3 100Mhz
9 0 off
9 1 87.5%
9 2 75.0%
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/get_bus_conf.c
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/get_bus_conf.c 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/get_bus_conf.c 2006-10-04 23:57:49 UTC (rev 2442)
@@ -7,7 +7,9 @@
#include <cpu/amd/dualcore.h>
#endif
+#include <cpu/amd/amdk8_sysconf.h>
+
// Global variables for MB layouts and these will be shared by irqtable mptable and acpi_tables
//busnum is default
unsigned char bus_isa;
@@ -31,8 +33,7 @@
unsigned apicid_8131_2;
unsigned apicid_ck804b;
-unsigned sblk;
-unsigned pci1234[] =
+unsigned pci1234x[] =
{ //Here you only need to set value in pci1234 for HT-IO that could be installed or not
//You may need to preset pci1234 for HTIO board, please refer to src/northbridge/amd/amdk8/get_sblk_pci1234.c for detail
0x0000ff0,
@@ -44,9 +45,7 @@
// 0x0000ff0,
// 0x0000ff0
};
-unsigned hc_possible_num;
-unsigned sbdn;
-unsigned hcdn[] =
+unsigned hcdnx[] =
{ //HT Chain device num, actually it is unit id base of every ht device in chain, assume every chain only have 4 ht device at most
0x20202020,
0x20202020,
@@ -68,26 +67,32 @@
{
unsigned apicid_base;
+ unsigned sbdn;
device_t dev;
+ int i;
- if(get_bus_conf_done==1) return; //do it only once
+ if(get_bus_conf_done==1) return; //do it only once
- get_bus_conf_done = 1;
+ get_bus_conf_done = 1;
- hc_possible_num = sizeof(pci1234)/sizeof(pci1234[0]);
-
- get_sblk_pci1234();
-
- sbdn = (hcdn[0] & 0xff); // first byte of first chain
+ sysconf.hc_possible_num = sizeof(pci1234x)/sizeof(pci1234x[0]);
+ for(i=0;i<sysconf.hc_possible_num; i++) {
+ sysconf.pci1234[i] = pci1234x[i];
+ sysconf.hcdn[i] = hcdnx[i];
+ }
- sbdn3 = (hcdn[1] & 0xff);
+ get_sblk_pci1234();
- sbdnb = (hcdn[2] & 0xff); // first byte of second chain
+ sysconf.sbdn = (sysconf.hcdn[0] & 0xff); // first byte of first chain
+ sbdn = sysconf.sbdn;
-// bus_ck804_0 = node_link_to_bus(0, sblk);
- bus_ck804_0 = (pci1234[0] >> 16) & 0xff;
+ sbdn3 = (sysconf.hcdn[1] & 0xff);
+ sbdnb = (sysconf.hcdn[2] & 0xff); // first byte of second chain
+
+ bus_ck804_0 = (sysconf.pci1234[0] >> 16) & 0xff;
+
/* CK804 */
dev = dev_find_slot(bus_ck804_0, PCI_DEVFN(sbdn + 0x09,0));
if (dev) {
@@ -158,7 +163,7 @@
printk_debug("ERROR - could not find PCI 1:%02x.0, using defaults\n", sbdn+ 0x0e);
}
- bus_8131_0 = (pci1234[1] >> 16) & 0xff;
+ bus_8131_0 = (sysconf.pci1234[1] >> 16) & 0xff;
/* 8131-1 */
dev = dev_find_slot(bus_8131_0, PCI_DEVFN(sbdn3,0));
if (dev) {
@@ -187,8 +192,8 @@
/* CK804b */
- if(pci1234[2] & 0xf) { //if the second cpu is installed
- bus_ck804b_0 = (pci1234[2]>>16) & 0xff;
+ if(sysconf.pci1234[2] & 0x0f) { //if the second cpu is installed
+ bus_ck804b_0 = (sysconf.pci1234[2]>>16) & 0xff;
#if 0
dev = dev_find_slot(bus_ck804b_0, PCI_DEVFN(sbdnb + 0x09,0));
if (dev) {
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/irq_tables.c
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/irq_tables.c 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/irq_tables.c 2006-10-04 23:57:49 UTC (rev 2442)
@@ -10,6 +10,8 @@
#include <stdint.h>
#include <arch/pirq_routing.h>
+#include <cpu/amd/amdk8_sysconf.h>
+
static void write_pirq_info(struct irq_info *pirq_info, uint8_t bus, uint8_t devfn, uint8_t link0, uint16_t bitmap0,
uint8_t link1, uint16_t bitmap1, uint8_t link2, uint16_t bitmap2,uint8_t link3, uint16_t bitmap3,
uint8_t slot, uint8_t rfu)
@@ -44,10 +46,7 @@
extern unsigned char bus_ck804b_4;//e
extern unsigned char bus_ck804b_5;//f
-extern unsigned pci1234[];
-extern unsigned sbdn;
-extern unsigned hcdn[];
extern unsigned sbdn3;
extern unsigned sbdnb;
@@ -58,11 +57,13 @@
struct irq_info *pirq_info;
unsigned slot_num;
uint8_t *v;
+ unsigned sbdn;
uint8_t sum=0;
int i;
get_bus_conf(); // it will find out all bus num and apic that share with mptable.c and mptable.c and acpi_tables.c
+ sbdn = sysconf.sbdn;
/* Align the table to be 16 byte aligned. */
addr += 15;
@@ -98,7 +99,7 @@
write_pirq_info(pirq_info, bus_8131_0, (sbdn3<<3)|0, 0x1, 0xdef8, 0x2, 0xdef8, 0x3, 0xdef8, 0x4, 0xdef8, 0, 0);
pirq_info++; slot_num++;
- if(pci1234[2] & 0xf) {
+ if(sysconf.pci1234[2] & 0xf) {
//second pci beidge
write_pirq_info(pirq_info, bus_ck804b_0, ((sbdnb+9)<<3)|0, 0x1, 0xdef8, 0x2, 0xdef8, 0x3, 0xdef8, 0x4, 0xdef8, 0x0, 0);
pirq_info++; slot_num++;
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/mptable.c
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/mptable.c 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/mptable.c 2006-10-04 23:57:49 UTC (rev 2442)
@@ -4,6 +4,8 @@
#include <string.h>
#include <stdint.h>
+#include <cpu/amd/amdk8_sysconf.h>
+
extern unsigned char bus_isa;
extern unsigned char bus_ck804_0; //1
extern unsigned char bus_ck804_1; //2
@@ -25,10 +27,6 @@
extern unsigned apicid_8131_2;
extern unsigned apicid_ck804b;
-extern unsigned pci1234[];
-
-extern unsigned sbdn;
-extern unsigned hcdn[];
extern unsigned sbdn3;
extern unsigned sbdnb;
@@ -38,6 +36,7 @@
static const char oem[8] = "TYAN ";
static const char productid[12] = "S2895 ";
struct mp_config_table *mc;
+ unsigned sbdn;
unsigned char bus_num;
int i;
@@ -62,6 +61,7 @@
smp_write_processors(mc);
get_bus_conf();
+ sbdn = sysconf.sbdn;
/*Bus: Bus ID Type*/
/* define bus and isa numbers */
@@ -83,6 +83,7 @@
smp_write_ioapic(mc, apicid_ck804, 0x11, res->base);
}
+ /* Initialize interrupt mapping*/
dword = 0x0000d218;
pci_write_config32(dev, 0x7c, dword);
@@ -110,7 +111,7 @@
}
}
- if(pci1234[2] & 0xf) {
+ if(sysconf.pci1234[2] & 0xf) {
dev = dev_find_slot(bus_ck804b_0, PCI_DEVFN(sbdnb + 0x1,0));
if (dev) {
res = find_resource(dev, PCI_BASE_ADDRESS_1);
@@ -181,7 +182,7 @@
smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, bus_ck804_1, (0x04<<2)|i, apicid_ck804, 0x10 + (0+i)%4);
}
- if(pci1234[2] & 0xf) {
+ if(sysconf.pci1234[2] & 0xf) {
//Onboard ck804b NIC
smp_write_intsrc(mc, mp_INT, MP_IRQ_TRIGGER_LEVEL|MP_IRQ_POLARITY_LOW, bus_ck804b_0, ((sbdnb+0x0a)<<2)|0, apicid_ck804b, 0x15);//24+4+4+21=53
Modified: trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/resourcemap.c
===================================================================
--- trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/resourcemap.c 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/src/mainboard/tyan/s2895/resourcemap.c 2006-10-04 23:57:49 UTC (rev 2442)
@@ -3,7 +3,7 @@
*
*/
-static void setup_s2895_resource_map(void)
+static void setup_mb_resource_map(void)
{
static const unsigned int register_values[] = {
/* Careful set limit registers before base registers which contain the enables */
@@ -183,7 +183,7 @@
* [31:25] Reserved
*/
PCI_ADDR(0, 0x18, 1, 0xC4), 0xFE000FC8, 0x00007000,
- PCI_ADDR(0, 0x18, 1, 0xCC), 0xFE000FC8, 0x01fff001,
+ PCI_ADDR(0, 0x18, 1, 0xCC), 0xFE000FC8, 0x01fff001, // need to talk to ANALOG of second CK804 to release PCI E reset
PCI_ADDR(0, 0x18, 1, 0xD4), 0xFE000FC8, 0x00000000,
PCI_ADDR(0, 0x18, 1, 0xDC), 0xFE000FC8, 0x00000000,
@@ -253,10 +253,10 @@
* [31:24] Bus Number Limit i
* This field defines the highest bus number in configuration region i
*/
- PCI_ADDR(0, 0x18, 1, 0xE0), 0x0000FC88, 0x07000003,
- PCI_ADDR(0, 0x18, 1, 0xE4), 0x0000FC88, 0x7f080203,
- PCI_ADDR(0, 0x18, 1, 0xE8), 0x0000FC88, 0xff800013,
- PCI_ADDR(0, 0x18, 1, 0xEC), 0x0000FC88, 0x00000000,
+ PCI_ADDR(0, 0x18, 1, 0xE0), 0x0000FC88, 0x07000003, /* link 0 of cpu 0 --> Nvidia CK 804 Pro */
+ PCI_ADDR(0, 0x18, 1, 0xE4), 0x0000FC88, 0x7f080203, /* link 2 of cpu 0 --> AMD8131 */
+ PCI_ADDR(0, 0x18, 1, 0xE8), 0x0000FC88, 0xff800013, /* link 0 of cpu 1 --> Nvidia CK 804 Slave */
+ PCI_ADDR(0, 0x18, 1, 0xEC), 0x0000FC88, 0x00000000, /*113 link 1 of cpu 1 --> HT connector */
};
Modified: trunk/LinuxBIOSv2/targets/tyan/s2895/Config.lb
===================================================================
--- trunk/LinuxBIOSv2/targets/tyan/s2895/Config.lb 2006-10-04 23:09:09 UTC (rev 2441)
+++ trunk/LinuxBIOSv2/targets/tyan/s2895/Config.lb 2006-10-04 23:57:49 UTC (rev 2442)
@@ -8,13 +8,14 @@
# Tyan s2895
romimage "normal"
# 48K for SCSI FW
-# option ROM_SIZE = 512*1024-48*1024
+# option ROM_SIZE = 475136
# 48K for SCSI FW and 48K for ATI ROM
-# option ROM_SIZE = 512*1024-48*1024-48*1024
+# option ROM_SIZE = 425984
# 64K for Etherboot
-# option ROM_SIZE = 512*1024-64*1024
+# option ROM_SIZE = 458752
# 64K for NIC option 48K for Raid option rom
-# option ROM_SIZE = 512*1024-64*1024-48*1024
+# option ROM_SIZE = 409600
+ option USE_FAILOVER_IMAGE=0
option USE_FALLBACK_IMAGE=0
# option ROM_IMAGE_SIZE=0x11800
# option ROM_IMAGE_SIZE=0x13800
@@ -44,6 +45,7 @@
end
romimage "fallback"
+ option USE_FAILOVER_IMAGE=0
option USE_FALLBACK_IMAGE=1
# option ROM_IMAGE_SIZE=0x11800
# option ROM_IMAGE_SIZE=0x13800
@@ -69,4 +71,14 @@
# payload ../../../payloads/tg3--eepro100--e1000--filo_hda2.zelf
end
-buildrom ./linuxbios.rom ROM_SIZE "normal" "fallback"
+romimage "failover"
+ option USE_FAILOVER_IMAGE=1
+ option USE_FALLBACK_IMAGE=0
+ option ROM_IMAGE_SIZE=FAILOVER_SIZE
+ option XIP_ROM_SIZE=FAILOVER_SIZE
+ option LINUXBIOS_EXTRA_VERSION="$(shell cat ../../VERSION)_Failover"
+end
+
+
+buildrom ./linuxbios.rom ROM_SIZE "normal" "fallback" "failover"
+#buildrom ./linuxbios.rom ROM_SIZE "normal" "fallback"