struct dce_abm *abm_dce = TO_DCE_ABM(abm);
        uint32_t rampingBoundary = 0xFFFF;
 
+       if (abm->dmcu_is_running == false)
+               return true;
+
        REG_WAIT(MASTER_COMM_CNTL_REG, MASTER_COMM_INTERRUPT, 0,
                        1, 80000);
 
 {
        struct dce_abm *abm_dce = TO_DCE_ABM(abm);
 
+       if (abm->dmcu_is_running == false)
+               return true;
+
        REG_WAIT(MASTER_COMM_CNTL_REG, MASTER_COMM_INTERRUPT, 0,
                        1, 80000);
 
 {
        struct dce_abm *abm_dce = TO_DCE_ABM(abm);
 
+       if (abm->dmcu_is_running == false)
+               return true;
+
        dce_abm_set_pipe(abm, MCP_DISABLE_ABM_IMMEDIATELY);
 
        abm->stored_backlight_registers.BL_PWM_CNTL =
        base->stored_backlight_registers.BL_PWM_CNTL2 = 0;
        base->stored_backlight_registers.BL_PWM_PERIOD_CNTL = 0;
        base->stored_backlight_registers.LVTMA_PWRSEQ_REF_DIV_BL_PWM_REF_DIV = 0;
+       base->dmcu_is_running = false;
 
        abm_dce->regs = regs;
        abm_dce->abm_shift = abm_shift;
 {
        struct dce_abm *abm_dce = TO_DCE_ABM(*abm);
 
-       abm_dce->base.funcs->set_abm_immediate_disable(*abm);
+       if (abm_dce->base.dmcu_is_running == true)
+               abm_dce->base.funcs->set_abm_immediate_disable(*abm);
 
        kfree(abm_dce);
        *abm = NULL;
 
        struct dc_bios *bp;
        struct transform *xfm;
        struct abm *abm;
+       struct dmcu *dmcu;
 
        bp = dc->ctx->dc_bios;
        for (i = 0; i < dc->res_pool->pipe_count; i++) {
                abm->funcs->abm_init(abm);
        }
 
+       dmcu = dc->res_pool->dmcu;
+       if (dmcu != NULL && abm != NULL)
+               abm->dmcu_is_running = dmcu->funcs->is_dmcu_initialized(dmcu);
+
        if (dc->fbc_compressor)
                dc->fbc_compressor->funcs->power_up_fbc(dc->fbc_compressor);
 
 
        if (dmcu != NULL)
                dmcu->funcs->dmcu_init(dmcu);
 
+       if (abm != NULL && dmcu != NULL)
+               abm->dmcu_is_running = dmcu->funcs->is_dmcu_initialized(dmcu);
+
        /* power AFMT HDMI memory TODO: may move to dis/en output save power*/
        REG_WRITE(DIO_MEM_PWR_CTRL, 0);