Skip to contentSkip to conversation

sandbox: Add timer simulation

PATCH Superseded Matthias Weisser 4 participants 13 messages Nov 28, 2011 – Dec 2, 2011

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 sandbox: Add timer simulation

Making sleep command work

---
 arch/sandbox/config.mk          |    1 +
 arch/sandbox/cpu/cpu.c          |    2 +-
 arch/sandbox/cpu/os.c           |   15 +++++++++++++++
 board/sandbox/sandbox/sandbox.c |    4 +++-
 include/os.h                    |   14 ++++++++++++++
 5 files changed, 34 insertions(+), 2 deletions(-)
arch/sandbox/config.mk +1 -0
index ab33026..2ec1bb7 100644
@@ -18,3 +18,4 @@
 # MA 02111-1307 USA
 
 PLATFORM_CPPFLAGS += -DCONFIG_SANDBOX -D__SANDBOX__
+PLATFORM_LIBS += -lrt
arch/sandbox/cpu/cpu.c +1 -1
index c7bf8a9..a15d3c2 100644
@@ -34,7 +34,7 @@ int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 /* delay x useconds */
 void __udelay(unsigned long usec)
 {
-	/* Ignore this for now */
+	os_usleep(usec);
 }
 
 unsigned long timer_get_us(void)
arch/sandbox/cpu/os.c +15 -0
index b7c3bf5..d3357db 100644
@@ -23,6 +23,7 @@
 #include <stdlib.h>
 #include <termios.h>
 #include <unistd.h>
+#include <time.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/mman.h>
@@ -94,3 +95,17 @@ void *os_malloc(size_t length)
 	return mmap(NULL, length, PROT_READ | PROT_WRITE,
 			MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
 }
+
+void os_usleep(unsigned long usec)
+{
+	usleep(usec);
+}
+
+u64 os_get_nsec(void)
+{
+	struct timespec tp;
+
+	clock_gettime(CLOCK_MONOTONIC, &tp);
+
+	return tp.tv_sec * 1000000000ULL + tp.tv_nsec;
+}
board/sandbox/sandbox/sandbox.c +3 -1
index 95a5045..f376c74 100644
@@ -21,6 +21,8 @@
 
 #include <common.h>
 
+#include <os.h>
+
 /*
  * Pointer to initial global data area
  *
@@ -34,7 +36,7 @@ void flush_cache(unsigned long start, unsigned long size)
 
 ulong get_timer(ulong base)
 {
-	return 0;
+	return (os_get_nsec() / 1000000) - base;
 }
 
 int timer_init(void)
include/os.h +14 -0
index fd4120c..f3af4f0 100644
@@ -84,3 +84,17 @@ void os_tty_raw(int fd);
  * \return Pointer to length bytes or NULL on error
  */
 void *os_malloc(size_t length);
+
+/**
+ * Access to the usleep function of the os
+ *
+ * \param usec Time to sleep in micro seconds
+ */
+void os_usleep(unsigned long usec);
+
+/**
+ * Gets a monotonic increasing number of nano seconds from the OS
+ *
+ * \return A monotonic increasing time scaled in nano seconds
+ */
+u64 os_get_nsec(void);
Signature · 1 line
1.7.5.4
#1 lore raw

PATCH 1/1 sandbox: Add timer simulation

Quoted 1 line · On Monday 28 November 2011 16:40:29 Matthias Weisser wrote:

Making sleep command work

i like the idea, but using clock_xxx funcs makes me sad (generally requires a "newerish" glibc and -lrt). my only alternative proposal is to use usec's with gettimeofday ... maybe that's good enough ? although we'll probably need to add nsec support eventually anyways for the newer timer code ...

feel like wiring up timer_get_us() too ?
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20111128/818579cd/attachment.pgp>

#2 lore raw

PATCH 1/1 sandbox: Add timer simulation

Am 28.11.2011 23:57, schrieb Mike Frysinger:

Quoted 7 lines · On Monday 28 November 2011 16:40:29 Matthias Weisser wrote:
Quoted 1 line

Making sleep command work

i like the idea, but using clock_xxx funcs makes me sad (generally requires a "newerish" glibc and -lrt). my only alternative proposal is to use usec's with gettimeofday ... maybe that's good enough ? although we'll probably need to add nsec support eventually anyways for the newer timer code ...

