[coreboot-gerrit] Patch set updated for coreboot: coreinfo: Add support to read timestamps

Antonello Dettori (dev@dettori.io) gerrit at coreboot.org
Tue Jul 12 10:32:43 CEST 2016


Antonello Dettori (dev at dettori.io) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/15600

-gerrit

commit bd103c457189a2fc46846565ac893edb8c5ab7ba
Author: Antonello Dettori <dev at dettori.io>
Date:   Fri Jul 8 11:14:40 2016 +0200

    coreinfo: Add support to read timestamps
    
    Read timestamps from the last boot sequence and display the information
    as if using cbmem -t.
    
    Currently only tested on QEMU with a SeaBIOS payload.
    
    Change-Id: I44f1f6d6e4ef5458aca555c8a7d32cc8aae46502
    Signed-off-by: Antonello Dettori <dev at dettori.io>
---
 payloads/coreinfo/Kconfig                          |   6 +
 payloads/coreinfo/Makefile                         |   2 +-
 payloads/coreinfo/coreinfo.c                       |   4 +
 payloads/coreinfo/timestamps_module.c              | 288 +++++++++++++++++++++
 .../include/commonlib/timestamp_serialized.h       |  98 +++++++
 util/cbmem/cbmem.c                                 |  77 ------
 6 files changed, 397 insertions(+), 78 deletions(-)

diff --git a/payloads/coreinfo/Kconfig b/payloads/coreinfo/Kconfig
index e71599c..fd4c1b4 100644
--- a/payloads/coreinfo/Kconfig
+++ b/payloads/coreinfo/Kconfig
@@ -104,4 +104,10 @@ config MODULE_CBFS
 	help
 	  This option will increase the ELF file size by ca. 1440 bytes.
 
+config MODULE_TIMESTAMPS
+	bool "Enable the coreboot timestamps module"
+	default y
+	help
+	  This option will increase the ELF file size by ca. 4200 bytes.
+
 endmenu
diff --git a/payloads/coreinfo/Makefile b/payloads/coreinfo/Makefile
index 7c2e636..59e85bc 100644
--- a/payloads/coreinfo/Makefile
+++ b/payloads/coreinfo/Makefile
@@ -56,7 +56,7 @@ OBJCOPY ?= objcopy
 INCLUDES = -I$(coreinfo_obj) -include $(LIBPAYLOAD_OBJ)/include/kconfig.h
 OBJECTS = cpuinfo_module.o cpuid.S.o pci_module.o coreboot_module.o \
 	  nvram_module.o bootlog_module.o ramdump_module.o \
-	  multiboot_module.o cbfs_module.o coreinfo.o
+	  multiboot_module.o cbfs_module.o timestamps_module.o coreinfo.o
 OBJS    = $(patsubst %,$(coreinfo_obj)/%,$(OBJECTS))
 TARGET  = $(coreinfo_obj)/coreinfo.elf
 
diff --git a/payloads/coreinfo/coreinfo.c b/payloads/coreinfo/coreinfo.c
index cb42df4..3fb2f72 100644
--- a/payloads/coreinfo/coreinfo.c
+++ b/payloads/coreinfo/coreinfo.c
@@ -25,6 +25,7 @@ extern struct coreinfo_module nvram_module;
 extern struct coreinfo_module bootlog_module;
 extern struct coreinfo_module ramdump_module;
 extern struct coreinfo_module cbfs_module;
