summaryrefslogtreecommitdiffstats
path: root/bsps/arm/realview-pbx-a9
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2018-04-20 10:35:35 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2018-04-20 13:52:14 +0200
commit99648958668d3a33ee57974479b36201fe303f34 (patch)
tree6f27ea790e2823c6156e71219a4f54680263fac6 /bsps/arm/realview-pbx-a9
parentbsps: Move start files to bsps (diff)
downloadrtems-99648958668d3a33ee57974479b36201fe303f34.tar.bz2
bsps: Move startup files to bsps
Adjust build support files to new directory layout. This patch is a part of the BSP source reorganization. Update #3285.
Diffstat (limited to 'bsps/arm/realview-pbx-a9')
-rw-r--r--bsps/arm/realview-pbx-a9/start/bsp_specs9
-rw-r--r--bsps/arm/realview-pbx-a9/start/bspreset.c26
-rw-r--r--bsps/arm/realview-pbx-a9/start/bspsmp.c24
-rw-r--r--bsps/arm/realview-pbx-a9/start/bspstart.c24
-rw-r--r--bsps/arm/realview-pbx-a9/start/bspstarthooks.c81
-rw-r--r--bsps/arm/realview-pbx-a9/start/fb-config.c64
-rw-r--r--bsps/arm/realview-pbx-a9/start/linkcmds.realview_pbx_a9_qemu35
-rw-r--r--bsps/arm/realview-pbx-a9/start/linkcmds.realview_pbx_a9_qemu_smp3
8 files changed, 266 insertions, 0 deletions
diff --git a/bsps/arm/realview-pbx-a9/start/bsp_specs b/bsps/arm/realview-pbx-a9/start/bsp_specs
new file mode 100644
index 0000000000..47dd31d46b
--- /dev/null
+++ b/bsps/arm/realview-pbx-a9/start/bsp_specs
@@ -0,0 +1,9 @@
+%rename endfile old_endfile
+%rename startfile old_startfile
+
+*startfile:
+%{!qrtems: %(old_startfile)} \
+%{!nostdlib: %{qrtems: crti.o%s crtbegin.o%s}}
+
+*endfile:
+%{!qrtems: %(old_endfiles)} %{qrtems: crtend.o%s crtn.o%s}
diff --git a/bsps/arm/realview-pbx-a9/start/bspreset.c b/bsps/arm/realview-pbx-a9/start/bspreset.c
new file mode 100644
index 0000000000..15ff7193f1
--- /dev/null
+++ b/bsps/arm/realview-pbx-a9/start/bspreset.c
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2013 embedded brains GmbH. All rights reserved.
+ *
+ * embedded brains GmbH
+ * Dornierstr. 4
+ * 82178 Puchheim
+ * Germany
+ * <info@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
+#include <bsp/bootcard.h>
+
+void bsp_reset(void)
+{
+ volatile uint32_t *sys_lock = (volatile uint32_t *) 0x10000020;
+ volatile uint32_t *sys_resetctl = (volatile uint32_t *) 0x10000040;
+
+ while (true) {
+ *sys_lock = 0xa05f;
+ *sys_resetctl = 0xf4;
+ }
+}
diff --git a/bsps/arm/realview-pbx-a9/start/bspsmp.c b/bsps/arm/realview-pbx-a9/start/bspsmp.c
new file mode 100644
index 0000000000..471e7e5f29
--- /dev/null
+++ b/bsps/arm/realview-pbx-a9/start/bspsmp.c
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2014 embedded brains GmbH. All rights reserved.
+ *
+ * embedded brains GmbH
+ * Dornierstr. 4
+ * 82178 Puchheim
+ * Germany
+ * <info@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
+#include <rtems/score/smpimpl.h>
+
+bool _CPU_SMP_Start_processor(uint32_t cpu_index)
+{
+ (void) cpu_index;
+
+ /* Nothing to do */
+
+ return true;
+}
diff --git a/bsps/arm/realview-pbx-a9/start/bspstart.c b/bsps/arm/realview-pbx-a9/start/bspstart.c
new file mode 100644
index 0000000000..0be515c057
--- /dev/null
+++ b/bsps/arm/realview-pbx-a9/start/bspstart.c
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2013 embedded brains GmbH. All rights reserved.
+ *
+ * embedded brains GmbH
+ * Dornierstr. 4
+ * 82178 Puchheim
+ * Germany
+ * <info@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
+#include <bsp.h>
+#include <bsp/bootcard.h>
+#include <bsp/arm-a9mpcore-clock.h>
+#include <bsp/irq-generic.h>
+
+void bsp_start(void)
+{
+ a9mpcore_clock_initialize_early();
+ bsp_interrupt_initialize();
+}
diff --git a/bsps/arm/realview-pbx-a9/start/bspstarthooks.c b/bsps/arm/realview-pbx-a9/start/bspstarthooks.c
new file mode 100644
index 0000000000..ab766e8626
--- /dev/null
+++ b/bsps/arm/realview-pbx-a9/start/bspstarthooks.c
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2013 embedded brains GmbH. All rights reserved.
+ *
+ * embedded brains GmbH
+ * Dornierstr. 4
+ * 82178 Puchheim
+ * Germany
+ * <info@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
+#define ARM_CP15_TEXT_SECTION BSP_START_TEXT_SECTION
+
+#include <bsp.h>
+#include <bsp/start.h>
+#include <bsp/arm-cp15-start.h>
+#include <bsp/arm-a9mpcore-start.h>
+
+BSP_START_DATA_SECTION static const arm_cp15_start_section_config
+rvpbxa9_mmu_config_table[] = {
+ ARMV7_CP15_START_DEFAULT_SECTIONS,
+ {
+ .begin = 0x10000000U,
+ .end = 0x10020000U,
+ .flags = ARMV7_MMU_DEVICE
+ }, {
+ .begin = 0x1f000000U,
+ .end = 0x20000000U,
+ .flags = ARMV7_MMU_DEVICE
+ }, {
+ .begin = 0x4e000000U,
+ .end = 0x4f000000U,
+ .flags = ARMV7_MMU_DEVICE
+ }
+};
+
+BSP_START_TEXT_SECTION static void setup_mmu_and_cache(void)
+{
+ uint32_t ctrl = arm_cp15_start_setup_mmu_and_cache(
+ ARM_CP15_CTRL_A,
+ ARM_CP15_CTRL_AFE | ARM_CP15_CTRL_Z
+ );
+
+ arm_cp15_start_setup_translation_table_and_enable_mmu_and_cache(
+ ctrl,
+ (uint32_t *) bsp_translation_table_base,
+ ARM_MMU_DEFAULT_CLIENT_DOMAIN,
+ &rvpbxa9_mmu_config_table[0],
+ RTEMS_ARRAY_SIZE(rvpbxa9_mmu_config_table)
+ );
+}
+
+BSP_START_TEXT_SECTION void bsp_start_hook_0(void)
+{
+#ifdef RTEMS_SMP
+ uint32_t cpu_id = arm_cortex_a9_get_multiprocessor_cpu_id();
+
+ /*
+ * QEMU jumps to the entry point of the ELF file on all processors. Prevent
+ * a SMP_FATAL_MULTITASKING_START_ON_INVALID_PROCESSOR this way.
+ */
+ if ( cpu_id >= rtems_configuration_get_maximum_processors() ) {
+ while (true) {
+ _ARM_Wait_for_event();
+ }
+ }
+#endif
+
+ arm_a9mpcore_start_hook_0();
+}
+
+BSP_START_TEXT_SECTION void bsp_start_hook_1(void)
+{
+ arm_a9mpcore_start_hook_1();
+ bsp_start_copy_sections();
+ setup_mmu_and_cache();
+ bsp_start_clear_bss();
+}
diff --git a/bsps/arm/realview-pbx-a9/start/fb-config.c b/bsps/arm/realview-pbx-a9/start/fb-config.c
new file mode 100644
index 0000000000..a756c9ab22
--- /dev/null
+++ b/bsps/arm/realview-pbx-a9/start/fb-config.c
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2013 embedded brains GmbH. All rights reserved.
+ *
+ * embedded brains GmbH
+ * Dornierstr. 4
+ * 82178 Puchheim
+ * Germany
+ * <info@embedded-brains.de>
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
+#include <bsp/arm-pl111-fb.h>
+#include <bsp.h>
+
+static void fb_set_up(const pl111_fb_config *cfg)
+{
+ /* TODO */
+}
+
+static void fb_pins_set_up(const pl111_fb_config *cfg)
+{
+ /* TODO */
+}
+
+static void fb_pins_tear_down(const pl111_fb_config *cfg)
+{
+ /* TODO */
+}
+
+static void fb_tear_down(const pl111_fb_config *cfg)
+{
+ /* TODO */
+}
+
+static const pl111_fb_config fb_config = {
+ .regs = (volatile pl111 *) 0x10020000,
+
+ /*
+ * Values obtained from "RealView Platform Baseboard Explore for Cortex-A9
+ * User Guide" section 4.6.1 "Display resolutions and display memory
+ * organization".
+ */
+ .timing0 = 0x3f1f3f9c,
+ .timing1 = 0x090b61df,
+ .timing2 = 0x067f1800,
+
+ .timing3 = 0x0,
+ .control = PL111_LCD_CONTROL_LCD_TFT
+ | PL111_LCD_CONTROL_LCD_BPP(PL111_LCD_CONTROL_LCD_BPP_16)
+ | PL111_LCD_CONTROL_BGR,
+ .power_delay_in_us = 100000,
+ .set_up = fb_set_up,
+ .pins_set_up = fb_pins_set_up,
+ .pins_tear_down = fb_pins_tear_down,
+ .tear_down = fb_tear_down
+};
+
+const pl111_fb_config *arm_pl111_fb_get_config(void)
+{
+ return &fb_config;
+}
diff --git a/bsps/arm/realview-pbx-a9/start/linkcmds.realview_pbx_a9_qemu b/bsps/arm/realview-pbx-a9/start/linkcmds.realview_pbx_a9_qemu
new file mode 100644
index 0000000000..e3b5b471b4
--- /dev/null
+++ b/bsps/arm/realview-pbx-a9/start/linkcmds.realview_pbx_a9_qemu
@@ -0,0 +1,35 @@
+MEMORY {
+ /* Waste the first 1MiB for NULL pointer protection */
+ RAM : ORIGIN = 0x00100000, LENGTH = 255M - 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);
+REGION_ALIAS ("REGION_NOCACHE", RAM);
+REGION_ALIAS ("REGION_NOCACHE_LOAD", 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_translation_table_end = ORIGIN (RAM_MMU) + LENGTH (RAM_MMU);
+
+INCLUDE linkcmds.armv4
diff --git a/bsps/arm/realview-pbx-a9/start/linkcmds.realview_pbx_a9_qemu_smp b/bsps/arm/realview-pbx-a9/start/linkcmds.realview_pbx_a9_qemu_smp
new file mode 100644
index 0000000000..d31c4f08ae
--- /dev/null
+++ b/bsps/arm/realview-pbx-a9/start/linkcmds.realview_pbx_a9_qemu_smp
@@ -0,0 +1,3 @@
+bsp_processor_count = DEFINED (bsp_processor_count) ? bsp_processor_count : 8;
+
+INCLUDE linkcmds.realview_pbx_a9_qemu