diff options
| author | Somnath Kotur <somnath.kotur@emulex.com> | 2013-10-24 05:07:53 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2013-10-27 16:38:17 -0400 |
| commit | e9e2a904ef0a4f46ee5c845f3ae04e62b917bb6d (patch) | |
| tree | 45f3c936d845b127bb6183b11ecdb0f6ecaef065 | |
| parent | d49c83d7ab38891e2072b42f09a0c06af2bca84e (diff) | |
be2net: Warn users of possible broken functionality on BE2 cards with very old FW versions with latest driver
On very old FW versions < 4.0, the mailbox command to set interrupts
on the card succeeds even though it is not supported and should have
failed, leading to a scenario where interrupts do not work.
Hence warn users to upgrade to a suitable FW version to avoid seeing
broken functionality.
Signed-off-by: Somnath Kotur <somnath.kotur@emulex.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | drivers/net/ethernet/emulex/benet/be.h | 9 | ||||
| -rw-r--r-- | drivers/net/ethernet/emulex/benet/be_main.c | 6 |
2 files changed, 15 insertions, 0 deletions
diff --git a/drivers/net/ethernet/emulex/benet/be.h b/drivers/net/ethernet/emulex/benet/be.h index db020230bd0b..c99dac6a9ddf 100644 --- a/drivers/net/ethernet/emulex/benet/be.h +++ b/drivers/net/ethernet/emulex/benet/be.h | |||
| @@ -696,6 +696,15 @@ static inline int qnq_async_evt_rcvd(struct be_adapter *adapter) | |||
| 696 | return adapter->flags & BE_FLAGS_QNQ_ASYNC_EVT_RCVD; | 696 | return adapter->flags & BE_FLAGS_QNQ_ASYNC_EVT_RCVD; |
| 697 | } | 697 | } |
| 698 | 698 | ||
| 699 | static inline int fw_major_num(const char *fw_ver) | ||
| 700 | { | ||
| 701 | int fw_major = 0; | ||
| 702 | |||
| 703 | sscanf(fw_ver, "%d.", &fw_major); | ||
| 704 | |||
| 705 | return fw_major; | ||
| 706 | } | ||
| 707 | |||
| 699 | extern void be_cq_notify(struct be_adapter *adapter, u16 qid, bool arm, | 708 | extern void be_cq_notify(struct be_adapter *adapter, u16 qid, bool arm, |
| 700 | u16 num_popped); | 709 | u16 num_popped); |
| 701 | extern void be_link_status_update(struct be_adapter *adapter, u8 link_status); | 710 | extern void be_link_status_update(struct be_adapter *adapter, u8 link_status); |
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c index 2c38cc402119..53ed58b492c8 100644 --- a/drivers/net/ethernet/emulex/benet/be_main.c +++ b/drivers/net/ethernet/emulex/benet/be_main.c | |||
| @@ -3247,6 +3247,12 @@ static int be_setup(struct be_adapter *adapter) | |||
| 3247 | 3247 | ||
| 3248 | be_cmd_get_fw_ver(adapter, adapter->fw_ver, adapter->fw_on_flash); | 3248 | be_cmd_get_fw_ver(adapter, adapter->fw_ver, adapter->fw_on_flash); |
| 3249 | 3249 | ||
| 3250 | if (BE2_chip(adapter) && fw_major_num(adapter->fw_ver) < 4) { | ||
| 3251 | dev_err(dev, "Firmware on card is old(%s), IRQs may not work.", | ||
| 3252 | adapter->fw_ver); | ||
| 3253 | dev_err(dev, "Please upgrade firmware to version >= 4.0\n"); | ||
| 3254 | } | ||
| 3255 | |||
| 3250 | if (adapter->vlans_added) | 3256 | if (adapter->vlans_added) |
| 3251 | be_vid_config(adapter); | 3257 | be_vid_config(adapter); |
| 3252 | 3258 | ||
