Home | History | Annotate | Download | only in doc
      1 Overview
      2 ========
      3 
      4 The overall usage pattern for ECC diagnostic commands is the following:
      5 
      6   * (injecting errors is initially disabled)
      7 
      8   * define inject mask (which tells the DDR controller what type of errors
      9     we'll be injecting: single/multiple bit etc.)
     10 
     11   * enable injecting errors - from now on the controller injects errors as
     12     indicated in the inject mask
     13 
     14 IMPORTANT NOTICE: enabling injecting multiple-bit errors is potentially
     15 dangerous as such errors are NOT corrected by the controller. Therefore caution
     16 should be taken when enabling the injection of multiple-bit errors: it is only
     17 safe when used on a carefully selected memory area and used under control of
     18 the 'ecc testdw' 'ecc testword' command (see example 'Injecting Multiple-Bit
     19 Errors' below). In particular, when you simply set the multiple-bit errors in
     20 inject mask and enable injection, U-Boot is very likely to hang quickly as the
     21 errors will be injected when it accesses its code, data etc.
     22 
     23 
     24 Use cases for DDR 'ecc' command:
     25 ================================
     26 
     27 Before executing particular tests reset target board or clear status registers:
     28 
     29 => ecc captureclear
     30 => ecc errdetectclr all
     31 => ecc sbecnt 0
     32 
     33 
     34 Injecting Single-Bit Errors
     35 ---------------------------
     36 
     37 1. Set 1 bit in Data Path Error Inject Mask
     38 
     39 => ecc injectdatahi 1
     40 
     41 2. Run test over some memory region
     42 
     43 => ecc testdw 200000 10
     44 
     45 3. Check ECC status
     46 
     47 => ecc status
     48 ...
     49 Memory Data Path Error Injection Mask High/Low: 00000001 00000000
     50 ...
     51 Memory Single-Bit Error Management (0..255):
     52   Single-Bit Error Threshold: 255
     53   Single Bit Error Counter: 16
     54 ...
     55 Memory Error Detect:
     56   Multiple Memory Errors: 0
     57   Multiple-Bit Error: 0
     58   Single-Bit Error: 0
     59 ...
     60 
     61 16 errors were generated, Single-Bit Error flag was not set as Single Bit Error
     62 Counter did not reach  Single-Bit Error Threshold.
     63 
     64 4. Make sure used memory region got re-initialized with 0x0123456789abcdef
     65 
     66 => md 200000
     67 00200000: 01234567 89abcdef 01234567 89abcdef    .#Eg.....#Eg....
     68 00200010: 01234567 89abcdef 01234567 89abcdef    .#Eg.....#Eg....
     69 00200020: 01234567 89abcdef 01234567 89abcdef    .#Eg.....#Eg....
     70 00200030: 01234567 89abcdef 01234567 89abcdef    .#Eg.....#Eg....
     71 00200040: 01234567 89abcdef 01234567 89abcdef    .#Eg.....#Eg....
     72 00200050: 01234567 89abcdef 01234567 89abcdef    .#Eg.....#Eg....
     73 00200060: 01234567 89abcdef 01234567 89abcdef    .#Eg.....#Eg....
     74 00200070: 01234567 89abcdef 01234567 89abcdef    .#Eg.....#Eg....
     75 00200080: deadbeef deadbeef deadbeef deadbeef    ................
     76 00200090: deadbeef deadbeef deadbeef deadbeef    ................
     77 
     78 Injecting Multiple-Bit Errors
     79 -----------------------------
     80 
     81 1. Set more than 1 bit in Data Path Error Inject Mask
     82 
     83 => ecc injectdatahi 1
     84 => ecc injectdatalo 1
     85 
     86 2. Run test over some memory region
     87 
     88 => ecc testword 200000 1
     89 
     90 3. Check ECC status
     91 
     92 => ecc status
     93 ...
     94 Memory Data Path Error Injection Mask High/Low: 00000001 00000001
     95 ...
     96 Memory Error Detect:
     97   Multiple Memory Errors: 0
     98   Multiple-Bit Error: 1
     99   Single-Bit Error: 0
    100 ...
    101 
    102 The Multiple Memory Errors flags not set and Multiple-Bit Error flags are set.
    103 
    104 4. Make sure used memory region got re-initialized with 0x0123456789abcdef
    105 
    106 => md 200000
    107 00200000: 01234567 89abcdef 01234567 89abcdef    .#Eg.....#Eg....
    108 00200010: 01234567 89abcdef 01234567 89abcdef    .#Eg.....#Eg....
    109 00200020: 01234567 89abcdef 01234567 89abcdef    .#Eg.....#Eg....
    110 00200030: 01234567 89abcdef 01234567 89abcdef    .#Eg.....#Eg....
    111 00200040: 01234567 89abcdef 01234567 89abcdef    .#Eg.....#Eg....
    112 00200050: 01234567 89abcdef 01234567 89abcdef    .#Eg.....#Eg....
    113 00200060: 01234567 89abcdef 01234567 89abcdef    .#Eg.....#Eg....
    114 00200070: 01234567 89abcdef 01234567 89abcdef    .#Eg.....#Eg....
    115 00200080: deadbeef deadbeef deadbeef deadbeef    ................
    116 00200090: deadbeef deadbeef deadbeef deadbeef    ................
    117 
    118 
    119 Test Single-Bit Error Counter and Threshold
    120 -------------------------------------------
    121 
    122 1. Set 1 bit in Data Path Error Inject Mask
    123 
    124 => ecc injectdatahi 1
    125 
    126 2. Enable error injection
    127 
    128 => ecc inject en
    129 
    130 3. Let u-boot run for a with Single-Bit error injection enabled
    131 
    132 4. Disable error injection
    133 
    134 => ecc inject dis
    135 
    136 4. Check status
    137 
    138 => ecc status
    139 
    140 ...
    141 Memory Single-Bit Error Management (0..255):
    142   Single-Bit Error Threshold: 255
    143   Single Bit Error Counter: 199
    144 
    145 Memory Error Detect:
    146   Multiple Memory Errors: 1
    147   Multiple-Bit Error: 0
    148   Single-Bit Error: 1
    149 ...
    150 
    151 Observe that Single-Bit Error is 'on' which means that Single-Bit Error Counter
    152 reached Single-Bit Error Threshold. Multiple Memory Errors bit is also 'on', that
    153 is Counter reached Threshold more than one time (it wraps back after reaching
    154 Threshold).
    155