diff --git a/examples/drivers/boot/sbl_qspi/am263x-cc/r5fss0-0_nortos/example.syscfg b/examples/drivers/boot/sbl_qspi/am263x-cc/r5fss0-0_nortos/example.syscfg
index 624d9bd7fe..74f8c1757e 100644
--- a/examples/drivers/boot/sbl_qspi/am263x-cc/r5fss0-0_nortos/example.syscfg
+++ b/examples/drivers/boot/sbl_qspi/am263x-cc/r5fss0-0_nortos/example.syscfg
@@ -12,6 +12,8 @@ const flash       = scripting.addModule("/board/flash/flash", {}, false);
 const flash1      = flash.addInstance();
 const bootloader  = scripting.addModule("/drivers/bootloader/bootloader", {}, false);
 const bootloader1 = bootloader.addInstance();
+const gpio        = scripting.addModule("/drivers/gpio/gpio", {}, false);
+const gpio1       = gpio.addInstance();
 const hsmclient   = scripting.addModule("/drivers/hsmclient/hsmclient", {}, false);
 const hsmclient1  = hsmclient.addInstance();
 const debug_log   = scripting.addModule("/kernel/dpl/debug_log");
@@ -43,6 +45,9 @@ edma1.edmaRmDmaCh[0].$name         = "CONFIG_EDMA_RM0";
 edma1.edmaRmQdmaCh[0].$name        = "CONFIG_EDMA_RM1";
 edma1.edmaRmTcc[0].$name           = "CONFIG_EDMA_RM2";
 edma1.edmaRmParam[0].$name         = "CONFIG_EDMA_RM3";
+gpio1.$name                = "CONFIG_GPIO0";
+gpio1.pinDir               = "OUTPUT";
+gpio1.GPIO.gpioPin.$assign = "ball.G18";
 
 hsmclient1.$name = "CONFIG_HSMCLIENT0";
 
@@ -91,4 +96,5 @@ flash1.peripheralDriver.QSPI.QSPI_D2.$suggestSolution   = "ball.M4";
 flash1.peripheralDriver.QSPI.QSPI_D3.$suggestSolution   = "ball.P3";
 flash1.peripheralDriver.QSPI.QSPI_CLK.$suggestSolution  = "ball.N2";
 flash1.peripheralDriver.QSPI.QSPI_CSn0.$suggestSolution = "ball.P1";
+gpio1.GPIO.$suggestSolution                             = "GPIO0";
 debug_log.uartLog.UART.$suggestSolution                 = "UART0";
diff --git a/examples/drivers/boot/sbl_qspi/am263x-cc/r5fss0-0_nortos/main.c b/examples/drivers/boot/sbl_qspi/am263x-cc/r5fss0-0_nortos/main.c
index 827aadd247..796dd8441e 100644
--- a/examples/drivers/boot/sbl_qspi/am263x-cc/r5fss0-0_nortos/main.c
+++ b/examples/drivers/boot/sbl_qspi/am263x-cc/r5fss0-0_nortos/main.c
@@ -34,11 +34,17 @@
 #include "ti_drivers_config.h"
 #include "ti_drivers_open_close.h"
 #include "ti_board_open_close.h"
+#include "ti_board_config.h"
 #include <drivers/bootloader.h>
+#include <drivers/hsmclient.h>
 #include <drivers/hsmclient/soc/am263x/hsmRtImg.h> /* hsmRt bin   header file */
 
+#if 0
 const uint8_t gHsmRtFw[HSMRT_IMG_SIZE_IN_BYTES]__attribute__((section(".rodata.hsmrt")))
     = HSMRT_IMG;
