}
 }
 
-static void dce_dmcu_setup_psr(struct dmcu *dmcu,
+static bool dce_dmcu_setup_psr(struct dmcu *dmcu,
                struct dc_link *link,
                struct psr_context *psr_context)
 {
 
        /* notifyDMCUMsg */
        REG_UPDATE(MASTER_COMM_CNTL_REG, MASTER_COMM_INTERRUPT, 1);
+
+       return true;
 }
 
 static bool dce_is_dmcu_initialized(struct dmcu *dmcu)
         *  least a few frames. Should never hit the max retry assert below.
         */
        if (wait == true) {
-       for (retryCount = 0; retryCount <= 1000; retryCount++) {
-               dcn10_get_dmcu_psr_state(dmcu, &psr_state);
-               if (enable) {
-                       if (psr_state != 0)
-                               break;
-               } else {
-                       if (psr_state == 0)
-                               break;
+               for (retryCount = 0; retryCount <= 1000; retryCount++) {
+                       dcn10_get_dmcu_psr_state(dmcu, &psr_state);
+                       if (enable) {
+                               if (psr_state != 0)
+                                       break;
+                       } else {
+                               if (psr_state == 0)
+                                       break;
+                       }
+                       udelay(500);
                }
-               udelay(500);
-       }
 
-       /* assert if max retry hit */
-       ASSERT(retryCount <= 1000);
+               /* assert if max retry hit */
+               if (retryCount >= 1000)
+                       ASSERT(0);
        }
 }
 
-static void dcn10_dmcu_setup_psr(struct dmcu *dmcu,
+static bool dcn10_dmcu_setup_psr(struct dmcu *dmcu,
                struct dc_link *link,
                struct psr_context *psr_context)
 {
 
        /* If microcontroller is not running, do nothing */
        if (dmcu->dmcu_state != DMCU_RUNNING)
-               return;
+               return false;
 
        link->link_enc->funcs->psr_program_dp_dphy_fast_training(link->link_enc,
                        psr_context->psrExitLinkTrainingRequired);
 
        /* notifyDMCUMsg */
        REG_UPDATE(MASTER_COMM_CNTL_REG, MASTER_COMM_INTERRUPT, 1);
+
+       /* waitDMCUReadyForCmd */
+       REG_WAIT(MASTER_COMM_CNTL_REG, MASTER_COMM_INTERRUPT, 0, 1, 10000);
+
+       return true;
 }
 
 static void dcn10_psr_wait_loop(
 
                        const char *src,
                        unsigned int bytes);
        void (*set_psr_enable)(struct dmcu *dmcu, bool enable, bool wait);
-       void (*setup_psr)(struct dmcu *dmcu,
+       bool (*setup_psr)(struct dmcu *dmcu,
                        struct dc_link *link,
                        struct psr_context *psr_context);
        void (*get_psr_state)(struct dmcu *dmcu, uint32_t *psr_state);