public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH] sandbox: add a sandbox timer and basic test
@ 2015-10-22 13:25 Thomas Chou
  2015-10-29 17:16 ` Simon Glass
  2015-10-30  7:35 ` [U-Boot] [PATCH v2 1/2] common/board_f.c: move mark_bootstage after arch_cpu_init_dm Thomas Chou
  0 siblings, 2 replies; 11+ messages in thread
From: Thomas Chou @ 2015-10-22 13:25 UTC (permalink / raw)
  To: u-boot

Add a sandbox timer which get time from host os and a basic
test.

Signed-off-by: Thomas Chou <thomas@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 ++++++++++++
 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@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", },
+	{ }
+};
+
+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@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

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH] sandbox: add a sandbox timer and basic test
  2015-10-22 13:25 [U-Boot] [PATCH] sandbox: add a sandbox timer and basic test Thomas Chou
@ 2015-10-29 17:16 ` Simon Glass
  2015-10-29 23:27   ` Thomas Chou
  2015-10-30  7:35 ` [U-Boot] [PATCH v2 1/2] common/board_f.c: move mark_bootstage after arch_cpu_init_dm Thomas Chou
  1 sibling, 1 reply; 11+ messages in thread
From: Simon Glass @ 2015-10-29 17:16 UTC (permalink / raw)
  To: u-boot

Hi Thomas,

On 22 October 2015 at 07:25, Thomas Chou <thomas@wytron.com.tw> wrote:
> Add a sandbox timer which get time from host os and a basic
> test.
>
> Signed-off-by: Thomas Chou <thomas@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@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@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@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

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH] sandbox: add a sandbox timer and basic test
  2015-10-29 17:16 ` Simon Glass
@ 2015-10-29 23:27   ` Thomas Chou
  2015-10-29 23:43     ` Simon Glass
  0 siblings, 1 reply; 11+ messages in thread
From: Thomas Chou @ 2015-10-29 23:27 UTC (permalink / raw)
  To: u-boot

Hi Simon,

On 10/30/2015 01:16 AM, Simon Glass wrote:
> Hi Thomas,
>
> On 22 October 2015 at 07:25, Thomas Chou <thomas@wytron.com.tw> wrote:
>> Add a sandbox timer which get time from host os and a basic
>> test.
>>
>> Signed-off-by: Thomas Chou <thomas@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?

But the sandbox will fail (with seg fault or hang) without the change in 
board_f.c . Is this alright?


>> +static const struct udevice_id sandbox_timer_ids[] = {
>> +       { .compatible = "sandbox,timer", },
>
> You can drop the penultimate comma.
>

OK.

Thanks a lot for your review.

Best regards,
Thomas

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH] sandbox: add a sandbox timer and basic test
  2015-10-29 23:27   ` Thomas Chou
@ 2015-10-29 23:43     ` Simon Glass
  2015-10-30  6:08       ` Thomas Chou
  0 siblings, 1 reply; 11+ messages in thread
From: Simon Glass @ 2015-10-29 23:43 UTC (permalink / raw)
  To: u-boot

Hi Thomas,

On 29 October 2015 at 17:27, Thomas Chou <thomas@wytron.com.tw> wrote:
> Hi Simon,
>
> On 10/30/2015 01:16 AM, Simon Glass wrote:
>>
>> Hi Thomas,
>>
>> On 22 October 2015 at 07:25, Thomas Chou <thomas@wytron.com.tw> wrote:
>>>
>>> Add a sandbox timer which get time from host os and a basic
>>> test.
>>>
>>> Signed-off-by: Thomas Chou <thomas@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?
>
>
> But the sandbox will fail (with seg fault or hang) without the change in
> board_f.c . Is this alright?

What if you put that commit first in the series?

>
>
>>> +static const struct udevice_id sandbox_timer_ids[] = {
>>> +       { .compatible = "sandbox,timer", },
>>
>>
>> You can drop the penultimate comma.
>>
>
> OK.
>
> Thanks a lot for your review.
>
> Best regards,
> Thomas
>

Regards,
Simon

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH] sandbox: add a sandbox timer and basic test
  2015-10-29 23:43     ` Simon Glass
