[PATCH 4/4] IPMI: Add proper offset for HP PCI interfaces

Corey Minyard
2010-03-03T16:18:00Z

From: Corey Minyard <cminyard@mvista.com>

On a PCI update, the offset for HP PCI interfaces to the IPMI controller
was left off. Add the offset back in. The "dead code" dealing with
first_reg_offset was removed in 2.6.32, so that is re-added.

Signed-off-by: Corey Minyard <cminyard@mvista.com>

Index: linux-2.6.33/drivers/char/ipmi/ipmi_si_intf.c
===================================================================
--- linux-2.6.33.orig/drivers/char/ipmi/ipmi_si_intf.c
+++ linux-2.6.33/drivers/char/ipmi/ipmi_si_intf.c
@@ -2363,6 +2363,7 @@ static int __devinit ipmi_pci_probe(stru
int rv;
int class_type = pdev->class & PCI_ERMC_CLASSCODE_TYPE_MASK;
struct smi_info *info;
+ int first_reg_offset = 0;

info = kzalloc(sizeof(*info), GFP_KERNEL);
if (!info)
@@ -2401,6 +2402,9 @@ static int __devinit ipmi_pci_probe(stru
info->addr_source_cleanup = ipmi_pci_cleanup;
info->addr_source_data = pdev;

+ if (pdev->subsystem_vendor == PCI_HP_VENDOR_ID)
+ first_reg_offset = 1;
+
if (pci_resource_flags(pdev, 0) & IORESOURCE_IO) {
info->io_setup = port_setup;
info->io.addr_type = IPMI_IO_ADDR_SPACE;
@@ -2408,7 +2412,7 @@ static int __devinit ipmi_pci_probe(stru
info->io_setup = mem_setup;
info->io.addr_type = IPMI_MEM_ADDR_SPACE;
}
- info->io.addr_data = pci_resource_start(pdev, 0);
+ info->io.addr_data = pci_resource_start(pdev, 0) + first_reg_offset;

info->io.regspacing = DEFAULT_REGSPACING;
info->io.regsize = DEFAULT_REGSPACING;