All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/1] sandbox: keep time offset when resetting
@ 2020-12-30 17:07 Heinrich Schuchardt
  2021-01-07 12:35 ` Simon Glass
  0 siblings, 1 reply; 5+ messages in thread
From: Heinrich Schuchardt @ 2020-12-30 17:07 UTC (permalink / raw)
  To: u-boot

The UEFI Self Certification Test (SCT) checks the SetTime() service with
the following steps:

* set date
* reset
* check date matches

To be compliant the sandbox should keep the offset to the host RTC during
resets. The implementation uses the environment variable
UBOOT_SB_TIME_OFFSET to persist the offset.

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
---
 arch/sandbox/cpu/os.c      | 25 +++++++++++++++++++++++++
 doc/arch/sandbox.rst       |  7 +++++++
 drivers/rtc/i2c_rtc_emul.c |  4 +++-
 include/os.h               | 18 ++++++++++++++++++
 4 files changed, 53 insertions(+), 1 deletion(-)

diff --git a/arch/sandbox/cpu/os.c b/arch/sandbox/cpu/os.c
index b56fa04a34..87fce57a36 100644
--- a/arch/sandbox/cpu/os.c
+++ b/arch/sandbox/cpu/os.c
@@ -32,6 +32,9 @@
 #include <os.h>
 #include <rtc_def.h>

+/* Environment variable for time offset */
+#define ENV_TIME_OFFSET "UBOOT_SB_TIME_OFFSET"
+
 /* Operating System Interface */

 struct os_mem_hdr {
@@ -793,6 +796,28 @@ int os_spl_to_uboot(const char *fname)
 	return os_jump_to_file(fname);
 }

+long os_get_time_offset(void)
+{
+	const char *offset;
+
+	offset = getenv(ENV_TIME_OFFSET);
+	if (offset)
+		return strtol(offset, NULL, 0);
+	return 0;
+}
+
+void os_set_time_offset(long offset)
+{
+	char buf[21];
+	int ret;
+
+	snprintf(buf, sizeof(buf), "%ld", offset);
+	ret = setenv(ENV_TIME_OFFSET, buf, true);
+	if (ret)
+		printf("Could not set environment variable %s\n",
+		       ENV_TIME_OFFSET);
+}
+
 void os_localtime(struct rtc_time *rt)
 {
 	time_t t = time(NULL);
diff --git a/doc/arch/sandbox.rst b/doc/arch/sandbox.rst
index 4674c420ac..ee720c5a09 100644
--- a/doc/arch/sandbox.rst
+++ b/doc/arch/sandbox.rst
@@ -131,6 +131,13 @@ available options. Some of these are described below:
 * -i
   - Go to interactive mode after executing the commands specified by -c.

+Environment Variables
+---------------------
+
+UBOOT_SB_TIME_OFFSET
+    This environment variable stores the offset of the emulated real time clock
+    to the host's real time clock in seconds. The offset defaults to zero.
+
 Memory Emulation
 ----------------

diff --git a/drivers/rtc/i2c_rtc_emul.c b/drivers/rtc/i2c_rtc_emul.c
index 7f78ff83cb..ef6f6a8e1d 100644
--- a/drivers/rtc/i2c_rtc_emul.c
+++ b/drivers/rtc/i2c_rtc_emul.c
@@ -57,6 +57,7 @@ long sandbox_i2c_rtc_set_offset(struct udevice *dev, bool use_system_time,
 	plat->use_system_time = use_system_time;
 	if (offset != -1)
 		plat->offset = offset;
+	os_set_time_offset(plat->offset);

 	return old_offset;
 }
@@ -80,7 +81,7 @@ static void reset_time(struct udevice *dev)

 	os_localtime(&now);
 	plat->base_time = rtc_mktime(&now);
-	plat->offset = 0;
+	plat->offset = os_get_time_offset();
 	plat->use_system_time = true;
 }

@@ -115,6 +116,7 @@ static int sandbox_i2c_rtc_set(struct udevice *dev, const struct rtc_time *time)
 		now = plat->base_time;
 	}
 	plat->offset = rtc_mktime(time) - now;
+	os_set_time_offset(plat->offset);

 	return 0;
 }
diff --git a/include/os.h b/include/os.h
index 0913b47b3a..e192e32d59 100644
--- a/include/os.h
+++ b/include/os.h
@@ -424,4 +424,22 @@ int os_setup_signal_handlers(void);
  */
 void os_signal_action(int sig, unsigned long pc);

+/**
+ * os_get_time_offset() - get time offset
+ *
+ * Get the time offset from environment variable UBOOT_SB_TIME_OFFSET.
+ *
+ * Return:	offset in seconds
+ */
+long os_get_time_offset(void);
+
+/**
+ * os_set_time_offset() - set time offset
+ *
+ * Save the time offset in environment variable UBOOT_SB_TIME_OFFSET.
+ *
+ * @offset:	offset in seconds
+ */
+void os_set_time_offset(long offset);
+
 #endif
--
2.29.2

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

* [PATCH 1/1] sandbox: keep time offset when resetting
  2020-12-30 17:07 [PATCH 1/1] sandbox: keep time offset when resetting Heinrich Schuchardt
@ 2021-01-07 12:35 ` Simon Glass
  2021-01-21  9:19   ` Heinrich Schuchardt
  0 siblings, 1 reply; 5+ messages in thread
From: Simon Glass @ 2021-01-07 12:35 UTC (permalink / raw)
  To: u-boot

Hi Heinrich,

On Wed, 30 Dec 2020 at 10:07, Heinrich Schuchardt <xypron.glpk@gmx.de> wrote:
>
> The UEFI Self Certification Test (SCT) checks the SetTime() service with
> the following steps:
>
> * set date
> * reset
> * check date matches
>
> To be compliant the sandbox should keep the offset to the host RTC during
> resets. The implementation uses the environment variable
> UBOOT_SB_TIME_OFFSET to persist the offset.
>
> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
> ---
>  arch/sandbox/cpu/os.c      | 25 +++++++++++++++++++++++++
>  doc/arch/sandbox.rst       |  7 +++++++
>  drivers/rtc/i2c_rtc_emul.c |  4 +++-
>  include/os.h               | 18 ++++++++++++++++++
>  4 files changed, 53 insertions(+), 1 deletion(-)

Sandbox writes driver settings to a state file that can be read on
start-up. Is that suitable here?

Regards,
Simon

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

* [PATCH 1/1] sandbox: keep time offset when resetting
  2021-01-07 12:35 ` Simon Glass
