mirror of https://gitee.com/openkylin/linux.git
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: Stephen Douthit <stephend@silicom-usa.com> Signed-off-by: Tony Luck <tony.luck@intel.com>
This commit is contained in:
parent
82413e562e
commit
29a3388bfc
|
@ -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)
|
static int dnv_rd_reg(int port, int off, int op, void *data, size_t sz, char *name)
|
||||||
{
|
{
|
||||||
struct pci_dev *pdev;
|
struct pci_dev *pdev;
|
||||||
char *base;
|
char *base;
|
||||||
u64 addr;
|
u64 addr;
|
||||||
|
unsigned long size;
|
||||||
|
|
||||||
if (op == 4) {
|
if (op == 4) {
|
||||||
pdev = pci_get_device(PCI_VENDOR_ID_INTEL, 0x1980, NULL);
|
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();
|
addr = get_mem_ctrl_hub_base_addr();
|
||||||
if (!addr)
|
if (!addr)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
size = DNV_MCHBAR_SIZE;
|
||||||
} else {
|
} else {
|
||||||
/* MMIO via sideband register base address */
|
/* MMIO via sideband register base address */
|
||||||
addr = get_sideband_reg_base_addr();
|
addr = get_sideband_reg_base_addr();
|
||||||
if (!addr)
|
if (!addr)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
addr += (port << 16);
|
addr += (port << 16);
|
||||||
|
size = DNV_SB_PORT_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
base = ioremap((resource_size_t)addr, 0x10000);
|
base = ioremap((resource_size_t)addr, size);
|
||||||
if (!base)
|
if (!base)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue