From 4cdc5d6fc6ea6f460414728e026660954d0adb1d Mon Sep 17 00:00:00 2001 From: Denis 'GNUtoo' Carikli Date: Wed, 15 May 2013 00:19:49 +0200 Subject: [PATCH] Yabel : Add tracing option needed by i915tool. This patch was made by listenning to what Ron Minnich told me to do on #coreboot IRC channel on Freenode with my adaptations on top. i915tool is at https://code.google.com/p/i915tool/ , the one in coreboot is outdated. Change-Id: I13cd684f4c290114836fbd7babd461153e8d6124 Signed-off-by: Denis 'GNUtoo' Carikli Reviewed-on: http://review.coreboot.org/3277 Tested-by: build bot (Jenkins) Reviewed-by: Paul Menzel Reviewed-by: Ronald G. Minnich --- src/Kconfig | 9 +++++++++ src/device/oprom/yabel/biosemu.c | 9 +++++++++ src/device/oprom/yabel/debug.h | 9 +++++++++ 3 files changed, 27 insertions(+) diff --git a/src/Kconfig b/src/Kconfig index 24de7d27c2..fdf40e5954 100644 --- a/src/Kconfig +++ b/src/Kconfig @@ -902,6 +902,15 @@ config X86EMU_DEBUG_IO If unsure, say N. +config X86EMU_DEBUG_TIMINGS + bool "Output timing information" + default n + depends on X86EMU_DEBUG && UDELAY_LAPIC && HAVE_MONOTONIC_TIMER + help + Print timing information needed by i915tool. + + If unsure, say N. + config DEBUG_TPM bool "Output verbose TPM debug messages" default n diff --git a/src/device/oprom/yabel/biosemu.c b/src/device/oprom/yabel/biosemu.c index 2a2ca312cb..f42d4e1735 100644 --- a/src/device/oprom/yabel/biosemu.c +++ b/src/device/oprom/yabel/biosemu.c @@ -31,6 +31,10 @@ #include #include "compat/rtas.h" +#if CONFIG_X86EMU_DEBUG_TIMINGS +struct mono_time zero; +#endif + static X86EMU_memFuncs my_mem_funcs = { my_rdb, my_rdw, my_rdl, my_wrb, my_wrw, my_wrl @@ -99,6 +103,11 @@ biosemu(u8 *biosmem, u32 biosmem_size, struct device * dev, unsigned long rom_ad #endif #endif +#if CONFIG_X86EMU_DEBUG_TIMINGS + /* required for i915tool compatible output */ + zero.microseconds = 0; +#endif + if (biosmem_size < MIN_REQUIRED_VMEM_SIZE) { printf("Error: Not enough virtual memory: %x, required: %x!\n", biosmem_size, MIN_REQUIRED_VMEM_SIZE); diff --git a/src/device/oprom/yabel/debug.h b/src/device/oprom/yabel/debug.h index 9361553da7..2e714a3fda 100644 --- a/src/device/oprom/yabel/debug.h +++ b/src/device/oprom/yabel/debug.h @@ -13,8 +13,12 @@ #ifndef _BIOSEMU_DEBUG_H_ #define _BIOSEMU_DEBUG_H_ +#include #include +#if CONFIG_X86EMU_DEBUG_TIMINGS +extern struct mono_time zero; +#endif extern u32 debug_flags; // from x86emu...needed for debugging extern void x86emu_dump_xregs(void); @@ -73,7 +77,12 @@ static inline void set_ci(void) {}; #define DEBUG_PRINTF(_x...) printf(_x); // prints the CS:IP before the printout, NOTE: actually its CS:IP of the _next_ instruction // to be executed, since the x86emu advances CS:IP _before_ actually executing an instruction + +#if CONFIG_X86EMU_DEBUG_TIMINGS +#define DEBUG_PRINTF_CS_IP(_x...) DEBUG_PRINTF("[%08lx]%x:%x ", (current_time_from(&zero)).microseconds, M.x86.R_CS, M.x86.R_IP); DEBUG_PRINTF(_x); +#else #define DEBUG_PRINTF_CS_IP(_x...) DEBUG_PRINTF("%x:%x ", M.x86.R_CS, M.x86.R_IP); DEBUG_PRINTF(_x); +#endif #define DEBUG_PRINTF_IO(_x...) CHECK_DBG(DEBUG_IO) { DEBUG_PRINTF_CS_IP(_x) } #define DEBUG_PRINTF_MEM(_x...) CHECK_DBG(DEBUG_MEM) { DEBUG_PRINTF_CS_IP(_x) }