+extern struct coreinfo_module timestamps_module;
 
 struct coreinfo_module *system_modules[] = {
 #if IS_ENABLED(CONFIG_MODULE_CPUINFO)
@@ -54,6 +55,9 @@ struct coreinfo_module *firmware_modules[] = {
 #if IS_ENABLED(CONFIG_MODULE_CBFS)
 	&cbfs_module,
 #endif
+#if IS_ENABLED(CONFIG_MODULE_TIMESTAMPS)
+	&timestamps_module,
+#endif
 };
 
 struct coreinfo_cat {
diff --git a/payloads/coreinfo/timestamps_module.c b/payloads/coreinfo/timestamps_module.c
new file mode 100644
index 0000000..e66b8aa
--- /dev/null
+++ b/payloads/coreinfo/timestamps_module.c
@@ -0,0 +1,288 @@
+/*
+ * This file is part of the coreinfo project.
+ *
+ * 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.
+ */
+
+#include "coreinfo.h"
+#include "../../../src/commonlib/include/commonlib/timestamp_serialized.h"
+
+#if IS_ENABLED(CONFIG_MODULE_TIMESTAMPS)
+
+#define LINES_SHOWN 19
+#define TAB_WIDTH 2
+
+/* Globals that are used for tracking screen state */
+static char *g_buf;
+static s32 g_line;
+static s32 g_lines_count;
+static s32 g_max_cursor_line;
+
+static unsigned long tick_freq_mhz;
+
+static const char *timestamp_name(uint32_t id)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(timestamp_ids); i++)
+		if (timestamp_ids[i].id == id)
+			return timestamp_ids[i].name;
+
+	return "<unknown>";
+}
+
+static void timestamp_set_tick_freq(unsigned long table_tick_freq_mhz)
+{
+	tick_freq_mhz = table_tick_freq_mhz;
+
+	/* Honor table frequency. */
+	if (tick_freq_mhz)
+		return;
+
+	tick_freq_mhz = lib_sysinfo.cpu_khz / 1000;
+
+	if (!tick_freq_mhz) {
+		fprintf(stderr, "Cannot determine timestamp tick frequency.\n");
+		exit(1);
+	}
+}
+
+u64 arch_convert_raw_ts_entry(u64 ts)
+{
+	return ts / tick_freq_mhz;
+}
+
+static u32 char_width(char c, u32 cursor, u32 screen_width)
+{
+	if (c == '\n')
+		return screen_width - (cursor % screen_width);
+	else if (c == '\t')
+		return TAB_WIDTH;
+	else if (isprint(c))
+		return 1;
+
+	return 0;
+}
+
+static u32 calculate_chars_count(char *str, u32 str_len, u32 screen_width,
+		u32 screen_height)
+{
+	u32 i, count = 0;
+
+	for (i = 0; i < str_len; i++)
+		count += char_width(str[i], count, screen_width);
+
+	/* Ensure that 'count' can occupy at least the whole screen */
+	if (count < screen_width * screen_height)
+		count = screen_width * screen_height;
+
+	/* Pad to line end */
+	if (count % screen_width != 0)
+		count += screen_width - (count % screen_width);
+
+	return count;
+}
+
+/*
+ * This method takes an input buffer and sanitizes it for display, which means:
+ *  - '\n' is converted to spaces until end of line
+ *  - Tabs are converted to spaces of size TAB_WIDTH
+ *  - Only printable characters are preserved
+ */
+static int sanitize_buffer_for_display(char *str, u32 str_len, char *out,
+		u32 out_len, u32 screen_width)
+{
+	u32 cursor = 0;
+	u32 i;
+
+	for (i = 0; i < str_len && cursor < out_len; i++) {
+		u32 width = char_width(str[i], cursor, screen_width);
+
+		if (width == 1)
+			out[cursor++] = str[i];
+		else if (width > 1)
+			while (width-- && cursor < out_len)
+				out[cursor++] = ' ';
+	}
+
+	/* Fill the rest of the out buffer with spaces */
+	while (cursor < out_len)
+		out[cursor++] = ' ';
+
+	return 0;
+}
+
+static uint64_t timestamp_print_entry(char *buffer, size_t size, uint32_t *cur,
+		uint32_t id, uint64_t stamp, uint64_t prev_stamp)
+{
+	const char *name;
+	uint64_t step_time;
+
+	name = timestamp_name(id);
+	step_time = arch_convert_raw_ts_entry(stamp - prev_stamp);
+
+	*cur += snprintf(buffer + *cur, size, "%4d:%-45s", id, name);
+	*cur += snprintf(buffer + *cur, size, "%llu",
+			arch_convert_raw_ts_entry(stamp));
+	if (prev_stamp) {
+		*cur += snprintf(buffer + *cur, size, " (");
+		*cur += snprintf(buffer + *cur, size, "%llu", step_time);
+		*cur += snprintf(buffer + *cur, size, ")");
+	}
+	*cur += snprintf(buffer + *cur, size, "\n");
+
+	return step_time;
+}
+
+static int timestamps_module_init(void)
+{
+	/* Make sure that lib_sysinfo is initialized */
+	int ret = lib_get_sysinfo();
+
+	if (ret)
+		return -1;
+
+	struct timestamp_table *timestamps = lib_sysinfo.tstamp_table;
+
+	if (timestamps == NULL)
+		return -1;
+
+	/* Extract timestamps information */
+	u64 base_time = timestamps->base_time;
+	u16 max_entries = timestamps->max_entries;
+	u32 n_entries = timestamps->num_entries;
+	timestamp_set_tick_freq(timestamps->tick_freq_mhz);
+
+	char *buffer;
+	u32 buff_cur = 0;
+	uint64_t prev_stamp;
+	uint64_t total_time;
+
+	/* Allocate a buffer big enough to contain the output */
+	buffer = malloc(max_entries * SCREEN_X * sizeof(char));
+
+	if (buffer == NULL)
+		return -3;
+
+	/* Write the content */
+	buff_cur += snprintf(buffer, SCREEN_X, "%d entries total:\n\n",
+			n_entries);
+
+	prev_stamp = 0;
+	timestamp_print_entry(buffer, SCREEN_X, &buff_cur, 0, base_time,
+			prev_stamp);
+	prev_stamp = base_time;
+
+	total_time = 0;
+	for (int i = 0; i < n_entries; i++) {
+		uint64_t stamp;
+		const struct timestamp_entry *tse = &timestamps->entries[i];
+
+		stamp = tse->entry_stamp + base_time;
+		total_time += timestamp_print_entry(buffer, SCREEN_X,
+				&buff_cur, tse->entry_id, stamp, prev_stamp);
+		prev_stamp = stamp;
+	}
+
+	buff_cur += snprintf(buffer + buff_cur, SCREEN_X, "\nTotal Time: ");
+	buff_cur += snprintf(buffer + buff_cur, SCREEN_X, "%llu", total_time);
+	buff_cur += snprintf(buffer + buff_cur, SCREEN_X, "\n");
+
+	/* Calculate how much characters will be displayed on screen */
+	u32 chars_count = calculate_chars_count(buffer, buff_cur + 1,
+			SCREEN_X, LINES_SHOWN);
+
+	/* Sanity check, chars_count must be padded to full line */
+	if (chars_count % SCREEN_X != 0)
+		return -2;
+
+	g_lines_count = chars_count / SCREEN_X;
+	g_max_cursor_line = MAX(g_lines_count - 1 - LINES_SHOWN, 0);
+
+	g_buf = malloc(chars_count);
+	if (!g_buf)
+		return -3;
+
+	if (sanitize_buffer_for_display(buffer, buff_cur + 1, g_buf,
+				chars_count, SCREEN_X) < 0) {
+		free(buffer);
+		free(g_buf);
+		g_buf = NULL;
+		return -4;
+	}
+
+	free(buffer);
+
+	return 0;
+}
+
+static int timestamps_module_redraw(WINDOW *win)
+{
+	print_module_title(win, "Coreboot Timestamps");
+
+	if (!g_buf)
+		return -1;
+
+	int x = 0, y = 0;
+	char *tmp = g_buf + g_line * SCREEN_X;
+
+	for (y = 0; y < LINES_SHOWN; y++) {
+		for (x = 0; x < SCREEN_X; x++) {
+			mvwaddch(win, y + 2, x, *tmp);
+			tmp++;
+		}
+	}
+
+	return 0;
+}
+
+static int timestamps_module_handle(int key)
+{
+	if (!g_buf)
+		return 0;
+
+
+	switch (key) {
+	case KEY_DOWN:
+		g_line++;
+		break;
+	case KEY_UP:
+		g_line--;
+		break;
+	case KEY_NPAGE: /* Page up */
+		g_line -= LINES_SHOWN;
+		break;
+	case KEY_PPAGE: /* Page down */
+		g_line += LINES_SHOWN;
+		break;
+	}
+
+	if (g_line < 0)
+		g_line = 0;
+
+	if (g_line > g_max_cursor_line)
+		g_line = g_max_cursor_line;
+
+	return 1;
+}
+
+struct coreinfo_module timestamps_module = {
+	.name = "Timestamps",
+	.init = timestamps_module_init,
+	.redraw = timestamps_module_redraw,
+	.handle = timestamps_module_handle,
+};
+
+#else
+
+struct coreinfo_module timestamps_module = {
+};
+
+#endif
diff --git a/src/commonlib/include/commonlib/timestamp_serialized.h b/src/commonlib/include/commonlib/timestamp_serialized.h
index c665964..273808a 100644
--- a/src/commonlib/include/commonlib/timestamp_serialized.h
+++ b/src/commonlib/include/commonlib/timestamp_serialized.h
@@ -90,4 +90,102 @@ enum timestamp_id {
 	/* 1000+ reserved for payloads (1000-1200: ChromeOS depthcharge) */
 };
 
