|
@@ -34,6 +34,8 @@
|
|
|
#include <asm/io.h>
|
|
|
#include <asm/processor-flags.h>
|
|
|
#include <linux/compiler.h>
|
|
|
+#include <asm/msr.h>
|
|
|
+#include <asm/u-boot-x86.h>
|
|
|
|
|
|
#define DECLARE_INTERRUPT(x) \
|
|
|
".globl irq_"#x"\n" \
|
|
@@ -615,3 +617,32 @@ asm(".globl irq_common_entry\n" \
|
|
|
DECLARE_INTERRUPT(253) \
|
|
|
DECLARE_INTERRUPT(254) \
|
|
|
DECLARE_INTERRUPT(255));
|
|
|
+
|
|
|
+#if defined(CONFIG_INTEL_CORE_ARCH)
|
|
|
+/*
|
|
|
+ * Get the number of CPU time counter ticks since it was read first time after
|
|
|
+ * restart. This yields a free running counter guaranteed to take almost 6
|
|
|
+ * years to wrap around even at 100GHz clock rate.
|
|
|
+ */
|
|
|
+u64 get_ticks(void)
|
|
|
+{
|
|
|
+ static u64 tick_base;
|
|
|
+ u64 now_tick = rdtsc();
|
|
|
+
|
|
|
+ if (!tick_base)
|
|
|
+ tick_base = now_tick;
|
|
|
+
|
|
|
+ return now_tick - tick_base;
|
|
|
+}
|
|
|
+
|
|
|
+#define PLATFORM_INFO_MSR 0xce
|
|
|
+
|
|
|
+unsigned long get_tbclk(void)
|
|
|
+{
|
|
|
+ u32 ratio;
|
|
|
+ u64 platform_info = native_read_msr(PLATFORM_INFO_MSR);
|
|
|
+
|
|
|
+ ratio = (platform_info >> 8) & 0xff;
|
|
|
+ return 100 * 1000 * 1000 * ratio; /* 100MHz times Max Non Turbo ratio */
|
|
|
+}
|
|
|
+#endif
|