public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH] bootz: fix silent console
@ 2014-11-18 12:52 Markus Niebel
  2014-11-20 19:15 ` Simon Glass
  0 siblings, 1 reply; 4+ messages in thread
From: Markus Niebel @ 2014-11-18 12:52 UTC (permalink / raw)
  To: u-boot

From: Markus Niebel <Markus.Niebel@tq-group.com>

fixup was lost during split between command code and logic.

Signed-off-by: Markus Niebel <Markus.Niebel@tq-group.com>
---
 common/bootm.c     | 2 +-
 common/cmd_bootm.c | 6 ++++++
 include/bootm.h    | 2 ++
 3 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/common/bootm.c b/common/bootm.c
index 6b3ea8c..94b9503 100644
--- a/common/bootm.c
+++ b/common/bootm.c
@@ -467,7 +467,7 @@ ulong bootm_disable_interrupts(void)
 #define CONSOLE_ARG     "console="
 #define CONSOLE_ARG_LEN (sizeof(CONSOLE_ARG) - 1)
 
-static void fixup_silent_linux(void)
+void fixup_silent_linux(void)
 {
 	char *buf;
 	const char *env_val;
diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c
index 6723360..d3e410a 100644
--- a/common/cmd_bootm.c
+++ b/common/cmd_bootm.c
@@ -596,6 +596,12 @@ int do_bootz(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 	 * disable interrupts ourselves
 	 */
 	bootm_disable_interrupts();
+#if defined(CONFIG_SILENT_CONSOLE) && !defined(CONFIG_SILENT_U_BOOT_ONLY)
+	/*
+	 * same goes for fixup_silent_linux
+	 */
+	fixup_silent_linux();
+#endif
 
 	images.os.os = IH_OS_LINUX;
 	ret = do_bootm_states(cmdtp, flag, argc, argv,
diff --git a/include/bootm.h b/include/bootm.h
index b3d1a62..8e094b3 100644
--- a/include/bootm.h
+++ b/include/bootm.h
@@ -50,6 +50,8 @@ ulong bootm_disable_interrupts(void);
 
 /* This is a special function used by booti/bootz */
 int bootm_find_ramdisk_fdt(int flag, int argc, char * const argv[]);
+/* This function is used also used by bootz */
+void fixup_silent_linux(void);
 
 int do_bootm_states(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
 		    int states, bootm_headers_t *images, int boot_progress);
-- 
2.1.1

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

* [U-Boot] [PATCH] bootz: fix silent console
  2014-11-18 12:52 [U-Boot] [PATCH] bootz: fix silent console Markus Niebel
@ 2014-11-20 19:15 ` Simon Glass
  2014-11-25  8:31   ` Markus Niebel
  0 siblings, 1 reply; 4+ messages in thread
From: Simon Glass @ 2014-11-20 19:15 UTC (permalink / raw)
  To: u-boot

Hi Markus,

On 18 November 2014 12:52, Markus Niebel <list-09_u-boot@tqsc.de> wrote:
> From: Markus Niebel <Markus.Niebel@tq-group.com>
>
> fixup was lost during split between command code and logic.
>
> Signed-off-by: Markus Niebel <Markus.Niebel@tq-group.com>
> ---
>  common/bootm.c     | 2 +-
>  common/cmd_bootm.c | 6 ++++++
>  include/bootm.h    | 2 ++
>  3 files changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/common/bootm.c b/common/bootm.c
> index 6b3ea8c..94b9503 100644
> --- a/common/bootm.c
> +++ b/common/bootm.c
> @@ -467,7 +467,7 @@ ulong bootm_disable_interrupts(void)
>  #define CONSOLE_ARG     "console="
>  #define CONSOLE_ARG_LEN (sizeof(CONSOLE_ARG) - 1)
>
> -static void fixup_silent_linux(void)
> +void fixup_silent_linux(void)
>  {
>         char *buf;
>         const char *env_val;
> diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c
> index 6723360..d3e410a 100644
> --- a/common/cmd_bootm.c
> +++ b/common/cmd_bootm.c
> @@ -596,6 +596,12 @@ int do_bootz(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
>          * disable interrupts ourselves
>          */
>         bootm_disable_interrupts();
> +#if defined(CONFIG_SILENT_CONSOLE) && !defined(CONFIG_SILENT_U_BOOT_ONLY)
> +       /*
> +        * same goes for fixup_silent_linux
> +        */
> +       fixup_silent_linux();
> +#endif
>
>         images.os.os = IH_OS_LINUX;
>         ret = do_bootm_states(cmdtp, flag, argc, argv,
> diff --git a/include/bootm.h b/include/bootm.h
> index b3d1a62..8e094b3 100644
> --- a/include/bootm.h
> +++ b/include/bootm.h
> @@ -50,6 +50,8 @@ ulong bootm_disable_interrupts(void);
>
>  /* This is a special function used by booti/bootz */
>  int bootm_find_ramdisk_fdt(int flag, int argc, char * const argv[]);
> +/* This function is used also used by bootz */
> +void fixup_silent_linux(void);
>
>  int do_bootm_states(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
>                     int states, bootm_headers_t *images, int boot_progress);

Quite a bit of effort was expended trying to join this code back
together rather than having two separate code paths for bootm and
bootz.

Since this is cmdline-related, I suggest something like this:

- Enable BOOTM_STATE_OS_CMDLINE for all archs in do_bootm()
- Call fixup_silent_linux() in do_bootm_states() when processing
BOOTM_STATE_OS_CMDLINE
- Add BOOTM_STATE_OS_CMDLINE to the do_bootm_states() call in do_bootz()

Or similar...that way we keep bootm and bootz in sync. The separate
call to bootm_disable_interrupts() is unfortunate but is a problem for
another day.

Regards,
Simon

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

* [U-Boot] [PATCH] bootz: fix silent console
  2014-11-20 19:15 ` Simon Glass
