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

📄 rominit.s

📁 VxWorks下 Mv2100的BSP源码
💻 S
📖 第 1 页 / 共 3 页
字号:
	addi	r4, r0, 0x1800		/* preprocessor work-around (0x8800) */	addi	r4, r4, 0x7000		/* r4 = ICE & ICFI bit */        mtspr   HID0, r4                /* HID0 = Enable/Inval IC */	isync	addi	r3, r0, 0x0800		/* r3 = ICFI bit */	andc	r4, r4, r3		/* r4 = clear ICFI bit */        mtspr   HID0, r4                /* HID0 = Enable IC */	isync        /* Wait for memory refresh to occur. */        bl	waitRefresh        /*          * Read I2C to get SPD for "real" SDRAM timing values.           * The I2C routines are written in 'C', so we need a stack frame.         */        stwu    sp,-FRAMEBASESZ(sp)     /* create an ABI stack frame */        addi    r3,sp,8                 /* point to register image area */	or	r22,r3,r3	        /* save structure address */        bl      sysMemParamConfig       /* calculate memory parameters */	or	r29,r3,r3	        /* save size */        lwz	r8,MCCR1(r22)	        /* load r8 with mem control config 1 */	sync				/* ensure memory access is complete */        cmpli   0,0,r8,0		/* check for SPD error MCCR1 = 0 */        bc	4,2,goodSpd		/* test for non-0 */        addi    sp,sp,FRAMEBASESZ       /* remove ABI stack frame */        b	goCEntry		/* error, leave default mem cnfg */goodSpd:        lwz     r9,MCCR2(r22)	        /* load mem control config 2 */        lwz     r10,MCCR3(r22)          /* load mem control config 3 */        lwz     r11,MCCR4(r22)          /* load mem control config 4 */        lwz     r12,MSR3_2_1_0(r22)     /* load mem start address 3/2/1/0 */        lwz     r13,MSR7_6_5_4(r22)     /* load mem start address 7/6/5/4 */        lwz     r14,MSER3_2_1_0(r22)    /* load ext mem start addr 3/2/1/0 */        lwz     r15,MSER7_6_5_4(r22)    /* load ext mem start addr 7/6/5/4 */        lwz     r16,MER3_2_1_0(r22)     /* load mem ending addr 3/2/1/0 */        lwz     r17,MER7_6_5_4(r22)     /* load mem ending addr 7/6/5/4 */        lwz     r18,MEER3_2_1_0(r22)    /* load ext mem end addr 3/2/1/0 */        lwz     r19,MEER7_6_5_4(r22)    /* load ext mem end addr 7/6/5/4 */        lbz     r20,MPMR(r22)           /* load mem page mode */        lbz     r21,MBER(r22)           /* load mem bank enable */        addi    sp,sp,FRAMEBASESZ       /* remove ABI stack frame */        /* Turn off memory controller. */	addis	r6,r0,HIADJ(CNFG_PCI_HOST_BRDG)	ori	r6,r6,LO(CNFG_PCI_HOST_BRDG)	addi	r3,r6,KAHLUA_CFG_MEM_CNTL_CFG_REG1 /* add MCCR1 offset */	addis	r7,r0,HIADJ(PCI_MSTR_PRIMARY_CAR)	ori	r7,r7,LO(PCI_MSTR_PRIMARY_CAR)	stwbrx	r3,r0,r7		/* write address of MCCR1 to CAR */	sync				/* ensure memory access is complete */	addis	r4,r0,HIADJ(PCI_MSTR_PRIMARY_CDR)	ori	r4,r4,LO(PCI_MSTR_PRIMARY_CDR)	lwbrx	r5,r0,r4		/* read MCCR1 */	sync				/* ensure memory access is complete */	addis	r3,r0,HIADJ(KAHLUA_MCC1_MEMGO)	ori	r3,r3,LO(KAHLUA_MCC1_MEMGO)	andc	r5,r5,r3		/* and in complement of MEMGO */	stwbrx	r5,r0,r4		/* write new value to MCCR1 */	sync				/* ensure memory access is complete */	lwbrx	r5,r0,r4		/* read MCCR1 */	addis	r3,r0,HIADJ(0x00600000) /* mask R/O bits */	ori	r3,r3,LO(0x00600000)	and	r5,r5,r3		/* reg5 &= reg3 */	or	r8,r8,r5		/* reg8 |= reg5 */	stwbrx	r8,r0,r4		/* write calculated value to MCCR1 */	sync				/* ensure memory access is complete */	addi	r3,r6,KAHLUA_CFG_MEM_CNTL_CFG_REG2 /* add MCCR2 offset */	stwbrx	r3,r0,r7		/* write address of MCCR2 to CAR */	sync				/* ensure memory access is complete */	addis	r8,r0,HIADJ(PCI_MSTR_PRIMARY_CDR)	ori	r8,r8,LO(PCI_MSTR_PRIMARY_CDR)	stwbrx	r9,r0,r8		/* write calculated value to MCCR2 */	sync				/* ensure memory access is complete */	addi	r3,r6,KAHLUA_CFG_MEM_CNTL_CFG_REG3 /* add MCCR3 offset */	stwbrx	r3,r0,r7		/* write address of MCCR3 to CAR */	sync				/* ensure memory access is complete */	stwbrx	r10,r0,r8		/* write calculated value to MCCR3 */	sync				/* ensure memory access is complete */	addi	r3,r6,KAHLUA_CFG_MEM_CNTL_CFG_REG4 /* add MCCR4 offset */	stwbrx	r3,r0,r7		/* write address of MCCR4 to CAR */	sync				/* ensure memory access is complete */	lwbrx	r5,r0,r4		/* read MCCR4 */	addis	r3,r0,HIADJ(0x00A00000) /* mask R/O bits */	ori	r3,r3,LO(0x00A00000)	and	r5,r5,r3		/* reg5 &= reg3 */	or	r11,r11,r5		/* reg11 |= reg5 */	stwbrx	r11,r0,r8		/* write calculated value to MCCR4 */	sync				/* ensure memory access is complete */	addi	r3,r6,KAHLUA_CFG_MEM_STRT_ADR_REG /* add MSR3/2/1/0 offset */	stwbrx	r3,r0,r7		/* write address of MSR3/2/1/0 to CAR */	sync				/* ensure memory access is complete */	stwbrx	r12,r0,r8		/* write calc'd value to MSR3/2/1/0 */	sync				/* ensure memory access is complete */	addi	r3,r6,KAHLUA_CFG_MEM_STRT_UADR_REG /* add MSR7/6/5/4 offset */	stwbrx	r3,r0,r7		/* write address of MSR7/6/5/4 to CAR */	sync				/* ensure memory access is complete */	stwbrx	r13,r0,r8		/* write calc'd value to MSR7/6/5/4 */	sync				/* ensure memory access is complete */	addi	r3,r6,KAHLUA_CFG_EXT_MEM_STRT_ADR_REG /* MSER3/2/1/0 offset */	stwbrx	r3,r0,r7		/* write addr of MSER3/2/1/0 to CAR */	sync				/* ensure memory access is complete */	stwbrx	r14,r0,r8		/* write calc'd value to MSER3/2/1/0 */	sync				/* ensure memory access is complete */	addi	r3,r6,KAHLUA_CFG_EXT_MEM_ST_UADR_REG /* MSER7/6/5/4 offset */	stwbrx	r3,r0,r7		/* write addr of MSER7/6/5/4 to CAR */	sync				/* ensure memory access is complete */	stwbrx	r15,r0,r8		/* write calc'd value to MSER7/6/5/4 */	sync				/* ensure memory access is complete */	addi	r3,r6,KAHLUA_CFG_MEM_END_ADR_REG /* MER3/2/1/0 offset */	stwbrx	r3,r0,r7		/* write addr of MER3/2/1/0 to CAR */	sync				/* ensure memory access is complete */	stwbrx	r16,r0,r8		/* write calc'd value to MER3/2/1/0 */	sync				/* ensure memory access is complete */	addi	r3,r6,KAHLUA_CFG_MEM_END_UADR_REG /* MER7/6/5/4 offset */	stwbrx	r3,r0,r7		/* write addr of MER7/6/5/4 to CAR */	sync				/* ensure memory access is complete */	stwbrx	r17,r0,r8		/* write calc'd value to MER7/6/5/4 */	sync				/* ensure memory access is complete */	addi	r3,r6,KAHLUA_CFG_EXT_MEM_END_ADR_REG /* MEER3/2/1/0 offset */	stwbrx	r3,r0,r7		/* write addr of MEER3/2/1/0 to CAR */	sync				/* ensure memory access is complete */	stwbrx	r18,r0,r8		/* write calc'd value to MEER3/2/1/0 */	sync				/* ensure memory access is complete */	addi	r3,r6,KAHLUA_CFG_EXT_MEM_END_UADR_REG /* MEER7/6/5/4 offset */	stwbrx	r3,r0,r7		/* write addr of MEER7/6/5/4 to CAR */	sync				/* ensure memory access is complete */	stwbrx	r19,r0,r8		/* write calc'd value to MEER7/6/5/4 */	sync				/* ensure memory access is complete */	addi	r3,r6,KAHLUA_CFG_PAGE_MODE_CTR_TIMER /* add page mode offset */	stwbrx	r3,r0,r7		/* write addr of page mode to CAR */        sync                            /* ensure memory access is complete */        stb     r20,0(r8)               /* write page mode data to CDR */        sync                            /* ensure memory access is complete */	addi	r3,r6,KAHLUA_CFG_MEM_BANK_ENABLE_REG /* add mem bank enable */        stwbrx  r3,r0,r7                /* write config. space addr. to CAR */        sync                            /* ensure memory access is complete */        stb     r21,0(r8)               /* write data to CDR */        sync                            /* ensure memory access is complete */#ifdef INCLUDE_ECC	addi	r3,r6,KAHLUA_CFG_ERROR_ENABLE1 /* add error enable */        stwbrx  r3,r0,r7                /* write config. space addr. to CAR */        sync                            /* ensure memory access is complete */        lbz     r5,0(r4)                /* read error enable register */	sync				/* ensure memory access is complete */	addis	r3,r0,HIADJ(KAHLUA_EE1_MEM_READ_PARITY)	ori	r3,r3,LO(KAHLUA_EE1_MEM_READ_PARITY)	or	r5,r5,r3		/* or in KAHLUA_EE1_MEM_READ_PARITY */	stb	r5,0(r4)		/* write new value to error enable */	sync				/* ensure memory access is complete */#endif /* INCLUDE_ECC */        /* Turn on memory controller. */	addi	r3,r6,KAHLUA_CFG_MEM_CNTL_CFG_REG1 /* MCCR1 offset */	stwbrx	r3,r0,r7		/* write address of MCCR1 to CAR */	sync				/* ensure memory access is complete */	lwbrx	r5,r0,r4		/* read MCCR1 */	sync				/* ensure memory access is complete */	addis	r3,r0,HIADJ(KAHLUA_MCC1_MEMGO)	ori	r3,r3,LO(KAHLUA_MCC1_MEMGO)	or	r5,r5,r3		/* or in MEMGO */	stwbrx	r5,r0,r4		/* write new value to MCCR1 */	sync				/* ensure memory access is complete */        /* Wait for memory refresh to occur. */        bl	waitRefreshskipMemGo:	/* Turn off data and instruction cache control bits */		mfspr   r3, HID0	isync	rlwinm	r4, r3, 0, 18, 15	/* r4 has ICE and DCE bits cleared */	sync	isync	mtspr	HID0, r4		/* HID0 = r4 data/instr cache disabld */	isync#ifdef USER_I_CACHE_ENABLE 	/* turn the Instruction cache ON for faster ROM access */	mfspr   r4, HID0	ori	r4, r4, 0x8800		/* set ICE & ICFI bit */        mtspr   HID0, r4                /* Enable Instr Cache & Inval cache */	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.         */        rlwinm  r3, r4, 0, 21, 19	/* clear the ICFI bit */        mtspr   HID0, r3                /* using 2 consec instructions */	isync#endif#ifdef INCLUDE_ECC        cmpli   0,0,r31,BOOT_COLD	/* check for warm boot */        bc	4,2,goCEntry		/* if warm boot, skip scrub */	/* Scrub memory and initialize ECC */	addis	r3,r0,0x0000		/* memory starting address */	ori	r3,r3,0x0000		/* memory starting address */	add	r4,r3,r29		/* memory ending address + 1 */	bl	kahluaScrub		/* (kahluaScrub) */#endif /* INCLUDE_ECC */goCEntry:	/* go to C entry point */	or	r3, r31, r31	addi	sp, sp, -FRAMEBASESZ	/* get frame stack */        lis     r6, HI(romStart)        ori	r6, r6, LO(romStart)        lis     r7, HI(romInit)        ori	r7, r7, LO(romInit)        lis     r8, HI(ROM_TEXT_ADRS)        ori	r8, r8, LO(ROM_TEXT_ADRS)	sub	r6, r6, r7	add	r6, r6, r8 	mtlr	r6	blr/******************************************************************************** kahluaScrub - PCI configuration register modification.** DESCRIPTION: kahluaScrub*     this subroutine's purpose is to initialize (i.e., scrub)*     DRAM, the KAHLUA ASIC protects DRAM by utilizing ECC, so*     the scrub insures that the entire DRAM array's check bits*     are initialized to a known state**     kahluaScrub(start-address, end-address, control-flag);*     r1	= don't care, no stack is needed*     r3	= starting address of DRAM*     r4	= ending address of DRAM (plus 1)*     spr8	= return program counter** RETURNS:*     r3	= 1, DRAM ECC error detected*    		= 0, no DRAM ECC errors occurred*/	.data	.align	3	DATA_EXPORT(kahluaScrubData)kahluaScrubData:	.long	0x00000000, 0x00000000	.text	.align	3	FUNC_EXPORT(kahluaScrub)kahluaScrub:	mfspr	r16,8			/* save return instruction pointer */	or	r13,r3,r3		/* save argument #1 */	or	r14,r4,r4		/* save argument #2 */	addis	r0,r0,0			/* insure r0 is zero */	ori	r0,r0,0			/* insure r0 is zero */        /* load 64-bit number to initialize memory with */	addis	r6,r0,HI(kahluaScrubData)	ori	r6,r6,LO(kahluaScrubData)/* * setup loop specifics * * attempt a fpu register access only if kahlua has fpu enabled, * based on HID1 bit 0 being a 1 or 0.  0 = FPU enabled, 1 = FPU disabled */	mfspr	r5,1009			/* load hid1 contents */	andi.	r5,r5,0x0001		/* extract FPU available bit and test */	bc	4,2,kahluaFpuDisabled	/* if 1, don't load FPU register */	lfdu	0,0(r6)	subf	r18,r13,r14		/* calculate number of bytes */	rlwinm	r18,r18,29,3,31		/* calculate number of doubles */	addi	r17,r13,-8		/* starting address munged */	mtspr	9,r18			/* load number of doubles/words */	b	kahluaScrubLoopFpu

⌨️ 快捷键说明

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