summaryrefslogtreecommitdiffstats
path: root/bsps/m68k/genmcf548x/start/start.S
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2018-04-20 10:19:28 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2018-04-20 13:08:36 +0200
commitfbcd7c8fa65eb695e96a62ea1c1ac7a024fa9dfc (patch)
treea17e285cf22cd49cd42e8b3ad562febc3987d566 /bsps/m68k/genmcf548x/start/start.S
parentbsps: Move console drivers to bsps (diff)
downloadrtems-fbcd7c8fa65eb695e96a62ea1c1ac7a024fa9dfc.tar.bz2
bsps: Move start files to bsps
This patch is a part of the BSP source reorganization. Update #3285.
Diffstat (limited to 'bsps/m68k/genmcf548x/start/start.S')
-rw-r--r--bsps/m68k/genmcf548x/start/start.S432
1 files changed, 432 insertions, 0 deletions
diff --git a/bsps/m68k/genmcf548x/start/start.S b/bsps/m68k/genmcf548x/start/start.S
new file mode 100644
index 0000000000..d4d1d9b273
--- /dev/null
+++ b/bsps/m68k/genmcf548x/start/start.S
@@ -0,0 +1,432 @@
+/*===============================================================*\
+| Project: RTEMS generic mcf548x BSP |
++-----------------------------------------------------------------+
+| File: start.S |
++-----------------------------------------------------------------+
+| The file contains the assembly part of MCF548x init code |
++-----------------------------------------------------------------+
+| Copyright (c) 2007 |
+| Embedded Brains GmbH |
+| Obere Lagerstr. 30 |
+| D-82178 Puchheim |
+| Germany |
+| rtems@embedded-brains.de |
++-----------------------------------------------------------------+
+| |
+| Parts of the code has been derived from the "dBUG source code" |
+| package Freescale is providing for M548X EVBs. The usage of |
+| the modified or unmodified code and it's integration into the |
+| generic mcf548x BSP has been done according to the Freescale |
+| license terms. |
+| |
+| The Freescale license terms can be reviewed in the file |
+| |
+| Freescale_license.txt |
+| |
++-----------------------------------------------------------------+
+| |
+| The generic mcf548x BSP has been developed on the basic |
+| structures and modules of the av5282 BSP. |
+| |
++-----------------------------------------------------------------+
+| |
+| 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. |
+| |
++-----------------------------------------------------------------+
+| |
+| date history ID |
+| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
+| 12.11.07 1.0 ras |
+| |
+\*===============================================================*/
+
+/*===============================================================*\
+| Includes |
+\*===============================================================*/
+#include <rtems/asm.h>
+#include <bsp/linker-symbols.h>
+
+/*===============================================================*\
+| External references |
+\*===============================================================*/
+.extern __MBAR
+.extern _CoreSramBase0
+.extern _CoreSramBase1
+.extern _CoreSramSize1
+.extern mcf548x_init
+.extern boot_card
+
+/*===============================================================*\
+| Global symbols |
+\*===============================================================*/
+
+.global interrupt_vector_table
+.global spurious_int_count
+.global start
+
+
+/*===============================================================*\
+| Exception Table |
+\*===============================================================*/
+
+.section ".vectors","ax" /* begin of vectors section */
+PUBLIC (InterruptVectorTable)
+SYM(InterruptVectorTable):
+INITSP: .long bsp_initstack_end /* Initial SP */
+INITPC: .long start /* Initial PC */
+vector002: .long asm_default_interrupt /* Access Error */
+vector003: .long asm_default_interrupt /* Address Error */
+vector004: .long asm_default_interrupt /* Illegal Instruction */
+vector005: .long asm_default_interrupt /* Reserved */
+vector006: .long asm_default_interrupt /* Reserved */
+vector007: .long asm_default_interrupt /* Reserved */
+vector008: .long asm_default_interrupt /* Privilege Violation */
+vector009: .long asm_default_interrupt /* Trace */
+vector010: .long asm_default_interrupt /* Unimplemented A-Line */
+vector011: .long asm_default_interrupt /* Unimplemented F-Line */
+vector012: .long asm_default_interrupt /* Debug Interrupt */
+vector013: .long asm_default_interrupt /* Reserved */
+vector014: .long asm_default_interrupt /* Format Error */
+vector015: .long asm_default_interrupt /* Unitialized Int. */
+vector016: .long asm_default_interrupt /* Reserved */
+vector017: .long asm_default_interrupt /* Reserved */
+vector018: .long asm_default_interrupt /* Reserved */
+vector019: .long asm_default_interrupt /* Reserved */
+vector020: .long asm_default_interrupt /* Reserved */
+vector021: .long asm_default_interrupt /* Reserved */
+vector022: .long asm_default_interrupt /* Reserved */
+vector023: .long asm_default_interrupt /* Reserved */
+vector024: .long asm_spurious_interrupt /* Spurious Interrupt */
+vector025: .long asm_default_interrupt /* Autovector Level 1 */
+vector026: .long asm_default_interrupt /* Autovector Level 2 */
+vector027: .long asm_default_interrupt /* Autovector Level 3 */
+vector028: .long asm_default_interrupt /* Autovector Level 4 */
+vector029: .long asm_default_interrupt /* Autovector Level 5 */
+vector030: .long asm_default_interrupt /* Autovector Level 6 */
+vector031: .long asm_default_interrupt /* Autovector Level 7 */
+vector032: .long asm_default_interrupt /* TRAP #0 */
+vector033: .long asm_default_interrupt /* TRAP #1 */
+vector034: .long asm_default_interrupt /* TRAP #2 */
+vector035: .long asm_default_interrupt /* TRAP #3 */
+vector036: .long asm_default_interrupt /* TRAP #4 */
+vector037: .long asm_default_interrupt /* TRAP #5 */
+vector038: .long asm_default_interrupt /* TRAP #6 */
+vector039: .long asm_default_interrupt /* TRAP #7 */
+vector040: .long asm_default_interrupt /* TRAP #8 */
+vector041: .long asm_default_interrupt /* TRAP #9 */
+vector042: .long asm_default_interrupt /* TRAP #10 */
+vector043: .long asm_default_interrupt /* TRAP #11 */
+vector044: .long asm_default_interrupt /* TRAP #12 */
+vector045: .long asm_default_interrupt /* TRAP #13 */
+vector046: .long asm_default_interrupt /* TRAP #14 */
+vector047: .long asm_default_interrupt /* TRAP #15 */
+vector048: .long asm_default_interrupt /* Reserved */
+vector049: .long asm_default_interrupt /* Reserved */
+vector050: .long asm_default_interrupt /* Reserved */
+vector051: .long asm_default_interrupt /* Reserved */
+vector052: .long asm_default_interrupt /* Reserved */
+vector053: .long asm_default_interrupt /* Reserved */
+vector054: .long asm_default_interrupt /* Reserved */
+vector055: .long asm_default_interrupt /* Reserved */
+vector056: .long asm_default_interrupt /* Reserved */
+vector057: .long asm_default_interrupt /* Reserved */
+vector058: .long asm_default_interrupt /* Reserved */
+vector059: .long asm_default_interrupt /* Reserved */
+vector060: .long asm_default_interrupt /* Reserved */
+vector061: .long asm_default_interrupt /* Reserved */
+vector062: .long asm_default_interrupt /* Reserved */
+vector063: .long asm_default_interrupt /* Reserved */
+vector064: .long asm_default_interrupt
+vector065: .long asm_default_interrupt
+vector066: .long asm_default_interrupt
+vector067: .long asm_default_interrupt
+vector068: .long asm_default_interrupt
+vector069: .long asm_default_interrupt
+vector070: .long asm_default_interrupt
+vector071: .long asm_default_interrupt
+vector072: .long asm_default_interrupt
+vector073: .long asm_default_interrupt
+vector074: .long asm_default_interrupt
+vector075: .long asm_default_interrupt
+vector076: .long asm_default_interrupt
+vector077: .long asm_default_interrupt
+vector078: .long asm_default_interrupt
+vector079: .long asm_default_interrupt
+vector080: .long asm_default_interrupt
+vector081: .long asm_default_interrupt
+vector082: .long asm_default_interrupt
+vector083: .long asm_default_interrupt
+vector084: .long asm_default_interrupt
+vector085: .long asm_default_interrupt
+vector086: .long asm_default_interrupt
+vector087: .long asm_default_interrupt
+vector088: .long asm_default_interrupt
+vector089: .long asm_default_interrupt
+vector090: .long asm_default_interrupt
+vector091: .long asm_default_interrupt
+vector092: .long asm_default_interrupt
+vector093: .long asm_default_interrupt
+vector094: .long asm_default_interrupt
+vector095: .long asm_default_interrupt
+vector096: .long asm_default_interrupt
+vector097: .long asm_default_interrupt
+vector098: .long asm_default_interrupt
+vector099: .long asm_default_interrupt
+vector100: .long asm_default_interrupt
+vector101: .long asm_default_interrupt
+vector102: .long asm_default_interrupt
+vector103: .long asm_default_interrupt
+vector104: .long asm_default_interrupt
+vector105: .long asm_default_interrupt
+vector106: .long asm_default_interrupt
+vector107: .long asm_default_interrupt
+vector108: .long asm_default_interrupt
+vector109: .long asm_default_interrupt
+vector110: .long asm_default_interrupt
+vector111: .long asm_default_interrupt
+vector112: .long asm_default_interrupt
+vector113: .long asm_default_interrupt
+vector114: .long asm_default_interrupt
+vector115: .long asm_default_interrupt
+vector116: .long asm_default_interrupt
+vector117: .long asm_default_interrupt
+vector118: .long asm_default_interrupt
+vector119: .long asm_default_interrupt
+vector120: .long asm_default_interrupt
+vector121: .long asm_default_interrupt
+vector122: .long asm_default_interrupt
+vector123: .long asm_default_interrupt
+vector124: .long asm_default_interrupt
+vector125: .long asm_default_interrupt
+vector126: .long asm_default_interrupt
+vector127: .long asm_default_interrupt
+vector128: .long asm_default_interrupt
+vector129: .long asm_default_interrupt
+vector130: .long asm_default_interrupt
+vector131: .long asm_default_interrupt
+vector132: .long asm_default_interrupt
+vector133: .long asm_default_interrupt
+vector134: .long asm_default_interrupt
+vector135: .long asm_default_interrupt
+vector136: .long asm_default_interrupt
+vector137: .long asm_default_interrupt
+vector138: .long asm_default_interrupt
+vector139: .long asm_default_interrupt
+vector140: .long asm_default_interrupt
+vector141: .long asm_default_interrupt
+vector142: .long asm_default_interrupt
+vector143: .long asm_default_interrupt
+vector144: .long asm_default_interrupt
+vector145: .long asm_default_interrupt
+vector146: .long asm_default_interrupt
+vector147: .long asm_default_interrupt
+vector148: .long asm_default_interrupt
+vector149: .long asm_default_interrupt
+vector150: .long asm_default_interrupt
+vector151: .long asm_default_interrupt
+vector152: .long asm_default_interrupt
+vector153: .long asm_default_interrupt
+vector154: .long asm_default_interrupt
+vector155: .long asm_default_interrupt
+vector156: .long asm_default_interrupt
+vector157: .long asm_default_interrupt
+vector158: .long asm_default_interrupt
+vector159: .long asm_default_interrupt
+vector160: .long asm_default_interrupt
+vector161: .long asm_default_interrupt
+vector162: .long asm_default_interrupt
+vector163: .long asm_default_interrupt
+vector164: .long asm_default_interrupt
+vector165: .long asm_default_interrupt
+vector166: .long asm_default_interrupt
+vector167: .long asm_default_interrupt
+vector168: .long asm_default_interrupt
+vector169: .long asm_default_interrupt
+vector170: .long asm_default_interrupt
+vector171: .long asm_default_interrupt
+vector172: .long asm_default_interrupt
+vector173: .long asm_default_interrupt
+vector174: .long asm_default_interrupt
+vector175: .long asm_default_interrupt
+vector176: .long asm_default_interrupt
+vector177: .long asm_default_interrupt
+vector178: .long asm_default_interrupt
+vector179: .long asm_default_interrupt
+vector180: .long asm_default_interrupt
+vector181: .long asm_default_interrupt
+vector182: .long asm_default_interrupt
+vector183: .long asm_default_interrupt
+vector184: .long asm_default_interrupt
+vector185: .long asm_default_interrupt
+vector186: .long asm_default_interrupt
+vector187: .long asm_default_interrupt
+vector188: .long asm_default_interrupt
+vector189: .long asm_default_interrupt
+vector190: .long asm_default_interrupt
+vector191: .long asm_default_interrupt
+vector192: .long asm_default_interrupt
+vector193: .long asm_default_interrupt
+vector194: .long asm_default_interrupt
+vector195: .long asm_default_interrupt
+vector196: .long asm_default_interrupt
+vector197: .long asm_default_interrupt
+vector198: .long asm_default_interrupt
+vector199: .long asm_default_interrupt
+vector200: .long asm_default_interrupt
+vector201: .long asm_default_interrupt
+vector202: .long asm_default_interrupt
+vector203: .long asm_default_interrupt
+vector204: .long asm_default_interrupt
+vector205: .long asm_default_interrupt
+vector206: .long asm_default_interrupt
+vector207: .long asm_default_interrupt
+vector208: .long asm_default_interrupt
+vector209: .long asm_default_interrupt
+vector210: .long asm_default_interrupt
+vector211: .long asm_default_interrupt
+vector212: .long asm_default_interrupt
+vector213: .long asm_default_interrupt
+vector214: .long asm_default_interrupt
+vector215: .long asm_default_interrupt
+vector216: .long asm_default_interrupt
+vector217: .long asm_default_interrupt
+vector218: .long asm_default_interrupt
+vector219: .long asm_default_interrupt
+vector220: .long asm_default_interrupt
+vector221: .long asm_default_interrupt
+vector222: .long asm_default_interrupt
+vector223: .long asm_default_interrupt
+vector224: .long asm_default_interrupt
+vector225: .long asm_default_interrupt
+vector226: .long asm_default_interrupt
+vector227: .long asm_default_interrupt
+vector228: .long asm_default_interrupt
+vector229: .long asm_default_interrupt
+vector230: .long asm_default_interrupt
+vector231: .long asm_default_interrupt
+vector232: .long asm_default_interrupt
+vector233: .long asm_default_interrupt
+vector234: .long asm_default_interrupt
+vector235: .long asm_default_interrupt
+vector236: .long asm_default_interrupt
+vector237: .long asm_default_interrupt
+vector238: .long asm_default_interrupt
+vector239: .long asm_default_interrupt
+vector240: .long asm_default_interrupt
+vector241: .long asm_default_interrupt
+vector242: .long asm_default_interrupt
+vector243: .long asm_default_interrupt
+vector244: .long asm_default_interrupt
+vector245: .long asm_default_interrupt
+vector246: .long asm_default_interrupt
+vector247: .long asm_default_interrupt
+vector248: .long asm_default_interrupt
+vector249: .long asm_default_interrupt
+vector250: .long asm_default_interrupt
+vector251: .long asm_default_interrupt
+vector252: .long asm_default_interrupt
+vector253: .long asm_default_interrupt
+vector254: .long asm_default_interrupt
+vector255: .long asm_default_interrupt
+
+/*===============================================================*\
+| Start of code |
+\*===============================================================*/
+.text
+PUBLIC (start)
+SYM(start):
+ move.w #0x3700,sr /* disable interrupts */
+ jmp start_init
+
+/*===============================================================*\
+| Sspurious interrupt counter |
+\*===============================================================*/
+.align 4
+.data /* begin of data section */
+PUBLIC (spurious_int_count)
+SYM(spurious_int_count):
+ .long 0 /* spurious interrupt counter */
+
+/*===============================================================*\
+| Function: Default exception handler |
++-----------------------------------------------------------------+
+| - stop and disable all interrupts |
+| - loop forever |
+\*===============================================================*/
+.text /* start of text section */
+.align 4
+PUBLIC (asm_default_interrupt)
+SYM(asm_default_interrupt):
+ nop
+ stop #0x3700 /* stop */
+ bra.w asm_default_interrupt /* loop forever */
+
+/*===============================================================*\
+| Function: Exception handler for spurious interrupts |
++-----------------------------------------------------------------+
+| - count spurious interrupts |
+\*===============================================================*/
+.align 4
+PUBLIC (asm_spurious_interrupt)
+SYM(asm_spurious_interrupt):
+ add.l #1,spurious_int_count
+ rte
+
+/*===============================================================*\
+| Function: start_init |
++-----------------------------------------------------------------+
+| - Disable all intterupts |
+| - Setup the internal SRAM |
+| - Initialize mcf548x peripherals |
+| - Set initial stack pointer |
+| - Boot RTEMS
+\*===============================================================*/
+.align 4
+PUBLIC (start_init)
+SYM(start_init):
+
+ move.l #0x01040100,d0 /* invalidate instruction/data/branch cache, disable all caches */
+ movec d0,cacr
+
+ move.l #_CoreSramBase0,d0 /* initialize RAMBAR0 */
+ add.l #0x21,d0 /* for code & data */
+ movec d0,rambar0
+
+ move.l #_CoreSramBase1,d0 /* initialize RAMBAR1 */
+ add.l #0x21,d0 /* for code & data */
+ movec d0,rambar1 /* movec d0,RAMBAR1 */
+
+ move.l #__MBAR,d0 /* initialize MBAR */
+ movec d0,mbar
+
+ move.l #_CoreSramBase1,d0 /* set sp to end of Core SRAM temporarily */
+ add.l #_CoreSramSize1,d0
+ move.l d0,sp
+
+ move.l #0,d0 /* initialize frame pointer */
+ movea.l d0,a6
+
+ jsr mcf548x_init /* Initialize mcf548x peripherals */
+
+ move.l #bsp_initstack_end,sp /* relocate sp */
+
+ clrl d0 /* clear d0 */
+ movel d0,a7@- /* command line == 0 */
+
+ jsr boot_card /* boot rtems */
+
+ movel a7@+,d0
+
+exit_multitasking:
+ nop
+ nop
+ halt
+ bra exit_multitasking
+
+.end /* end of start.S module */
+
+
+