snd_sof_handle_fw_exception(ipc->sdev);
                ret = -ETIMEDOUT;
        } else {
-               /* copy the data returned from DSP */
                ret = msg->reply_error;
-               if (msg->reply_size)
-                       memcpy(reply_data, msg->reply_data, msg->reply_size);
-               if (ret < 0)
+               if (ret < 0) {
                        dev_err(sdev->dev, "error: ipc error for 0x%x size %zu\n",
                                hdr->cmd, msg->reply_size);
-               else
+               } else {
                        ipc_log_header(sdev->dev, "ipc tx succeeded", hdr->cmd);
+                       if (msg->reply_size)
+                               /* copy the data returned from DSP */
+                               memcpy(reply_data, msg->reply_data,
+                                      msg->reply_size);
+               }
        }
 
        return ret;