Merge tag 'gvt-fixes-2017-05-11' of https://github.com/01org/gvt-linux into drm-intel...
[sfrench/cifs-2.6.git] / drivers / gpu / drm / i915 / gvt / handlers.c
index 31624f1df893bf1c37766125081efc5f7af31e5b..c995e540ff96e1f8a18a9232de2b26794fa03aa2 100644 (file)
@@ -68,6 +68,8 @@ unsigned long intel_gvt_get_device_type(struct intel_gvt *gvt)
                return D_BDW;
        else if (IS_SKYLAKE(gvt->dev_priv))
                return D_SKL;
+       else if (IS_KABYLAKE(gvt->dev_priv))
+               return D_KBL;
 
        return 0;
 }
@@ -234,7 +236,8 @@ static int mul_force_wake_write(struct intel_vgpu *vgpu,
        old = vgpu_vreg(vgpu, offset);
        new = CALC_MODE_MASK_REG(old, *(u32 *)p_data);
 
-       if (IS_SKYLAKE(vgpu->gvt->dev_priv)) {
+       if (IS_SKYLAKE(vgpu->gvt->dev_priv)
+               || IS_KABYLAKE(vgpu->gvt->dev_priv)) {
                switch (offset) {
                case FORCEWAKE_RENDER_GEN9_REG:
                        ack_reg_offset = FORCEWAKE_ACK_RENDER_GEN9_REG;
@@ -823,8 +826,9 @@ static int dp_aux_ch_ctl_mmio_write(struct intel_vgpu *vgpu,
        write_vreg(vgpu, offset, p_data, bytes);
        data = vgpu_vreg(vgpu, offset);
 
-       if (IS_SKYLAKE(vgpu->gvt->dev_priv) &&
-           offset != _REG_SKL_DP_AUX_CH_CTL(port_index)) {
+       if ((IS_SKYLAKE(vgpu->gvt->dev_priv)
+               || IS_KABYLAKE(vgpu->gvt->dev_priv))
+               && offset != _REG_SKL_DP_AUX_CH_CTL(port_index)) {
                /* SKL DPB/C/D aux ctl register changed */
                return 0;
        } else if (IS_BROADWELL(vgpu->gvt->dev_priv) &&
@@ -1311,7 +1315,8 @@ static int mailbox_write(struct intel_vgpu *vgpu, unsigned int offset,
 
        switch (cmd) {
        case GEN9_PCODE_READ_MEM_LATENCY:
-               if (IS_SKYLAKE(vgpu->gvt->dev_priv)) {
+               if (IS_SKYLAKE(vgpu->gvt->dev_priv)
+                        || IS_KABYLAKE(vgpu->gvt->dev_priv)) {
                        /**
                         * "Read memory latency" command on gen9.
                         * Below memory latency values are read
@@ -1324,7 +1329,8 @@ static int mailbox_write(struct intel_vgpu *vgpu, unsigned int offset,
                }
                break;
        case SKL_PCODE_CDCLK_CONTROL:
-               if (IS_SKYLAKE(vgpu->gvt->dev_priv))
+               if (IS_SKYLAKE(vgpu->gvt->dev_priv)
+                        || IS_KABYLAKE(vgpu->gvt->dev_priv))
                        *data0 = SKL_CDCLK_READY_FOR_CHANGE;
                break;
        case GEN6_PCODE_READ_RC6VIDS:
@@ -1418,6 +1424,7 @@ static int elsp_mmio_write(struct intel_vgpu *vgpu, unsigned int offset,
 
        execlist->elsp_dwords.data[execlist->elsp_dwords.index] = data;
        if (execlist->elsp_dwords.index == 3) {
+               vgpu->last_ctx_submit_time = ktime_get();
                ret = intel_vgpu_submit_execlist(vgpu, ring_id);
                if(ret)
                        gvt_vgpu_err("fail submit workload on ring %d\n",
@@ -2592,219 +2599,232 @@ static int init_skl_mmio_info(struct intel_gvt *gvt)
        MMIO_DH(FORCEWAKE_MEDIA_GEN9, D_SKL_PLUS, NULL, mul_force_wake_write);
        MMIO_DH(FORCEWAKE_ACK_MEDIA_GEN9, D_SKL_PLUS, NULL, NULL);
 
-       MMIO_F(_DPB_AUX_CH_CTL, 6 * 4, 0, 0, 0, D_SKL, NULL, dp_aux_ch_ctl_mmio_write);
-       MMIO_F(_DPC_AUX_CH_CTL, 6 * 4, 0, 0, 0, D_SKL, NULL, dp_aux_ch_ctl_mmio_write);
-       MMIO_F(_DPD_AUX_CH_CTL, 6 * 4, 0, 0, 0, D_SKL, NULL, dp_aux_ch_ctl_mmio_write);
+       MMIO_F(_DPB_AUX_CH_CTL, 6 * 4, 0, 0, 0, D_SKL_PLUS, NULL,
+                                               dp_aux_ch_ctl_mmio_write);
+       MMIO_F(_DPC_AUX_CH_CTL, 6 * 4, 0, 0, 0, D_SKL_PLUS, NULL,
+                                               dp_aux_ch_ctl_mmio_write);
+       MMIO_F(_DPD_AUX_CH_CTL, 6 * 4, 0, 0, 0, D_SKL_PLUS, NULL,
+                                               dp_aux_ch_ctl_mmio_write);
 
-       MMIO_D(HSW_PWR_WELL_BIOS, D_SKL);
-       MMIO_DH(HSW_PWR_WELL_DRIVER, D_SKL, NULL, skl_power_well_ctl_write);
+       MMIO_D(HSW_PWR_WELL_BIOS, D_SKL_PLUS);
+       MMIO_DH(HSW_PWR_WELL_DRIVER, D_SKL_PLUS, NULL,
+                                               skl_power_well_ctl_write);
+       MMIO_DH(GEN6_PCODE_MAILBOX, D_SKL_PLUS, NULL, mailbox_write);
 
        MMIO_D(0xa210, D_SKL_PLUS);
        MMIO_D(GEN9_MEDIA_PG_IDLE_HYSTERESIS, D_SKL_PLUS);
        MMIO_D(GEN9_RENDER_PG_IDLE_HYSTERESIS, D_SKL_PLUS);
        MMIO_DFH(GEN9_GAMT_ECO_REG_RW_IA, D_SKL_PLUS, F_CMD_ACCESS, NULL, NULL);
-       MMIO_DH(0x4ddc, D_SKL, NULL, skl_misc_ctl_write);
-       MMIO_DH(0x42080, D_SKL, NULL, skl_misc_ctl_write);
-       MMIO_D(0x45504, D_SKL);
-       MMIO_D(0x45520, D_SKL);
-       MMIO_D(0x46000, D_SKL);
-       MMIO_DH(0x46010, D_SKL, NULL, skl_lcpll_write);
-       MMIO_DH(0x46014, D_SKL, NULL, skl_lcpll_write);
-       MMIO_D(0x6C040, D_SKL);
-       MMIO_D(0x6C048, D_SKL);
-       MMIO_D(0x6C050, D_SKL);
-       MMIO_D(0x6C044, D_SKL);
-       MMIO_D(0x6C04C, D_SKL);
-       MMIO_D(0x6C054, D_SKL);
-       MMIO_D(0x6c058, D_SKL);
-       MMIO_D(0x6c05c, D_SKL);
-       MMIO_DH(0X6c060, D_SKL, dpll_status_read, NULL);
-
-       MMIO_DH(SKL_PS_WIN_POS(PIPE_A, 0), D_SKL, NULL, pf_write);
-       MMIO_DH(SKL_PS_WIN_POS(PIPE_A, 1), D_SKL, NULL, pf_write);
-       MMIO_DH(SKL_PS_WIN_POS(PIPE_B, 0), D_SKL, NULL, pf_write);
-       MMIO_DH(SKL_PS_WIN_POS(PIPE_B, 1), D_SKL, NULL, pf_write);
-       MMIO_DH(SKL_PS_WIN_POS(PIPE_C, 0), D_SKL, NULL, pf_write);
-       MMIO_DH(SKL_PS_WIN_POS(PIPE_C, 1), D_SKL, NULL, pf_write);
-
-       MMIO_DH(SKL_PS_WIN_SZ(PIPE_A, 0), D_SKL, NULL, pf_write);
-       MMIO_DH(SKL_PS_WIN_SZ(PIPE_A, 1), D_SKL, NULL, pf_write);
-       MMIO_DH(SKL_PS_WIN_SZ(PIPE_B, 0), D_SKL, NULL, pf_write);
-       MMIO_DH(SKL_PS_WIN_SZ(PIPE_B, 1), D_SKL, NULL, pf_write);
-       MMIO_DH(SKL_PS_WIN_SZ(PIPE_C, 0), D_SKL, NULL, pf_write);
-       MMIO_DH(SKL_PS_WIN_SZ(PIPE_C, 1), D_SKL, NULL, pf_write);
-
-       MMIO_DH(SKL_PS_CTRL(PIPE_A, 0), D_SKL, NULL, pf_write);
-       MMIO_DH(SKL_PS_CTRL(PIPE_A, 1), D_SKL, NULL, pf_write);
-       MMIO_DH(SKL_PS_CTRL(PIPE_B, 0), D_SKL, NULL, pf_write);
-       MMIO_DH(SKL_PS_CTRL(PIPE_B, 1), D_SKL, NULL, pf_write);
-       MMIO_DH(SKL_PS_CTRL(PIPE_C, 0), D_SKL, NULL, pf_write);
-       MMIO_DH(SKL_PS_CTRL(PIPE_C, 1), D_SKL, NULL, pf_write);
-
-       MMIO_DH(PLANE_BUF_CFG(PIPE_A, 0), D_SKL, NULL, NULL);
-       MMIO_DH(PLANE_BUF_CFG(PIPE_A, 1), D_SKL, NULL, NULL);
-       MMIO_DH(PLANE_BUF_CFG(PIPE_A, 2), D_SKL, NULL, NULL);
-       MMIO_DH(PLANE_BUF_CFG(PIPE_A, 3), D_SKL, NULL, NULL);
-
-       MMIO_DH(PLANE_BUF_CFG(PIPE_B, 0), D_SKL, NULL, NULL);
-       MMIO_DH(PLANE_BUF_CFG(PIPE_B, 1), D_SKL, NULL, NULL);
-       MMIO_DH(PLANE_BUF_CFG(PIPE_B, 2), D_SKL, NULL, NULL);
-       MMIO_DH(PLANE_BUF_CFG(PIPE_B, 3), D_SKL, NULL, NULL);
-
-       MMIO_DH(PLANE_BUF_CFG(PIPE_C, 0), D_SKL, NULL, NULL);
-       MMIO_DH(PLANE_BUF_CFG(PIPE_C, 1), D_SKL, NULL, NULL);
-       MMIO_DH(PLANE_BUF_CFG(PIPE_C, 2), D_SKL, NULL, NULL);
-       MMIO_DH(PLANE_BUF_CFG(PIPE_C, 3), D_SKL, NULL, NULL);
-
-       MMIO_DH(CUR_BUF_CFG(PIPE_A), D_SKL, NULL, NULL);
-       MMIO_DH(CUR_BUF_CFG(PIPE_B), D_SKL, NULL, NULL);
-       MMIO_DH(CUR_BUF_CFG(PIPE_C), D_SKL, NULL, NULL);
-
-       MMIO_F(PLANE_WM(PIPE_A, 0, 0), 4 * 8, 0, 0, 0, D_SKL, NULL, NULL);
-       MMIO_F(PLANE_WM(PIPE_A, 1, 0), 4 * 8, 0, 0, 0, D_SKL, NULL, NULL);
-       MMIO_F(PLANE_WM(PIPE_A, 2, 0), 4 * 8, 0, 0, 0, D_SKL, NULL, NULL);
-
-       MMIO_F(PLANE_WM(PIPE_B, 0, 0), 4 * 8, 0, 0, 0, D_SKL, NULL, NULL);
-       MMIO_F(PLANE_WM(PIPE_B, 1, 0), 4 * 8, 0, 0, 0, D_SKL, NULL, NULL);
-       MMIO_F(PLANE_WM(PIPE_B, 2, 0), 4 * 8, 0, 0, 0, D_SKL, NULL, NULL);
-
-       MMIO_F(PLANE_WM(PIPE_C, 0, 0), 4 * 8, 0, 0, 0, D_SKL, NULL, NULL);
-       MMIO_F(PLANE_WM(PIPE_C, 1, 0), 4 * 8, 0, 0, 0, D_SKL, NULL, NULL);
-       MMIO_F(PLANE_WM(PIPE_C, 2, 0), 4 * 8, 0, 0, 0, D_SKL, NULL, NULL);
-
-       MMIO_F(CUR_WM(PIPE_A, 0), 4 * 8, 0, 0, 0, D_SKL, NULL, NULL);
-       MMIO_F(CUR_WM(PIPE_B, 0), 4 * 8, 0, 0, 0, D_SKL, NULL, NULL);
-       MMIO_F(CUR_WM(PIPE_C, 0), 4 * 8, 0, 0, 0, D_SKL, NULL, NULL);
-
-       MMIO_DH(PLANE_WM_TRANS(PIPE_A, 0), D_SKL, NULL, NULL);
-       MMIO_DH(PLANE_WM_TRANS(PIPE_A, 1), D_SKL, NULL, NULL);
-       MMIO_DH(PLANE_WM_TRANS(PIPE_A, 2), D_SKL, NULL, NULL);
-
-       MMIO_DH(PLANE_WM_TRANS(PIPE_B, 0), D_SKL, NULL, NULL);
-       MMIO_DH(PLANE_WM_TRANS(PIPE_B, 1), D_SKL, NULL, NULL);
-       MMIO_DH(PLANE_WM_TRANS(PIPE_B, 2), D_SKL, NULL, NULL);
-
-       MMIO_DH(PLANE_WM_TRANS(PIPE_C, 0), D_SKL, NULL, NULL);
-       MMIO_DH(PLANE_WM_TRANS(PIPE_C, 1), D_SKL, NULL, NULL);
-       MMIO_DH(PLANE_WM_TRANS(PIPE_C, 2), D_SKL, NULL, NULL);
-
-       MMIO_DH(CUR_WM_TRANS(PIPE_A), D_SKL, NULL, NULL);
-       MMIO_DH(CUR_WM_TRANS(PIPE_B), D_SKL, NULL, NULL);
-       MMIO_DH(CUR_WM_TRANS(PIPE_C), D_SKL, NULL, NULL);
-
-       MMIO_DH(PLANE_NV12_BUF_CFG(PIPE_A, 0), D_SKL, NULL, NULL);
-       MMIO_DH(PLANE_NV12_BUF_CFG(PIPE_A, 1), D_SKL, NULL, NULL);
-       MMIO_DH(PLANE_NV12_BUF_CFG(PIPE_A, 2), D_SKL, NULL, NULL);
-       MMIO_DH(PLANE_NV12_BUF_CFG(PIPE_A, 3), D_SKL, NULL, NULL);
-
-       MMIO_DH(PLANE_NV12_BUF_CFG(PIPE_B, 0), D_SKL, NULL, NULL);
-       MMIO_DH(PLANE_NV12_BUF_CFG(PIPE_B, 1), D_SKL, NULL, NULL);
-       MMIO_DH(PLANE_NV12_BUF_CFG(PIPE_B, 2), D_SKL, NULL, NULL);
-       MMIO_DH(PLANE_NV12_BUF_CFG(PIPE_B, 3), D_SKL, NULL, NULL);
-
-       MMIO_DH(PLANE_NV12_BUF_CFG(PIPE_C, 0), D_SKL, NULL, NULL);
-       MMIO_DH(PLANE_NV12_BUF_CFG(PIPE_C, 1), D_SKL, NULL, NULL);
-       MMIO_DH(PLANE_NV12_BUF_CFG(PIPE_C, 2), D_SKL, NULL, NULL);
-       MMIO_DH(PLANE_NV12_BUF_CFG(PIPE_C, 3), D_SKL, NULL, NULL);
-
-       MMIO_DH(_REG_701C0(PIPE_A, 1), D_SKL, NULL, NULL);
-       MMIO_DH(_REG_701C0(PIPE_A, 2), D_SKL, NULL, NULL);
-       MMIO_DH(_REG_701C0(PIPE_A, 3), D_SKL, NULL, NULL);
-       MMIO_DH(_REG_701C0(PIPE_A, 4), D_SKL, NULL, NULL);
-
-       MMIO_DH(_REG_701C0(PIPE_B, 1), D_SKL, NULL, NULL);
-       MMIO_DH(_REG_701C0(PIPE_B, 2), D_SKL, NULL, NULL);
-       MMIO_DH(_REG_701C0(PIPE_B, 3), D_SKL, NULL, NULL);
-       MMIO_DH(_REG_701C0(PIPE_B, 4), D_SKL, NULL, NULL);
-
-       MMIO_DH(_REG_701C0(PIPE_C, 1), D_SKL, NULL, NULL);
-       MMIO_DH(_REG_701C0(PIPE_C, 2), D_SKL, NULL, NULL);
-       MMIO_DH(_REG_701C0(PIPE_C, 3), D_SKL, NULL, NULL);
-       MMIO_DH(_REG_701C0(PIPE_C, 4), D_SKL, NULL, NULL);
-
-       MMIO_DH(_REG_701C4(PIPE_A, 1), D_SKL, NULL, NULL);
-       MMIO_DH(_REG_701C4(PIPE_A, 2), D_SKL, NULL, NULL);
-       MMIO_DH(_REG_701C4(PIPE_A, 3), D_SKL, NULL, NULL);
-       MMIO_DH(_REG_701C4(PIPE_A, 4), D_SKL, NULL, NULL);
-
-       MMIO_DH(_REG_701C4(PIPE_B, 1), D_SKL, NULL, NULL);
-       MMIO_DH(_REG_701C4(PIPE_B, 2), D_SKL, NULL, NULL);
-       MMIO_DH(_REG_701C4(PIPE_B, 3), D_SKL, NULL, NULL);
-       MMIO_DH(_REG_701C4(PIPE_B, 4), D_SKL, NULL, NULL);
-
-       MMIO_DH(_REG_701C4(PIPE_C, 1), D_SKL, NULL, NULL);
-       MMIO_DH(_REG_701C4(PIPE_C, 2), D_SKL, NULL, NULL);
-       MMIO_DH(_REG_701C4(PIPE_C, 3), D_SKL, NULL, NULL);
-       MMIO_DH(_REG_701C4(PIPE_C, 4), D_SKL, NULL, NULL);
-
-       MMIO_D(0x70380, D_SKL);
-       MMIO_D(0x71380, D_SKL);
-       MMIO_D(0x72380, D_SKL);
-       MMIO_D(0x7039c, D_SKL);
-
-       MMIO_F(0x80000, 0x3000, 0, 0, 0, D_SKL, NULL, NULL);
-       MMIO_D(0x8f074, D_SKL);
-       MMIO_D(0x8f004, D_SKL);
-       MMIO_D(0x8f034, D_SKL);
-
-       MMIO_D(0xb11c, D_SKL);
-
-       MMIO_D(0x51000, D_SKL);
-       MMIO_D(0x6c00c, D_SKL);
-
-       MMIO_F(0xc800, 0x7f8, F_CMD_ACCESS, 0, 0, D_SKL, NULL, NULL);
-       MMIO_F(0xb020, 0x80, F_CMD_ACCESS, 0, 0, D_SKL, NULL, NULL);
-
-       MMIO_D(0xd08, D_SKL);
-       MMIO_DFH(0x20e0, D_SKL, F_MODE_MASK, NULL, NULL);
-       MMIO_DFH(0x20ec, D_SKL, F_MODE_MASK | F_CMD_ACCESS, NULL, NULL);
+       MMIO_DH(0x4ddc, D_SKL_PLUS, NULL, skl_misc_ctl_write);
+       MMIO_DH(0x42080, D_SKL_PLUS, NULL, skl_misc_ctl_write);
+       MMIO_D(0x45504, D_SKL_PLUS);
+       MMIO_D(0x45520, D_SKL_PLUS);
+       MMIO_D(0x46000, D_SKL_PLUS);
+       MMIO_DH(0x46010, D_SKL | D_KBL, NULL, skl_lcpll_write);
+       MMIO_DH(0x46014, D_SKL | D_KBL, NULL, skl_lcpll_write);
+       MMIO_D(0x6C040, D_SKL | D_KBL);
+       MMIO_D(0x6C048, D_SKL | D_KBL);
+       MMIO_D(0x6C050, D_SKL | D_KBL);
+       MMIO_D(0x6C044, D_SKL | D_KBL);
+       MMIO_D(0x6C04C, D_SKL | D_KBL);
+       MMIO_D(0x6C054, D_SKL | D_KBL);
+       MMIO_D(0x6c058, D_SKL | D_KBL);
+       MMIO_D(0x6c05c, D_SKL | D_KBL);
+       MMIO_DH(0X6c060, D_SKL | D_KBL, dpll_status_read, NULL);
+
+       MMIO_DH(SKL_PS_WIN_POS(PIPE_A, 0), D_SKL_PLUS, NULL, pf_write);
+       MMIO_DH(SKL_PS_WIN_POS(PIPE_A, 1), D_SKL_PLUS, NULL, pf_write);
+       MMIO_DH(SKL_PS_WIN_POS(PIPE_B, 0), D_SKL_PLUS, NULL, pf_write);
+       MMIO_DH(SKL_PS_WIN_POS(PIPE_B, 1), D_SKL_PLUS, NULL, pf_write);
+       MMIO_DH(SKL_PS_WIN_POS(PIPE_C, 0), D_SKL_PLUS, NULL, pf_write);
+       MMIO_DH(SKL_PS_WIN_POS(PIPE_C, 1), D_SKL_PLUS, NULL, pf_write);
+
+       MMIO_DH(SKL_PS_WIN_SZ(PIPE_A, 0), D_SKL_PLUS, NULL, pf_write);
+       MMIO_DH(SKL_PS_WIN_SZ(PIPE_A, 1), D_SKL_PLUS, NULL, pf_write);
+       MMIO_DH(SKL_PS_WIN_SZ(PIPE_B, 0), D_SKL_PLUS, NULL, pf_write);
+       MMIO_DH(SKL_PS_WIN_SZ(PIPE_B, 1), D_SKL_PLUS, NULL, pf_write);
+       MMIO_DH(SKL_PS_WIN_SZ(PIPE_C, 0), D_SKL_PLUS, NULL, pf_write);
+       MMIO_DH(SKL_PS_WIN_SZ(PIPE_C, 1), D_SKL_PLUS, NULL, pf_write);
+
+       MMIO_DH(SKL_PS_CTRL(PIPE_A, 0), D_SKL_PLUS, NULL, pf_write);
+       MMIO_DH(SKL_PS_CTRL(PIPE_A, 1), D_SKL_PLUS, NULL, pf_write);
+       MMIO_DH(SKL_PS_CTRL(PIPE_B, 0), D_SKL_PLUS, NULL, pf_write);
+       MMIO_DH(SKL_PS_CTRL(PIPE_B, 1), D_SKL_PLUS, NULL, pf_write);
+       MMIO_DH(SKL_PS_CTRL(PIPE_C, 0), D_SKL_PLUS, NULL, pf_write);
+       MMIO_DH(SKL_PS_CTRL(PIPE_C, 1), D_SKL_PLUS, NULL, pf_write);
+
+       MMIO_DH(PLANE_BUF_CFG(PIPE_A, 0), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(PLANE_BUF_CFG(PIPE_A, 1), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(PLANE_BUF_CFG(PIPE_A, 2), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(PLANE_BUF_CFG(PIPE_A, 3), D_SKL_PLUS, NULL, NULL);
+
+       MMIO_DH(PLANE_BUF_CFG(PIPE_B, 0), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(PLANE_BUF_CFG(PIPE_B, 1), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(PLANE_BUF_CFG(PIPE_B, 2), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(PLANE_BUF_CFG(PIPE_B, 3), D_SKL_PLUS, NULL, NULL);
+
+       MMIO_DH(PLANE_BUF_CFG(PIPE_C, 0), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(PLANE_BUF_CFG(PIPE_C, 1), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(PLANE_BUF_CFG(PIPE_C, 2), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(PLANE_BUF_CFG(PIPE_C, 3), D_SKL_PLUS, NULL, NULL);
+
+       MMIO_DH(CUR_BUF_CFG(PIPE_A), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(CUR_BUF_CFG(PIPE_B), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(CUR_BUF_CFG(PIPE_C), D_SKL_PLUS, NULL, NULL);
+
+       MMIO_F(PLANE_WM(PIPE_A, 0, 0), 4 * 8, 0, 0, 0, D_SKL_PLUS, NULL, NULL);
+       MMIO_F(PLANE_WM(PIPE_A, 1, 0), 4 * 8, 0, 0, 0, D_SKL_PLUS, NULL, NULL);
+       MMIO_F(PLANE_WM(PIPE_A, 2, 0), 4 * 8, 0, 0, 0, D_SKL_PLUS, NULL, NULL);
+
+       MMIO_F(PLANE_WM(PIPE_B, 0, 0), 4 * 8, 0, 0, 0, D_SKL_PLUS, NULL, NULL);
+       MMIO_F(PLANE_WM(PIPE_B, 1, 0), 4 * 8, 0, 0, 0, D_SKL_PLUS, NULL, NULL);
+       MMIO_F(PLANE_WM(PIPE_B, 2, 0), 4 * 8, 0, 0, 0, D_SKL_PLUS, NULL, NULL);
+
+       MMIO_F(PLANE_WM(PIPE_C, 0, 0), 4 * 8, 0, 0, 0, D_SKL_PLUS, NULL, NULL);
+       MMIO_F(PLANE_WM(PIPE_C, 1, 0), 4 * 8, 0, 0, 0, D_SKL_PLUS, NULL, NULL);
+       MMIO_F(PLANE_WM(PIPE_C, 2, 0), 4 * 8, 0, 0, 0, D_SKL_PLUS, NULL, NULL);
+
+       MMIO_F(CUR_WM(PIPE_A, 0), 4 * 8, 0, 0, 0, D_SKL_PLUS, NULL, NULL);
+       MMIO_F(CUR_WM(PIPE_B, 0), 4 * 8, 0, 0, 0, D_SKL_PLUS, NULL, NULL);
+       MMIO_F(CUR_WM(PIPE_C, 0), 4 * 8, 0, 0, 0, D_SKL_PLUS, NULL, NULL);
+
+       MMIO_DH(PLANE_WM_TRANS(PIPE_A, 0), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(PLANE_WM_TRANS(PIPE_A, 1), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(PLANE_WM_TRANS(PIPE_A, 2), D_SKL_PLUS, NULL, NULL);
+
+       MMIO_DH(PLANE_WM_TRANS(PIPE_B, 0), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(PLANE_WM_TRANS(PIPE_B, 1), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(PLANE_WM_TRANS(PIPE_B, 2), D_SKL_PLUS, NULL, NULL);
+
+       MMIO_DH(PLANE_WM_TRANS(PIPE_C, 0), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(PLANE_WM_TRANS(PIPE_C, 1), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(PLANE_WM_TRANS(PIPE_C, 2), D_SKL_PLUS, NULL, NULL);
+
+       MMIO_DH(CUR_WM_TRANS(PIPE_A), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(CUR_WM_TRANS(PIPE_B), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(CUR_WM_TRANS(PIPE_C), D_SKL_PLUS, NULL, NULL);
+
+       MMIO_DH(PLANE_NV12_BUF_CFG(PIPE_A, 0), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(PLANE_NV12_BUF_CFG(PIPE_A, 1), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(PLANE_NV12_BUF_CFG(PIPE_A, 2), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(PLANE_NV12_BUF_CFG(PIPE_A, 3), D_SKL_PLUS, NULL, NULL);
+
+       MMIO_DH(PLANE_NV12_BUF_CFG(PIPE_B, 0), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(PLANE_NV12_BUF_CFG(PIPE_B, 1), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(PLANE_NV12_BUF_CFG(PIPE_B, 2), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(PLANE_NV12_BUF_CFG(PIPE_B, 3), D_SKL_PLUS, NULL, NULL);
+
+       MMIO_DH(PLANE_NV12_BUF_CFG(PIPE_C, 0), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(PLANE_NV12_BUF_CFG(PIPE_C, 1), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(PLANE_NV12_BUF_CFG(PIPE_C, 2), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(PLANE_NV12_BUF_CFG(PIPE_C, 3), D_SKL_PLUS, NULL, NULL);
+
+       MMIO_DH(_REG_701C0(PIPE_A, 1), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(_REG_701C0(PIPE_A, 2), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(_REG_701C0(PIPE_A, 3), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(_REG_701C0(PIPE_A, 4), D_SKL_PLUS, NULL, NULL);
+
+       MMIO_DH(_REG_701C0(PIPE_B, 1), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(_REG_701C0(PIPE_B, 2), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(_REG_701C0(PIPE_B, 3), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(_REG_701C0(PIPE_B, 4), D_SKL_PLUS, NULL, NULL);
+
+       MMIO_DH(_REG_701C0(PIPE_C, 1), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(_REG_701C0(PIPE_C, 2), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(_REG_701C0(PIPE_C, 3), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(_REG_701C0(PIPE_C, 4), D_SKL_PLUS, NULL, NULL);
+
+       MMIO_DH(_REG_701C4(PIPE_A, 1), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(_REG_701C4(PIPE_A, 2), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(_REG_701C4(PIPE_A, 3), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(_REG_701C4(PIPE_A, 4), D_SKL_PLUS, NULL, NULL);
+
+       MMIO_DH(_REG_701C4(PIPE_B, 1), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(_REG_701C4(PIPE_B, 2), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(_REG_701C4(PIPE_B, 3), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(_REG_701C4(PIPE_B, 4), D_SKL_PLUS, NULL, NULL);
+
+       MMIO_DH(_REG_701C4(PIPE_C, 1), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(_REG_701C4(PIPE_C, 2), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(_REG_701C4(PIPE_C, 3), D_SKL_PLUS, NULL, NULL);
+       MMIO_DH(_REG_701C4(PIPE_C, 4), D_SKL_PLUS, NULL, NULL);
+
+       MMIO_D(0x70380, D_SKL_PLUS);
+       MMIO_D(0x71380, D_SKL_PLUS);
+       MMIO_D(0x72380, D_SKL_PLUS);
+       MMIO_D(0x7039c, D_SKL_PLUS);
+
+       MMIO_F(0x80000, 0x3000, 0, 0, 0, D_SKL_PLUS, NULL, NULL);
+       MMIO_D(0x8f074, D_SKL | D_KBL);
+       MMIO_D(0x8f004, D_SKL | D_KBL);
+       MMIO_D(0x8f034, D_SKL | D_KBL);
+
+       MMIO_D(0xb11c, D_SKL | D_KBL);
+
+       MMIO_D(0x51000, D_SKL | D_KBL);
+       MMIO_D(0x6c00c, D_SKL_PLUS);
+
+       MMIO_F(0xc800, 0x7f8, F_CMD_ACCESS, 0, 0, D_SKL | D_KBL, NULL, NULL);
+       MMIO_F(0xb020, 0x80, F_CMD_ACCESS, 0, 0, D_SKL | D_KBL, NULL, NULL);
+
+       MMIO_D(0xd08, D_SKL_PLUS);
+       MMIO_DFH(0x20e0, D_SKL_PLUS, F_MODE_MASK, NULL, NULL);
+       MMIO_DFH(0x20ec, D_SKL_PLUS, F_MODE_MASK | F_CMD_ACCESS, NULL, NULL);
 
        /* TRTT */
-       MMIO_DFH(0x4de0, D_SKL, F_CMD_ACCESS, NULL, NULL);
-       MMIO_DFH(0x4de4, D_SKL, F_CMD_ACCESS, NULL, NULL);
-       MMIO_DFH(0x4de8, D_SKL, F_CMD_ACCESS, NULL, NULL);
-       MMIO_DFH(0x4dec, D_SKL, F_CMD_ACCESS, NULL, NULL);
-       MMIO_DFH(0x4df0, D_SKL, F_CMD_ACCESS, NULL, NULL);
-       MMIO_DFH(0x4df4, D_SKL, F_CMD_ACCESS, NULL, gen9_trtte_write);
-       MMIO_DH(0x4dfc, D_SKL, NULL, gen9_trtt_chicken_write);
+       MMIO_DFH(0x4de0, D_SKL | D_KBL, F_CMD_ACCESS, NULL, NULL);
+       MMIO_DFH(0x4de4, D_SKL | D_KBL, F_CMD_ACCESS, NULL, NULL);
+       MMIO_DFH(0x4de8, D_SKL | D_KBL, F_CMD_ACCESS, NULL, NULL);
+       MMIO_DFH(0x4dec, D_SKL | D_KBL, F_CMD_ACCESS, NULL, NULL);
+       MMIO_DFH(0x4df0, D_SKL | D_KBL, F_CMD_ACCESS, NULL, NULL);
+       MMIO_DFH(0x4df4, D_SKL | D_KBL, F_CMD_ACCESS, NULL, gen9_trtte_write);
+       MMIO_DH(0x4dfc, D_SKL | D_KBL, NULL, gen9_trtt_chicken_write);
 
-       MMIO_D(0x45008, D_SKL);
+       MMIO_D(0x45008, D_SKL | D_KBL);
 
-       MMIO_D(0x46430, D_SKL);
+       MMIO_D(0x46430, D_SKL | D_KBL);
 
-       MMIO_D(0x46520, D_SKL);
+       MMIO_D(0x46520, D_SKL | D_KBL);
 
-       MMIO_D(0xc403c, D_SKL);
-       MMIO_D(0xb004, D_SKL);
+       MMIO_D(0xc403c, D_SKL | D_KBL);
+       MMIO_D(0xb004, D_SKL_PLUS);
        MMIO_DH(DMA_CTRL, D_SKL_PLUS, NULL, dma_ctrl_write);
 
-       MMIO_D(0x65900, D_SKL);
-       MMIO_D(0x1082c0, D_SKL);
-       MMIO_D(0x4068, D_SKL);
-       MMIO_D(0x67054, D_SKL);
-       MMIO_D(0x6e560, D_SKL);
-       MMIO_D(0x6e554, D_SKL);
-       MMIO_D(0x2b20, D_SKL);
-       MMIO_D(0x65f00, D_SKL);
-       MMIO_D(0x65f08, D_SKL);
-       MMIO_D(0x320f0, D_SKL);
-
-       MMIO_DFH(_REG_VCS2_EXCC, D_SKL, F_CMD_ACCESS, NULL, NULL);
-       MMIO_D(0x70034, D_SKL);
-       MMIO_D(0x71034, D_SKL);
-       MMIO_D(0x72034, D_SKL);
-
-       MMIO_D(_PLANE_KEYVAL_1(PIPE_A), D_SKL);
-       MMIO_D(_PLANE_KEYVAL_1(PIPE_B), D_SKL);
-       MMIO_D(_PLANE_KEYVAL_1(PIPE_C), D_SKL);
-       MMIO_D(_PLANE_KEYMSK_1(PIPE_A), D_SKL);
-       MMIO_D(_PLANE_KEYMSK_1(PIPE_B), D_SKL);
-       MMIO_D(_PLANE_KEYMSK_1(PIPE_C), D_SKL);
-
-       MMIO_D(0x44500, D_SKL);
+       MMIO_D(0x65900, D_SKL_PLUS);
+       MMIO_D(0x1082c0, D_SKL | D_KBL);
+       MMIO_D(0x4068, D_SKL | D_KBL);
+       MMIO_D(0x67054, D_SKL | D_KBL);
+       MMIO_D(0x6e560, D_SKL | D_KBL);
+       MMIO_D(0x6e554, D_SKL | D_KBL);
+       MMIO_D(0x2b20, D_SKL | D_KBL);
+       MMIO_D(0x65f00, D_SKL | D_KBL);
+       MMIO_D(0x65f08, D_SKL | D_KBL);
+       MMIO_D(0x320f0, D_SKL | D_KBL);
+
+       MMIO_DFH(_REG_VCS2_EXCC, D_SKL_PLUS, F_CMD_ACCESS, NULL, NULL);
+       MMIO_DFH(_REG_VECS_EXCC, D_SKL_PLUS, F_CMD_ACCESS, NULL, NULL);
+       MMIO_D(0x70034, D_SKL_PLUS);
+       MMIO_D(0x71034, D_SKL_PLUS);
+       MMIO_D(0x72034, D_SKL_PLUS);
+
+       MMIO_D(_PLANE_KEYVAL_1(PIPE_A), D_SKL_PLUS);
+       MMIO_D(_PLANE_KEYVAL_1(PIPE_B), D_SKL_PLUS);
+       MMIO_D(_PLANE_KEYVAL_1(PIPE_C), D_SKL_PLUS);
+       MMIO_D(_PLANE_KEYMSK_1(PIPE_A), D_SKL_PLUS);
+       MMIO_D(_PLANE_KEYMSK_1(PIPE_B), D_SKL_PLUS);
+       MMIO_D(_PLANE_KEYMSK_1(PIPE_C), D_SKL_PLUS);
+
+       MMIO_D(0x44500, D_SKL_PLUS);
        MMIO_DFH(GEN9_CSFE_CHICKEN1_RCS, D_SKL_PLUS, F_CMD_ACCESS, NULL, NULL);
-       MMIO_DFH(GEN8_HDC_CHICKEN1, D_SKL, F_MODE_MASK | F_CMD_ACCESS,
+       MMIO_DFH(GEN8_HDC_CHICKEN1, D_SKL | D_KBL, F_MODE_MASK | F_CMD_ACCESS,
                NULL, NULL);
+
+       MMIO_D(0x4ab8, D_KBL);
+       MMIO_D(0x940c, D_SKL_PLUS);
+       MMIO_D(0x2248, D_SKL_PLUS | D_KBL);
+       MMIO_D(0x4ab0, D_SKL | D_KBL);
+       MMIO_D(0x20d4, D_SKL | D_KBL);
+
        return 0;
 }
 
@@ -2881,7 +2901,8 @@ int intel_gvt_setup_mmio_info(struct intel_gvt *gvt)
                ret = init_broadwell_mmio_info(gvt);
                if (ret)
                        goto err;
-       } else if (IS_SKYLAKE(dev_priv)) {
+       } else if (IS_SKYLAKE(dev_priv)
+               || IS_KABYLAKE(dev_priv)) {
                ret = init_broadwell_mmio_info(gvt);
                if (ret)
                        goto err;