1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
/*
* start.S : RTEMS entry point
*
* Copyright (C) 1999 Eric Valette. valette@crf.canon.fr
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
* http://www.rtems.org/license/LICENSE.
*
* Modified for mvme3100 by T. Straumann, 2007.
*
*/
#include <rtems/asm.h>
#include <rtems/score/cpu.h>
#include <rtems/powerpc/powerpc.h>
#include <bspopts.h>
#define SYNC \
sync; \
isync
#define KERNELBASE 0x0
/* cannot include <bsp.h> from assembly :-( */
#ifndef BSP_8540_CCSR_BASE
#define BSP_8540_CCSR_BASE 0xe1000000
#endif
#define ERR_DISABLE_REG (BSP_8540_CCSR_BASE + 0x2e44)
.text
.globl __rtems_entry_point
.type __rtems_entry_point,@function
__rtems_entry_point:
mr r31,r3
mr r30,r4
mr r29,r5
mr r28,r6
mr r27,r7
/* disable checking for memory-select errors; motload has all TLBs
* mapping a possible larger area as memory (not-guarded, caching-enabled)
* than actual physical memory is available.
* In case of speculative loads this may cause 'memory-select' errors
* which seem to raise 'core_fault_in' (found no description in
* the manual but I experienced this problem).
* Such errors (if HID1[RFXE] is clear) may *stall* execution
* leading to mysterious 'hangs'.
* Note: enabling HID1[RFXE] at this point makes no sense since
* exceptions are not configured yet. Therefore we disable
* memory-select errors.
* Eventually (bspstart.c) we want to delete TLB entries for
* which no physical memory is present.
*/
lis r3, ERR_DISABLE_REG@ha
lwz r4, ERR_DISABLE_REG@l(r3)
/* disable memory-select errors */
ori r4, r4, 1
stw r4, ERR_DISABLE_REG@l(r3)
/* Use MotLoad's TLB setup for now; caches are on already */
bl __eabi /* setup EABI and SYSV environment */
bl zero_bss
/*
* restore original args
*/
mr r3,r31
mr r4,r30
mr r5,r29
mr r6,r28
mr r7,r27
bl save_boot_params
addis r9,r0, (__stack-PPC_MINIMUM_STACK_FRAME_SIZE)@ha
addi r9,r9, (__stack-PPC_MINIMUM_STACK_FRAME_SIZE)@l
/* align down to 16-bytes */
li r5, (CPU_STACK_ALIGNMENT - 1)
andc r1, r9, r5
/* NULL ptr to back chain */
li r0, 0
stw r0, 0(r1)
/*
* We are now in a environment that is totally independent from
* bootloader setup.
*/
/* pass result of 'save_boot_params' to 'boot_card' in R3 */
bl boot_card
/* point of no return: reset board here ? */
|