summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2017-08-10 11:39:43 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2017-08-22 16:27:02 +0200
commit43cc2b4daf1eb6e6aff2db26c07e84910cfea0cb (patch)
tree54ecc230bd97eaea8e8e99272def6bb95181dc09
parentbsp/qoriq: Use LA to load an address (diff)
downloadrtems-43cc2b4daf1eb6e6aff2db26c07e84910cfea0cb.tar.bz2
bsp/qoriq: Add basic 64-bit support
Update #3082.
-rw-r--r--c/src/lib/libbsp/powerpc/qoriq/Makefile.am3
-rw-r--r--c/src/lib/libbsp/powerpc/qoriq/bsp_specs2
-rw-r--r--c/src/lib/libbsp/powerpc/qoriq/configure.ac3
-rw-r--r--c/src/lib/libbsp/powerpc/qoriq/preinstall.am4
-rw-r--r--c/src/lib/libbsp/powerpc/qoriq/shmsupp/intercom.c4
-rw-r--r--c/src/lib/libbsp/powerpc/qoriq/start/start.S19
-rw-r--r--c/src/lib/libbsp/powerpc/qoriq/startup/linkcmds.qoriq_e6500_322
-rw-r--r--c/src/lib/libbsp/powerpc/qoriq/startup/linkcmds.qoriq_e6500_641
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 166c16bd76..4bb0453ad8 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 6fc7e3dc67..8b4545f621 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 baf8b0ec43..4c2fd3242f 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 2cc68c7747..6b6ac4bf5c 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 c3fa299d06..2fd656c0d1 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 0a2af7a200..85bcb3afcb 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 4117e9763f..09bfcdc20d 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 0000000000..a4969756ec
--- /dev/null
+++ b/c/src/lib/libbsp/powerpc/qoriq/startup/linkcmds.qoriq_e6500_64
@@ -0,0 +1 @@
+INCLUDE linkcmds.qoriq_e6500_32