diff --git a/src/dsp/firmware_update.c b/src/dsp/firmware_update.c
index d570d5c..d2b068a 100644
--- a/src/dsp/firmware_update.c
+++ b/src/dsp/firmware_update.c
@@ -919,11 +919,13 @@
 					struct pldm_msg *msg)
 {
 	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
+		return -EINVAL;
 	}
 
-	return encode_pldm_header_only(PLDM_REQUEST, instance_id, PLDM_FWUP,
-				       PLDM_QUERY_DOWNSTREAM_DEVICES, msg);
+	return encode_pldm_header_only_errno(PLDM_REQUEST, instance_id,
+					     PLDM_FWUP,
+					     PLDM_QUERY_DOWNSTREAM_DEVICES,
+					     msg);
 }
 
 LIBPLDM_ABI_TESTING
@@ -936,7 +938,7 @@
 	int rc;
 
 	if (msg == NULL || resp_data == NULL || !payload_length) {
-		return PLDM_ERROR_INVALID_DATA;
+		return -EINVAL;
 	}
 
 	rc = pldm_msgbuf_init_errno(buf, PLDM_OPTIONAL_COMMAND_RESP_MIN_LEN,
@@ -947,38 +949,33 @@
 
 	rc = pldm_msgbuf_extract(buf, resp_data->completion_code);
 	if (rc) {
-		return pldm_xlate_errno(rc);
+		return rc;
 	}
 	if (PLDM_SUCCESS != resp_data->completion_code) {
 		// Return the CC directly without decoding the rest of the payload
-		return PLDM_SUCCESS;
+		return 0;
 	}
 
 	if (payload_length < PLDM_QUERY_DOWNSTREAM_DEVICES_RESP_BYTES) {
-		return PLDM_ERROR_INVALID_LENGTH;
+		return -EBADMSG;
 	}
 
 	rc = pldm_msgbuf_extract(buf,
 				 resp_data->downstream_device_update_supported);
 	if (rc) {
-		return pldm_xlate_errno(rc);
+		return rc;
 	}
 
 	if (!is_downstream_device_update_support_valid(
 		    resp_data->downstream_device_update_supported)) {
-		return PLDM_ERROR_INVALID_DATA;
+		return -EINVAL;
 	}
 
 	pldm_msgbuf_extract(buf, resp_data->number_of_downstream_devices);
 	pldm_msgbuf_extract(buf, resp_data->max_number_of_downstream_devices);
 	pldm_msgbuf_extract(buf, resp_data->capabilities.value);
 
-	rc = pldm_msgbuf_destroy_consumed(buf);
-	if (rc) {
-		pldm_xlate_errno(rc);
-	}
-
-	return PLDM_SUCCESS;
+	return pldm_msgbuf_destroy_consumed(buf);
 }
 
 LIBPLDM_ABI_TESTING
@@ -992,11 +989,11 @@
 	int rc;
 
 	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
+		return -EINVAL;
 	}
 
 	if (!is_transfer_operation_flag_valid(transfer_operation_flag)) {
-		return PLDM_INVALID_TRANSFER_OPERATION_FLAG;
+		return -EINVAL;
 	}
 
 	struct pldm_header_info header = { 0 };
@@ -1004,7 +1001,7 @@
 	header.msg_type = PLDM_REQUEST;
 	header.pldm_type = PLDM_FWUP;
 	header.command = PLDM_QUERY_DOWNSTREAM_IDENTIFIERS;
-	rc = pack_pldm_header(&header, &(msg->hdr));
+	rc = pack_pldm_header_errno(&header, &(msg->hdr));
 	if (rc) {
 		return rc;
 	}
@@ -1013,19 +1010,14 @@
 				    PLDM_QUERY_DOWNSTREAM_IDENTIFIERS_REQ_BYTES,
 				    msg->payload, payload_length);
 	if (rc) {
-		return pldm_xlate_errno(rc);
+		return rc;
 	}
 
 	pldm_msgbuf_insert(buf, data_transfer_handle);
 	// Data correctness has been verified, cast it to 1-byte data directly.
 	pldm_msgbuf_insert(buf, (uint8_t)transfer_operation_flag);
 
-	rc = pldm_msgbuf_destroy(buf);
-	if (rc) {
-		return pldm_xlate_errno(rc);
-	}
-
-	return PLDM_SUCCESS;
+	return pldm_msgbuf_destroy(buf);
 }
 
 LIBPLDM_ABI_TESTING
@@ -1037,29 +1029,29 @@
 	struct pldm_msgbuf _buf;
 	struct pldm_msgbuf *buf = &_buf;
 	void *remaining = NULL;
-	int rc = PLDM_ERROR;
+	int rc = 0;
 
 	if (msg == NULL || resp_data == NULL || iter == NULL ||
 	    !payload_length) {
-		return PLDM_ERROR_INVALID_DATA;
+		return -EINVAL;
 	}
 
 	rc = pldm_msgbuf_init_errno(buf, PLDM_OPTIONAL_COMMAND_RESP_MIN_LEN,
 				    msg->payload, payload_length);
 	if (rc) {
-		return pldm_xlate_errno(rc);
+		return rc;
 	}
 
 	rc = pldm_msgbuf_extract(buf, resp_data->completion_code);
 	if (rc) {
-		return pldm_xlate_errno(rc);
+		return rc;
 	}
 	if (PLDM_SUCCESS != resp_data->completion_code) {
-		return PLDM_SUCCESS;
+		return 0;
 	}
 
 	if (payload_length < PLDM_QUERY_DOWNSTREAM_IDENTIFIERS_RESP_MIN_LEN) {
-		return PLDM_ERROR_INVALID_LENGTH;
+		return -EBADMSG;
 	}
 
 	pldm_msgbuf_extract(buf, resp_data->next_data_transfer_handle);
@@ -1067,26 +1059,26 @@
 
 	rc = pldm_msgbuf_extract(buf, resp_data->downstream_devices_length);
 	if (rc) {
-		return pldm_xlate_errno(rc);
+		return rc;
 	}
 
 	pldm_msgbuf_extract(buf, resp_data->number_of_downstream_devices);
 	rc = pldm_msgbuf_span_required(
 		buf, resp_data->downstream_devices_length, &remaining);
 	if (rc) {
-		return pldm_xlate_errno(rc);
+		return rc;
 	}
 
 	rc = pldm_msgbuf_destroy(buf);
 	if (rc) {
-		return pldm_xlate_errno(rc);
+		return rc;
 	}
 
 	iter->field.ptr = remaining;
 	iter->field.length = resp_data->downstream_devices_length;
 	iter->devs = resp_data->number_of_downstream_devices;
 
-	return PLDM_SUCCESS;
+	return 0;
 }
 
 LIBPLDM_ABI_TESTING
