| ; initialize system |
| AREA.CLEAR |
| AREA |
| diag 16001 |
| |
| SYStem.RESet |
| |
| entry &coreMode |
| local &coreMode |
| |
| entry &core |
| local &core |
| |
| entry &ddrSpeed |
| local &ddrSpeed |
| |
| SYStem.CPU MV78460V7 |
| |
| if ("&coreMode"=="") |
| ( |
| area.res |
| area.c select |
| area.s select |
| w.area select |
| screen.always |
| |
| ; user selects core number |
| print "" |
| print "" |
| print "Please select SoC Mode:" |
| print "1) ARMv7 Single" |
| print "2) ARMv7 SMP" |
| print |
| enter &coreMode |
| area.res |
| wclear |
| ) |
| if &coreMode==1 |
| ( |
| ;First it is very importate to select the CPU first and then set the options, otherwise important options are cleared again |
| &core=1 |
| SYStem.CPU MV78460V7 |
| SYStem.CONFIG ETBBASE 0 |
| SYStem.MultiCore COREBASE 0xc2301000 |
| SYStem.MultiCore MEMORYACCESSPORT 0 |
| SYStem.MultiCore DEBUGACCESSPORT 1 |
| ) |
| else |
| ( |
| ;First it is very importate to select the CPU first and then set the options, otherwise important options are cleared again |
| ;&ncpus=2 |
| &core=1 |
| ;SYStem.RESet |
| |
| SYStem.CPU MV78460V7 |
| CORE.ASSIGN 1 ; first do a system.up with just one core to avoid a fatal error |
| SYStem.CONFIG ETBBASE 0 |
| SYStem.Up |
| |
| ; read the sample at reset high register to determine the number of active cpus |
| &ncpus=((data.long(SD:0xD0018234)>>3)&3)+1 |
| |
| if &ncpus==4 |
| ( |
| ; put cpu 1 in a loop and kick it out of reser |
| d.s 0xD0022224 %LONG 0xFFFF0040; |
| d.s 0xD0020808 %LONG 0x0; |
| |
| ; put cpu 2 in a loop and kick it out of reser |
| d.s 0xD0022324 %LONG 0xFFFF0040; |
| d.s 0xD0020810 %LONG 0x0; |
| |
| ; put cpu 3 in a loop and kick it out of reser |
| d.s 0xD0022424 %LONG 0xFFFF0040; |
| d.s 0xD0020818 %LONG 0x0; |
| SYStem.Down |
| CORE.ASSIGN 1,2,3,4 |
| |
| ) |
| else if &ncpus==2 ; it looks that when ncpus is set to 2 no system.up is possible |
| ( |
| ; put cpu 1 in a loop and kick it out of reser |
| d.s 0xD0022224 %LONG 0xFFFF0040; |
| d.s 0xD0020808 %LONG 0x0; |
| SYStem.Down |
| CORE.ASSIGN 1,2 |
| ) |
| system.option EnReset off |
| ) |
| |
| system.mode attach |
| system.Up |
| |
| ; set system settings according LE MMU |
| d.s C15:1 %LONG 0x00052078 |
| |
| if &core==1 |
| ( |
| if ("&ddrSpeed"=="") |
| ( |
| area.res |
| area.c select |
| area.s select |
| w.area select |
| screen.always |
| |
| ; user selects ddr speed |
| print "" |
| print "" |
| print "Please select DDR Speed:" |
| print "1) 400 Mhz" |
| print "2) 533 Mhz" |
| print "3) 667 Mhz" |
| print "4) 800 Mhz" |
| print "5) With trainning sequence" |
| print |
| enter &ddrSpeed |
| area.res |
| wclear |
| ) |
| if &ddrSpeed==1 |
| ( |
| ; 400MHZ DDR |
| print "" |
| print "Starting DRAM initialization:" |
| ; dram init |
| d.s 0xD0001400 %LONG 0x7300D03E ; DDR SDRAM Configuration Register |
| d.s 0xD0001404 %LONG 0x3630B840 ; Dunit Control Low Register |
| d.s 0xD0001408 %LONG 0x33137773 ; DDR SDRAM Timing (Low) Register |
| d.s 0xD000140C %LONG 0x36000C55 ; DDR SDRAM Timing (High) Register |
| d.s 0xD0001410 %LONG 0x04000000 ; DDR SDRAM Address Control Register |
| d.s 0xD0001414 %LONG 0x00000000 ; DDR SDRAM Open Pages Control Register |
| d.s 0xD0001418 %LONG 0x00000e00 ; DDR SDRAM Operation Register |
| d.s 0xD000141C %LONG 0x00000672 ; DDR SDRAM Mode Register |
| d.s 0xD0001420 %LONG 0x00000004 ; DDR SDRAM Extended Mode Register |
| d.s 0xD0001424 %LONG 0x0100F1FF ; Dunit Control High Register |
| d.s 0xD0001428 %LONG 0x000D6720 ; Dunit Control High Register |
| d.s 0xD000142C %LONG 0x014C2F38 ; Dunit Control High Register |
| d.s 0xD000147C %LONG 0x00006571 ; |
| |
| d.s 0xD0001494 %LONG 0x00010000 ; DDR SDRAM ODT Control (Low) Register |
| d.s 0xD0001498 %LONG 0x00000000 ; DDR SDRAM ODT Control (High) Register |
| d.s 0xD000149C %LONG 0x00000001 ; DDR Dunit ODT Control Register |
| ;d.s 0xD000149C %LONG 0x00000300 ; DDR Dunit ODT Control Register |
| |
| |
| ; First work with Mbus DRAM window at DRAM Init - 256MB in default |
| d.s 0xD00200EC %LONG 0x00000000 |
| |
| d.s 0xD00200E8 %LONG 0x1FFF0E00 |
| d.s 0xD0020184 %LONG 0x1FFFFFe1 |
| |
| ; Those registers should not be connected in this device, so just to be sure we will Zero them |
| d.s 0xD0001504 %LONG 0x1FFFFFF1 ; |
| d.s 0xD000150C %LONG 0x00000000 ; CS[1]n Size Register |
| d.s 0xD0001514 %LONG 0x00000000 ; CS[2]n Size Register |
| d.s 0xD000151C %LONG 0x00000000 ; CS[3]n Size Register |
| |
| d.s 0xD0001538 %LONG 0x00000008 ; Read Data Sample Delays Register |
| d.s 0xD000153C %LONG 0x0000000A ; Read Data Ready Delay Register |
| |
| d.s 0xD00015D0 %LONG 0x00000830 ; MR0 |
| d.s 0xD00015D4 %LONG 0x00008044 ; MR1 |
| d.s 0xD00015D8 %LONG 0x00010208 ; MR2 |
| d.s 0xD00015DC %LONG 0x00018000 ; MR3 |
| |
| |
| d.s 0xD00015E4 %LONG 0x00203c18; ZQC Configuration Register |
| d.s 0xD00015EC %LONG 0xDE000025; DDR PHY |
| |
| print " [Done]" |
| LOCAL &status |
| LOCAL &bit |
| |
| print "Starting Read Leveling:" |
| &status=0 |
| &bit=31 |
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| ;read leveling values CL @ 400Mhz = 7 |
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| |
| ;PUP RdSampleDly (+CL) Phase RL ADLL value |
| ;0 2 1 0xC |
| d.s 0xD00016A0 %LONG 0xC002010C |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;1 2 0 0x1C |
| d.s 0xD00016A0 %LONG 0xC042001C |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;2 2 1 0x15 |
| d.s 0xD00016A0 %LONG 0xC0820115 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;3 2 0 0x19 |
| d.s 0xD00016A0 %LONG 0xC0C20019 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;4 2 1 0x8 |
| d.s 0xD00016A0 %LONG 0xC1020108 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;5 2 1 0 |
| d.s 0xD00016A0 %LONG 0xC1420100 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;6 2 1 0x11 |
| d.s 0xD00016A0 %LONG 0xC1820111 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;7 2 0 0x1B |
| d.s 0xD00016A0 %LONG 0xC1C2001B |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;8 1 1 23 |
| d.s 0xD00016A0 %LONG 0xC2020117 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| print " [Done]" |
| |
| print "Starting Write Leveling:" |
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| ;write leveling values |
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| |
| |
| ;PUP |
| ;0 |
| |
| d.s 0xD00016A0 %LONG 0xC0005508 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;1 |
| |
| d.s 0xD00016A0 %LONG 0xC0409819 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;2 |
| |
| d.s 0xD00016A0 %LONG 0xC080650C |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;3 |
| |
| d.s 0xD00016A0 %LONG 0xC0C0700F |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;4 |
| |
| d.s 0xD00016A0 %LONG 0xC1004103 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;5 |
| |
| d.s 0xD00016A0 %LONG 0xC140A81D |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;6 |
| |
| d.s 0xD00016A0 %LONG 0xC180650C |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;7 |
| |
| d.s 0xD00016A0 %LONG 0xC1C08013 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;8 |
| |
| d.s 0xD00016A0 %LONG 0xC2005D0A |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| |
| ; center DQS on read cycle |
| d.s 0xD00016A0 %LONG 0xC803000F |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| print " [Done]" |
| |
| d.s 0xD0001480 %LONG 0x00000001 ; DDR SDRAM Initialization Control Register |
| WAIT 2.s |
| print "Init Done ;-)" |
| ) |
| else if &ddrSpeed==2 |
| ( |
| ; 533 MHZ DDR |
| print "" |
| print "Starting DRAM initialization:" |
| ; dram init |
| d.s 0xD0001400 %LONG 0x7300D03E ; DDR SDRAM Configuration Register |
| d.s 0xD0001404 %LONG 0x3630B840 ; Dunit Control Low Register |
| d.s 0xD0001408 %LONG 0x33137773 ; DDR SDRAM Timing (Low) Register |
| d.s 0xD000140C %LONG 0x36000C55 ; DDR SDRAM Timing (High) Register |
| d.s 0xD0001410 %LONG 0x04000000 ; DDR SDRAM Address Control Register |
| d.s 0xD0001414 %LONG 0x00000000 ; DDR SDRAM Open Pages Control Register |
| d.s 0xD0001418 %LONG 0x00000e00 ; DDR SDRAM Operation Register |
| d.s 0xD000141C %LONG 0x00000672 ; DDR SDRAM Mode Register |
| d.s 0xD0001420 %LONG 0x00000004 ; DDR SDRAM Extended Mode Register |
| d.s 0xD0001424 %LONG 0x0100F1FF ; Dunit Control High Register |
| d.s 0xD0001428 %LONG 0x000D6720 ; Dunit Control High Register |
| d.s 0xD000142C %LONG 0x014C2F38 ; Dunit Control High Register |
| d.s 0xD000147C %LONG 0x00006571 ; |
| |
| d.s 0xD0001494 %LONG 0x00010000 ; DDR SDRAM ODT Control (Low) Register |
| d.s 0xD0001498 %LONG 0x00000000 ; DDR SDRAM ODT Control (High) Register |
| d.s 0xD000149C %LONG 0x00000001 ; DDR Dunit ODT Control Register |
| ;d.s 0xD000149C %LONG 0x00000300 ; DDR Dunit ODT Control Register |
| |
| |
| ; First work with Mbus DRAM window at DRAM Init - 256MB in default |
| d.s 0xD00200EC %LONG 0x00000000 |
| |
| d.s 0xD00200E8 %LONG 0x1FFF0E00 |
| d.s 0xD0020184 %LONG 0x1FFFFFe1 |
| |
| ; Those registers should not be connected in this device, so just to be sure we will Zero them |
| d.s 0xD0001504 %LONG 0x1FFFFFF1 ; |
| d.s 0xD000150C %LONG 0x00000000 ; CS[1]n Size Register |
| d.s 0xD0001514 %LONG 0x00000000 ; CS[2]n Size Register |
| d.s 0xD000151C %LONG 0x00000000 ; CS[3]n Size Register |
| |
| d.s 0xD0001538 %LONG 0x00000008 ; Read Data Sample Delays Register |
| d.s 0xD000153C %LONG 0x0000000A ; Read Data Ready Delay Register |
| |
| d.s 0xD00015D0 %LONG 0x00000830 ; MR0 |
| d.s 0xD00015D4 %LONG 0x00008044 ; MR1 |
| d.s 0xD00015D8 %LONG 0x00010208 ; MR2 |
| d.s 0xD00015DC %LONG 0x00018000 ; MR3 |
| |
| |
| d.s 0xD00015E4 %LONG 0x00203c18; ZQC Configuration Register |
| d.s 0xD00015EC %LONG 0xDE000025; DDR PHY |
| |
| print " [Done]" |
| LOCAL &status |
| LOCAL &bit |
| |
| print "Starting Read Leveling:" |
| &status=0 |
| &bit=31 |
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| ;read leveling values CL @ 533Mhz = 7 |
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| |
| ;PUP RdSampleDly (+CL) Phase RL ADLL value |
| ;0 1 4 12 |
| d.s 0xD00016A0 %LONG 0xC002040C |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;1 1 1 23 |
| d.s 0xD00016A0 %LONG 0xC0420117 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;2 1 4 27 |
| d.s 0xD00016A0 %LONG 0xC082041B |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;3 1 1 23 |
| d.s 0xD00016A0 %LONG 0xC0C20117 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;4 1 4 10 |
| d.s 0xD00016A0 %LONG 0xC102040A |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;5 1 1 23 |
| d.s 0xD00016A0 %LONG 0xC1420117 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;6 1 4 25 |
| d.s 0xD00016A0 %LONG 0xC1820419 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;7 1 1 23 |
| d.s 0xD00016A0 %LONG 0xC1C20117 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;8 1 1 23 |
| d.s 0xD00016A0 %LONG 0xC2020117 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| print " [Done]" |
| |
| print "Starting Write Leveling:" |
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| ;write leveling values |
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| |
| |
| ;PUP |
| ;0 |
| |
| d.s 0xD00016A0 %LONG 0xC0008113 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;1 |
| |
| d.s 0xD00016A0 %LONG 0xC0404504 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;2 |
| |
| d.s 0xD00016A0 %LONG 0xC0808514 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;3 |
| |
| d.s 0xD00016A0 %LONG 0xC0C09418 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;4 |
| |
| d.s 0xD00016A0 %LONG 0xC1006D0E |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;5 |
| |
| d.s 0xD00016A0 %LONG 0xC1405508 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;6 |
| |
| d.s 0xD00016A0 %LONG 0xC1807D12 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;7 |
| |
| d.s 0xD00016A0 %LONG 0xC1C0b01F |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;8 |
| |
| d.s 0xD00016A0 %LONG 0xC2005D0A |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| |
| ; center DQS on read cycle |
| d.s 0xD00016A0 %LONG 0xC803000F |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| print " [Done]" |
| |
| d.s 0xD0001480 %LONG 0x00000001 ; DDR SDRAM Initialization Control Register |
| WAIT 2.s |
| print "Init Done ;-)" |
| |
| ) |
| else if &ddrSpeed==3 |
| ( |
| ; 667 MHZ DDR |
| print "" |
| print "Starting DRAM initialization:" |
| ; dram init |
| d.s 0xD0001400 %LONG 0x7301D453 ; DDR SDRAM Configuration Register |
| d.s 0xD0001404 %LONG 0x3630B840 ; Dunit Control Low Register |
| d.s 0xD0001408 %LONG 0x5415a998 ; DDR SDRAM Timing (Low) Register |
| d.s 0xD000140C %LONG 0x36000C6A ; DDR SDRAM Timing (High) Register |
| d.s 0xD0001410 %LONG 0x04000000 ; DDR SDRAM Address Control Register |
| d.s 0xD0001414 %LONG 0x00000000 ; DDR SDRAM Open Pages Control Register |
| d.s 0xD0001418 %LONG 0x00000e00 ; DDR SDRAM Operation Register |
| d.s 0xD000141C %LONG 0x00000672 ; DDR SDRAM Mode Register |
| d.s 0xD0001420 %LONG 0x00000004 ; DDR SDRAM Extended Mode Register |
| d.s 0xD0001424 %LONG 0x0100D1FF ; Dunit Control High Register ( 2 :1 - bits 15:12 = 0xD ) |
| d.s 0xD0001428 %LONG 0x000F8830 ; Dunit Control High Register |
| d.s 0xD000142C %LONG 0x214C2F38 ; Dunit Control High Register ( 2:1 - bit 29 = '1' ) |
| d.s 0xD000147C %LONG 0x0000c871 ; |
| |
| ; 2:1 |
| d.s 0xD00014a8 %LONG 0x00000101 ; |
| d.s 0xD0020220 %LONG 0x00000007 ; |
| |
| d.s 0xD0001494 %LONG 0x00010000 ; DDR SDRAM ODT Control (Low) Register |
| d.s 0xD0001498 %LONG 0x00000000 ; DDR SDRAM ODT Control (High) Register |
| d.s 0xD000149C %LONG 0x00000001 ; DDR Dunit ODT Control Register |
| ;d.s 0xD000149C %LONG 0x00000300 ; DDR Dunit ODT Control Register |
| |
| |
| ; First work with Mbus DRAM window at DRAM Init - 256MB in default |
| d.s 0xD00200EC %LONG 0x00000000 |
| |
| d.s 0xD00200E8 %LONG 0x1FFF0E00 |
| d.s 0xD0020184 %LONG 0x1FFFFFe1 |
| |
| ; Those registers should not be connected in this device, so just to be sure we will Zero them |
| d.s 0xD0001504 %LONG 0x1FFFFFF1 ; |
| d.s 0xD000150C %LONG 0x00000000 ; CS[1]n Size Register |
| d.s 0xD0001514 %LONG 0x00000000 ; CS[2]n Size Register |
| d.s 0xD000151C %LONG 0x00000000 ; CS[3]n Size Register |
| |
| d.s 0xD0001524 %LONG 0x0000C800 ; DDR I/O register |
| |
| d.s 0xD0001538 %LONG 0x0000000b ; Read Data Sample Delays Register |
| d.s 0xD000153C %LONG 0x0000000d ; Read Data Ready Delay Register |
| |
| ;d.s 0xD0001538 %LONG 0x0000000c ; Read Data Sample Delays Register CL=10 |
| ;d.s 0xD000153C %LONG 0x0000000e ; Read Data Ready Delay Register CL=10 |
| |
| d.s 0xD00015D0 %LONG 0x00000a50 ; MR0 |
| ;d.s 0xD00015D0 %LONG 0x00000a60 ; MR0 CL=10 |
| d.s 0xD00015D4 %LONG 0x00008044 ; MR1 |
| d.s 0xD00015D8 %LONG 0x00010210 ; MR2 |
| d.s 0xD00015DC %LONG 0x00018000 ; MR3 |
| |
| |
| d.s 0xD00015E4 %LONG 0x00203c18; ZQC Configuration Register |
| ;d.s 0xD00015EC %LONG 0xDE000025; DDR PHY |
| d.s 0xD00015EC %LONG 0xF800AA25; |
| |
| print " [Done]" |
| LOCAL &status |
| LOCAL &bit |
| |
| LOCAL &readlvl |
| &readlvl=1 |
| |
| if (&readlvl>0) |
| ( |
| |
| print "Starting Read Leveling:" |
| &status=0 |
| &bit=31 |
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| ;read leveling values |
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| |
| ;PUP RdSampleDly (+CL) Phase RL ADLL value |
| ;0 2 1 3 |
| d.s 0xD00016A0 %LONG 0xC0020103 |
| ;d.s 0xD00016A0 %LONG 0xC0020108 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;1 2 0 18 |
| d.s 0xD00016A0 %LONG 0xC0420012 |
| ;d.s 0xD00016A0 %LONG 0xC042001C |
| |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;2 2 1 19 |
| d.s 0xD00016A0 %LONG 0xC0820113 |
| ;d.s 0xD00016A0 %LONG 0xC082020b |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;3 2 0 18 |
| d.s 0xD00016A0 %LONG 0xC0C20012 |
| ;d.s 0xD00016A0 %LONG 0xC0C2001C |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;4 2 1 0 |
| d.s 0xD00016A0 %LONG 0xC1020100 |
| ;d.s 0xD00016A0 %LONG 0xC1020106 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;5 2 0 22 |
| d.s 0xD00016A0 %LONG 0xC1420016 |
| ;d.s 0xD00016A0 %LONG 0xC142001E |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;6 2 1 9 |
| d.s 0xD00016A0 %LONG 0xC1820109 |
| ;d.s 0xD00016A0 %LONG 0xC182010D |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;7 2 0 16 |
| d.s 0xD00016A0 %LONG 0xC1C20010 |
| ;d.s 0xD00016A0 %LONG 0xC1C20018 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;8 2 0 28 |
| d.s 0xD00016A0 %LONG 0xC2020112 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| print " [Done]" |
| ) |
| print "Starting Write Leveling:" |
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| ;write leveling values |
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| |
| |
| ;PUP |
| ;0 |
| |
| d.s 0xD00016A0 %LONG 0xC000b11F |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;1 |
| |
| d.s 0xD00016A0 %LONG 0xC040690D |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;2 |
| |
| d.s 0xD00016A0 %LONG 0xC0803600 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;3 |
| |
| d.s 0xD00016A0 %LONG 0xC0C0a81D |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;4 |
| |
| d.s 0xD00016A0 %LONG 0xC1009919 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;5 |
| |
| d.s 0xD00016A0 %LONG 0xC1407911 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;6 |
| |
| d.s 0xD00016A0 %LONG 0xC180ad1e |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;7 |
| |
| d.s 0xD00016A0 %LONG 0xC1C04d06 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;8 |
| |
| d.s 0xD00016A0 %LONG 0xC2008514 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| |
| ; center DQS on read cycle |
| d.s 0xD00016A0 %LONG 0xC803000F |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| print " [Done]" |
| |
| d.s 0xD0001480 %LONG 0x00000001 ; DDR SDRAM Initialization Control Register |
| WAIT 2.s |
| |
| print "Init Done ;-)" |
| ) |
| else if &ddrSpeed==4 |
| ( |
| ; 800 MHZ DDR |
| print "" |
| print "Starting DRAM initialization:" |
| ; dram init |
| d.s 0xD0001400 %LONG 0x7301D453 ; DDR SDRAM Configuration Register |
| d.s 0xD0001404 %LONG 0x3630B840 ; Dunit Control Low Register |
| d.s 0xD0001408 %LONG 0x5415a998 ; DDR SDRAM Timing (Low) Register |
| d.s 0xD000140C %LONG 0x36000C6A ; DDR SDRAM Timing (High) Register |
| d.s 0xD0001410 %LONG 0x04000000 ; DDR SDRAM Address Control Register |
| d.s 0xD0001414 %LONG 0x00000000 ; DDR SDRAM Open Pages Control Register |
| d.s 0xD0001418 %LONG 0x00000e00 ; DDR SDRAM Operation Register |
| d.s 0xD000141C %LONG 0x00000672 ; DDR SDRAM Mode Register |
| d.s 0xD0001420 %LONG 0x00000004 ; DDR SDRAM Extended Mode Register |
| d.s 0xD0001424 %LONG 0x0100D1FF ; Dunit Control High Register ( 2 :1 - bits 15:12 = 0xD ) |
| d.s 0xD0001428 %LONG 0x000F8830 ; Dunit Control High Register |
| d.s 0xD000142C %LONG 0x214C2F38 ; Dunit Control High Register ( 2:1 - bit 29 = '1' ) |
| d.s 0xD000147C %LONG 0x0000c871 ; |
| |
| ; 2:1 |
| d.s 0xD00014a8 %LONG 0x00000101 ; |
| d.s 0xD0020220 %LONG 0x00000007 ; |
| |
| d.s 0xD0001494 %LONG 0x00010000 ; DDR SDRAM ODT Control (Low) Register |
| d.s 0xD0001498 %LONG 0x00000000 ; DDR SDRAM ODT Control (High) Register |
| d.s 0xD000149C %LONG 0x00000001 ; DDR Dunit ODT Control Register |
| ;d.s 0xD000149C %LONG 0x00000300 ; DDR Dunit ODT Control Register |
| |
| |
| ; First work with Mbus DRAM window at DRAM Init - 256MB in default |
| d.s 0xD00200E8 %LONG 0x1FFF0E00 |
| d.s 0xD0020184 %LONG 0x1FFFFFe1 |
| |
| |
| |
| ; Those registers should not be connected in this device, so just to be sure we will Zero them |
| d.s 0xD0001504 %LONG 0x1FFFFFF1 ; |
| d.s 0xD000150C %LONG 0x00000000 ; CS[1]n Size Register |
| d.s 0xD0001514 %LONG 0x00000000 ; CS[2]n Size Register |
| d.s 0xD000151C %LONG 0x00000000 ; CS[3]n Size Register |
| |
| d.s 0xD0001524 %LONG 0x0000C800 ; DDR I/O register |
| |
| d.s 0xD0001538 %LONG 0x0000000b; Read Data Sample Delays Register |
| ;d.s 0xD0001538 %LONG 0x0000000E ; Read Data Sample Delays Register |
| ;d.s 0xD000153C %LONG 0x0000000F; Read Data Ready Delay Register |
| d.s 0xD000153C %LONG 0x0000000d; Read Data Ready Delay Register |
| |
| ;d.s 0xD0001538 %LONG 0x0000000c ; Read Data Sample Delays Register CL=10 |
| ;d.s 0xD000153C %LONG 0x0000000e ; Read Data Ready Delay Register CL=10 |
| |
| d.s 0xD00015D0 %LONG 0x00000a50 ; MR0 |
| d.s 0xD00015D4 %LONG 0x00008044 ; MR1 |
| d.s 0xD00015D8 %LONG 0x00010210 ; MR2 |
| d.s 0xD00015DC %LONG 0x00018000 ; MR3 |
| |
| |
| d.s 0xD00015E4 %LONG 0x00203c18; ZQC Configuration Register |
| d.s 0xD00015EC %LONG 0xDE000025; DDR PHY |
| |
| print " [Done]" |
| LOCAL &status |
| LOCAL &bit |
| |
| LOCAL &readlvl |
| &readlvl=1 |
| |
| if (&readlvl>0) |
| ( |
| |
| print "Starting Read Leveling:" |
| &status=0 |
| &bit=31 |
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| ;read leveling values |
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| |
| ;PUP RdSampleDly (+CL) Phase RL ADLL value |
| ;0 2 1 29 |
| ;d.s 0xD00016A0 %LONG 0xC002011D |
| d.s 0xD00016A0 %LONG 0xC0020213 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;1 2 1 8 |
| d.s 0xD00016A0 %LONG 0xC0420108 |
| |
| |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;2 2 2 16 |
| d.s 0xD00016A0 %LONG 0xC0820210 |
| |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;3 2 0 8 |
| d.s 0xD00016A0 %LONG 0xC0C20108 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;4 2 1 26 |
| d.s 0xD00016A0 %LONG 0xC102011A |
| |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;5 2 1 13 |
| ;d.s 0xD00016A0 %LONG 0xC142010D |
| d.s 0xD00016A0 %LONG 0xC1420300 |
| |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;6 2 2 4 |
| d.s 0xD00016A0 %LONG 0xC1820204 |
| |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;7 2 1 6 |
| d.s 0xD00016A0 %LONG 0xC1C20106 |
| |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;8 2 1 20 |
| d.s 0xD00016A0 %LONG 0xC2020112 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| print " [Done]" |
| ) |
| print "Starting Write Leveling:" |
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| ;write leveling values |
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| |
| |
| ;PUP |
| ;0 |
| |
| d.s 0xD00016A0 %LONG 0xC000620B |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;1 |
| |
| d.s 0xD00016A0 %LONG 0xC0408D16 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;2 |
| |
| d.s 0xD00016A0 %LONG 0xC0806A0D |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;3 |
| |
| d.s 0xD00016A0 %LONG 0xC0C03D02 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;4 |
| |
| d.s 0xD00016A0 %LONG 0xC1004a05 |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;5 |
| |
| d.s 0xD00016A0 %LONG 0xC140A11B |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;6 |
| |
| d.s 0xD00016A0 %LONG 0xC1805E0A |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;7 |
| |
| d.s 0xD00016A0 %LONG 0xC1C06D0E |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;8 |
| |
| d.s 0xD00016A0 %LONG 0xC200AD1E |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| |
| ; center DQS on read cycle |
| d.s 0xD00016A0 %LONG 0xC803000F |
| |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| WHILE (&status>0) |
| ( |
| &status=Data.Long(SD:0xD00016A0) |
| &status=&status&(1<<31) |
| ) |
| |
| print " [Done]" |
| |
| d.s 0xD0001480 %LONG 0x00000001 ; DDR SDRAM Initialization Control Register |
| WAIT 2.s |
| |
| print "Init Done ;-)" |
| ) |
| else if &ddrSpeed==5 |
| ( |
| |
| |
| |
| ;Enable L2 Block => Set L2Exist |
| D.S SD:0xD0020200 %LE %LONG 0x01000102 |
| |
| ; Configure L@ ways 0-3 to be SRAM |
| D.S SD:0xD000878C %LE %LONG 0x40000000 |
| D.S SD:0xD000878C %LE %LONG 0x40010001 |
| D.S SD:0xD000878C %LE %LONG 0x40020002 |
| D.S SD:0xD000878C %LE %LONG 0x40030003 |
| |
| ; Open the SRAM window 0 to the 512K SRAM |
| D.S SD:0xD0020240 %LE %LONG 0x40000701 |
| print "Finished setting the L2 as SRAM" |
| |
| ; Close fastpath window |
| D.S SD:0xD0020184 %LE %LONG 0x0 |
| |
| ; Set stack |
| REGISTER.SET R13 0x40040000 |
| |
| WAIT 100.ms |
| |
| print "Init Done ;-)" |
| |
| D.LOAD bin_hdr\bin_hdr.elf |
| go |
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| ) |
| |
| |
| |
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
| ) |
| ; end of if core == 1 for dram init |
| |
| ; Set program counter at program start to be ready for start |
| ; Register.Set pc 0xffff0000 |
| ; R.S PC 670000 |
| enddo |