@ 2021-01-21  9:19   ` Heinrich Schuchardt
  2021-01-21 15:48     ` Simon Glass
  2021-01-30 21:27     ` Simon Glass
  0 siblings, 2 replies; 5+ messages in thread
From: Heinrich Schuchardt @ 2021-01-21  9:19 UTC (permalink / raw)
  To: u-boot

On 07.01.21 13:35, Simon Glass wrote:
> Hi Heinrich,
>
> On Wed, 30 Dec 2020 at 10:07, Heinrich Schuchardt <xypron.glpk@gmx.de> wrote:
>>
>> The UEFI Self Certification Test (SCT) checks the SetTime() service with
>> the following steps:
>>
>> * set date
>> * reset
>> * check date matches
>>
>> To be compliant the sandbox should keep the offset to the host RTC during
>> resets. The implementation uses the environment variable
>> UBOOT_SB_TIME_OFFSET to persist the offset.
>>
>> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
>> ---
>>  arch/sandbox/cpu/os.c      | 25 +++++++++++++++++++++++++
>>  doc/arch/sandbox.rst       |  7 +++++++
>>  drivers/rtc/i2c_rtc_emul.c |  4 +++-
>>  include/os.h               | 18 ++++++++++++++++++
>>  4 files changed, 53 insertions(+), 1 deletion(-)
>
> Sandbox writes driver settings to a state file that can be read on
> start-up. Is that suitable here?

The sandbox only reads the state from file when using the -r and only
writes the state to while when using the -w option.

This should be documented in
https://u-boot.readthedocs.io/en/latest/arch/sandbox.html?highlight=sandbox#command-line-options

The RTC offset needs to be kept irrespective of command line arguments
during resets. I could not find a simpler way then using an environment
variable.

We could additionally persist the offset in the state file. Is this what
you ask for? For my testing purposes I don't need it.

Best regards

Heinrich

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

* [PATCH 1/1] sandbox: keep time offset when resetting
  2021-01-21  9:19   ` Heinrich Schuchardt
@ 2021-01-21 15:48     ` Simon Glass
  2021-01-30 21:27     ` Simon Glass
  1 sibling, 0 replies; 5+ messages in thread
From: Simon Glass @ 2021-01-21 15:48 UTC (permalink / raw)
  To: u-boot

Hi Heinrich,

