Hi Thomas, On 22 October 2015 at 07:25, Thomas Chou <tho...@wytron.com.tw> wrote: > Add a sandbox timer which get time from host os and a basic > test. > > Signed-off-by: Thomas Chou <tho...@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 <s...@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 <tho...@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 <tho...@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 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot