92e1863542a3d519f5ade1dfd94437c4c80b2b3c
1 #include <generated/csr.h>
7 #include <generated/sdram_phy.h>
8 #include <generated/mem.h>
13 static void cdelay(int i
)
16 __asm__
volatile("nop");
23 dfii_control_write(DFII_CONTROL_CKE
);
24 printf("DDR now under software control\n");
29 dfii_control_write(DFII_CONTROL_SEL
|DFII_CONTROL_CKE
);
30 printf("DDR now under hardware control\n");
33 void ddrrow(char *_row
)
39 dfii_pi0_address_write(0x0000);
40 dfii_pi0_baddress_write(0);
41 command_p0(DFII_COMMAND_RAS
|DFII_COMMAND_WE
|DFII_COMMAND_CS
);
43 printf("Precharged\n");
45 row
= strtoul(_row
, &c
, 0);
47 printf("incorrect row\n");
50 dfii_pi0_address_write(row
);
51 dfii_pi0_baddress_write(0);
52 command_p0(DFII_COMMAND_RAS
|DFII_COMMAND_CS
);
54 printf("Activated row %d\n", row
);
58 void ddrrd(char *startaddr
)
65 printf("ddrrd <address>\n");
68 addr
= strtoul(startaddr
, &c
, 0);
70 printf("incorrect address\n");
74 dfii_pird_address_write(addr
);
75 dfii_pird_baddress_write(0);
76 command_prd(DFII_COMMAND_CAS
|DFII_COMMAND_CS
|DFII_COMMAND_RDDATA
);
80 printf("%02x", MMPTR(0xe0001038+4*i
));
82 printf("%02x", MMPTR(0xe000108c+4*i
));
86 void ddrwr(char *startaddr
)
93 printf("ddrrd <address>\n");
96 addr
= strtoul(startaddr
, &c
, 0);
98 printf("incorrect address\n");
103 MMPTR(0xe0001018+4*i
) = i
;
104 MMPTR(0xe000106c+4*i
) = 0xf0 + i
;
107 dfii_piwr_address_write(addr
);
108 dfii_piwr_baddress_write(0);
109 command_pwr(DFII_COMMAND_CAS
|DFII_COMMAND_WE
|DFII_COMMAND_CS
|DFII_COMMAND_WRDATA
);
112 #define TEST_SIZE (4*1024*1024)
114 int memtest_silent(void)
116 volatile unsigned int *array
= (unsigned int *)SDRAM_BASE
;
119 unsigned int error_cnt
;
122 for(i
=0;i
<TEST_SIZE
/4;i
++) {
123 prv
= 1664525*prv
+ 1013904223;
129 for(i
=0;i
<TEST_SIZE
/4;i
++) {
130 prv
= 1664525*prv
+ 1013904223;
141 e
= memtest_silent();
143 printf("Memtest failed: %d/%d words incorrect\n", e
, TEST_SIZE
/4);
146 printf("Memtest OK\n");
153 printf("Initializing DDR SDRAM...\n");
156 dfii_control_write(DFII_CONTROL_SEL
|DFII_CONTROL_CKE
);