summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRegina König2021-04-21 01:57:47 +0200
committerRegina König2021-04-21 01:57:47 +0200
commit2567b0b1334ca24099ddbaa693abf9447ce83e32 (patch)
tree49547272bbc100c58900b44bc664edc3b8488543
parentAdjust clk computation (diff)
downloadmemtest86-2567b0b1334ca24099ddbaa693abf9447ce83e32.tar.gz
memtest86-2567b0b1334ca24099ddbaa693abf9447ce83e32.tar.xz
memtest86-2567b0b1334ca24099ddbaa693abf9447ce83e32.zip
Try modified version for cpuspeed which gives the correct result
-rw-r--r--efi_memtest/memtest86+/efi/init.c44
1 files changed, 23 insertions, 21 deletions
diff --git a/efi_memtest/memtest86+/efi/init.c b/efi_memtest/memtest86+/efi/init.c
index 6434b5a..2756838 100644
--- a/efi_memtest/memtest86+/efi/init.c
+++ b/efi_memtest/memtest86+/efi/init.c
@@ -1211,8 +1211,8 @@ static int cpuspeed(void)
}
int loops;
- // TODO int stlow, sthigh; ulong or int?
- // TODO ulong end_low, end_high;
+ int stlow, sthigh; // TODO ulong or int?
+ int end_low, end_high; // TODO ulong or int?
if (cpu_id.fid.bits.rdtsc == 0 ) {
return(-1);
@@ -1226,20 +1226,6 @@ static int cpuspeed(void)
asm __volatile__ ("rdtsc":"=a" (stlow),"=d" (sthigh));
- if (logflag) {
- char log[28] = "stlow = ";
- int length = 8;
- int_to_charr(stlow, log, &length);
- print_log(log, length);
- }
-
- if (logflag) {
- char log[29] = "sthigh = ";
- int length = 9;
- int_to_charr(stlow, log, &length);
- print_log(log, length);
- }
-
loops = 0;
do {
loops++;
@@ -1254,20 +1240,34 @@ static int cpuspeed(void)
:"=a" (end_low), "=d" (end_high)
);*/
- /* asm __volatile__ (
+ /*asm __volatile__ (
"rdtsc\n\t" \
- "subq %0, %%rax\n\t" \
- "sbbq %1, %%rdx\n\t" \
+ "subl %0, %%eax\n\t" \
+ "sbbl %1, %%edx\n\t" \
:"=a" (end_low), "=d" (end_high)
:"r" (stlow), "r" (sthigh)
);*/
- asm __volatile__ (
- "rdtsc\n\t" // TODO remove
+ asm __volatile__ (
+ "rdtsc"
:"=a" (end_low), "=d" (end_high)
);
if (logflag) {
+ char log[28] = "stlow = ";
+ int length = 8;
+ int_to_charr(stlow, log, &length);
+ print_log(log, length);
+ }
+
+ if (logflag) {
+ char log[29] = "sthigh = ";
+ int length = 9;
+ int_to_charr(sthigh, log, &length);
+ print_log(log, length);
+ }
+
+ if (logflag) {
char log[30] = "end_low = ";
int length = 10;
int_to_charr(end_low, log, &length);
@@ -1281,6 +1281,8 @@ static int cpuspeed(void)
print_log(log, length);
}
+ end_low -= stlow; // TODO remember the carry flag
+
/* Make sure we have a credible result */
if (loops < 4 || end_low < 50000) {
return(-1);