On Thu, 21 Jan 2021 at 02:19, Heinrich Schuchardt <xypron.glpk@gmx.de> wrote:
>
> On 07.01.21 13:35, Simon Glass wrote:
> > Hi Heinrich,
> >
> > On Wed, 30 Dec 2020 at 10:07, Heinrich Schuchardt <xypron.glpk@gmx.de> wrote:
> >>
> >> The UEFI Self Certification Test (SCT) checks the SetTime() service with
> >> the following steps:
> >>
> >> * set date
> >> * reset
> >> * check date matches
> >>
> >> To be compliant the sandbox should keep the offset to the host RTC during
> >> resets. The implementation uses the environment variable
> >> UBOOT_SB_TIME_OFFSET to persist the offset.
> >>
> >> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
> >> ---
> >>  arch/sandbox/cpu/os.c      | 25 +++++++++++++++++++++++++
> >>  doc/arch/sandbox.rst       |  7 +++++++
> >>  drivers/rtc/i2c_rtc_emul.c |  4 +++-
> >>  include/os.h               | 18 ++++++++++++++++++
> >>  4 files changed, 53 insertions(+), 1 deletion(-)
> >
> > Sandbox writes driver settings to a state file that can be read on
> > start-up. Is that suitable here?
>
> The sandbox only reads the state from file when using the -r and only
> writes the state to while when using the -w option.
>
> This should be documented in
> https://u-boot.readthedocs.io/en/latest/arch/sandbox.html?highlight=sandbox#command-line-options
>
> The RTC offset needs to be kept irrespective of command line arguments
> during resets. I could not find a simpler way then using an environment
> variable.

Given the way that reset works (relaunching the ELF app) I don't know
of a better way either. I suppose you could launch it with the RTC
offset as a command-line parameter?

>
> We could additionally persist the offset in the state file. Is this what
> you ask for? For my testing purposes I don't need it.

I don't think so. It is designed for passing driver / state
information between U-Boot phases. I suppose it should be used for
persisting state across reset too, since in principle the emulated
hardware does not change just because sandbox has reset. But in that
case we don't really need to write a file, just keep it in memory
somewhere. Or at most we could write a temporary file.

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

Regards,
Simon

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

* [PATCH 1/1] sandbox: keep time offset when resetting
  2021-01-21  9:19   ` Heinrich Schuchardt
  2021-01-21 15:48     ` Simon Glass
@ 2021-01-30 21:27     ` Simon Glass
  1 sibling, 0 replies; 5+ messages in thread
From: Simon Glass @ 2021-01-30 21:27 UTC (permalink / raw)
  To: u-boot

Hi Heinrich,

On Thu, 21 Jan 2021 at 02:19, Heinrich Schuchardt <xypron.glpk@gmx.de> wrote:
>
> On 07.01.21 13:35, Simon Glass wrote:
> > Hi Heinrich,
> >
> > On Wed, 30 Dec 2020 at 10:07, Heinrich Schuchardt <xypron.glpk@gmx.de> wrote:
> >>
> >> The UEFI Self Certification Test (SCT) checks the SetTime() service with
> >> the following steps:
> >>
> >> * set date
> >> * reset
> >> * check date matches
> >>
> >> To be compliant the sandbox should keep the offset to the host RTC during
> >> resets. The implementation uses the environment variable
> >> UBOOT_SB_TIME_OFFSET to persist the offset.
> >>
> >> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
> >> ---
> >>  arch/sandbox/cpu/os.c      | 25 +++++++++++++++++++++++++
> >>  doc/arch/sandbox.rst       |  7 +++++++
> >>  drivers/rtc/i2c_rtc_emul.c |  4 +++-
> >>  include/os.h               | 18 ++++++++++++++++++
> >>  4 files changed, 53 insertions(+), 1 deletion(-)
> >
> > Sandbox writes driver settings to a state file that can be read on
> > start-up. Is that suitable here?
>
> The sandbox only reads the state from file when using the -r and only
> writes the state to while when using the -w option.
>
> This should be documented in
> https://u-boot.readthedocs.io/en/latest/arch/sandbox.html?highlight=sandbox#command-line-options
>
> The RTC offset needs to be kept irrespective of command line arguments
> during resets. I could not find a simpler way then using an environment
> variable.

Given the way that reset works (relaunching the ELF app) I don't know
of a better way either. I suppose you could launch it with the RTC
offset as a command-line parameter?

>
> We could additionally persist the offset in the state file. Is this what
> you ask for? For my testing purposes I don't need it.

I don't think so. It is designed for passing driver / state
information between U-Boot phases. I suppose it should be used for
persisting state across reset too, since in principle the emulated
hardware does not change just because sandbox has reset. But in that
case we don't really need to write a file, just keep it in memory
somewhere. Or at most we could write a temporary file.

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

Regards,
Simon

Applied to u-boot-dm, thanks!

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

end of thread, other threads:[~2021-01-30 21:27 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-30 17:07 [PATCH 1/1] sandbox: keep time offset when resetting Heinrich Schuchardt
2021-01-07 12:35 ` Simon Glass
2021-01-21  9:19   ` Heinrich Schuchardt
2021-01-21 15:48     ` Simon Glass
2021-01-30 21:27     ` Simon Glass

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.