[PATCH 4/5] sandbox: implement reset
Heinrich Schuchardt
xypron.glpk at gmx.de
Tue Oct 27 09:02:28 CET 2020
On 27.10.20 05:52, Simon Glass wrote:
> Hi Heinrich,
>
> On Sun, 25 Oct 2020 at 00:04, Heinrich Schuchardt <xypron.glpk at gmx.de> wrote:
>>
>> Up to now the sandbox would shutdown upon a cold reset request. Instead it
>> should be reset.
>>
>> In our coding we use static variables. The only safe way to return to an
>> initial state is to relaunch the U-Boot binary.
>
> This is unfortunate, but I suspect you may be right. Have you looked at it?
>
>>
>> The reset implementation uses a longjmp() to return to the main() function
>> and then relaunches U-Boot using execv().
>>
>> Signed-off-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
>> ---
>> arch/sandbox/cpu/os.c | 14 ++++++++++++++
>> arch/sandbox/cpu/start.c | 22 ++++++++++++++++++++++
>> arch/sandbox/cpu/state.c | 1 +
>> arch/sandbox/include/asm/u-boot-sandbox.h | 3 +++
>> drivers/sysreset/sysreset_sandbox.c | 3 +++
>> include/os.h | 5 +++++
>> 6 files changed, 48 insertions(+)
>>
>> diff --git a/arch/sandbox/cpu/os.c b/arch/sandbox/cpu/os.c
>> index c461fb0db0..ed044e87fb 100644
>> --- a/arch/sandbox/cpu/os.c
>> +++ b/arch/sandbox/cpu/os.c
>> @@ -817,3 +817,17 @@ void *os_find_text_base(void)
>>
>> return base;
>> }
>> +
>> +void os_relaunch(int argc, char *argv[])
>> +{
>> + char **args;
>> +
>> + args = calloc(argc + 1, sizeof(char *));
>> + if (!args)
>> + goto out;
>> + memcpy(args, argv, sizeof(char *) * argc);
>> + args[argc] = NULL;
>> + execv(args[0], args);
>> +out:
>> + os_exit(1);
>> +}
>> diff --git a/arch/sandbox/cpu/start.c b/arch/sandbox/cpu/start.c
>> index c6a2bbe468..ee1d4b9581 100644
>> --- a/arch/sandbox/cpu/start.c
>> +++ b/arch/sandbox/cpu/start.c
>> @@ -5,6 +5,7 @@
>>
>> #include <common.h>
>> #include <command.h>
>> +#include <dm/root.h>
>
> Put before linux/ below
https://www.denx.de/wiki/U-Boot/CodingStyle does not allow this. It
requires: "Within that order, sort your includes.". Alphabetically dm/*
goes before errno.h.
Should the driver model require anything else, please, update the coding
style guideline accordingly. Looking at dm/root.h I cannot see any such
requirement.
I think we should move the code style guideline to the HTML
documentation and get rid of the Wiki page.
Best regards
Heinrich
>
>> #include <errno.h>
>> #include <init.h>
>> #include <os.h>
>> @@ -14,11 +15,15 @@
>> #include <asm/io.h>
>> #include <asm/malloc.h>
>> #include <asm/sections.h>
>> +#include <asm/setjmp.h>
>> #include <asm/state.h>
>> #include <linux/ctype.h>
>>
>> DECLARE_GLOBAL_DATA_PTR;
More information about the U-Boot
mailing list