e52414 i82975x_edac: rewrite the entire fill/report logic

Authored and Committed by Mauro Carvalho Chehab 12 years ago
    i82975x_edac: rewrite the entire fill/report logic
    
    There are so many bugs at the fill/error report logic that
    the code ended by being re-written.
    
    Issues solved:
    
    - DIMM labels were "randomly" filled: they won't
      match the memory layout, due to a series of bugs on it;
    
    - The memory controller supports 3 different modes:
      single, dual interleaved and dual async. The logic there were
      written considering the dual interleaved one (yet, some
      single mode support was there);
    
    - The boundary limit to decide on each channel the error happens,
      at dual interleaved mode, is given by bit 6 of the error address,
      and not bit 1. The practical effect is that Corrected errors
      will have a 50% of chance of pointing to the right DIMM. Only
      the DIMM pair logic were OK;
    
    - The asymetric mode weren't properly supported. The driver would
      handle an asymetric mode as 'single mode', with doesn't actually
      match it, creating some weird real/virtual DIMM mappings.
    
    - Some other random bugs got fixed.
    
    Tested on a Dell Precision N390, on dual interleaved mode.
    
    Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
    
        
file modified
+621 -0