Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 29a3388b authored by Stephen Douthit's avatar Stephen Douthit Committed by Tony Luck
Browse files

EDAC, pnd2: Fix ioremap() size in dnv_rd_reg()



Depending on how BIOS has marked the reserved region containing the 32KB
MCHBAR you can get warnings like:

resource sanity check: requesting [mem 0xfed10000-0xfed1ffff], which spans more than reserved [mem 0xfed10000-0xfed17fff]
caller dnv_rd_reg+0xc8/0x240 [pnd2_edac] mapping multiple BARs

Not all of the mmio regions used in dnv_rd_reg() are the same size.  The
MCHBAR window is 32KB and the sideband ports are 64KB.  Pass the correct
size to ioremap() depending on which resource we're reading from.

Signed-off-by: default avatarStephen Douthit <stephend@silicom-usa.com>
Signed-off-by: default avatarTony Luck <tony.luck@intel.com>
parent 82413e56
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -260,11 +260,14 @@ static u64 get_sideband_reg_base_addr(void)
	}
}

#define DNV_MCHBAR_SIZE  0x8000
#define DNV_SB_PORT_SIZE 0x10000
static int dnv_rd_reg(int port, int off, int op, void *data, size_t sz, char *name)
{
	struct pci_dev *pdev;
	char *base;
	u64 addr;
	unsigned long size;

	if (op == 4) {
		pdev = pci_get_device(PCI_VENDOR_ID_INTEL, 0x1980, NULL);
@@ -279,15 +282,17 @@ static int dnv_rd_reg(int port, int off, int op, void *data, size_t sz, char *na
			addr = get_mem_ctrl_hub_base_addr();
			if (!addr)
				return -ENODEV;
			size = DNV_MCHBAR_SIZE;
		} else {
			/* MMIO via sideband register base address */
			addr = get_sideband_reg_base_addr();
			if (!addr)
				return -ENODEV;
			addr += (port << 16);
			size = DNV_SB_PORT_SIZE;
		}

		base = ioremap((resource_size_t)addr, 0x10000);
		base = ioremap((resource_size_t)addr, size);
		if (!base)
			return -ENODEV;