* [PATCH v2 3/3] m68k: Remove unused "cursor home" code from debug console
2025-03-19 9:31 [PATCH v2 0/3] m68k: Bug fix and cleanup for framebuffer debug console Finn Thain
@ 2025-03-19 9:31 ` Finn Thain
2025-03-19 9:31 ` [PATCH v2 2/3] m68k: Avoid pointless recursion in debug console rendering Finn Thain
2025-03-19 9:31 ` [PATCH v2 1/3] m68k: Fix lost column on framebuffer debug console Finn Thain
2 siblings, 0 replies; 6+ messages in thread
From: Finn Thain @ 2025-03-19 9:31 UTC (permalink / raw)
To: Geert Uytterhoeven; +Cc: linux-m68k, linux-kernel
The cursor home operation is unused and seems undesirable for logging.
Remove it. The console_not_cr label actually means "not line feed and
not carriage return either" so take the opportunity to replace it with
something less confusing. Rectify some inconsistent whitespace while
we're here.
Signed-off-by: Finn Thain <fthain@linux-m68k.org>
---
arch/m68k/kernel/head.S | 31 ++++++++++++-------------------
1 file changed, 12 insertions(+), 19 deletions(-)
diff --git a/arch/m68k/kernel/head.S b/arch/m68k/kernel/head.S
index bf7fa344cd3a..48ef74e45535 100644
--- a/arch/m68k/kernel/head.S
+++ b/arch/m68k/kernel/head.S
@@ -3555,28 +3555,21 @@ func_start console_putc,%a0/%a1/%d0-%d7
jra L(console_exit)
L(console_not_lf):
- cmpib #13,%d7
- jne L(console_not_cr)
+ cmpib #'\r',%d7
+ jne L(console_not_lf_not_cr)
clrl %a0@(Lconsole_struct_cur_column)
jra L(console_exit)
-L(console_not_cr):
- cmpib #1,%d7
- jne L(console_not_home)
- clrl %a0@(Lconsole_struct_cur_row)
- clrl %a0@(Lconsole_struct_cur_column)
- jra L(console_exit)
-
-/*
- * At this point we know that the %d7 character is going to be
- * rendered on the screen. Register usage is -
- * a0 = pointer to console globals
- * a1 = font data
- * d0 = cursor column
- * d1 = cursor row to draw the character
- * d7 = character number
- */
-L(console_not_home):
+ /*
+ * At this point we know that the %d7 character is going to be
+ * rendered on the screen. Register usage is -
+ * a0 = pointer to console globals
+ * a1 = font data
+ * d0 = cursor column
+ * d1 = cursor row to draw the character
+ * d7 = character number
+ */
+L(console_not_lf_not_cr):
movel %a0@(Lconsole_struct_cur_column),%d0
movel %a0@(Lconsole_struct_cur_row),%d1
--
2.45.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v2 2/3] m68k: Avoid pointless recursion in debug console rendering
2025-03-19 9:31 [PATCH v2 0/3] m68k: Bug fix and cleanup for framebuffer debug console Finn Thain
2025-03-19 9:31 ` [PATCH v2 3/3] m68k: Remove unused "cursor home" code from " Finn Thain
@ 2025-03-19 9:31 ` Finn Thain
2025-03-19 9:31 ` [PATCH v2 1/3] m68k: Fix lost column on framebuffer debug console Finn Thain
2 siblings, 0 replies; 6+ messages in thread
From: Finn Thain @ 2025-03-19 9:31 UTC (permalink / raw)
To: Geert Uytterhoeven; +Cc: linux-m68k, linux-kernel
The recursive call to console_putc to effect a carriage return is
needlessly slow and complicated. Instead, just clear the column counter
directly. Setup %a0 earlier to avoid a repeated comparison.
Signed-off-by: Finn Thain <fthain@linux-m68k.org>
---
arch/m68k/kernel/head.S | 11 ++++-------
1 file changed, 4 insertions(+), 7 deletions(-)
diff --git a/arch/m68k/kernel/head.S b/arch/m68k/kernel/head.S
index d0d77b1adbde..bf7fa344cd3a 100644
--- a/arch/m68k/kernel/head.S
+++ b/arch/m68k/kernel/head.S
@@ -3533,19 +3533,16 @@ func_start console_putc,%a0/%a1/%d0-%d7
tstl %pc@(L(console_font))
jeq L(console_exit)
+ lea %pc@(L(console_globals)),%a0
+
/* Output character in d7 on console.
*/
movel ARG1,%d7
cmpib #'\n',%d7
- jbne 1f
+ jne L(console_not_lf)
- /* A little safe recursion is good for the soul */
- console_putc #'\r'
-1:
- lea %pc@(L(console_globals)),%a0
+ clrl %a0@(Lconsole_struct_cur_column) /* implicit \r */
- cmpib #10,%d7
- jne L(console_not_lf)
movel %a0@(Lconsole_struct_cur_row),%d0
movel %a0@(Lconsole_struct_num_rows),%d1
cmpl %d1,%d0
--
2.45.3
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v2 1/3] m68k: Fix lost column on framebuffer debug console
2025-03-19 9:31 [PATCH v2 0/3] m68k: Bug fix and cleanup for framebuffer debug console Finn Thain
2025-03-19 9:31 ` [PATCH v2 3/3] m68k: Remove unused "cursor home" code from " Finn Thain
2025-03-19 9:31 ` [PATCH v2 2/3] m68k: Avoid pointless recursion in debug console rendering Finn Thain
@ 2025-03-19 9:31 ` Finn Thain
2025-03-19 9:59 ` Andreas Schwab
2 siblings, 1 reply; 6+ messages in thread
From: Finn Thain @ 2025-03-19 9:31 UTC (permalink / raw)
To: Geert Uytterhoeven; +Cc: linux-m68k, stable, linux-kernel
Move the cursor position rightward after rendering the character,
not before. This avoids complications that arise when the recursive
console_putc call has to wrap the line and/or scroll the display.
This also fixes the linewrap bug that crops off the rightmost column.
When the cursor is at the bottom of the display, a linefeed will not
move the cursor position further downward. Instead, the display scrolls
upward. Avoid the repeated add/subtract sequence by way of a single
subtraction at the initialization of console_struct_num_rows.
Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Cc: stable@vger.kernel.org
Signed-off-by: Finn Thain <fthain@linux-m68k.org>
---
arch/m68k/kernel/head.S | 31 +++++++++++++++++++++----------
1 file changed, 21 insertions(+), 10 deletions(-)
diff --git a/arch/m68k/kernel/head.S b/arch/m68k/kernel/head.S
index 852255cf60de..d0d77b1adbde 100644
--- a/arch/m68k/kernel/head.S
+++ b/arch/m68k/kernel/head.S
@@ -3400,6 +3400,7 @@ L(console_clear_loop):
movel %d4,%d1 /* screen height in pixels */
divul %a0@(FONT_DESC_HEIGHT),%d1 /* d1 = max num rows */
+ subil #1,%d1 /* row range is 0 to num - 1 */
movel %d0,%a2@(Lconsole_struct_num_columns)
movel %d1,%a2@(Lconsole_struct_num_rows)
@@ -3546,15 +3547,14 @@ func_start console_putc,%a0/%a1/%d0-%d7
cmpib #10,%d7
jne L(console_not_lf)
movel %a0@(Lconsole_struct_cur_row),%d0
- addil #1,%d0
- movel %d0,%a0@(Lconsole_struct_cur_row)
movel %a0@(Lconsole_struct_num_rows),%d1
cmpl %d1,%d0
jcs 1f
- subil #1,%d0
- movel %d0,%a0@(Lconsole_struct_cur_row)
console_scroll
+ jra L(console_exit)
1:
+ addil #1,%d0
+ movel %d0,%a0@(Lconsole_struct_cur_row)
jra L(console_exit)
L(console_not_lf):
@@ -3581,12 +3581,6 @@ L(console_not_cr):
*/
L(console_not_home):
movel %a0@(Lconsole_struct_cur_column),%d0
- addql #1,%a0@(Lconsole_struct_cur_column)
- movel %a0@(Lconsole_struct_num_columns),%d1
- cmpl %d1,%d0
- jcs 1f
- console_putc #'\n' /* recursion is OK! */
-1:
movel %a0@(Lconsole_struct_cur_row),%d1
/*
@@ -3633,6 +3627,23 @@ L(console_do_font_scanline):
addq #1,%d1
dbra %d7,L(console_read_char_scanline)
+ /*
+ * Register usage in the code below:
+ * a0 = pointer to console globals
+ * d0 = cursor column
+ * d1 = cursor column limit
+ */
+
+ lea %pc@(L(console_globals)),%a0
+
+ movel %a0@(Lconsole_struct_cur_column),%d0
+ addil #1,%d0
+ movel %d0,%a0@(Lconsole_struct_cur_column) /* Update cursor pos */
+ movel %a0@(Lconsole_struct_num_columns),%d1
+ cmpl %d1,%d0
+ jcs L(console_exit)
+ console_putc #'\n' /* Line wrap using tail recursion */
+
L(console_exit):
func_return console_putc
--
2.45.3
^ permalink raw reply related [flat|nested] 6+ messages in thread