diff options
| -rw-r--r-- | drivers/net/benet/be.h | 2 | ||||
| -rw-r--r-- | drivers/net/benet/be_cmds.c | 19 | ||||
| -rw-r--r-- | drivers/net/benet/be_main.c | 1 |
3 files changed, 20 insertions, 2 deletions
diff --git a/drivers/net/benet/be.h b/drivers/net/benet/be.h index 373c1a563474..b46be490cd2a 100644 --- a/drivers/net/benet/be.h +++ b/drivers/net/benet/be.h | |||
| @@ -283,6 +283,8 @@ struct be_adapter { | |||
| 283 | u8 port_type; | 283 | u8 port_type; |
| 284 | u8 transceiver; | 284 | u8 transceiver; |
| 285 | u8 generation; /* BladeEngine ASIC generation */ | 285 | u8 generation; /* BladeEngine ASIC generation */ |
| 286 | u32 flash_status; | ||
| 287 | struct completion flash_compl; | ||
| 286 | 288 | ||
| 287 | bool sriov_enabled; | 289 | bool sriov_enabled; |
| 288 | u32 vf_if_handle[BE_MAX_VF]; | 290 | u32 vf_if_handle[BE_MAX_VF]; |
diff --git a/drivers/net/benet/be_cmds.c b/drivers/net/benet/be_cmds.c index e79bf8b9af3b..c911bfb55b19 100644 --- a/drivers/net/benet/be_cmds.c +++ b/drivers/net/benet/be_cmds.c | |||
| @@ -59,6 +59,13 @@ static int be_mcc_compl_process(struct be_adapter *adapter, | |||
| 59 | 59 | ||
| 60 | compl_status = (compl->status >> CQE_STATUS_COMPL_SHIFT) & | 60 | compl_status = (compl->status >> CQE_STATUS_COMPL_SHIFT) & |
| 61 | CQE_STATUS_COMPL_MASK; | 61 | CQE_STATUS_COMPL_MASK; |
| 62 | |||
| 63 | if ((compl->tag0 == OPCODE_COMMON_WRITE_FLASHROM) && | ||
| 64 | (compl->tag1 == CMD_SUBSYSTEM_COMMON)) { | ||
| 65 | adapter->flash_status = compl_status; | ||
| 66 | complete(&adapter->flash_compl); | ||
| 67 | } | ||
| 68 | |||
| 62 | if (compl_status == MCC_STATUS_SUCCESS) { | 69 | if (compl_status == MCC_STATUS_SUCCESS) { |
| 63 | if (compl->tag0 == OPCODE_ETH_GET_STATISTICS) { | 70 | if (compl->tag0 == OPCODE_ETH_GET_STATISTICS) { |
| 64 | struct be_cmd_resp_get_stats *resp = | 71 | struct be_cmd_resp_get_stats *resp = |
| @@ -1417,6 +1424,7 @@ int be_cmd_write_flashrom(struct be_adapter *adapter, struct be_dma_mem *cmd, | |||
| 1417 | int status; | 1424 | int status; |
| 1418 | 1425 | ||
| 1419 | spin_lock_bh(&adapter->mcc_lock); | 1426 | spin_lock_bh(&adapter->mcc_lock); |
| 1427 | adapter->flash_status = 0; | ||
| 1420 | 1428 | ||
| 1421 | wrb = wrb_from_mccq(adapter); | 1429 | wrb = wrb_from_mccq(adapter); |
| 1422 | if (!wrb) { | 1430 | if (!wrb) { |
| @@ -1428,6 +1436,7 @@ int be_cmd_write_flashrom(struct be_adapter *adapter, struct be_dma_mem *cmd, | |||
| 1428 | 1436 | ||
| 1429 | be_wrb_hdr_prepare(wrb, cmd->size, false, 1, | 1437 | be_wrb_hdr_prepare(wrb, cmd->size, false, 1, |
| 1430 | OPCODE_COMMON_WRITE_FLASHROM); | 1438 | OPCODE_COMMON_WRITE_FLASHROM); |
| 1439 | wrb->tag1 = CMD_SUBSYSTEM_COMMON; | ||
| 1431 | 1440 | ||
| 1432 | be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON, | 1441 | be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON, |
| 1433 | OPCODE_COMMON_WRITE_FLASHROM, cmd->size); | 1442 | OPCODE_COMMON_WRITE_FLASHROM, cmd->size); |
| @@ -1439,10 +1448,16 @@ int be_cmd_write_flashrom(struct be_adapter *adapter, struct be_dma_mem *cmd, | |||
| 1439 | req->params.op_code = cpu_to_le32(flash_opcode); | 1448 | req->params.op_code = cpu_to_le32(flash_opcode); |
| 1440 | req->params.data_buf_size = cpu_to_le32(buf_size); | 1449 | req->params.data_buf_size = cpu_to_le32(buf_size); |
| 1441 | 1450 | ||
| 1442 | status = be_mcc_notify_wait(adapter); | 1451 | be_mcc_notify(adapter); |
| 1452 | spin_unlock_bh(&adapter->mcc_lock); | ||
| 1453 | |||
| 1454 | if (!wait_for_completion_timeout(&adapter->flash_compl, | ||
| 1455 | msecs_to_jiffies(12000))) | ||
| 1456 | status = -1; | ||
| 1457 | else | ||
| 1458 | status = adapter->flash_status; | ||
| 1443 | 1459 | ||
| 1444 | err: | 1460 | err: |
| 1445 | spin_unlock_bh(&adapter->mcc_lock); | ||
| 1446 | return status; | 1461 | return status; |
| 1447 | } | 1462 | } |
| 1448 | 1463 | ||
diff --git a/drivers/net/benet/be_main.c b/drivers/net/benet/be_main.c index 1c79c2009e40..aa065c71ddd8 100644 --- a/drivers/net/benet/be_main.c +++ b/drivers/net/benet/be_main.c | |||
| @@ -2319,6 +2319,7 @@ static int be_ctrl_init(struct be_adapter *adapter) | |||
| 2319 | spin_lock_init(&adapter->mcc_lock); | 2319 | spin_lock_init(&adapter->mcc_lock); |
| 2320 | spin_lock_init(&adapter->mcc_cq_lock); | 2320 | spin_lock_init(&adapter->mcc_cq_lock); |
| 2321 | 2321 | ||
| 2322 | init_completion(&adapter->flash_compl); | ||
| 2322 | pci_save_state(adapter->pdev); | 2323 | pci_save_state(adapter->pdev); |
| 2323 | return 0; | 2324 | return 0; |
| 2324 | 2325 | ||
