]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/commitdiff
EDAC/i10nm: Use readl() to access MMIO registers
authorQiuxu Zhuo <qiuxu.zhuo@intel.com>
Tue, 17 Nov 2020 12:49:51 +0000 (20:49 +0800)
committerKleber Sacilotto de Souza <kleber.souza@canonical.com>
Wed, 20 Jan 2021 13:26:22 +0000 (14:26 +0100)
BugLink: https://bugs.launchpad.net/bugs/1910822
commit 83ff51c4e3fecf6b8587ce4d46f6eac59f5d7c5a upstream.

Instead of raw access, use readl() to access MMIO registers of
memory controller to avoid possible compiler re-ordering.

Fixes: d4dc89d069aa ("EDAC, i10nm: Add a driver for Intel 10nm server processors")
Cc: <stable@vger.kernel.org>
Signed-off-by: Qiuxu Zhuo <qiuxu.zhuo@intel.com>
Signed-off-by: Tony Luck <tony.luck@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Kelsey Skunberg <kelsey.skunberg@canonical.com>
drivers/edac/i10nm_base.c

index c0c5b6ecdb2e4aa0a3b5acc4345ae9ab0f3a2282..dfcde7ed95006ba8bdb66027f8335882301af1b5 100644 (file)
@@ -6,6 +6,7 @@
  */
 
 #include <linux/kernel.h>
+#include <linux/io.h>
 #include <asm/cpu_device_id.h>
 #include <asm/intel-family.h>
 #include <asm/mce.h>
 #define i10nm_printk(level, fmt, arg...)       \
        edac_printk(level, "i10nm", fmt, ##arg)
 
-#define I10NM_GET_SCK_BAR(d, reg)              \
+#define I10NM_GET_SCK_BAR(d, reg)      \
        pci_read_config_dword((d)->uracu, 0xd0, &(reg))
 #define I10NM_GET_IMC_BAR(d, i, reg)   \
        pci_read_config_dword((d)->uracu, 0xd8 + (i) * 4, &(reg))
 #define I10NM_GET_DIMMMTR(m, i, j)     \
-       (*(u32 *)((m)->mbase + 0x2080c + (i) * 0x4000 + (j) * 4))
+       readl((m)->mbase + 0x2080c + (i) * 0x4000 + (j) * 4)
 #define I10NM_GET_MCDDRTCFG(m, i, j)   \
-       (*(u32 *)((m)->mbase + 0x20970 + (i) * 0x4000 + (j) * 4))
+       readl((m)->mbase + 0x20970 + (i) * 0x4000 + (j) * 4)
+#define I10NM_GET_MCMTR(m, i)          \
+       readl((m)->mbase + 0x20ef8 + (i) * 0x4000)
 
 #define I10NM_GET_SCK_MMIO_BASE(reg)   (GET_BITFIELD(reg, 0, 28) << 23)
 #define I10NM_GET_IMC_MMIO_OFFSET(reg) (GET_BITFIELD(reg, 0, 10) << 12)
@@ -134,7 +137,7 @@ static bool i10nm_check_ecc(struct skx_imc *imc, int chan)
 {
        u32 mcmtr;
 
-       mcmtr = *(u32 *)(imc->mbase + 0x20ef8 + chan * 0x4000);
+       mcmtr = I10NM_GET_MCMTR(imc, chan);
        edac_dbg(1, "ch%d mcmtr reg %x\n", chan, mcmtr);
 
        return !!GET_BITFIELD(mcmtr, 2, 2);