Message ID | 1509808449-10243-1-git-send-email-smoch@web.de |
---|---|
State | Accepted |
Commit | be135cc5eb4499f5eedd1b6d968ca51aa79df684 |
Delegated to: | Tom Rini |
Headers | show |
Series | [U-Boot] Revert "console: simplify puts()" | expand |
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@web.de> > Signed-off-by: Soeren Moch <smoch@web.de> Tested-by: Uwe Scheffler <scheffler.u@web.de> > --- > Cc: Masahiro Yamada <yamada.masahiro@socionext.com> > Cc: Simon Glass <sjg@chromium.org> > Cc: Tom Rini <trini@konsulko.com> > Cc: Uwe Scheffler <scheffler.u@web.de> > Cc: u-boot@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 > >
On Sat, Nov 04, 2017 at 04:14:09PM +0100, Soeren Moch wrote: > 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@web.de> > Signed-off-by: Soeren Moch <smoch@web.de> > --- > Cc: Masahiro Yamada <yamada.masahiro@socionext.com> > Cc: Simon Glass <sjg@chromium.org> > Cc: Tom Rini <trini@konsulko.com> > Cc: Uwe Scheffler <scheffler.u@web.de> > Cc: u-boot@lists.denx.de > > Tom, > can you pull this in as fix for 2017.11? Looks like some of the CC got eaten? Masahiro, Simon, any comments? Thanks!
On 4 November 2017 at 09:14, Soeren Moch <smoch@web.de> wrote: > 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@web.de> > Signed-off-by: Soeren Moch <smoch@web.de> > --- > Cc: Masahiro Yamada <yamada.masahiro@socionext.com> > Cc: Simon Glass <sjg@chromium.org> > Cc: Tom Rini <trini@konsulko.com> > Cc: Uwe Scheffler <scheffler.u@web.de> > Cc: u-boot@lists.denx.de > > Tom, > can you pull this in as fix for 2017.11? > > Thanks, > Soeren > --- > common/console.c | 44 ++++++++++++++++++++++++++++++++++++++++++-- > 1 file changed, 42 insertions(+), 2 deletions(-) Reviewed-by: Simon Glass <sjg@chromium.org>
2017-11-07 1:50 GMT+09:00 Tom Rini <trini@konsulko.com>: > On Sat, Nov 04, 2017 at 04:14:09PM +0100, Soeren Moch wrote: > >> 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@web.de> >> Signed-off-by: Soeren Moch <smoch@web.de> >> --- >> Cc: Masahiro Yamada <yamada.masahiro@socionext.com> >> Cc: Simon Glass <sjg@chromium.org> >> Cc: Tom Rini <trini@konsulko.com> >> Cc: Uwe Scheffler <scheffler.u@web.de> >> Cc: u-boot@lists.denx.de >> >> Tom, >> can you pull this in as fix for 2017.11? > > Looks like some of the CC got eaten? Masahiro, Simon, any comments? > Thanks! > I do not know anything about this board. Feel free to go ahead if this is a problem.
On Sat, Nov 04, 2017 at 04:14:09PM +0100, Soeren Moch wrote: > 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@web.de> > Signed-off-by: Soeren Moch <smoch@web.de> > Tested-by: Uwe Scheffler <scheffler.u@web.de> > Reviewed-by: Simon Glass <sjg@chromium.org> Applied to u-boot/master, thanks!
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
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@web.de> Signed-off-by: Soeren Moch <smoch@web.de> --- Cc: Masahiro Yamada <yamada.masahiro@socionext.com> Cc: Simon Glass <sjg@chromium.org> Cc: Tom Rini <trini@konsulko.com> Cc: Uwe Scheffler <scheffler.u@web.de> Cc: u-boot@lists.denx.de Tom, can you pull this in as fix for 2017.11? Thanks, Soeren --- common/console.c | 44 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-)