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

📄 rominit.s

📁 vxworks MPC8541 BSP
💻 S
📖 第 1 页 / 共 2 页
字号:
	mtctr   r6delayLoop:	bdnz    delayLoop	/* Read LBC DLL and get tap reading */	        lis     r6, HIADJ(M85XX_LBCDLLSR(CCSBAR))        addi    r6, r6, LO(M85XX_LBCDLLSR(CCSBAR))        lwz     r3, 0(r6)	andi.   r3, r3, 0x7ff	/* Start loop which terminates after ten cycles */	li      r4, 11retestLbcDll:	addi    r4, r4, -1	cmpwi   r4, 0	/* terminate loop and generate check stop */	beq     checkStop   	/* Delay not more than 2500 CCB clock cycles */ 	li      r5, 2000	mtctr   r5lbcDllDelay:	bdnz    lbcDllDelay	/* Read latest tap value */        lwz     r8, 0(r6)	andi.   r5, r8, 0x7ff	/* diff between previous value */	subf    r7, r5, r3	/* Move latest value to previous */	mr      r3, r5		/* Check difference is not greater than 10 */		cmpwi   r7, 10	bgt     retestLbcDll	cmpwi   r7, -10	blt     retestLbcDll	/* Re-read dll reg and lock */	lwz     r3, 0(r6)        slwi    r3,r3,16	lis     r5,0x8000	or      r3,r3,r5	stw     r3, 0(r6)        isync	sync	mbar 0	li      r4, 0x1retestDll:		/* Read DDR DLL and test for override complete */	        lis     r6, HI(M85XX_DDRDLLCR(CCSBAR))        ori     r6, r6, LO(M85XX_DDRDLLCR(CCSBAR))        lwz     r3, 0(r6)	lis     r7, HI(0x81000100)	ori     r7, r7 ,LO(0x81000100)	cmpw    r7, r3	beq     dllDone	/* if override not complete reset DDR device and try again */	lis     r6, HI(M85XX_DEVDISR(CCSBAR))	ori     r6, r6, LO(M85XX_DEVDISR(CCSBAR))	lwz     r3, 0(r6)	oris    r3, r3, (M85XX_DEVDISR_DDR >> 16)	stw     r3, 0(r6)	mtctr   r4dllDelay:	nop	bdnz    dllDelay	lis     r6, HI(M85XX_DEVDISR(CCSBAR))	ori     r6, r6, LO(M85XX_DEVDISR(CCSBAR))	lwz     r7, 0(r6)	lis	r8, HI(~M85XX_DEVDISR_DDR)	ori	r8, r8, LO(~M85XX_DEVDISR_DDR)	and     r7, r7, r8	stw     r7, 0(r6)	addi    r4, r4, 1	b retestDlldllDone:	#ifdef INCLUDE_DDR_SDRAM	/* Memory mapped region base address */		WRITEADR(r6,r7,M85XX_LAWBAR0(CCSBAR), 		 DDR_SDRAM_LOCAL_ADRS >> LAWBAR_ADRS_SHIFT)	 	WRITEADR(r6,r7,M85XX_LAWAR0(CCSBAR), 		 LAWAR_ENABLE | LAWAR_TGTIF_DDRSDRAM | LAWAR_SIZE_256MB)         mbar 0			/* Initialize the DDR Memory controller */        lis	r6, HI(DDRBA)        ori	r6, r6, LO(DDRBA)		/* r6 = DDR base */	WRITEOFFSET(r6,r7,(CS0_BNDS), 0x0000000f)	WRITEOFFSET(r6,r7,(CS1_BNDS), 0x00000000)	WRITEOFFSET(r6,r7,(CS2_BNDS), 0x00000000)	WRITEOFFSET(r6,r7,(CS3_BNDS), 0x00000000)	WRITEOFFSET(r6,r7,(CS0_CONFIG), 0x80000102)	WRITEOFFSET(r6,r7,(CS1_CONFIG), 0x00000000)	WRITEOFFSET(r6,r7,(CS2_CONFIG), 0x00000000)	WRITEOFFSET(r6,r7,(CS3_CONFIG), 0x00000000)		WRITEOFFSET(r6,r7,(TIMING_CFG_1), 0x37344321)	WRITEOFFSET(r6,r7,(TIMING_CFG_2), 0x00000800)	WRITEOFFSET(r6,r7,(DDR_SDRAM_CFG), 0x42000000)	WRITEOFFSET(r6,r7,(DDR_SDRAM_MODE_CFG), 0x00000062)	WRITEOFFSET(r6,r7,(DDR_SDRAM_INTERVAL), 0x05200100)#if 0	WRITEOFFSET(r6,r7,(DDR_SDRAM_CLK_CNTL), 0x80000000)#endif	WRITEOFFSET(r6,r7,(DDR_SDRAM_CFG), 0xc2000000)#ifdef INCLUDE_ECC	WRITEOFFSET(r6,r7,(DDR_ERR_DISABLE), 0x00000000)	WRITEOFFSET(r6,r7,(DDR_ERR_SBE), 0x00ff0000)	isync	sync	mbar 0	lis     r7, 0x1	mtspr   9,  r7eccDelayLoop:	nop	bdnz    eccDelayLoop	WRITEOFFSET(r6,r7,(DDR_SDRAM_CFG), 0xe2000000)#endif	isync	sync	mbar 0	#endif /* INCLUDE_DDR_SDRAM */	WRITEADR(r6,r7,M85XX_BR0(CCSBAR), ((FLASH0_MEM_ADRS & LBC_ADRS_MASK))     | 0x0801)	WRITEADR(r6,r7,M85XX_OR0(CCSBAR),~((FLASH0_MEM_SIZE & LBC_ADRS_MASK) - 1) | 0x0647)    mbar 0	WRITEADR(r6,r7,M85XX_LAWBAR1(CCSBAR), \	         (LBC_MEM_LOCAL_ADRS >> LAWBAR_ADRS_SHIFT))	WRITEADR(r6,r7,M85XX_LAWAR1(CCSBAR),		 (LAWAR_ENABLE | \	          LAWAR_TGTIF_LBC | \		  LAWAR_SIZE_256MB ))        mbar 0	WRITEADR(r6,r7,M85XX_OR1(CCSBAR),~((LBC_CS1_SIZE & LBC_ADRS_MASK) - 1) | 0x0667)	WRITEADR(r6,r7,M85XX_BR1(CCSBAR), ((LBC_CS1_ADRS & LBC_ADRS_MASK))     | 0x1801)	WRITEADR(r6,r7,M85XX_OR2(CCSBAR),~((LBC_CS2_SIZE & LBC_ADRS_MASK) - 1) | 0x0667)	WRITEADR(r6,r7,M85XX_BR2(CCSBAR), ((LBC_CS2_ADRS & LBC_ADRS_MASK))     | 0x1801)	WRITEADR(r6,r7,M85XX_OR4(CCSBAR),~((LBC_CS4_SIZE & LBC_ADRS_MASK) - 1) | 0x0e87)	WRITEADR(r6,r7,M85XX_BR4(CCSBAR), ((LBC_CS4_ADRS & LBC_ADRS_MASK))     | 0x0801)	WRITEADR(r6,r7,M85XX_OR5(CCSBAR),~((LBC_CS5_SIZE & LBC_ADRS_MASK) - 1) | 0x0e87)	WRITEADR(r6,r7,M85XX_BR5(CCSBAR), ((LBC_CS5_ADRS & LBC_ADRS_MASK))     | 0x0801)	WRITEADR(r6,r7,M85XX_OR6(CCSBAR),~((LBC_CS6_SIZE & LBC_ADRS_MASK) - 1) | 0x0ff7)	WRITEADR(r6,r7,M85XX_BR6(CCSBAR), ((LBC_CS6_ADRS & LBC_ADRS_MASK))     | 0x0801)#ifdef INSTALL_GCSA	WRITEADR(r6,r7,M85XX_OR7(CCSBAR),~((LBC_CS7_SIZE & LBC_ADRS_MASK) - 1) | 0x0ff7)	WRITEADR(r6,r7,M85XX_BR7(CCSBAR), ((LBC_CS7_ADRS & LBC_ADRS_MASK))     | 0x1001)#elif defined(INSTALL_GCSD)	WRITEADR(r6,r7,M85XX_OR7(CCSBAR),~((LBC_CS7_SIZE & LBC_ADRS_MASK) - 1) | 0x0ff7)	WRITEADR(r6,r7,M85XX_BR7(CCSBAR), ((LBC_CS7_ADRS & LBC_ADRS_MASK))     | 0x0801)#endif    mbar 0#ifdef INCLUDE_LBC_SDRAM	/* Initialise SDRAM */SdramInit:	/* Memory mapped region base address */		WRITEADR(r6,r7,M85XX_LAWBAR2(CCSBAR), \	         (LBC_SDRAM_LOCAL_ADRS >> LAWBAR_ADRS_SHIFT) )	WRITEADR(r6,r7,M85XX_LAWAR2(CCSBAR),		 (LAWAR_ENABLE | \	          LAWAR_TGTIF_LBC | \		  LAWAR_SIZE_64MB ))	        mbar 0 	/* load OR3 */	WRITEADR(r6,r7,M85XX_OR3 (CCSBAR), ~((LBC_SDRAM_LOCAL_SIZE & LBC_ADRS_MASK) - 1) | 0x6901)	/* load BR3 */	WRITEADR(r6,r7,M85XX_BR3 (CCSBAR), \		 ((LBC_SDRAM_LOCAL_ADRS & LBC_ADRS_MASK)) | \		 0x1861)	/* Pre-charge all banks */	WRITEADR(r6,r7,M85XX_LSDMR(CCSBAR),0x2863B723 ) 	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] */	mbar 0	/* issue a "Auto Refresh" command to SDRAM */	WRITEADR(r6,r7,M85XX_LSDMR(CCSBAR),0x0863B723) 	/* 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] */	mbar 0	/* issue a "Auto Refresh" command to SDRAM */	WRITEADR(r6,r7,M85XX_LSDMR(CCSBAR),0x0863B723) 	/* 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,M85XX_LSDMR(CCSBAR),0x1863B723) 	/* 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,M85XX_LSDMR(CCSBAR),0x4063B723)	/* program the MRTPR */	addi    r5,0,TPR	 /* MRTPR[TPR] */        lis     r6, HIADJ (M85XX_MRTPR (CCSBAR))        addi    r6, r6, LO (M85XX_MRTPR (CCSBAR))	sth     r5, 0x0 (r6)      /* store upper half-word */	/* program the LSRT */	addi    r5,0,0x20        lis     r6, HIADJ (M85XX_LSRT (CCSBAR))        addi    r6, r6, LO (M85XX_LSRT (CCSBAR))	stb     r5, 0x0 (r6)      /* store byte - bits[24-31] */	mbar 0	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 */	/* Now that memory is stable we reset TLB entries for standard 	 * operation 	 */	        /*         * TLB1 #0.  ROM - cached writethrough 0xff000000 -> 0xff000000.  	 * 16MB         * Attributes: SX/SW/SR **PROTECTED**         */        addis  r4,0,0x1000           /* TLBSEL = TLB1(CAM) , ESEL = 0 */         ori    r4,r4,0x0000        mtspr  MAS0, r4        addis  r5,0,0xc000           /* V = 1, IPROT = 1, TID = 0*/        ori    r5,r5,_MMU_TLB_SZ_16M  /* TS = 0, TSIZE = 16 MByte page size*/        mtspr  MAS1, r5        addis  r6,0,0xff00           /* EPN = 0xff000000*/        ori    r6,r6,0x0016          /* WIMGE = 10110 */        mtspr  MAS2, r6        addis  r7,0,0xff00           /* RPN = 0xff000000*/        ori    r7,r7,0x003f          /* Supervisor XWR*/        mtspr  MAS3, r7        tlbwe                 tlbsync                             /*         * TLB1 #1.  Main SDRAM - Cached	 *           LOCAL_MEM_LOCAL_ADRS -> LOCAL_MEM_LOCAL_ADRS + LOCAL_MEM_SIZE         * Attributes: UX/UW/UR/SX/SW/SR         */        addis  r4,0,0x1001           /* TLBSEL = TLB1(CAM) , ESEL = 1*/        ori    r4,r4,0x0000        mtspr  MAS0, r4        addis  r5,0,0xc000           /* V = 1, IPROT = 1, TID = 0*/        ori    r5,r5,_MMU_TLB_SZ_256M  /* TS = 0, TSIZE = 256 MByte page size*/        mtspr  MAS1, r5        addis  r6,0,HI(LOCAL_MEM_LOCAL_ADRS) /* EPN = LOCAL_MEM_LOCAL_ADRS */        ori    r6,r6,0x0000          /* WIMGE = 00000 */        mtspr  MAS2, r6        addis  r7,0,HI(LOCAL_MEM_LOCAL_ADRS)  /* RPN = LOCAL_MEM_LOCAL_ADRS */        ori    r7,r7,0x003f          /* User/Supervisor XWR*/        mtspr  MAS3, r7        tlbwe                               tlbsync                                      /*         * TLB1 #2.  CCSRBAR - guarded 0xfe000000 -> 0xfe000000.  	 * 16MB         * Attributes: SX/SW/SR         */        addis  r4,0,0x1002           /* TLBSEL = TLB1(CAM) , ESEL = 0 */         ori    r4,r4,0x0000        mtspr  MAS0, r4        addis  r5,0,0x8000           /* V = 1, IPROT = 0, TID = 0*/        ori    r5,r5,_MMU_TLB_SZ_16M  /* TS = 0, TSIZE = 16 MByte page size*/        mtspr  MAS1, r5        addis  r6,0,HI(CCSBAR)           /* EPN = 0xfe000000*/        ori    r6,r6,0x0016          /* WIMGE = 11110 */        mtspr  MAS2, r6        addis  r7,0,HI(CCSBAR)           /* RPN = 0xfe000000*/        ori    r7,r7,0x003f          /* Supervisor XWR*/        mtspr  MAS3, r7        tlbwe                 tlbsync      	                       b  coldcheckStop:		ba 0x0				FUNC_END(resetEntry)#if   defined(_GNU_TOOL)	.section .reset, "ax", @progbits#elif defined(_DIAB_TOOL)	.section .reset, 4, "rx"#else#error "Please add a correctly spelled .section directive for your toolchain."#endifFUNC_BEGIN(resetVector)	b	resetEntryFUNC_END(resetVector)

⌨️ 快捷键说明

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