📄 reset_db1550.s
字号:
initDRAM: /* Only perform DRAM init if running from ROM/Flash */ addu t2, ra, zero /* preserve ra */ b getPC nopgetPC: lui t0, 0x1F00 /* ROM/flash address? */ and t1, t0, ra addu ra, t2, zero /* restore ra */ bne t0, t1, initDRAMdone nop /* wait 1mS before setup */ li t1, MEM_1MS1: add t1, -1 bne t1, zero, 1b nopinitDDR: li t0, AU1550_MEM_ADDR#ifndef USE_S5 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:#ifndef USE_S5 li t1, MEM_SDCONFIGA_DDR li t2, MEM_SDCONFIGB_DDR li t3, MEM_SDMODE_DDR#else lw t1, MEM_SDCONFIGA(a0) lw t2, MEM_SDCONFIGB(a0) lw t3, MEM_SDMODE(a0)#endif li t4, MEM_SDADDR0_DDR li t5, MEM_SDADDR1_DDR li t6, MEM_SDADDR2_DDR 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=001 I2S, GPIO211 * PSC2=011 SMBus, GPIO[208:206] * CS=0 EXTCLK0 * USB=0 USBH * U3=0 U3TXD * U1R=1 GPIO22 * U1T=1 GPIO21 * EX1=0 GPIO3 * EX0=1 EXTCLK0 * U3=1 UART3 * MBS=1 * NI2=0 MAC1 * U0=0 U0TXD * MBS=1 * S1=1 PSC1_SYNC1 * S0=0 GPIO16 */ li t0, AU1550_SYS_ADDR li t1, (1<<20)|(3<<17)|(1<<13)|(1<<12)|(1<<7)|(1<<5)|(1<<2)|(1<<1) sw t1, sys_pinfunc(t0) /* * Establish GPIO direction * * GPIO0 Input PCMCIA Card 0 Fully Inserted# * GPIO1 Input PCMCIA Card 1 Fully Inserted# * GPIO2 EXTCLK0 I2S_MCLK * GPIO3 Input PCMCIA Card 0 IRQ# * GPIO4 Input Daughtercard DMA_REQ * GPIO5 Input PCMCIA Card 1 IRQ# * GPIO6 Input GPIO6_Switch * GPIO7 Input FLASH_BUSY * GPIO8 Input Daughtercard IRQ# * GPIO9 UART3 * GPIO10 UART3 * GPIO11 UART3 * GPIO12 UART3 * GPIO13 UART3 * GPIO14 UART3 * GPIO15 Input Undefined * GPIO16 Output SPI_SEL# * GPIO17 PSC1 * GPIO20 UART0 * GPIO21 Input PCMCIA Card 0 STSCHG# * GPIO22 Input PCMCIA Card 1 STSCHG# * GPIO23 UART3 * GPIO24 MAC1 * GPIO25 MAC1 * GPIO26 MAC1 * GPIO27 MAC1 * GPIO28 MAC1 */ li t1, 0x006081FB sw t1, sys_trioutclr(t0) li t1, 0x00010000 sw t1, sys_outputset(t0) sync /* * Establish GPIO2 direction * * GPIO200 Output PCI_RST# * GPIO201 Input Undefined * GPIO202 Output Greed LED# * GPIO203 Output Red LED# * GPIO204 Input I2S MCLK * GPIO205 Input Undefined * GPIO206 Input GPIO206_Switch * GPIO207 Input USB OTG IRQ# * GPIO208 Output USB_DEV_RDY * GPIO209 PSC2 SMBus * GPIO210 PSC2 SMBus * GPIO211 Output NAND_FORCE_CE# * GPIO212 PSC3 I2S * GPIO213 PSC3 I2S * GPIO214 PSC3 I2S * GPIO215 PSC3 I2S */ 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<<11)|(1<<8)|(1<<3)|(1<<2)|(1<<0) sw t1, gpio2_dir(t0) sync li t1, (1<<27)|(1<<24)|(1<<19)|(1<<18)|(1<<16)|(1<<11)|(0<<8)|(0<<3)|(0<<2)|(0<<0) sw t1, gpio2_output(t0) sync /* Assert PCI_RST# before PCI clock enabled */ li t0, DB1550_BCSR_ADDR lh t1, 0x14(t0) ori t1, t1,(1<<10) /* EN_GPIO200_RST */ sh 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, DB1550_BCSR_ADDR lh 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 Au1500 PCI app note */ 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, DB1550_BCSR_ADDR li t1, 3 sh t1, 0x0C(t0) /* Ensure PCMCIA interface disabled */ li t0, DB1550_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 + -