From cb14c4d641b4e083fae7ce4a0e8a3973cecb7554 Mon Sep 17 00:00:00 2001 From: Milton Miller Date: Tue, 6 Sep 2005 11:55:00 +1000 Subject: [PATCH] ppc64: Clean up CR handling Make the 16550 and real mode 16550 use tail recursion like the scc code instead of repeating the routine except for the character sent. Gcc recoginizes the tail recursion and handles it efficently without stack allocations. The maple real putc shrinks from 188 to 104 bytes of instructions. udbg_putc drops from 188 to 140 bytes. Signed-off-by: Milton Miller Signed-off-by: Anton Blanchard Signed-off-by: Paul Mackerras --- arch/ppc64/kernel/udbg.c | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) (limited to 'arch') diff --git a/arch/ppc64/kernel/udbg.c b/arch/ppc64/kernel/udbg.c index c0da45540f0..155670a40c3 100644 --- a/arch/ppc64/kernel/udbg.c +++ b/arch/ppc64/kernel/udbg.c @@ -169,12 +169,8 @@ void udbg_maple_real_putc(unsigned char c) while ((real_readb(&udbg_comport->lsr) & LSR_THRE) == 0) /* wait for idle */; real_writeb(c, &udbg_comport->thr); eieio(); - if (c == '\n') { - /* Also put a CR. This is for convenience. */ - while ((real_readb(&udbg_comport->lsr) & LSR_THRE) == 0) - /* wait for idle */; - real_writeb('\r', &udbg_comport->thr); eieio(); - } + if (c == '\n') + udbg_maple_real_putc('\r'); } } @@ -194,12 +190,8 @@ void udbg_putc(unsigned char c) while ((in_8(&udbg_comport->lsr) & LSR_THRE) == 0) /* wait for idle */; out_8(&udbg_comport->thr, c); - if (c == '\n') { - /* Also put a CR. This is for convenience. */ - while ((in_8(&udbg_comport->lsr) & LSR_THRE) == 0) - /* wait for idle */; - out_8(&udbg_comport->thr, '\r'); - } + if (c == '\n') + udbg_putc('\r'); } #ifdef CONFIG_PPC_PMAC else if (sccc) { -- cgit v1.2.3