cnic: Read bnx2x function number from internal register
authorEddie Wai <eddie.wai@broadcom.com>
Wed, 27 Jun 2012 15:08:20 +0000 (15:08 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 28 Jun 2012 04:20:09 +0000 (21:20 -0700)
so that it will work on any hypervisor.

Signed-off-by: Eddie Wai <eddie.wai@broadcom.com>
Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/cnic.c

index 31b05ad325d02f3878752be67827679d09c6fffc..5980443cb8950ea9bb229be21d1e9cd42fa8518b 100644 (file)
@@ -4988,8 +4988,14 @@ static int cnic_start_bnx2x_hw(struct cnic_dev *dev)
        cp->port_mode = CHIP_PORT_MODE_NONE;
 
        if (BNX2X_CHIP_IS_E2_PLUS(cp->chip_id)) {
-               u32 val = CNIC_RD(dev, MISC_REG_PORT4MODE_EN_OVWR);
+               u32 val;
+
+               pci_read_config_dword(dev->pcidev, PCICFG_ME_REGISTER, &val);
+               cp->func = (u8) ((val & ME_REG_ABS_PF_NUM) >>
+                                ME_REG_ABS_PF_NUM_SHIFT);
+               func = CNIC_FUNC(cp);
 
+               val = CNIC_RD(dev, MISC_REG_PORT4MODE_EN_OVWR);
                if (!(val & 1))
                        val = CNIC_RD(dev, MISC_REG_PORT4MODE_EN);
                else