/* MFCv10 register definitions*/
 #define S5P_FIMV_MFC_CLOCK_OFF_V10                     0x7120
 #define S5P_FIMV_MFC_STATE_V10                         0x7124
+#define S5P_FIMV_D_STATIC_BUFFER_ADDR_V10              0xF570
+#define S5P_FIMV_D_STATIC_BUFFER_SIZE_V10              0xF574
 
 /* MFCv10 Context buffer sizes */
 #define MFC_CTX_BUF_SIZE_V10           (30 * SZ_1K)
 
 /* MFCv10 codec defines*/
 #define S5P_FIMV_CODEC_HEVC_DEC                17
+#define S5P_FIMV_CODEC_VP9_DEC         18
 #define S5P_FIMV_CODEC_HEVC_ENC         26
 
+/* Decoder buffer size for MFC v10 */
+#define DEC_VP9_STATIC_BUFFER_SIZE     20480
+
 /* Encoder buffer size for MFC v10.0 */
 #define ENC_V100_BASE_SIZE(x, y) \
        (((x + 3) * (y + 3) * 8) \
 
                        ctx->scratch_buf_size +
                        (ctx->mv_count * ctx->mv_size);
                break;
+       case S5P_MFC_CODEC_VP9_DEC:
+               mfc_debug(2, "Use min scratch buffer size\n");
+               ctx->bank1.size =
+                       ctx->scratch_buf_size +
+                       DEC_VP9_STATIC_BUFFER_SIZE;
+               break;
        case S5P_MFC_CODEC_H264_ENC:
                if (IS_MFCV10(dev)) {
                        mfc_debug(2, "Use min scratch buffer size\n");
        case S5P_MFC_CODEC_VC1_DEC:
        case S5P_MFC_CODEC_MPEG2_DEC:
        case S5P_MFC_CODEC_VP8_DEC:
+       case S5P_MFC_CODEC_VP9_DEC:
                ctx->ctx.size = buf_size->other_dec_ctx;
                break;
        case S5P_MFC_CODEC_H264_ENC:
                        buf_size1 -= frame_size_mv;
                }
        }
+       if (ctx->codec_mode == S5P_FIMV_CODEC_VP9_DEC) {
+               writel(buf_addr1, mfc_regs->d_static_buffer_addr);
+               writel(DEC_VP9_STATIC_BUFFER_SIZE,
+                               mfc_regs->d_static_buffer_size);
+               buf_addr1 += DEC_VP9_STATIC_BUFFER_SIZE;
+               buf_size1 -= DEC_VP9_STATIC_BUFFER_SIZE;
+       }
 
        mfc_debug(2, "Buf1: %zx, buf_size1: %d (frames %d)\n",
                        buf_addr1, buf_size1, ctx->total_dpb_count);
        R(e_h264_options, S5P_FIMV_E_H264_OPTIONS_V8);
        R(e_min_scratch_buffer_size, S5P_FIMV_E_MIN_SCRATCH_BUFFER_SIZE_V8);
 
+       if (!IS_MFCV10(dev))
+               goto done;
+
+       /* Initialize registers used in MFC v10 only.
+        * Also, over-write the registers which have
+        * a different offset for MFC v10.
+        */
+
+       /* decoder registers */
+       R(d_static_buffer_addr, S5P_FIMV_D_STATIC_BUFFER_ADDR_V10);
+       R(d_static_buffer_size, S5P_FIMV_D_STATIC_BUFFER_SIZE_V10);
+
 done:
        return &mfc_regs;
 #undef S5P_MFC_REG_ADDR