blob: 1d996e639a38be93ac89da225f3529eca751f4bf [file] [log] [blame]
b.liue9582032025-04-17 19:18:16 +08001#include "ddr_test.h"
2#include "BootLoader.h"
3#include "obm2osl.h"
4#include "tim.h"
5
6
7#ifdef CONFIG_USE_DDR_ALL_PATTERN
8static int giBitFails[32], giByteLaneFails[4], giPatternFails[22], giPatternRuns[22],giPatternNumOfFails[22];
9#define ANALOG 1
10#define CONSTANT 2
11#define COMPLEMENT 3
12#define DECREMENT 4
13#define INCREMENT 5
14#define INCREMENTB 6
15#define MILLER_EFFECT 7
16#define ZERO_ROR_INVERT 8
17#define ONE_ROL_INVERT 9
18#define ZERO_ROR 10
19#define ONE_ROL 11
20#define WALKING_ONES 12
21#define WALKING_ZEROS 13
22#define SSTAILGATE_0101XXXX 14
23#define SSTAILGATE_01010000 15
24#define SSTAILGATE_01011111 16
25#define SSTAILGATE_01011010 17
26#define MSTAILGATE 18
27#define FREQ_SWEEP 19
28#define VERT_INCREMENT 20
29#define HORZ_INCREMENT 21
30
31#define read_data_u32(reg) (*((volatile u32 *)(reg)))
32
33#define WORD_SIZE (4)
34
35static u32 rol32_mcu(u32 val)
36{
37 u32 msb = val >> 31;
38
39 val = val << 1;
40
41 msb &= 0x00000001;
42 val |= msb;
43
44 return val;
45}
46
47static u32 ror32_mcu(u32 val)
48{
49 u32 lsb = val << 31;
50
51 val = val >> 1;
52
53 val &= 0x7FFFFFFF;
54 val |= lsb;
55
56 return val;
57}
58
59static int test_write_ANALOG(u32* start, int count)
60{
61 u32* p = (u32*)start;
62 while (p < (start + count))
63 {
64#define DOIT1(i) p[i]=0xffffffff;
65#define DOIT2(i) p[i]=0x0;
66
67 DOIT1(0) DOIT2(1) DOIT1(2) DOIT2(3) DOIT1(4) DOIT2(5) DOIT1(6) DOIT2(7)
68 DOIT1(8) DOIT2(9) DOIT1(10) DOIT2(11) DOIT1(12) DOIT2(13) DOIT1(14) DOIT2(15)
69 DOIT1(16) DOIT2(17) DOIT1(18) DOIT2(19) DOIT1(20) DOIT2(21) DOIT1(22) DOIT2(23)
70 DOIT1(24) DOIT2(25) DOIT1(26) DOIT2(27) DOIT1(28) DOIT2(29) DOIT1(30) DOIT2(31)
71 p += 32;
72
73 DOIT1(0) DOIT2(1) DOIT1(2) DOIT2(3) DOIT1(4) DOIT2(5) DOIT1(6) DOIT2(7)
74 DOIT1(8) DOIT2(9) DOIT1(10) DOIT2(11) DOIT1(12) DOIT2(13) DOIT1(14) DOIT2(15)
75 DOIT1(16) DOIT2(17) DOIT1(18) DOIT2(19) DOIT1(20) DOIT2(21) DOIT1(22) DOIT2(23)
76 DOIT1(24) DOIT2(25) DOIT1(26) DOIT2(27) DOIT1(28) DOIT2(29) DOIT1(30) DOIT2(31)
77 p += 32;
78 }
79 return 0;
80}
81#undef DOIT1
82#undef DOIT2
83
84static int test_write_CONSTANT(u32* start, int count)
85{
86 u32* p = (u32*)start;
87 while (p < (start + count))
88 {
89#define DOIT1(i) p[i]=0xffffffff;
90
91 DOIT1(0) DOIT1(1) DOIT1(2) DOIT1(3) DOIT1(4) DOIT1(5) DOIT1(6) DOIT1(7)
92 DOIT1(8) DOIT1(9) DOIT1(10) DOIT1(11) DOIT1(12) DOIT1(13) DOIT1(14) DOIT1(15)
93 DOIT1(16) DOIT1(17) DOIT1(18) DOIT1(19) DOIT1(20) DOIT1(21) DOIT1(22) DOIT1(23)
94 DOIT1(24) DOIT1(25) DOIT1(26) DOIT1(27) DOIT1(28) DOIT1(29) DOIT1(30) DOIT1(31)
95 p += 32;
96 DOIT1(0) DOIT1(1) DOIT1(2) DOIT1(3) DOIT1(4) DOIT1(5) DOIT1(6) DOIT1(7)
97 DOIT1(8) DOIT1(9) DOIT1(10) DOIT1(11) DOIT1(12) DOIT1(13) DOIT1(14) DOIT1(15)
98 DOIT1(16) DOIT1(17) DOIT1(18) DOIT1(19) DOIT1(20) DOIT1(21) DOIT1(22) DOIT1(23)
99 DOIT1(24) DOIT1(25) DOIT1(26) DOIT1(27) DOIT1(28) DOIT1(29) DOIT1(30) DOIT1(31)
100 p += 32;
101 }
102 return 0;
103}
104#undef DOIT1
105
106static int test_write_COMPLETEMENT(u32* start, int count, u32 uiStartVal)
107{
108 u32* p = (u32*)start;
109 while (p < (start + count))
110 {
111#define DOIT1(i) p[i]=uiStartVal;
112#define DOIT2(i) p[i]=(~uiStartVal);
113
114 DOIT1(0) DOIT2(1) DOIT1(2) DOIT2(3) DOIT1(4) DOIT2(5) DOIT1(6) DOIT2(7)
115 DOIT1(8) DOIT2(9) DOIT1(10) DOIT2(11) DOIT1(12) DOIT2(13) DOIT1(14) DOIT2(15)
116 DOIT1(16) DOIT2(17) DOIT1(18) DOIT2(19) DOIT1(20) DOIT2(21) DOIT1(22) DOIT2(23)
117 DOIT1(24) DOIT2(25) DOIT1(26) DOIT2(27) DOIT1(28) DOIT2(29) DOIT1(30) DOIT2(31)
118 p += 32;
119
120 DOIT1(0) DOIT2(1) DOIT1(2) DOIT2(3) DOIT1(4) DOIT2(5) DOIT1(6) DOIT2(7)
121 DOIT1(8) DOIT2(9) DOIT1(10) DOIT2(11) DOIT1(12) DOIT2(13) DOIT1(14) DOIT2(15)
122 DOIT1(16) DOIT2(17) DOIT1(18) DOIT2(19) DOIT1(20) DOIT2(21) DOIT1(22) DOIT2(23)
123 DOIT1(24) DOIT2(25) DOIT1(26) DOIT2(27) DOIT1(28) DOIT2(29) DOIT1(30) DOIT2(31)
124 p += 32;
125 }
126 return 0;
127}
128#undef DOIT1
129#undef DOIT2
130
131static u32 allp_mcuGenerateWordPattern(unsigned long uiSourceAddress, u32 uiPattern, u32 size_in_word, u32 uiStartVal, u32 bCheck)
132{
133 const u32 c_zero = 0x00000000;
134 u32 test_signal = 0x00000001;
135 u32 c_pattern;
136 u32 c_pattern_or_signal;
137 u32 i = 0, j = 0, k = 0, uiTemp = 0, uiFails = 0, expected;
138 u32 value = 0;
139
140 u32* Tmp_Address32 = (u32*)(long)uiSourceAddress;
141
142 giPatternRuns[uiPattern]++;
143
144 switch (uiPattern)
145 {
146
147 case ANALOG:
148 //obm_printf("Generating ANALOG Pattern\n\r");
149 if (bCheck)
150 {
151 for (i = 0; i < size_in_word;) {
152 if (Tmp_Address32[i++] != 0xffffffff)
153 {
154 uiFails++;
155 uiTemp = Tmp_Address32[i - 1];
156 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, 0xffffffff, (uiTemp ^ 0xffffffff));
157 }
158 //else
159 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), Tmp_Address32[i - 1], 0xffffffff);
160
161 if (Tmp_Address32[i++] != 0)
162 {
163 uiFails++;
164 uiTemp = Tmp_Address32[i - 1];
165 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, 0, (uiTemp ^ 0));
166 }
167 //else
168 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), Tmp_Address32[i - 1], ~(0xffffffff));
169 }
170 }
171 else
172 {
173 test_write_ANALOG((u32*)(long)uiSourceAddress, size_in_word);
174 }
175 break;
176
177 case CONSTANT:
178 uiStartVal = 0xffffffff;
179 //obm_printf("Generating CONSTANT Pattern 0x%X\n\r", uiStartVal);
180 if (bCheck)
181 {
182 for (i = 0; i < size_in_word;) {
183
184 if (Tmp_Address32[i++] != uiStartVal)
185 {
186 uiFails++;
187 uiTemp = Tmp_Address32[i - 1];
188 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X - DB=0x%08X - DA=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, (uiStartVal), (uiTemp ^ uiStartVal), read_data_u32(uiSourceAddress + ((i - 1) * 4)), read_data_u32(uiSourceAddress + ((i + 1) * 4)));
189 }
190 //else
191 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), Tmp_Address32[i - 1], (uiStartVal));
192 }
193 }
194 else
195 {
196 test_write_CONSTANT((u32*)(long)uiSourceAddress, size_in_word);
197 }
198 break;
199
200 case COMPLEMENT:
201 //obm_printf("Generating COMPLEMENT Pattern - uiStartVal=%08X\n\r", uiStartVal);
202 if (bCheck)
203 {
204 for (i = 0; i < size_in_word;)
205 {
206 if (Tmp_Address32[i++] != (uiStartVal))
207 {
208 uiFails++;
209 uiTemp = Tmp_Address32[i - 1];
210 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, (uiStartVal), (uiTemp ^ (uiStartVal)));
211 }
212 // else
213 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), Tmp_Address32[i - 1], (uiStartVal));
214
215 if (Tmp_Address32[i++] != (~uiStartVal))
216 {
217 uiFails++;
218 uiTemp = Tmp_Address32[i - 1];
219 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, (~uiStartVal), (uiTemp ^ (~uiStartVal)));
220
221 }
222 // else
223 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), Tmp_Address32[i - 1], (~uiStartVal));
224 }
225 }
226 else
227 {
228 test_write_COMPLETEMENT((u32*)(long)uiSourceAddress, size_in_word, uiStartVal);
229 }
230 break;
231
232 case DECREMENT:
233 //obm_printf("Generating DECREMENT Pattern - uiStartVal=%08X\n\r", uiStartVal);
234 if (uiStartVal == 0) uiStartVal = 0xF0F0F0F0;
235 c_pattern = uiStartVal;
236 if (bCheck)
237 {
238 for (i = 0; i < size_in_word;) {
239 if (Tmp_Address32[i++] != c_pattern)
240 {
241 uiFails++;
242 uiTemp = Tmp_Address32[i - 1];
243 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, c_pattern, (uiTemp ^ c_pattern));
244 }
245 //else
246 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), Tmp_Address32[i - 1], c_pattern);
247
248
249 if (Tmp_Address32[i++] != 0xFFFFFFFF)
250 {
251 uiFails++;
252 uiTemp = Tmp_Address32[i - 1];
253 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, 0xFFFFFFFF, (uiTemp ^ 0xFFFFFFFF));
254 }
255 //else
256 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), Tmp_Address32[i - 1], 0xFFFFFFFF);
257
258 if (c_pattern == 0)
259 c_pattern = uiStartVal;
260 else
261 c_pattern--;
262
263 }
264 }
265 else
266 {
267 for (i = 0; i < size_in_word;) {
268 Tmp_Address32[i++] = c_pattern;
269 Tmp_Address32[i++] = 0xFFFFFFFF;
270 if (c_pattern == 0)
271 c_pattern = uiStartVal;
272 else
273 c_pattern--;
274 }
275 }
276 break;
277
278 case INCREMENT:
279 //obm_printf("Generating INCREMENT Pattern - uiStartVal=%08X\n\r", uiStartVal);
280 if (uiStartVal == 0xFFFFFFFF) uiStartVal = 0;
281 c_pattern = uiStartVal;
282 if (bCheck)
283 {
284 for (i = 0; i < size_in_word;) {
285 if (Tmp_Address32[i++] != c_pattern)
286 {
287 uiFails++;
288 uiTemp = Tmp_Address32[i - 1];
289 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, c_pattern, (uiTemp ^ c_pattern));
290 }
291 // else
292 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), Tmp_Address32[i - 1], c_pattern);
293
294 if (Tmp_Address32[i++] != 0)
295 {
296 uiFails++;
297 uiTemp = Tmp_Address32[i - 1];
298 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, 0, (uiTemp ^ 0));
299 }
300 //else
301 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), Tmp_Address32[i - 1], 0);
302
303 if (c_pattern == 0xFFFFFFFF)
304 c_pattern = 0;
305 else
306 c_pattern++;
307
308 }
309 }
310 else
311 {
312 for (i = 0; i < size_in_word;) {
313 Tmp_Address32[i++] = c_pattern;
314 Tmp_Address32[i++] = 0;
315
316
317 if (c_pattern == 0xFFFFFFFF)
318 c_pattern = 0;
319 else
320 c_pattern++;
321 }
322 }
323
324 break;
325
326 case INCREMENTB:
327 //obm_printf("Generating INCREMENTB Pattern - uiStartVal=%08X\n\r", c_zero);
328 c_pattern = uiStartVal;
329 if (bCheck)
330 {
331 for (i = 0; i < size_in_word;) {
332 if (Tmp_Address32[i++] != c_pattern)
333 {
334 uiFails++;
335 uiTemp = Tmp_Address32[i - 1];
336 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X - DB=0x%08X - DA=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, c_pattern, (uiTemp ^ c_pattern), read_data_u32(uiSourceAddress + ((i - 1) * 4)), read_data_u32(uiSourceAddress + ((i + 1) * 4)));
337 expected = c_pattern;
338#if 0
339 process_fail(expected, uiTemp);
340#endif
341 }
342 // else
343 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), Tmp_Address32[i - 1], c_pattern);
344
345 c_pattern += 0x04040404;
346 if ((c_pattern & 0xFF) == 0) c_pattern = uiStartVal;
347
348 }
349 }
350 else
351 {
352 for (i = 0; i < size_in_word;) {
353 Tmp_Address32[i++] = c_pattern;
354 c_pattern += 0x04040404;
355 if ((c_pattern & 0xFF) == 0) c_pattern = uiStartVal;
356
357 }
358 }
359 break;
360
361 case MILLER_EFFECT:
362 //obm_printf("Generating MILLER_EFFECT ");
363 c_pattern = 0x55555555;
364 //obm_printf("Generating MILLER_EFFECT Pattern - uiStartVal=%08X\n\r", c_pattern);
365 if (bCheck)
366 {
367 for (i = 0; i < size_in_word;)
368 {
369 if (Tmp_Address32[i++] != (c_pattern))
370 {
371 uiFails++;
372 uiTemp = Tmp_Address32[i - 1];
373 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, (c_pattern), (uiTemp ^ (c_pattern)));
374
375 }
376 // else
377 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), Tmp_Address32[i - 1], (c_pattern));
378
379 if (Tmp_Address32[i++] != (~c_pattern))
380 {
381 uiFails++;
382 uiTemp = Tmp_Address32[i - 1];
383 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, (~c_pattern), (uiTemp ^ (~c_pattern)));
384
385
386 }
387 //else
388 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), Tmp_Address32[i - 1], (~c_pattern));
389 }
390 }
391 else
392 {
393 for (i = 0; i < size_in_word;) {
394 Tmp_Address32[i++] = (c_pattern);
395 Tmp_Address32[i++] = (~c_pattern);
396 }
397 }
398 break;
399
400 case ZERO_ROR_INVERT:
401 //obm_printf("Generating ZERO_ROR_INVERT Pattern\n\r");
402 if (bCheck)
403 {
404 for (i = 0; i < size_in_word;)
405 {
406 if (Tmp_Address32[i++] != (uiStartVal))
407 {
408 uiFails++;
409 uiTemp = Tmp_Address32[i - 1];
410 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, (uiStartVal), (uiTemp ^ (uiStartVal)));
411
412 }
413 // else
414 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), Tmp_Address32[i - 1], (uiStartVal));
415
416 if (Tmp_Address32[i++] != (~uiStartVal))
417 {
418 uiFails++;
419 uiTemp = Tmp_Address32[i - 1];
420 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, (~uiStartVal), (uiTemp ^ (~uiStartVal)));
421
422
423 }
424 // else
425 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), Tmp_Address32[i - 1], (~uiStartVal));
426
427 uiStartVal = ror32_mcu(uiStartVal);
428 }
429 }
430 else
431 {
432 for (i = 0; i < size_in_word;) {
433 Tmp_Address32[i++] = (uiStartVal);
434 Tmp_Address32[i++] = (~uiStartVal);
435 uiStartVal = ror32_mcu(uiStartVal);
436 }
437 }
438 break;
439
440 case ONE_ROL_INVERT:
441 //obm_printf("Generating ONE_ROL_INVERT Pattern\n\r");
442 if (bCheck)
443 {
444 for (i = 0; i < size_in_word;)
445 {
446 if (Tmp_Address32[i++] != (uiStartVal))
447 {
448 uiFails++;
449 uiTemp = Tmp_Address32[i - 1];
450 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, (uiStartVal), (uiTemp ^ (uiStartVal)));
451
452 }
453 // else
454 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), Tmp_Address32[i - 1], (uiStartVal));
455
456 if (Tmp_Address32[i++] != (~uiStartVal))
457 {
458 uiFails++;
459 uiTemp = Tmp_Address32[i - 1];
460 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, (~uiStartVal), (uiTemp ^ (~uiStartVal)));
461
462
463 }
464 // else
465 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), Tmp_Address32[i - 1], (~uiStartVal));
466
467 uiStartVal = rol32_mcu(uiStartVal);
468 }
469 }
470 else
471 {
472 for (i = 0; i < size_in_word;) {
473 Tmp_Address32[i++] = (uiStartVal);
474 Tmp_Address32[i++] = (~uiStartVal);
475 uiStartVal = rol32_mcu(uiStartVal);
476 }
477 }
478
479 break;
480
481 case ZERO_ROR:
482 //obm_printf("Generating ZERO_ROR Pattern\n\r");
483 if (bCheck)
484 {
485 for (i = 0; i < size_in_word;) {
486 if (Tmp_Address32[i++] != (uiStartVal))
487 {
488 uiFails++;
489 uiTemp = Tmp_Address32[i - 1];
490 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X - DB=0x%08X - DA=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, (uiStartVal), (uiTemp ^ (uiStartVal)), read_data_u32(uiSourceAddress + ((i - 1) * 4)), read_data_u32(uiSourceAddress + ((i + 1) * 4)));
491
492 }
493 // else
494 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + (i * 4)), Tmp_Address32[i - 1], (uiStartVal));
495
496 uiStartVal = ror32_mcu(uiStartVal);
497 }
498 }
499 else
500 {
501 for (i = 0; i < size_in_word;) {
502 Tmp_Address32[i++] = (uiStartVal);
503 uiStartVal = ror32_mcu(uiStartVal);
504 }
505 }
506 break;
507
508 case ONE_ROL:
509 //obm_printf("Generating ONE_ROL Pattern\n\r");
510 if (bCheck)
511 {
512 for (i = 0; i < size_in_word;) {
513 if (Tmp_Address32[i++] != (uiStartVal))
514 {
515 uiFails++;
516 uiTemp = Tmp_Address32[i - 1];
517 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X - DB=0x%08X - DA=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, (uiStartVal), (uiTemp ^ (uiStartVal)), read_data_u32(uiSourceAddress + ((i - 1) * 4)), read_data_u32(uiSourceAddress + ((i + 1) * 4)));
518
519 }
520 // else
521 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), Tmp_Address32[i - 1], (uiStartVal));
522
523 uiStartVal = rol32_mcu(uiStartVal);
524 }
525 }
526 else
527 {
528 for (i = 0; i < size_in_word;) {
529 Tmp_Address32[i++] = (uiStartVal);
530 uiStartVal = rol32_mcu(uiStartVal);
531 }
532 }
533 break;
534
535 case WALKING_ONES:
536 //obm_printf("Generating WALKING_ONES Pattern\n\r");
537 i = 0;
538 if (bCheck)
539 {
540 for (j = 0; j < size_in_word;)
541 {
542 if (Tmp_Address32[j++] != (1 << i))
543 {
544 uiFails++;
545 uiTemp = Tmp_Address32[j - 1];
546 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((j - 1) * 4)), uiTemp, (1 << i), (uiTemp ^ (1 << i)));
547
548 }
549 // else
550 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((j - 1) * 4)), Tmp_Address32[j - 1], ~(1 << i));
551
552 if (Tmp_Address32[j++] != 0xFFFFFFFF)
553 {
554 uiFails++;
555 uiTemp = Tmp_Address32[j - 1];
556 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((j - 1) * 4)), uiTemp, 0xFFFFFFFF, (uiTemp ^ 0xFFFFFFFF));
557
558 }
559 // else
560 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((j - 1) * 4)), Tmp_Address32[j - 1], 0xFFFFFFFF);
561
562
563 i++;
564 if (i >= 32) i = 0;
565 }
566 }
567 else
568 {
569 for (j = 0; j < size_in_word; )
570 {
571 Tmp_Address32[j++] = (u32)(1 << i);
572 Tmp_Address32[j++] = 0xFFFFFFFF;
573
574 i++;
575 if (i >= 32) i = 0;
576 }
577 }
578 break;
579
580 case WALKING_ZEROS:
581 //obm_printf("Generating WALKING_ZEROS Pattern\n\r");
582 i = 0;
583 if (bCheck)
584 {
585 for (j = 0; j < size_in_word;)
586 {
587 if (Tmp_Address32[j++] != ~(1 << i))
588 {
589 uiFails++;
590 uiTemp = Tmp_Address32[j - 1];
591 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((j - 1) * 4)), uiTemp, ~(1 << i), (uiTemp ^ ~(1 << i)));
592
593 }
594 // else
595 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((j - 1) * 4)), Tmp_Address32[j - 1], ~(1 << i));
596
597 if (Tmp_Address32[j++] != 0)
598 {
599 uiFails++;
600 uiTemp = Tmp_Address32[j - 1];
601 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((j - 1) * 4)), uiTemp, 0, (uiTemp ^ 0));
602
603 }
604 // else
605 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((j - 1) * 4)), Tmp_Address32[j - 1], 0);
606
607
608 i++;
609 if (i >= 32) i = 0;
610 }
611 }
612 else
613 {
614 for (j = 0; j < size_in_word; )
615 {
616 Tmp_Address32[j++] = (u32)~(1 << i);
617 Tmp_Address32[j++] = 0;
618
619 i++;
620 if (i >= 32) i = 0;
621 }
622 }
623 break;
624
625 case SSTAILGATE_0101XXXX: //SSTAILGATE 0101XXXX
626 value = 0xFFFEFFFE;
627 //obm_printf("Generating WALKING_ZEROS Pattern\n\r");
628 i = 0;
629 if (bCheck)
630 {
631 for (j = 0; j < size_in_word;)
632 {
633 if (Tmp_Address32[j++] != value)
634 {
635 uiFails++;
636 uiTemp = Tmp_Address32[j - 1];
637 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((j - 1) * 4)), uiTemp, value, (uiTemp ^ value));
638
639 }
640 // else
641 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((j - 1) * 4)), Tmp_Address32[j - 1], value);
642
643 if (Tmp_Address32[j++] != 0)
644 {
645 uiFails++;
646 uiTemp = Tmp_Address32[j - 1];
647 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((j - 1) * 4)), uiTemp, 0, (uiTemp ^ 0));
648
649 }
650 // else
651 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((j - 1) * 4)), Tmp_Address32[j - 1], 0);
652
653 value = ror32_mcu(value);
654 }
655 }
656 else
657 {
658 for (j = 0; j < size_in_word; )
659 {
660 Tmp_Address32[j++] = value;
661 Tmp_Address32[j++] = 0;
662 value = ror32_mcu(value);
663 }
664 }
665 break;
666
667 case SSTAILGATE_01010000: //SSTAILGATE 0101XXXX
668 value = 0xFEFEFEFE;
669 //obm_printf("Generating WALKING_ZEROS Pattern\n\r");
670 i = 0;
671 if (bCheck)
672 {
673 for (j = 0; j < size_in_word;)
674 {
675 if (Tmp_Address32[j++] != value)
676 {
677 uiFails++;
678 uiTemp = Tmp_Address32[j - 1];
679 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((j - 1) * 4)), uiTemp, value, (uiTemp ^ value));
680
681 }
682 // else
683 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((j - 1) * 4)), Tmp_Address32[j - 1], value);
684
685 if (Tmp_Address32[j++] != 0)
686 {
687 uiFails++;
688 uiTemp = Tmp_Address32[j - 1];
689 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((j - 1) * 4)), uiTemp, 0, (uiTemp ^ 0));
690
691 }
692 // else
693 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((j - 1) * 4)), Tmp_Address32[j - 1], 0);
694
695 value = ror32_mcu(value);
696 }
697 }
698 else
699 {
700 for (j = 0; j < size_in_word; )
701 {
702 Tmp_Address32[j++] = value;
703 Tmp_Address32[j++] = 0;
704 value = ror32_mcu(value);
705 }
706 }
707 break;
708
709 case SSTAILGATE_01011111: //SSTAILGATE 0101XXXX
710 case MSTAILGATE:
711 //obm_printf("Generating SSTAILGATE_0101 Pattern\n\r");
712 if (uiPattern == SSTAILGATE_01011111)
713 uiStartVal = 0x00000001;
714 else if (uiPattern == MSTAILGATE)
715 uiStartVal = 0xFFFFFFFF;
716
717 c_pattern = (uiStartVal);
718 c_pattern_or_signal = (uiStartVal | test_signal);
719
720 if (bCheck)
721 {
722 for (i = 0; i < size_in_word;)
723 {
724 if (Tmp_Address32[i++] != c_zero)
725 {
726 uiFails++;
727 uiTemp = Tmp_Address32[i - 1];
728 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, c_zero, (uiTemp ^ c_zero));
729
730
731 }
732 else if (Tmp_Address32[i++] != c_pattern_or_signal)
733 {
734 uiFails++;
735 uiTemp = Tmp_Address32[i - 1];
736 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, c_pattern_or_signal, (uiTemp ^ c_pattern_or_signal));
737
738 }
739 else if (Tmp_Address32[i++] != c_zero)
740 {
741 uiFails++;
742 uiTemp = Tmp_Address32[i - 1];
743 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, c_zero, (uiTemp ^ c_zero));
744
745 }
746 else if (Tmp_Address32[i++] != c_pattern_or_signal)
747 {
748 uiFails++;
749 uiTemp = Tmp_Address32[i - 1];
750 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, c_pattern_or_signal, (uiTemp ^ c_pattern_or_signal));
751
752 }
753 else if (Tmp_Address32[i++] != c_pattern)
754 {
755 uiFails++;
756 uiTemp = Tmp_Address32[i - 1];
757 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, c_pattern, (uiTemp ^ c_pattern));
758
759 }
760 else if (Tmp_Address32[i++] != c_pattern)
761 {
762 uiFails++;
763 uiTemp = Tmp_Address32[i - 1];
764 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, c_pattern, (uiTemp ^ c_pattern));
765
766 }
767 else if (Tmp_Address32[i++] != c_pattern)
768 {
769 uiFails++;
770 uiTemp = Tmp_Address32[i - 1];
771 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, c_pattern, (uiTemp ^ c_pattern));
772
773 }
774 else if (Tmp_Address32[i++] != c_pattern)
775 {
776 uiFails++;
777 uiTemp = Tmp_Address32[i - 1];
778 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, c_pattern, (uiTemp ^ c_pattern));
779
780 }
781 // else
782 // obm_printf("PASS - pa%d all data\n\r", uiPattern);
783
784 }
785 }
786 else
787 {
788 for (i = 0; i < size_in_word;)
789 {
790 Tmp_Address32[i++] = c_zero;
791 Tmp_Address32[i++] = c_pattern_or_signal;
792 Tmp_Address32[i++] = c_zero;
793 Tmp_Address32[i++] = c_pattern_or_signal;
794 Tmp_Address32[i++] = c_pattern;
795 Tmp_Address32[i++] = c_pattern;
796 Tmp_Address32[i++] = c_pattern;
797 Tmp_Address32[i++] = c_pattern;
798 }
799 }
800 break;
801
802 case SSTAILGATE_01011010: //SSTAILGATE 01011010
803 //obm_printf("Generating SSTAILGATE_1100 Pattern\n\r");
804 uiStartVal = 0x00000001;
805 c_pattern = (uiStartVal);
806 c_pattern_or_signal = (uiStartVal | test_signal);
807
808 if (bCheck)
809 {
810 for (i = 0; i < size_in_word;)
811 {
812 if (Tmp_Address32[i++] != c_zero)
813 {
814 uiFails++;
815 uiTemp = Tmp_Address32[i - 1];
816 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, c_zero, (uiTemp ^ c_zero));
817
818
819 }
820 else if (Tmp_Address32[i++] != c_pattern_or_signal)
821 {
822 uiFails++;
823 uiTemp = Tmp_Address32[i - 1];
824 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, c_pattern_or_signal, (uiTemp ^ c_pattern_or_signal));
825
826 }
827 else if (Tmp_Address32[i++] != c_zero)
828 {
829 uiFails++;
830 uiTemp = Tmp_Address32[i - 1];
831 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, c_zero, (uiTemp ^ c_zero));
832
833 }
834 else if (Tmp_Address32[i++] != c_pattern_or_signal)
835 {
836 uiFails++;
837 uiTemp = Tmp_Address32[i - 1];
838 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, c_pattern_or_signal, (uiTemp ^ c_pattern_or_signal));
839
840 }
841 else if (Tmp_Address32[i++] != c_pattern)
842 {
843 uiFails++;
844 uiTemp = Tmp_Address32[i - 1];
845 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, c_pattern, (uiTemp ^ c_pattern));
846
847 }
848 else if (Tmp_Address32[i++] != c_zero)
849 {
850 uiFails++;
851 uiTemp = Tmp_Address32[i - 1];
852 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, c_zero, (uiTemp ^ c_zero));
853
854 }
855 else if (Tmp_Address32[i++] != c_pattern)
856 {
857 uiFails++;
858 uiTemp = Tmp_Address32[i - 1];
859 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, c_pattern, (uiTemp ^ c_pattern));
860
861 }
862 else if (Tmp_Address32[i++] != c_zero)
863 {
864 uiFails++;
865 uiTemp = Tmp_Address32[i - 1];
866 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, c_zero, (uiTemp ^ c_zero));
867
868 }
869 // else
870 // obm_printf("PASS - pa%d all data\n\r", uiPattern);
871
872 uiStartVal = rol32_mcu(uiStartVal);
873 test_signal = rol32_mcu(test_signal);
874
875 c_pattern = (uiStartVal);
876 c_pattern_or_signal = (uiStartVal | test_signal);
877
878
879 }
880 }
881 else
882 {
883 for (i = 0; i < size_in_word;)
884 {
885 Tmp_Address32[i++] = c_zero;
886 Tmp_Address32[i++] = c_pattern_or_signal;
887 Tmp_Address32[i++] = c_zero;
888 Tmp_Address32[i++] = c_pattern_or_signal;
889 Tmp_Address32[i++] = c_pattern;
890 Tmp_Address32[i++] = c_zero;
891 Tmp_Address32[i++] = c_pattern;
892 Tmp_Address32[i++] = c_zero;
893
894 uiStartVal = rol32_mcu(uiStartVal);
895 test_signal = rol32_mcu(test_signal);
896
897 c_pattern = (uiStartVal);
898 c_pattern_or_signal = (uiStartVal | test_signal);
899 }
900 }
901 break;
902
903 case FREQ_SWEEP:
904 //obm_printf("Generating FREQ_SWEEP Pattern\n\r");
905 i = 0;
906 c_pattern = (c_zero);
907 c_pattern_or_signal = (~c_zero);
908 for (j = 1; j < size_in_word / 2; j++)
909 {
910 k = 0;
911 while (k < j)
912 {
913 if (bCheck)
914 {
915 if (Tmp_Address32[i++] != c_pattern)
916 {
917 uiFails++;
918 uiTemp = Tmp_Address32[i - 1];
919 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X - DB=0x%08X - DA=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, c_pattern, (uiTemp ^ c_pattern), read_data_u32(uiSourceAddress + ((i - 1) * 4)), read_data_u32(uiSourceAddress + ((i + 1) * 4)));
920
921 }
922 // else
923 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), Tmp_Address32[i - 1], c_pattern);
924 }
925 else
926 {
927 Tmp_Address32[i++] = c_pattern;
928 }
929 k++;
930 if (i >= size_in_word)
931 break;
932 }
933 if (i >= size_in_word)
934 break;
935
936 k = 0;
937 while (k < j)
938 {
939 if (bCheck)
940 {
941 if (Tmp_Address32[i++] != c_pattern_or_signal)
942 {
943 uiFails++;
944 uiTemp = Tmp_Address32[i - 1];
945 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X - DB=0x%08X - DA=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, c_pattern_or_signal, (uiTemp ^ c_pattern_or_signal), read_data_u32(uiSourceAddress + ((i - 1) * 4)), read_data_u32(uiSourceAddress + ((i + 1) * 4)));
946
947 }
948 // else
949 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), Tmp_Address32[i - 1], c_pattern_or_signal);
950 }
951 else
952 {
953 Tmp_Address32[i++] = c_pattern_or_signal;
954 }
955 k++;
956 if (i >= size_in_word)
957 break;
958 }
959 if (i >= size_in_word)
960 break;
961 }
962 break;
963
964 case VERT_INCREMENT:
965 //obm_printf("Generating VERT_INCREMENT Pattern\n\r");
966 c_pattern = (uiStartVal);
967 if (bCheck)
968 {
969 for (i = 0; i < size_in_word;) {
970 if (Tmp_Address32[i++] != c_pattern)
971 {
972 uiFails++;
973 uiTemp = Tmp_Address32[i - 1];
974 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X - DB=0x%08X - DA=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, c_pattern, (uiTemp ^ c_pattern), read_data_u32(uiSourceAddress + ((i - 1) * 4)), read_data_u32(uiSourceAddress + ((i + 1) * 4)));
975
976 }
977 // else
978 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), Tmp_Address32[i - 1], c_pattern);
979
980 c_pattern++;
981 }
982 }
983 else
984 {
985 for (i = 0; i < size_in_word;) {
986 Tmp_Address32[i++] = c_pattern;
987 c_pattern++;
988 }
989 }
990 break;
991
992 case HORZ_INCREMENT:
993 //obm_printf("Generating HORZ_INCREMENT Pattern\n\r");
994 c_pattern = 0x00000001;
995 i = 0;
996 for (k = 0; k < (size_in_word / 16); k++)
997 {
998 for (j = 0; j < 16; j++)
999 {
1000 if ((j % 2) == 1) { // ODD
1001 if (bCheck)
1002 {
1003 if (Tmp_Address32[i++] != c_pattern)
1004 {
1005 uiFails++;
1006 uiTemp = Tmp_Address32[i - 1];
1007 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X - DB=0x%08X - DA=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, c_pattern, (uiTemp ^ c_pattern), read_data_u32(uiSourceAddress + ((i - 1) * 4)), read_data_u32(uiSourceAddress + ((i + 1) * 4)));
1008
1009 }
1010 // else
1011 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), Tmp_Address32[i - 1], c_pattern);
1012 }
1013 else
1014 {
1015 Tmp_Address32[i++] = c_pattern;
1016 }
1017 }
1018 else { // EVEN
1019 if (bCheck)
1020 {
1021 if (Tmp_Address32[i++] != c_zero)
1022 {
1023 uiFails++;
1024 uiTemp = Tmp_Address32[i - 1];
1025 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X - DB=0x%08X - DA=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, c_zero, (uiTemp ^ c_zero), read_data_u32(uiSourceAddress + ((i - 1) * 4)), read_data_u32(uiSourceAddress + ((i + 1) * 4)));
1026 }
1027 // else
1028 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), Tmp_Address32[i - 1], c_zero);
1029 }
1030 else
1031 {
1032 Tmp_Address32[i++] = c_zero;
1033 }
1034 }
1035 if (i >= size_in_word)
1036 break;
1037 if (((j % 4) / 2) == 1) { // {2,3,6,7,10,11,14,15}
1038 if (bCheck)
1039 {
1040 if (Tmp_Address32[i++] != c_pattern)
1041 {
1042 uiFails++;
1043 uiTemp = Tmp_Address32[i - 1];
1044 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X - DB=0x%08X - DA=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, c_pattern, (uiTemp ^ c_pattern), read_data_u32(uiSourceAddress + ((i - 1) * 4)), read_data_u32(uiSourceAddress + ((i + 1) * 4)));
1045
1046 }
1047 // else
1048 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), Tmp_Address32[i - 1], c_pattern);
1049 }
1050 else
1051 {
1052 Tmp_Address32[i++] = c_pattern;
1053 }
1054 }
1055 else { // {0,1,4,5,8,9,12,13}
1056 if (bCheck)
1057 {
1058 if (Tmp_Address32[i++] != c_zero)
1059 {
1060 uiFails++;
1061 uiTemp = Tmp_Address32[i - 1];
1062 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X - DB=0x%08X - DA=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, c_zero, (uiTemp ^ c_zero), read_data_u32(uiSourceAddress + ((i - 1) * 4)), read_data_u32(uiSourceAddress + ((i + 1) * 4)));
1063
1064 }
1065 // else
1066 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), Tmp_Address32[i - 1], c_zero);
1067 }
1068 else
1069 {
1070 Tmp_Address32[i++] = c_zero;
1071 }
1072 }
1073 if (i >= size_in_word)
1074 break;
1075 if (((j % 8) / 4) == 1) { // {4,5,6,7,12,13,14,15}
1076 if (bCheck)
1077 {
1078 if (Tmp_Address32[i++] != c_pattern)
1079 {
1080 uiFails++;
1081 uiTemp = Tmp_Address32[i - 1];
1082 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X - DB=0x%08X - DA=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, c_pattern, (uiTemp ^ c_pattern), read_data_u32(uiSourceAddress + ((i - 1) * 4)), read_data_u32(uiSourceAddress + ((i + 1) * 4)));
1083
1084 }
1085 // else
1086 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), Tmp_Address32[i - 1], c_pattern);
1087 }
1088 else
1089 {
1090 Tmp_Address32[i++] = c_pattern;
1091 //obm_printf("i(%d) - j(%d) = %08X\n\r",i,j,c_pattern);
1092 }
1093 }
1094 else { // {0,1,2,3,8,9,10,11}
1095 if (bCheck)
1096 {
1097
1098 if (Tmp_Address32[i++] != c_zero)
1099 {
1100 uiFails++;
1101 uiTemp = Tmp_Address32[i - 1];
1102 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X - DB=0x%08X - DA=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, c_zero, (uiTemp ^ c_zero), read_data_u32(uiSourceAddress + ((i - 1) * 4)), read_data_u32(uiSourceAddress + ((i + 1) * 4)));
1103
1104 }
1105 // else
1106 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), Tmp_Address32[i - 1], c_zero);
1107 }
1108 else
1109 {
1110 Tmp_Address32[i++] = c_zero;
1111 //obm_printf("i(%d) - j(%d) = %08X\n\r",i,j,c_zero);
1112 }
1113 }
1114 if (i >= size_in_word)
1115 break;
1116 if ((j / 8) == 1) { // {8 - 15}
1117 if (bCheck)
1118 {
1119 if (Tmp_Address32[i++] != c_pattern)
1120 {
1121 uiFails++;
1122 uiTemp = Tmp_Address32[i - 1];
1123 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X - DB=0x%08X - DA=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, c_pattern, (uiTemp ^ c_pattern), read_data_u32(uiSourceAddress + ((i - 1) * 4)), read_data_u32(uiSourceAddress + ((i + 1) * 4)));
1124
1125 }
1126 // else
1127 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), Tmp_Address32[i - 1], c_pattern);
1128 }
1129 else
1130 {
1131 Tmp_Address32[i++] = c_pattern;
1132 //obm_printf("i(%d) - j(%d) = %08X\n\r",i,j,c_pattern);
1133 }
1134 }
1135 else { // {0 - 7}
1136 if (bCheck)
1137 {
1138 if (Tmp_Address32[i++] != c_zero)
1139 {
1140 uiFails++;
1141 uiTemp = Tmp_Address32[i - 1];
1142 obm_printf( "FAIL! pa%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X - DB=0x%08X - DA=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), uiTemp, c_zero, (uiTemp ^ c_zero), read_data_u32(uiSourceAddress + ((i - 1) * 4)), read_data_u32(uiSourceAddress + ((i + 1) * 4)));
1143
1144 }
1145 // else
1146 // obm_printf("PASS - pa%d:[@0x%08lx]=0x%08X Exp=0x%08X\n\r", uiPattern, (uiSourceAddress + ((i - 1) * 4)), Tmp_Address32[i - 1], c_zero);
1147 }
1148 else
1149 {
1150 Tmp_Address32[i++] = c_zero;
1151 }
1152 }
1153 if (i >= size_in_word)
1154 break;
1155 }
1156 if (i >= size_in_word)
1157 break;
1158
1159 c_pattern = rol32_mcu(c_pattern);
1160 }
1161 break;
1162
1163 default:
1164 obm_printf("No option with uipat[%d ]\n\r", uiPattern);
1165 break;
1166
1167 }
1168
1169 if (uiFails)
1170 {
1171 giPatternNumOfFails[uiPattern] += uiFails;
1172 giPatternFails[uiPattern]++;
1173 }
1174 return uiFails;
1175}
1176
1177static u32 mem_all_pattern_test(u32 uiStartBase, u32 uiSize)
1178{
1179 u32 fail_cnt = 0, total_fail = 0, pattern = 0;
1180 u32 bResult = DDR_TEST_FAIL;
1181 u32 uiStartVal[10] = { 0xa5a5a5a5, 0xA5A50000, 0x2d2d2d2d, 0x5a5a5a5a, 0x89abcdef,
1182 0xD2D2D2D2, 0x01010101, 0xECA86420, 0x00000000, 0xFFFFFFFF };
1183 unsigned long uiSource = 0;
1184 int trace_print_level = 0;
1185 // only test width with 32b and 64b as the limited size of SQU
1186 for (pattern = ANALOG; pattern <= HORZ_INCREMENT; pattern++)
1187 // for(pattern = 8; pattern <= HORZ_INCREMENT; pattern++)
1188 {
1189 //temp = (pattern - ANALOG);
1190 //uiSource = uiStartBase + temp*uiSize;
1191 uiSource = uiStartBase;
1192
1193 obm_printf( "Addr=[0x%08lx], Size=[0x%X]Bytes, Pattern=%d, StartValue=[0x%08X]\n\r", uiSource, uiSize, pattern, uiStartVal[pattern % 10]);
1194 allp_mcuGenerateWordPattern(uiSource, pattern, (uiSize / WORD_SIZE), uiStartVal[pattern % 10], 0);
1195 fail_cnt += allp_mcuGenerateWordPattern(uiSource, pattern, (uiSize / WORD_SIZE), uiStartVal[pattern % 10], 1);
1196
1197 if (fail_cnt)
1198 obm_printf( "***FAIL*** pattern test failed=%d times - Address[0x%08lx] - Pattern[%d] - Start Value[0x%08X], Size=[0x%x]B\n\r", fail_cnt, uiSource, pattern, uiStartVal[pattern % 10], uiSize);
1199 else
1200 obm_printf("pattern test ok\n\n\r");
1201
1202 total_fail += fail_cnt;
1203
1204 if (total_fail) //break on any fail
1205 break;
1206 }
1207
1208 if (total_fail == 0)
1209 {
1210 bResult = DDR_TEST_PASS;
1211 obm_printf( "===OK=== all pattern tests ok - Address[0x%08lx], Size=[0x%x]B\n\n\r", uiSource, uiSize);
1212 }
1213 else
1214 {
1215 bResult = DDR_TEST_FAIL;
1216 obm_printf( "===FAIL=== all pattern tests failed - total_fail=%d, Address[0x%08lx], Size=[0x%x]B\n\n\r", total_fail, uiSource, uiSize);
1217 }
1218
1219 return bResult;
1220}
1221
1222#else //CONFIG_USE_DDR_ALL_PATTERN
1223
1224static u32 mem_data16_pattern_test(u32 uiStartBase, u32 uiSize)
1225{
1226 u32 i=0,j=0,k=0;
1227 u32 data=0;
1228 u32 err=0;
1229 u32 start_addr=0x7e000000;
1230 u32 len=0x400000;
1231 u32 bResult = DDR_TEST_FAIL;
1232 static u32 test_pattern[NR_TEST_PATTERN] = {
1233 0x01010101,0x02020202,0x04040404,0x08080808,
1234 0x10101010,0x20202020,0x40404040,0x80808080,
1235 0xFEFEFEFE,0xFDFDFDFD,0xFBFBFBFB,0xF7F7F7F7,
1236 0xEFEFEFEF,0xDFDFDFDF,0xBFBFBFBF,0x7F7F7F7F,
1237 };
1238 //u32 local_test_pattern[NR_TEST_PATTERN];
1239
1240 obm_printf("mem_data16_pattern_test [0x%08x-->0x%08x]!!!\n\r",
1241 uiStartBase, uiStartBase + uiSize);
1242
1243 start_addr = uiStartBase;
1244 len = uiSize;
1245 len &= (~(sizeof(test_pattern) - 1));
1246 obm_printf("len: %x\n\r", len);
1247
1248#if 1
1249 for(j = 0; j <= 15; j++)
1250 {
1251 for(i = 0; i< len/4; i++)
1252 {
1253 data_write32(start_addr + i*4, test_pattern[j]);
1254 }
1255 flush_dcache_all();
1256
1257 for(i = 0; i < len/4; i++)
1258 {
1259 data = data_read32(start_addr + i*4);
1260 if(data != test_pattern[j])
1261 {
1262 obm_printf("FAIL! data%d:[@0x%08lx]=0x%08X Exp=0x%08X - Dif=0x%08X\n\r",j,start_addr+i*4,data,test_pattern[j],(data^test_pattern[j]));
1263 err++;
1264 }
1265 }
1266 }
1267#else
1268 for (i = 0; i < NR_TEST_PATTERN; i++) {
1269 /* prepare pattern data */
1270 for (j = 0; j < NR_TEST_PATTERN; j++) {
1271 local_test_pattern[j] = test_pattern[i];
1272 }
1273
1274 for (j = 0; j < len; j += sizeof(local_test_pattern)) {
1275 memcpy((void *)(start_addr + j), (void *)local_test_pattern, sizeof(local_test_pattern));
1276 }
1277 flush_dcache_all();
1278
1279 for (j = 0; j < len; j += sizeof(local_test_pattern)) {
1280 memcpy(local_test_pattern, (void *)(start_addr + j), sizeof(local_test_pattern));
1281 for (k = 0; k < NR_TEST_PATTERN; k++) {
1282 if (local_test_pattern[k] != test_pattern[i]) {
1283 err++;
1284 obm_printf("mem err: wr 0x%08x rd 0x%08x @0x%08x\n\r",
1285 test_pattern[i], local_test_pattern[k],
1286 (start_addr + j + k));
1287 }
1288 }
1289 }
1290 }
1291#endif
1292 if (err == 0)
1293 {
1294 bResult = DDR_TEST_PASS;
1295 obm_printf("===PASS=== all data tests passed - StartAddress[0x%08lx], Size=[0x%x]B\n\n\r",start_addr,len);
1296 }
1297 else
1298 {
1299 bResult = DDR_TEST_FAIL;
1300 obm_printf("===FAIL=== all data tests passed - total_fail=%d, StartAddress[0x%08lx], Size=[0x%x]B\n\n\r",err, start_addr, len);
1301 }
1302
1303 return bResult;
1304}
1305#endif
1306
1307u32 asr_ddr_pattern_test(u32 uiStartBase, u32 uiSize)
1308{
1309 u32 ret;
1310
1311#ifdef CONFIG_USE_DDR_ALL_PATTERN
1312 ret = mem_all_pattern_test(uiStartBase, uiSize);
1313#else
1314 ret = mem_data16_pattern_test(uiStartBase, uiSize);
1315#endif
1316 return ret;
1317}
1318
1319VOID ASR_DdrPatternTest(pTIM pTIM_h, pTIM pDTIM_h, OTA_IMAGE_TYPE DTIMType)
1320{
1321 pIMAGE_INFO_3_4_0 pImageInfo = NULL;
1322 UINT_T OsloStart, OsloSize, Ret;
1323 UINT_T TosStart, TosSize;
1324
1325 if (!ASRFlag_NeedRunDDRT(pTIM_h) || pOBM2OSL_h->ddrt_info.bits.test_done)
1326 return;
1327
1328 PlatformFrequencyChange(-1, 1, -1);
1329
1330 OsloStart = 0x1400000;
1331 OsloSize = 0xC00000; //20M ~ 32M is for Uboot
1332 TosStart = OsloStart + OsloSize;
1333 TosSize = 0;
1334
1335#ifdef CONFIG_TEE_OS
1336 pImageInfo = FindImageInTIM(pDTIM_h, TZSWIDENTIFIER);
1337#ifdef CONFIG_ASR_SDTIM
1338 if(ImageIsSDTIMIncluded(pImageInfo)) {
1339 IMAGE_INFO_3_4_0 ImageInfoSDtim;
1340 pImageInfo = SDTimImageInfoUpdate(pImageInfo, &ImageInfoSDtim, DTIMType);
1341 }
1342#endif
1343 if (pImageInfo) {
1344 TosStart = pImageInfo->LoadAddr;
1345 if(pOBM2OSL_h->tee_dram_size)
1346 TosSize = pOBM2OSL_h->tee_dram_size;
1347 else
1348 TosSize = 0x400000; //define TOS size;
1349 }
1350#endif
1351
1352 if (TosStart == (OsloStart + OsloSize))
1353 {
1354 Ret = asr_ddr_pattern_test(OsloStart, OsloSize + TosSize);
1355 } else {
1356 Ret = asr_ddr_pattern_test(OsloStart, OsloSize);
1357 if (Ret == DDR_TEST_PASS)
1358 Ret = asr_ddr_pattern_test(TosStart, TosSize);
1359 }
1360
1361 pOBM2OSL_h->ddrt_info.bits.test_done = 1; //done
1362 pOBM2OSL_h->ddrt_info.bits.test_res = Ret;
1363 pOBM2OSL_h->ddrt_info.bits.uboot_start = OsloStart >> 20;
1364 pOBM2OSL_h->ddrt_info.bits.uboot_size = OsloSize >> 20;
1365 pOBM2OSL_h->ddrt_info.bits.tos_start = TosStart >> 20;
1366 pOBM2OSL_h->ddrt_info.bits.tos_size = TosSize >> 20;
1367
1368 return;
1369}