233d1912da8c454a03eed106b05310ca4efde3b7
10 static void cdelay(int i
)
13 __asm__
volatile("nop");
18 static void setaddr(int a
)
20 CSR_DFII_AH_P0
= (a
& 0xff00) >> 8;
21 CSR_DFII_AL_P0
= a
& 0x00ff;
22 CSR_DFII_AH_P1
= (a
& 0xff00) >> 8;
23 CSR_DFII_AL_P1
= a
& 0x00ff;
26 static void init_sequence(void)
33 CSR_DFII_CONTROL
= DFII_CONTROL_CKE
;
37 CSR_DFII_COMMAND_P0
= DFII_COMMAND_RAS
|DFII_COMMAND_WE
|DFII_COMMAND_CS
;
39 /* Load Extended Mode Register */
42 CSR_DFII_COMMAND_P0
= DFII_COMMAND_RAS
|DFII_COMMAND_CAS
|DFII_COMMAND_WE
|DFII_COMMAND_CS
;
45 /* Load Mode Register */
46 setaddr(0x0132); /* Reset DLL, CL=3, BL=4 */
47 CSR_DFII_COMMAND_P0
= DFII_COMMAND_RAS
|DFII_COMMAND_CAS
|DFII_COMMAND_WE
|DFII_COMMAND_CS
;
52 CSR_DFII_COMMAND_P0
= DFII_COMMAND_RAS
|DFII_COMMAND_WE
|DFII_COMMAND_CS
;
57 CSR_DFII_COMMAND_P0
= DFII_COMMAND_RAS
|DFII_COMMAND_CAS
|DFII_COMMAND_CS
;
61 /* Load Mode Register */
62 setaddr(0x0032); /* CL=3, BL=4 */
63 CSR_DFII_COMMAND_P0
= DFII_COMMAND_RAS
|DFII_COMMAND_CAS
|DFII_COMMAND_WE
|DFII_COMMAND_CS
;
69 CSR_DFII_CONTROL
= DFII_CONTROL_CKE
;
70 printf("DDR now under software control\n");
75 CSR_DFII_CONTROL
= DFII_CONTROL_SEL
|DFII_CONTROL_CKE
;
76 printf("DDR now under hardware control\n");
79 void ddrrow(char *_row
)
87 CSR_DFII_COMMAND_P0
= DFII_COMMAND_RAS
|DFII_COMMAND_WE
|DFII_COMMAND_CS
;
89 printf("Precharged\n");
91 row
= strtoul(_row
, &c
, 0);
93 printf("incorrect row\n");
98 CSR_DFII_COMMAND_P0
= DFII_COMMAND_RAS
|DFII_COMMAND_CS
;
100 printf("Activated row %d\n", row
);
104 void ddrrd(char *startaddr
)
110 if(*startaddr
== 0) {
111 printf("ddrrd <address>\n");
114 addr
= strtoul(startaddr
, &c
, 0);
116 printf("incorrect address\n");
122 CSR_DFII_COMMAND_P0
= DFII_COMMAND_CAS
|DFII_COMMAND_CS
|DFII_COMMAND_RDDATA
;
126 printf("%02x", MMPTR(0xe0000834+4*i
));
128 printf("%02x", MMPTR(0xe0000884+4*i
));
132 void ddrwr(char *startaddr
)
138 if(*startaddr
== 0) {
139 printf("ddrrd <address>\n");
142 addr
= strtoul(startaddr
, &c
, 0);
144 printf("incorrect address\n");
149 MMPTR(0xe0000814+4*i
) = i
;
150 MMPTR(0xe0000864+4*i
) = 0xf0 + i
;
155 CSR_DFII_COMMAND_P1
= DFII_COMMAND_CAS
|DFII_COMMAND_WE
|DFII_COMMAND_CS
|DFII_COMMAND_WRDATA
;
158 #define TEST_SIZE (4*1024*1024)
160 int memtest_silent(void)
162 volatile unsigned int *array
= (unsigned int *)SDRAM_BASE
;
167 for(i
=0;i
<TEST_SIZE
/4;i
++) {
168 prv
= 1664525*prv
+ 1013904223;
173 for(i
=0;i
<TEST_SIZE
/4;i
++) {
174 prv
= 1664525*prv
+ 1013904223;
191 printf("Initializing DDR SDRAM...\n");
194 CSR_DFII_CONTROL
= DFII_CONTROL_SEL
|DFII_CONTROL_CKE
;
195 if(!memtest_silent())
201 static const char *format_slot_state(int state
)
204 case 0: return "Empty";
205 case 1: return "Pending";
206 case 2: return "Processing";
207 default: return "UNEXPECTED VALUE";
213 volatile unsigned int *regs
= (unsigned int *)ASMIPROBE_BASE
;
220 slot_count
= regs
[offset
++];
221 trace_depth
= regs
[offset
++];
222 for(i
=0;i
<slot_count
;i
++)
223 printf("Slot #%d: %s\n", i
, format_slot_state(regs
[offset
++]));
224 printf("Latest tags:\n");
225 for(i
=0;i
<trace_depth
;i
++)
226 printf("%d ", regs
[offset
++]);