Patrick Georgi (patrick(a)georgi-clan.de) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/184
-gerrit
commit b8fe009787a26f079b236a26ebc0c6e676c0c884
Author: Stefan Reinauer <stefan.reinauer(a)coreboot.org>
Date: Fri Apr 1 22:33:25 2011 +0200
Report GSE chipset and warn if the code has been compiled for the wrong chipset.
It would be nicer to unify the code so that it does all detection at runtime
instead of compile time (but that would also significantly increase code size)
so if someone else wants to give it a shot...
Change-Id: Idc67bdf7a6ff2b78dc8fc67a0da5ae7a4c0a3bf0
Signed-off-by: Stefan Reinauer <stefan.reinauer(a)coreboot.org>
Signed-off-by: Patrick Georgi <patrick(a)georgi-clan.de>
---
src/northbridge/intel/i945/early_init.c | 8 +++++++-
1 files changed, 7 insertions(+), 1 deletions(-)
diff --git a/src/northbridge/intel/i945/early_init.c b/src/northbridge/intel/i945/early_init.c
index 21efc37..197c58f 100644
--- a/src/northbridge/intel/i945/early_init.c
+++ b/src/northbridge/intel/i945/early_init.c
@@ -42,7 +42,7 @@ static void i945m_detect_chipset(void)
printk(BIOS_INFO, "Mobile Intel(R) 82945GM/GME Express");
break;
case 2:
- printk(BIOS_INFO, "Mobile Intel(R) 82945GMS/GU Express");
+ printk(BIOS_INFO, "Mobile Intel(R) 82945GMS/GU/GSE Express");
break;
case 3:
printk(BIOS_INFO, "Mobile Intel(R) 82945PM Express");
@@ -91,6 +91,9 @@ static void i945m_detect_chipset(void)
printk(BIOS_INFO, "unknown max. RAM clock (%02x).", reg8); /* Others reserved. */
}
printk(BIOS_DEBUG, "\n");
+#if defined(CONFIG_NORTHBRIDGE_INTEL_I945GC)
+ printk(BIOS_ERR, "coreboot is compiled for the wrong chipset.\n");
+#endif
}
static void i945_detect_chipset(void)
@@ -137,6 +140,9 @@ static void i945_detect_chipset(void)
printk(BIOS_INFO, "unknown max. RAM clock (%02x).", reg8); /* Others reserved. */
}
printk(BIOS_DEBUG, "\n");
+#if defined(CONFIG_NORTHBRIDGE_INTEL_I945GM)
+ printk(BIOS_ERR, "coreboot is compiled for the wrong chipset.\n");
+#endif
}
static void i945_setup_bars(void)
Rudolf Marek (r.marek(a)assembler.cz) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/178
-gerrit
commit 5ef3380428f35b9196ecfe7f52281bb26080c364
Author: Rudolf Marek <r.marek(a)assembler.cz>
Date: Fri Sep 2 23:23:41 2011 +0200
Add support for the tracing infastructure in coreboot.
The compiler is forced to emmit special functions on every
entry/exit of the function. Add a compile time option
to support it. Function entries will be printed in
the console. The CONFIG_TRACE has more documentation.
Patch for userspace tools will follow.
Change-Id: I2cbeb3f104892b034c8756f86ed05bf71187c3f3
Signed-off-by: Rudolf Marek <r.marek(a)assembler.cz>
---
Makefile.inc | 4 +++
src/Kconfig | 9 ++++++++
src/console/printk.c | 3 ++
src/console/vsprintf.c | 3 ++
src/include/trace.h | 54 ++++++++++++++++++++++++++++++++++++++++++++++++
src/lib/Makefile.inc | 1 +
src/lib/trace.c | 39 ++++++++++++++++++++++++++++++++++
src/lib/uart8250.c | 4 +++
8 files changed, 117 insertions(+), 0 deletions(-)
diff --git a/Makefile.inc b/Makefile.inc
index 37e4fb6..167ab5b 100644
--- a/Makefile.inc
+++ b/Makefile.inc
@@ -51,6 +51,10 @@ classes-y := ramstage romstage driver smm
romstage-c-ccopts:=-D__PRE_RAM__
romstage-S-ccopts:=-D__PRE_RAM__
+ifeq ($(CONFIG_TRACE),y)
+ramstage-c-ccopts:= -finstrument-functions
+endif
+
smm-c-ccopts:=-D__SMM__
smm-S-ccopts:=-D__SMM__
diff --git a/src/Kconfig b/src/Kconfig
index f96c903..e9ceed5 100644
--- a/src/Kconfig
+++ b/src/Kconfig
@@ -845,6 +845,15 @@ config LLSHELL
Put llshell() in your (romstage) code to start the shell.
See src/arch/x86/llshell/llshell.inc for details.
+config TRACE
+ bool "Trace function calls"
+ default n
+ help
+ If enabled, every function will print information to console once
+ the function is entered. The syntax is ~0xaaaabbbb(0xccccdddd)
+ the 0xaaaabbbb is the actual function and 0xccccdddd is EIP
+ of calling function. Please note some printk releated functions
+ are omitted from trace to have good looking console dumps.
endmenu
config LIFT_BSP_APIC_ID
diff --git a/src/console/printk.c b/src/console/printk.c
index 488d4e5..7549088 100644
--- a/src/console/printk.c
+++ b/src/console/printk.c
@@ -8,6 +8,7 @@
#include <smp/spinlock.h>
#include <console/vtxprintf.h>
#include <console/console.h>
+#include <trace.h>
int console_loglevel = CONFIG_DEFAULT_CONSOLE_LOGLEVEL;
int default_console_loglevel = CONFIG_DEFAULT_CONSOLE_LOGLEVEL;
@@ -23,6 +24,7 @@ int do_printk(int msg_level, const char *fmt, ...)
return 0;
}
+ DISABLE_TRACE;
spin_lock(&console_lock);
va_start(args, fmt);
@@ -32,6 +34,7 @@ int do_printk(int msg_level, const char *fmt, ...)
console_tx_flush();
spin_unlock(&console_lock);
+ ENABLE_TRACE;
return i;
}
diff --git a/src/console/vsprintf.c b/src/console/vsprintf.c
index 4a74523..435401b 100644
--- a/src/console/vsprintf.c
+++ b/src/console/vsprintf.c
@@ -22,6 +22,7 @@
#include <string.h>
#include <smp/spinlock.h>
#include <console/vtxprintf.h>
+#include <trace.h>
DECLARE_SPIN_LOCK(vsprintf_lock)
@@ -37,6 +38,7 @@ static int vsprintf(char *buf, const char *fmt, va_list args)
{
int i;
+ DISABLE_TRACE;
spin_lock(&vsprintf_lock);
str_buf = buf;
@@ -44,6 +46,7 @@ static int vsprintf(char *buf, const char *fmt, va_list args)
*str_buf = '\0';
spin_unlock(&vsprintf_lock);
+ ENABLE_TRACE;
return i;
}
diff --git a/src/include/trace.h b/src/include/trace.h
new file mode 100644
index 0000000..ff5b6c2
--- /dev/null
+++ b/src/include/trace.h
@@ -0,0 +1,54 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2011 Rudolf Marek <r.marek(a)assembler.cz>
+ *
+ * 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
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef __TRACE_H
+#define __TRACE_H
+
+
+#ifdef __PRE_RAM__
+
+#define DISABLE_TRACE
+#define ENABLE_TRACE
+#define DISABLE_TRACE_ON_FUNCTION
+
+#else /* !__PRE_RAM__ */
+
+#if CONFIG_TRACE
+
+void __cyg_profile_func_enter( void *, void * )
+ __attribute__ ((no_instrument_function));
+
+void __cyg_profile_func_exit( void *, void * )
+ __attribute__ ((no_instrument_function));
+
+extern volatile int trace_dis;
+
+#define DISABLE_TRACE do { trace_dis = 1; } while (0);
+#define ENABLE_TRACE do { trace_dis = 0; } while (0);
+#define DISABLE_TRACE_ON_FUNCTION __attribute__ ((no_instrument_function));
+
+#else /* !CONFIG_TRACE */
+
+#define DISABLE_TRACE
+#define ENABLE_TRACE
+#define DISABLE_TRACE_ON_FUNCTION
+
+#endif
+#endif
+#endif
diff --git a/src/lib/Makefile.inc b/src/lib/Makefile.inc
index 54935ca..b207ffe 100644
--- a/src/lib/Makefile.inc
+++ b/src/lib/Makefile.inc
@@ -33,6 +33,7 @@ ramstage-$(CONFIG_CONSOLE_SERIAL8250) += uart8250.c
ramstage-$(CONFIG_CONSOLE_SERIAL8250MEM) += uart8250mem.c
ramstage-$(CONFIG_USBDEBUG) += usbdebug.c
ramstage-$(CONFIG_BOOTSPLASH) += jpeg.c
+ramstage-$(CONFIG_TRACE) += trace.c
driver-$(CONFIG_CONSOLE_NE2K) += ne2k.c
diff --git a/src/lib/trace.c b/src/lib/trace.c
new file mode 100644
index 0000000..8736c82
--- /dev/null
+++ b/src/lib/trace.c
@@ -0,0 +1,39 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2011 Rudolf Marek <r.marek(a)assembler.cz>
+ *
+ * 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
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <types.h>
+#include <console/console.h>
+#include <trace.h>
+
+int volatile trace_dis = 0;
+
+void __cyg_profile_func_enter( void *func, void *callsite)
+{
+
+ if (trace_dis)
+ return;
+
+ DISABLE_TRACE
+ printk(BIOS_INFO, "~0x%08x(0x%08x)\n", (uint32_t) func, (uint32_t) callsite);
+ ENABLE_TRACE
+}
+
+void __cyg_profile_func_exit( void *func, void *callsite )
+{
+}
diff --git a/src/lib/uart8250.c b/src/lib/uart8250.c
index e7ddd0b..b224671 100644
--- a/src/lib/uart8250.c
+++ b/src/lib/uart8250.c
@@ -21,6 +21,8 @@
#include <arch/io.h>
#include <uart8250.h>
#include <pc80/mc146818rtc.h>
+#include <trace.h>
+
#if CONFIG_USE_OPTION_TABLE
#include "option_table.h"
#endif
@@ -69,6 +71,7 @@ unsigned char uart8250_rx_byte(unsigned base_port)
void uart8250_init(unsigned base_port, unsigned divisor)
{
+ DISABLE_TRACE;
/* Disable interrupts */
outb(0x0, base_port + UART_IER);
/* Enable FIFOs */
@@ -86,6 +89,7 @@ void uart8250_init(unsigned base_port, unsigned divisor)
/* Set to 3 for 8N1 */
outb(CONFIG_TTYS0_LCS, base_port + UART_LCR);
+ ENABLE_TRACE;
}
void uart_init(void)