diff --git a/plat/ti/k3/common/drivers/ti_sci/ti_sci.c b/plat/ti/k3/common/drivers/ti_sci/ti_sci.c
index 0f0a6f0..df0b794 100644
--- a/plat/ti/k3/common/drivers/ti_sci/ti_sci.c
+++ b/plat/ti/k3/common/drivers/ti_sci/ti_sci.c
@@ -1681,88 +1681,6 @@
 }
 
 /**
- * ti_sci_proc_shutdown() - Shutdown Processor without waiting for ACKs
- *
- * @proc_id:	Processor ID this request is for
- * @dev_id:	Device identifier this request is for
- *
- * Return: 0 if all goes well, else appropriate error message
- */
-int ti_sci_proc_shutdown(uint8_t proc_id, uint32_t dev_id)
-{
-	struct ti_sci_msg_req_wait_proc_boot_status wait_req;
-	struct ti_sci_msg_req_set_device_state set_req;
-	/*
-	 * We will not be waiting for this response, but declare one anyway
-	 * to pass to the setup function so the checks will still pass
-	 */
-	struct ti_sci_msg_hdr resp;
-
-	struct ti_sci_xfer xfer;
-	int ret;
-
-	/* Start by sending wait command */
-
-	/* Setup with NORESPONSE flag to keep response queue clean */
-	ret = ti_sci_setup_one_xfer(TISCI_MSG_WAIT_PROC_BOOT_STATUS,
-				    TI_SCI_FLAG_REQ_GENERIC_NORESPONSE,
-				    &wait_req, sizeof(wait_req),
-				    &resp, sizeof(resp),
-				    &xfer);
-	if (ret) {
-		ERROR("Message alloc failed (%d)\n", ret);
-		return ret;
-	}
-
-	wait_req.processor_id = proc_id;
-	/*
-	 * Wait maximum time to give us the best chance to get
-	 * to WFI before this command timeouts
-	 */
-	wait_req.delay_before_iterations_us = UINT8_MAX;
-	wait_req.num_wait_iterations = UINT8_MAX;
-	wait_req.delay_per_iteration_us = UINT8_MAX;  /* TODO: optimize time */
-	wait_req.num_match_iterations = 2;
-	wait_req.status_flags_1_set_all_wait = 0;
-	/* Wait for either WFE or WFI */
-	wait_req.status_flags_1_set_any_wait = PROC_BOOT_STATUS_FLAG_ARMV8_WFE |
-					       PROC_BOOT_STATUS_FLAG_ARMV8_WFI;
-	wait_req.status_flags_1_clr_all_wait = 0;
-	wait_req.status_flags_1_clr_any_wait = 0;
-
-	/* Send wait message */
-	ret = k3_sec_proxy_send(SP_HIGH_PRIORITY, &xfer.tx_message);
-	if (ret) {
-		ERROR("Message sending failed (%d)\n", ret);
-		return ret;
-	}
-
-	/* Now queue up the shutdown request */
-	ret = ti_sci_setup_one_xfer(TI_SCI_MSG_SET_DEVICE_STATE,
-				    TI_SCI_FLAG_REQ_GENERIC_NORESPONSE,
-				    &set_req, sizeof(set_req),
-				    &resp, sizeof(resp),
-				    &xfer);
-	if (ret) {
-		ERROR("Message alloc failed (%d)\n", ret);
-		return ret;
-	}
-
-	set_req.id = dev_id;
-	set_req.state = MSG_DEVICE_SW_STATE_AUTO_OFF;
-
-	/* Send shutdown message */
-	ret = k3_sec_proxy_send(SP_HIGH_PRIORITY, &xfer.tx_message);
-	if (ret) {
-		ERROR("Message sending failed (%d)\n", ret);
-		return ret;
-	}
-
-	/* Return without waiting for responses */
-	return 0;
-}
-
-/**
  * ti_sci_init() - Basic initialization
  *
  * Return: 0 if all goes well, else appropriate error message
diff --git a/plat/ti/k3/common/drivers/ti_sci/ti_sci.h b/plat/ti/k3/common/drivers/ti_sci/ti_sci.h
index a179c13..c7b09b3 100644
--- a/plat/ti/k3/common/drivers/ti_sci/ti_sci.h
+++ b/plat/ti/k3/common/drivers/ti_sci/ti_sci.h
@@ -205,7 +205,6 @@
 					 uint32_t status_flags_1_set_any_wait,
 					 uint32_t status_flags_1_clr_all_wait,
 					 uint32_t status_flags_1_clr_any_wait);
-int ti_sci_proc_shutdown(uint8_t proc_id, uint32_t dev_id);
 
 /**
  * ti_sci_init() - Basic initialization
diff --git a/plat/ti/k3/common/k3_psci.c b/plat/ti/k3/common/k3_psci.c
index 235e639..afe465e 100644
--- a/plat/ti/k3/common/k3_psci.c
+++ b/plat/ti/k3/common/k3_psci.c
@@ -13,6 +13,7 @@
 #include <lib/psci/psci.h>
 #include <plat/common/platform.h>
 
+#include <ti_sci_protocol.h>
 #include <k3_gicv3.h>
 #include <ti_sci.h>
 
@@ -90,9 +91,24 @@
 	proc = PLAT_PROC_START_ID + core_id;
 	device = PLAT_PROC_DEVICE_START_ID + core_id;
 
-	ret = ti_sci_proc_shutdown(proc, device);
+	/* Start by sending wait for WFI command */
+	ret = ti_sci_proc_wait_boot_status_no_wait(proc,
+			/*
+			 * Wait maximum time to give us the best chance to get
+			 * to WFI before this command timeouts
+			 */
+			UINT8_MAX, 100, UINT8_MAX, UINT8_MAX,
+			/* Wait for WFI */
+			PROC_BOOT_STATUS_FLAG_ARMV8_WFI, 0, 0, 0);
 	if (ret) {
-		ERROR("Request to stop core failed: %d\n", ret);
+		ERROR("Sending wait for WFI failed (%d)\n", ret);
+		return;
+	}
+
+	/* Now queue up the core shutdown request */
+	ret = ti_sci_device_put_no_wait(device);
+	if (ret) {
+		ERROR("Sending core shutdown message failed (%d)\n", ret);
 		return;
 	}
 }