I would like to stay with clock_gettime(CLOCK_MONOTONIC, ...) as the value isn't subjected to change when wall time is changed. Still there are chances to get wrong (non monotonic) values when NTP adjusts frequencies. Maybe some ifdef magic can be used to even use CLOCK_MONOTONIC_RAW if it is available and fall back to gettimeofday in case of older systems. The only thing would be then -lrt on the linker command line which has to be sorted out somehow.

Quoted 1 line

feel like wiring up timer_get_us() too ?

Will do in a v2.

Matthias

#3 lore raw

PATCH 1/1 sandbox: Add timer simulation

Quoted 10 lines · On Tuesday 29 November 2011 04:35:06 Matthias Wei?er wrote:

Am 28.11.2011 23:57, schrieb Mike Frysinger:

Quoted 8 lines · On Monday 28 November 2011 16:40:29 Matthias Weisser wrote:
Quoted 1 line

Making sleep command work

i like the idea, but using clock_xxx funcs makes me sad (generally requires a "newerish" glibc and -lrt). my only alternative proposal is to use usec's with gettimeofday ... maybe that's good enough ? although we'll probably need to add nsec support eventually anyways for the newer timer code ...

Quoted 7 lines

I would like to stay with clock_gettime(CLOCK_MONOTONIC, ...) as the value isn't subjected to change when wall time is changed. Still there are chances to get wrong (non monotonic) values when NTP adjusts frequencies. Maybe some ifdef magic can be used to even use CLOCK_MONOTONIC_RAW if it is available and fall back to gettimeofday in case of older systems. The only thing would be then -lrt on the linker command line which has to be sorted out somehow.

i think atm, we're focusing on sandbox working on Linux/glibc hosts. we're not *too* worried about portability atm. we can worry about that once sandbox is more than just a PoC toy :).
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20111129/eb973418/attachment.pgp>

#4 lore raw

PATCH v2 1/1 sandbox: Add timer simulation

In reply to Matthias Weisser

Making sleep command work

---
Changes in v2:
- Added check for existence and working of clock_gettime
- Added implementation of timer_get_us
- Fixed a build error

 arch/sandbox/config.mk          |    1 +
 arch/sandbox/cpu/cpu.c          |    4 ++--
 arch/sandbox/cpu/os.c           |   27 +++++++++++++++++++++++++++
 board/sandbox/sandbox/sandbox.c |    4 +++-
 include/os.h                    |   14 ++++++++++++++
 5 files changed, 47 insertions(+), 3 deletions(-)
arch/sandbox/config.mk +1 -0
index ab33026..2ec1bb7 100644
@@ -18,3 +18,4 @@
 # MA 02111-1307 USA
 
 PLATFORM_CPPFLAGS += -DCONFIG_SANDBOX -D__SANDBOX__
+PLATFORM_LIBS += -lrt
arch/sandbox/cpu/cpu.c +2 -2
index c7bf8a9..d7684d3 100644
@@ -34,12 +34,12 @@ int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 /* delay x useconds */
 void __udelay(unsigned long usec)
 {
-	/* Ignore this for now */
+	os_usleep(usec);
 }
 
 unsigned long timer_get_us(void)
 {
-	return 0;
+	return os_get_nsec() / 1000;
 }
 
 int do_bootm_linux(int flag, int argc, char *argv[], bootm_headers_t *images)
arch/sandbox/cpu/os.c +27 -0
index b7c3bf5..6d55b5c 100644
@@ -23,9 +23,12 @@
 #include <stdlib.h>
 #include <termios.h>
 #include <unistd.h>
+#include <time.h>
+#include <errno.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/mman.h>
+#include <linux/types.h>
 
 #include <os.h>
 
@@ -94,3 +97,27 @@ void *os_malloc(size_t length)
 	return mmap(NULL, length, PROT_READ | PROT_WRITE,
 			MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
 }
