Commit 73543bad authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'edac_urgent_for_v6.16_rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/ras/ras

Pull EDAC fixes from Borislav Petkov:

 - amd64: Correct the number of memory controllers on some AMD Zen
   clients

 - igen6: Handle firmware-disabled memory controllers properly

* tag 'edac_urgent_for_v6.16_rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/ras/ras:
  EDAC/igen6: Fix NULL pointer dereference
  EDAC/amd64: Correct number of UMCs for family 19h models 70h-7fh
parents e669e322 88efa0de
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -3879,6 +3879,7 @@ static int per_family_init(struct amd64_pvt *pvt)
			break;
		case 0x70 ... 0x7f:
			pvt->ctl_name			= "F19h_M70h";
			pvt->max_mcs			= 4;
			pvt->flags.zn_regs_v2		= 1;
			break;
		case 0x90 ... 0x9f:
+13 −11
Original line number Diff line number Diff line
@@ -125,7 +125,7 @@
#define MEM_SLICE_HASH_MASK(v)		(GET_BITFIELD(v, 6, 19) << 6)
#define MEM_SLICE_HASH_LSB_MASK_BIT(v)	GET_BITFIELD(v, 24, 26)

static const struct res_config {
static struct res_config {
	bool machine_check;
	/* The number of present memory controllers. */
	int num_imc;
@@ -479,7 +479,7 @@ static u64 rpl_p_err_addr(u64 ecclog)
	return ECC_ERROR_LOG_ADDR45(ecclog);
}

static const struct res_config ehl_cfg = {
static struct res_config ehl_cfg = {
	.num_imc		= 1,
	.imc_base		= 0x5000,
	.ibecc_base		= 0xdc00,
@@ -489,7 +489,7 @@ static const struct res_config ehl_cfg = {
	.err_addr_to_imc_addr	= ehl_err_addr_to_imc_addr,
};

static const struct res_config icl_cfg = {
static struct res_config icl_cfg = {
	.num_imc		= 1,
	.imc_base		= 0x5000,
	.ibecc_base		= 0xd800,
@@ -499,7 +499,7 @@ static const struct res_config icl_cfg = {
	.err_addr_to_imc_addr	= ehl_err_addr_to_imc_addr,
};

static const struct res_config tgl_cfg = {
static struct res_config tgl_cfg = {
	.machine_check		= true,
	.num_imc		= 2,
	.imc_base		= 0x5000,
@@ -513,7 +513,7 @@ static const struct res_config tgl_cfg = {
	.err_addr_to_imc_addr	= tgl_err_addr_to_imc_addr,
};

static const struct res_config adl_cfg = {
static struct res_config adl_cfg = {
	.machine_check		= true,
	.num_imc		= 2,
	.imc_base		= 0xd800,
@@ -524,7 +524,7 @@ static const struct res_config adl_cfg = {
	.err_addr_to_imc_addr	= adl_err_addr_to_imc_addr,
};

static const struct res_config adl_n_cfg = {
static struct res_config adl_n_cfg = {
	.machine_check		= true,
	.num_imc		= 1,
	.imc_base		= 0xd800,
@@ -535,7 +535,7 @@ static const struct res_config adl_n_cfg = {
	.err_addr_to_imc_addr	= adl_err_addr_to_imc_addr,
};

static const struct res_config rpl_p_cfg = {
static struct res_config rpl_p_cfg = {
	.machine_check		= true,
	.num_imc		= 2,
	.imc_base		= 0xd800,
@@ -547,7 +547,7 @@ static const struct res_config rpl_p_cfg = {
	.err_addr_to_imc_addr	= adl_err_addr_to_imc_addr,
};

static const struct res_config mtl_ps_cfg = {
static struct res_config mtl_ps_cfg = {
	.machine_check		= true,
	.num_imc		= 2,
	.imc_base		= 0xd800,
@@ -558,7 +558,7 @@ static const struct res_config mtl_ps_cfg = {
	.err_addr_to_imc_addr	= adl_err_addr_to_imc_addr,
};

static const struct res_config mtl_p_cfg = {
static struct res_config mtl_p_cfg = {
	.machine_check		= true,
	.num_imc		= 2,
	.imc_base		= 0xd800,
@@ -569,7 +569,7 @@ static const struct res_config mtl_p_cfg = {
	.err_addr_to_imc_addr	= adl_err_addr_to_imc_addr,
};

static const struct pci_device_id igen6_pci_tbl[] = {
static struct pci_device_id igen6_pci_tbl[] = {
	{ PCI_VDEVICE(INTEL, DID_EHL_SKU5), (kernel_ulong_t)&ehl_cfg },
	{ PCI_VDEVICE(INTEL, DID_EHL_SKU6), (kernel_ulong_t)&ehl_cfg },
	{ PCI_VDEVICE(INTEL, DID_EHL_SKU7), (kernel_ulong_t)&ehl_cfg },
@@ -1350,9 +1350,11 @@ static int igen6_register_mcis(struct pci_dev *pdev, u64 mchbar)
		return -ENODEV;
	}

	if (lmc < res_cfg->num_imc)
	if (lmc < res_cfg->num_imc) {
		igen6_printk(KERN_WARNING, "Expected %d mcs, but only %d detected.",
			     res_cfg->num_imc, lmc);
		res_cfg->num_imc = lmc;
	}

	return 0;