[U-Boot] [PATCH] debug_uart: output CR along with LF
Tim Chick
Tim.Chick at mediatek.com
Thu Apr 7 19:18:38 CEST 2016
Please see below:
>
>
> Hi Tim,
>
> 2016-04-05 0:16 GMT+09:00 Tim Chick <Tim.Chick at mediatek.com>:
>> Hi Masahiro,
>>
>> This patch breaks the debug_uart on my MIPS board. It means printascii now uses the stack, and my board does not have a stack when debug_uart_init is called. debug_uart_init calls printascii if DEBUG_UART_ANNOUNCE is defined.
>>
>> The patch below fixes it, and keeps your change:
>>
>
> I think the current implementation of debug_uart
> requires the stack, anyway.
>
No, I'm quite sure it does not, on MIPS at least. I do not have a stack.
My platform has no SRAM, so I don't have a stack until I can get the
DRAM working.
> I am not sure your patch is the right approach
> because your solution seems dependent on your compiler behavior.
>
I believe it just relies on inline, which is used elsewhere to enable
debug_uart to work without a stack.
> I tried your patch with CONFIG_DEBUG_UART_ANNOUNCE=y,
> but my ARM compiler still produced debug_uart_init
> code with the stack.
>
It shouldn't do, it should honor the inline keyword I think. I'm using
gcc on mips, and get (with my code):
9c023598 <printascii>:
9c023598: 2406000a li a2,10
9c02359c: 3c02b000 lui v0,0xb000
9c0235a0: 1000000e b 9c0235dc <printascii+0x44>
9c0235a4: 2405000d li a1,13
9c0235a8: 14660006 bne v1,a2,9c0235c4 <printascii+0x2c>
9c0235ac: 24840001 addiu a0,a0,1
9c0235b0: 90480c14 lbu t0,3092(v0)
static inline void _debug_uart_putc(int ch)
{
struct NS16550 *com_port = (struct NS16550 *)CONFIG_DEBUG_UART_BASE;
while (!(serial_din(&com_port->lsr) & UART_LSR_THRE))
9c0235b4: 31080020 andi t0,t0,0x20
9c0235b8: 1100fffd beqz t0,9c0235b0 <printascii+0x18>
9c0235bc: 00000000 nop
9c0235c0: a0450c00 sb a1,3072(v0)
9c0235c4: 90480c14 lbu t0,3092(v0)
...
You can see it inlines the code. With your change, it pushed data to the
stack and called printascii as a subroutine.
Thanks,
Tim
More information about the U-Boot
mailing list