[U-Boot] [PATCH] sandbox: add a sandbox timer and basic test
Simon Glass
sjg at chromium.org
Thu Oct 29 18:16:11 CET 2015
Hi Thomas,
On 22 October 2015 at 07:25, Thomas Chou <thomas at wytron.com.tw> wrote:
> Add a sandbox timer which get time from host os and a basic
> test.
>
> Signed-off-by: Thomas Chou <thomas at wytron.com.tw>
> ---
> arch/sandbox/dts/sandbox.dts | 4 ++
> board/sandbox/sandbox.c | 2 +
> common/board_f.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 ++++++++++++
Can you please split out the board_f.c change into a separate commit?
Otherwise:
Reviewed-by: Simon Glass <sjg at chromium.org>
> 11 files changed, 107 insertions(+), 1 deletion(-)
> 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/common/board_f.c b/common/board_f.c
> index 613332e..0899144 100644
> --- a/common/board_f.c
> +++ b/common/board_f.c
> @@ -778,9 +778,9 @@ static init_fnc_t init_sequence_f[] = {
> x86_fsp_init,
> #endif
> arch_cpu_init, /* basic arch cpu dependent setup */
> - mark_bootstage,
> initf_dm,
> arch_cpu_init_dm,
> + mark_bootstage, /* need timer, go after init dm */
> #if defined(CONFIG_BOARD_EARLY_INIT_F)
> board_early_init_f,
> #endif
> diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig
> index b2675c7..0b3785b 100644
> --- a/configs/sandbox_defconfig
> +++ b/configs/sandbox_defconfig
> @@ -47,6 +47,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..8193170
> --- /dev/null
> +++ b/drivers/timer/sandbox_timer.c
> @@ -0,0 +1,53 @@
> +/*
> + * Copyright (C) 2015 Thomas Chou <thomas at wytron.com.tw>
> + *
> + * SPDX-License-Identifier: GPL-2.0+
> + */
> +
> +#include <common.h>
> +#include <dm.h>
> +#include <errno.h>
> +#include <timer.h>
> +#include <os.h>
> +
> +/* 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", },
You can drop the penultimate comma.
> + { }
> +};
> +
> +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 32e3a9b..db7c8bd 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 eda9643..d5e93f0 100644
> --- a/test/dm/Makefile
> +++ b/test/dm/Makefile
> @@ -32,4 +32,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 <thomas at wytron.com.tw>
> + *
> + * SPDX-License-Identifier: GPL-2.0+
> + */
> +
> +#include <common.h>
> +#include <dm.h>
> +#include <timer.h>
> +#include <dm/test.h>
> +#include <test/ut.h>
> +
> +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);
> --
> 2.1.4
>
Regards,
Simon
More information about the U-Boot
mailing list