+enum additional_timestamp_id {
+	// Depthcharge entry IDs start at 1000.
+	TS_DC_START = 1000,
+
+	TS_RO_PARAMS_INIT = 1001,
+	TS_RO_VB_INIT = 1002,
+	TS_RO_VB_SELECT_FIRMWARE = 1003,
+	TS_RO_VB_SELECT_AND_LOAD_KERNEL = 1004,
+
+	TS_RW_VB_SELECT_AND_LOAD_KERNEL = 1010,
+
+	TS_VB_SELECT_AND_LOAD_KERNEL = 1020,
+	TS_VB_EC_VBOOT_DONE = 1030,
+	TS_VB_STORAGE_INIT_DONE = 1040,
+	TS_VB_READ_KERNEL_DONE = 1050,
+	TS_VB_VBOOT_DONE = 1100,
+
+	TS_START_KERNEL = 1101,
+	TS_KERNEL_DECOMPRESSION = 1102,
+};
+
+static const struct timestamp_id_to_name {
+	u32 id;
+	const char *name;
+} timestamp_ids[] = {
+	/* Marker to report base_time. */
+	{ 0,			"1st timestamp" },
+	{ TS_START_ROMSTAGE,	"start of rom stage" },
+	{ TS_BEFORE_INITRAM,	"before ram initialization" },
+	{ TS_AFTER_INITRAM,	"after ram initialization" },
+	{ TS_END_ROMSTAGE,	"end of romstage" },
+	{ TS_START_VBOOT,	"start of verified boot" },
+	{ TS_END_VBOOT,		"end of verified boot" },
+	{ TS_START_COPYRAM,	"starting to load ramstage" },
+	{ TS_END_COPYRAM,	"finished loading ramstage" },
+	{ TS_START_RAMSTAGE,	"start of ramstage" },
+	{ TS_START_BOOTBLOCK,	"start of bootblock" },
+	{ TS_END_BOOTBLOCK,	"end of bootblock" },
+	{ TS_START_COPYROM,	"starting to load romstage" },
+	{ TS_END_COPYROM,	"finished loading romstage" },
+	{ TS_START_ULZMA,	"starting LZMA decompress (ignore for x86)" },
+	{ TS_END_ULZMA,		"finished LZMA decompress (ignore for x86)" },
+	{ TS_START_ULZ4F,	"starting LZ4 decompress (ignore for x86)" },
+	{ TS_END_ULZ4F,		"finished LZ4 decompress (ignore for x86)" },
+	{ TS_DEVICE_ENUMERATE,	"device enumeration" },
+	{ TS_DEVICE_CONFIGURE,	"device configuration" },
+	{ TS_DEVICE_ENABLE,	"device enable" },
+	{ TS_DEVICE_INITIALIZE,	"device initialization" },
+	{ TS_DEVICE_DONE,	"device setup done" },
+	{ TS_CBMEM_POST,	"cbmem post" },
+	{ TS_WRITE_TABLES,	"write tables" },
+	{ TS_LOAD_PAYLOAD,	"load payload" },
+	{ TS_ACPI_WAKE_JUMP,	"ACPI wake jump" },
+	{ TS_SELFBOOT_JUMP,	"selfboot jump" },
+
+	{ TS_START_COPYVER,	"starting to load verstage" },
+	{ TS_END_COPYVER,	"finished loading verstage" },
+	{ TS_START_TPMINIT,	"starting to initialize TPM" },
+	{ TS_END_TPMINIT,	"finished TPM initialization" },
+	{ TS_START_VERIFY_SLOT,	"starting to verify keyblock/preamble (RSA)" },
+	{ TS_END_VERIFY_SLOT,	"finished verifying keyblock/preamble (RSA)" },
+	{ TS_START_HASH_BODY,	"starting to verify body (load+SHA2+RSA) " },
+	{ TS_DONE_LOADING,	"finished loading body (ignore for x86)" },
+	{ TS_DONE_HASHING,	"finished calculating body hash (SHA2)" },
+	{ TS_END_HASH_BODY,	"finished verifying body signature (RSA)" },
+
+	{ TS_START_COPYVPD,	"starting to load Chrome OS VPD" },
+	{ TS_END_COPYVPD_RO,	"finished loading Chrome OS VPD (RO)" },
+	{ TS_END_COPYVPD_RW,	"finished loading Chrome OS VPD (RW)" },
+
+	{ TS_DC_START,		"depthcharge start" },
+	{ TS_RO_PARAMS_INIT,	"RO parameter init" },
+	{ TS_RO_VB_INIT,	"RO vboot init" },
+	{ TS_RO_VB_SELECT_FIRMWARE,		"RO vboot select firmware" },
+	{ TS_RO_VB_SELECT_AND_LOAD_KERNEL,	"RO vboot select&load kernel" },
+	{ TS_RW_VB_SELECT_AND_LOAD_KERNEL,	"RW vboot select&load kernel" },
+	{ TS_VB_SELECT_AND_LOAD_KERNEL,		"vboot select&load kernel" },
+	{ TS_VB_EC_VBOOT_DONE,	"finished EC verification" },
+	{ TS_VB_STORAGE_INIT_DONE, "finished storage device initialization" },
+	{ TS_VB_READ_KERNEL_DONE, "finished reading kernel from disk" },
+	{ TS_VB_VBOOT_DONE,	"finished vboot kernel verification" },
+	{ TS_KERNEL_DECOMPRESSION, "starting kernel decompression/relocation" },
+	{ TS_START_KERNEL,	"jumping to kernel" },
+
+	/* FSP related timestamps */
+	{ TS_FSP_MEMORY_INIT_START, "calling FspMemoryInit" },
+	{ TS_FSP_MEMORY_INIT_END, "returning from FspMemoryInit" },
+	{ TS_FSP_TEMP_RAM_EXIT_START, "calling FspTempRamExit" },
+	{ TS_FSP_TEMP_RAM_EXIT_END, "returning from FspTempRamExit" },
+	{ TS_FSP_SILICON_INIT_START, "calling FspSiliconInit" },
+	{ TS_FSP_SILICON_INIT_END, "returning from FspSiliconInit" },
+	{ TS_FSP_BEFORE_ENUMERATE, "calling FspNotify(AfterPciEnumeration)" },
+	{ TS_FSP_AFTER_ENUMERATE,
+		 "returning from FspNotify(AfterPciEnumeration)" },
+	{ TS_FSP_BEFORE_FINALIZE, "calling FspNotify(ReadyToBoot)" },
+	{ TS_FSP_AFTER_FINALIZE, "returning from FspNotify(ReadyToBoot)" }
+};
+
 #endif