+
+void os_usleep(unsigned long usec)
+{
+	usleep(usec);
+}
+
+u64 os_get_nsec(void)
+{
+#if defined(CLOCK_MONOTONIC) && defined(_POSIX_MONOTONIC_CLOCK)
+	struct timespec tp;
+	if (EINVAL == clock_gettime(CLOCK_MONOTONIC, &tp)) {
+		struct timeval tv;
+
+		gettimeofday(&tv, NULL);
+		tp.tv_sec = tv.tv_sec;
+		tp.tv_nsec = tv.tv_usec * 1000;
+	}
+	return tp.tv_sec * 1000000000ULL + tp.tv_nsec;
+#else
+	struct timeval tv;
+	gettimeofday(&tv, NULL);
+	return tv.tv_sec * 1000000000ULL + tv.tv_usec * 1000;
+#endif
+}
board/sandbox/sandbox/sandbox.c +3 -1
index 95a5045..f376c74 100644
@@ -21,6 +21,8 @@
 
 #include <common.h>
 
+#include <os.h>
+
 /*
  * Pointer to initial global data area
  *
@@ -34,7 +36,7 @@ void flush_cache(unsigned long start, unsigned long size)
 
 ulong get_timer(ulong base)
 {
-	return 0;
+	return (os_get_nsec() / 1000000) - base;
 }
 
 int timer_init(void)
include/os.h +14 -0
index fd4120c..f3af4f0 100644
@@ -84,3 +84,17 @@ void os_tty_raw(int fd);
  * \return Pointer to length bytes or NULL on error
  */
 void *os_malloc(size_t length);
+
+/**
+ * Access to the usleep function of the os
+ *
+ * \param usec Time to sleep in micro seconds
+ */
+void os_usleep(unsigned long usec);
+
+/**
+ * Gets a monotonic increasing number of nano seconds from the OS
+ *
+ * \return A monotonic increasing time scaled in nano seconds
+ */
+u64 os_get_nsec(void);
Signature · 1 line
1.7.5.4
#6 lore raw

PATCH v2 1/1 sandbox: Add timer simulation

+Wolfgang

Hi Mike,

Quoted 5 lines · Mike Frysinger

Simon: did we decide to start a dedicated sandbox repo ? -mike

We didn't decide - it was an idea and I suppose given Wolfgang's email about workload and the early and patch-needy state of sandbox I suspect we should do this. The other option is perhaps for an existing maintainer to collect things to push into staging (if there is such a maintainer interested in sandbox).

Wolfgang, do you want a sandbox repo?

Regards,
Simon

#7 lore raw

PATCH v2 1/1 sandbox: Add timer simulation

Quoted 10 lines · On Tuesday 29 November 2011 11:55:17 Simon Glass wrote:
Quoted 1 line · Mike Frysinger

Simon: did we decide to start a dedicated sandbox repo ?

We didn't decide - it was an idea and I suppose given Wolfgang's email about workload and the early and patch-needy state of sandbox I suspect we should do this. The other option is perhaps for an existing maintainer to collect things to push into staging (if there is such a maintainer interested in sandbox).

Wolfgang, do you want a sandbox repo?

well, one of these two things is going to happen :). i'd prefer a dedicated repo, otherwise i'll start using a branch for it in an existing repo.
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20111129/6e306364/attachment.pgp>

#8 lore raw

PATCH v2 1/1 sandbox: Add timer simulation

Hi Mike,

Quoted 10 lines · Mike Frysinger
Quoted 9 lines · On Tuesday 29 November 2011 11:55:17 Simon Glass wrote:
Quoted 1 line · Mike Frysinger

Simon: did we decide to start a dedicated sandbox repo ?

We didn't decide - it was an idea and I suppose given Wolfgang's email about workload and the early and patch-needy state of sandbox I suspect we should do this. The other option is perhaps for an existing maintainer to collect things to push into staging (if there is such a maintainer interested in sandbox).

Quoted 6 lines
Quoted 1 line

Wolfgang, do you want a sandbox repo?

well, one of these two things is going to happen :). ?i'd prefer a dedicated repo, otherwise i'll start using a branch for it in an existing repo. -mike

OK - who can maintain it? Preferably not someone who will be doing a lot of sandbox patches I suppose so that rules me out :-)

Regards,
Simon

#9 lore raw

PATCH v2 1/1 sandbox: Add timer simulation

