[U-Boot] [PATCH] Revert "console: simplify puts()"
U. Scheffler
Scheffler.U at web.de
Sun Nov 5 17:59:51 UTC 2017
Hello,
Am 04.11.2017 um 16:14 schrieb Soeren Moch:
>
> This reverts commit c61d0009feb966e0e93254a8c435a1889085e6b8.
>
> A tbs2910 board user reported a very slow console frambuffer as
> regression in current u-boot. I could bisect this down to the
> above mentioned commit.
>
> This revert brings back the fast framebuffer console (one
> cache flush per string in puts(), not after each char).
>
> Reported-by: Uwe Scheffler <scheffler.u at web.de>
> Signed-off-by: Soeren Moch <smoch at web.de>
Tested-by: Uwe Scheffler <scheffler.u at web.de>
> ---
> Cc: Masahiro Yamada <yamada.masahiro at socionext.com>
> Cc: Simon Glass <sjg at chromium.org>
> Cc: Tom Rini <trini at konsulko.com>
> Cc: Uwe Scheffler <scheffler.u at web.de>
> Cc: u-boot at lists.denx.de
>
> Tom,
> can you pull this in as fix for 2017.11?
>
The patch works. I have successfully tested with a Matrix-ARM board (TBS2910) Rev-2.1.
Thank you, Sören.
Regards,
Uwe
> Thanks,
> Soeren
> ---
> common/console.c | 44 ++++++++++++++++++++++++++++++++++++++++++--
> 1 file changed, 42 insertions(+), 2 deletions(-)
>
> diff --git a/common/console.c b/common/console.c
> index f83528c..d763f2c 100644
> --- a/common/console.c
> +++ b/common/console.c
> @@ -450,6 +450,12 @@ static void pre_console_putc(const char c)
> unmap_sysmem(buffer);
> }
>
> +static void pre_console_puts(const char *s)
> +{
> + while (*s)
> + pre_console_putc(*s++);
> +}
> +
> static void print_pre_console_buffer(int flushpoint)
> {
> unsigned long in = 0, out = 0;
> @@ -477,6 +483,7 @@ static void print_pre_console_buffer(int flushpoint)
> }
> #else
> static inline void pre_console_putc(const char c) {}
> +static inline void pre_console_puts(const char *s) {}
> static inline void print_pre_console_buffer(int flushpoint) {}
> #endif
>
> @@ -518,8 +525,41 @@ void putc(const char c)
>
> void puts(const char *s)
> {
> - while (*s)
> - putc(*s++);
> +#ifdef CONFIG_DEBUG_UART
> + if (!gd || !(gd->flags & GD_FLG_SERIAL_READY)) {
> + while (*s) {
> + int ch = *s++;
> +
> + printch(ch);
> + }
> + return;
> + }
> +#endif
> +#ifdef CONFIG_CONSOLE_RECORD
> + if (gd && (gd->flags & GD_FLG_RECORD) && gd->console_out.start)
> + membuff_put(&gd->console_out, s, strlen(s));
> +#endif
> +#ifdef CONFIG_SILENT_CONSOLE
> + if (gd->flags & GD_FLG_SILENT)
> + return;
> +#endif
> +
> +#ifdef CONFIG_DISABLE_CONSOLE
> + if (gd->flags & GD_FLG_DISABLE_CONSOLE)
> + return;
> +#endif
> +
> + if (!gd->have_console)
> + return pre_console_puts(s);
> +
> + if (gd->flags & GD_FLG_DEVINIT) {
> + /* Send to the standard output */
> + fputs(stdout, s);
> + } else {
> + /* Send directly to the handler */
> + pre_console_puts(s);
> + serial_puts(s);
> + }
> }
>
> #ifdef CONFIG_CONSOLE_RECORD
> --
> 2.7.4
>
>
More information about the U-Boot
mailing list