From 9b5c28af186b68936615d3d95542ef762baeaafe Mon Sep 17 00:00:00 2001 From: T Michael Turney Date: Tue, 24 Apr 2018 14:07:26 -0700 Subject: libpayload: Add Timer for sdm845 Uses ARCH64 Timer TEST=build Change-Id: Ic312bcf3bc7e80482b7f038e2dbc4abaaffd5956 Signed-off-by: T Michael Turney Reviewed-on: https://review.coreboot.org/25214 Tested-by: build bot (Jenkins) Reviewed-by: Julius Werner --- payloads/libpayload/configs/config.cheza | 3 ++ payloads/libpayload/drivers/Makefile.inc | 1 + payloads/libpayload/drivers/timer/Kconfig | 5 +++ .../libpayload/drivers/timer/arm64_arch_timer.c | 44 ++++++++++++++++++++++ 4 files changed, 53 insertions(+) create mode 100644 payloads/libpayload/configs/config.cheza create mode 100644 payloads/libpayload/drivers/timer/arm64_arch_timer.c 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 +#include + +uint64_t timer_hz(void) +{ + return raw_read_cntfrq_el0(); +} + +uint64_t timer_raw_value(void) +{ + return raw_read_cntpct_el0(); +} -- cgit v1.2.3