diff --git a/src/dsp/platform.c b/src/dsp/platform.c
index 79f7c1e..db9cad9 100644
--- a/src/dsp/platform.c
+++ b/src/dsp/platform.c
@@ -1,4 +1,5 @@
 /* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later */
+#include "dsp/base.h"
 #include "msgbuf.h"
 #include "msgbuf/platform.h"
 
@@ -2534,7 +2535,7 @@
 	int rc;
 
 	if (msg == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
+		return -EINVAL;
 	}
 
 	struct pldm_header_info header = { 0 };
@@ -2543,13 +2544,14 @@
 	header.pldm_type = PLDM_PLATFORM;
 	header.command = PLDM_GET_STATE_EFFECTER_STATES;
 
-	rc = pack_pldm_header(&header, &msg->hdr);
-	if (rc != PLDM_SUCCESS) {
+	rc = pack_pldm_header_errno(&header, &msg->hdr);
+	if (rc < 0) {
 		return rc;
 	}
 
-	rc = pldm_msgbuf_init_cc(buf, PLDM_GET_STATE_EFFECTER_STATES_REQ_BYTES,
-				 msg->payload, payload_length);
+	rc = pldm_msgbuf_init_errno(buf,
+				    PLDM_GET_STATE_EFFECTER_STATES_REQ_BYTES,
+				    msg->payload, payload_length);
 	if (rc) {
 		return rc;
 	}
@@ -2569,12 +2571,12 @@
 	int rc;
 
 	if (msg == NULL || effecter_id == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
+		return -EINVAL;
 	}
 
-	rc = pldm_msgbuf_init_cc(buf,
-				 PLDM_GET_STATE_EFFECTER_STATES_MIN_RESP_BYTES,
-				 msg->payload, payload_length);
+	rc = pldm_msgbuf_init_errno(
+		buf, PLDM_GET_STATE_EFFECTER_STATES_MIN_RESP_BYTES,
+		msg->payload, payload_length);
 	if (rc) {
 		return rc;
 	}
@@ -2596,12 +2598,12 @@
 	int i;
 
 	if (msg == NULL || resp == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
+		return -EINVAL;
 	}
 
-	rc = pldm_msgbuf_init_cc(buf,
-				 PLDM_GET_STATE_EFFECTER_STATES_MIN_RESP_BYTES,
-				 msg->payload, payload_length);
+	rc = pldm_msgbuf_init_errno(
+		buf, PLDM_GET_STATE_EFFECTER_STATES_MIN_RESP_BYTES,
+		msg->payload, payload_length);
 	if (rc) {
 		return rc;
 	}
@@ -2612,7 +2614,7 @@
 	}
 
 	if (PLDM_SUCCESS != resp->completion_code) {
-		return PLDM_SUCCESS;
+		return 0;
 	}
 
 	rc = pldm_msgbuf_extract(buf, resp->comp_effecter_count);
@@ -2624,7 +2626,7 @@
 
 	if (comp_effecter_count < PLDM_GET_EFFECTER_STATE_FIELD_COUNT_MIN ||
 	    comp_effecter_count > PLDM_GET_EFFECTER_STATE_FIELD_COUNT_MAX) {
-		return PLDM_ERROR_INVALID_DATA;
+		return -EBADMSG;
 	}
 
 	for (i = 0, field = resp->field; i < comp_effecter_count;
@@ -2649,14 +2651,14 @@
 	int i;
 
 	if (msg == NULL || resp == NULL) {
-		return PLDM_ERROR_INVALID_DATA;
+		return -EINVAL;
 	}
 
 	uint8_t comp_effecter_count = resp->comp_effecter_count;
 
 	if (comp_effecter_count < PLDM_GET_EFFECTER_STATE_FIELD_COUNT_MIN ||
 	    comp_effecter_count > PLDM_GET_EFFECTER_STATE_FIELD_COUNT_MAX) {
-		return PLDM_ERROR_INVALID_DATA;
+		return -EBADMSG;
 	}
 
 	struct pldm_header_info header = { 0 };
@@ -2665,14 +2667,14 @@
 	header.pldm_type = PLDM_PLATFORM;
 	header.command = PLDM_GET_STATE_EFFECTER_STATES;
 
-	rc = pack_pldm_header(&header, &msg->hdr);
-	if (rc != PLDM_SUCCESS) {
+	rc = pack_pldm_header_errno(&header, &msg->hdr);
+	if (rc < 0) {
 		return rc;
 	}
 
-	rc = pldm_msgbuf_init_cc(buf,
-				 PLDM_GET_STATE_EFFECTER_STATES_MIN_RESP_BYTES,
-				 msg->payload, payload_length);
+	rc = pldm_msgbuf_init_errno(
+		buf, PLDM_GET_STATE_EFFECTER_STATES_MIN_RESP_BYTES,
+		msg->payload, payload_length);
 	if (rc) {
 		return rc;
 	}
diff --git a/tests/dsp/platform.cpp b/tests/dsp/platform.cpp
index 682a922..6e58d4d 100644
--- a/tests/dsp/platform.cpp
+++ b/tests/dsp/platform.cpp
@@ -5,6 +5,7 @@
 #include <libpldm/pldm_types.h>
 
 #include <array>
+#include <cerrno>
 #include <cstdint>
 #include <cstring>
 #include <vector>
@@ -4904,7 +4905,7 @@
     rc = decode_get_state_effecter_states_req(
         request, requestMsg.size() - hdrSize - 1, &ret_effecter_id);
 
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
+    EXPECT_EQ(rc, -EOVERFLOW);
 }
 #endif
 
@@ -4916,7 +4917,7 @@
 
     auto rc = encode_get_state_effecter_states_req(
         0, 0, nullptr, PLDM_GET_STATE_EFFECTER_STATES_REQ_BYTES);
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
+    EXPECT_EQ(rc, -EINVAL);
 }
 #endif
 
@@ -4929,7 +4930,7 @@
     auto rc = decode_get_state_effecter_states_req(
         nullptr, requestMsg.size() - hdrSize, nullptr);
 
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
+    EXPECT_EQ(rc, -EINVAL);
 }
 #endif
 
@@ -4996,7 +4997,7 @@
         responseMsg.size() - hdrSize + PLDM_GET_EFFECTER_STATE_FIELD_SIZE,
         &ret_resp_fields);
 
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
+    EXPECT_EQ(rc, -EBADMSG);
 }
 #endif
 
@@ -5011,7 +5012,7 @@
     };
     auto rc = decode_get_state_effecter_states_resp(nullptr, 0, &resp);
 
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
+    EXPECT_EQ(rc, -EINVAL);
 }
 #endif
 
@@ -5028,6 +5029,6 @@
     auto rc = decode_get_state_effecter_states_resp(
         response, responseMsg.size() - hdrSize, nullptr);
 
-    EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
+    EXPECT_EQ(rc, -EINVAL);
 }
 #endif