+#else
+//uint8_t gHsmRtFw[HSMRT_IMG_SIZE_IN_BYTES];
+#endif
 
 /* call this API to stop the booting process and spin, do that you can connect
  * debugger, load symbols and then make the 'loop' variable as 0 to continue execution
@@ -51,29 +57,57 @@ void loop_forever(void)
         ;
 }
 
+void GPIO_TOGGLE(uint32_t baseAddr, uint32_t pinNum)
+{
+    if(GPIO_pinOutValueRead(baseAddr, pinNum) == 1)
+    {
+        GPIO_pinWriteLow(baseAddr, pinNum);
+    }
+    else
+    {
+        GPIO_pinWriteHigh(baseAddr, pinNum);
+    }
+}
+
 int main(void)
 {
     int32_t status;
+    uint32_t gpioBaseAddr = (uint32_t) AddrTranslateP_getLocalAddr(CONFIG_GPIO0_BASE_ADDR);
+    uint32_t pinNum       = CONFIG_GPIO0_PIN;
 
     Bootloader_profileReset();
     Bootloader_socConfigurePll();
     Bootloader_socInitL2MailBoxMemory();
 
+    Bootloader_socCpuSetClock(CSL_CORE_ID_R5FSS0_0, (uint32_t)(400*1000000));
+
     System_init();
     Bootloader_profileAddProfilePoint("System_init");
+    GPIO_TOGGLE(gpioBaseAddr, pinNum);
 
     Drivers_open();
     Bootloader_profileAddProfilePoint("Drivers_open");
-
-    DebugP_log("\r\n");
-    Bootloader_socLoadHsmRtFw(gHsmRtFw, HSMRT_IMG_SIZE_IN_BYTES);
-    Bootloader_profileAddProfilePoint("LoadHsmRtFw");
-
-    DebugP_log("Starting QSPI Bootloader ... \r\n");
+    GPIO_TOGGLE(gpioBaseAddr, pinNum);
 
     status = Board_driversOpen();
     DebugP_assert(status == SystemP_SUCCESS);
     Bootloader_profileAddProfilePoint("Board_driversOpen");
+    GPIO_TOGGLE(gpioBaseAddr, pinNum);
+
+    DebugP_log("\r\n");
+    Flash_read(gFlashHandle[0U], 0xA0000, (uint8_t *)0x70100000U, HSMRT_IMG_SIZE_IN_BYTES);
+    Bootloader_profileAddProfilePoint("LoadHsmRtFw into On-Chip RAM");
+    GPIO_TOGGLE(gpioBaseAddr, pinNum);
+
+    Bootloader_socLoadHsmRtFw((uint8_t *)0x70100000U, HSMRT_IMG_SIZE_IN_BYTES);
+    Bootloader_profileAddProfilePoint("LoadHsmRtFw Request to ROM");
+    GPIO_TOGGLE(gpioBaseAddr, pinNum);
+
+    Hsmclient_loadHSMRtFirmwareClient();
+    Bootloader_profileAddProfilePoint("HSM Client Register");
+    GPIO_TOGGLE(gpioBaseAddr, pinNum);
+
+    DebugP_log("Starting QSPI Bootloader ... \r\n");
 
     if(SystemP_SUCCESS == status)
     {
@@ -113,14 +147,27 @@ int main(void)
                 Bootloader_profileAddCore(CSL_CORE_ID_R5FSS0_0);
                 status = Bootloader_loadCpu(bootHandle, &bootImageInfo.cpuInfo[CSL_CORE_ID_R5FSS0_0]);
             }
+
             Bootloader_profileAddProfilePoint("CPU load");
             Bootloader_profileUpdateAppimageSize(Bootloader_getMulticoreImageSize(bootHandle));
+            GPIO_TOGGLE(gpioBaseAddr, pinNum);
+
+            Hsmclient_loadHSMRtFirmwareROMCheckBlocking();
+            Bootloader_profileAddProfilePoint("LoadHsmRtFw confirmation from ROM");
+            GPIO_TOGGLE(gpioBaseAddr, pinNum);
+
+            Hsmclient_loadHSMRtFirmwareWaitforNotify();
+            Bootloader_profileAddProfilePoint("HsmRT BootNotify Request");
+            GPIO_TOGGLE(gpioBaseAddr, pinNum);
+
             QSPI_Handle qspiHandle = QSPI_getHandle(CONFIG_QSPI0);
             Bootloader_profileUpdateMediaAndClk(BOOTLOADER_MEDIA_FLASH, QSPI_getInputClk(qspiHandle));
 
             if(status == SystemP_SUCCESS)
             {
                 Bootloader_profileAddProfilePoint("SBL End");
+                GPIO_TOGGLE(gpioBaseAddr, pinNum);
+
                 Bootloader_profilePrintProfileLog();
                 DebugP_log("Image loading done, switching to application ...\r\n");
                 UART_flushTxFifo(gUartHandle[CONFIG_UART0]);
@@ -141,6 +188,7 @@ int main(void)
             }
             if((status == SystemP_SUCCESS) && (TRUE == Bootloader_isCorePresent(bootHandle, CSL_CORE_ID_R5FSS0_0)))
             {
+                GPIO_pinWriteLow(gpioBaseAddr, pinNum);
                 /* If any of the R5 core 0 have valid image reset the R5 core. */
                 status = Bootloader_runSelfCpu(bootHandle, &bootImageInfo);
             }