@ 2015-10-30  6:08       ` Thomas Chou
  0 siblings, 0 replies; 11+ messages in thread
From: Thomas Chou @ 2015-10-30  6:08 UTC (permalink / raw)
  To: u-boot

Hi Simon,

On 2015?10?30? 07:43, Simon Glass wrote:
>>> Can you please split out the board_f.c change into a separate commit?
>>
>>
>> But the sandbox will fail (with seg fault or hang) without the change in
>> board_f.c . Is this alright?
>
> What if you put that commit first in the series?

Good idea. Thank you.

Best regards,
Thomas

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH v2 1/2] common/board_f.c: move mark_bootstage after arch_cpu_init_dm
  2015-10-22 13:25 [U-Boot] [PATCH] sandbox: add a sandbox timer and basic test Thomas Chou
  2015-10-29 17:16 ` Simon Glass
@ 2015-10-30  7:35 ` Thomas Chou
  2015-10-30  7:35   ` [U-Boot] [PATCH v2 2/2] sandbox: add a sandbox timer and basic test Thomas Chou
  2015-11-06  3:15   ` [U-Boot] [PATCH v2 1/2] common/board_f.c: move mark_bootstage after arch_cpu_init_dm Simon Glass
  1 sibling, 2 replies; 11+ messages in thread
From: Thomas Chou @ 2015-10-30  7:35 UTC (permalink / raw)
  To: u-boot

As mark_bootstage() uses timer, it should go after driver model
is initialized.

Signed-off-by: Thomas Chou <thomas@wytron.com.tw>
Reviewed-by: Simon Glass <sjg@chromium.org>
---
 common/board_f.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/common/board_f.c b/common/board_f.c
index 486e828..d88ada3 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
-- 
2.5.0

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH v2 2/2] sandbox: add a sandbox timer and basic test
  2015-10-30  7:35 ` [U-Boot] [PATCH v2 1/2] common/board_f.c: move mark_bootstage after arch_cpu_init_dm Thomas Chou
@ 2015-10-30  7:35   ` Thomas Chou
  2015-11-06 23:58     ` Simon Glass
  2015-11-06  3:15   ` [U-Boot] [PATCH v2 1/2] common/board_f.c: move mark_bootstage after arch_cpu_init_dm Simon Glass
  1 sibling, 1 reply; 11+ messages in thread
From: Thomas Chou @ 2015-10-30  7:35 UTC (permalink / raw)
  To: u-boot

Add a sandbox timer which get time from host os and a basic
test.

Signed-off-by: Thomas Chou <thomas@wytron.com.tw>
Reviewed-by: Simon Glass <sjg@chromium.org>
---
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 <thomas@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" },
+	{ }
+};
+
+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 <thomas@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.5.0

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH v2 1/2] common/board_f.c: move mark_bootstage after arch_cpu_init_dm
  2015-10-30  7:35 ` [U-Boot] [PATCH v2 1/2] common/board_f.c: move mark_bootstage after arch_cpu_init_dm Thomas Chou
  2015-10-30  7:35   ` [U-Boot] [PATCH v2 2/2] sandbox: add a sandbox timer and basic test Thomas Chou
@ 2015-11-06  3:15   ` Simon Glass
  2015-11-06  4:08     ` Thomas Chou
  1 sibling, 1 reply; 11+ messages in thread
From: Simon Glass @ 2015-11-06  3:15 UTC (permalink / raw)
  To: u-boot

On 30 October 2015 at 01:35, Thomas Chou <thomas@wytron.com.tw> wrote:
> As mark_bootstage() uses timer, it should go after driver model
> is initialized.
>
> Signed-off-by: Thomas Chou <thomas@wytron.com.tw>
> Reviewed-by: Simon Glass <sjg@chromium.org>
> ---
>  common/board_f.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH v2 1/2] common/board_f.c: move mark_bootstage after arch_cpu_init_dm
  2015-11-06  3:15   ` [U-Boot] [PATCH v2 1/2] common/board_f.c: move mark_bootstage after arch_cpu_init_dm Simon Glass
@ 2015-11-06  4:08     ` Thomas Chou
  2015-11-06 23:58       ` Simon Glass
  0 siblings, 1 reply; 11+ messages in thread
