Fix timestamp output in cbmem utility on ARM

On ARM the timestamps are already in micro seconds, so
no need to convert them.

Signed-off-by: Stefan Reinauer <reinauer@google.com>

Change-Id: If7363b0703e144bde62d9dab4ba845e1ace5bd18
Reviewed-on: https://gerrit.chromium.org/gerrit/63991
Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
Commit-Queue: Stefan Reinauer <reinauer@chromium.org>
Tested-by: Stefan Reinauer <reinauer@chromium.org>
Reviewed-on: http://review.coreboot.org/4313
Tested-by: build bot (Jenkins)
Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
This commit is contained in:
Stefan Reinauer 2013-07-31 15:44:37 -07:00 committed by Ronald G. Minnich
parent 274c6c2177
commit d8ef9e9e9b
1 changed files with 30 additions and 5 deletions

View File

@ -243,6 +243,7 @@ static int parse_cbtable(u64 address)
return found; return found;
} }
#if defined(__i386__) || defined(__x86_64__)
/* /*
* read CPU frequency from a sysfs file, return an frequency in Kilohertz as * read CPU frequency from a sysfs file, return an frequency in Kilohertz as
* an int or exit on any error. * an int or exit on any error.
@ -282,6 +283,32 @@ static u64 get_cpu_freq_KHz(void)
exit(1); exit(1);
} }
/* On x86 platforms timestamps are stored
* in CPU cycles (from rdtsc). Hence the
* timestamp divider is the CPU frequency
* in MHz.
*/
u64 arch_convert_raw_ts_entry(u64 ts)
{
static u64 cpu_freq_mhz = 0;
if (!cpu_freq_mhz)
cpu_freq_mhz = get_cpu_freq_KHz() / 1000;
return ts / cpu_freq_mhz;
}
#else
/* On non-x86 platforms the timestamp entries
* are not in clock cycles but in usecs
*/
u64 arch_convert_raw_ts_entry(u64 ts)
{
return ts;
}
#endif
/* /*
* Print an integer in 'normalized' form - with commas separating every three * Print an integer in 'normalized' form - with commas separating every three
* decimal orders. The 'comma' parameter indicates if a comma is needed after * decimal orders. The 'comma' parameter indicates if a comma is needed after
@ -308,7 +335,6 @@ static void print_norm(u64 v, int comma)
static void dump_timestamps(void) static void dump_timestamps(void)
{ {
int i; int i;
u64 cpu_freq_MHz = get_cpu_freq_KHz() / 1000;
struct timestamp_table *tst_p; struct timestamp_table *tst_p;
if (timestamps.tag != LB_TAG_TIMESTAMPS) { if (timestamps.tag != LB_TAG_TIMESTAMPS) {
@ -324,12 +350,11 @@ static void dump_timestamps(void)
const struct timestamp_entry *tse_p = tst_p->entries + i; const struct timestamp_entry *tse_p = tst_p->entries + i;
printf("%4d:", tse_p->entry_id); printf("%4d:", tse_p->entry_id);
print_norm(tse_p->entry_stamp / cpu_freq_MHz, 0); print_norm(arch_convert_raw_ts_entry(tse_p->entry_stamp), 0);
if (i) { if (i) {
printf(" ("); printf(" (");
print_norm((tse_p->entry_stamp - print_norm(arch_convert_raw_ts_entry(tse_p->entry_stamp
tse_p[-1].entry_stamp) / - tse_p[-1].entry_stamp), 0);
cpu_freq_MHz, 0);
printf(")"); printf(")");
} }
printf("\n"); printf("\n");