1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20void WaitMicroSec(UINTN MicroSeconds)
21{
22 u32 i;
23
24 for (i = 0; i < 1024 * MicroSeconds; i++) {
25 __asm__ volatile ("nop\n\t");
26 }
27
28 return;
29}
30
31
32
33
34
35
36
37
38
39
40
41void via_write_phys(volatile u32 addr, volatile u32 value)
42{
43 volatile u32 *ptr;
44 ptr = (volatile u32 *)addr;
45 *ptr = (volatile u32)value;
46}
47
48
49
50
51
52
53
54
55
56
57u32 via_read_phys(volatile u32 addr)
58{
59 volatile u32 y;
60 y = *(volatile u32 *)addr;
61 return y;
62}
63
64
65
66
67
68
69
70
71
72
73u32 DimmRead(volatile u32 x)
74{
75 volatile u32 y;
76 y = *(volatile u32 *)x;
77
78 return y;
79}
80
81
82
83
84
85
86
87
88
89
90
91
92BOOLEAN DramBaseTest(u32 BaseAdd, u32 Length,
93 DRAM_TEST_MODE Mode, BOOLEAN PrintFlag)
94{
95 u32 TestSpan;
96 u32 Data, Address, Address2;
97 u8 i, TestCount;
98
99
100 if (Mode == EXTENSIVE) {
101
102 TestSpan = 4;
103 TestCount = 1;
104 } else if (Mode == SPARE) {
105
106 TestSpan = STEPSPAN;
107 TestCount = TESTCOUNT;
108 } else {
109 PRINT_DEBUG_MEM("the test mode is error\r");
110 return FALSE;
111 }
112
113
114 for (Address = BaseAdd; Address < BaseAdd + Length; Address += TestSpan) {
115 for (i = 0; i < TestCount; i++)
116 via_write_phys(Address + i * 4, TEST_PATTERN);
117 if (PrintFlag) {
118 if ((u32) Address % 0x10000000 == 0) {
119 PRINT_DEBUG_MEM("Write in Addr =");
120 PRINT_DEBUG_MEM_HEX32(Address);
121 PRINT_DEBUG_MEM("\r");
122 }
123 }
124 }
125
126
127
128 for (Address = BaseAdd; Address < BaseAdd + Length; Address += TestSpan) {
129 for (i = 0; i < TestCount; i++) {
130 Data = via_read_phys(Address + i * 4);
131 via_write_phys(Address + i * 4, (u32) (~TEST_PATTERN));
132 if (Data != TEST_PATTERN) {
133 PRINT_DEBUG_MEM("TEST_PATTERN ERROR !!!!! ");
134 Address2 = Address + i * 4;
135 PRINT_DEBUG_MEM_HEX32(Address2);
136 PRINT_DEBUG_MEM(" : ");
137 PRINT_DEBUG_MEM_HEX32(Data);
138 PRINT_DEBUG_MEM(" \r");
139 return FALSE;
140 }
141 }
142 if (PrintFlag) {
143 if ((u32) Address % 0x10000000 == 0) {
144 PRINT_DEBUG_MEM("Write in Addr =");
145 PRINT_DEBUG_MEM_HEX32(Address);
146 PRINT_DEBUG_MEM("\r");
147 }
148 }
149 }
150
151
152 for (Address = BaseAdd; Address < BaseAdd + Length; Address += TestSpan) {
153 for (i = (u8) (TestCount); i > 0; i--) {
154 Data = via_read_phys(Address + (i - 1) * 4);
155 if (Data != ~TEST_PATTERN) {
156
157 PRINT_DEBUG_MEM("~TEST_PATTERN ERROR !!!!! ");
158 Address2 = Address + (i - 1) * 4;
159 PRINT_DEBUG_MEM_HEX32(Address2);
160 PRINT_DEBUG_MEM(" : ");
161 PRINT_DEBUG_MEM_HEX32(Data);
162 PRINT_DEBUG_MEM(" \r");
163 return FALSE;
164 }
165 }
166 }
167
168 return TRUE;
169}
170
171
172
173
174
175
176
177
178
179
180
181
182
183void DumpRegisters(INTN DevNum, INTN FuncNum)
184{
185 INTN i, j;
186 u8 ByteVal;
187
188 ByteVal = 0;
189
190 PRINT_DEBUG_MEM("\rDev %02x Fun %02x\r");
191 PRINT_DEBUG_MEM
192 ("\r 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f\r");
193 PRINT_DEBUG_MEM
194 ("---------------------------------------------------\r");
195 for (i = 0; i < 0x10; i++) {
196 PRINT_DEBUG_MEM_HEX32(i);
197 for (j = 0; j < 0x10; j++) {
198 ByteVal =
199 pci_read_config8(PCI_DEV(0, DevNum, FuncNum),
200 i * 0x10 + j);
201 PRINT_DEBUG_MEM_HEX8(ByteVal);
202 PRINT_DEBUG_MEM(" ");
203
204 }
205 PRINT_DEBUG_MEM("\r");
206 }
207 return;
208}
209
210
211
212
213
214
215
216
217
218
219
220
221void dumpnorth(u8 Func)
222{
223 u16 r, c;
224 u8 ByteVal;
225 PRINT_DEBUG_MEM("Dump North!!!\r");
226 for (r = 0; r < 32; r++) {
227 for (c = (u16) (r << 3); c < (r << 3) + 8; c++) {
228 ByteVal = 0;
229 ByteVal = pci_read_config8(PCI_DEV(0, 0, Func), c);
230 PRINT_DEBUG_MEM_HEX16(c);
231 PRINT_DEBUG_MEM("= ");
232 PRINT_DEBUG_MEM_HEX8(ByteVal);
233 }
234 PRINT_DEBUG_MEM("\r");
235 }
236}
237