Commit b0044bcf authored by Rajesh Borundia's avatar Rajesh Borundia Committed by David S. Miller

qlcnic: avoid using reset_devices as it may become obsolete.

In kdump environment do not depend upon reset_devices parameter
to reset the pci function as this parameter may become obsolete.
Instead use an adapter specific mechanism to determine if the pci
function needs to be reset.

Per function refcount is maintained in driver, which is set in probe
and reset in remove handler of adapter. If the probe detects the count
as non zero then reset the function.
Signed-off-by: default avatarRajesh Borundia <rajesh.borundia@qlogic.com>
Signed-off-by: default avatarAmit Kumar Salecha <amit.salecha@qlogic.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 5584b807
...@@ -923,6 +923,7 @@ struct qlcnic_ipaddr { ...@@ -923,6 +923,7 @@ struct qlcnic_ipaddr {
#define QLCNIC_MACSPOOF 0x200 #define QLCNIC_MACSPOOF 0x200
#define QLCNIC_MAC_OVERRIDE_DISABLED 0x400 #define QLCNIC_MAC_OVERRIDE_DISABLED 0x400
#define QLCNIC_PROMISC_DISABLED 0x800 #define QLCNIC_PROMISC_DISABLED 0x800
#define QLCNIC_NEED_FLR 0x1000
#define QLCNIC_IS_MSI_FAMILY(adapter) \ #define QLCNIC_IS_MSI_FAMILY(adapter) \
((adapter)->flags & (QLCNIC_MSI_ENABLED | QLCNIC_MSIX_ENABLED)) ((adapter)->flags & (QLCNIC_MSI_ENABLED | QLCNIC_MSIX_ENABLED))
......
...@@ -480,8 +480,10 @@ int qlcnic_fw_create_ctx(struct qlcnic_adapter *adapter) ...@@ -480,8 +480,10 @@ int qlcnic_fw_create_ctx(struct qlcnic_adapter *adapter)
{ {
int err; int err;
if (reset_devices) if (adapter->flags & QLCNIC_NEED_FLR) {
pci_reset_function(adapter->pdev); pci_reset_function(adapter->pdev);
adapter->flags &= ~QLCNIC_NEED_FLR;
}
err = qlcnic_fw_cmd_create_rx_ctx(adapter); err = qlcnic_fw_cmd_create_rx_ctx(adapter);
if (err) if (err)
......
...@@ -722,7 +722,7 @@ enum { ...@@ -722,7 +722,7 @@ enum {
#define QLCNIC_DEV_NPAR_OPER 1 /* NPAR Operational */ #define QLCNIC_DEV_NPAR_OPER 1 /* NPAR Operational */
#define QLCNIC_DEV_NPAR_OPER_TIMEO 30 /* Operational time out */ #define QLCNIC_DEV_NPAR_OPER_TIMEO 30 /* Operational time out */
#define QLC_DEV_CHECK_ACTIVE(VAL, FN) ((VAL) &= (1 << (FN * 4))) #define QLC_DEV_CHECK_ACTIVE(VAL, FN) ((VAL) & (1 << (FN * 4)))
#define QLC_DEV_SET_REF_CNT(VAL, FN) ((VAL) |= (1 << (FN * 4))) #define QLC_DEV_SET_REF_CNT(VAL, FN) ((VAL) |= (1 << (FN * 4)))
#define QLC_DEV_CLR_REF_CNT(VAL, FN) ((VAL) &= ~(1 << (FN * 4))) #define QLC_DEV_CLR_REF_CNT(VAL, FN) ((VAL) &= ~(1 << (FN * 4)))
#define QLC_DEV_SET_RST_RDY(VAL, FN) ((VAL) |= (1 << (FN * 4))) #define QLC_DEV_SET_RST_RDY(VAL, FN) ((VAL) |= (1 << (FN * 4)))
......
...@@ -1485,6 +1485,7 @@ qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -1485,6 +1485,7 @@ qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
uint8_t revision_id; uint8_t revision_id;
uint8_t pci_using_dac; uint8_t pci_using_dac;
char brd_name[QLCNIC_MAX_BOARD_NAME_LEN]; char brd_name[QLCNIC_MAX_BOARD_NAME_LEN];
u32 val;
err = pci_enable_device(pdev); err = pci_enable_device(pdev);
if (err) if (err)
...@@ -1546,6 +1547,10 @@ qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -1546,6 +1547,10 @@ qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
if (err) if (err)
goto err_out_iounmap; goto err_out_iounmap;
val = QLCRD32(adapter, QLCNIC_CRB_DRV_ACTIVE);
if (QLC_DEV_CHECK_ACTIVE(val, adapter->portnum))
adapter->flags |= QLCNIC_NEED_FLR;
err = adapter->nic_ops->start_firmware(adapter); err = adapter->nic_ops->start_firmware(adapter);
if (err) { if (err) {
dev_err(&pdev->dev, "Loading fw failed.Please Reboot\n"); dev_err(&pdev->dev, "Loading fw failed.Please Reboot\n");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment