--- open.c.orig	2007-07-09 18:13:54.307542000 -0700
+++ open.c	2007-07-09 18:17:11.097154000 -0700
@@ -306,7 +306,19 @@
 	rsp.data_len = recv.msg.data_len - 1;
 
 	/* save response data for caller */
-	if (rsp.ccode == 0 && rsp.data_len > 0) {
+        if (rsp.data_len > 0) {
+		// if (rsp.ccode == 0 && rsp.data_len > 0) {
+	       /* Earlier code used to copy the correct bytes in response rsp.data only
+		* when the completion code is 0x00.
+		* In HPM Upgrade - a response completion code of 0x80 ie COMMAND_IN_PROGRESS
+		* is also valid and needs to send correct response data to upper application.
+		* For instance when you send upload firmware command to the IPMC and its
+		* busy uploading so the IPMC will send a completion code of 0x80 and the firmware
+		* offset and firmware length back in response completion code. So we need
+		* to copy the response data obtained in rsp.data even when the completion code
+		* is not 0x00. It should not affect anything as the upper application always
+		* relies on the response completion code before getting the response data
+		*/
 		memmove(rsp.data, rsp.data + 1, rsp.data_len);
 		rsp.data[recv.msg.data_len] = 0;
 	}
