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

📄 reset_pb1550.s

📁 RMI AU1200 BOOTLOADER(autoboot).支持从PCMCIA,IDE,SD,NAND,NOR等加载LINUX或WINCE映像。支持BIN
💻 S
📖 第 1 页 / 共 3 页
字号:
	lw		t1, bcsr_whoami(t0)	sync	and		t2, t1, PB1550_ID_MSK     	beq		zero, t2, initDDR	nopinitSDR:	li		t0, AU1550_MEM_ADDR#ifndef USE_S9	li		t1, MEM_SDCONFIGA_SDR	li		t2, MEM_SDCONFIGB_SDR	li		t3, MEM_SDMODE_SDR	li		v0, MEM_MR0_SDR#else	lw		t1, MEM_SDCONFIGA(a0)	lw		t2, MEM_SDCONFIGB(a0)	lw		t3, MEM_SDMODE(a0)	lw		v0, MEM_MR0(a0)#endif	li		t4, MEM_SDADDR0_SDR	li		t5, MEM_SDADDR1_SDR	li		t6, MEM_SDADDR2_SDR	sw		t1, mem_sdconfiga(t0)	sync	sw		t2, mem_sdconfigb(t0)	sync	sw		t3, mem_sdmode0(t0)	sw		t3, mem_sdmode1(t0)	sw		t3, mem_sdmode2(t0)	sw		t4, mem_sdaddr0(t0)	sw		t5, mem_sdaddr1(t0)	sw		t6, mem_sdaddr2(t0)	sync	/*	 * Initialization per Micron data sheet, page 9:	 * 0. Power sequence	 * 1. 100us delay	 * 2. NOP w/ CKE	 * 3. PRECHARGE ALL	 * 4. PRECHARGE ALL	 * 5. AUTO REFRESH x 2	 * 6. LOAD MODE REGISTER	 * Devices are now ready for use.	 */	/* NOP w/ CKE */	lw		t1, mem_sdconfigb(t0)	li		t2, MEM_SDCONFIGB_BA	or		t1, t2, t1	sw		t1, mem_sdconfigb(t0)	sync	/* PRECHARGE ALL */	sw		zero, mem_sdprecmd(t0)	sync	/* AUTO REFRESH x 2 */	sw		zero, mem_sdautoref(t0)	sync	sw		zero, mem_sdautoref(t0)	sync	/* LOAD MODE REGISTER */	sw		v0, mem_sdwrmd0(t0)			sync	sw		v0, mem_sdwrmd1(t0)			sync	sw		v0, mem_sdwrmd2(t0)	sync	b		initDRAMdone	nopinitDDR:	li		t0, AU1550_MEM_ADDR#ifndef USE_S9	li		t1, MEM_SDCONFIGA_DDR	li		t2, MEM_SDCONFIGB_DDR	li		t3, MEM_SDMODE_DDR	li		v0, MEM_MR0_DDR#else	lw		t1, MEM_SDCONFIGA(a0)	lw		t2, MEM_SDCONFIGB(a0)	lw		t3, MEM_SDMODE(a0)	lw		v0, MEM_MR0(a0)#endif	li		t4, MEM_SDADDR0_DDR	li		t5, MEM_SDADDR1_DDR	li		t6, MEM_SDADDR2_DDR	sw		t1, mem_sdconfiga(t0)	sync	sw		t2, mem_sdconfigb(t0)	sync	sw		t3, mem_sdmode0(t0)	sw		t3, mem_sdmode1(t0)	sw		t3, mem_sdmode2(t0)	sw		t4, mem_sdaddr0(t0)	sw		t5, mem_sdaddr1(t0)	sw		t6, mem_sdaddr2(t0)	sync	li		v1, MEM_MR1_DDR	li		a2, MEM_MR2_DDR	li		a3, MEM_MR3_DDR	/*	 * Initialization per Micron data sheet, page 72:	 * 0. Power sequence	 * 1. 200us delay	 * 2. NOP w/ CKE	 * 3. PRECHARGE ALL	 * 4. LOAD MODE REGISTER for the extended mode register (normal, not reduced, drive strength)	 * 5. LOAD MODE REGISTER for the normal mode register (DLL reset activated)	 * 6. 200 clocks of idle	 * 7. PRECHARGE ALL	 * 8. AUTO REFRESH x 2	 * 9. LOAD MODE REGISTER (DLL reset de-activated)	 * Devices are now ready for use.	 */	/* NOP w/ CKE */	lw		t1, mem_sdconfigb(t0)	li		t2, MEM_SDCONFIGB_BA	or		t1, t2, t1	sw		t1, mem_sdconfigb(t0)	sync	/* PRECHARGE ALL */	sw		zero, mem_sdprecmd(t0)	sync	/* LOAD MODE REGISTER extended mode register 3 */	sw		a3, mem_sdwrmd0(t0)	sync	sw		a3, mem_sdwrmd1(t0)	sync	sw		a3, mem_sdwrmd2(t0)	sync	/* LOAD MODE REGISTER extended mode register 2 */	sw		a2, mem_sdwrmd0(t0)	sync	sw		a2, mem_sdwrmd1(t0)	sync	sw		a2, mem_sdwrmd2(t0)	sync	/* LOAD MODE REGISTER extended mode register 1 */	sw		v1, mem_sdwrmd0(t0)	sync	sw		v1, mem_sdwrmd1(t0)	sync	sw		v1, mem_sdwrmd2(t0)	sync	/* LOAD MODE REGISTER normal mode register DLL reset */#define MR0_DLL 0x0100	ori		t1, v0, MR0_DLL	sw		t1, mem_sdwrmd0(t0)	sync	sw		t1, mem_sdwrmd1(t0)	sync	sw		t1, mem_sdwrmd2(t0)	sync	/* 200 clocks of idle */	lw		t1, mem_sdconfigb(t0)	li		t2, MEM_SDCONFIGB_BA	or		t1, t2, t1	sw		t1, mem_sdconfigb(t0)	sync	/* PRECHARGE ALL */	sw		zero, mem_sdprecmd(t0)	sync	/* AUTO REFRESH x 2 */	sw		zero, mem_sdautoref(t0)	sync	sw		zero, mem_sdautoref(t0)	sync	/* LOAD MODE REGISTER normal mode register */	sw		v0, mem_sdwrmd0(t0)	sync	sw		v0, mem_sdwrmd1(t0)	sync	sw		v0, mem_sdwrmd2(t0)	syncinitDRAMdone:	li		t0, AU1550_MEM_ADDR	/* Enable refresh */	lw		t1, mem_sdconfiga(t0)	li		t2, MEM_SDCONFIGA_E	or		t1, t2, t1	sw		t1, mem_sdconfiga(t0)	sync	/* wait 1mS after setup */	li		t1, MEM_1MS1:	add		t1, -1	bne		t1, zero, 1b	nop	jr		ra	nop/********************************************************************/wakeupDRAM:	li		t0, PB1550_BCSR_ADDR	lw		t1, bcsr_whoami(t0)	sync	and		t2, t1, PB1550_ID_MSK     	beq		zero, t2, wakeupDDR	nopwakeupSDR:#ifndef USE_S9	li		t1, MEM_SDCONFIGA_SDR	li		t2, MEM_SDCONFIGB_SDR	li		t3, MEM_SDMODE_SDR#endif	li		t4, MEM_SDADDR0_SDR	li		t5, MEM_SDADDR1_SDR	li		t6, MEM_SDADDR2_SDR	b		wakeupDRAMdone	nopwakeupDDR:#ifndef USE_S9	li		t1, MEM_SDCONFIGA_DDR	li		t2, MEM_SDCONFIGB_DDR	li		t3, MEM_SDMODE_DDR#endif	li		t4, MEM_SDADDR0_DDR	li		t5, MEM_SDADDR1_DDR	li		t6, MEM_SDADDR2_DDRwakeupDRAMdone:#ifdef USE_S9	lw		t1, MEM_SDCONFIGA(a0)	lw		t2, MEM_SDCONFIGB(a0)	lw		t3, MEM_SDMODE(a0)#endif	li		t0, AU1550_MEM_ADDR	sw		t1, mem_sdconfiga(t0)	sync	sw		t2, mem_sdconfigb(t0)	sync	sw		t3, mem_sdmode0(t0)	sw		t3, mem_sdmode1(t0)	sw		t3, mem_sdmode2(t0)	sw		t4, mem_sdaddr0(t0)	sw		t5, mem_sdaddr1(t0)	sw		t6, mem_sdaddr2(t0)	sync	/* Assert DCKE - bring DDR out of self refresh */	/* Note that two mem_sdsref are needed since state lost during sleep */	sw		zero, mem_sdsref(t0)	sw		zero, mem_sdsref(t0)	/*	 * Issue 80ns of NOPs	 */	lw		t1, mem_sdconfigb(t0)	li		t2, MEM_SDCONFIGB_BA	or		t1, t2, t1	sw		t1, mem_sdconfigb(t0)	sync		/*	 * Perform burst refresh of 8K rows	 */	li		t1, 8192burstrefresh:	sw		zero, mem_sdautoref(t0)	bne		zero, t1, burstrefresh	addi	t1, t1, -1	/* Enable refresh */	lw		t1, mem_sdconfiga(t0)	li		t2, MEM_SDCONFIGA_E	or		t1, t2, t1	sw		t1, mem_sdconfiga(t0)	sync	jr		ra	nop/********************************************************************/initBOARD:	/*	 * External and/or board-specific peripheral initialization	 */	/*	 * Establish MUXed pin functionality	 *	 * PSC3=000 SPI 	 * PSC2=011 SMbus CLK/DATA, GPIO[213:211]	 * CS=0   EXTCLK0	 * U3=0	  U3TXD	 * U1=0	  U1RTS U1TXD	 * EX1=0  GPIO3	 * EX0=0  GPIO2	 * UR3=1  RTS,DTR etc	 * NI2=0  MAC1	 * U0=0   U0TXD	 * S1=0   GPIO17	 * S0=0   GPIO16	 */	li		t0, AU1550_SYS_ADDR	li		t1, SYS_PINFUNC_PSC2_SM | SYS_PINFUNC_PSC3_I2S | SYS_PINFUNC_U3 | SYS_PINFUNC_MBS1 | SYS_PINFUNC_MBS2	sw		t1, sys_pinfunc(t0)	/*	 * Establish GPIO direction	 *	 * GPIO0 Input PCMCIA 0 Interrupt#	 * GPIO1 Input PCMCIA 1 Interrupt#	 * GPIO2 EXTCLK0 -- I2S_MCLK	 * GPIO3 Input DC IRQ#	 * GPIO4 Input DC DMA_REQ	 * GPIO5 Input REG DMA_REQ	 * GPIO6 Input GPIO6_Switch	 * GPIO7 Input FLASH_BUSY	 * GPIO8 Output Red LED#	 * GPIO9  UART3	 * GPIO10 UART3	 * GPIO11 UART3	 * GPIO12 UART3	 * GPIO13 UART3	 * GPIO14 UART3	 * GPIO15 Output Green LED#	 * GPIO20 UART0	 * GPIO23 UART3	 * GPIO24 MAC1	 * GPIO25 MAC1	 * GPIO26 MAC1	 * GPIO27 MAC1	 * GPIO28 MAC1	 */	li		t1,0x000000FB	sw		t1, sys_trioutclr(t0)	li		t1, 0x00008000				// Turn on the Green LED	sw		t1, sys_outputclr(t0)	sync	/*	 * Establish GPIO2 direction	 *	 * GPIO200 Output PCI_RST#	 * GPIO201 Input Undefined	 * GPIO202 Input Undefined	 * GPIO203 Input PCMCIA 0 STSCHG	 * GPIO204 Input AC97 MCLK	 * GPIO205 Input PCMCIA 1 STSCHG	 * GPIO206 Output NAND_CS	 * GPIO207 Input USB OTG	 * GPIO208 Input USB DEV_RDY	 * GPIO209 PSC2	 * GPIO210 PSC2	 * GPIO211 PSC3	 * GPIO212 PSC3	 * GPIO213 PSC3	 * GPIO214 PSC3	 * GPIO215 PSC3	 */	li		t0, AU1550_GPIO2_ADDR	li		t1,3	sw		t1,gpio2_enable(t0)	sync	li		t1,1	sw		t1,gpio2_enable(t0)	sync	sw		zero,gpio2_inten(t0)	sync	li		t1,(1<<6)|(1<<0)	sw		t1,gpio2_dir(t0)	sync	li		t1,(0<<22)|(0<<16)|(0<<6)|(0<<0)	sw		t1,gpio2_output(t0)	sync	/* Assert PCI_RST# before PCI clock enabled */	li		t0, PB1550_BCSR_ADDR	lw		t1,0x14(t0)	ori		t1,t1,(1<<10) /* EN_GPIO200_RST */	sw		t1,0x14(t0)	sync	li		t0, AU1550_GPIO2_ADDR	li		t1,(1<<16)|(0<<0)	sw		t1,gpio2_output(t0)	sync	/*	 * Establish CLOCKing	 *	 * FREQ5: unused	 * FREQ4: unused	 * FREQ3: unused	 * FREQ2: PCI (done below in PCI setup)	 * FREQ1: 48MHz for USBH and USBD	 * FREQ0: unused	 */	li		t0, AU1550_SYS_ADDR	li		t1, (1<<12)|(1<<11)|(1<<10)	sw		t1, sys_freqctrl0(t0)	li		t1, (3<<2)|(1<<1)|(1<<0)	sw		t1, sys_clksrc(t0)	sync	/* Setup PCI Host - See Au1500 PCI app note */	/* Enable PCI Clock - Internally generated from AUXPLL/FREQ2 */	li		t0, PB1550_BCSR_ADDR	lw		t1,0x14(t0)	andi	t1,t1,1 /* M66EN */	beq		zero,t1,pci33mhz	li		t0, AU1550_SYS_ADDRpci66mhz: /* actually 64mhz */	lw		t2, sys_freqctrl0(t0)	li		t1, (2<<22)|(1<<21)|(1<<20) /* div by 6 */	or		t1,t1,t2	sw		t1, sys_freqctrl0(t0)	lw		t2, sys_clksrc(t0)	li		t1, (4<<17)|(1<<16)|(0<<15) /* no div */	or		t1,t1,t2	sw		t1, sys_clksrc(t0)	b		pcireset	noppci33mhz: /* actually 32mhz */	lw		t2, sys_freqctrl0(t0)	li		t1, (2<<22)|(1<<21)|(1<<20) /* div by 6 */	or		t1,t1,t2	sw		t1, sys_freqctrl0(t0)	lw		t2, sys_clksrc(t0)	li		t1, (4<<17)|(1<<16)|(1<<15) /* div by 2 */	or		t1,t1,t2	sw		t1, sys_clksrc(t0)pcireset:	/* wait 1mS */	li		t1, MEM_1MS1:	add		t1, -1	bne		t1, zero, 1b	nop	/* De-assert PCI_RST# */	li		t0, AU1550_GPIO2_ADDR	li		t1,(1<<16)|(1<<0)	sw		t1,gpio2_output(t0)	sync	/* Wait 6 PCI clock cycles */	li		t1, MEM_1MS1:	add		t1, -1	bne		t1, zero, 1b	nop	sync	/* Setup PCI Host - See Au1550 PCI app note */	/* Enable PCI Clock - On PbAu1550 PCI clock is external and always running */	/* De-assert PCI_RST# - On PbAu1550 PCI_RST# is handled externally by default */	/* Wait 6 PCI clock cycles - On PbAu1550 the bootup time meets this criteria */	li		t0, AU1550_PCI_ADDR	li		t1, 0x00000000	sw		t1, pci_cmem(t0)	li		t1, 0x0008000F	sw		t1, pci_config(t0)	li		t1, 0xFFFF0000	sw		t1, pci_b2bmask_cch(t0)	li		t1, 0x00000000	sw		t1, pci_b2bbase0_venid(t0)	li		t1, 0x00000000	sw		t1, pci_b2bbase1_id(t0)	li		t1, 0xE0000000	sw		t1, pci_mwmask_dev(t0)	li		t1, 0x00000000	sw		t1, pci_mwbase_rev_ccl(t0)	li		t1, 0x02A00356	sw		t1, pci_statcmd(t0)	li		t1, 0x00000000	sw		t1, pci_hdrtype(t0)	li		t1, 0x00000008	sw		t1, pci_mbar(t0)	li		t1, 0x00000000	sw		t1, pci_timeout(t0)	/* Take AMD PHYs out of reset */	li		t0, PB1550_BCSR_ADDR	li		t1, 3	sh		t1, 0x0C(t0)	/* Ensure PCMCIA interface disabled */	li		t0, PB1550_BCSR_ADDR	sh		zero, 0x10(t0)	jr		ra	nop/********************************************************************/alldone:	/*	 * Prepare to invoke application main()	 */	.set reorder/********************************************************************/

⌨️ 快捷键说明

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