4 #if defined(__GNUC__)
\r
7 #elif defined(__CWCC__) || defined(__DCC__)
\r
12 .global _resetconfiguration
\r
13 _resetconfiguration:
\r
14 #if defined(CFG_VLE)
\r
15 .byte 0x01 #no watchdog, VLE
\r
17 .byte 0x00 #no watchdog
\r
19 .byte 0x5A #Boot identifier
\r
36 #if defined(__CWCC__) && defined(CFG_VLE)
\r
37 .section .text_vle,text_vle
\r
38 #elif defined(__DCC__)
\r
39 // Must be indented (diab)
\r
40 .section .text_vle,x
\r
41 #elif defined(__GNUC__)
\r
47 .type _start,@function
\r
49 // Good information about the E500 is freescale doc: E500ABIUG.pdf
\r
54 // mpc5567qrtech: light up led K2
\r
56 lis r3, 0xC3F9013A@h
\r
57 ori r3, r3, 0xC3F90130@l
\r
65 // For now, close down the watchdog.
\r
66 LOAD_ADDR_32(r8,0xFFF38000)
\r
67 LOAD_ADDR_32(r9,0x0000c520)
\r
69 LOAD_ADDR_32(r9,0x0000d928)
\r
71 LOAD_ADDR_32(r9,0x8000010A)
\r
75 // Set up the reserved registers in EABI: r1,r2 and r13
\r
77 // r1, stack pointer
\r
78 LOAD_ADDR_32(1,__SP_INIT)
\r
80 // r13, base of .sdata
\r
81 LOAD_ADDR_32(13,_SDA_BASE_)
\r
83 // r2, base of .sdata2 and .sbss2
\r
84 LOAD_ADDR_32(2,_SDA2_BASE_)
\r
86 // make space for initial backchain..
\r
89 /* Store winIDEA terminal connected status */
\r
90 #if defined(USE_TTY_WINIDEA)
\r
91 LOAD_ADDR_32(r8,g_TConn)
\r
95 /* Clear all SRAM */
\r
97 LOAD_ADDR_32(11,0x40000000)
\r
98 #if !defined(SRAM_SIZE)
\r
99 #error SRAM_SIZE not defined. Add it to board/<board>/build_config.mk
\r
102 LOAD_ADDR_32(r4,SRAM_SIZE/(32*4))
\r
106 stmw r0,0(r11) # write all 32 GPRs to SRAM
\r
107 addi r11,r11,128 # inc the ram ptr; 32 GPRs * 4 bytes = 128
\r
108 bdnz init_ram_loop # loop for 80k of SRAM
\r
111 // Copy initialized data from ROM to RAM
\r
112 LOAD_ADDR_32(3,__DATA_ROM)
\r
113 LOAD_ADDR_32(4,__DATA_RAM)
\r
114 LOAD_ADDR_32(5,__DATA_END)
\r
129 /* Clear uninitialized data( holds both bss and sbss ) */
\r
130 LOAD_ADDR_32(3,__BSS_START)
\r
131 LOAD_ADDR_32(4,__BSS_END)
\r
142 /* Restore winIDEA terminal connected status */
\r
143 #if defined(USE_TTY_WINIDEA)
\r
147 /* Call main() with argc set to 1 and argv ignored */
\r
151 /* Call exit() with the return value from main() as argument */
\r