source: rtems/bsps/powerpc/mpc55xxevb/start/start-flash.S @ 9964895

5
Last change on this file since 9964895 was 9964895, checked in by Sebastian Huber <sebastian.huber@…>, on 04/20/18 at 08:35:35

bsps: Move startup files to bsps

Adjust build support files to new directory layout.

This patch is a part of the BSP source reorganization.

Update #3285.

  • Property mode set to 100644
File size: 3.6 KB
Line 
1/**
2 * @file
3 *
4 * @ingroup mpc55xx_asm
5 *
6 * @brief Flash configuration.
7 */
8
9/*
10 * Copyright (c) 2008-2015 embedded brains GmbH.  All rights reserved.
11 *
12 *  embedded brains GmbH
13 *  Dornierstr. 4
14 *  82178 Puchheim
15 *  Germany
16 *  <rtems@embedded-brains.de>
17 *
18 * The license and distribution terms for this file may be
19 * found in the file LICENSE in this distribution or at
20 * http://www.rtems.org/license/LICENSE.
21 */
22
23#include <libcpu/powerpc-utility.h>
24#include <mpc55xx/reg-defs.h>
25
26        .section        ".bsp_start_text", "ax"
27
28#if MPC55XX_CHIP_FAMILY == 551
29
30/* MPC5510 Microcontroller Family Data Sheet, Rev. 3, Table 16, Num 7 */
31.equ FLASH_CLOCK_0, 25000000
32.equ FLASH_CLOCK_1, 50000000
33.equ FLASH_CLOCK_2, 80000000
34.equ FLASH_CLOCK_3, FLASH_CLOCK_2
35.equ FLASH_SETTINGS_0, FLASH_BUICR_CPU_PREFTCH | FLASH_BUICR_APC_0 | FLASH_BUICR_RWSC_0 | FLASH_BUICR_WWSC_1 | FLASH_BUICR_DPFEN_1 | FLASH_BUICR_IPFEN_1 | FLASH_BUICR_PFLIM_2 | FLASH_BUICR_BFEN
36.equ FLASH_SETTINGS_1, FLASH_BUICR_CPU_PREFTCH | FLASH_BUICR_APC_1 | FLASH_BUICR_RWSC_1 | FLASH_BUICR_WWSC_1 | FLASH_BUICR_DPFEN_1 | FLASH_BUICR_IPFEN_1 | FLASH_BUICR_PFLIM_2 | FLASH_BUICR_BFEN
37.equ FLASH_SETTINGS_2, FLASH_BUICR_CPU_PREFTCH | FLASH_BUICR_APC_2 | FLASH_BUICR_RWSC_2 | FLASH_BUICR_WWSC_1 | FLASH_BUICR_DPFEN_1 | FLASH_BUICR_IPFEN_1 | FLASH_BUICR_PFLIM_2 | FLASH_BUICR_BFEN
38.equ FLASH_SETTINGS_3, FLASH_SETTINGS_2
39
40#else
41
42/* Optimized flash configurations (Table 13-15 [MPC5567 Microcontroller Reference Manual]) */
43.equ FLASH_CLOCK_0, 82000000
44.equ FLASH_CLOCK_1, 102000000
45.equ FLASH_CLOCK_2, 132000000
46.equ FLASH_CLOCK_3, 264000000
47.equ FLASH_SETTINGS_0, FLASH_BUICR_CPU_PREFTCH | FLASH_BUICR_APC_1 | FLASH_BUICR_RWSC_1 | FLASH_BUICR_WWSC_1 | FLASH_BUICR_DPFEN_3 | FLASH_BUICR_IPFEN_3 | FLASH_BUICR_PFLIM_6 | FLASH_BUICR_BFEN
48.equ FLASH_SETTINGS_1, FLASH_BUICR_CPU_PREFTCH | FLASH_BUICR_APC_1 | FLASH_BUICR_RWSC_2 | FLASH_BUICR_WWSC_1 | FLASH_BUICR_DPFEN_3 | FLASH_BUICR_IPFEN_3 | FLASH_BUICR_PFLIM_6 | FLASH_BUICR_BFEN
49.equ FLASH_SETTINGS_2, FLASH_BUICR_CPU_PREFTCH | FLASH_BUICR_APC_2 | FLASH_BUICR_RWSC_3 | FLASH_BUICR_WWSC_1 | FLASH_BUICR_DPFEN_3 | FLASH_BUICR_IPFEN_3 | FLASH_BUICR_PFLIM_6 | FLASH_BUICR_BFEN
50.equ FLASH_SETTINGS_3, 0x01716B15
51
52#endif
53
54/**
55 * @fn void mpc55xx_start_flash()
56 * @brief Optimized flash configuration.
57 * @warning Code will be copied and executed on the stack.
58 */
59GLOBAL_FUNCTION mpc55xx_start_flash
60#if !defined(MPC55XX_NEEDS_LOW_LEVEL_INIT) \
61  || MPC55XX_CHIP_FAMILY == 564 \
62  || MPC55XX_CHIP_FAMILY == 566
63        blr
64#else
65        .equ    stack_size, 20
66        .equ    lr_offset, 28
67
68        /* Reserve stack frame */
69        stwu    r1, -stack_size(r1)
70        mflr    r0
71        stw     r0, lr_offset(r1)
72
73        /* Flash settings dependent on system clock */
74        bl      mpc55xx_get_system_clock
75        LWI     r4, FLASH_CLOCK_0
76        cmpw    r3, r4
77        ble     clock_0
78        LWI     r4, FLASH_CLOCK_1
79        cmpw    r3, r4
80        ble     clock_1
81        LWI     r4, FLASH_CLOCK_2
82        cmpw    r3, r4
83        ble     clock_2
84        LWI     r4, FLASH_CLOCK_3
85        cmpw    r3, r4
86        ble     clock_3
87
88        /*
89         * In case we don't have the right flash settings for the system clock
90         * value, then rely on the BAM settings.
91         */
92        blr
93
94clock_0:
95        LWI     r3, FLASH_SETTINGS_0
96        b       settings_done
97clock_1:
98        LWI     r3, FLASH_SETTINGS_1
99        b       settings_done
100clock_2:
101        LWI     r3, FLASH_SETTINGS_2
102        b settings_done
103clock_3:
104        LWI     r3, FLASH_SETTINGS_3
105        b       settings_done
106settings_done:
107
108        /* Copy store code on the stack */
109        LA      r4, store_start
110        lwz     r6, 0(r4)
111        lwz     r7, 4(r4)
112        lwz     r8, 8(r4)
113        stw     r6, 8(r1)
114        stw     r7, 12(r1)
115        stw     r8, 16(r1)
116
117        /* Execute store code */
118        LA      r4, FLASH_BIUCR
119        addi    r5, r1, 8
120        mtctr   r5
121        bctrl
122
123        /* Return */
124        lwz     r0, lr_offset(r1)
125        addi    r1, r1, stack_size
126        mtlr    r0
127        blr
128
129/*
130 * Store flash settings
131 */
132
133store_start:
134
135        stw     r3, 0(r4)
136        isync
137        blr
138
139#endif
Note: See TracBrowser for help on using the repository browser.