[rtems commit] bsp/qoriq: Add basic 64-bit support

Sebastian Huber sebh at rtems.org
Tue Aug 22 14:54:54 UTC 2017


Module:    rtems
Branch:    master
Commit:    43cc2b4daf1eb6e6aff2db26c07e84910cfea0cb
Changeset: http://git.rtems.org/rtems/commit/?id=43cc2b4daf1eb6e6aff2db26c07e84910cfea0cb

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Thu Aug 10 11:39:43 2017 +0200

bsp/qoriq: Add basic 64-bit support

Update #3082.

---

 c/src/lib/libbsp/powerpc/qoriq/Makefile.am            |  3 ++-
 c/src/lib/libbsp/powerpc/qoriq/bsp_specs              |  2 +-
 c/src/lib/libbsp/powerpc/qoriq/configure.ac           |  3 ++-
 c/src/lib/libbsp/powerpc/qoriq/preinstall.am          |  4 ++++
 c/src/lib/libbsp/powerpc/qoriq/shmsupp/intercom.c     |  4 ++--
 c/src/lib/libbsp/powerpc/qoriq/start/start.S          | 19 ++++++++++++++++---
 .../powerpc/qoriq/startup/linkcmds.qoriq_e6500_32     |  2 +-
 .../powerpc/qoriq/startup/linkcmds.qoriq_e6500_64     |  1 +
 8 files changed, 29 insertions(+), 9 deletions(-)

diff --git a/c/src/lib/libbsp/powerpc/qoriq/Makefile.am b/c/src/lib/libbsp/powerpc/qoriq/Makefile.am
index 166c16b..4bb0453 100644
--- a/c/src/lib/libbsp/powerpc/qoriq/Makefile.am
+++ b/c/src/lib/libbsp/powerpc/qoriq/Makefile.am
@@ -47,7 +47,8 @@ dist_project_lib_DATA += startup/linkcmds \
 	startup/linkcmds.qoriq_core_0 \
 	startup/linkcmds.qoriq_core_1 \
 	startup/linkcmds.qoriq_e500 \
-	startup/linkcmds.qoriq_e6500_32
+	startup/linkcmds.qoriq_e6500_32 \
+	startup/linkcmds.qoriq_e6500_64
 
 noinst_LIBRARIES += libbsp.a
 libbsp_a_SOURCES =
diff --git a/c/src/lib/libbsp/powerpc/qoriq/bsp_specs b/c/src/lib/libbsp/powerpc/qoriq/bsp_specs
index 6fc7e3d..8b4545f 100644
--- a/c/src/lib/libbsp/powerpc/qoriq/bsp_specs
+++ b/c/src/lib/libbsp/powerpc/qoriq/bsp_specs
@@ -10,5 +10,5 @@
 %{!qrtems: %(old_endfile)} %{qrtems: crtend.o%s rtems_crtn.o%s ecrtn.o%s}
 
 *link:
-%{!qrtems: %(old_link)} %{qrtems: -dc -dp -u __vectors -N}
+%{!qrtems: %(old_link)} %{qrtems: -dc -dp -u __vectors -N %(link_os)}
 
diff --git a/c/src/lib/libbsp/powerpc/qoriq/configure.ac b/c/src/lib/libbsp/powerpc/qoriq/configure.ac
index baf8b0e..4c2fd32 100644
--- a/c/src/lib/libbsp/powerpc/qoriq/configure.ac
+++ b/c/src/lib/libbsp/powerpc/qoriq/configure.ac
@@ -116,7 +116,8 @@ RTEMS_BSPOPTS_SET([QORIQ_INITIAL_HID0],[qoriq_e6500*],[0x40000000])
 RTEMS_BSPOPTS_SET([QORIQ_INITIAL_HID0],[*],[])
 RTEMS_BSPOPTS_HELP([QORIQ_INITIAL_HID0],[initial HID0 value (EN_L2MMU_MHD is set by default on the T-series)])
 
-RTEMS_BSPOPTS_SET([QORIQ_INITIAL_MSR],[qoriq_e6500*],[0x02002200])
+RTEMS_BSPOPTS_SET([QORIQ_INITIAL_MSR],[qoriq_e6500_64*],[0x82002200])
+RTEMS_BSPOPTS_SET([QORIQ_INITIAL_MSR],[qoriq_e6500_32*],[0x02002200])
 RTEMS_BSPOPTS_SET([QORIQ_INITIAL_MSR],[*],[0x02000200])
 RTEMS_BSPOPTS_HELP([QORIQ_INITIAL_MSR],[initial MSR value])
 
