be2net: Provide an alternate way to read pf_num for BEx chips
authorSriharsha Basavapatna <sriharsha.basavapatna@broadcom.com>
Sun, 9 Oct 2016 04:28:49 +0000 (09:58 +0530)
committerDavid S. Miller <davem@davemloft.net>
Sun, 9 Oct 2016 13:30:38 +0000 (09:30 -0400)
The driver gets the pf_num for Skyhawk and Lancer using
GET_FUNC_CONFIG FW command. But since that command is not
supported in BEx, we need to get it from some other command.
Otherwise TPE recovery would fail since all NIC PFs would
end up with a func num of 0. There's a pci function number
field in the response  of GET_CNTL_ATTRIBUTES command that
can be read to get the same info for BEx adapters.

Signed-off-by: Sriharsha Basavapatna <sriharsha.basavapatna@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/emulex/benet/be_cmds.c
drivers/net/ethernet/emulex/benet/be_cmds.h

index 9cffe48be1564f65e85b328b0d13807ffa264f9d..45d174262d32b5f27833b4cd9821aedb7ee89a76 100644 (file)
@@ -3527,6 +3527,11 @@ int be_cmd_get_cntl_attributes(struct be_adapter *adapter)
                for (i = 0; i < CNTL_SERIAL_NUM_WORDS; i++)
                        adapter->serial_num[i] = le32_to_cpu(serial_num[i]) &
                                (BIT_MASK(16) - 1);
+               /* For BEx, since GET_FUNC_CONFIG command is not
+                * supported, we read funcnum here as a workaround.
+                */
+               if (BEx_chip(adapter))
+                       adapter->pf_num = attribs->hba_attribs.pci_funcnum;
        }
 
 err:
index 1bd82bcb3be5fd3bb686e4d3c72089054e129946..09da2d82c2f0dc1f86074a73f89942fb06c771c2 100644 (file)
@@ -1720,7 +1720,11 @@ struct mgmt_hba_attribs {
        u32 rsvd2[55];
        u8 rsvd3[3];
        u8 phy_port;
-       u32 rsvd4[13];
+       u32 rsvd4[15];
+       u8 rsvd5[2];
+       u8 pci_funcnum;
+       u8 rsvd6;
+       u32 rsvd7[6];
 } __packed;
 
 struct mgmt_controller_attrib {