diff --git a/source/drivers/bootloader/soc/am263x/bootloader_hsmRt_load.c b/source/drivers/bootloader/soc/am263x/bootloader_hsmRt_load.c
index c115c3a6ff..17b1f4936f 100644
--- a/source/drivers/bootloader/soc/am263x/bootloader_hsmRt_load.c
+++ b/source/drivers/bootloader/soc/am263x/bootloader_hsmRt_load.c
@@ -74,14 +74,14 @@ void Bootloader_socLoadHsmRtFw(const uint8_t *HsmRtFw, uint32_t hsmRTSize)
     if(ptrTopCtrlRegs->EFUSE_DEVICE_TYPE == BOOTLOADER_DEVTYPE_HSSE)
     {
         DebugP_logInfo("DevType : HSSE  \r\n");
-        retVal = Hsmclient_loadHSMRtFirmware((uint8_t*)HsmRtFw);
+        retVal = Hsmclient_loadHSMRtFirmwareROMInitiate((uint8_t*)HsmRtFw);
         DebugP_logInfo("HSMRT Size in Bytes : %ld \r\n", (uint32_t)hsmRTSize);
     }
     else if((ptrTopCtrlRegs->EFUSE_DEVICE_TYPE == BOOTLOADER_DEVTYPE_HSFS) &&
 			(((ptrTopCtrlRegs->EFUSE1_ROW_15)&0xF) == AM263x_SR11))
     {
         DebugP_logInfo("Device Type : HSFS  \r\n");
-        retVal = Hsmclient_loadHSMRtFirmware((uint8_t*)HsmRtFw);
+        retVal = Hsmclient_loadHSMRtFirmwareROMInitiate((uint8_t*)HsmRtFw);
         DebugP_logInfo("HSMRT Size in Bytes : %ld \r\n", (uint32_t)hsmRTSize);
     }
     else
diff --git a/source/drivers/hsmclient.h b/source/drivers/hsmclient.h
index 5fd36f2619..ec8c4313cc 100644
--- a/source/drivers/hsmclient.h
+++ b/source/drivers/hsmclient.h
@@ -344,8 +344,11 @@ int32_t HsmClient_waitForBootNotify(HsmClient_t* HsmClient,uint32_t timeToWaitIn
  *  @return SystemP_SUCCESS on success, else SystemP_FAILURE
  *
  */
-int32_t Hsmclient_loadHSMRtFirmware(const uint8_t *pHSMRt_firmware);
+int32_t Hsmclient_loadHSMRtFirmwareROMInitiate(const uint8_t *pHSMRt_firmware);
 
+void Hsmclient_loadHSMRtFirmwareClient(void);
+int32_t Hsmclient_loadHSMRtFirmwareROMCheckBlocking(void);
+int32_t Hsmclient_loadHSMRtFirmwareWaitforNotify(void);
 /** @} */
 
 #ifdef __cplusplus
diff --git a/source/drivers/hsmclient/hsmclient.c b/source/drivers/hsmclient/hsmclient.c
index 70345d576a..81a5166403 100644
--- a/source/drivers/hsmclient/hsmclient.c
+++ b/source/drivers/hsmclient/hsmclient.c
@@ -165,7 +165,7 @@ int32_t HsmClient_register(HsmClient_t* HsmClient, uint8_t clientId)
 
     if(HsmClient == NULL)
     {
-        DebugP_log(" \r\n [HSM_CLIENT] HsmCliet_t type error. \r\n");
+        //DebugP_log(" \r\n [HSM_CLIENT] HsmCliet_t type error. \r\n");
         return SystemP_FAILURE;
     }
     else
@@ -179,11 +179,11 @@ int32_t HsmClient_register(HsmClient_t* HsmClient, uint8_t clientId)
     status = SIPC_registerClient(clientId,HsmClient_isr,(void *)HsmClient);
     if(status == SystemP_SUCCESS)
     {
-        DebugP_log("\r\n [HSM_CLIENT] New Client Registered with Client Id = %d\r\n ",clientId);
+        //DebugP_log("\r\n [HSM_CLIENT] New Client Registered with Client Id = %d\r\n ",clientId);
     }
     else
     {
-        DebugP_log(" \r\n [HSM_CLIENT] Client already registered or Invalid ClientId\r\n");
+        //DebugP_log(" \r\n [HSM_CLIENT] Client already registered or Invalid ClientId\r\n");
     }
     return status;
 }
