@@ -58,6 +58,26 @@ enum common_consts
58
58
ATTR_RANK3 = 3 , // /< Attribute index for rank3
59
59
};
60
60
61
+ // /
62
+ // / @brief Common mcbist constants
63
+ // /
64
+ enum mcbist_common_consts
65
+ {
66
+ CYCLES_PER_CMD = 4 , // /< Best case cycles per MCBIST command
67
+ MAX_RANK_PER_DIMM = 4 ,
68
+
69
+ BYTES_PER_GB = 1000000000 , // /< Multiplier to go from GB to B
70
+ T_PER_MT = 1000000 , // /< Multiplier to go from MT/s to T/s
71
+
72
+ // Number of double words in...
73
+ NUM_DW_IN_128B = 16 ,
74
+ NUM_DW_IN_64B = 8 ,
75
+
76
+ BG_SCRUB_IN_HOURS = 12 ,
77
+ CMD_TIMEBASE = 8192 , // /< Represents the timebase multiplier for the MCBIST inter cmd gap
78
+ MAX_CMD_GAP = 4095 , // /< Represents the maximum (non-multplied) time for MCBIST inter cmd gap
79
+ };
80
+
61
81
// /
62
82
// / @brief Common timings
63
83
// /
@@ -243,6 +263,169 @@ enum states
243
263
NO_CHIP_SELECT_ACTIVE = 0xFF ,
244
264
};
245
265
266
+ namespace mcbist
267
+ {
268
+
269
+ enum broadcast_timebase
270
+ {
271
+ // Number of 1024 2:1 cycle timebases to wait starting MCBIST
272
+ // for SRQs to get synced for broadcast mode
273
+ TB_COUNT_2 = 0b0000001 ,
274
+ TB_COUNT_4 = 0b0000011 ,
275
+ TB_COUNT_8 = 0b0000111 ,
276
+ TB_COUNT_16 = 0b0001111 ,
277
+ TB_COUNT_32 = 0b0011111 ,
278
+ TB_COUNT_64 = 0b0111111 ,
279
+ TB_COUNT_128 = 0b1111111 ,
280
+ };
281
+
282
+ enum rmw_address
283
+ {
284
+ // 32B block addresses into the maint portion of the rmw buffer
285
+ DW0 = 0b111110000 ,
286
+ DW1 = 0b111110001 ,
287
+ DW2 = 0b111110010 ,
288
+ DW3 = 0b111110011 ,
289
+ DW4 = 0b111110100 ,
290
+ DW5 = 0b111110101 ,
291
+ DW6 = 0b111110110 ,
292
+ DW7 = 0b111110111 ,
293
+ DW8 = 0b111111000 ,
294
+ DW9 = 0b111111001 ,
295
+ DWA = 0b111111010 ,
296
+ DWB = 0b111111011 ,
297
+ DWC = 0b111111100 ,
298
+ DWD = 0b111111101 ,
299
+ DWE = 0b111111110 ,
300
+ DWF = 0b111111111 ,
301
+ };
302
+
303
+ enum data_rotate_mode
304
+ {
305
+ // MCBIST data rotate modes refer to register MCBDRCR bits 0:3
306
+ ROTATE_0_BITS = 0b0000 ,
307
+ ROTATE_1_BITS = 0b0001 ,
308
+ ROTATE_2_BITS = 0b0010 ,
309
+ ROTATE_3_BITS = 0b0011 ,
310
+ ROTATE_4_BITS = 0b0100 ,
311
+ ROTATE_5_BITS = 0b0101 ,
312
+ ROTATE_6_BITS = 0b0110 ,
313
+ ROTATE_7_BITS = 0b0111 ,
314
+ ROTATE_8_BITS = 0b1000 ,
315
+ ROTATE_9_BITS = 0b1001 ,
316
+ ROTATE_10_BITS = 0b1010 ,
317
+ ROTATE_11_BITS = 0b1011 ,
318
+ ROTATE_12_BITS = 0b1100 ,
319
+ ROTATE_13_BITS = 0b1101 ,
320
+ ROTATE_14_BITS = 0b1110 ,
321
+ ROTATE_15_BITS = 0b1111 ,
322
+ };
323
+
324
+ enum data_seed_mode
325
+ {
326
+ // MCBIST data seed modes refer to register MCBDRCR bits 21:22
327
+ ALL_UNIQUE = 0b00 ,
328
+ REPEAT_SEED_0 = 0b01 ,
329
+ REPEAT_SEED_1 = 0b10 ,
330
+ REPEAT_SEED_2 = 0b11 ,
331
+ };
332
+
333
+ enum data_mode
334
+ {
335
+ // MCBIST test data modes
336
+ FIXED_DATA_MODE = 0b000 ,
337
+ RAND_FWD_MODE = 0b001 ,
338
+ RAND_REV_MODE = 0b010 ,
339
+ RAND_FWD_MAINT = 0b011 ,
340
+ RAND_REV_MAINT = 0b100 ,
341
+ DATA_EQ_ADDR = 0b101 ,
342
+ ROTATE_LEFT_MODE = 0b110 ,
343
+ ROTATE_RIGHT_MODE = 0b111 ,
344
+ };
345
+
346
+ // 0:3 Operation Type
347
+ enum op_type
348
+ {
349
+ WRITE = 0b0000 , // fast, with no concurrent traffic
350
+ READ = 0b0001 , // fast, with no concurrent traffic
351
+ READ_WRITE = 0b0010 ,
352
+ WRITE_READ = 0b0011 ,
353
+ READ_WRITE_READ = 0b0100 ,
354
+ READ_WRITE_WRITE = 0b0101 ,
355
+ RAND_SEQ = 0b0110 ,
356
+ READ_READ_WRITE = 0b1000 ,
357
+ SCRUB_RRWR = 0b1001 ,
358
+ STEER_RW = 0b1010 ,
359
+ ALTER = 0b1011 , // (W)
360
+ DISPLAY = 0b1100 , // (R, slow)
361
+ CCS_EXECUTE = 0b1111 ,
362
+
363
+ // if bits 9:11 (Data Mode bits) = 000 (bits 4:8 used to specify which subtest to go to)
364
+ // Refresh only cmd if bits 9:11 (Data Mode bits) /= 000
365
+ GOTO_SUBTEST_N = 0b0111 ,
366
+ };
367
+
368
+
369
+ enum test_type
370
+ {
371
+ USER_MODE = 0 ,
372
+ CENSHMOO = 1 ,
373
+ SUREFAIL = 2 ,
374
+ MEMWRITE = 3 ,
375
+ MEMREAD = 4 ,
376
+ CBR_REFRESH = 5 ,
377
+ MCBIST_SHORT = 6 ,
378
+ SHORT_SEQ = 7 ,
379
+ DELTA_I = 8 ,
380
+ DELTA_I_LOOP = 9 ,
381
+ SHORT_RAND = 10 ,
382
+ LONG1 = 11 ,
383
+ BUS_TAT = 12 ,
384
+ SIMPLE_FIX = 13 ,
385
+ SIMPLE_RAND = 14 ,
386
+ SIMPLE_RAND_2W = 15 ,
387
+ SIMPLE_RAND_FIXD = 16 ,
388
+ SIMPLE_RA_RD_WR = 17 ,
389
+ SIMPLE_RA_RD_R = 18 ,
390
+ SIMPLE_RA_FD_R = 19 ,
391
+ SIMPLE_RA_FD_R_INF = 20 ,
392
+ SIMPLE_SA_FD_R = 21 ,
393
+ SIMPLE_RA_FD_W = 22 ,
394
+ INFINITE = 23 ,
395
+ WR_ONLY = 24 ,
396
+ W_ONLY = 25 ,
397
+ R_ONLY = 26 ,
398
+ W_ONLY_RAND = 27 ,
399
+ R_ONLY_RAND = 28 ,
400
+ R_ONLY_MULTI = 29 ,
401
+ SHORT = 30 ,
402
+ SIMPLE_RAND_BARI = 31 ,
403
+ W_R_INFINITE = 32 ,
404
+ W_R_RAND_INFINITE = 33 ,
405
+ R_INFINITE1 = 34 ,
406
+ R_INFINITE_RF = 35 ,
407
+ MARCH = 36 ,
408
+ SIMPLE_FIX_RF = 37 ,
409
+ SHMOO_STRESS = 38 ,
410
+ SIMPLE_RAND_RA = 39 ,
411
+ SIMPLE_FIX_RA = 40 ,
412
+ SIMPLE_FIX_RF_RA = 41 ,
413
+ TEST_RR = 42 ,
414
+ TEST_RF = 43 ,
415
+ W_ONLY_INFINITE_RAND = 44 ,
416
+ MCB_2D_CUP_SEQ = 45 ,
417
+ MCB_2D_CUP_RAND = 46 ,
418
+ SHMOO_STRESS_INFINITE = 47 ,
419
+ HYNIX_1_COL = 48 ,
420
+ RMWFIX = 49 ,
421
+ RMWFIX_I = 50 ,
422
+ W_INFINITE = 51 ,
423
+ R_INFINITE = 52 ,
424
+ };
425
+
426
+
427
+ } // namespace mcbist
428
+
246
429
// /
247
430
// / @brief Supported DIMM speed equality deliberations
248
431
// /
0 commit comments