From: Thomas Chou @ 2015-11-06  4:08 UTC (permalink / raw)
  To: u-boot

Hi Simon,

On 2015?11?06? 11:15, Simon Glass wrote:
> On 30 October 2015 at 01:35, Thomas Chou <thomas@wytron.com.tw> wrote:
>> As mark_bootstage() uses timer, it should go after driver model
>> is initialized.
>>
>> Signed-off-by: Thomas Chou <thomas@wytron.com.tw>
>> Reviewed-by: Simon Glass <sjg@chromium.org>
>> ---
>>   common/board_f.c | 2 +-
>>   1 file changed, 1 insertion(+), 1 deletion(-)
>
> Reviewed-by: Simon Glass <sjg@chromium.org>
>

Will you please pick up this series? Or shall I pick them? As Bin Meng 
has follow up patches to timer uclass, I hope we can resolve rebase issue.

Best regards,
Thomas

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH v2 1/2] common/board_f.c: move mark_bootstage after arch_cpu_init_dm
  2015-11-06  4:08     ` Thomas Chou
@ 2015-11-06 23:58       ` Simon Glass
  0 siblings, 0 replies; 11+ messages in thread
From: Simon Glass @ 2015-11-06 23:58 UTC (permalink / raw)
  To: u-boot

On 5 November 2015 at 20:08, Thomas Chou <thomas@wytron.com.tw> wrote:
> Hi Simon,
>
>
> On 2015?11?06? 11:15, Simon Glass wrote:
>>
>> On 30 October 2015 at 01:35, Thomas Chou <thomas@wytron.com.tw> wrote:
>>>
>>> As mark_bootstage() uses timer, it should go after driver model
>>> is initialized.
>>>
>>> Signed-off-by: Thomas Chou <thomas@wytron.com.tw>
>>> Reviewed-by: Simon Glass <sjg@chromium.org>
>>> ---
>>>   common/board_f.c | 2 +-
>>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>
>>
>> Reviewed-by: Simon Glass <sjg@chromium.org>
>>
>
> Will you please pick up this series? Or shall I pick them? As Bin Meng has
> follow up patches to timer uclass, I hope we can resolve rebase issue.

OK.

Applied to u-boot-dm, thanks!

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [U-Boot] [PATCH v2 2/2] sandbox: add a sandbox timer and basic test
  2015-10-30  7:35   ` [U-Boot] [PATCH v2 2/2] sandbox: add a sandbox timer and basic test Thomas Chou
@ 2015-11-06 23:58     ` Simon Glass
  0 siblings, 0 replies; 11+ messages in thread
From: Simon Glass @ 2015-11-06 23:58 UTC (permalink / raw)
  To: u-boot

On 30 October 2015 at 00:35, Thomas Chou <thomas@wytron.com.tw> wrote:
> Add a sandbox timer which get time from host os and a basic
> test.
>
> Signed-off-by: Thomas Chou <thomas@wytron.com.tw>
> Reviewed-by: Simon Glass <sjg@chromium.org>
> ---
> 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

Applied to u-boot-dm, thanks!

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2015-11-06 23:58 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-10-22 13:25 [U-Boot] [PATCH] sandbox: add a sandbox timer and basic test Thomas Chou
2015-10-29 17:16 ` Simon Glass
2015-10-29 23:27   ` Thomas Chou
2015-10-29 23:43     ` Simon Glass
2015-10-30  6:08       ` Thomas Chou
2015-10-30  7:35 ` [U-Boot] [PATCH v2 1/2] common/board_f.c: move mark_bootstage after arch_cpu_init_dm Thomas Chou
2015-10-30  7:35   ` [U-Boot] [PATCH v2 2/2] sandbox: add a sandbox timer and basic test Thomas Chou
2015-11-06 23:58     ` Simon Glass
2015-11-06  3:15   ` [U-Boot] [PATCH v2 1/2] common/board_f.c: move mark_bootstage after arch_cpu_init_dm Simon Glass
2015-11-06  4:08     ` Thomas Chou
2015-11-06 23:58       ` Simon Glass

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox