|
@@ -59,6 +59,13 @@ static int be_mcc_compl_process(struct be_adapter *adapter,
|
|
|
|
|
|
compl_status = (compl->status >> CQE_STATUS_COMPL_SHIFT) &
|
|
|
CQE_STATUS_COMPL_MASK;
|
|
|
+
|
|
|
+ if ((compl->tag0 == OPCODE_COMMON_WRITE_FLASHROM) &&
|
|
|
+ (compl->tag1 == CMD_SUBSYSTEM_COMMON)) {
|
|
|
+ adapter->flash_status = compl_status;
|
|
|
+ complete(&adapter->flash_compl);
|
|
|
+ }
|
|
|
+
|
|
|
if (compl_status == MCC_STATUS_SUCCESS) {
|
|
|
if (compl->tag0 == OPCODE_ETH_GET_STATISTICS) {
|
|
|
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,
|
|
|
int status;
|
|
|
|
|
|
spin_lock_bh(&adapter->mcc_lock);
|
|
|
+ adapter->flash_status = 0;
|
|
|
|
|
|
wrb = wrb_from_mccq(adapter);
|
|
|
if (!wrb) {
|
|
@@ -1428,6 +1436,7 @@ int be_cmd_write_flashrom(struct be_adapter *adapter, struct be_dma_mem *cmd,
|
|
|
|
|
|
be_wrb_hdr_prepare(wrb, cmd->size, false, 1,
|
|
|
OPCODE_COMMON_WRITE_FLASHROM);
|
|
|
+ wrb->tag1 = CMD_SUBSYSTEM_COMMON;
|
|
|
|
|
|
be_cmd_hdr_prepare(&req->hdr, CMD_SUBSYSTEM_COMMON,
|
|
|
OPCODE_COMMON_WRITE_FLASHROM, cmd->size);
|
|
@@ -1439,10 +1448,16 @@ int be_cmd_write_flashrom(struct be_adapter *adapter, struct be_dma_mem *cmd,
|
|
|
req->params.op_code = cpu_to_le32(flash_opcode);
|
|
|
req->params.data_buf_size = cpu_to_le32(buf_size);
|
|
|
|
|
|
- status = be_mcc_notify_wait(adapter);
|
|
|
+ be_mcc_notify(adapter);
|
|
|
+ spin_unlock_bh(&adapter->mcc_lock);
|
|
|
+
|
|
|
+ if (!wait_for_completion_timeout(&adapter->flash_compl,
|
|
|
+ msecs_to_jiffies(12000)))
|
|
|
+ status = -1;
|
|
|
+ else
|
|
|
+ status = adapter->flash_status;
|
|
|
|
|
|
err:
|
|
|
- spin_unlock_bh(&adapter->mcc_lock);
|
|
|
return status;
|
|
|
}
|
|
|
|