aboutsummaryrefslogtreecommitdiff
path: root/src/soc/imgtec/pistachio/monotonic_timer.c
diff options
context:
space:
mode:
authorVadim Bendebury <vbendeb@chromium.org>2014-11-05 17:50:09 -0800
committerStefan Reinauer <stefan.reinauer@coreboot.org>2015-04-09 00:29:09 +0200
commit52a887985300cf11fbc183f6a4a4408ff9a45ec6 (patch)
tree10cef88314046050b41057689d1e0a8e7b7cefb0 /src/soc/imgtec/pistachio/monotonic_timer.c
parent771819a3806b5e60e3db73b2779072ee0f23890f (diff)
pistachio: implement timer support
C0_COUNT register is a free running counter clocked by the CPU frequency divided by two. On the FPGA board it results in 25 MHz, on real SOCs it will have to be figured out later. Some magic addresses and numbers are used to find out if the code is running on the FPGA board. timestamp_get() and timer_monotonic_get() are kept in the same file. The CPU initialization makes sure that CO COUNT is in fact enabled and starts from zero. BRANCH=none BUG=chrome-os-partner:33595,chrome-os-partner:31438 TEST=with timer enabled, the startup code properly initializes UART and prints the coreboot bootblock banner message on the serial console. Change-Id: I98fe330b961f677448b222917ab7d586494ed4b7 Signed-off-by: Stefan Reinauer <reinauer@chromium.org> Original-Commit-Id: a7324221c1d856ac72fa2b0ab586b5ea8cab3a05 Original-Change-Id: I2d518213de939e91a35f8aea174aed76d297dd72 Original-Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Original-Reviewed-on: https://chromium-review.googlesource.com/227888 Original-Reviewed-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: http://review.coreboot.org/9188 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi <pgeorgi@google.com>
Diffstat (limited to 'src/soc/imgtec/pistachio/monotonic_timer.c')
-rw-r--r--src/soc/imgtec/pistachio/monotonic_timer.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/src/soc/imgtec/pistachio/monotonic_timer.c b/src/soc/imgtec/pistachio/monotonic_timer.c
index a8fe27c9cc..99c147b7c2 100644
--- a/src/soc/imgtec/pistachio/monotonic_timer.c
+++ b/src/soc/imgtec/pistachio/monotonic_timer.c
@@ -17,9 +17,33 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
+#include <stdint.h>
#include <timer.h>
+#include <timestamp.h>
+#include <arch/cpu.h>
+#include <soc/cpu.h>
+
+static int get_count_mhz_freq(void)
+{
+ static unsigned count_mhz_freq;
+
+ if (!count_mhz_freq) {
+ if (IMG_PLATFORM_ID() != IMG_PLATFORM_ID_SILICON)
+ count_mhz_freq = 25; /* FPGA board */
+ /*
+ * Will need some means of finding out the counter
+ * frequency on a real SOC
+ */
+ }
+ return count_mhz_freq;
+}
void timer_monotonic_get(struct mono_time *mt)
{
- /* to be defined */
+ mt->microseconds = (long)timestamp_get();
+}
+
+uint64_t timestamp_get(void)
+{
+ return read_c0_count()/get_count_mhz_freq();
}