• Qiuxu Zhuo's avatar
    EDAC, sb_edac: Don't create a second memory controller if HA1 is not present · 5806ddd7
    Qiuxu Zhuo authored
    commit 15cc3ae0 upstream.
    
    Yi Zhang reported the following failure on a 2-socket Haswell (E5-2603v3)
    server (DELL PowerEdge 730xd):
    
      EDAC sbridge: Some needed devices are missing
      EDAC MC: Removed device 0 for sb_edac.c Haswell SrcID#0_Ha#0: DEV 0000:7f:12.0
      EDAC MC: Removed device 1 for sb_edac.c Haswell SrcID#1_Ha#0: DEV 0000:ff:12.0
      EDAC sbridge: Couldn't find mci handler
      EDAC sbridge: Couldn't find mci handler
      EDAC sbridge: Failed to register device with error -19.
    
    The refactored sb_edac driver creates the IMC1 (the 2nd memory
    controller) if any IMC1 device is present. In this case only
    HA1_TA of IMC1 was present, but the driver expected to find
    HA1/HA1_TM/HA1_TAD[0-3] devices too, leading to the above failure.
    
    The document [1] says the 'E5-2603 v3' CPU has 4 memory channels max. Yi
    Zhang inserted one DIMM per channel for each CPU, and did random error
    address injection test with this patch:
    
          4024  addresses fell in TOLM hole area
         12715  addresses fell in CPU_SrcID#0_Ha#0_Chan#0_DIMM#0
         12774  addresses fell in CPU_SrcID#0_Ha#0_Chan#1_DIMM#0
         12798  addresses fell in CPU_SrcID#0_Ha#0_Chan#2_DIMM#0
         12913  addresses fell in CPU_SrcID#0_Ha#0_Chan#3_DIMM#0
         12674  addresses fell in CPU_SrcID#1_Ha#0_Chan#0_DIMM#0
         12686  addresses fell in CPU_SrcID#1_Ha#0_Chan#1_DIMM#0
         12882  addresses fell in CPU_SrcID#1_Ha#0_Chan#2_DIMM#0
         12934  addresses fell in CPU_SrcID#1_Ha#0_Chan#3_DIMM#0
        106400  addresses were injected totally.
    
    The test result shows that all the 4 channels belong to IMC0 per CPU, so
    the server really only has one IMC per CPU.
    
    In the 1st page of chapter 2 in datasheet [2], it also says 'E5-2600 v3'
    implements either one or two IMCs. For CPUs with one IMC, IMC1 is not
    used and should be ignored.
    
    Thus, do not create a second memory controller if the key HA1 is absent.
    
    [1] http://ark.intel.com/products/83349/Intel-Xeon-Processor-E5-2603-v3-15M-Cache-1_60-GHz
    [2] https://www.intel.com/content/dam/www/public/us/en/documents/datasheets/xeon-e5-v3-datasheet-vol-2.pdfReported-and-tested-by: default avatarYi Zhang <yizhan@redhat.com>
    Signed-off-by: default avatarQiuxu Zhuo <qiuxu.zhuo@intel.com>
    Cc: Tony Luck <tony.luck@intel.com>
    Cc: linux-edac <linux-edac@vger.kernel.org>
    Link: http://lkml.kernel.org/r/20170913104214.7325-1-qiuxu.zhuo@intel.com
    [ Massage commit message. ]
    Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    5806ddd7
Name
Last commit
Last update
..
Kconfig Loading commit data...
Makefile Loading commit data...
altera_edac.c Loading commit data...
altera_edac.h Loading commit data...
amd64_edac.c Loading commit data...
amd64_edac.h Loading commit data...
amd64_edac_dbg.c Loading commit data...
amd64_edac_inj.c Loading commit data...
amd76x_edac.c Loading commit data...
amd8111_edac.c Loading commit data...
amd8111_edac.h Loading commit data...
amd8131_edac.c Loading commit data...
amd8131_edac.h Loading commit data...
cell_edac.c Loading commit data...
cpc925_edac.c Loading commit data...
debugfs.c Loading commit data...
e752x_edac.c Loading commit data...
e7xxx_edac.c Loading commit data...
edac_device.c Loading commit data...
edac_device.h Loading commit data...
edac_device_sysfs.c Loading commit data...
edac_mc.c Loading commit data...
edac_mc.h Loading commit data...
edac_mc_sysfs.c Loading commit data...
edac_module.c Loading commit data...
edac_module.h Loading commit data...
edac_pci.c Loading commit data...
edac_pci.h Loading commit data...
edac_pci_sysfs.c Loading commit data...
fsl_ddr_edac.c Loading commit data...
fsl_ddr_edac.h Loading commit data...
ghes_edac.c Loading commit data...
highbank_l2_edac.c Loading commit data...
highbank_mc_edac.c Loading commit data...
i3000_edac.c Loading commit data...
i3200_edac.c Loading commit data...
i5000_edac.c Loading commit data...
i5100_edac.c Loading commit data...
i5400_edac.c Loading commit data...
i7300_edac.c Loading commit data...
i7core_edac.c Loading commit data...
i82443bxgx_edac.c Loading commit data...
i82860_edac.c Loading commit data...
i82875p_edac.c Loading commit data...
i82975x_edac.c Loading commit data...
ie31200_edac.c Loading commit data...
layerscape_edac.c Loading commit data...
mce_amd.c Loading commit data...
mce_amd.h Loading commit data...
mpc85xx_edac.c Loading commit data...
mpc85xx_edac.h Loading commit data...
mv64x60_edac.c Loading commit data...
mv64x60_edac.h Loading commit data...
octeon_edac-l2c.c Loading commit data...
octeon_edac-lmc.c Loading commit data...
octeon_edac-pc.c Loading commit data...
octeon_edac-pci.c Loading commit data...
pasemi_edac.c Loading commit data...
pnd2_edac.c Loading commit data...
pnd2_edac.h Loading commit data...
ppc4xx_edac.c Loading commit data...
ppc4xx_edac.h Loading commit data...
r82600_edac.c Loading commit data...
sb_edac.c Loading commit data...
skx_edac.c Loading commit data...
synopsys_edac.c Loading commit data...
thunderx_edac.c Loading commit data...
tile_edac.c Loading commit data...
wq.c Loading commit data...
x38_edac.c Loading commit data...
xgene_edac.c Loading commit data...