[coreboot-gerrit] Patch set updated for coreboot: libpayload: Add timer driver for armada38x

Patrick Georgi (pgeorgi@google.com) gerrit at coreboot.org
Fri Jan 22 22:24:38 CET 2016


Patrick Georgi (pgeorgi at google.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/13114

-gerrit

commit 397bf172eabb6e7150b3eea3782b030414f28500
Author: Ruilin Hao <rlhao at marvell.com>
Date:   Tue Nov 10 00:41:41 2015 -0800

    libpayload: Add timer driver for armada38x
    
    Add timer driver for armada38x
    
    BUG=chrome-os-partner:47462
    TEST=emerge-cyclone libpayload
    BRANCH=tot
    
    Change-Id: Iefb6d1fcb907edb54d55ba8addfb66329af6c3c7
    Signed-off-by: Patrick Georgi <pgeorgi at chromium.org>
    Original-Commit-Id: cd467160ecab050a541a445c2afab9e6bc625635
    Original-Change-Id: Id42bafdbc34295b6f8afe5610fb3bab0e0e1b6e8
    Original-Signed-off-by: Ruilin Hao <rlhao at marvell.com>
    Original-Reviewed-on: https://chromium-review.googlesource.com/313343
    Original-Commit-Ready: Kan Yan <kyan at google.com>
    Original-Tested-by: Kan Yan <kyan at google.com>
    Original-Reviewed-by: Furquan Shaikh <furquan at chromium.org>
    Original-Reviewed-by: Yuji Sasaki <sasakiy at chromium.org>
---
 payloads/libpayload/Kconfig                   | 16 +++++++++
 payloads/libpayload/drivers/Makefile.inc      |  1 +
 payloads/libpayload/drivers/timer/armada38x.c | 50 +++++++++++++++++++++++++++
 3 files changed, 67 insertions(+)

diff --git a/payloads/libpayload/Kconfig b/payloads/libpayload/Kconfig
index 5e02624..95bd045 100644
--- a/payloads/libpayload/Kconfig
+++ b/payloads/libpayload/Kconfig
@@ -398,6 +398,12 @@ config TIMER_TEGRA_1US
 config TIMER_IPQ806X
 	bool "Timer for ipq806x platforms"
 
+config TIMER_ARMADA38X
+        bool "Timer for armada38x platforms"
+	help
+	  This is the timer driver for marvell armada38x
+	  platforms.
+
 config TIMER_RK
 	bool "Timer for Rockchip"
 
@@ -450,6 +456,16 @@ config IPQ806X_TIMER_REG
 	help
 	  Address of the register to read a free running timer value.
 
+config ARMADA38X_TIMER_FREQ
+        int "Hardware timer frequency"
+        depends on TIMER_ARMADA38X
+        default 25000000
+
+config ARMADA38X_TIMER_REG
+        hex "Timer register address"
+        default 0xF1020314
+        depends on TIMER_ARMADA38X
+
 config IPROC_PERIPH_GLB_TIM_REG_BASE
 	hex "Cygnus timer base address"
 	depends on TIMER_CYGNUS
diff --git a/payloads/libpayload/drivers/Makefile.inc b/payloads/libpayload/drivers/Makefile.inc
index be43b35..31eb43c 100644
--- a/payloads/libpayload/drivers/Makefile.inc
+++ b/payloads/libpayload/drivers/Makefile.inc
@@ -54,6 +54,7 @@ libc-$(CONFIG_LP_TIMER_RK) += timer/rktimer.c
 libc-$(CONFIG_LP_TIMER_BG4CD) += timer/bg4cd.c
 libc-$(CONFIG_LP_TIMER_IMG_PISTACHIO) += timer/img_pistachio.c
 libc-$(CONFIG_LP_TIMER_CYGNUS) += timer/cygnus.c
+libc-$(CONFIG_LP_TIMER_ARMADA38X) += timer/armada38x.c
 
 # Video console drivers
 libc-$(CONFIG_LP_VIDEO_CONSOLE) += video/video.c
diff --git a/payloads/libpayload/drivers/timer/armada38x.c b/payloads/libpayload/drivers/timer/armada38x.c
new file mode 100644
index 0000000..2a060bb
--- /dev/null
+++ b/payloads/libpayload/drivers/timer/armada38x.c
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2015 Google Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <libpayload.h>
+#include <libpayload-config.h>
+
+uint64_t timer_hz(void)
+{
+	return CONFIG_LP_ARMADA38X_TIMER_FREQ;
+}
+
+uint64_t timer_raw_value(void)
+{
+	static uint64_t total_ticks = 0;
+	uint64_t overflow = 0;
+	uint32_t current_ticks =
+	    0xffffffff - readl((void *)CONFIG_LP_ARMADA38X_TIMER_REG);
+
+	/* It assumes only one overflow happened since the last call */
+	if (current_ticks <= (uint32_t)total_ticks)
+		overflow = 1ULL << 32;
+	/* The least significant part(32 bits) of total_ticks will always
+	 * become equal to current ticks */
+	total_ticks = (((total_ticks + overflow) >> 32) << 32) + current_ticks;
+	return total_ticks;
+}



More information about the coreboot-gerrit mailing list