⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lowlevel_init.s

📁 u-boot-1.1.6 源码包
💻 S
字号:
/* * Board specific setup info * * (C) Copyright 2003-2004 * * Texas Instruments, <www.ti.com> * Kshitij Gupta <Kshitij@ti.com> * * Modified for OMAP 1610 H2 board by Nishant Kamat, Jan 2004 * * Modified for OMAP730 P2 Board by Dave Peverley, MPC-Data Limited * (http://www.mpc-data.co.uk) * * TODO : Tidy up and change to use system register defines *        from omap730.h where possible. * * 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>#if defined(CONFIG_OMAP730)#include <./configs/omap730.h>#endif_TEXT_BASE:	.word	TEXT_BASE	/* sdram load addr from config.mk */.globl lowlevel_initlowlevel_init:	/* Save callers address in r11 - r11 must never be modified */	mov r11, lr	/*------------------------------------------------------*	 *mask all IRQs by setting all bits in the INTMR default*	 *------------------------------------------------------*/	mov	r1,	#0xffffffff	ldr	r0,	=REG_IHL1_MIR	str	r1,	[r0]	ldr	r0,	=REG_IHL2_MIR	str	r1,	[r0]	/*------------------------------------------------------*	 * Set up ARM CLM registers (IDLECT1)                   *	 *------------------------------------------------------*/	ldr	r0,	REG_ARM_IDLECT1	ldr	r1,	VAL_ARM_IDLECT1	str	r1,	[r0]	/*------------------------------------------------------*	 * Set up ARM CLM registers (IDLECT2)  		        *	 *------------------------------------------------------*/	ldr	r0,	REG_ARM_IDLECT2	ldr	r1,	VAL_ARM_IDLECT2	str	r1,	[r0]	/*------------------------------------------------------*	 * Set up ARM CLM registers (IDLECT3)		        *	 *------------------------------------------------------*/	ldr	r0,	REG_ARM_IDLECT3	ldr	r1,	VAL_ARM_IDLECT3	str	r1,	[r0]	mov	r1,	#0x01		/* PER_EN bit */	ldr	r0,	REG_ARM_RSTCT2	strh	r1,	[r0]		/* CLKM; Peripheral reset. */	/* Set CLKM to Sync-Scalable	*/	/* I supposedly need to enable the dsp clock before switching */	mov	r1,	#0x1000	ldr	r0,	REG_ARM_SYSST	strh	r1,	[r0]	mov	r0,	#0x4001:	subs	r0,	r0,	#0x1	/* wait for any bubbles to finish */	bne	1b	ldr	r1,	VAL_ARM_CKCTL	ldr	r0,	REG_ARM_CKCTL	strh	r1,	[r0]	/* a few nops to let settle */	nop	nop	nop	nop	nop	nop	nop	nop	nop	nop	/* setup DPLL 1 */	/* Ramp up the clock to 96Mhz */	ldr	r1,	VAL_DPLL1_CTL	ldr	r0,	REG_DPLL1_CTL	strh	r1,	[r0]	ands	r1,	r1,	#0x10	/* Check if PLL is enabled. */	beq	lock_end	/* Do not look for lock if BYPASS selected */2:	ldrh	r1,	[r0]	ands	r1,	r1,	#0x01	/*	Check the LOCK bit.*/	beq 2b			/*	loop until bit goes hi. */lock_end:	/*------------------------------------------------------*	 * Turn off the watchdog during init...			* 	 *------------------------------------------------------*/	ldr	r0,	REG_WATCHDOG	ldr	r1,	WATCHDOG_VAL1	str	r1,	[r0]	ldr	r1,	WATCHDOG_VAL2	str	r1,	[r0]	ldr	r0,	REG_WSPRDOG	ldr	r1,	WSPRDOG_VAL1	str	r1,	[r0]	ldr	r0,	REG_WWPSDOGwatch1Wait:	ldr	r1,	[r0]	tst	r1,	#0x10	bne	watch1Wait	ldr	r0,	REG_WSPRDOG	ldr	r1,	WSPRDOG_VAL2	str	r1,	[r0]	ldr	r0,	REG_WWPSDOGwatch2Wait:	ldr	r1,	[r0]	tst	r1,	#0x10	bne	watch2Wait	/* Set memory timings corresponding to the new clock speed */	/* Check execution location to determine current execution location	 * and branch to appropriate initialization code.	 */	/* Compare physical SDRAM base & current execution location. */	and     r0, pc, #0xF0000000	/* Compare. */	cmp     r0, #0	/* Skip over EMIF-fast initialization if running from SDRAM. */	bne 	skip_sdram	/*	* Delay for SDRAM initialization.	*/	mov	r3,	#0x1800		/* value should be checked */3:	subs	r3,	r3,	#0x1	/* Decrement count */	bne 	3b	ldr	r0,	REG_SDRAM_CONFIG	ldr	r1,	SDRAM_CONFIG_VAL	str	r1,	[r0]	ldr	r0,	REG_SDRAM_MRS_LEGACY	ldr	r1,	SDRAM_MRS_VAL	str	r1,	[r0]skip_sdram:common_tc:	/* slow interface */	ldr	r1,	VAL_TC_EMIFS_CS0_CONFIG	ldr	r0,	REG_TC_EMIFS_CS0_CONFIG	str	r1,	[r0] /* Chip Select 0 */	ldr	r1,	VAL_TC_EMIFS_CS1_CONFIG	ldr	r0,	REG_TC_EMIFS_CS1_CONFIG	str	r1,	[r0] /* Chip Select 1 */	ldr	r1,	VAL_TC_EMIFS_CS2_CONFIG	ldr	r0,	REG_TC_EMIFS_CS2_CONFIG	str	r1,	[r0] /* Chip Select 2 */	ldr	r1,	VAL_TC_EMIFS_CS3_CONFIG	ldr	r0,	REG_TC_EMIFS_CS3_CONFIG	str	r1,	[r0] /* Chip Select 3 */	/* 48MHz clock request for UART1 */	ldr	r1,	PERSEUS2_CONFIG_BASE	ldrh	r0,	[r1, #CONFIG_PCC_CONF]	orr	r0,	r0, #CONF_MOD_UART1_CLK_MODE_R	strh	r0,	[r1, #CONFIG_PCC_CONF]	/* Initialize public and private rheas	 *  - set access factor 2 on both rhea / strobe	 *  - disable write buffer on strb0, enable write buffer on strb1	 */	ldr	R0,	REG_RHEA_PUB_CTL	ldr	R1,	REG_RHEA_PRIV_CTL	ldr	R2,	VAL_RHEA_CTL	strh	R2,	[R0]	strh	R2,	[R1]	mov	R3,	#2          /* disable write buffer on strb0, enable write buffer on strb1 */	strh	R3,	[R0, #0x08]	/* arm rhea control reg */	strh	R3,	[R1, #0x08]	/* enable IRQ and FIQ */	mrs	r4,	CPSR	bic	r4,	r4, #IRQ_MASK	bic	r4,	r4, #FIQ_MASK	msr	CPSR,	r4	/* set TAP CONF to TRI EMULATION */	ldr	r1,	[r0, #CONFIG_MODE2]	bic	r1,	r1, #0x18	orr	r1,	r1, #0x10	str	r1,	[r0, #CONFIG_MODE2]	/* set tdbgen to 1 */	ldr	r0,	PERSEUS2_CONFIG_BASE	ldr	r1,	[r0, #CONFIG_MODE1]	mov	r2,	#0x10000	orr	r1,	r1, r2	str	r1,	[r0, #CONFIG_MODE1]#ifdef CONFIG_P2_OMAP1610	/* inserting additional 2 clock cycle hold time for LAN */	ldr     r0,     REG_TC_EMIFS_CS1_ADVANCED	ldr    	r1,     VAL_TC_EMIFS_CS1_ADVANCED	str     r1,     [r0]#endif	/* Start MPU Timer 1 */	ldr	r0,	REG_MPU_LOAD_TIMER	ldr	r1,	VAL_MPU_LOAD_TIMER	str	r1,	[r0]	ldr	r0,	REG_MPU_CNTL_TIMER	ldr	r1,	VAL_MPU_CNTL_TIMER	str	r1,	[r0]	/* back to arch calling code */	mov	pc,	r11	/* the literal pools origin */	.ltorgREG_TC_EMIFS_CONFIG:		/* 32 bits */	.word 0xfffecc0cREG_TC_EMIFS_CS0_CONFIG:	/* 32 bits */	.word 0xfffecc10REG_TC_EMIFS_CS1_CONFIG:	/* 32 bits */	.word 0xfffecc14REG_TC_EMIFS_CS2_CONFIG:	/* 32 bits */	.word 0xfffecc18REG_TC_EMIFS_CS3_CONFIG:	/* 32 bits */	.word 0xfffecc1c#ifdef CONFIG_P2_OMAP730REG_TC_EMIFS_CS1_ADVANCED:	/* 32 bits */	.word 0xfffecc54#endif/* MPU clock/reset/power mode control registers */REG_ARM_CKCTL:			/* 16 bits */	.word 0xfffece00REG_ARM_IDLECT3:		/* 16 bits */	.word 0xfffece24REG_ARM_IDLECT2:		/* 16 bits */	.word 0xfffece08REG_ARM_IDLECT1:		/* 16 bits */	.word 0xfffece04REG_ARM_RSTCT2:			/* 16 bits */	.word 0xfffece14REG_ARM_SYSST:			/* 16 bits */	.word 0xfffece18/* DPLL control registers */REG_DPLL1_CTL:			/* 16 bits */	.word 0xfffecf00/* Watch Dog register *//* secure watchdog stop */REG_WSPRDOG:	.word 0xfffeb048/* watchdog write pending */REG_WWPSDOG:	.word 0xfffeb034WSPRDOG_VAL1:	.word 0x0000aaaaWSPRDOG_VAL2:	.word 0x00005555/* SDRAM config is: auto refresh enabled, 16 bit 4 bank, counter @8192 rows, 10 ns, 8 burst */REG_SDRAM_CONFIG:	.word 0xfffecc20REG_SDRAM_MRS_LEGACY:	.word 0xfffecc24REG_WATCHDOG:	.word 0xfffec808REG_MPU_LOAD_TIMER:	.word 0xfffec504REG_MPU_CNTL_TIMER:	.word 0xfffec500/* Public and private rhea bridge registers definition */REG_RHEA_PUB_CTL:	.word 0xFFFECA00REG_RHEA_PRIV_CTL:	.word 0xFFFED300/* EMIFF SDRAM Configuration register   - self refresh disable   - auto refresh enabled   - SDRAM type 64 Mb, 16 bits bus 4 banks   - power down enabled   - SDRAM clock disabled */SDRAM_CONFIG_VAL:	.word 0x0C017DF4/* Burst full page length ; cas latency = 3 */SDRAM_MRS_VAL:	.word 0x00000037VAL_ARM_CKCTL:	.word 0x6505VAL_DPLL1_CTL:	.word 0x3412#ifdef CONFIG_P2_OMAP730VAL_TC_EMIFS_CS0_CONFIG:	.word 0x0000FFF3VAL_TC_EMIFS_CS1_CONFIG:	.word 0x00004278VAL_TC_EMIFS_CS2_CONFIG:	.word 0x00004278VAL_TC_EMIFS_CS3_CONFIG:	.word 0x00004278VAL_TC_EMIFS_CS1_ADVANCED:	.word 0x00000022#endifVAL_ARM_IDLECT1:	.word 0x00000400VAL_ARM_IDLECT2:	.word 0x00000886VAL_ARM_IDLECT3:	.word 0x00000015WATCHDOG_VAL1:	.word 0x000000f5WATCHDOG_VAL2:	.word 0x000000a0VAL_MPU_LOAD_TIMER:	.word 0xffffffffVAL_MPU_CNTL_TIMER:	.word 0xffffffa1VAL_RHEA_CTL:	.word			0xFF22/* Config Register vals */PERSEUS2_CONFIG_BASE:	.word			0xFFFE1000.equ	CONFIG_PCC_CONF,	0xB4.equ	CONFIG_MODE1,		0x10.equ	CONFIG_MODE2,		0x14.equ	CONF_MOD_UART1_CLK_MODE_R,	0x0A/* misc values */.equ	IRQ_MASK,		0x80           /* IRQ mask value */.equ	FIQ_MASK,		0x40           /* FIQ mask value */

⌨️ 快捷键说明

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