/* * Copyright (c) 2012 embedded brains GmbH. All rights reserved. * * embedded brains GmbH * Obere Lagerstr. 30 * 82178 Puchheim * Germany * * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at * http://www.rtems.com/license/LICENSE. */ #include #include #include .globl _start .globl bsp_exc_vector_base .section ".bsp_start_text", "ax" _start: /* Enable time base */ li r0, 0x4000 mtspr HID0, r0 /* Initialize start stack */ LWI r1, start_stack_end subi r1, r1, 16 li r0, 0 stw r0, 0(r1) /* Copy fast text */ LWI r3, bsp_section_fast_text_begin LWI r4, bsp_section_fast_text_load_begin LWI r5, bsp_section_fast_text_size bl copy /* Copy read-only data */ LWI r3, bsp_section_rodata_begin LWI r4, bsp_section_rodata_load_begin LWI r5, bsp_section_rodata_size bl copy /* Copy fast data */ LWI r3, bsp_section_fast_data_begin LWI r4, bsp_section_fast_data_load_begin LWI r5, bsp_section_fast_data_size bl copy /* Copy data */ LWI r3, bsp_section_data_begin LWI r4, bsp_section_data_load_begin LWI r5, bsp_section_data_size bl copy /* Clear SBSS */ LWI r3, bsp_section_sbss_begin LWI r4, bsp_section_sbss_size bl bsp_start_zero /* Clear BSS */ LWI r3, bsp_section_bss_begin LWI r4, bsp_section_bss_size bl bsp_start_zero /* Set up EABI and SYSV environment */ bl __eabi /* Clear command line */ li r3, 0 bl boot_card twiddle: b twiddle copy: cmpw r3, r4 beqlr b memcpy /* Exception vector prologues area */ .section ".bsp_start_text", "ax" .align 4 bsp_exc_vector_base: stw r1, ppc_exc_lock_crit@sdarel(r13) stw r4, ppc_exc_vector_register_crit@sdarel(r13) li r4, -32767 b ppc_exc_wrap_bookE_crit stwu r1, -EXC_GENERIC_SIZE(r1) stw r4, GPR4_OFFSET(r1) li r4, 2 b ppc_exc_wrap_nopush_e500_mchk stwu r1, -EXC_GENERIC_SIZE(r1) stw r4, GPR4_OFFSET(r1) li r4, 3 b ppc_exc_wrap_nopush_std stwu r1, -EXC_GENERIC_SIZE(r1) stw r4, GPR4_OFFSET(r1) li r4, 4 b ppc_exc_wrap_nopush_std stwu r1, -PPC_EXC_MINIMAL_FRAME_SIZE(r1) stw r4, PPC_EXC_VECTOR_PROLOGUE_OFFSET(r1) li r4, -32763 b ppc_exc_wrap_async_normal stwu r1, -EXC_GENERIC_SIZE(r1) stw r4, GPR4_OFFSET(r1) li r4, 6 b ppc_exc_wrap_nopush_std stwu r1, -EXC_GENERIC_SIZE(r1) stw r4, GPR4_OFFSET(r1) li r4, 7 b ppc_exc_wrap_nopush_std stwu r1, -EXC_GENERIC_SIZE(r1) stw r4, GPR4_OFFSET(r1) li r4, 8 b ppc_exc_wrap_nopush_std stwu r1, -EXC_GENERIC_SIZE(r1) stw r4, GPR4_OFFSET(r1) li r4, 12 b ppc_exc_wrap_nopush_std stwu r1, -EXC_GENERIC_SIZE(r1) stw r4, GPR4_OFFSET(r1) li r4, 24 b ppc_exc_wrap_nopush_std stwu r1, -PPC_EXC_MINIMAL_FRAME_SIZE(r1) stw r4, PPC_EXC_VECTOR_PROLOGUE_OFFSET(r1) li r4, -32752 b ppc_exc_wrap_async_normal stwu r1, -PPC_EXC_MINIMAL_FRAME_SIZE(r1) stw r4, PPC_EXC_VECTOR_PROLOGUE_OFFSET(r1) li r4, -32749 b ppc_exc_wrap_async_normal stw r1, ppc_exc_lock_crit@sdarel(r13) stw r4, ppc_exc_vector_register_crit@sdarel(r13) li r4, -32748 b ppc_exc_wrap_bookE_crit stwu r1, -EXC_GENERIC_SIZE(r1) stw r4, GPR4_OFFSET(r1) li r4, 18 b ppc_exc_wrap_nopush_std stwu r1, -EXC_GENERIC_SIZE(r1) stw r4, GPR4_OFFSET(r1) li r4, 17 b ppc_exc_wrap_nopush_std stwu r1, -EXC_GENERIC_SIZE(r1) stw r4, GPR4_OFFSET(r1) li r4, 13 b ppc_exc_wrap_nopush_bookE_crit stwu r1, -EXC_GENERIC_SIZE(r1) stw r4, GPR4_OFFSET(r1) li r4, 10 b ppc_exc_wrap_nopush_std stwu r1, -EXC_GENERIC_SIZE(r1) stw r4, GPR4_OFFSET(r1) li r4, 25 b ppc_exc_wrap_nopush_std stwu r1, -EXC_GENERIC_SIZE(r1) stw r4, GPR4_OFFSET(r1) li r4, 26 b ppc_exc_wrap_nopush_std stwu r1, -EXC_GENERIC_SIZE(r1) stw r4, GPR4_OFFSET(r1) li r4, 15 b ppc_exc_wrap_nopush_std /* Start stack area */ .section ".bsp_rwextra", "aw", @nobits .align 4 .space 4096 start_stack_end: