• Mauro Carvalho Chehab's avatar
    i5000_edac: Fix the logic that retrieves memory information · 64e1fdaf
    Mauro Carvalho Chehab authored
    The logic there is broken: it basically creates two csrows for
    each DIMM and assumes that all DIMM's are dual rank. Only one of
    the csrows will contain the entire DIMM size. If single rank
    memories are found, they'll be marked with 0 bytes.
    
    The check if the AMB is present were also wrong.
    
    Yet, as the error reports don't use the memory size in order to
    credit an error to the right DIMM, that part of the driver seems
    to work. That's why probably nobody detected the issue yet.
    
    After this patch, the memory layout is now properly reported,
    when debug mode is enabled, and the number of ranks per dimm is
    now shown:
    
    calculate_dimm_size: ----------------------------------------------------------
    calculate_dimm_size: slot  3       0 MB   |    0 MB   |    0 MB   |    0 MB   |
    calculate_dimm_size: slot  2       0 MB   |    0 MB   |    0 MB   |    0 MB   |
    calculate_dimm_size: ----------------------------------------------------------
    calculate_dimm_size: slot  1       0 MB   |    0 MB   |    0 MB   |    0 MB   |
    calculate_dimm_size: slot  0     512 MB 1R|  512 MB 1R|  512 MB 1R|  512 MB 1R|
    calculate_dimm_size: ----------------------------------------------------------
    calculate_dimm_size:            channel 0 | channel 1 | channel 2 | channel 3 |
    calculate_dimm_size:                   branch 0       |        branch 1       |
    
    (1R above means that all memories on my test machine are single-ranked)
    Reviewed-by: default avatarAristeu Rozanski <arozansk@redhat.com>
    Cc: Doug Thompson <norsk5@yahoo.com>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
    64e1fdaf
i5000_edac.c 42.5 KB