This change turns on the code which allows u-boot to add timestamps to the timestamp table created by coreboot. Since u-boot does not use the tsc_t like structure to represent HW counter readings, this structure is being replaced by 64 bit integer. The timestamp_init() function is now initializing the base timer value used by u-boot to calculate the HW counter increments. Timestamp facility is initialized as soon as the timestamp table pointer is found in the coreboot table. The u-boot generated timer events' ID will start at 1000 to clearly separate u-boot events from coreboot events in the timer trace. Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Signed-off-by: Stefan Reinauer <reinauer@chromium.org> Signed-off-by: Simon Glass <sjg@chromium.org>master
parent
2f899e03a9
commit
6dbe0cce3f
@ -0,0 +1,61 @@ |
||||
/*
|
||||
* This file is part of the coreboot project. |
||||
* |
||||
* Copyright (C) 2011 The ChromiumOS Authors. All rights reserved. |
||||
* |
||||
* 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 <common.h> |
||||
#include <asm/arch/timestamp.h> |
||||
#include <asm/arch/sysinfo.h> |
||||
#include <linux/compiler.h> |
||||
|
||||
struct timestamp_entry { |
||||
uint32_t entry_id; |
||||
uint64_t entry_stamp; |
||||
} __packed; |
||||
|
||||
struct timestamp_table { |
||||
uint64_t base_time; |
||||
uint32_t max_entries; |
||||
uint32_t num_entries; |
||||
struct timestamp_entry entries[0]; /* Variable number of entries */ |
||||
} __packed; |
||||
|
||||
static struct timestamp_table *ts_table __attribute__((section(".data"))); |
||||
|
||||
void timestamp_init(void) |
||||
{ |
||||
ts_table = lib_sysinfo.tstamp_table; |
||||
timer_set_tsc_base(ts_table->base_time); |
||||
timestamp_add_now(TS_U_BOOT_INITTED); |
||||
} |
||||
|
||||
void timestamp_add(enum timestamp_id id, uint64_t ts_time) |
||||
{ |
||||
struct timestamp_entry *tse; |
||||
|
||||
if (!ts_table || (ts_table->num_entries == ts_table->max_entries)) |
||||
return; |
||||
|
||||
tse = &ts_table->entries[ts_table->num_entries++]; |
||||
tse->entry_id = id; |
||||
tse->entry_stamp = ts_time - ts_table->base_time; |
||||
} |
||||
|
||||
void timestamp_add_now(enum timestamp_id id) |
||||
{ |
||||
timestamp_add(id, rdtsc()); |
||||
} |
@ -0,0 +1,51 @@ |
||||
/*
|
||||
* This file is part of the coreboot project. |
||||
* |
||||
* Copyright (C) 2011 The ChromiumOS Authors. All rights reserved. |
||||
* |
||||
* 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 __COREBOOT_TIMESTAMP_H__ |
||||
#define __COREBOOT_TIMESTAMP_H__ |
||||
|
||||
enum timestamp_id { |
||||
/* coreboot specific timestamp IDs */ |
||||
TS_START_ROMSTAGE = 1, |
||||
TS_BEFORE_INITRAM = 2, |
||||
TS_AFTER_INITRAM = 3, |
||||
TS_END_ROMSTAGE = 4, |
||||
TS_START_COPYRAM = 8, |
||||
TS_END_COPYRAM = 9, |
||||
TS_START_RAMSTAGE = 10, |
||||
TS_DEVICE_ENUMERATE = 30, |
||||
TS_DEVICE_CONFIGURE = 40, |
||||
TS_DEVICE_ENABLE = 50, |
||||
TS_DEVICE_INITIALIZE = 60, |
||||
TS_DEVICE_DONE = 70, |
||||
TS_CBMEM_POST = 75, |
||||
TS_WRITE_TABLES = 80, |
||||
TS_LOAD_PAYLOAD = 90, |
||||
TS_ACPI_WAKE_JUMP = 98, |
||||
TS_SELFBOOT_JUMP = 99, |
||||
|
||||
/* U-Boot entry IDs start at 1000 */ |
||||
TS_U_BOOT_INITTED = 1000, /* This is where u-boot starts */ |
||||
}; |
||||
|
||||
void timestamp_init(void); |
||||
void timestamp_add(enum timestamp_id id, uint64_t ts_time); |
||||
void timestamp_add_now(enum timestamp_id id); |
||||
|
||||
#endif |
Loading…
Reference in new issue