diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-05-31 13:59:47 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-05-31 15:20:33 +0200 |
commit | db42c079a0479c17add94e5fb5fb89db1dfa6799 (patch) | |
tree | 723eb41d04eddb021be998d57e8863806cc0d0a6 /c/src/lib/libbsp/arm/realview-pbx-a9 | |
parent | smp: Add ARM support (diff) | |
download | rtems-db42c079a0479c17add94e5fb5fb89db1dfa6799.tar.bz2 |
bsps/arm: Add SMP support
Diffstat (limited to 'c/src/lib/libbsp/arm/realview-pbx-a9')
-rw-r--r-- | c/src/lib/libbsp/arm/realview-pbx-a9/Makefile.am | 7 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/realview-pbx-a9/README | 2 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/realview-pbx-a9/configure.ac | 3 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/realview-pbx-a9/include/bsp.h | 6 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/realview-pbx-a9/include/irq.h | 4 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/realview-pbx-a9/make/custom/realview_pbx_a9_qemu_smp.cfg | 1 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/realview-pbx-a9/preinstall.am | 4 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/realview-pbx-a9/startup/bspstarthooks.c | 27 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/realview-pbx-a9/startup/linkcmds.realview_pbx_a9_qemu (renamed from c/src/lib/libbsp/arm/realview-pbx-a9/startup/linkcmds) | 0 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/realview-pbx-a9/startup/linkcmds.realview_pbx_a9_qemu_smp | 33 |
10 files changed, 73 insertions, 14 deletions
diff --git a/c/src/lib/libbsp/arm/realview-pbx-a9/Makefile.am b/c/src/lib/libbsp/arm/realview-pbx-a9/Makefile.am index d8589a3c6f..9410a30a4a 100644 --- a/c/src/lib/libbsp/arm/realview-pbx-a9/Makefile.am +++ b/c/src/lib/libbsp/arm/realview-pbx-a9/Makefile.am @@ -35,6 +35,7 @@ include_bsp_HEADERS += ../../shared/tod.h include_bsp_HEADERS += ../shared/include/start.h include_bsp_HEADERS += ../shared/include/arm-a9mpcore-irq.h include_bsp_HEADERS += ../shared/include/arm-a9mpcore-regs.h +include_bsp_HEADERS += ../shared/include/arm-a9mpcore-start.h include_bsp_HEADERS += ../shared/include/arm-cp15-start.h include_bsp_HEADERS += ../shared/include/arm-gic.h include_bsp_HEADERS += ../shared/include/arm-gic-irq.h @@ -59,6 +60,8 @@ project_lib_DATA = start.$(OBJEXT) project_lib_DATA += startup/linkcmds EXTRA_DIST = +EXTRA_DIST += startup/linkcmds.realview_pbx_a9_qemu +EXTRA_DIST += startup/linkcmds.realview_pbx_a9_qemu_smp ############################################################################### # LibBSP # @@ -121,6 +124,10 @@ libbsp_a_CPPFLAGS += -I$(srcdir)/../../../libcpu/arm/shared/include # Start hooks libbsp_a_SOURCES += startup/bspstarthooks.c +if HAS_SMP +libbsp_a_SOURCES += ../shared/arm-a9mpcore-smp.c +endif + ############################################################################### # Special Rules # ############################################################################### diff --git a/c/src/lib/libbsp/arm/realview-pbx-a9/README b/c/src/lib/libbsp/arm/realview-pbx-a9/README index 8fdfdc45f3..a4e6ac17f8 100644 --- a/c/src/lib/libbsp/arm/realview-pbx-a9/README +++ b/c/src/lib/libbsp/arm/realview-pbx-a9/README @@ -11,3 +11,5 @@ make install export PATH="$PATH:/opt/qemu/bin" qemu-system-arm -S -s -no-reboot -net none -nographic -M realview-pbx-a9 -m 256M -kernel ticker.exe + +qemu-system-arm -S -s -no-reboot -net none -nographic -smp 2 -icount auto -M realview-pbx-a9 -m 256M -kernel ticker.exe diff --git a/c/src/lib/libbsp/arm/realview-pbx-a9/configure.ac b/c/src/lib/libbsp/arm/realview-pbx-a9/configure.ac index 4052dccce2..61d7a2a18c 100644 --- a/c/src/lib/libbsp/arm/realview-pbx-a9/configure.ac +++ b/c/src/lib/libbsp/arm/realview-pbx-a9/configure.ac @@ -33,6 +33,9 @@ RTEMS_BSPOPTS_HELP([CLOCK_DRIVER_USE_FAST_IDLE], occurs while the IDLE thread is executing. This can significantly reduce simulation times.]) +RTEMS_CHECK_SMP +AM_CONDITIONAL(HAS_SMP,[test "$rtems_cv_HAS_SMP" = "yes"]) + RTEMS_BSP_CLEANUP_OPTIONS(0, 1) RTEMS_BSP_LINKCMDS diff --git a/c/src/lib/libbsp/arm/realview-pbx-a9/include/bsp.h b/c/src/lib/libbsp/arm/realview-pbx-a9/include/bsp.h index 41b714b51b..c25c9f62dc 100644 --- a/c/src/lib/libbsp/arm/realview-pbx-a9/include/bsp.h +++ b/c/src/lib/libbsp/arm/realview-pbx-a9/include/bsp.h @@ -31,8 +31,14 @@ extern "C" { #endif /* __cplusplus */ +#define BSP_ARM_A9MPCORE_SCU_BASE 0x1f000000 + +#define BSP_ARM_GIC_CPUIF_BASE 0x1f000100 + #define BSP_ARM_A9MPCORE_PT_BASE 0x1f000600 +#define BSP_ARM_GIC_DIST_BASE 0x1f001000 + typedef enum { BSP_ARM_A9MPCORE_FATAL_CLOCK_IRQ_INSTALL, BSP_ARM_A9MPCORE_FATAL_CLOCK_IRQ_REMOVE diff --git a/c/src/lib/libbsp/arm/realview-pbx-a9/include/irq.h b/c/src/lib/libbsp/arm/realview-pbx-a9/include/irq.h index 2651d6c201..b065c364dd 100644 --- a/c/src/lib/libbsp/arm/realview-pbx-a9/include/irq.h +++ b/c/src/lib/libbsp/arm/realview-pbx-a9/include/irq.h @@ -77,10 +77,6 @@ extern "C" { #define BSP_INTERRUPT_VECTOR_MIN 0 #define BSP_INTERRUPT_VECTOR_MAX 89 -#define BSP_ARM_GIC_CPUIF_BASE 0x1f000100 - -#define BSP_ARM_GIC_DIST_BASE 0x1f001000 - #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/c/src/lib/libbsp/arm/realview-pbx-a9/make/custom/realview_pbx_a9_qemu_smp.cfg b/c/src/lib/libbsp/arm/realview-pbx-a9/make/custom/realview_pbx_a9_qemu_smp.cfg new file mode 100644 index 0000000000..fd51a18004 --- /dev/null +++ b/c/src/lib/libbsp/arm/realview-pbx-a9/make/custom/realview_pbx_a9_qemu_smp.cfg @@ -0,0 +1 @@ +include $(RTEMS_ROOT)/make/custom/realview_pbx_a9_qemu.cfg diff --git a/c/src/lib/libbsp/arm/realview-pbx-a9/preinstall.am b/c/src/lib/libbsp/arm/realview-pbx-a9/preinstall.am index b153c8c8df..56e4ac8ac1 100644 --- a/c/src/lib/libbsp/arm/realview-pbx-a9/preinstall.am +++ b/c/src/lib/libbsp/arm/realview-pbx-a9/preinstall.am @@ -94,6 +94,10 @@ $(PROJECT_INCLUDE)/bsp/arm-a9mpcore-regs.h: ../shared/include/arm-a9mpcore-regs. $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/arm-a9mpcore-regs.h PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/arm-a9mpcore-regs.h +$(PROJECT_INCLUDE)/bsp/arm-a9mpcore-start.h: ../shared/include/arm-a9mpcore-start.h $(PROJECT_INCLUDE)/bsp/$(dirstamp) + $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/arm-a9mpcore-start.h +PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/arm-a9mpcore-start.h + $(PROJECT_INCLUDE)/bsp/arm-cp15-start.h: ../shared/include/arm-cp15-start.h $(PROJECT_INCLUDE)/bsp/$(dirstamp) $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/arm-cp15-start.h PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/arm-cp15-start.h diff --git a/c/src/lib/libbsp/arm/realview-pbx-a9/startup/bspstarthooks.c b/c/src/lib/libbsp/arm/realview-pbx-a9/startup/bspstarthooks.c index 48e174a0ad..93ebe20f48 100644 --- a/c/src/lib/libbsp/arm/realview-pbx-a9/startup/bspstarthooks.c +++ b/c/src/lib/libbsp/arm/realview-pbx-a9/startup/bspstarthooks.c @@ -15,12 +15,14 @@ #include <bsp.h> #include <bsp/start.h> #include <bsp/arm-cp15-start.h> +#include <bsp/arm-a9mpcore-start.h> #include <bsp/linker-symbols.h> -BSP_START_TEXT_SECTION void bsp_start_hook_0(void) -{ - /* Do nothing */ -} +#ifdef RTEMS_SMP + #define MMU_DATA_READ_WRITE ARMV7_MMU_DATA_READ_WRITE_SHAREABLE +#else + #define MMU_DATA_READ_WRITE ARMV7_MMU_DATA_READ_WRITE_CACHED +#endif BSP_START_DATA_SECTION static const arm_cp15_start_section_config rvpbxa9_mmu_config_table[] = { @@ -31,7 +33,7 @@ rvpbxa9_mmu_config_table[] = { }, { .begin = (uint32_t) bsp_section_fast_data_begin, .end = (uint32_t) bsp_section_fast_data_end, - .flags = ARMV7_MMU_DATA_READ_WRITE_CACHED + .flags = MMU_DATA_READ_WRITE }, { .begin = (uint32_t) bsp_section_start_begin, .end = (uint32_t) bsp_section_start_end, @@ -39,7 +41,7 @@ rvpbxa9_mmu_config_table[] = { }, { .begin = (uint32_t) bsp_section_vector_begin, .end = (uint32_t) bsp_section_vector_end, - .flags = ARMV7_MMU_DATA_READ_WRITE_CACHED + .flags = MMU_DATA_READ_WRITE }, { .begin = (uint32_t) bsp_section_text_begin, .end = (uint32_t) bsp_section_text_end, @@ -51,19 +53,19 @@ rvpbxa9_mmu_config_table[] = { }, { .begin = (uint32_t) bsp_section_data_begin, .end = (uint32_t) bsp_section_data_end, - .flags = ARMV7_MMU_DATA_READ_WRITE_CACHED + .flags = MMU_DATA_READ_WRITE }, { .begin = (uint32_t) bsp_section_bss_begin, .end = (uint32_t) bsp_section_bss_end, - .flags = ARMV7_MMU_DATA_READ_WRITE_CACHED + .flags = MMU_DATA_READ_WRITE }, { .begin = (uint32_t) bsp_section_work_begin, .end = (uint32_t) bsp_section_work_end, - .flags = ARMV7_MMU_DATA_READ_WRITE_CACHED + .flags = MMU_DATA_READ_WRITE }, { .begin = (uint32_t) bsp_section_stack_begin, .end = (uint32_t) bsp_section_stack_end, - .flags = ARMV7_MMU_DATA_READ_WRITE_CACHED + .flags = MMU_DATA_READ_WRITE }, { .begin = 0x10000000U, .end = 0x10020000U, @@ -91,6 +93,11 @@ BSP_START_TEXT_SECTION static void setup_mmu_and_cache(void) ); } +BSP_START_TEXT_SECTION void bsp_start_hook_0(void) +{ + arm_a9mpcore_start_hook_0(); +} + BSP_START_TEXT_SECTION void bsp_start_hook_1(void) { bsp_start_copy_sections(); diff --git a/c/src/lib/libbsp/arm/realview-pbx-a9/startup/linkcmds b/c/src/lib/libbsp/arm/realview-pbx-a9/startup/linkcmds.realview_pbx_a9_qemu index 0b5e3e06cf..0b5e3e06cf 100644 --- a/c/src/lib/libbsp/arm/realview-pbx-a9/startup/linkcmds +++ b/c/src/lib/libbsp/arm/realview-pbx-a9/startup/linkcmds.realview_pbx_a9_qemu diff --git a/c/src/lib/libbsp/arm/realview-pbx-a9/startup/linkcmds.realview_pbx_a9_qemu_smp b/c/src/lib/libbsp/arm/realview-pbx-a9/startup/linkcmds.realview_pbx_a9_qemu_smp new file mode 100644 index 0000000000..d76dd2ecb4 --- /dev/null +++ b/c/src/lib/libbsp/arm/realview-pbx-a9/startup/linkcmds.realview_pbx_a9_qemu_smp @@ -0,0 +1,33 @@ +MEMORY { + RAM : ORIGIN = 0x00000000, LENGTH = 256M - 16k + RAM_MMU : ORIGIN = 0x0fffc000, LENGTH = 16k +} + +REGION_ALIAS ("REGION_START", RAM); +REGION_ALIAS ("REGION_VECTOR", RAM); +REGION_ALIAS ("REGION_TEXT", RAM); +REGION_ALIAS ("REGION_TEXT_LOAD", RAM); +REGION_ALIAS ("REGION_RODATA", RAM); +REGION_ALIAS ("REGION_RODATA_LOAD", RAM); +REGION_ALIAS ("REGION_DATA", RAM); +REGION_ALIAS ("REGION_DATA_LOAD", RAM); +REGION_ALIAS ("REGION_FAST_TEXT", RAM); +REGION_ALIAS ("REGION_FAST_TEXT_LOAD", RAM); +REGION_ALIAS ("REGION_FAST_DATA", RAM); +REGION_ALIAS ("REGION_FAST_DATA_LOAD", RAM); +REGION_ALIAS ("REGION_BSS", RAM); +REGION_ALIAS ("REGION_WORK", RAM); +REGION_ALIAS ("REGION_STACK", RAM); + +bsp_stack_irq_size = DEFINED (bsp_stack_irq_size) ? bsp_stack_irq_size : 4096; +bsp_stack_abt_size = DEFINED (bsp_stack_abt_size) ? bsp_stack_abt_size : 1024; + +bsp_section_rwbarrier_align = DEFINED (bsp_section_rwbarrier_align) ? bsp_section_rwbarrier_align : 1M; + +bsp_vector_table_in_start_section = 1; + +bsp_translation_table_base = ORIGIN (RAM_MMU); + +bsp_processor_count = DEFINED (bsp_processor_count) ? bsp_processor_count : 8; + +INCLUDE linkcmds.armv4 |