From d17733ccd8ebc56809aec8dd6bb681ff6f23b673 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Mon, 24 May 2010 15:05:19 +0000 Subject: [PATCH] 2010-05-24 Joel Sherrill * Makefile.am, amba/amba.c, console/console.c, console/debugputs.c, startup/bspstart.c: Rework initialization order so AMBA bus is scanned earlier. This lets us look for UARTs earlier and support printk as early as bsp_start() returning. --- c/src/lib/libbsp/sparc/leon3/ChangeLog | 7 ++++ c/src/lib/libbsp/sparc/leon3/Makefile.am | 2 +- c/src/lib/libbsp/sparc/leon3/amba/amba.c | 9 ++++-- .../lib/libbsp/sparc/leon3/console/console.c | 32 ++----------------- .../libbsp/sparc/leon3/console/debugputs.c | 32 +++++++++++++++++++ .../lib/libbsp/sparc/leon3/startup/bspstart.c | 5 +++ 6 files changed, 54 insertions(+), 33 deletions(-) diff --git a/c/src/lib/libbsp/sparc/leon3/ChangeLog b/c/src/lib/libbsp/sparc/leon3/ChangeLog index 2b04f95f17..c8091c8aeb 100644 --- a/c/src/lib/libbsp/sparc/leon3/ChangeLog +++ b/c/src/lib/libbsp/sparc/leon3/ChangeLog @@ -1,3 +1,10 @@ +2010-05-24 Joel Sherrill + + * Makefile.am, amba/amba.c, console/console.c, console/debugputs.c, + startup/bspstart.c: Rework initialization order so AMBA bus is + scanned earlier. This lets us look for UARTs earlier and support + printk as early as bsp_start() returning. + 2010-05-11 Sebastian Huber * startup/linkcmds: Include basic linker command file and define only diff --git a/c/src/lib/libbsp/sparc/leon3/Makefile.am b/c/src/lib/libbsp/sparc/leon3/Makefile.am index 996c4dc0da..ebe8ffbf41 100644 --- a/c/src/lib/libbsp/sparc/leon3/Makefile.am +++ b/c/src/lib/libbsp/sparc/leon3/Makefile.am @@ -39,7 +39,7 @@ libbsp_a_SOURCES = # startup libbsp_a_SOURCES += ../../shared/bspclean.c ../../shared/bsplibc.c \ ../../shared/bsppost.c ../../shared/bootcard.c startup/bspstart.c \ - ../../sparc/shared/bsppretaskinghook.c \ + ../../sparc/shared/bsppretaskinghook.c ../../shared/bsppredriverhook.c \ ../../sparc/shared/bspgetworkarea.c ../../shared/sbrk.c startup/setvec.c \ startup/spurious.c startup/bspidle.S # gnatsupp diff --git a/c/src/lib/libbsp/sparc/leon3/amba/amba.c b/c/src/lib/libbsp/sparc/leon3/amba/amba.c index ad901df1c0..6f86e27ded 100644 --- a/c/src/lib/libbsp/sparc/leon3/amba/amba.c +++ b/c/src/lib/libbsp/sparc/leon3/amba/amba.c @@ -24,9 +24,9 @@ volatile LEON3_IrqCtrl_Regs_Map *LEON3_IrqCtrl_Regs; int LEON3_Cpu_Index = 0; /* - * bsp_predriver_hook + * amba_initialize * - * BSP predriver hook. Called just before drivers are initialized. + * Must be called just before drivers are initialized. * Used to scan system bus. Probes for AHB masters, AHB slaves and * APB slaves. Addresses to configuration areas of the AHB masters, * AHB slaves, APB slaves and APB master are storeds in @@ -43,8 +43,9 @@ asm(" .text \n" extern rtems_configuration_table Configuration; +extern int scan_uarts(void); -void bsp_predriver_hook(void) +void amba_initialize(void) { int i; amba_apb_device dev; @@ -71,4 +72,6 @@ void bsp_predriver_hook(void) LEON3_Timer_Regs = (volatile LEON3_Timer_Regs_Map *) dev.start; } + /* find UARTS */ + scan_uarts(); } diff --git a/c/src/lib/libbsp/sparc/leon3/console/console.c b/c/src/lib/libbsp/sparc/leon3/console/console.c index b3e2c6884e..fee8721dee 100644 --- a/c/src/lib/libbsp/sparc/leon3/console/console.c +++ b/c/src/lib/libbsp/sparc/leon3/console/console.c @@ -76,27 +76,8 @@ ssize_t console_write_support (int minor, const char *buf, size_t len) * */ int uarts = 0; -static int isinit = 0; volatile LEON3_UART_Regs_Map *LEON3_Console_Uart[LEON3_APBUARTS]; -int scan_uarts(void) { - int i; - amba_apb_device apbuarts[LEON3_APBUARTS]; - - if (isinit == 0) { - i = 0; - uarts = 0; - - uarts = amba_find_apbslvs( - &amba_conf, VENDOR_GAISLER, GAISLER_APBUART, apbuarts, LEON3_APBUARTS); - for(i=0; ictrl |= + LEON_REG_UART_CTRL_RE | LEON_REG_UART_CTRL_TE; + LEON3_Console_Uart[0]->status = 0; + } + isinit = 1; + } + + return uarts; +} + /* * console_outbyte_polled * diff --git a/c/src/lib/libbsp/sparc/leon3/startup/bspstart.c b/c/src/lib/libbsp/sparc/leon3/startup/bspstart.c index fd44df82cf..fbe6b876ed 100644 --- a/c/src/lib/libbsp/sparc/leon3/startup/bspstart.c +++ b/c/src/lib/libbsp/sparc/leon3/startup/bspstart.c @@ -27,6 +27,8 @@ */ int CPU_SPARC_HAS_SNOOPING; +extern void amba_initialize(void); + /* * set_snooping * @@ -54,4 +56,7 @@ static inline int set_snooping(void) void bsp_start( void ) { CPU_SPARC_HAS_SNOOPING = set_snooping(); + + /* Find UARTs */ + amba_initialize(); }