struct iwl_host_cmd cmd = {
                .id = NVM_ACCESS_CMD,
                .len = { sizeof(struct iwl_nvm_access_cmd), length },
-               .flags = CMD_SEND_IN_RFKILL,
+               .flags = CMD_WANT_SKB | CMD_SEND_IN_RFKILL,
                .data = { &nvm_access_cmd, data },
                /* data may come from vmalloc, so use _DUP */
                .dataflags = { 0, IWL_HCMD_DFL_DUP },
        };
+       struct iwl_rx_packet *pkt;
+       struct iwl_nvm_access_resp *nvm_resp;
+       int ret;
+
+       ret = iwl_mvm_send_cmd(mvm, &cmd);
+       if (ret)
+               return ret;
 
-       return iwl_mvm_send_cmd(mvm, &cmd);
+       pkt = cmd.resp_pkt;
+       if (!pkt) {
+               IWL_ERR(mvm, "Error in NVM_ACCESS response\n");
+               return -EINVAL;
+       }
+       /* Extract & check NVM write response */
+       nvm_resp = (void *)pkt->data;
+       if (le16_to_cpu(nvm_resp->status) != READ_NVM_CHUNK_SUCCEED) {
+               IWL_ERR(mvm,
+                       "NVM access write command failed for section %u (status = 0x%x)\n",
+                       section, le16_to_cpu(nvm_resp->status));
+               ret = -EIO;
+       }
+
+       iwl_free_resp(&cmd);
+       return ret;
 }
 
 static int iwl_nvm_read_chunk(struct iwl_mvm *mvm, u16 section,