@@ -715,7 +715,6 @@ int32_t HsmClient_waitForBootNotify(HsmClient_t* HsmClient, uint32_t timeout)
 {
     int32_t status ;
 
-    SemaphoreP_constructBinary(&HsmClient->Semaphore,0);
 
     status = SemaphoreP_pend(&HsmClient->Semaphore,timeout);
 
diff --git a/source/drivers/hsmclient/soc/am263x/hsmclient_loadhsmrt.c b/source/drivers/hsmclient/soc/am263x/hsmclient_loadhsmrt.c
index 8d59711dff..e7c9afd006 100644
--- a/source/drivers/hsmclient/soc/am263x/hsmclient_loadhsmrt.c
+++ b/source/drivers/hsmclient/soc/am263x/hsmclient_loadhsmrt.c
@@ -177,7 +177,10 @@ typedef struct Hsmclient_ipcLoadHSMResult_t
 
 /* variable foer hsm RT firmware download complete status */
 volatile uint32_t gHsmRtDownloadComplete = 0;
+Hsmclient_ipcLoadHSMResult   loadHSMResult = {{0}};
+HwiP_Object hwiObjReadReq;
 CSL_mss_ctrlRegs * ptrMSSCtrlRegs = (CSL_mss_ctrlRegs *)CSL_MSS_CTRL_U_BASE;
+HsmClient_t NotifyClient ;
 
 /*==========================================================================
  *                          static Function Declarations
@@ -251,19 +254,14 @@ static void Hsmclient_mboxRxISR(void *args)
  *                          public Function defination.
  *==============================================================================*/
 
-int32_t Hsmclient_loadHSMRtFirmware(const uint8_t *pHSMRt_firmware)
+int32_t Hsmclient_loadHSMRtFirmwareROMInitiate(const uint8_t *pHSMRt_firmware)
 {
     int32_t  status   = SystemP_SUCCESS;
     Hsmclient_ipcLoadHSM         loadHSMImage;
-    Hsmclient_ipcLoadHSMResult   loadHSMResult = {{0}};
-    uint16_t            orgChecksum;
     HwiP_Params hwiParams;
-    HwiP_Object hwiObjReadReq;
-    HsmClient_t NotifyClient ;
     uint8_t *ptrMessage = (uint8_t *) CSL_HSM_MBOX_SRAM_U_BASE;
 
     /* register a hsm client to detect boonotify message from HSM */
-    HsmClient_register(&NotifyClient,HSM_BOOT_NOTIFY_CLIENT_ID);
 
     if (pHSMRt_firmware != NULL)
     {
@@ -294,7 +292,23 @@ int32_t Hsmclient_loadHSMRtFirmware(const uint8_t *pHSMRt_firmware)
 
         /* raise interrupt to the processor */
         CSL_FINSR (ptrMSSCtrlRegs->R5SS0_CORE0_MBOX_WRITE_DONE, 24, 24, 1U);
+    }
+    else
+    {
+        status = SystemP_FAILURE;
+    }
 
+    return status;
+}
+void Hsmclient_loadHSMRtFirmwareClient(void)
+{
+    HsmClient_register(&NotifyClient,HSM_BOOT_NOTIFY_CLIENT_ID);
+    SemaphoreP_constructBinary(&NotifyClient.Semaphore, 0);
+}
+int32_t Hsmclient_loadHSMRtFirmwareROMCheckBlocking(void)
+{
+    int32_t  status   = SystemP_SUCCESS;
+    uint16_t            orgChecksum;
         /* Wait until hsmRt firmware download completes */
         while(gHsmRtDownloadComplete != 1)
         {
@@ -313,17 +327,16 @@ int32_t Hsmclient_loadHSMRtFirmware(const uint8_t *pHSMRt_firmware)
 
         HwiP_destruct(&hwiObjReadReq);
 
-        if(status == SystemP_SUCCESS)
-        {
+    return status;
             /* once loaded hsmrt firmware wait for bootnotify message  */
-            status = HsmClient_waitForBootNotify(&NotifyClient,SystemP_WAIT_FOREVER);
         }
-    }
-    else
+
+int32_t Hsmclient_loadHSMRtFirmwareWaitforNotify(void)
     {
         /* Error: Invalid load address */
-        status = SystemP_FAILURE;
-    }
+    int32_t  status   = SystemP_SUCCESS;
+
+    status = HsmClient_waitForBootNotify(&NotifyClient,SystemP_WAIT_FOREVER);
     /* Unregister bootnotify client */
     HsmClient_unregister(&NotifyClient,HSM_BOOT_NOTIFY_CLIENT_ID);
     return status;