diff --git a/util/cbmem/cbmem.c b/util/cbmem/cbmem.c
index 5cc55da..90d8a5d 100644
--- a/util/cbmem/cbmem.c
+++ b/util/cbmem/cbmem.c
@@ -480,83 +480,6 @@ enum additional_timestamp_id {
 	TS_KERNEL_DECOMPRESSION = 1102,
 };
 
-static const struct timestamp_id_to_name {
-	u32 id;
-	const char *name;
-} timestamp_ids[] = {
-	/* Marker to report base_time. */
-	{ 0,			"1st timestamp" },
-	{ TS_START_ROMSTAGE,	"start of rom stage" },
-	{ TS_BEFORE_INITRAM,	"before ram initialization" },
-	{ TS_AFTER_INITRAM,	"after ram initialization" },
-	{ TS_END_ROMSTAGE,	"end of romstage" },
-	{ TS_START_VBOOT,	"start of verified boot" },
-	{ TS_END_VBOOT,		"end of verified boot" },
-	{ TS_START_COPYRAM,	"starting to load ramstage" },
-	{ TS_END_COPYRAM,	"finished loading ramstage" },
-	{ TS_START_RAMSTAGE,	"start of ramstage" },
-	{ TS_START_BOOTBLOCK,	"start of bootblock" },
-	{ TS_END_BOOTBLOCK,	"end of bootblock" },
-	{ TS_START_COPYROM,	"starting to load romstage" },
-	{ TS_END_COPYROM,	"finished loading romstage" },
-	{ TS_START_ULZMA,	"starting LZMA decompress (ignore for x86)" },
-	{ TS_END_ULZMA,		"finished LZMA decompress (ignore for x86)" },
-	{ TS_START_ULZ4F,	"starting LZ4 decompress (ignore for x86)" },
-	{ TS_END_ULZ4F,		"finished LZ4 decompress (ignore for x86)" },
-	{ TS_DEVICE_ENUMERATE,	"device enumeration" },
-	{ TS_DEVICE_CONFIGURE,	"device configuration" },
-	{ TS_DEVICE_ENABLE,	"device enable" },
-	{ TS_DEVICE_INITIALIZE,	"device initialization" },
-	{ TS_DEVICE_DONE,	"device setup done" },
-	{ TS_CBMEM_POST,	"cbmem post" },
-	{ TS_WRITE_TABLES,	"write tables" },
-	{ TS_LOAD_PAYLOAD,	"load payload" },
-	{ TS_ACPI_WAKE_JUMP,	"ACPI wake jump" },
-	{ TS_SELFBOOT_JUMP,	"selfboot jump" },
-
-	{ TS_START_COPYVER,	"starting to load verstage" },
-	{ TS_END_COPYVER,	"finished loading verstage" },
-	{ TS_START_TPMINIT,	"starting to initialize TPM" },
-	{ TS_END_TPMINIT,	"finished TPM initialization" },
-	{ TS_START_VERIFY_SLOT,	"starting to verify keyblock/preamble (RSA)" },
-	{ TS_END_VERIFY_SLOT,	"finished verifying keyblock/preamble (RSA)" },
-	{ TS_START_HASH_BODY,	"starting to verify body (load+SHA2+RSA) " },
-	{ TS_DONE_LOADING,	"finished loading body (ignore for x86)" },
-	{ TS_DONE_HASHING,	"finished calculating body hash (SHA2)" },
-	{ TS_END_HASH_BODY,	"finished verifying body signature (RSA)" },
-
-	{ TS_START_COPYVPD,	"starting to load Chrome OS VPD" },
-	{ TS_END_COPYVPD_RO,	"finished loading Chrome OS VPD (RO)" },
-	{ TS_END_COPYVPD_RW,	"finished loading Chrome OS VPD (RW)" },
-
-	{ TS_DC_START,		"depthcharge start" },
-	{ TS_RO_PARAMS_INIT,	"RO parameter init" },
-	{ TS_RO_VB_INIT,	"RO vboot init" },
-	{ TS_RO_VB_SELECT_FIRMWARE,		"RO vboot select firmware" },
-	{ TS_RO_VB_SELECT_AND_LOAD_KERNEL,	"RO vboot select&load kernel" },
-	{ TS_RW_VB_SELECT_AND_LOAD_KERNEL,	"RW vboot select&load kernel" },
-	{ TS_VB_SELECT_AND_LOAD_KERNEL,		"vboot select&load kernel" },
-	{ TS_VB_EC_VBOOT_DONE,	"finished EC verification" },
-	{ TS_VB_STORAGE_INIT_DONE, "finished storage device initialization" },
-	{ TS_VB_READ_KERNEL_DONE, "finished reading kernel from disk" },
-	{ TS_VB_VBOOT_DONE,	"finished vboot kernel verification" },
-	{ TS_KERNEL_DECOMPRESSION, "starting kernel decompression/relocation" },
-	{ TS_START_KERNEL,	"jumping to kernel" },
-
-	/* FSP related timestamps */
-	{ TS_FSP_MEMORY_INIT_START, "calling FspMemoryInit" },
-	{ TS_FSP_MEMORY_INIT_END, "returning from FspMemoryInit" },
-	{ TS_FSP_TEMP_RAM_EXIT_START, "calling FspTempRamExit" },
-	{ TS_FSP_TEMP_RAM_EXIT_END, "returning from FspTempRamExit" },
-	{ TS_FSP_SILICON_INIT_START, "calling FspSiliconInit" },
-	{ TS_FSP_SILICON_INIT_END, "returning from FspSiliconInit" },
-	{ TS_FSP_BEFORE_ENUMERATE, "calling FspNotify(AfterPciEnumeration)" },
-	{ TS_FSP_AFTER_ENUMERATE,
-		 "returning from FspNotify(AfterPciEnumeration)" },
-	{ TS_FSP_BEFORE_FINALIZE, "calling FspNotify(ReadyToBoot)" },
-	{ TS_FSP_AFTER_FINALIZE, "returning from FspNotify(ReadyToBoot)" }
-};
-
 static const char *timestamp_name(uint32_t id)
 {
 	int i;



More information about the coreboot-gerrit mailing list