aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet
diff options
context:
space:
mode:
authorBarak Witkowsky <barak@broadcom.com>2013-08-12 19:25:02 -0400
committerDavid S. Miller <davem@davemloft.net>2013-08-13 19:04:28 -0400
commita6d3a5ba3e0c4ed127976c52229d7a277da4d82c (patch)
tree59a5cf623f14a82d1601b60e7e26267bcce5a955 /drivers/net/ethernet
parent8ece51651883f99efdcadda4c17df53c4333bea8 (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/ethernet')
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x.h1
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h5
-rw-r--r--drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c9
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);