Skip to content

Commit 7ecfd60

Browse files
author
Sebastien Bourdeauducq
committedMay 14, 2012
bios: more DDR diagnostic functions
1 parent 2ccdade commit 7ecfd60

File tree

3 files changed

+43
-5
lines changed

3 files changed

+43
-5
lines changed
 

‎software/bios/ddrinit.c

+37-5
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,43 @@ static void init_sequence(void)
8181
cdelay(200);
8282
}
8383

84+
void ddrsw(void)
85+
{
86+
CSR_DFII_CONTROL = DFII_CONTROL_CKE;
87+
printf("DDR now under software control\n");
88+
}
89+
90+
void ddrhw(void)
91+
{
92+
CSR_DFII_CONTROL = DFII_CONTROL_SEL|DFII_CONTROL_CKE;
93+
printf("DDR now under hardware control\n");
94+
}
95+
96+
void ddrrow(char *_row)
97+
{
98+
char *c;
99+
unsigned int row;
100+
101+
if(*_row == 0) {
102+
setaddr(0x0000);
103+
CSR_DFII_BA_P0 = 0;
104+
CSR_DFII_COMMAND_P0 = DFII_COMMAND_RAS|DFII_COMMAND_WE|DFII_COMMAND_CS;
105+
cdelay(15);
106+
printf("Precharged\n");
107+
} else {
108+
row = strtoul(_row, &c, 0);
109+
if(*c != 0) {
110+
printf("incorrect row\n");
111+
return;
112+
}
113+
setaddr(row);
114+
CSR_DFII_BA_P0 = 0;
115+
CSR_DFII_COMMAND_P0 = DFII_COMMAND_RAS|DFII_COMMAND_CS;
116+
cdelay(15);
117+
printf("Activated row %d\n", row);
118+
}
119+
}
120+
84121
void ddrrd(char *startaddr)
85122
{
86123
char *c;
@@ -141,10 +178,5 @@ int ddrinit(void)
141178

142179
init_sequence();
143180

144-
setaddr(0x0000);
145-
CSR_DFII_BA_P0 = 0;
146-
CSR_DFII_COMMAND_P0 = DFII_COMMAND_RAS|DFII_COMMAND_CS;
147-
cdelay(15);
148-
149181
return 1;
150182
}

‎software/bios/ddrinit.h

+3
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919
#define __DDRINIT_H
2020

2121
int ddrinit(void);
22+
void ddrsw(void);
23+
void ddrhw(void);
24+
void ddrrow(char *_row);
2225
void ddrrd(char *startaddr);
2326
void ddrwr(char *startaddr);
2427

‎software/bios/main.c

+3
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,9 @@ static void do_command(char *c)
353353
else if(strcmp(token, "wcsr") == 0) wcsr(get_token(&c), get_token(&c));
354354

355355
else if(strcmp(token, "ddrinit") == 0) ddrinit();
356+
else if(strcmp(token, "ddrrow") == 0) ddrrow(get_token(&c));
357+
else if(strcmp(token, "ddrsw") == 0) ddrsw();
358+
else if(strcmp(token, "ddrhw") == 0) ddrhw();
356359
else if(strcmp(token, "ddrrd") == 0) ddrrd(get_token(&c));
357360
else if(strcmp(token, "ddrwr") == 0) ddrwr(get_token(&c));
358361

0 commit comments

Comments
 (0)
Please sign in to comment.