[coreboot] r807 - in coreboot-v3: arch/x86 include include/arch/x86/amd/k8 lib mainboard/amd/serengeti mainboard/gigabyte/m57sli northbridge/amd/k8
svn at coreboot.org
svn at coreboot.org
Sat Aug 23 18:51:01 CEST 2008
Author: rminnich
Date: 2008-08-23 18:51:00 +0200 (Sat, 23 Aug 2008)
New Revision: 807
Modified:
coreboot-v3/arch/x86/stage1.c
coreboot-v3/include/arch/x86/amd/k8/k8.h
coreboot-v3/include/lib.h
coreboot-v3/lib/delay.c
coreboot-v3/mainboard/amd/serengeti/Makefile
coreboot-v3/mainboard/amd/serengeti/mainboard.h
coreboot-v3/mainboard/gigabyte/m57sli/Makefile
coreboot-v3/northbridge/amd/k8/common.c
coreboot-v3/northbridge/amd/k8/domain.c
coreboot-v3/northbridge/amd/k8/pci.c
coreboot-v3/northbridge/amd/k8/raminit.c
Log:
This now compiles and has a simple error on build to stage2.
Geode still builds fine.
include/lib.h includes a new function, cycles(), which is a u64 and
architecture-defined. (Thanks, Plan 9, for a sensible idea).
All rdtsc removed in favor of cycles()
All other changes are k8 specific. None of these changes adversely
impact existing platforms AFAICT.
Goal is that by 31/8/8, we're testing on simnow.
Signed-off-by: Ronald G. Minnich <rminnich at gmail.com>
Acked-by: Ronald G. Minnich <rminnich at gmail.com>
Modified: coreboot-v3/arch/x86/stage1.c
===================================================================
--- coreboot-v3/arch/x86/stage1.c 2008-08-22 19:42:45 UTC (rev 806)
+++ coreboot-v3/arch/x86/stage1.c 2008-08-23 16:51:00 UTC (rev 807)
@@ -109,6 +109,16 @@
return;
}
+/** cycles
+ * provide 64-bit high precision counter
+ * @returns Time in 64 bits
+ */
+u64 cycles(void)
+{
+ u64 ret;
+ asm volatile ("rdtsc" : "=A" (ret));
+ return ret;
+}
#ifdef CONFIG_PAYLOAD_ELF_LOADER
/* until we get rid of elf */
Modified: coreboot-v3/include/arch/x86/amd/k8/k8.h
===================================================================
--- coreboot-v3/include/arch/x86/amd/k8/k8.h 2008-08-22 19:42:45 UTC (rev 806)
+++ coreboot-v3/include/arch/x86/amd/k8/k8.h 2008-08-23 16:51:00 UTC (rev 807)
@@ -512,6 +512,8 @@
#define NBCAP_CmpCap_SHIFT 12
#define NBCAP_CmpCap_MASK 3
+/* other hypertransport constants */
+#define HT_INIT_CONTROL 0x6c
#define LinkConnected (1 << 0)
#define InitComplete (1 << 1)
@@ -619,4 +621,12 @@
unsigned get_apicid_base(unsigned ioapic_num);
void amd_sibling_init(struct device *cpu);
+/* memory hole management */
+struct hw_mem_hole_info {
+ unsigned hole_startk;
+ int node_id;
+};
+
+struct hw_mem_hole_info get_hw_mem_hole_info(void);
+
#endif /* ! ASSEMBLY */
Modified: coreboot-v3/include/lib.h
===================================================================
--- coreboot-v3/include/lib.h 2008-08-22 19:42:45 UTC (rev 806)
+++ coreboot-v3/include/lib.h 2008-08-23 16:51:00 UTC (rev 807)
@@ -34,6 +34,12 @@
void mdelay(unsigned int msecs);
void delay(unsigned int secs);
+/* all architectures must implement a 64-bit time counter
+ * that is compiled into stage1
+ * rdtsc is usually fine.
+ */
+u64 cycles(void);
+
void beep_short(void);
void beep_long(void);
Modified: coreboot-v3/lib/delay.c
===================================================================
--- coreboot-v3/lib/delay.c 2008-08-22 19:42:45 UTC (rev 806)
+++ coreboot-v3/lib/delay.c 2008-08-23 16:51:00 UTC (rev 807)
@@ -18,6 +18,7 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA, 02110-1301 USA
*/
+#include <types.h>
#include <lib.h>
void mdelay(unsigned int msecs)
Modified: coreboot-v3/mainboard/amd/serengeti/Makefile
===================================================================
--- coreboot-v3/mainboard/amd/serengeti/Makefile 2008-08-22 19:42:45 UTC (rev 806)
+++ coreboot-v3/mainboard/amd/serengeti/Makefile 2008-08-23 16:51:00 UTC (rev 807)
@@ -31,6 +31,7 @@
INITRAM_SRC= $(src)/mainboard/$(MAINBOARDDIR)/initram.c \
$(src)/northbridge/amd/k8/raminit.c \
+ $(src)/northbridge/amd/k8/dqs.c \
$(src)/arch/x86/pci_ops_conf1.c \
$(src)/southbridge/amd/amd8111/stage1_smbus.c \
$(src)/lib/clog2.c
Modified: coreboot-v3/mainboard/amd/serengeti/mainboard.h
===================================================================
--- coreboot-v3/mainboard/amd/serengeti/mainboard.h 2008-08-22 19:42:45 UTC (rev 806)
+++ coreboot-v3/mainboard/amd/serengeti/mainboard.h 2008-08-23 16:51:00 UTC (rev 807)
@@ -22,4 +22,5 @@
*/
#define CPU_SOCKET_TYPE SOCKET_AM2
-#define MEM_TRAIN_SEQ 1 /* for now */
+#define MEM_TRAIN_SEQ 0 /* for now */
+#define HW_MEM_HOLE_SIZE_AUTO_INC 0
Modified: coreboot-v3/mainboard/gigabyte/m57sli/Makefile
===================================================================
--- coreboot-v3/mainboard/gigabyte/m57sli/Makefile 2008-08-22 19:42:45 UTC (rev 806)
+++ coreboot-v3/mainboard/gigabyte/m57sli/Makefile 2008-08-23 16:51:00 UTC (rev 807)
@@ -28,6 +28,7 @@
INITRAM_SRC= $(src)/mainboard/$(MAINBOARDDIR)/initram.c \
$(src)/northbridge/amd/k8/raminit.c \
+ $(src)/northbridge/amd/k8/dqs.c \
$(src)/southbridge/nvidia/mcp55/stage1_smbus.c \
$(src)/lib/clog2.c
Modified: coreboot-v3/northbridge/amd/k8/common.c
===================================================================
--- coreboot-v3/northbridge/amd/k8/common.c 2008-08-22 19:42:45 UTC (rev 806)
+++ coreboot-v3/northbridge/amd/k8/common.c 2008-08-23 16:51:00 UTC (rev 807)
@@ -45,10 +45,11 @@
#include <lib.h>
#include <lapic.h>
+/*
#if CONFIG_HW_MEM_HOLE_SIZEK != 0
#include <cpu/amd/model_fxx_rev.h>
#endif
-
+*/
struct amdk8_sysconf sysconf;
#define FX_DEVS 8
@@ -116,11 +117,6 @@
#if CONFIG_HW_MEM_HOLE_SIZEK != 0
-struct hw_mem_hole_info {
- unsigned hole_startk;
- int node_id;
-};
-
struct hw_mem_hole_info get_hw_mem_hole_info(void)
{
struct hw_mem_hole_info mem_hole;
@@ -215,7 +211,7 @@
}
-static u32 hoist_memory(unsigned long hole_startk, int i)
+u32 hoist_memory(unsigned long hole_startk, int i)
{
int ii;
u32 carry_over;
Modified: coreboot-v3/northbridge/amd/k8/domain.c
===================================================================
--- coreboot-v3/northbridge/amd/k8/domain.c 2008-08-22 19:42:45 UTC (rev 806)
+++ coreboot-v3/northbridge/amd/k8/domain.c 2008-08-23 16:51:00 UTC (rev 807)
@@ -44,8 +44,8 @@
#include <mc146818rtc.h>
#include <lib.h>
#include <lapic.h>
+#include <mainboard.h>
-
#ifdef CONFIG_PCI_64BIT_PREF_MEM
#define BRIDGE_IO_MASK (IORESOURCE_IO | IORESOURCE_MEM | IORESOURCE_PREFETCH)
#endif
@@ -166,8 +166,11 @@
static void k8_pci_domain_set_resources(struct device * dev)
{
+#if CONFIG_HW_MEM_HOLE_SIZEK != 0
struct hw_mem_hole_info get_hw_mem_hole_info(void);
void disable_hoist_memory(unsigned long hole_startk, int i);
+ u32 hoist_memory(unsigned long hole_startk, int i);
+#endif
#if CONFIG_PCI_64BIT_PREF_MEM == 1
struct resource *io, *mem1, *mem2;
struct resource *resource, *last;
Modified: coreboot-v3/northbridge/amd/k8/pci.c
===================================================================
--- coreboot-v3/northbridge/amd/k8/pci.c 2008-08-22 19:42:45 UTC (rev 806)
+++ coreboot-v3/northbridge/amd/k8/pci.c 2008-08-23 16:51:00 UTC (rev 807)
@@ -45,10 +45,6 @@
#include <lib.h>
#include <lapic.h>
-#if CONFIG_HW_MEM_HOLE_SIZEK != 0
-#include <cpu/amd/model_fxx_rev.h>
-#endif
-
#define FX_DEVS 8
extern struct device * __f0_dev[FX_DEVS];
extern struct device * __f1_dev[FX_DEVS];
Modified: coreboot-v3/northbridge/amd/k8/raminit.c
===================================================================
--- coreboot-v3/northbridge/amd/k8/raminit.c 2008-08-22 19:42:45 UTC (rev 806)
+++ coreboot-v3/northbridge/amd/k8/raminit.c 2008-08-23 16:51:00 UTC (rev 807)
@@ -60,7 +60,7 @@
#endif
/* bit [10,8] are dev func, bit[1,0] are dev index */
-static u32 pci_read_config32_index(u32 dev, u32 index_reg, u32 index)
+u32 pci_read_config32_index(u32 dev, u32 index_reg, u32 index)
{
u32 dword;
@@ -71,7 +71,7 @@
return dword;
}
-static void pci_write_config32_index(u32 dev, u32 index_reg, u32 index, u32 data)
+void pci_write_config32_index(u32 dev, u32 index_reg, u32 index, u32 data)
{
pci_conf1_write_config32(dev, index_reg, index);
@@ -80,7 +80,7 @@
}
-static u32 pci_read_config32_index_wait(u32 dev, u32 index_reg, u32 index)
+u32 pci_read_config32_index_wait(u32 dev, u32 index_reg, u32 index)
{
u32 dword;
@@ -97,7 +97,7 @@
return dword;
}
-static void pci_write_config32_index_wait(u32 dev, u32 index_reg, u32 index, u32 data)
+void pci_write_config32_index_wait(u32 dev, u32 index_reg, u32 index, u32 data)
{
u32 dword;
@@ -2685,7 +2685,58 @@
}
#endif
+static void wait_all_core0_mem_trained(struct sys_info *sysinfo)
+{
+ int i;
+ u32 mask = 0;
+ unsigned int needs_reset = 0;
+ void hard_reset(void);
+
+ if(sysinfo->nodes == 1) return; // in case only one cpu installed
+
+ for(i=1; i<sysinfo->nodes; i++) {
+ /* Skip everything if I don't have any memory on this controller */
+ if(sysinfo->mem_trained[i]==0x00) continue;
+
+ mask |= (1<<i);
+
+ }
+
+ i = 1;
+ while(1) {
+ if(mask & (1<<i)) {
+ if((sysinfo->mem_trained[i])!=0x80) {
+ mask &= ~(1<<i);
+ }
+ }
+
+ if(!mask) break;
+
+ i++;
+ i%=sysinfo->nodes;
+ }
+
+ for(i=0; i<sysinfo->nodes; i++) {
+ printk(BIOS_DEBUG, "mem_trained[%02x]=%02x\n", i, sysinfo->mem_trained[i]);
+ switch(sysinfo->mem_trained[i]) {
+ case 0: //don't need train
+ case 1: //trained
+ break;
+ case 0x81: //recv1: fail
+ case 0x82: //Pos :fail
+ case 0x83: //recv2: fail
+ needs_reset = 1;
+ break;
+ }
+ }
+ if(needs_reset) {
+ printk(BIOS_DEBUG, "mem trained failed\n");
+ hard_reset();
+ }
+
+}
+
void sdram_enable(int controllers, const struct mem_controller *ctrl, struct sys_info *sysinfo)
{
int i;
@@ -2868,7 +2919,7 @@
#if MEM_TRAIN_SEQ == 0
- #ifdef
+ #ifdef K8_REV_F_SUPPORT_F0_F1_WORKAROUND
dqs_timing(controllers, ctrl, tsc0, sysinfo);
#else
dqs_timing(controllers, ctrl, sysinfo);
More information about the coreboot
mailing list