blob: d09d49274ebc188c6e864483c9ff7d3d5357f457 [file] [log] [blame]
TsiChungLiewc8758102008-01-14 17:46:19 -06001/*
2 * Copyright (C) 2003 Josef Baumgartner <josef.baumgartner@telex.de>
3 * Based on code from Bernhard Kuhn <bkuhn@metrowerks.com>
4 *
5 * See file CREDITS for list of people who contributed to this
6 * project.
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License as
10 * published by the Free Software Foundation; either version 2 of
11 * the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21 * MA 02111-1307 USA
22 */
23
Wolfgang Denk25ddd1f2010-10-26 14:34:52 +020024#include <asm-offsets.h>
TsiChungLiewc8758102008-01-14 17:46:19 -060025#include <config.h>
Peter Tyser561858e2008-11-03 09:30:59 -060026#include <timestamp.h>
TsiChungLiewc8758102008-01-14 17:46:19 -060027#include "version.h"
TsiChung Liewdd9f0542010-03-11 22:12:53 -060028#include <asm/cache.h>
TsiChungLiewc8758102008-01-14 17:46:19 -060029
30#ifndef CONFIG_IDENT_STRING
31#define CONFIG_IDENT_STRING ""
32#endif
33
TsiChungLiewc8758102008-01-14 17:46:19 -060034#define _START _start
35#define _FAULT _fault
36
37#define SAVE_ALL \
38 move.w #0x2700,%sr; /* disable intrs */ \
39 subl #60,%sp; /* space for 15 regs */ \
40 moveml %d0-%d7/%a0-%a6,%sp@;
41
42#define RESTORE_ALL \
43 moveml %sp@,%d0-%d7/%a0-%a6; \
44 addl #60,%sp; /* space for 15 regs */ \
45 rte;
46
TsiChung Liewa21d0c22008-10-21 15:37:02 +000047#if defined(CONFIG_CF_SBF)
Wolfgang Denk14d0a022010-10-07 21:51:12 +020048#define ASM_DRAMINIT (asm_dram_init - CONFIG_SYS_TEXT_BASE + CONFIG_SYS_INIT_RAM_ADDR)
49#define ASM_SBF_IMG_HDR (asm_sbf_img_hdr - CONFIG_SYS_TEXT_BASE + CONFIG_SYS_INIT_RAM_ADDR)
TsiChung Liewa21d0c22008-10-21 15:37:02 +000050#endif
51
TsiChungLiewc8758102008-01-14 17:46:19 -060052.text
53/*
54 * Vector table. This is used for initial platform startup.
55 * These vectors are to catch any un-intended traps.
56 */
57_vectors:
58
TsiChung Liewa21d0c22008-10-21 15:37:02 +000059#if defined(CONFIG_CF_SBF)
60INITSP: .long 0 /* Initial SP */
61INITPC: .long ASM_DRAMINIT /* Initial PC */
62#else
63INITSP: .long 0 /* Initial SP */
64INITPC: .long _START /* Initial PC */
65#endif
66
TsiChungLiewc8758102008-01-14 17:46:19 -060067vector02: .long _FAULT /* Access Error */
68vector03: .long _FAULT /* Address Error */
69vector04: .long _FAULT /* Illegal Instruction */
70vector05: .long _FAULT /* Reserved */
71vector06: .long _FAULT /* Reserved */
72vector07: .long _FAULT /* Reserved */
73vector08: .long _FAULT /* Privilege Violation */
74vector09: .long _FAULT /* Trace */
75vector0A: .long _FAULT /* Unimplemented A-Line */
76vector0B: .long _FAULT /* Unimplemented F-Line */
77vector0C: .long _FAULT /* Debug Interrupt */
78vector0D: .long _FAULT /* Reserved */
79vector0E: .long _FAULT /* Format Error */
80vector0F: .long _FAULT /* Unitialized Int. */
81
82/* Reserved */
83vector10_17:
84.long _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
85
86vector18: .long _FAULT /* Spurious Interrupt */
87vector19: .long _FAULT /* Autovector Level 1 */
88vector1A: .long _FAULT /* Autovector Level 2 */
89vector1B: .long _FAULT /* Autovector Level 3 */
90vector1C: .long _FAULT /* Autovector Level 4 */
91vector1D: .long _FAULT /* Autovector Level 5 */
92vector1E: .long _FAULT /* Autovector Level 6 */
93vector1F: .long _FAULT /* Autovector Level 7 */
94
TsiChung Liewa21d0c22008-10-21 15:37:02 +000095#if !defined(CONFIG_CF_SBF)
TsiChungLiewc8758102008-01-14 17:46:19 -060096/* TRAP #0 - #15 */
97vector20_2F:
98.long _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
99.long _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
100
101/* Reserved */
102vector30_3F:
103.long _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
104.long _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
105
106vector64_127:
107.long _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
108.long _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
109.long _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
110.long _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
111.long _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
112.long _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
113.long _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
114.long _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
115
116vector128_191:
117.long _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
118.long _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
119.long _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
120.long _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
121.long _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
122.long _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
123.long _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
124.long _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
125
126vector192_255:
127.long _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
128.long _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
129.long _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
130.long _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
131.long _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
132.long _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
133.long _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
134.long _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
TsiChung Liewa21d0c22008-10-21 15:37:02 +0000135#endif
136
137#if defined(CONFIG_CF_SBF)
138 /* Image header: chksum 4 bytes, len 4 bytes, img dest 4 bytes */
139asm_sbf_img_hdr:
140 .long 0x00000000 /* checksum, not yet implemented */
141 .long 0x00020000 /* image length */
Wolfgang Denk14d0a022010-10-07 21:51:12 +0200142 .long CONFIG_SYS_TEXT_BASE /* image to be relocated at */
TsiChung Liewa21d0c22008-10-21 15:37:02 +0000143
144asm_dram_init:
145 move.l #(CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_RAM_CTRL), %d0
146 movec %d0, %RAMBAR1 /* init Rambar */
147 move.l #(CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_SP_OFFSET), %sp
148 clr.l %sp@-
149
150 /* Must disable global address */
151 move.l #0xFC008000, %a1
152 move.l #(CONFIG_SYS_CS0_BASE), (%a1)
153 move.l #0xFC008008, %a1
154 move.l #(CONFIG_SYS_CS0_CTRL), (%a1)
155 move.l #0xFC008004, %a1
156 move.l #(CONFIG_SYS_CS0_MASK), (%a1)
157
158 /*
159 * Dram Initialization
160 * a1, a2, and d0
161 */
162 /* mscr sdram */
163 move.l #0xFC0A4074, %a1
164 move.b #(CONFIG_SYS_SDRAM_DRV_STRENGTH), (%a1)
165 nop
166
167 /* SDRAM Chip 0 and 1 */
168 move.l #0xFC0B8110, %a1
169 move.l #0xFC0B8114, %a2
170
171 /* calculate the size */
172 move.l #0x13, %d1
173 move.l #(CONFIG_SYS_SDRAM_SIZE), %d2
174#ifdef CONFIG_SYS_SDRAM_BASE1
175 lsr.l #1, %d2
176#endif
177
178dramsz_loop:
179 lsr.l #1, %d2
180 add.l #1, %d1
181 cmp.l #1, %d2
182 bne dramsz_loop
183
184 /* SDRAM Chip 0 and 1 */
185 move.l #(CONFIG_SYS_SDRAM_BASE), (%a1)
186 or.l %d1, (%a1)
187#ifdef CONFIG_SYS_SDRAM_BASE1
188 move.l #(CONFIG_SYS_SDRAM_BASE1), (%a2)
189 or.l %d1, (%a2)
190#endif
191 nop
192
193 /* dram cfg1 and cfg2 */
194 move.l #0xFC0B8008, %a1
195 move.l #(CONFIG_SYS_SDRAM_CFG1), (%a1)
196 nop
197 move.l #0xFC0B800C, %a2
198 move.l #(CONFIG_SYS_SDRAM_CFG2), (%a2)
199 nop
200
201 move.l #0xFC0B8000, %a1 /* Mode */
202 move.l #0xFC0B8004, %a2 /* Ctrl */
203
204 /* Issue PALL */
205 move.l #(CONFIG_SYS_SDRAM_CTRL + 2), (%a2)
206 nop
207
208 /* Issue LEMR */
209 move.l #(CONFIG_SYS_SDRAM_MODE), (%a1)
210 nop
211 move.l #(CONFIG_SYS_SDRAM_EMOD), (%a1)
212 nop
213
214 move.l #1000, %d0
215wait1000:
216 nop
217 subq.l #1, %d0
218 bne wait1000
219
220 /* Issue PALL */
221 move.l #(CONFIG_SYS_SDRAM_CTRL + 2), (%a2)
222 nop
223
224 /* Perform two refresh cycles */
225 move.l #(CONFIG_SYS_SDRAM_CTRL + 4), %d0
226 nop
227 move.l %d0, (%a2)
228 move.l %d0, (%a2)
229 nop
230
231 move.l #(CONFIG_SYS_SDRAM_CTRL), %d0
232 and.l #0x7FFFFFFF, %d0
233 or.l #0x10000c00, %d0
234 move.l %d0, (%a2)
235 nop
236
237 /*
238 * DSPI Initialization
239 * a0 - general, sram - 0x80008000 - 32, see M52277EVB.h
240 * a1 - dspi status
241 * a2 - dtfr
242 * a3 - drfr
243 * a4 - Dst addr
244 */
245
246 /* Enable pins for DSPI mode - chip-selects are enabled later */
247 move.l #0xFC0A4036, %a0
248 move.b #0x3F, %d0
249 move.b %d0, (%a0)
250
251 /* DSPI CS */
252#ifdef CONFIG_SYS_DSPI_CS0
253 move.b (%a0), %d0
254 or.l #0xC0, %d0
255 move.b %d0, (%a0)
256#endif
257#ifdef CONFIG_SYS_DSPI_CS2
258 move.l #0xFC0A4037, %a0
259 move.b (%a0), %d0
260 or.l #0x10, %d0
261 move.b %d0, (%a0)
262#endif
263 nop
264
265 /* Configure DSPI module */
266 move.l #0xFC05C000, %a0
267 move.l #0x80FF0C00, (%a0) /* Master, clear TX/RX FIFO */
268
269 move.l #0xFC05C00C, %a0
270 move.l #0x3E000011, (%a0)
271
272 move.l #0xFC05C034, %a2 /* dtfr */
273 move.l #0xFC05C03B, %a3 /* drfr */
274
275 move.l #(ASM_SBF_IMG_HDR + 4), %a1
276 move.l (%a1)+, %d5
277 move.l (%a1), %a4
278
279 move.l #(CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_SBFHDR_DATA_OFFSET), %a0
280 move.l #(CONFIG_SYS_SBFHDR_SIZE), %d4
281
282 move.l #0xFC05C02C, %a1 /* dspi status */
283
284 /* Issue commands and address */
285 move.l #0x8004000B, %d2 /* Fast Read Cmd */
286 jsr asm_dspi_wr_status
287 jsr asm_dspi_rd_status
288
289 move.l #0x80040000, %d2 /* Address byte 2 */
290 jsr asm_dspi_wr_status
291 jsr asm_dspi_rd_status
292
293 move.l #0x80040000, %d2 /* Address byte 1 */
294 jsr asm_dspi_wr_status
295 jsr asm_dspi_rd_status
296
297 move.l #0x80040000, %d2 /* Address byte 0 */
298 jsr asm_dspi_wr_status
299 jsr asm_dspi_rd_status
300
301 move.l #0x80040000, %d2 /* Dummy Wr and Rd */
302 jsr asm_dspi_wr_status
303 jsr asm_dspi_rd_status
304
305 /* Transfer serial boot header to sram */
306asm_dspi_rd_loop1:
307 move.l #0x80040000, %d2
308 jsr asm_dspi_wr_status
309 jsr asm_dspi_rd_status
310
311 move.b %d1, (%a0) /* read, copy to dst */
312
313 add.l #1, %a0 /* inc dst by 1 */
314 sub.l #1, %d4 /* dec cnt by 1 */
315 bne asm_dspi_rd_loop1
316
317 /* Transfer u-boot from serial flash to memory */
318asm_dspi_rd_loop2:
319 move.l #0x80040000, %d2
320 jsr asm_dspi_wr_status
321 jsr asm_dspi_rd_status
322
323 move.b %d1, (%a4) /* read, copy to dst */
324
325 add.l #1, %a4 /* inc dst by 1 */
326 sub.l #1, %d5 /* dec cnt by 1 */
327 bne asm_dspi_rd_loop2
328
329 move.l #0x00040000, %d2 /* Terminate */
330 jsr asm_dspi_wr_status
331 jsr asm_dspi_rd_status
332
333 /* jump to memory and execute */
Wolfgang Denk14d0a022010-10-07 21:51:12 +0200334 move.l #(CONFIG_SYS_TEXT_BASE + 0x400), %a0
TsiChung Liewa21d0c22008-10-21 15:37:02 +0000335 move.l %a0, (%a1)
336 jmp (%a0)
337
338asm_dspi_wr_status:
339 move.l (%a1), %d0 /* status */
340 and.l #0x0000F000, %d0
341 cmp.l #0x00003000, %d0
342 bgt asm_dspi_wr_status
343
344 move.l %d2, (%a2)
345 rts
346
347asm_dspi_rd_status:
348 move.l (%a1), %d0 /* status */
349 and.l #0x000000F0, %d0
350 lsr.l #4, %d0
351 cmp.l #0, %d0
352 beq asm_dspi_rd_status
353
354 move.b (%a3), %d1
355 rts
356#endif /* CONFIG_CF_SBF */
TsiChungLiewc8758102008-01-14 17:46:19 -0600357
358 .text
TsiChung Liewa21d0c22008-10-21 15:37:02 +0000359 . = 0x400
TsiChungLiewc8758102008-01-14 17:46:19 -0600360 .globl _start
361_start:
362 nop
363 nop
364 move.w #0x2700,%sr /* Mask off Interrupt */
365
366 /* Set vector base register at the beginning of the Flash */
TsiChung Liewa21d0c22008-10-21 15:37:02 +0000367#if defined(CONFIG_CF_SBF)
Wolfgang Denk14d0a022010-10-07 21:51:12 +0200368 move.l #CONFIG_SYS_TEXT_BASE, %d0
TsiChung Liewa21d0c22008-10-21 15:37:02 +0000369 movec %d0, %VBR
370#else
Jean-Christophe PLAGNIOL-VILLARD6d0f6bc2008-10-16 15:01:15 +0200371 move.l #CONFIG_SYS_FLASH_BASE, %d0
TsiChungLiewc8758102008-01-14 17:46:19 -0600372 movec %d0, %VBR
373
Jean-Christophe PLAGNIOL-VILLARD6d0f6bc2008-10-16 15:01:15 +0200374 move.l #(CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_RAM_CTRL), %d0
TsiChungLiewc8758102008-01-14 17:46:19 -0600375 movec %d0, %RAMBAR1
TsiChung Liewa21d0c22008-10-21 15:37:02 +0000376#endif
TsiChungLiewc8758102008-01-14 17:46:19 -0600377
TsiChungLiewc8758102008-01-14 17:46:19 -0600378 /* invalidate and disable cache */
TsiChung Liewdd9f0542010-03-11 22:12:53 -0600379 move.l #CF_CACR_CINV, %d0 /* Invalidate cache cmd */
TsiChungLiewc8758102008-01-14 17:46:19 -0600380 movec %d0, %CACR /* Invalidate cache */
381 move.l #0, %d0
382 movec %d0, %ACR0
383 movec %d0, %ACR1
384
TsiChung Liewdd9f0542010-03-11 22:12:53 -0600385 /* initialize general use internal ram */
386 move.l #0, %d0
387 move.l #(ICACHE_STATUS), %a1 /* icache */
388 move.l #(DCACHE_STATUS), %a2 /* icache */
389 move.l %d0, (%a1)
390 move.l %d0, (%a2)
391
TsiChungLiewc8758102008-01-14 17:46:19 -0600392 /* set stackpointer to end of internal ram to get some stackspace for
393 the first c-code */
Jean-Christophe PLAGNIOL-VILLARD6d0f6bc2008-10-16 15:01:15 +0200394 move.l #(CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_SP_OFFSET), %sp
TsiChungLiewc8758102008-01-14 17:46:19 -0600395 clr.l %sp@-
396
397 move.l #__got_start, %a5 /* put relocation table address to a5 */
398
399 bsr cpu_init_f /* run low-level CPU init code (from flash) */
400 bsr board_init_f /* run low-level board init code (from flash) */
401
402 /* board_init_f() does not return */
403
404/*------------------------------------------------------------------------------*/
405
406/*
407 * void relocate_code (addr_sp, gd, addr_moni)
408 *
409 * This "function" does not return, instead it continues in RAM
410 * after relocating the monitor code.
411 *
412 * r3 = dest
413 * r4 = src
414 * r5 = length in bytes
415 * r6 = cachelinesize
416 */
417 .globl relocate_code
418relocate_code:
419 link.w %a6,#0
420 move.l 8(%a6), %sp /* set new stack pointer */
421
422 move.l 12(%a6), %d0 /* Save copy of Global Data pointer */
423 move.l 16(%a6), %a0 /* Save copy of Destination Address */
424
Jean-Christophe PLAGNIOL-VILLARD6d0f6bc2008-10-16 15:01:15 +0200425 move.l #CONFIG_SYS_MONITOR_BASE, %a1
TsiChungLiewc8758102008-01-14 17:46:19 -0600426 move.l #__init_end, %a2
427 move.l %a0, %a3
428
429 /* copy the code to RAM */
4301:
431 move.l (%a1)+, (%a3)+
432 cmp.l %a1,%a2
433 bgt.s 1b
434
435/*
436 * We are done. Do not return, instead branch to second part of board
437 * initialization, now running from RAM.
438 */
439 move.l %a0, %a1
Jean-Christophe PLAGNIOL-VILLARD6d0f6bc2008-10-16 15:01:15 +0200440 add.l #(in_ram - CONFIG_SYS_MONITOR_BASE), %a1
TsiChungLiewc8758102008-01-14 17:46:19 -0600441 jmp (%a1)
442
443in_ram:
444
445clear_bss:
446 /*
447 * Now clear BSS segment
448 */
449 move.l %a0, %a1
Jean-Christophe PLAGNIOL-VILLARD6d0f6bc2008-10-16 15:01:15 +0200450 add.l #(_sbss - CONFIG_SYS_MONITOR_BASE),%a1
TsiChungLiewc8758102008-01-14 17:46:19 -0600451 move.l %a0, %d1
Jean-Christophe PLAGNIOL-VILLARD6d0f6bc2008-10-16 15:01:15 +0200452 add.l #(_ebss - CONFIG_SYS_MONITOR_BASE),%d1
TsiChungLiewc8758102008-01-14 17:46:19 -06004536:
454 clr.l (%a1)+
455 cmp.l %a1,%d1
456 bgt.s 6b
457
458 /*
459 * fix got table in RAM
460 */
461 move.l %a0, %a1
Jean-Christophe PLAGNIOL-VILLARD6d0f6bc2008-10-16 15:01:15 +0200462 add.l #(__got_start - CONFIG_SYS_MONITOR_BASE),%a1
TsiChungLiewc8758102008-01-14 17:46:19 -0600463 move.l %a1,%a5 /* * fix got pointer register a5 */
464
465 move.l %a0, %a2
Jean-Christophe PLAGNIOL-VILLARD6d0f6bc2008-10-16 15:01:15 +0200466 add.l #(__got_end - CONFIG_SYS_MONITOR_BASE),%a2
TsiChungLiewc8758102008-01-14 17:46:19 -0600467
4687:
469 move.l (%a1),%d1
470 sub.l #_start,%d1
471 add.l %a0,%d1
472 move.l %d1,(%a1)+
473 cmp.l %a2, %a1
474 bne 7b
475
476 /* calculate relative jump to board_init_r in ram */
477 move.l %a0, %a1
Jean-Christophe PLAGNIOL-VILLARD6d0f6bc2008-10-16 15:01:15 +0200478 add.l #(board_init_r - CONFIG_SYS_MONITOR_BASE), %a1
TsiChungLiewc8758102008-01-14 17:46:19 -0600479
480 /* set parameters for board_init_r */
481 move.l %a0,-(%sp) /* dest_addr */
482 move.l %d0,-(%sp) /* gd */
483 jsr (%a1)
484
485/*------------------------------------------------------------------------------*/
486/* exception code */
487 .globl _fault
488_fault:
489 jmp _fault
490 .globl _exc_handler
491
492_exc_handler:
493 SAVE_ALL
494 movel %sp,%sp@-
495 bsr exc_handler
496 addql #4,%sp
497 RESTORE_ALL
498
499 .globl _int_handler
500_int_handler:
501 SAVE_ALL
502 movel %sp,%sp@-
503 bsr int_handler
504 addql #4,%sp
505 RESTORE_ALL
506
507/*------------------------------------------------------------------------------*/
TsiChungLiewc8758102008-01-14 17:46:19 -0600508
509 .globl version_string
510version_string:
511 .ascii U_BOOT_VERSION
Peter Tyser561858e2008-11-03 09:30:59 -0600512 .ascii " (", U_BOOT_DATE, " - ", U_BOOT_TIME, ")"
TsiChungLiewc8758102008-01-14 17:46:19 -0600513 .ascii CONFIG_IDENT_STRING, "\0"
TsiChung Liew9b464322008-03-28 08:47:45 -0500514 .align 4