diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-08-10 11:39:43 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-08-22 16:27:02 +0200 |
commit | 43cc2b4daf1eb6e6aff2db26c07e84910cfea0cb (patch) | |
tree | 54ecc230bd97eaea8e8e99272def6bb95181dc09 | |
parent | bsp/qoriq: Use LA to load an address (diff) | |
download | rtems-43cc2b4daf1eb6e6aff2db26c07e84910cfea0cb.tar.bz2 |
bsp/qoriq: Add basic 64-bit support
Update #3082.
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 |