diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2006-04-24 16:58:41 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2006-04-24 16:58:41 +0000 |
commit | cadb5d1641059adb5bbef5900e2cefee653f2b74 (patch) | |
tree | 6353a9fe2f02c1b89b69e6cf55eef27d24710ce7 /c/src/lib/libbsp/sparc/leon3/amba/amba.c | |
parent | 2006-04-24 Joel Sherrill <joel@OARcorp.com> (diff) | |
download | rtems-cadb5d1641059adb5bbef5900e2cefee653f2b74.tar.bz2 |
2006-04-24 Jiri Gaisler <jiri@gaisler.com>
Edvin Catovic <edvin@gaisler.com>
PR bsps/972
* ChangeLog, Makefile.am, configure.ac, amba/amba.c, clock/ckinit.c,
console/Makefile.am, console/console.c, console/debugputs.c,
include/Makefile.am, include/amba.h, include/bsp.h, include/leon.h,
leon_smc91111/leon_smc91111.c, startup/bspstart.c, timer/timer.c,
tools/Makefile.am, wrapup/Makefile.am: Added Shared Memory Support
Driver. Added Leon Gaisler Research Ethernet support. Enhanced AMBA
bus support.
* console/debugprintf.c, console/spacewire.c, include/spacewire.h,
leon_greth/.cvsignore, leon_greth/Makefile.am,
leon_greth/leon_greth.c, shmsupp/.cvsignore, shmsupp/Makefile.am,
shmsupp/addrconv.c, shmsupp/getcfg.c, shmsupp/lock.c,
shmsupp/mpisr.c: New files.
Diffstat (limited to 'c/src/lib/libbsp/sparc/leon3/amba/amba.c')
-rw-r--r-- | c/src/lib/libbsp/sparc/leon3/amba/amba.c | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/c/src/lib/libbsp/sparc/leon3/amba/amba.c b/c/src/lib/libbsp/sparc/leon3/amba/amba.c index 77a3f346eb..e3898db78d 100644 --- a/c/src/lib/libbsp/sparc/leon3/amba/amba.c +++ b/c/src/lib/libbsp/sparc/leon3/amba/amba.c @@ -13,7 +13,7 @@ * $Id$ */ -#include <leon.h> +#include <bsp.h> #define amba_insert_device(tab, address) \ { \ @@ -31,6 +31,9 @@ amba_confarea_type amba_conf; /* Pointers to Interrupt Controller configuration registers */ volatile LEON3_IrqCtrl_Regs_Map *LEON3_IrqCtrl_Regs; +int LEON3_Cpu_Index = 0; +static int apb_init = 0; + /* * bsp_leon3_predriver_hook * @@ -41,12 +44,23 @@ volatile LEON3_IrqCtrl_Regs_Map *LEON3_IrqCtrl_Regs; * amba_ahb_masters, amba_ahb_slaves and amba. */ +unsigned int getasr17(); + +asm(" .text \n" + "getasr17: \n" + "retl \n" + "mov %asr17, %o0\n" +); + + +extern rtems_configuration_table Configuration; void bsp_leon3_predriver_hook(void) { unsigned int *cfg_area; /* address to configuration area */ unsigned int mbar, iobar, conf; int i, j; + unsigned int tmp; amba_conf.ahbmst.devnr = 0; amba_conf.ahbslv.devnr = 0; amba_conf.apbslv.devnr = 0; cfg_area = (unsigned int *) (LEON3_IO_AREA | LEON3_CONF_AREA); @@ -68,7 +82,8 @@ void bsp_leon3_predriver_hook(void) { conf = amba_get_confword(amba_conf.ahbslv, i, 0); mbar = amba_ahb_get_membar(amba_conf.ahbslv, i, 0); - if ((amba_vendor(conf) == VENDOR_GAISLER) && (amba_device(conf) == GAISLER_APBMST)) + if ((amba_vendor(conf) == VENDOR_GAISLER) && (amba_device(conf) == GAISLER_APBMST) && + (apb_init == 0)) { amba_conf.apbmst = amba_membar_start(mbar); cfg_area = (unsigned int *) (amba_conf.apbmst | LEON3_CONF_AREA); @@ -77,6 +92,7 @@ void bsp_leon3_predriver_hook(void) amba_insert_device(&amba_conf.apbslv, cfg_area); cfg_area += LEON3_APB_CONF_WORDS; } + apb_init = 1; } } @@ -89,6 +105,12 @@ void bsp_leon3_predriver_hook(void) { iobar = amba_apb_get_membar(amba_conf.apbslv, i); LEON3_IrqCtrl_Regs = (volatile LEON3_IrqCtrl_Regs_Map *) amba_iobar_start(amba_conf.apbmst, iobar); + /* asm("mov %%asr17, %0": : "r" (tmp)); */ + if (Configuration.User_multiprocessing_table != NULL) + { + tmp = getasr17(); + LEON3_Cpu_Index = (tmp >> 28) & 3; + } break; } i++; |