[PATCH] preliminary Raspberry Pi Model 2 support

Alan Cudmore alan.cudmore at gmail.com
Sun Mar 15 16:04:06 UTC 2015


---
 c/src/lib/libbsp/arm/raspberrypi/configure.ac      |  8 +++++++
 .../libbsp/arm/raspberrypi/include/raspberrypi.h   | 26 +++++++++++++++++-----
 .../arm/raspberrypi/make/custom/raspberrypi.cfg    | 15 +------------
 .../arm/raspberrypi/make/custom/raspberrypi.inc    | 18 +++++++++++++++
 .../arm/raspberrypi/make/custom/raspberrypi2.cfg   |  7 ++++++
 .../arm/raspberrypi/startup/mm_config_table.c      |  5 +++--
 6 files changed, 57 insertions(+), 22 deletions(-)
 create mode 100644 c/src/lib/libbsp/arm/raspberrypi/make/custom/raspberrypi.inc
 create mode 100644 c/src/lib/libbsp/arm/raspberrypi/make/custom/raspberrypi2.cfg

diff --git a/c/src/lib/libbsp/arm/raspberrypi/configure.ac b/c/src/lib/libbsp/arm/raspberrypi/configure.ac
index 42be4e9..27abe6c 100644
--- a/c/src/lib/libbsp/arm/raspberrypi/configure.ac
+++ b/c/src/lib/libbsp/arm/raspberrypi/configure.ac
@@ -24,6 +24,14 @@ AM_CONDITIONAL(HAS_NETWORKING,test "$HAS_NETWORKING" = "yes")
 RTEMS_BSPOPTS_SET([BSP_START_RESET_VECTOR],[*],[])
 RTEMS_BSPOPTS_HELP([BSP_START_RESET_VECTOR],[reset vector address for BSP start])
 
+# Is this a Raspberry Pi 2?
+RTEMS_BSPOPTS_SET([BSP_IS_RPI2],[raspberrypi2],[1])
+RTEMS_BSPOPTS_SET([BSP_IS_RPI2],[*],[0])
+RTEMS_BSPOPTS_HELP([BSP_IS_RPI2],[Set if the BSP variant is Raspberry Pi 2.])
+AM_CONDITIONAL(RTEMS_RPI2,[test "$BSP_IS_RPI2" = "1"])
+
+
+
 RTEMS_BSP_CLEANUP_OPTIONS(0, 0)
 RTEMS_BSP_LINKCMDS
 
diff --git a/c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.h b/c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.h
index 4cc7eec..e3c4d76 100644
--- a/c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.h
+++ b/c/src/lib/libbsp/arm/raspberrypi/include/raspberrypi.h
@@ -45,6 +45,20 @@
 /** @} */
 
 /**
+ * @name Peripheral Base Register Address 
+ *
+ * @{
+ */
+
+#if (BSP_IS_RPI2 == 1)
+   #define RPI_PERIPHERAL_BASE      0x3F000000
+#else
+   #define RPI_PERIPHERAL_BASE      0x20000000 
+#endif
+
+#define RPI_PERIPHERAL_SIZE         0x01000000
+
+/**
  * @name Internal ARM Timer Registers
  *
  * @{
@@ -52,7 +66,7 @@
 
 #define BCM2835_CLOCK_FREQ       250000000
 
-#define BCM2835_TIMER_BASE       (0x2000B400)
+#define BCM2835_TIMER_BASE       (RPI_PERIPHERAL_BASE + 0xB400)
 
 #define BCM2835_TIMER_LOD        (BCM2835_TIMER_BASE+0x00)
 #define BCM2835_TIMER_VAL        (BCM2835_TIMER_BASE+0x04)
@@ -74,7 +88,7 @@
  * @{
  */
 
-#define BCM2835_GPIO_REGS_BASE   (0x20200000)
+#define BCM2835_GPIO_REGS_BASE   (RPI_PERIPHERAL_BASE + 0x200000)
 
 #define BCM2835_GPIO_GPFSEL1     (BCM2835_GPIO_REGS_BASE+0x04)
 #define BCM2835_GPIO_GPSET0      (BCM2835_GPIO_REGS_BASE+0x1C)
