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

📄 rominit.s

📁 MPC8360MDS VXWORKS BSP
💻 S
📖 第 1 页 / 共 2 页
字号:
	andi.	r7,r7,0x3FFF   		/* Clear DCE and ICE bits */	mtspr	HID0,r7        isync	sync				/* synchronize */	WRITEADR(r6,r7,M83XX_LBLAWBARn(CCSBAR,2), (BCSR_BASE_ADRS))	WRITEADR(r6,r7,M83XX_LBLAWARn(CCSBAR,2), \		 (LAWAR_ENABLE |  LAWAR_SIZE_32KB ))		WRITEADR(r6,r7,QUICC_OR1 (CCSBAR), \		 0xffffe9f7)	/* load BR2 */	WRITEADR(r6,r7,QUICC_BR1 (CCSBAR), \		 (BCSR_BASE_ADRS & 0xffff0000) | \		 0x801)	isync	sync	/* Make sure flash unprotected */		lis	r6, HIADJ (BCSR10)		lbz	r5, LO(BCSR10)(r6)		andi.   r5, r5, 0xfb	stb     r5, LO(BCSR10)(r6)	#ifdef INCLUDE_DDR_SDRAM	/* Memory mapped region base address */		WRITEADR(r6,r7,M83XX_DDRLAWBARn(CCSBAR,0), \		 DDR_SDRAM_LOCAL_ADRS)	 	WRITEADR(r6,r7,M83XX_DDRLAWARn(CCSBAR,0), \		 LAWAR_ENABLE  | LAWAR_SIZE_256MB ) 	nop	nop	nop	nop	isync					/* Initialize the DDR Memory controller */        lis	r6, HI(DDRBA)        ori	r6, r6, LO(DDRBA)		/* r6 = DDR base */	WRITEOFFSET(r6,r7,0xf00, 0x202c0000)   /* CAS latency 2.5 Assumed */	WRITEOFFSET(r6,r7,(CS0_BNDS), 0x00000007)	WRITEOFFSET(r6,r7,(CS1_BNDS), 0x0008000f)	WRITEOFFSET(r6,r7,(CS2_BNDS), 0x00000000)	WRITEOFFSET(r6,r7,(CS3_BNDS), 0x00000000)	WRITEOFFSET(r6,r7,(CS0_CONFIG), 0x80000101)	WRITEOFFSET(r6,r7,(CS1_CONFIG), 0x80000101)	WRITEOFFSET(r6,r7,(CS2_CONFIG), 0x00000101)	WRITEOFFSET(r6,r7,(CS3_CONFIG), 0x00000101)		WRITEOFFSET(r6,r7,(TIMING_CFG_1), 0x36332321)	WRITEOFFSET(r6,r7,(TIMING_CFG_2), 0x00000800)#ifdef USE_32BIT_DDR	WRITEOFFSET(r6,r7,(DDR_SDRAM_CFG), 0x420c8000)#else	WRITEOFFSET(r6,r7,(DDR_SDRAM_CFG), 0x42008000)#endif	WRITEOFFSET(r6,r7,(DDR_SDRAM_MODE_CFG), 0x00000022)	WRITEOFFSET(r6,r7,(DDR_SDRAM_INTERVAL), 0x04060100)	WRITEOFFSET(r6,r7,(DDR_SDRAM_CLK_CNTRL), 0x82000000)	lis  r7,0x0004	mtctr r7delayddr1:	nop	bdnz delayddr1#ifdef USE_32BIT_DDR	WRITEOFFSET(r6,r7,(DDR_SDRAM_CFG), 0xc20c8000)#else	WRITEOFFSET(r6,r7,(DDR_SDRAM_CFG), 0xc2008000)#endif			sync	isync		#ifdef INCLUDE_ECC	WRITEOFFSET(r6,r7,(DDR_ERR_DISABLE), 0x00000000)	WRITEOFFSET(r6,r7,(DDR_ERR_SBE), 0x00ff0000)	isync	sync	lis     r7, 0x1	mtspr   9,  r7eccDelayLoop:	nop	bdnz    eccDelayLoop	WRITEOFFSET(r6,r7,(DDR_SDRAM_CFG), 0xe2000000)#endif	isync	#endif /* INCLUDE_DDR_SDRAM */#ifdef INCLUDE_LBC_SDRAM	/* Initialise SDRAM */SdramInit:	/* Memory mapped region base address */		WRITEADR(r6,r7,M83XX_LBLAWBARn(CCSBAR,1), (LBC_SDRAM_LOCAL_ADRS))	WRITEADR(r6,r7,M83XX_LBLAWARn(CCSBAR,1), \		 (LAWAR_ENABLE |  LAWAR_SIZE_64MB ))		lis  r6,HI(M83XX_LBLAWARn(CCSBAR,1))	ori  r6,r6,LO(M83XX_LBLAWARn(CCSBAR,1))	lwz  r7,0(r6)        isync 	/* load OR2 */	WRITEADR(r6,r7,QUICC_OR2 (CCSBAR), \		 (LBC_SDRAM_LOCAL_SIZE_MASK & 0xffff0000) | 0x6901)	/* load BR2 */	WRITEADR(r6,r7,QUICC_BR2 (CCSBAR), \		 (LBC_SDRAM_LOCAL_ADRS & 0xffff0000) | \		 0x1861)	/* Pre-charge all banks */	WRITEADR(r6,r7,QUICC_LSDMR(CCSBAR),0x2862D733 ) 	lis     r9,HIADJ(LBC_SDRAM_LOCAL_ADRS)        addi    r9, r9, LO(LBC_SDRAM_LOCAL_ADRS) 	/* do a single write to an arbitrary location */	addi    r5,0,0x00FF      /* Load 0x000000FF into r5 */	stb     r5,0(r9)         /* Write 0xFF to SDRAM address - bits [24-31] */	isync	/* issue a "Auto Refresh" command to SDRAM */	WRITEADR(r6,r7,QUICC_LSDMR(CCSBAR),0x0862D733) 	/* do a single write to an arbitrary location */	addi    r5,0,0x00FF      /* Load 0x000000FF into r5 */	stb     r5,0(r9)         /* Write 0xFF to SDRAM address - bits [24-31] */	isync	/* issue a "Auto Refresh" command to SDRAM */	WRITEADR(r6,r7,QUICC_LSDMR(CCSBAR),0x0862D733) 	/* do a single write to an arbitrary location */	addi    r8,0,0x00FF      /* Load 0x000000FF into r8 */	stb     r8,0(r9)         /* Write 0xFF to address R9  */	stb     r8,1(r9)         /* Write 0xFF to address R9  */	stb     r8,2(r9)         /* Write 0xFF to address R9  */	stb     r8,3(r9)         /* Write 0xFF to address R9  */	stb     r8,4(r9)         /* Write 0xFF to address R9  */	stb     r8,5(r9)         /* Write 0xFF to address R9  */	stb     r8,6(r9)         /* Write 0xFF to address R9  */	stb     r8,7(r9)         /* Write 0xFF to address R9  */		/* issue a "Mode Register Write" command to SDRAM */	WRITEADR(r6,r7,QUICC_LSDMR(CCSBAR),0x1862D733) 	/* do a single write to an arbitrary location */	addi    r8,0,0x00FF      /* Load 0x000000FF into r8 */	stb     r8,0(r9)         /* Write 0xFF to address R9 - bits [24-31] */	/* enable refresh services and put SDRAM into normal operation  */		WRITEADR(r6,r7,QUICC_LSDMR(CCSBAR),0x4062D733)	/* program the MRTPR */	addi    r5,0,TPR  /* MRTPR[TPR] */        lis     r6, HIADJ (QUICC_MRTPR (CCSBAR))        addi    r6, r6, LO (QUICC_MRTPR (CCSBAR))	sth     r5, 0x0 (r6)      /* store upper half-word */	/* program the LSRT */	addi    r5,0,LSRT_VALUE        lis     r6, HIADJ (QUICC_LSRT (CCSBAR))        addi    r6, r6, LO (QUICC_LSRT (CCSBAR))	stb     r5, 0x0 (r6)      /* store byte - bits[24-31] */	isync		lis     r9, HI(LBC_SDRAM_LOCAL_ADRS)	ori     r9,r9, LO(LBC_SDRAM_LOCAL_ADRS)	lis	r7, HIADJ(0x100)      /* Loop 256 times */	addi    r7, r7, LO(0x100)	mtspr	9,r7             /* Load spr CTR with 8 */	lis 	r8,0x5555      /* Load 0x000000FF into r8 */        ori     r8,r8,0x5555SdramWrLoop2:		stw  	r8,0(r9)        	/* Write 0xFF to address R9 */	addi    r9,r9,4                 /* Move R9 to next byte */	addi    r8,r8,1                 /* Add 1 to r8 */	bc   	16,0,SdramWrLoop2	/* Decrement CTR, and possibly branch */#endif  /* INCLUDE_LBC_SDRAM */	WRITEADR(r6,r7, M83XX_PCILAWBARn(CCSBAR,0),0x80000000)	WRITEADR(r6,r7, M83XX_PCILAWBARn(CCSBAR,1),0x90000000)		WRITEADR(r6,r7, M83XX_PCILAWARn(CCSBAR,0),0x8000001b)	WRITEADR(r6,r7, M83XX_PCILAWARn(CCSBAR,1),0x8000001b)		warm:	#ifdef INCLUDE_PCI        /* Set the pciAutoconfig check to FALSE */	xor     r5,r5,r5                /* Zero r5 */	lis     r6,HIADJ(PCI_AUTO_CONFIG_ADRS)                   	addi	r6,r6,LO(PCI_AUTO_CONFIG_ADRS)	stw     r5,0(r6)#endif /* INCLUDE_PCI */		#if 0	lis	r6, HIADJ (BCSR1)	/* Make sure flash unprotected */	lbz	r5, LO(BCSR1)(r6)		ori     r5, r5, BCSR1_FLASH_PRT	stb     r5, LO(BCSR1)(r6)		lis	r6, HIADJ (BCSR0)	/* Make sure flash unprotected */	lbz	r5, LO(BCSR0)(r6)		ori     r5, r5, LO(~BCSR0_SIGNAL1)	stb     r5, LO(BCSR0)(r6)#endif		/* turn the instruction cache ON for faster FLASH ROM boots */	mfspr   r4, HID0	ori	r4, r4, _PPC_HID0_ICE | _PPC_HID0_ICFI	/* set ICE & ICFI */	rlwinm	r5, r4, 0, _PPC_HID0_BIT_ICFI + 1, _PPC_HID0_BIT_ICFI - 1					/* clear the ICFI bit */	isync	/*	 * The setting of the instruction cache enable (ICE) bit must be	 * preceded by an isync instruction to prevent the cache from being	 * enabled or disabled while an instruction access is in progress.	 */	mtspr	HID0, r4	/* Enable Instr Cache & Inval cache */	sync	mtspr	HID0, r5	/* using 2 consec instructions */				/* E300 core recommendation */        isync                                		/* 	Modifying ACR to increase pipeline depth, must retain 	rsvd bits values. Need to allow for Errata ARB3	*/	li      r5, 0x100	mtctr   r5	lis     r4, HI(CCSBAR)	ori     r4, r4, LO(CCSBAR)        lwz     r5, M83XX_ACR(0)(r4)	        lis     r6, 0x0003	ori     r6, r6, 0x0300	or      r5, r5, r6	b       iCacheLineLoad /* instruction cache line load */	.balign 32loadACR:	        stw     r5, M83XX_ACR(0)(r4)	isyncdelay:	/* loop idle in cache while ACR update completes */	nop		bdnz  delay	b continueBootiCacheLineLoad:		b loadACRcontinueBoot:	        /* initialize the stack pointer */	lis	sp, HIADJ(STACK_ADRS)	addi	sp, sp, LO(STACK_ADRS)		/* go to C entry point */	addi	sp, sp, -FRAMEBASESZ		/* get frame stack */	/* 	 * calculate C entry point: routine - entry point + ROM base 	 * routine	= romStart	 * entry point	= romInit	= R7	 * ROM base	= ROM_TEXT_ADRS = R8	 * C entry point: romStart - R7 + R8 	 */        lis     r7, HIADJ(romInit)        addi    r7, r7, LO(romInit)         lis     r8, HIADJ(ROM_TEXT_ADRS)        addi    r8, r8, LO(ROM_TEXT_ADRS)         lis	r6, HIADJ(romStart)	        addi	r6, r6, LO(romStart)	/* load R6 with C entry point */	sub	r6, r6, r7		/* routine - entry point */	add	r6, r6, r8 		/* + ROM base */	mtspr	LR, r6				/* save destination address*/						/* into LR register */	blr				/* jump to the C entry point */

⌨️ 快捷键说明

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