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