summaryrefslogtreecommitdiff
path: root/payloads/libpayload
diff options
context:
space:
mode:
authorT Michael Turney <mturney@codeaurora.org>2018-04-24 14:07:26 -0700
committerJulius Werner <jwerner@chromium.org>2018-05-01 23:35:25 +0000
commit9b5c28af186b68936615d3d95542ef762baeaafe (patch)
tree829f919d5ac32b0421f0a822c858b33fa66a9d80 /payloads/libpayload
parent1e3e02a1d2cbcaf0f3f9a99ef58654ff6edcf1e4 (diff)
libpayload: Add Timer for sdm845
Uses ARCH64 Timer TEST=build Change-Id: Ic312bcf3bc7e80482b7f038e2dbc4abaaffd5956 Signed-off-by: T Michael Turney <mturney@codeaurora.org> Reviewed-on: https://review.coreboot.org/25214 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Julius Werner <jwerner@chromium.org>
Diffstat (limited to 'payloads/libpayload')
-rw-r--r--payloads/libpayload/configs/config.cheza3
-rw-r--r--payloads/libpayload/drivers/Makefile.inc1
-rw-r--r--payloads/libpayload/drivers/timer/Kconfig5
-rw-r--r--payloads/libpayload/drivers/timer/arm64_arch_timer.c44
4 files changed, 53 insertions, 0 deletions
diff --git a/payloads/libpayload/configs/config.cheza b/payloads/libpayload/configs/config.cheza
new file mode 100644
index 0000000000..3bbf7bfa5b
--- /dev/null
+++ b/payloads/libpayload/configs/config.cheza
@@ -0,0 +1,3 @@
+CONFIG_LP_ARCH_ARM64=y
+# CONFIG_LP_CURSES is not set
+CONFIG_LP_TIMER_ARM64_ARCH=y
diff --git a/payloads/libpayload/drivers/Makefile.inc b/payloads/libpayload/drivers/Makefile.inc
index 8dc6e8bbb6..58546e521e 100644
--- a/payloads/libpayload/drivers/Makefile.inc
+++ b/payloads/libpayload/drivers/Makefile.inc
@@ -55,6 +55,7 @@ libc-$(CONFIG_LP_TIMER_RDTSC) += timer/rdtsc.c
libc-$(CONFIG_LP_TIMER_IMG_PISTACHIO) += timer/img_pistachio.c
libc-$(CONFIG_LP_TIMER_ARMADA38X) += timer/armada38x.c
libc-$(CONFIG_LP_TIMER_MVMAP2315) += timer/mvmap2315.c
+libc-$(CONFIG_LP_TIMER_ARM64_ARCH) += timer/arm64_arch_timer.c
# Video console drivers
libc-$(CONFIG_LP_VIDEO_CONSOLE) += video/video.c
diff --git a/payloads/libpayload/drivers/timer/Kconfig b/payloads/libpayload/drivers/timer/Kconfig
index 9e274ee00e..54cbe4a663 100644
--- a/payloads/libpayload/drivers/timer/Kconfig
+++ b/payloads/libpayload/drivers/timer/Kconfig
@@ -45,6 +45,11 @@ config TIMER_IPQ40XX
This is the timer driver for QCA IPQ40xx based
platforms.
+config TIMER_ARM64_ARCH
+ bool "Architecture Timer for ARM64 platforms"
+ help
+ The cntfrq register needs to have been pre-initialized.
+
config TIMER_RK3288
bool "Timer for Rockchip RK3288"
diff --git a/payloads/libpayload/drivers/timer/arm64_arch_timer.c b/payloads/libpayload/drivers/timer/arm64_arch_timer.c
new file mode 100644
index 0000000000..08688475ba
--- /dev/null
+++ b/payloads/libpayload/drivers/timer/arm64_arch_timer.c
@@ -0,0 +1,44 @@
+/*
+ * This file is part of the libpayload project.
+ *
+ * Copyright (c) 2018, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * 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.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER 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 <arch/lib_helpers.h>
+#include <libpayload.h>
+
+uint64_t timer_hz(void)
+{
+ return raw_read_cntfrq_el0();
+}
+
+uint64_t timer_raw_value(void)
+{
+ return raw_read_cntpct_el0();
+}