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 <scheffle...@web.de> > Signed-off-by: Soeren Moch <sm...@web.de>
Tested-by: Uwe Scheffler <scheffle...@web.de> > --- > Cc: Masahiro Yamada <yamada.masah...@socionext.com> > Cc: Simon Glass <s...@chromium.org> > Cc: Tom Rini <tr...@konsulko.com> > Cc: Uwe Scheffler <scheffle...@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 > > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot