[PATCH 34.5 v2 6/6] LEON3: added TX-wait-complete and CR on NL support for UART

Daniel Hellstrom daniel at gaisler.com
Fri Apr 20 06:23:16 UTC 2012


On 04/19/2012 07:26 PM, Joel Sherrill wrote:
> On 04/19/2012 11:31 AM, Daniel Hellstrom wrote:
>> On 04/19/2012 06:25 PM, Gedare Bloom wrote:
>>> To be more clear, I'm OK with the patch as-is. I think the bool might
>>> help readability and should be considered down the road.
>> Ok, I will keep it in mind for the future.
> Ok to commit as is.
>
> bool is an improvement but doesn't say much about what
> the parameters mean logically. But given this is a BSP
> private routine called only in a few places, it would read better.
>
> Daniel.. please add changing it to bool to your list for a
> follow up patch.
Ok, thanks.

>> Daniel
>>
>>> On Thu, Apr 19, 2012 at 12:23 PM, Gedare Bloom<gedare at rtems.org>   wrote:
>>>> Are the new do_cr_on_newline and wait_sent boolean flags? can we use a
>>>> bool type? Maybe I'm being difficult but it just will be a little
>>>> easier to read the code I think. Otherwise I think this looks ok given
>>>> the rename patch coming up.
>>>>
>>>> On Thu, Apr 19, 2012 at 9:21 AM, Daniel Hellstrom<daniel at gaisler.com>   wrote:
>>>>> Signed-off-by: Daniel Hellstrom<daniel at gaisler.com>
>>>>> ---
>>>>>    c/src/lib/libbsp/sparc/leon3/console/console.c   |   11 +++++++----
>>>>>    c/src/lib/libbsp/sparc/leon3/console/debugputs.c |   18 ++++++++++++++++--
>>>>>    2 files changed, 23 insertions(+), 6 deletions(-)
>>>>>
>>>>> diff --git a/c/src/lib/libbsp/sparc/leon3/console/console.c b/c/src/lib/libbsp/sparc/leon3/console/console.c
>>>>> index aece47a..fc6d5b0 100644
>>>>> --- a/c/src/lib/libbsp/sparc/leon3/console/console.c
>>>>> +++ b/c/src/lib/libbsp/sparc/leon3/console/console.c
>>>>> @@ -50,8 +50,11 @@ int syscon_uart_index __attribute__((weak)) = 0;
>>>>>
>>>>>    extern void apbuart_outbyte_polled(
>>>>>     ambapp_apb_uart *regs,
>>>>> -  char ch
>>>>> -);
>>>>> +  unsigned char ch,
>>>>> +  int do_cr_on_newline,
>>>>> +  int wait_sent
>>>>> +  );
>>>>> +
>>>>>
>>>>>    /* body is in debugputs.c */
>>>>>
>>>>> @@ -157,7 +160,7 @@ ssize_t console_write_polled(int minor, const char *buf, size_t len)
>>>>>       port = minor - 1;
>>>>>
>>>>>     while (nwrite<   len) {
>>>>> -    apbuart_outbyte_polled(apbuarts[port].regs, *buf++);
>>>>> +    apbuart_outbyte_polled(apbuarts[port].regs, *buf++, 1, 0);
>>>>>       nwrite++;
>>>>>     }
>>>>>     return nwrite;
>>>>> @@ -324,7 +327,7 @@ rtems_device_driver console_initialize(
>>>>>      * On a MP system one should not open UARTs that other OS instances use.
>>>>>      */
>>>>>     if (syscon_uart_index<   uarts) {
>>>>> -    status = rtems_io_register_name( "/dev/console", major, 0 );
>>>>> +    status = rtems_io_register_name("/dev/console", major, 0);
>>>>>       if (status != RTEMS_SUCCESSFUL)
>>>>>         rtems_fatal_error_occurred(status);
>>>>>     }
>>>>> diff --git a/c/src/lib/libbsp/sparc/leon3/console/debugputs.c b/c/src/lib/libbsp/sparc/leon3/console/debugputs.c
>>>>> index 7058cf8..080d4fa 100644
>>>>> --- a/c/src/lib/libbsp/sparc/leon3/console/debugputs.c
>>>>> +++ b/c/src/lib/libbsp/sparc/leon3/console/debugputs.c
>>>>> @@ -89,9 +89,12 @@ int bsp_debug_uart_init(void)
>>>>>    */
>>>>>    void apbuart_outbyte_polled(
>>>>>     ambapp_apb_uart *regs,
>>>>> -  unsigned char ch
>>>>> +  unsigned char ch,
>>>>> +  int do_cr_on_newline,
>>>>> +  int wait_sent
>>>>>    )
>>>>>    {
>>>>> +send:
>>>>>     while ( (regs->status&   LEON_REG_UART_STATUS_THE) == 0 ) {
>>>>>       /* Lower bus utilization while waiting for UART */
>>>>>       asm volatile ("nop"::); asm volatile ("nop"::);
>>>>> @@ -100,6 +103,17 @@ void apbuart_outbyte_polled(
>>>>>       asm volatile ("nop"::); asm volatile ("nop"::);
>>>>>     }
>>>>>     regs->data = (unsigned int) ch;
>>>>> +
>>>>> +  if ((ch == '\n')&&   do_cr_on_newline) {
>>>>> +    ch = '\r';
>>>>> +    goto send;
>>>>> +  }
>>>>> +
>>>>> +  /* Wait until the character has been sent? */
>>>>> +  if (wait_sent) {
>>>>> +    while ((regs->status&   LEON_REG_UART_STATUS_THE) == 0)
>>>>> +      ;
>>>>> +  }
>>>>>    }
>>>>>
>>>>>    /*
>>>>> @@ -129,7 +143,7 @@ static void bsp_out_char(char c)
>>>>>       return;
>>>>>     }
>>>>>
>>>>> -  apbuart_outbyte_polled(dbg_uart, c);
>>>>> +  apbuart_outbyte_polled(dbg_uart, c, 1, 1);
>>>>>    }
>>>>>
>>>>>    /*
>>>>> -- 
>>>>> 1.7.0.4
>>>>>
>
>




More information about the devel mailing list