diff --git a/c/src/lib/libbsp/powerpc/qoriq/preinstall.am b/c/src/lib/libbsp/powerpc/qoriq/preinstall.am
index 2cc68c7..6b6ac4b 100644
--- a/c/src/lib/libbsp/powerpc/qoriq/preinstall.am
+++ b/c/src/lib/libbsp/powerpc/qoriq/preinstall.am
@@ -141,3 +141,7 @@ $(PROJECT_LIB)/linkcmds.qoriq_e6500_32: startup/linkcmds.qoriq_e6500_32 $(PROJEC
 	$(INSTALL_DATA) $< $(PROJECT_LIB)/linkcmds.qoriq_e6500_32
 PREINSTALL_FILES += $(PROJECT_LIB)/linkcmds.qoriq_e6500_32
 
+$(PROJECT_LIB)/linkcmds.qoriq_e6500_64: startup/linkcmds.qoriq_e6500_64 $(PROJECT_LIB)/$(dirstamp)
+	$(INSTALL_DATA) $< $(PROJECT_LIB)/linkcmds.qoriq_e6500_64
+PREINSTALL_FILES += $(PROJECT_LIB)/linkcmds.qoriq_e6500_64
+
diff --git a/c/src/lib/libbsp/powerpc/qoriq/shmsupp/intercom.c b/c/src/lib/libbsp/powerpc/qoriq/shmsupp/intercom.c
index c3fa299..2fd656c 100644
--- a/c/src/lib/libbsp/powerpc/qoriq/shmsupp/intercom.c
+++ b/c/src/lib/libbsp/powerpc/qoriq/shmsupp/intercom.c
@@ -112,7 +112,7 @@ static void wait_for_event(rtems_event_set in)
 
 static void intercom_handler(void *arg)
 {
-	rtems_id task = (rtems_id) arg;
+	rtems_id task = (rtems_id) (uintptr_t) arg;
 	send_event(task, INTERCOM_EVENT_IPI);
 }
 
@@ -310,7 +310,7 @@ void qoriq_intercom_init(void)
 		"INTERCOM",
 		RTEMS_INTERRUPT_UNIQUE,
 		intercom_handler,
-		(void *) task
+		(void *) (uintptr_t) task
 	);
 	assert(sc == RTEMS_SUCCESSFUL);
 
diff --git a/c/src/lib/libbsp/powerpc/qoriq/start/start.S b/c/src/lib/libbsp/powerpc/qoriq/start/start.S
index 0a2af7a..85bcb3a 100644
--- a/c/src/lib/libbsp/powerpc/qoriq/start/start.S
+++ b/c/src/lib/libbsp/powerpc/qoriq/start/start.S
@@ -7,7 +7,7 @@
  */
 
 /*
- * Copyright (c) 2010, 2016 embedded brains GmbH.  All rights reserved.
+ * Copyright (c) 2010, 2017 embedded brains GmbH.  All rights reserved.
  *
  *  embedded brains GmbH
  *  Dornierstr. 4
@@ -115,8 +115,10 @@ _start:
 	LA	r4, bsp_section_bss_size
 	bl	bsp_start_zero
 
+#ifndef __powerpc64__
 	/* Set up EABI and SYSV environment */
 	bl	__eabi
+#endif
 
 	/* Clear command line */
 	li	r3, 0
@@ -124,7 +126,7 @@ _start:
 	bl	boot_card
 
 .Lcopy:
-	cmpw	r3, r4
+	PPC_REG_CMP	r3, r4
 	beqlr
 	b	memcpy
 
@@ -134,6 +136,13 @@ _start:
 	 * the boot loader.
 	 */
 
+#ifdef __powerpc64__
+	mfmsr	r0
+	oris	r0, r0, MSR_CM >> 16
+	mtmsr	r0
+	isync
+#endif
+
 	/* Disable decrementer */
 	mfspr	r0, BOOKE_TCR
 	LWI	r4, BOOKE_TCR_DIE
@@ -159,11 +168,15 @@ _start:
 	mtspr	HID0, r0
 #endif
 
+#ifdef __powerpc64__
+	LA32	r2, .TOC.
+#else
 	/* Invalidate TLS anchor */
 	li	r2, 0
 
 	/* Set small-data anchor */
 	LA	r13, _SDA_BASE_
+#endif
 
 	SET_SELF_CPU_CONTROL	r4, r5
 
@@ -282,7 +295,7 @@ _start_thread:
 
 	/* Initialize start stack */
 	GET_SELF_CPU_CONTROL	r3
-	lwz	r3, PER_CPU_INTERRUPT_STACK_HIGH(r3)
+	PPC_REG_LOAD	r3, PER_CPU_INTERRUPT_STACK_HIGH(r3)
 	subi	r1, r3, PPC_MINIMUM_STACK_FRAME_SIZE
 	clrrwi	r1, r1, PPC_STACK_ALIGN_POWER
 	li	r0, 0
diff --git a/c/src/lib/libbsp/powerpc/qoriq/startup/linkcmds.qoriq_e6500_32 b/c/src/lib/libbsp/powerpc/qoriq/startup/linkcmds.qoriq_e6500_32
index 4117e97..09bfcdc 100644
--- a/c/src/lib/libbsp/powerpc/qoriq/startup/linkcmds.qoriq_e6500_32
+++ b/c/src/lib/libbsp/powerpc/qoriq/startup/linkcmds.qoriq_e6500_32
@@ -1,7 +1,7 @@
 /**
  * @file
  *
- * Memory map for T2080RDB.
+ * Memory map for e6500 core based QorIQ chips, e.g. T2080, T4240.
  */
 
 MEMORY {
diff --git a/c/src/lib/libbsp/powerpc/qoriq/startup/linkcmds.qoriq_e6500_64 b/c/src/lib/libbsp/powerpc/qoriq/startup/linkcmds.qoriq_e6500_64
new file mode 100644
index 0000000..a496975
--- /dev/null
+++ b/c/src/lib/libbsp/powerpc/qoriq/startup/linkcmds.qoriq_e6500_64
@@ -0,0 +1 @@
+INCLUDE linkcmds.qoriq_e6500_32



More information about the vc mailing list