@ 2014-11-25  8:31   ` Markus Niebel
  2014-11-25 14:03     ` Simon Glass
  0 siblings, 1 reply; 4+ messages in thread
From: Markus Niebel @ 2014-11-25  8:31 UTC (permalink / raw)
  To: u-boot

Hello Simon,

Am 20.11.2014 um 20:15 schrieb Simon Glass:
> Hi Markus,
> 
> On 18 November 2014 12:52, Markus Niebel <list-09_u-boot@tqsc.de> wrote:
>> From: Markus Niebel <Markus.Niebel@tq-group.com>
>>
>> fixup was lost during split between command code and logic.
>>
>> Signed-off-by: Markus Niebel <Markus.Niebel@tq-group.com>
>> ---
>>  common/bootm.c     | 2 +-
>>  common/cmd_bootm.c | 6 ++++++
>>  include/bootm.h    | 2 ++
>>  3 files changed, 9 insertions(+), 1 deletion(-)
>>
>> diff --git a/common/bootm.c b/common/bootm.c
>> index 6b3ea8c..94b9503 100644
>> --- a/common/bootm.c
>> +++ b/common/bootm.c
>> @@ -467,7 +467,7 @@ ulong bootm_disable_interrupts(void)
>>  #define CONSOLE_ARG     "console="
>>  #define CONSOLE_ARG_LEN (sizeof(CONSOLE_ARG) - 1)
>>
>> -static void fixup_silent_linux(void)
>> +void fixup_silent_linux(void)
>>  {
>>         char *buf;
>>         const char *env_val;
>> diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c
>> index 6723360..d3e410a 100644
>> --- a/common/cmd_bootm.c
>> +++ b/common/cmd_bootm.c
>> @@ -596,6 +596,12 @@ int do_bootz(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
>>          * disable interrupts ourselves
>>          */
>>         bootm_disable_interrupts();
>> +#if defined(CONFIG_SILENT_CONSOLE) && !defined(CONFIG_SILENT_U_BOOT_ONLY)
>> +       /*
>> +        * same goes for fixup_silent_linux
>> +        */
>> +       fixup_silent_linux();
>> +#endif
>>
>>         images.os.os = IH_OS_LINUX;
>>         ret = do_bootm_states(cmdtp, flag, argc, argv,
>> diff --git a/include/bootm.h b/include/bootm.h
>> index b3d1a62..8e094b3 100644
>> --- a/include/bootm.h
>> +++ b/include/bootm.h
>> @@ -50,6 +50,8 @@ ulong bootm_disable_interrupts(void);
>>
>>  /* This is a special function used by booti/bootz */
>>  int bootm_find_ramdisk_fdt(int flag, int argc, char * const argv[]);
>> +/* This function is used also used by bootz */
>> +void fixup_silent_linux(void);
>>
>>  int do_bootm_states(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
>>                     int states, bootm_headers_t *images, int boot_progress);
> 
> Quite a bit of effort was expended trying to join this code back
> together rather than having two separate code paths for bootm and
> bootz.

I Understand

> 
> Since this is cmdline-related, I suggest something like this:
> 
> - Enable BOOTM_STATE_OS_CMDLINE for all archs in do_bootm()
> - Call fixup_silent_linux() in do_bootm_states() when processing
> BOOTM_STATE_OS_CMDLINE
> - Add BOOTM_STATE_OS_CMDLINE to the do_bootm_states() call in do_bootz()
> 

I read through the code to find out, what the implications of your
suggestions were. Since I'm not very familiar with this piece of code,
please correct me, If i'm wrong:

- rename the arch specific do_bootm_linux to arch_bootm_linux
- implement a generic version of do_bootm_linux inside bootm_os.c 
- call arch_bootm_linux from generic do_bootm_linux 
- move the call to fixup_silent_linux to new do_bootm_linux for the
  BOOTM_STATE_OS_CMDLINE case 
- mask BOOTM_STATE_OS_CMDLINE before calling arch_bootm_linux for all but
  MIPS and PPC 

because this seems a bit intrusive I'm not sure. But if this is the wy to go, I
will prepare a patch.

> Or similar...that way we keep bootm and bootz in sync. The separate
> call to bootm_disable_interrupts() is unfortunate but is a problem for
> another day.
> 
> Regards,
> Simon
> 
Regards,
Markus

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

* [U-Boot] [PATCH] bootz: fix silent console
  2014-11-25  8:31   ` Markus Niebel
@ 2014-11-25 14:03     ` Simon Glass
  0 siblings, 0 replies; 4+ messages in thread
From: Simon Glass @ 2014-11-25 14:03 UTC (permalink / raw)
  To: u-boot

Hi Markus,

On 25 November 2014 at 01:31, Markus Niebel <list-09_u-boot@tqsc.de> wrote:
> Hello Simon,
>
> Am 20.11.2014 um 20:15 schrieb Simon Glass:
>> Hi Markus,
>>
>> On 18 November 2014 12:52, Markus Niebel <list-09_u-boot@tqsc.de> wrote:
>>> From: Markus Niebel <Markus.Niebel@tq-group.com>
>>>
>>> fixup was lost during split between command code and logic.
>>>
>>> Signed-off-by: Markus Niebel <Markus.Niebel@tq-group.com>
>>> ---
>>>  common/bootm.c     | 2 +-
>>>  common/cmd_bootm.c | 6 ++++++
>>>  include/bootm.h    | 2 ++
>>>  3 files changed, 9 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/common/bootm.c b/common/bootm.c
>>> index 6b3ea8c..94b9503 100644
>>> --- a/common/bootm.c
>>> +++ b/common/bootm.c
>>> @@ -467,7 +467,7 @@ ulong bootm_disable_interrupts(void)
>>>  #define CONSOLE_ARG     "console="
>>>  #define CONSOLE_ARG_LEN (sizeof(CONSOLE_ARG) - 1)
>>>
>>> -static void fixup_silent_linux(void)
>>> +void fixup_silent_linux(void)
>>>  {
>>>         char *buf;
>>>         const char *env_val;
>>> diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c
>>> index 6723360..d3e410a 100644
>>> --- a/common/cmd_bootm.c
>>> +++ b/common/cmd_bootm.c
>>> @@ -596,6 +596,12 @@ int do_bootz(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
>>>          * disable interrupts ourselves
>>>          */
>>>         bootm_disable_interrupts();
>>> +#if defined(CONFIG_SILENT_CONSOLE) && !defined(CONFIG_SILENT_U_BOOT_ONLY)
>>> +       /*
>>> +        * same goes for fixup_silent_linux
>>> +        */
>>> +       fixup_silent_linux();
>>> +#endif
>>>
>>>         images.os.os = IH_OS_LINUX;
>>>         ret = do_bootm_states(cmdtp, flag, argc, argv,
>>> diff --git a/include/bootm.h b/include/bootm.h
>>> index b3d1a62..8e094b3 100644
>>> --- a/include/bootm.h
>>> +++ b/include/bootm.h
>>> @@ -50,6 +50,8 @@ ulong bootm_disable_interrupts(void);
>>>
>>>  /* This is a special function used by booti/bootz */
>>>  int bootm_find_ramdisk_fdt(int flag, int argc, char * const argv[]);
>>> +/* This function is used also used by bootz */
>>> +void fixup_silent_linux(void);
>>>
>>>  int do_bootm_states(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[],
>>>                     int states, bootm_headers_t *images, int boot_progress);
>>
>> Quite a bit of effort was expended trying to join this code back
>> together rather than having two separate code paths for bootm and
>> bootz.
>
> I Understand
>
>>
>> Since this is cmdline-related, I suggest something like this:
>>
>> - Enable BOOTM_STATE_OS_CMDLINE for all archs in do_bootm()
>> - Call fixup_silent_linux() in do_bootm_states() when processing
>> BOOTM_STATE_OS_CMDLINE
>> - Add BOOTM_STATE_OS_CMDLINE to the do_bootm_states() call in do_bootz()
>>
>
> I read through the code to find out, what the implications of your
> suggestions were. Since I'm not very familiar with this piece of code,
> please correct me, If i'm wrong:
>
> - rename the arch specific do_bootm_linux to arch_bootm_linux
> - implement a generic version of do_bootm_linux inside bootm_os.c
> - call arch_bootm_linux from generic do_bootm_linux
> - move the call to fixup_silent_linux to new do_bootm_linux for the
>   BOOTM_STATE_OS_CMDLINE case
> - mask BOOTM_STATE_OS_CMDLINE before calling arch_bootm_linux for all but
>   MIPS and PPC
>
> because this seems a bit intrusive I'm not sure. But if this is the wy to go, I
> will prepare a patch.

Yes that sounds complicated. But copying code in multiple places is
how the image/bootm support got so ugly, and it was a big effort to
fix it up. So I'd really like to avoid copying code.

But it should be a lot easier than that.

In do_boot() there is:

return do_bootm_states(cmdtp, flag, argc, argv, BOOTM_STATE_START |
   BOOTM_STATE_FINDOS | BOOTM_STATE_FINDOTHER |
   BOOTM_STATE_LOADOS |
#if defined(CONFIG_PPC) || defined(CONFIG_MIPS)
   BOOTM_STATE_OS_CMDLINE |
#endif
   BOOTM_STATE_OS_PREP | BOOTM_STATE_OS_FAKE_GO |
   BOOTM_STATE_OS_GO, &images, 1);
}

You should be able to remove the #ifdef.

Then in do_bootm_states() there is:

/* Load the OS */
if (!ret && (states & BOOTM_STATE_LOADOS)) {
   ...
#if defined(CONFIG_SILENT_CONSOLE) && !defined(CONFIG_SILENT_U_BOOT_ONLY)
   if (images->os.os == IH_OS_LINUX)
      fixup_silent_linux();
#endif
}

And later:

if (!ret && (states & BOOTM_STATE_OS_CMDLINE))
   ret = boot_fn(BOOTM_STATE_OS_CMDLINE, argc, argv, images);

You should be able to move the '#if defined' code to inside this if ()
- so that fixup_silent_linux() happens in the CMDLINE stage instead of
the LOADOS stage.

Then in do_bootz(), add BOOTM_STATE_OS_CMDLINE to the call to do_bootm_states().

Then bootm and bootz will still go along exactly the same code path.

The tricky bit is that of course this does affect each arch - you need
to make sure that each do_bootm_linux() function in
arch/xxx/lib/bootm.c will handle BOOTM_STATE_OS_CMDLINE (and return 0,
not -1). At a glance I can see that ARM returns -1 - it will need to
return 0.

Also each function in boot_os[] needs to do the same. I looked at most
of them and they check for BOOTM_STATE_OS_GO and return 0 for anything
else, so should be OK. Maybe do_bootm_standalone() will need to do so
too.

>
>> Or similar...that way we keep bootm and bootz in sync. The separate
>> call to bootm_disable_interrupts() is unfortunate but is a problem for
>> another day.
>>
>> Regards,
>> Simon
>>
> Regards,
> Markus

Regards,
Simon

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

end of thread, other threads:[~2014-11-25 14:03 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-11-18 12:52 [U-Boot] [PATCH] bootz: fix silent console Markus Niebel
2014-11-20 19:15 ` Simon Glass
2014-11-25  8:31   ` Markus Niebel
2014-11-25 14:03     ` Simon Glass

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