@@ -90,7 +104,7 @@
  * @{
  */
 
-#define BCM2835_AUX_BASE         (0x20215000)
+#define BCM2835_AUX_BASE         (RPI_PERIPHERAL_BASE + 0x215000)
 
 #define AUX_ENABLES              (BCM2835_AUX_BASE+0x04)
 #define AUX_MU_IO_REG            (BCM2835_AUX_BASE+0x40)
@@ -115,7 +129,7 @@
  */
 
 
-#define BCM2835_UART0_BASE       (0x20201000)
+#define BCM2835_UART0_BASE       (RPI_PERIPHERAL_BASE + 0x201000)
 
 #define BCM2835_UART0_DR         (BCM2835_UART0_BASE+0x00)
 #define BCM2835_UART0_RSRECR     (BCM2835_UART0_BASE+0x04)
@@ -155,7 +169,7 @@
  * @{
  */
 
-#define BCM2835_BASE_INTC         (0x2000B200)
+#define BCM2835_BASE_INTC         (RPI_PERIPHERAL_BASE + 0xB200)
 
 #define BCM2835_IRQ_BASIC         (BCM2835_BASE_INTC + 0x00)
 #define BCM2835_IRQ_PENDING1      (BCM2835_BASE_INTC + 0x04)
@@ -182,7 +196,7 @@
  *       it's own RTOS. 1 and 3 are available for use in
  *       RTEMS.
  */
-#define BCM2835_GPU_TIMER_BASE    (0x20003000)
+#define BCM2835_GPU_TIMER_BASE    (RPI_PERIPHERAL_BASE + 0x3000)
 
 #define BCM2835_GPU_TIMER_CS      (BCM2835_TIMER_BASE+0x00)
 #define BCM2835_GPU_TIMER_CLO     (BCM2835_TIMER_BASE+0x04)
diff --git a/c/src/lib/libbsp/arm/raspberrypi/make/custom/raspberrypi.cfg b/c/src/lib/libbsp/arm/raspberrypi/make/custom/raspberrypi.cfg
index 48ac0f8..759b79d 100644
--- a/c/src/lib/libbsp/arm/raspberrypi/make/custom/raspberrypi.cfg
+++ b/c/src/lib/libbsp/arm/raspberrypi/make/custom/raspberrypi.cfg
@@ -1,20 +1,7 @@
 #
 #  Config file for RASPBERRYPI
 #
-
-include $(RTEMS_ROOT)/make/custom/default.cfg
-
-RTEMS_CPU = arm
+include $(RTEMS_ROOT)/make/custom/raspberrypi.inc
 
 CPU_CFLAGS = -mcpu=arm1176jzf-s
 
-CFLAGS_OPTIMIZE_V = -O2 -g
-
-# This defines the operations performed on the linked executable.
-# is currently required.
-define bsp-post-link
-    $(OBJCOPY) -O binary --strip-all \
-        $(basename $@)$(EXEEXT) $(basename $@)$(DOWNEXT)
-    $(SIZE) $(basename $@)$(EXEEXT)
-endef
-
diff --git a/c/src/lib/libbsp/arm/raspberrypi/make/custom/raspberrypi.inc b/c/src/lib/libbsp/arm/raspberrypi/make/custom/raspberrypi.inc
new file mode 100644
index 0000000..8a756cd
--- /dev/null
+++ b/c/src/lib/libbsp/arm/raspberrypi/make/custom/raspberrypi.inc
@@ -0,0 +1,18 @@
+#
+#  Config file for Raspberry Pi variants.
+#
+
+include $(RTEMS_ROOT)/make/custom/default.cfg
+
+RTEMS_CPU = arm
+
+CFLAGS_OPTIMIZE_V ?= -O2 -g
+
+# This defines the operations performed on the linked executable.
+# is currently required.
+define bsp-post-link
+    $(OBJCOPY) -O binary --strip-all \
+        $(basename $@)$(EXEEXT) $(basename $@)$(DOWNEXT)
+    $(SIZE) $(basename $@)$(EXEEXT)
+endef
+
diff --git a/c/src/lib/libbsp/arm/raspberrypi/make/custom/raspberrypi2.cfg b/c/src/lib/libbsp/arm/raspberrypi/make/custom/raspberrypi2.cfg
new file mode 100644
index 0000000..f480c68
--- /dev/null
+++ b/c/src/lib/libbsp/arm/raspberrypi/make/custom/raspberrypi2.cfg
@@ -0,0 +1,7 @@
+#
+#  Config file for RASPBERRYPI 2
+#
+include $(RTEMS_ROOT)/make/custom/raspberrypi.inc
+
+CPU_CFLAGS = -march=armv7-a -mtune=cortex-a7
+
diff --git a/c/src/lib/libbsp/arm/raspberrypi/startup/mm_config_table.c b/c/src/lib/libbsp/arm/raspberrypi/startup/mm_config_table.c
index 398ba98..36c6eed 100644
--- a/c/src/lib/libbsp/arm/raspberrypi/startup/mm_config_table.c
+++ b/c/src/lib/libbsp/arm/raspberrypi/startup/mm_config_table.c
@@ -20,6 +20,7 @@
  * http://www.rtems.org/license/LICENSE.
  */
 
+#include <bsp.h>
 #include <bsp/arm-cp15-start.h>
 
 const arm_cp15_start_section_config arm_cp15_start_mmu_config_table[] = {
@@ -64,8 +65,8 @@ const arm_cp15_start_section_config arm_cp15_start_mmu_config_table[] = {
     .end = (uint32_t) bsp_section_stack_end,
     .flags = ARMV7_MMU_DATA_READ_WRITE_CACHED
   }, {
-    .begin = 0x20000000,
-    .end = 0x21000000,
+    .begin = RPI_PERIPHERAL_BASE,
+    .end =   RPI_PERIPHERAL_BASE + RPI_PERIPHERAL_SIZE, 
     .flags = ARMV7_MMU_DEVICE
   }
 };
-- 
1.9.1



More information about the devel mailing list