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 /drivers/net/ethernet/emulex | |
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>
Diffstat (limited to 'drivers/net/ethernet/emulex')
-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 | ||