From patchwork Fri Oct 30 07:35:52 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Chou X-Patchwork-Id: 538193 X-Patchwork-Delegate: sjg@chromium.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id DF121140D9D for ; Fri, 30 Oct 2015 18:36:19 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 48678A749B; Fri, 30 Oct 2015 08:36:16 +0100 (CET) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Z2D-PIA8_Ehn; Fri, 30 Oct 2015 08:36:16 +0100 (CET) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id A2BFDA7496; Fri, 30 Oct 2015 08:36:12 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id D3766A7476 for ; Fri, 30 Oct 2015 08:36:06 +0100 (CET) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id b4cZktLBImz7 for ; Fri, 30 Oct 2015 08:36:06 +0100 (CET) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from www.wytron.com.tw (220-134-43-68.HINET-IP.hinet.net [220.134.43.68]) by theia.denx.de (Postfix) with ESMTP id 02470A7469 for ; Fri, 30 Oct 2015 08:36:02 +0100 (CET) Received: from localhost.localdomain (unknown [192.168.1.250]) by www.wytron.com.tw (Postfix) with ESMTP id B74F5D00301; Fri, 30 Oct 2015 15:35:59 +0800 (CST) From: Thomas Chou To: u-boot@lists.denx.de Date: Fri, 30 Oct 2015 15:35:52 +0800 Message-Id: <1446190552-1294-2-git-send-email-thomas@wytron.com.tw> X-Mailer: git-send-email 2.5.0 In-Reply-To: <1446190552-1294-1-git-send-email-thomas@wytron.com.tw> References: <1445520317-24516-1-git-send-email-thomas@wytron.com.tw> <1446190552-1294-1-git-send-email-thomas@wytron.com.tw> Cc: Marek Vasut , clsee@altera.com, lftan@altera.com Subject: [U-Boot] [PATCH v2 2/2] sandbox: add a sandbox timer and basic test X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Add a sandbox timer which get time from host os and a basic test. Signed-off-by: Thomas Chou Reviewed-by: Simon Glass --- v2 split board_f.c to another patch as suggested by Simon. drop the penultimate comma in of_match ids. arch/sandbox/dts/sandbox.dts | 4 ++ board/sandbox/sandbox.c | 2 + configs/sandbox_defconfig | 2 + doc/device-tree-bindings/timer/sandbox_timer.txt | 7 ++++ drivers/timer/Kconfig | 7 ++++ drivers/timer/Makefile | 1 + drivers/timer/sandbox_timer.c | 53 ++++++++++++++++++++++++ include/configs/sandbox.h | 2 + test/dm/Makefile | 1 + test/dm/timer.c | 27 ++++++++++++ 10 files changed, 106 insertions(+) create mode 100644 doc/device-tree-bindings/timer/sandbox_timer.txt create mode 100644 drivers/timer/sandbox_timer.c create mode 100644 test/dm/timer.c diff --git a/arch/sandbox/dts/sandbox.dts b/arch/sandbox/dts/sandbox.dts index 08f72ac..720ef93 100644 --- a/arch/sandbox/dts/sandbox.dts +++ b/arch/sandbox/dts/sandbox.dts @@ -177,6 +177,10 @@ sides = <4>; }; + timer { + compatible = "sandbox,timer"; + }; + tpm { compatible = "google,sandbox-tpm"; }; diff --git a/board/sandbox/sandbox.c b/board/sandbox/sandbox.c index 80eaa63..592f772 100644 --- a/board/sandbox/sandbox.c +++ b/board/sandbox/sandbox.c @@ -26,6 +26,7 @@ void flush_cache(unsigned long start, unsigned long size) { } +#ifndef CONFIG_TIMER /* system timer offset in ms */ static unsigned long sandbox_timer_offset; @@ -38,6 +39,7 @@ unsigned long timer_read_counter(void) { return os_get_nsec() / 1000 + sandbox_timer_offset * 1000; } +#endif int dram_init(void) { diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig index 67ae99b..72e0dfb 100644 --- a/configs/sandbox_defconfig +++ b/configs/sandbox_defconfig @@ -48,6 +48,8 @@ CONFIG_SANDBOX_SERIAL=y CONFIG_SOUND=y CONFIG_SOUND_SANDBOX=y CONFIG_SANDBOX_SPI=y +CONFIG_TIMER=y +CONFIG_SANDBOX_TIMER=y CONFIG_DM_TPM=y CONFIG_TPM_TIS_SANDBOX=y CONFIG_USB=y diff --git a/doc/device-tree-bindings/timer/sandbox_timer.txt b/doc/device-tree-bindings/timer/sandbox_timer.txt new file mode 100644 index 0000000..3e113f8 --- /dev/null +++ b/doc/device-tree-bindings/timer/sandbox_timer.txt @@ -0,0 +1,7 @@ +Sandbox timer + +The sandbox timer device is an emulated device which gets time from +host os. + +Required properties: + compatible: "sandbox,timer" diff --git a/drivers/timer/Kconfig b/drivers/timer/Kconfig index 97c4128..601e493 100644 --- a/drivers/timer/Kconfig +++ b/drivers/timer/Kconfig @@ -16,4 +16,11 @@ config ALTERA_TIMER Select this to enable an timer for Altera devices. Please find details on the "Embedded Peripherals IP User Guide" of Altera. +config SANDBOX_TIMER + bool "Sandbox Timer support" + depends on SANDBOX && TIMER + help + Select this to enable an emulated timer for sandbox. It gets + time from host os. + endmenu diff --git a/drivers/timer/Makefile b/drivers/timer/Makefile index ae66c07..300946e 100644 --- a/drivers/timer/Makefile +++ b/drivers/timer/Makefile @@ -6,3 +6,4 @@ obj-$(CONFIG_TIMER) += timer-uclass.o obj-$(CONFIG_ALTERA_TIMER) += altera_timer.o +obj-$(CONFIG_SANDBOX_TIMER) += sandbox_timer.o diff --git a/drivers/timer/sandbox_timer.c b/drivers/timer/sandbox_timer.c new file mode 100644 index 0000000..38de763 --- /dev/null +++ b/drivers/timer/sandbox_timer.c @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2015 Thomas Chou + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include +#include +#include +#include +#include + +/* system timer offset in ms */ +static unsigned long sandbox_timer_offset; + +void sandbox_timer_add_offset(unsigned long offset) +{ + sandbox_timer_offset += offset; +} + +static int sandbox_timer_get_count(struct udevice *dev, unsigned long *count) +{ + *count = os_get_nsec() / 1000 + sandbox_timer_offset * 1000; + + return 0; +} + +static int sandbox_timer_probe(struct udevice *dev) +{ + struct timer_dev_priv *uc_priv = dev_get_uclass_priv(dev); + + uc_priv->clock_rate = 1000000; + + return 0; +} + +static const struct timer_ops sandbox_timer_ops = { + .get_count = sandbox_timer_get_count, +}; + +static const struct udevice_id sandbox_timer_ids[] = { + { .compatible = "sandbox,timer" }, + { } +}; + +U_BOOT_DRIVER(sandbox_timer) = { + .name = "sandbox_timer", + .id = UCLASS_TIMER, + .of_match = sandbox_timer_ids, + .probe = sandbox_timer_probe, + .ops = &sandbox_timer_ops, + .flags = DM_FLAG_PRE_RELOC, +}; diff --git a/include/configs/sandbox.h b/include/configs/sandbox.h index c96ec90..9e66da2 100644 --- a/include/configs/sandbox.h +++ b/include/configs/sandbox.h @@ -19,7 +19,9 @@ #define CONFIG_IO_TRACE #define CONFIG_CMD_IOTRACE +#ifndef CONFIG_TIMER #define CONFIG_SYS_TIMER_RATE 1000000 +#endif #define CONFIG_SYS_STDIO_DEREGISTER diff --git a/test/dm/Makefile b/test/dm/Makefile index 7b3626c..88da101 100644 --- a/test/dm/Makefile +++ b/test/dm/Makefile @@ -33,4 +33,5 @@ obj-y += syscon.o obj-$(CONFIG_DM_USB) += usb.o obj-$(CONFIG_DM_PMIC) += pmic.o obj-$(CONFIG_DM_REGULATOR) += regulator.o +obj-$(CONFIG_TIMER) += timer.o endif diff --git a/test/dm/timer.c b/test/dm/timer.c new file mode 100644 index 0000000..bf964c4 --- /dev/null +++ b/test/dm/timer.c @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2015 Thomas Chou + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include +#include +#include +#include +#include + +DECLARE_GLOBAL_DATA_PTR; + +/* + * Basic test of the timer uclass. + */ +static int dm_test_timer_base(struct unit_test_state *uts) +{ + struct udevice *dev; + + ut_assertok(uclass_get_device(UCLASS_TIMER, 0, &dev)); + ut_asserteq(1000000, timer_get_rate(dev)); + + return 0; +} +DM_TEST(dm_test_timer_base, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);