Quoted 11 lines · On Tuesday 29 November 2011 15:04:04 Simon Glass wrote:
Quoted 10 lines · Mike Frysinger
Quoted 9 lines · On Tuesday 29 November 2011 11:55:17 Simon Glass wrote:
Quoted 1 line · Mike Frysinger

Simon: did we decide to start a dedicated sandbox repo ?

We didn't decide - it was an idea and I suppose given Wolfgang's email about workload and the early and patch-needy state of sandbox I suspect we should do this. The other option is perhaps for an existing maintainer to collect things to push into staging (if there is such a maintainer interested in sandbox).

Quoted 8 lines
Quoted 5 lines
Quoted 1 line

Wolfgang, do you want a sandbox repo?

well, one of these two things is going to happen :). i'd prefer a dedicated repo, otherwise i'll start using a branch for it in an existing repo.

OK - who can maintain it? Preferably not someone who will be doing a lot of sandbox patches I suppose so that rules me out :-)

you or me or both. i'm fine with any of those three options.
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20111129/82cee95b/attachment.pgp>

#10 lore raw

PATCH v2 1/1 sandbox: Add timer simulation

Hi Mike,

Quoted 18 lines · Mike Frysinger
Quoted 17 lines · On Tuesday 29 November 2011 15:04:04 Simon Glass wrote:
Quoted 15 lines · Mike Frysinger
Quoted 10 lines · On Tuesday 29 November 2011 11:55:17 Simon Glass wrote:
Quoted 1 line · Mike Frysinger

Simon: did we decide to start a dedicated sandbox repo ?

We didn't decide - it was an idea and I suppose given Wolfgang's email about workload and the early and patch-needy state of sandbox I suspect we should do this. The other option is perhaps for an existing maintainer to collect things to push into staging (if there is such a maintainer interested in sandbox).

Wolfgang, do you want a sandbox repo?

well, one of these two things is going to happen :). ?i'd prefer a dedicated repo, otherwise i'll start using a branch for it in an existing repo.

Quoted 6 lines
Quoted 2 lines

OK - who can maintain it? Preferably not someone who will be doing a lot of sandbox patches I suppose so that rules me out :-)

you or me or both. ?i'm fine with any of those three options. -mike

I vote for you as you already do this for blackfin and I might get back into this and break fourth with a huge bunch of sandbox patches at any moment. But I can help if you want to have a holiday sometime.

Regards,
Simon

#11 lore raw

PATCH v2 1/1 sandbox: Add timer simulation

Quoted 19 lines · On Tuesday 29 November 2011 16:58:38 Simon Glass wrote:
Quoted 18 lines · Mike Frysinger
Quoted 17 lines · On Tuesday 29 November 2011 15:04:04 Simon Glass wrote:
Quoted 15 lines · Mike Frysinger
Quoted 10 lines · On Tuesday 29 November 2011 11:55:17 Simon Glass wrote:
Quoted 1 line · Mike Frysinger

Simon: did we decide to start a dedicated sandbox repo ?

We didn't decide - it was an idea and I suppose given Wolfgang's email about workload and the early and patch-needy state of sandbox I suspect we should do this. The other option is perhaps for an existing maintainer to collect things to push into staging (if there is such a maintainer interested in sandbox).

Wolfgang, do you want a sandbox repo?

well, one of these two things is going to happen :). i'd prefer a dedicated repo, otherwise i'll start using a branch for it in an existing repo.

Quoted 8 lines
Quoted 4 lines
Quoted 2 lines

OK - who can maintain it? Preferably not someone who will be doing a lot of sandbox patches I suppose so that rules me out :-)

you or me or both. i'm fine with any of those three options.

I vote for you as you already do this for blackfin and I might get back into this and break fourth with a huge bunch of sandbox patches at any moment. But I can help if you want to have a holiday sometime.

until we hear back from Wolfgang, i've started a sandbox branch and merged the patches i think should go in now

if there's other pending ones, please highlight them
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20111202/4c38118d/attachment.pgp>

#12 lore raw

PATCH v2 1/1 sandbox: Add timer simulation

In reply to Matthias Weisser
Quoted 1 line · On Tuesday 29 November 2011 06:16:40 Matthias Weisser wrote:

Making sleep command work

i've added this to my sandbox branch
-mike
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20111202/0904defd/attachment.pgp>