Skip to contentSkip to conversation

Revert "console: simplify puts()"

PATCH In review Soeren Moch 5 participants 6 messages Nov 4, 2017 – Nov 12, 2017

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Revert "console: simplify puts()"

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).

---
Cc: Masahiro Yamada <[email protected]>
Cc: Simon Glass <[email protected]>
Cc: Tom Rini <[email protected]>
Cc: Uwe Scheffler <[email protected]>
Cc: u-boot at 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(-)
common/console.c +42 -2
index f83528c..d763f2c 100644
@@ -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
Signature · 1 line
2.7.4
#1 lore raw

PATCH 1/1 Revert "console: simplify puts()"

Hello,

Am 04.11.2017 um 16:14 schrieb Soeren Moch:

Quoted 7 lines

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.

Quoted 5 lines

This revert brings back the fast framebuffer console (one cache flush per string in puts(), not after each char).

Quoted 10 lines

---
Cc: Masahiro Yamada <[email protected]>
Cc: Simon Glass <[email protected]>
Cc: Tom Rini <[email protected]>
Cc: Uwe Scheffler <[email protected]>
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

Quoted 79 lines

Thanks,
Soeren

---
 common/console.c | 44 ++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 42 insertions(+), 2 deletions(-)
common/console.c +42 -2
index f83528c..d763f2c 100644
@@ -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
Signature · 1 line
2.7.4
#2 lore raw

PATCH 1/1 Revert "console: simplify puts()"

In reply to Soeren Moch
Quoted 18 lines · 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).

---
Cc: Masahiro Yamada <[email protected]>
Cc: Simon Glass <[email protected]>
Cc: Tom Rini <[email protected]>
Cc: Uwe Scheffler <[email protected]>
Cc: u-boot at lists.denx.de

Quoted 2 lines

Tom,
can you pull this in as fix for 2017.11?

Looks like some of the CC got eaten? Masahiro, Simon, any comments? Thanks!

Signature · 8 lines
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20171106/9b327a67/attachment.sig>
#3 lore raw

PATCH 1/1 Revert "console: simplify puts()"

2017-11-07 1:50 GMT+09:00 Tom Rini <[email protected]>:

Quoted 20 lines · Soeren Moch
Quoted 19 lines

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).

---
Cc: Masahiro Yamada <[email protected]>
Cc: Simon Glass <[email protected]>
Cc: Tom Rini <[email protected]>
Cc: Uwe Scheffler <[email protected]>
Cc: u-boot at lists.denx.de

Quoted 6 lines
Quoted 2 lines

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.

Signature · 2 lines
Best Regards
Masahiro Yamada
#4 lore raw

PATCH 1/1 Revert "console: simplify puts()"

In reply to Soeren Moch
Quoted 18 lines · 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).

---
Cc: Masahiro Yamada <[email protected]>
Cc: Simon Glass <[email protected]>
Cc: Tom Rini <[email protected]>
Cc: Uwe Scheffler <[email protected]>
Cc: u-boot at lists.denx.de

Quoted 8 lines

Tom,
can you pull this in as fix for 2017.11?

Thanks,
Soeren

---
 common/console.c | 44 ++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 42 insertions(+), 2 deletions(-)
#5 lore raw
In reply to Soeren Moch
Quoted 6 lines · 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.

Quoted 7 lines

This revert brings back the fast framebuffer console (one cache flush per string in puts(), not after each char).

Applied to u-boot/master, thanks!

Signature · 8 lines
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20171112/51a44a5d/attachment.sig>