start.s

来自「最新版的u-boot,2008-10-18发布」· S 代码 · 共 633 行 · 第 1/2 页

S
633
字号
/* * Copyright (C) 2003	Josef Baumgartner <josef.baumgartner@telex.de> * Based on code from Bernhard Kuhn <bkuhn@metrowerks.com> * * See file CREDITS for list of people who contributed to this * project. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA */#include <config.h>#include "version.h"#ifndef	 CONFIG_IDENT_STRING#define	 CONFIG_IDENT_STRING ""#endif/* last three long word reserved for cache status */#define CACR_STATUS	(CFG_INIT_RAM_ADDR+CFG_INIT_RAM_END-12)#define ICACHE_STATUS	(CFG_INIT_RAM_ADDR+CFG_INIT_RAM_END- 8)#define DCACHE_STATUS	(CFG_INIT_RAM_ADDR+CFG_INIT_RAM_END- 4)#define _START	_start#define _FAULT	_fault#define SAVE_ALL						\	move.w	#0x2700,%sr;		/* disable intrs */	\	subl	#60,%sp;		/* space for 15 regs */ \	moveml	%d0-%d7/%a0-%a6,%sp@;#define RESTORE_ALL						\	moveml	%sp@,%d0-%d7/%a0-%a6;				\	addl	#60,%sp;		/* space for 15 regs */ \	rte;#if defined(CONFIG_CF_SBF)#define ASM_DRAMINIT	(asm_dram_init - TEXT_BASE + CFG_INIT_RAM_ADDR)#define ASM_SBF_IMG_HDR	(asm_sbf_img_hdr - TEXT_BASE + CFG_INIT_RAM_ADDR)#endif.text/* *	Vector table. This is used for initial platform startup. *	These vectors are to catch any un-intended traps. */_vectors:#if defined(CONFIG_CF_SBF)INITSP:	.long	0		/* Initial SP	*/INITPC:	.long	ASM_DRAMINIT	/* Initial PC 	*/#elseINITSP:		.long	0	/* Initial SP	*/INITPC:		.long	_START	/* Initial PC 		*/#endifvector02:	.long	_FAULT	/* Access Error		*/vector03:	.long	_FAULT	/* Address Error	*/vector04:	.long	_FAULT	/* Illegal Instruction	*/vector05:	.long	_FAULT	/* Reserved		*/vector06:	.long	_FAULT	/* Reserved		*/vector07:	.long	_FAULT	/* Reserved		*/vector08:	.long	_FAULT	/* Privilege Violation	*/vector09:	.long	_FAULT	/* Trace		*/vector0A:	.long	_FAULT	/* Unimplemented A-Line	*/vector0B:	.long	_FAULT	/* Unimplemented F-Line	*/vector0C:	.long	_FAULT	/* Debug Interrupt	*/vector0D:	.long	_FAULT	/* Reserved		*/vector0E:	.long	_FAULT	/* Format Error		*/vector0F:	.long	_FAULT	/* Unitialized Int.	*//* Reserved */vector10_17:.long	_FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULTvector18:	.long	_FAULT	/* Spurious Interrupt	*/vector19:	.long	_FAULT	/* Autovector Level 1	*/vector1A:	.long	_FAULT	/* Autovector Level 2	*/vector1B:	.long	_FAULT	/* Autovector Level 3	*/vector1C:	.long	_FAULT	/* Autovector Level 4	*/vector1D:	.long	_FAULT	/* Autovector Level 5	*/vector1E:	.long	_FAULT	/* Autovector Level 6	*/vector1F:	.long	_FAULT	/* Autovector Level 7	*/#if !defined(CONFIG_CF_SBF)/* TRAP #0 - #15 */vector20_2F:.long	_FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT.long	_FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT/* Reserved	*/vector30_3F:.long	_FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT.long	_FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULTvector64_127:.long	_FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT.long	_FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT.long	_FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT.long	_FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT.long	_FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT.long	_FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT.long	_FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT.long	_FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULTvector128_191:.long	_FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT.long	_FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT.long	_FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT.long	_FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT.long	_FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT.long	_FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT.long	_FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT.long	_FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULTvector192_255:.long	_FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT.long	_FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT.long	_FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT.long	_FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT.long	_FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT.long	_FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT.long	_FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT.long	_FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT#endif#if defined(CONFIG_CF_SBF)	/* Image header: chksum 4 bytes, len 4 bytes, img dest 4 bytes */asm_sbf_img_hdr:	.long	0x00000000	/* checksum, not yet implemented */	.long	0x00030000	/* image length */	.long	TEXT_BASE	/* image to be relocated at */asm_dram_init:	move.l	#(CFG_INIT_RAM_ADDR + CFG_INIT_RAM_CTRL), %d0	movec	%d0, %RAMBAR1	/* init Rambar */	move.l	#(CFG_INIT_RAM_ADDR + CFG_INIT_SP_OFFSET), %sp	clr.l %sp@-	/* Must disable global address */	move.l	#0xFC008000, %a1	move.l	#(CFG_CS0_BASE), (%a1)	move.l	#0xFC008008, %a1	move.l	#(CFG_CS0_CTRL), (%a1)	move.l	#0xFC008004, %a1	move.l	#(CFG_CS0_MASK), (%a1)	/*	 * Dram Initialization	 * a1, a2, and d0	 */	/* mscr sdram */	move.l	#0xFC0A4074, %a1	move.b	#(CFG_SDRAM_DRV_STRENGTH), (%a1)	nop	/* SDRAM Chip 0 and 1 */	move.l	#0xFC0B8110, %a1	move.l	#0xFC0B8114, %a2	/* calculate the size */	move.l	#0x13, %d1	move.l	#(CFG_SDRAM_SIZE), %d2#ifdef CFG_SDRAM_BASE1	lsr.l	#1, %d2#endifdramsz_loop:	lsr.l	#1, %d2	add.l	#1, %d1	cmp.l	#1, %d2	bne	dramsz_loop	/* SDRAM Chip 0 and 1 */	move.l	#(CFG_SDRAM_BASE), (%a1)	or.l	%d1, (%a1)#ifdef CFG_SDRAM_BASE1	move.l	#(CFG_SDRAM_BASE1), (%a2)	or.l	%d1, (%a2)#endif	nop	/* dram cfg1 and cfg2 */	move.l	#0xFC0B8008, %a1	move.l	#(CFG_SDRAM_CFG1), (%a1)	nop	move.l	#0xFC0B800C, %a2	move.l	#(CFG_SDRAM_CFG2), (%a2)	nop	move.l	#0xFC0B8000, %a1	/* Mode */	move.l	#0xFC0B8004, %a2	/* Ctrl */#ifdef CONFIG_M54455EVB	/* Issue PALL */	move.l	#(CFG_SDRAM_CTRL + 2), (%a2)	nop	/* Issue LEMR */	move.l	#(CFG_SDRAM_EMOD + 0x408), (%a1)	nop	move.l	#(CFG_SDRAM_MODE + 0x300), (%a1)	nop	move.l	#1000, %d0wait1000:	nop	subq.l	#1, %d0	bne	wait1000#endif	/* Issue PALL */	move.l	#(CFG_SDRAM_CTRL + 2), (%a2)	nop	/* Perform two refresh cycles */	move.l	#(CFG_SDRAM_CTRL + 4), %d0	nop	move.l	%d0, (%a2)	move.l	%d0, (%a2)	nop#ifdef CONFIG_M54455EVB	move.l	#(CFG_SDRAM_MODE + 0x200), (%a1)	nop#elif defined(CONFIG_M54451EVB)	/* Issue LEMR */	move.l	#(CFG_SDRAM_MODE), (%a2)	nop	move.l	#(CFG_SDRAM_EMOD), (%a2)	nop#endif	move.l	#500, %d0wait500:	nop	subq.l	#1, %d0	bne	wait500	move.l	#(CFG_SDRAM_CTRL), %d0	and.l	#0x7FFFFFFF, %d0#ifdef CONFIG_M54455EVB	or.l	#0x10000c00, %d0#elif defined(CONFIG_M54451EVB)	or.l	#0x10000000, %d0#endif	move.l	%d0, (%a2)	nop	/*	 * DSPI Initialization	 * a0 - general, sram - 0x80008000 - 32, see M54455EVB.h	 * a1 - dspi status	 * a2 - dtfr	 * a3 - drfr	 * a4 - Dst addr	 */	/* Enable pins for DSPI mode - chip-selects are enabled later */	move.l	#0xFC0A4063, %a0	move.b	#0x7F, (%a0)	/* Configure DSPI module */	move.l	#0xFC05C000, %a0	move.l	#0x80FF0C00, (%a0)	/* Master, clear TX/RX FIFO */	move.l	#0xFC05C00C, %a0	move.l	#0x3E000011, (%a0)	move.l	#0xFC05C034, %a2	/* dtfr */	move.l	#0xFC05C03B, %a3	/* drfr */	move.l	#(ASM_SBF_IMG_HDR + 4), %a1	move.l	(%a1)+, %d5	move.l	(%a1), %a4	move.l	#(CFG_INIT_RAM_ADDR + CFG_SBFHDR_DATA_OFFSET), %a0	move.l	#(CFG_SBFHDR_SIZE), %d4	move.l	#0xFC05C02C, %a1	/* dspi status */	/* Issue commands and address */	move.l	#0x8002000B, %d2	/* Fast Read Cmd */	jsr	asm_dspi_wr_status	jsr	asm_dspi_rd_status	move.l	#0x80020000, %d2	/* Address byte 2 */	jsr	asm_dspi_wr_status	jsr	asm_dspi_rd_status	move.l	#0x80020000, %d2	/* Address byte 1 */	jsr	asm_dspi_wr_status	jsr	asm_dspi_rd_status	move.l	#0x80020000, %d2	/* Address byte 0 */	jsr	asm_dspi_wr_status	jsr	asm_dspi_rd_status	move.l	#0x80020000, %d2	/* Dummy Wr and Rd */	jsr	asm_dspi_wr_status	jsr	asm_dspi_rd_status

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?