[coreboot-gerrit] Change in coreboot[master]: cpu/intel/model_106cx: Add tsc_freq_mhz() function

Arthur Heymans (Code Review) gerrit at coreboot.org
Sat Apr 1 00:37:27 CEST 2017


Arthur Heymans has uploaded a new change for review. ( https://review.coreboot.org/19067 )

Change subject: cpu/intel/model_106cx: Add tsc_freq_mhz() function
......................................................................

cpu/intel/model_106cx: Add tsc_freq_mhz() function

This adds a function to get TSC frequency which then gets stored in
coreboot tables. This allows to read timestamps on Intel Atom 230
using cbmem.

TESTED on d945gclf

Change-Id: Ifb6074f3f097d7e6fc501a376754a05eb9e4faa0
Signed-off-by: Arthur Heymans <arthur at aheymans.xyz>
---
M src/cpu/intel/model_106cx/Makefile.inc
A src/cpu/intel/model_106cx/tsc_freq.c
2 files changed, 58 insertions(+), 0 deletions(-)


  git pull ssh://review.coreboot.org:29418/coreboot refs/changes/67/19067/1

diff --git a/src/cpu/intel/model_106cx/Makefile.inc b/src/cpu/intel/model_106cx/Makefile.inc
index cd753db..9624c7c 100644
--- a/src/cpu/intel/model_106cx/Makefile.inc
+++ b/src/cpu/intel/model_106cx/Makefile.inc
@@ -1,5 +1,8 @@
 ramstage-y += model_106cx_init.c
 subdirs-y += ../../x86/name
 subdirs-y += ../common
+ramstage-y += tsc_freq.c
+romstage-y += tsc_freq.c
+smm-y      += tsc_freq.c
 
 cpu_microcode_bins += 3rdparty/blobs/cpu/intel/model_106cx/microcode.bin
diff --git a/src/cpu/intel/model_106cx/tsc_freq.c b/src/cpu/intel/model_106cx/tsc_freq.c
new file mode 100644
index 0000000..9958369
--- /dev/null
+++ b/src/cpu/intel/model_106cx/tsc_freq.c
@@ -0,0 +1,55 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2014 Google Inc.
+ *
+ * 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 <stdint.h>
+#include <cpu/x86/msr.h>
+#include <cpu/x86/tsc.h>
+#include <cpu/intel/speedstep.h>
+
+unsigned long tsc_freq_mhz(void)
+{
+	msr_t msr;
+	unsigned long fsb = 0, divisor;
+
+	msr = rdmsr(MSR_FSB_FREQ);
+	switch (msr.lo & 0x07) {
+	case 5:
+		fsb = 400;
+		break;
+	case 1:
+		fsb = 533;
+		break;
+	case 3:
+		fsb = 667;
+		break;
+	case 2:
+		fsb = 800;
+		break;
+	case 0:
+		fsb = 1067;
+		break;
+	case 4:
+		fsb = 1333;
+		break;
+	case 6:
+		fsb = 1600;
+		break;
+	}
+
+	msr = rdmsr(IA32_PERF_STS);
+	divisor = (msr.hi >> 8) & 0x1f;
+
+	return (fsb * divisor) / 4;
+}

-- 
To view, visit https://review.coreboot.org/19067
To unsubscribe, visit https://review.coreboot.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ifb6074f3f097d7e6fc501a376754a05eb9e4faa0
Gerrit-PatchSet: 1
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Owner: Arthur Heymans <arthur at aheymans.xyz>



More information about the coreboot-gerrit mailing list