diff options
author | Barak Witkowsky <barak@broadcom.com> | 2013-08-12 19:25:02 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-08-13 19:04:28 -0400 |
commit | a6d3a5ba3e0c4ed127976c52229d7a277da4d82c (patch) | |
tree | 59a5cf623f14a82d1601b60e7e26267bcce5a955 /drivers/net | |
parent | 8ece51651883f99efdcadda4c17df53c4333bea8 (diff) |
bnx2x: fix PTE write access error
PTE write access error might occur in MF_ALLOWED mode when IOMMU
is active. The patch adds rmmod HSI indicating to MFW to stop
running queries which might trigger this failure.
Signed-off-by: Barak Witkowsky <barak@broadcom.com>
Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com>
Signed-off-by: Ariel Elior <ariele@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x.h | 1 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h | 5 | ||||
-rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | 9 |
3 files changed, 15 insertions, 0 deletions
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h index f07a7ffd7773..ce9b387b5a19 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x.h | |||
@@ -1502,6 +1502,7 @@ struct bnx2x { | |||
1502 | #define BC_SUPPORTS_DCBX_MSG_NON_PMF (1 << 21) | 1502 | #define BC_SUPPORTS_DCBX_MSG_NON_PMF (1 << 21) |
1503 | #define IS_VF_FLAG (1 << 22) | 1503 | #define IS_VF_FLAG (1 << 22) |
1504 | #define INTERRUPTS_ENABLED_FLAG (1 << 23) | 1504 | #define INTERRUPTS_ENABLED_FLAG (1 << 23) |
1505 | #define BC_SUPPORTS_RMMOD_CMD (1 << 24) | ||
1505 | 1506 | ||
1506 | #define BP_NOMCP(bp) ((bp)->flags & NO_MCP_FLAG) | 1507 | #define BP_NOMCP(bp) ((bp)->flags & NO_MCP_FLAG) |
1507 | 1508 | ||
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h index 5018e52ae2ad..32767f6aa33f 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h | |||
@@ -1300,6 +1300,9 @@ struct drv_func_mb { | |||
1300 | 1300 | ||
1301 | #define DRV_MSG_CODE_EEE_RESULTS_ACK 0xda000000 | 1301 | #define DRV_MSG_CODE_EEE_RESULTS_ACK 0xda000000 |
1302 | 1302 | ||
1303 | #define DRV_MSG_CODE_RMMOD 0xdb000000 | ||
1304 | #define REQ_BC_VER_4_RMMOD_CMD 0x0007080f | ||
1305 | |||
1303 | #define DRV_MSG_CODE_SET_MF_BW 0xe0000000 | 1306 | #define DRV_MSG_CODE_SET_MF_BW 0xe0000000 |
1304 | #define REQ_BC_VER_4_SET_MF_BW 0x00060202 | 1307 | #define REQ_BC_VER_4_SET_MF_BW 0x00060202 |
1305 | #define DRV_MSG_CODE_SET_MF_BW_ACK 0xe1000000 | 1308 | #define DRV_MSG_CODE_SET_MF_BW_ACK 0xe1000000 |
@@ -1372,6 +1375,8 @@ struct drv_func_mb { | |||
1372 | 1375 | ||
1373 | #define FW_MSG_CODE_EEE_RESULS_ACK 0xda100000 | 1376 | #define FW_MSG_CODE_EEE_RESULS_ACK 0xda100000 |
1374 | 1377 | ||
1378 | #define FW_MSG_CODE_RMMOD_ACK 0xdb100000 | ||
1379 | |||
1375 | #define FW_MSG_CODE_SET_MF_BW_SENT 0xe0000000 | 1380 | #define FW_MSG_CODE_SET_MF_BW_SENT 0xe0000000 |
1376 | #define FW_MSG_CODE_SET_MF_BW_DONE 0xe1000000 | 1381 | #define FW_MSG_CODE_SET_MF_BW_DONE 0xe1000000 |
1377 | 1382 | ||
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c index 78b719568145..339c388e4a18 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | |||
@@ -10368,6 +10368,10 @@ static void bnx2x_get_common_hwinfo(struct bnx2x *bp) | |||
10368 | 10368 | ||
10369 | bp->flags |= (val >= REQ_BC_VER_4_DCBX_ADMIN_MSG_NON_PMF) ? | 10369 | bp->flags |= (val >= REQ_BC_VER_4_DCBX_ADMIN_MSG_NON_PMF) ? |
10370 | BC_SUPPORTS_DCBX_MSG_NON_PMF : 0; | 10370 | BC_SUPPORTS_DCBX_MSG_NON_PMF : 0; |
10371 | |||
10372 | bp->flags |= (val >= REQ_BC_VER_4_RMMOD_CMD) ? | ||
10373 | BC_SUPPORTS_RMMOD_CMD : 0; | ||
10374 | |||
10371 | boot_mode = SHMEM_RD(bp, | 10375 | boot_mode = SHMEM_RD(bp, |
10372 | dev_info.port_feature_config[BP_PORT(bp)].mba_config) & | 10376 | dev_info.port_feature_config[BP_PORT(bp)].mba_config) & |
10373 | PORT_FEATURE_MBA_BOOT_AGENT_TYPE_MASK; | 10377 | PORT_FEATURE_MBA_BOOT_AGENT_TYPE_MASK; |
@@ -12824,6 +12828,11 @@ static void __bnx2x_remove(struct pci_dev *pdev, | |||
12824 | bnx2x_dcbnl_update_applist(bp, true); | 12828 | bnx2x_dcbnl_update_applist(bp, true); |
12825 | #endif | 12829 | #endif |
12826 | 12830 | ||
12831 | if (IS_PF(bp) && | ||
12832 | !BP_NOMCP(bp) && | ||
12833 | (bp->flags & BC_SUPPORTS_RMMOD_CMD)) | ||
12834 | bnx2x_fw_command(bp, DRV_MSG_CODE_RMMOD, 0); | ||
12835 | |||
12827 | /* Close the interface - either directly or implicitly */ | 12836 | /* Close the interface - either directly or implicitly */ |
12828 | if (remove_netdev) { | 12837 | if (remove_netdev) { |
12829 | unregister_netdev(dev); | 12838 | unregister_netdev(dev); |