mfc_debug_enter();
 
        if (IS_MFCV6_PLUS(dev)) {
-               /* Reset IP */
-               /*  except RISC, reset */
-               mfc_write(dev, 0xFEE, S5P_FIMV_MFC_RESET_V6);
-               /*  reset release */
-               mfc_write(dev, 0x0, S5P_FIMV_MFC_RESET_V6);
-
                /* Zero Initialization of MFC registers */
                mfc_write(dev, 0, S5P_FIMV_RISC2HOST_CMD_V6);
                mfc_write(dev, 0, S5P_FIMV_HOST2RISC_CMD_V6);
                for (i = 0; i < S5P_FIMV_REG_CLEAR_COUNT_V6; i++)
                        mfc_write(dev, 0, S5P_FIMV_REG_CLEAR_BEGIN_V6 + (i*4));
 
-               /* Reset */
-               mfc_write(dev, 0, S5P_FIMV_RISC_ON_V6);
+               /* Reset
+                * set RISC_ON to 0 during power_on & wake_up.
+                * V6 needs RISC_ON set to 0 during reset also.
+                */
+               if ((!dev->risc_on) || (!IS_MFCV7(dev)))
+                       mfc_write(dev, 0, S5P_FIMV_RISC_ON_V6);
+
                mfc_write(dev, 0x1FFF, S5P_FIMV_MFC_RESET_V6);
                mfc_write(dev, 0, S5P_FIMV_MFC_RESET_V6);
        } else {
        /* 0. MFC reset */
        mfc_debug(2, "MFC reset..\n");
        s5p_mfc_clock_on();
+       dev->risc_on = 0;
        ret = s5p_mfc_reset(dev);
        if (ret) {
                mfc_err("Failed to reset MFC - timeout\n");
        s5p_mfc_clear_cmds(dev);
        /* 3. Release reset signal to the RISC */
        s5p_mfc_clean_dev_int_flags(dev);
-       if (IS_MFCV6_PLUS(dev))
+       if (IS_MFCV6_PLUS(dev)) {
+               dev->risc_on = 1;
                mfc_write(dev, 0x1, S5P_FIMV_RISC_ON_V6);
+       }
        else
                mfc_write(dev, 0x3ff, S5P_FIMV_SW_RESET);
        mfc_debug(2, "Will now wait for completion of firmware transfer\n");
        /* 0. MFC reset */
        mfc_debug(2, "MFC reset..\n");
        s5p_mfc_clock_on();
+       dev->risc_on = 0;
        ret = s5p_mfc_reset(dev);
        if (ret) {
                mfc_err("Failed to reset MFC - timeout\n");
                return ret;
        }
        /* 4. Release reset signal to the RISC */
-       if (IS_MFCV6_PLUS(dev))
+       if (IS_MFCV6_PLUS(dev)) {
+               dev->risc_on = 1;
                mfc_write(dev, 0x1, S5P_FIMV_RISC_ON_V6);
+       }
        else
                mfc_write(dev, 0x3ff, S5P_FIMV_SW_RESET);
        mfc_debug(2, "Ok, now will write a command to wakeup the system\n");