[PATCH 37] LEON3: renamed console/debugputs.c to printk_support.c

Gedare Bloom gedare at rtems.org
Thu Apr 19 17:00:06 UTC 2012


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

On Thu, Apr 19, 2012 at 12:55 PM, Joel Sherrill
<joel.sherrill at oarcorp.com> wrote:
> Ok to commit
>
> Gedare Bloom <gedare at rtems.org> wrote:
>
>>looks good to me
>>
>>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/Makefile.am           |    2 +-
>>>  c/src/lib/libbsp/sparc/leon3/console/debugputs.c   |  169 --------------------
>>>  .../libbsp/sparc/leon3/console/printk_support.c    |  169 ++++++++++++++++++++
>>>  3 files changed, 170 insertions(+), 170 deletions(-)
>>>  delete mode 100644 c/src/lib/libbsp/sparc/leon3/console/debugputs.c
>>>  create mode 100644 c/src/lib/libbsp/sparc/leon3/console/printk_support.c
>>>
>>> diff --git a/c/src/lib/libbsp/sparc/leon3/Makefile.am b/c/src/lib/libbsp/sparc/leon3/Makefile.am
>>> index 09d8b8e..a9badce 100644
>>> --- a/c/src/lib/libbsp/sparc/leon3/Makefile.am
>>> +++ b/c/src/lib/libbsp/sparc/leon3/Makefile.am
>>> @@ -63,7 +63,7 @@ libbsp_a_SOURCES += ../../sparc/shared/amba/ambapp_show.c
>>>  # console
>>>  libbsp_a_SOURCES += console/console.c
>>>  # debugio
>>> -libbsp_a_SOURCES += console/debugputs.c
>>> +libbsp_a_SOURCES += console/printk_support.c
>>>  # clock
>>>  libbsp_a_SOURCES += clock/ckinit.c
>>>  libbsp_a_SOURCES += ../../shared/clockdrv_shell.h
>>> diff --git a/c/src/lib/libbsp/sparc/leon3/console/debugputs.c b/c/src/lib/libbsp/sparc/leon3/console/debugputs.c
>>> deleted file mode 100644
>>> index 9815053..0000000
>>> --- a/c/src/lib/libbsp/sparc/leon3/console/debugputs.c
>>> +++ /dev/null
>>> @@ -1,169 +0,0 @@
>>> -/*
>>> - *  This file contains the TTY driver for the serial ports on the LEON.
>>> - *
>>> - *  This driver uses the termios pseudo driver.
>>> - *
>>> - *  COPYRIGHT (c) 1989-1999.
>>> - *  On-Line Applications Research Corporation (OAR).
>>> - *
>>> - *  Modified for LEON3 BSP.
>>> - *  COPYRIGHT (c) 2011.
>>> - *  Aeroflex Gaisler.
>>> - *
>>> - *  The license and distribution terms for this file may be
>>> - *  found in the file LICENSE in this distribution or at
>>> - *  http://www.rtems.com/license/LICENSE.
>>> - */
>>> -
>>> -#include <bsp.h>
>>> -#include <rtems/libio.h>
>>> -#include <stdlib.h>
>>> -#include <assert.h>
>>> -#include <stdio.h>
>>> -
>>> -/* Let user override which on-chip APBUART will be debug UART
>>> - * 0 = Default APBUART. On MP system CPU0=APBUART0, CPU1=APBUART1...
>>> - * 1 = APBUART[0]
>>> - * 2 = APBUART[1]
>>> - * 3 = APBUART[2]
>>> - * ...
>>> - */
>>> -int debug_uart_index __attribute__((weak)) = 0;
>>> -struct apbuart_regs *dbg_uart = NULL;
>>> -
>>> -/* Before UART driver has registered (or when no UART is available), calls to
>>> - * printk that gets to bsp_out_char() will be filling data into the
>>> - * pre_printk_dbgbuf[] buffer, hopefully the buffer can help debugging the
>>> - * early BSP boot.. At least the last printk() will be caught.
>>> - */
>>> -char pre_printk_dbgbuf[32] = {0};
>>> -int pre_printk_pos = 0;
>>> -
>>> -/* Initialize the BSP system debug console layer. It will scan AMBA Plu&Play
>>> - * for a debug APBUART and enable RX/TX for that UART.
>>> - */
>>> -int bsp_debug_uart_init(void)
>>> -{
>>> -  int i;
>>> -  struct ambapp_dev *adev;
>>> -  struct ambapp_apb_info *apb;
>>> -
>>> -  /* Update debug_uart_index to index used as debug console.
>>> -   * Let user select Debug console by setting debug_uart_index. If the
>>> -   * BSP is to provide the default UART (debug_uart_index==0):
>>> -   *   non-MP: APBUART[0] is debug console
>>> -   *   MP: LEON CPU index select UART
>>> -   */
>>> -  if (debug_uart_index == 0) {
>>> -#if defined(RTEMS_MULTIPROCESSING)
>>> -    debug_uart_index = LEON3_Cpu_Index;
>>> -#else
>>> -    debug_uart_index = 0;
>>> -#endif
>>> -  } else {
>>> -    debug_uart_index = debug_uart_index - 1; /* User selected dbg-console */
>>> -  }
>>> -
>>> -  /* Find APBUART core for System Debug Console */
>>> -  i = debug_uart_index;
>>> -  adev = (void *)ambapp_for_each(&ambapp_plb, (OPTIONS_ALL|OPTIONS_APB_SLVS),
>>> -                                 VENDOR_GAISLER, GAISLER_APBUART,
>>> -                                 ambapp_find_by_idx, (void *)&i);
>>> -  if (adev) {
>>> -    /* Found a matching debug console, initialize debug uart if present
>>> -     * for printk
>>> -     */
>>> -    apb = (struct ambapp_apb_info *)adev->devinfo;
>>> -    dbg_uart = (struct apbuart_regs *)apb->start;
>>> -    dbg_uart->ctrl |= LEON_REG_UART_CTRL_RE | LEON_REG_UART_CTRL_TE;
>>> -    dbg_uart->status = 0;
>>> -    return 1;
>>> -  } else
>>> -    return 0;
>>> -}
>>> -
>>> -/*
>>> - *  apbuart_outbyte_polled
>>> - *
>>> - *  This routine transmits a character using polling.
>>> - */
>>> -void apbuart_outbyte_polled(
>>> -  struct apbuart_regs *regs,
>>> -  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"::);
>>> -    asm volatile ("nop"::); asm volatile ("nop"::);
>>> -    asm volatile ("nop"::); asm volatile ("nop"::);
>>> -    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)
>>> -      ;
>>> -  }
>>> -}
>>> -
>>> -/*
>>> - *  apbuart_inbyte_nonblocking
>>> - *
>>> - *  This routine polls for a character.
>>> - */
>>> -int apbuart_inbyte_nonblocking(struct apbuart_regs *regs)
>>> -{
>>> -  /* Clear errors */
>>> -  if (regs->status & LEON_REG_UART_STATUS_ERR)
>>> -    regs->status = ~LEON_REG_UART_STATUS_ERR;
>>> -
>>> -  if ((regs->status & LEON_REG_UART_STATUS_DR) == 0)
>>> -    return EOF;
>>> -  else
>>> -    return (int) regs->data;
>>> -}
>>> -
>>> -/* putchar/getchar for printk */
>>> -static void bsp_out_char(char c)
>>> -{
>>> -  if (dbg_uart == NULL) {
>>> -    /* Local debug buffer when UART driver has not registered */
>>> -    pre_printk_dbgbuf[pre_printk_pos++] = c;
>>> -    pre_printk_pos = pre_printk_pos & (sizeof(pre_printk_dbgbuf)-1);
>>> -    return;
>>> -  }
>>> -
>>> -  apbuart_outbyte_polled(dbg_uart, c, 1, 1);
>>> -}
>>> -
>>> -/*
>>> - *  To support printk
>>> - */
>>> -
>>> -#include <rtems/bspIo.h>
>>> -
>>> -BSP_output_char_function_type BSP_output_char = bsp_out_char;
>>> -
>>> -static int bsp_in_char(void)
>>> -{
>>> -  int tmp;
>>> -
>>> -  if (dbg_uart == NULL)
>>> -    return EOF;
>>> -
>>> -  while ((tmp = apbuart_inbyte_nonblocking(dbg_uart)) < 0)
>>> -    ;
>>> -  return tmp;
>>> -}
>>> -
>>> -BSP_polling_getchar_function_type BSP_poll_char = bsp_in_char;
>>> diff --git a/c/src/lib/libbsp/sparc/leon3/console/printk_support.c b/c/src/lib/libbsp/sparc/leon3/console/printk_support.c
>>> new file mode 100644
>>> index 0000000..9815053
>>> --- /dev/null
>>> +++ b/c/src/lib/libbsp/sparc/leon3/console/printk_support.c
>>> @@ -0,0 +1,169 @@
>>> +/*
>>> + *  This file contains the TTY driver for the serial ports on the LEON.
>>> + *
>>> + *  This driver uses the termios pseudo driver.
>>> + *
>>> + *  COPYRIGHT (c) 1989-1999.
>>> + *  On-Line Applications Research Corporation (OAR).
>>> + *
>>> + *  Modified for LEON3 BSP.
>>> + *  COPYRIGHT (c) 2011.
>>> + *  Aeroflex Gaisler.
>>> + *
>>> + *  The license and distribution terms for this file may be
>>> + *  found in the file LICENSE in this distribution or at
>>> + *  http://www.rtems.com/license/LICENSE.
>>> + */
>>> +
>>> +#include <bsp.h>
>>> +#include <rtems/libio.h>
>>> +#include <stdlib.h>
>>> +#include <assert.h>
>>> +#include <stdio.h>
>>> +
>>> +/* Let user override which on-chip APBUART will be debug UART
>>> + * 0 = Default APBUART. On MP system CPU0=APBUART0, CPU1=APBUART1...
>>> + * 1 = APBUART[0]
>>> + * 2 = APBUART[1]
>>> + * 3 = APBUART[2]
>>> + * ...
>>> + */
>>> +int debug_uart_index __attribute__((weak)) = 0;
>>> +struct apbuart_regs *dbg_uart = NULL;
>>> +
>>> +/* Before UART driver has registered (or when no UART is available), calls to
>>> + * printk that gets to bsp_out_char() will be filling data into the
>>> + * pre_printk_dbgbuf[] buffer, hopefully the buffer can help debugging the
>>> + * early BSP boot.. At least the last printk() will be caught.
>>> + */
>>> +char pre_printk_dbgbuf[32] = {0};
>>> +int pre_printk_pos = 0;
>>> +
>>> +/* Initialize the BSP system debug console layer. It will scan AMBA Plu&Play
>>> + * for a debug APBUART and enable RX/TX for that UART.
>>> + */
>>> +int bsp_debug_uart_init(void)
>>> +{
>>> +  int i;
>>> +  struct ambapp_dev *adev;
>>> +  struct ambapp_apb_info *apb;
>>> +
>>> +  /* Update debug_uart_index to index used as debug console.
>>> +   * Let user select Debug console by setting debug_uart_index. If the
>>> +   * BSP is to provide the default UART (debug_uart_index==0):
>>> +   *   non-MP: APBUART[0] is debug console
>>> +   *   MP: LEON CPU index select UART
>>> +   */
>>> +  if (debug_uart_index == 0) {
>>> +#if defined(RTEMS_MULTIPROCESSING)
>>> +    debug_uart_index = LEON3_Cpu_Index;
>>> +#else
>>> +    debug_uart_index = 0;
>>> +#endif
>>> +  } else {
>>> +    debug_uart_index = debug_uart_index - 1; /* User selected dbg-console */
>>> +  }
>>> +
>>> +  /* Find APBUART core for System Debug Console */
>>> +  i = debug_uart_index;
>>> +  adev = (void *)ambapp_for_each(&ambapp_plb, (OPTIONS_ALL|OPTIONS_APB_SLVS),
>>> +                                 VENDOR_GAISLER, GAISLER_APBUART,
>>> +                                 ambapp_find_by_idx, (void *)&i);
>>> +  if (adev) {
>>> +    /* Found a matching debug console, initialize debug uart if present
>>> +     * for printk
>>> +     */
>>> +    apb = (struct ambapp_apb_info *)adev->devinfo;
>>> +    dbg_uart = (struct apbuart_regs *)apb->start;
>>> +    dbg_uart->ctrl |= LEON_REG_UART_CTRL_RE | LEON_REG_UART_CTRL_TE;
>>> +    dbg_uart->status = 0;
>>> +    return 1;
>>> +  } else
>>> +    return 0;
>>> +}
>>> +
>>> +/*
>>> + *  apbuart_outbyte_polled
>>> + *
>>> + *  This routine transmits a character using polling.
>>> + */
>>> +void apbuart_outbyte_polled(
>>> +  struct apbuart_regs *regs,
>>> +  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"::);
>>> +    asm volatile ("nop"::); asm volatile ("nop"::);
>>> +    asm volatile ("nop"::); asm volatile ("nop"::);
>>> +    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)
>>> +      ;
>>> +  }
>>> +}
>>> +
>>> +/*
>>> + *  apbuart_inbyte_nonblocking
>>> + *
>>> + *  This routine polls for a character.
>>> + */
>>> +int apbuart_inbyte_nonblocking(struct apbuart_regs *regs)
>>> +{
>>> +  /* Clear errors */
>>> +  if (regs->status & LEON_REG_UART_STATUS_ERR)
>>> +    regs->status = ~LEON_REG_UART_STATUS_ERR;
>>> +
>>> +  if ((regs->status & LEON_REG_UART_STATUS_DR) == 0)
>>> +    return EOF;
>>> +  else
>>> +    return (int) regs->data;
>>> +}
>>> +
>>> +/* putchar/getchar for printk */
>>> +static void bsp_out_char(char c)
>>> +{
>>> +  if (dbg_uart == NULL) {
>>> +    /* Local debug buffer when UART driver has not registered */
>>> +    pre_printk_dbgbuf[pre_printk_pos++] = c;
>>> +    pre_printk_pos = pre_printk_pos & (sizeof(pre_printk_dbgbuf)-1);
>>> +    return;
>>> +  }
>>> +
>>> +  apbuart_outbyte_polled(dbg_uart, c, 1, 1);
>>> +}
>>> +
>>> +/*
>>> + *  To support printk
>>> + */
>>> +
>>> +#include <rtems/bspIo.h>
>>> +
>>> +BSP_output_char_function_type BSP_output_char = bsp_out_char;
>>> +
>>> +static int bsp_in_char(void)
>>> +{
>>> +  int tmp;
>>> +
>>> +  if (dbg_uart == NULL)
>>> +    return EOF;
>>> +
>>> +  while ((tmp = apbuart_inbyte_nonblocking(dbg_uart)) < 0)
>>> +    ;
>>> +  return tmp;
>>> +}
>>> +
>>> +BSP_polling_getchar_function_type BSP_poll_char = bsp_in_char;
>>> --
>>> 1.7.0.4
>>>




More information about the devel mailing list