// SPDX-License-Identifier: MIT
/*
 * Copyright © 2020 Intel Corporation
 */

#include "display/bxt_dpio_phy_regs.h"
#include "display/i9xx_plane_regs.h"
#include "display/i9xx_wm_regs.h"
#include "display/intel_audio_regs.h"
#include "display/intel_backlight_regs.h"
#include "display/intel_color_regs.h"
#include "display/intel_crt_regs.h"
#include "display/intel_cursor_regs.h"
#include "display/intel_display_core.h"
#include "display/intel_display_types.h"
#include "display/intel_dmc_regs.h"
#include "display/intel_dp_aux_regs.h"
#include "display/intel_dpio_phy.h"
#include "display/intel_fbc_regs.h"
#include "display/intel_fdi_regs.h"
#include "display/intel_lvds_regs.h"
#include "display/intel_pfit_regs.h"
#include "display/intel_psr_regs.h"
#include "display/intel_sbi_regs.h"
#include "display/intel_sprite_regs.h"
#include "display/intel_vga_regs.h"
#include "display/skl_universal_plane_regs.h"
#include "display/skl_watermark_regs.h"
#include "display/vlv_dsi_pll_regs.h"
#include "gt/intel_engine_regs.h"
#include "gt/intel_gt_regs.h"
#include "gvt/reg.h"

#include "i915_drv.h"
#include "i915_pvinfo.h"
#include "i915_reg.h"
#include "display/intel_display_regs.h"
#include "intel_gvt.h"
#include "intel_mchbar_regs.h"

#define MMIO_F(reg, s) do { \
	int ret; \
	ret = iter->handle_mmio_cb(iter, i915_mmio_reg_offset(reg), s); \
	if (ret) \
		return ret; \
} while (0)

#define MMIO_D(reg) MMIO_F(reg, 4)

#define MMIO_RING_F(prefix, s) do { \
	MMIO_F(prefix(RENDER_RING_BASE), s); \
	MMIO_F(prefix(BLT_RING_BASE), s); \
	MMIO_F(prefix(GEN6_BSD_RING_BASE), s); \
	MMIO_F(prefix(VEBOX_RING_BASE), s); \
	if (HAS_ENGINE(to_gt(iter->i915), VCS1)) \
		MMIO_F(prefix(GEN8_BSD2_RING_BASE), s); \
} while (0)

#define MMIO_RING_D(prefix) \
	MMIO_RING_F(prefix, 4)

static int iterate_generic_mmio(struct intel_gvt_mmio_table_iter *iter)
{
	struct drm_i915_private *dev_priv = iter->i915;

	MMIO_RING_D(RING_IMR);
	MMIO_D(SDEIMR);
	MMIO_D(SDEIER);
	MMIO_D(SDEIIR);
	MMIO_D(SDEISR);
	MMIO_RING_D(RING_HWSTAM);
	MMIO_D(BSD_HWS_PGA_GEN7);
	MMIO_D(BLT_HWS_PGA_GEN7);
	MMIO_D(VEBOX_HWS_PGA_GEN7);

#define RING_REG(base) _MMIO((base) + 0x28)
	MMIO_RING_D(RING_REG);
#undef RING_REG

#define RING_REG(base) _MMIO((base) + 0x134)
	MMIO_RING_D(RING_REG);
#undef RING_REG

#define RING_REG(base) _MMIO((base) + 0x6c)
	MMIO_RING_D(RING_REG);
#undef RING_REG
	MMIO_D(_MMIO(0x2148));
	MMIO_D(CCID(RENDER_RING_BASE));
	MMIO_D(_MMIO(0x12198));
	MMIO_D(GEN7_CXT_SIZE);
	MMIO_RING_D(RING_TAIL);
	MMIO_RING_D(RING_HEAD);
	MMIO_RING_D(RING_CTL);
	MMIO_RING_D(RING_ACTHD);
	MMIO_RING_D(RING_START);

	/* RING MODE */
#define RING_REG(base) _MMIO((base) + 0x29c)
	MMIO_RING_D(RING_REG);
#undef RING_REG

	MMIO_RING_D(RING_MI_MODE);
	MMIO_RING_D(RING_INSTPM);
	MMIO_RING_D(RING_TIMESTAMP);
	MMIO_RING_D(RING_TIMESTAMP_UDW);
	MMIO_D(GEN7_GT_MODE);
	MMIO_D(CACHE_MODE_0_GEN7);
	MMIO_D(CACHE_MODE_1);
	MMIO_D(CACHE_MODE_0);
	MMIO_D(_MMIO(0x2124));
	MMIO_D(_MMIO(0x20dc));
	MMIO_D(_3D_CHICKEN3);
	MMIO_D(_MMIO(0x2088));
	MMIO_D(FF_SLICE_CS_CHICKEN2);
	MMIO_D(_MMIO(0x2470));
	MMIO_D(GAM_ECOCHK);
	MMIO_D(GEN7_COMMON_SLICE_CHICKEN1);
	MMIO_D(COMMON_SLICE_CHICKEN2);
	MMIO_D(_MMIO(0x9030));
	MMIO_D(_MMIO(0x20a0));
	MMIO_D(_MMIO(0x2420));
	MMIO_D(_MMIO(0x2430));
	MMIO_D(_MMIO(0x2434));
	MMIO_D(_MMIO(0x2438));
	MMIO_D(_MMIO(0x243c));
	MMIO_D(_MMIO(0x7018));
	MMIO_D(HSW_HALF_SLICE_CHICKEN3);
	MMIO_D(GEN7_HALF_SLICE_CHICKEN1);
	/* display */
	MMIO_F(_MMIO(0x60220), 0x20);
	MMIO_D(_MMIO(0x602a0));
	MMIO_D(_MMIO(0x65050));
	MMIO_D(_MMIO(0x650b4));
	MMIO_D(_MMIO(0xc4040));
	MMIO_D(DERRMR);
	MMIO_D(PIPEDSL(dev_priv, PIPE_A));
	MMIO_D(PIPEDSL(dev_priv, PIPE_B));
	MMIO_D(PIPEDSL(dev_priv, PIPE_C));
	MMIO_D(PIPEDSL(dev_priv, _PIPE_EDP));
	MMIO_D(TRANSCONF(dev_priv, TRANSCODER_A));
	MMIO_D(TRANSCONF(dev_priv, TRANSCODER_B));
	MMIO_D(TRANSCONF(dev_priv, TRANSCODER_C));
	MMIO_D(TRANSCONF(dev_priv, TRANSCODER_EDP));
	MMIO_D(PIPESTAT(dev_priv, PIPE_A));
	MMIO_D(PIPESTAT(dev_priv, PIPE_B));
	MMIO_D(PIPESTAT(dev_priv, PIPE_C));
	MMIO_D(PIPESTAT(dev_priv, _PIPE_EDP));
	MMIO_D(PIPE_FLIPCOUNT_G4X(dev_priv, PIPE_A));
	MMIO_D(PIPE_FLIPCOUNT_G4X(dev_priv, PIPE_B));
	MMIO_D(PIPE_FLIPCOUNT_G4X(dev_priv, PIPE_C));
	MMIO_D(PIPE_FLIPCOUNT_G4X(dev_priv, _PIPE_EDP));
	MMIO_D(PIPE_FRMCOUNT_G4X(dev_priv, PIPE_A));
	MMIO_D(PIPE_FRMCOUNT_G4X(dev_priv, PIPE_B));
	MMIO_D(PIPE_FRMCOUNT_G4X(dev_priv, PIPE_C));
	MMIO_D(PIPE_FRMCOUNT_G4X(dev_priv, _PIPE_EDP));
	MMIO_D(CURCNTR(dev_priv, PIPE_A));
	MMIO_D(CURCNTR(dev_priv, PIPE_B));
	MMIO_D(CURCNTR(dev_priv, PIPE_C));
	MMIO_D(CURPOS(dev_priv, PIPE_A));
	MMIO_D(CURPOS(dev_priv, PIPE_B));
	MMIO_D(CURPOS(dev_priv, PIPE_C));
	MMIO_D(CURBASE(dev_priv, PIPE_A));
	MMIO_D(CURBASE(dev_priv, PIPE_B));
	MMIO_D(CURBASE(dev_priv, PIPE_C));
	MMIO_D(CUR_FBC_CTL(dev_priv, PIPE_A));
	MMIO_D(CUR_FBC_CTL(dev_priv, PIPE_B));
	MMIO_D(CUR_FBC_CTL(dev_priv, PIPE_C));
	MMIO_D(_MMIO(0x700ac));
	MMIO_D(_MMIO(0x710ac));
	MMIO_D(_MMIO(0x720ac));
	MMIO_D(_MMIO(0x70090));
	MMIO_D(_MMIO(0x70094));
	MMIO_D(_MMIO(0x70098));
	MMIO_D(_MMIO(0x7009c));
	MMIO_D(DSPCNTR(dev_priv, PIPE_A));
	MMIO_D(DSPADDR(dev_priv, PIPE_A));
	MMIO_D(DSPSTRIDE(dev_priv, PIPE_A));
	MMIO_D(DSPPOS(dev_priv, PIPE_A));
	MMIO_D(DSPSIZE(dev_priv, PIPE_A));
	MMIO_D(DSPSURF(dev_priv, PIPE_A));
	MMIO_D(DSPOFFSET(dev_priv, PIPE_A));
	MMIO_D(DSPSURFLIVE(dev_priv, PIPE_A));
	MMIO_D(REG_50080(PIPE_A, PLANE_PRIMARY));
	MMIO_D(DSPCNTR(dev_priv, PIPE_B));
	MMIO_D(DSPADDR(dev_priv, PIPE_B));
	MMIO_D(DSPSTRIDE(dev_priv, PIPE_B));
	MMIO_D(DSPPOS(dev_priv, PIPE_B));
	MMIO_D(DSPSIZE(dev_priv, PIPE_B));
	MMIO_D(DSPSURF(dev_priv, PIPE_B));
	MMIO_D(DSPOFFSET(dev_priv, PIPE_B));
	MMIO_D(DSPSURFLIVE(dev_priv, PIPE_B));
	MMIO_D(REG_50080(PIPE_B, PLANE_PRIMARY));
	MMIO_D(DSPCNTR(dev_priv, PIPE_C));
	MMIO_D(DSPADDR(dev_priv, PIPE_C));
	MMIO_D(DSPSTRIDE(dev_priv, PIPE_C));
	MMIO_D(DSPPOS(dev_priv, PIPE_C));
	MMIO_D(DSPSIZE(dev_priv, PIPE_C));
	MMIO_D(DSPSURF(dev_priv, PIPE_C));
	MMIO_D(DSPOFFSET(dev_priv, PIPE_C));
	MMIO_D(DSPSURFLIVE(dev_priv, PIPE_C));
	MMIO_D(REG_50080(PIPE_C, PLANE_PRIMARY));
	MMIO_D(SPRCTL(PIPE_A));
	MMIO_D(SPRLINOFF(PIPE_A));
	MMIO_D(SPRSTRIDE(PIPE_A));
	MMIO_D(SPRPOS(PIPE_A));
	MMIO_D(SPRSIZE(PIPE_A));
	MMIO_D(SPRKEYVAL(PIPE_A));
	MMIO_D(SPRKEYMSK(PIPE_A));
	MMIO_D(SPRSURF(PIPE_A));
	MMIO_D(SPRKEYMAX(PIPE_A));
	MMIO_D(SPROFFSET(PIPE_A));
	MMIO_D(SPRSCALE(PIPE_A));
	MMIO_D(SPRSURFLIVE(PIPE_A));
	MMIO_D(REG_50080(PIPE_A, PLANE_SPRITE0));
	MMIO_D(SPRCTL(PIPE_B));
	MMIO_D(SPRLINOFF(PIPE_B));
	MMIO_D(SPRSTRIDE(PIPE_B));
	MMIO_D(SPRPOS(PIPE_B));
	MMIO_D(SPRSIZE(PIPE_B));
	MMIO_D(SPRKEYVAL(PIPE_B));
	MMIO_D(SPRKEYMSK(PIPE_B));
	MMIO_D(SPRSURF(PIPE_B));
	MMIO_D(SPRKEYMAX(PIPE_B));
	MMIO_D(SPROFFSET(PIPE_B));
	MMIO_D(SPRSCALE(PIPE_B));
	MMIO_D(SPRSURFLIVE(PIPE_B));
	MMIO_D(REG_50080(PIPE_B, PLANE_SPRITE0));
	MMIO_D(SPRCTL(PIPE_C));
	MMIO_D(SPRLINOFF(PIPE_C));
	MMIO_D(SPRSTRIDE(PIPE_C));
	MMIO_D(SPRPOS(PIPE_C));
	MMIO_D(SPRSIZE(PIPE_C));
	MMIO_D(SPRKEYVAL(PIPE_C));
	MMIO_D(SPRKEYMSK(PIPE_C));
	MMIO_D(SPRSURF(PIPE_C));
	MMIO_D(SPRKEYMAX(PIPE_C));
	MMIO_D(SPROFFSET(PIPE_C));
	MMIO_D(SPRSCALE(PIPE_C));
	MMIO_D(SPRSURFLIVE(PIPE_C));
	MMIO_D(REG_50080(PIPE_C, PLANE_SPRITE0));
	MMIO_D(TRANS_HTOTAL(dev_priv, TRANSCODER_A));
	MMIO_D(TRANS_HBLANK(dev_priv, TRANSCODER_A));
	MMIO_D(TRANS_HSYNC(dev_priv, TRANSCODER_A));
	MMIO_D(TRANS_VTOTAL(dev_priv, TRANSCODER_A));
	MMIO_D(TRANS_VBLANK(dev_priv, TRANSCODER_A));
	MMIO_D(TRANS_VSYNC(dev_priv, TRANSCODER_A));
	MMIO_D(BCLRPAT(dev_priv, TRANSCODER_A));
	MMIO_D(TRANS_VSYNCSHIFT(dev_priv, TRANSCODER_A));
	MMIO_D(PIPESRC(dev_priv, TRANSCODER_A));
	MMIO_D(TRANS_HTOTAL(dev_priv, TRANSCODER_B));
	MMIO_D(TRANS_HBLANK(dev_priv, TRANSCODER_B));
	MMIO_D(TRANS_HSYNC(dev_priv, TRANSCODER_B));
	MMIO_D(TRANS_VTOTAL(dev_priv, TRANSCODER_B));
	MMIO_D(TRANS_VBLANK(dev_priv, TRANSCODER_B));
	MMIO_D(TRANS_VSYNC(dev_priv, TRANSCODER_B));
	MMIO_D(BCLRPAT(dev_priv, TRANSCODER_B));
	MMIO_D(TRANS_VSYNCSHIFT(dev_priv, TRANSCODER_B));
	MMIO_D(PIPESRC(dev_priv, TRANSCODER_B));
	MMIO_D(TRANS_HTOTAL(dev_priv, TRANSCODER_C));
	MMIO_D(TRANS_HBLANK(dev_priv, TRANSCODER_C));
	MMIO_D(TRANS_HSYNC(dev_priv, TRANSCODER_C));
	MMIO_D(TRANS_VTOTAL(dev_priv, TRANSCODER_C));
	MMIO_D(TRANS_VBLANK(dev_priv, TRANSCODER_C));
	MMIO_D(TRANS_VSYNC(dev_priv, TRANSCODER_C));
	MMIO_D(BCLRPAT(dev_priv, TRANSCODER_C));
	MMIO_D(TRANS_VSYNCSHIFT(dev_priv, TRANSCODER_C));
	MMIO_D(PIPESRC(dev_priv, TRANSCODER_C));
	MMIO_D(TRANS_HTOTAL(dev_priv, TRANSCODER_EDP));
	MMIO_D(TRANS_HBLANK(dev_priv, TRANSCODER_EDP));
	MMIO_D(TRANS_HSYNC(dev_priv, TRANSCODER_EDP));
	MMIO_D(TRANS_VTOTAL(dev_priv, TRANSCODER_EDP));
	MMIO_D(TRANS_VBLANK(dev_priv, TRANSCODER_EDP));
	MMIO_D(TRANS_VSYNC(dev_priv, TRANSCODER_EDP));
	MMIO_D(BCLRPAT(dev_priv, TRANSCODER_EDP));
	MMIO_D(TRANS_VSYNCSHIFT(dev_priv, TRANSCODER_EDP));
	MMIO_D(PIPE_DATA_M1(dev_priv, TRANSCODER_A));
	MMIO_D(PIPE_DATA_N1(dev_priv, TRANSCODER_A));
	MMIO_D(PIPE_DATA_M2(dev_priv, TRANSCODER_A));
	MMIO_D(PIPE_DATA_N2(dev_priv, TRANSCODER_A));
	MMIO_D(PIPE_LINK_M1(dev_priv, TRANSCODER_A));
	MMIO_D(PIPE_LINK_N1(dev_priv, TRANSCODER_A));
	MMIO_D(PIPE_LINK_M2(dev_priv, TRANSCODER_A));
	MMIO_D(PIPE_LINK_N2(dev_priv, TRANSCODER_A));
	MMIO_D(PIPE_DATA_M1(dev_priv, TRANSCODER_B));
	MMIO_D(PIPE_DATA_N1(dev_priv, TRANSCODER_B));
	MMIO_D(PIPE_DATA_M2(dev_priv, TRANSCODER_B));
	MMIO_D(PIPE_DATA_N2(dev_priv, TRANSCODER_B));
	MMIO_D(PIPE_LINK_M1(dev_priv, TRANSCODER_B));
	MMIO_D(PIPE_LINK_N1(dev_priv, TRANSCODER_B));
	MMIO_D(PIPE_LINK_M2(dev_priv, TRANSCODER_B));
	MMIO_D(PIPE_LINK_N2(dev_priv, TRANSCODER_B));
	MMIO_D(PIPE_DATA_M1(dev_priv, TRANSCODER_C));
	MMIO_D(PIPE_DATA_N1(dev_priv, TRANSCODER_C));
	MMIO_D(PIPE_DATA_M2(dev_priv, TRANSCODER_C));
	MMIO_D(PIPE_DATA_N2(dev_priv, TRANSCODER_C));
	MMIO_D(PIPE_LINK_M1(dev_priv, TRANSCODER_C));
	MMIO_D(PIPE_LINK_N1(dev_priv, TRANSCODER_C));
	MMIO_D(PIPE_LINK_M2(dev_priv, TRANSCODER_C));
	MMIO_D(PIPE_LINK_N2(dev_priv, TRANSCODER_C));
	MMIO_D(PIPE_DATA_M1(dev_priv, TRANSCODER_EDP));
	MMIO_D(PIPE_DATA_N1(dev_priv, TRANSCODER_EDP));
	MMIO_D(PIPE_DATA_M2(dev_priv, TRANSCODER_EDP));
	MMIO_D(PIPE_DATA_N2(dev_priv, TRANSCODER_EDP));
	MMIO_D(PIPE_LINK_M1(dev_priv, TRANSCODER_EDP));
	MMIO_D(PIPE_LINK_N1(dev_priv, TRANSCODER_EDP));
	MMIO_D(PIPE_LINK_M2(dev_priv, TRANSCODER_EDP));
	MMIO_D(PIPE_LINK_N2(dev_priv, TRANSCODER_EDP));
	MMIO_D(PF_CTL(PIPE_A));
	MMIO_D(PF_WIN_SZ(PIPE_A));
	MMIO_D(PF_WIN_POS(PIPE_A));
	MMIO_D(PF_VSCALE(PIPE_A));
	MMIO_D(PF_HSCALE(PIPE_A));
	MMIO_D(PF_CTL(PIPE_B));
	MMIO_D(PF_WIN_SZ(PIPE_B));
	MMIO_D(PF_WIN_POS(PIPE_B));
	MMIO_D(PF_VSCALE(PIPE_B));
	MMIO_D(PF_HSCALE(PIPE_B));
	MMIO_D(PF_CTL(PIPE_C));
	MMIO_D(PF_WIN_SZ(PIPE_C));
	MMIO_D(PF_WIN_POS(PIPE_C));
	MMIO_D(PF_VSCALE(PIPE_C));
	MMIO_D(PF_HSCALE(PIPE_C));
	MMIO_D(WM0_PIPE_ILK(PIPE_A));
	MMIO_D(WM0_PIPE_ILK(PIPE_B));
	MMIO_D(WM0_PIPE_ILK(PIPE_C));
	MMIO_D(WM1_LP_ILK);
	MMIO_D(WM2_LP_ILK);
	MMIO_D(WM3_LP_ILK);
	MMIO_D(WM1S_LP_ILK);
	MMIO_D(WM2S_LP_IVB);
	MMIO_D(WM3S_LP_IVB);
	MMIO_D(BLC_PWM_CPU_CTL2);
	MMIO_D(BLC_PWM_CPU_CTL);
	MMIO_D(BLC_PWM_PCH_CTL1);
	MMIO_D(BLC_PWM_PCH_CTL2);
	MMIO_D(_MMIO(0x48268));
	MMIO_F(PCH_GMBUS0, 4 * 4);
	MMIO_F(PCH_GPIO_BASE, 6 * 4);
	MMIO_F(_MMIO(0xe4f00), 0x28);
	MMIO_D(_MMIO(_PCH_TRANSACONF));
	MMIO_D(_MMIO(_PCH_TRANSBCONF));
	MMIO_D(FDI_RX_IIR(PIPE_A));
	MMIO_D(FDI_RX_IIR(PIPE_B));
	MMIO_D(FDI_RX_IIR(PIPE_C));
	MMIO_D(FDI_RX_IMR(PIPE_A));
	MMIO_D(FDI_RX_IMR(PIPE_B));
	MMIO_D(FDI_RX_IMR(PIPE_C));
	MMIO_D(FDI_RX_CTL(PIPE_A));
	MMIO_D(FDI_RX_CTL(PIPE_B));
	MMIO_D(FDI_RX_CTL(PIPE_C));
	MMIO_D(_MMIO(_PCH_TRANS_HTOTAL_A));
	MMIO_D(_MMIO(_PCH_TRANS_HBLANK_A));
	MMIO_D(_MMIO(_PCH_TRANS_HSYNC_A));
	MMIO_D(_MMIO(_PCH_TRANS_VTOTAL_A));
	MMIO_D(_MMIO(_PCH_TRANS_VBLANK_A));
	MMIO_D(_MMIO(_PCH_TRANS_VSYNC_A));
	MMIO_D(_MMIO(_PCH_TRANS_VSYNCSHIFT_A));
	MMIO_D(_MMIO(_PCH_TRANS_HTOTAL_B));
	MMIO_D(_MMIO(_PCH_TRANS_HBLANK_B));
	MMIO_D(_MMIO(_PCH_TRANS_HSYNC_B));
	MMIO_D(_MMIO(_PCH_TRANS_VTOTAL_B));
	MMIO_D(_MMIO(_PCH_TRANS_VBLANK_B));
	MMIO_D(_MMIO(_PCH_TRANS_VSYNC_B));
	MMIO_D(_MMIO(_PCH_TRANS_VSYNCSHIFT_B));
	MMIO_D(_MMIO(_PCH_TRANSA_DATA_M1));
	MMIO_D(_MMIO(_PCH_TRANSA_DATA_N1));
	MMIO_D(_MMIO(_PCH_TRANSA_DATA_M2));
	MMIO_D(_MMIO(_PCH_TRANSA_DATA_N2));
	MMIO_D(_MMIO(_PCH_TRANSA_LINK_M1));
	MMIO_D(_MMIO(_PCH_TRANSA_LINK_N1));
	MMIO_D(_MMIO(_PCH_TRANSA_LINK_M2));
	MMIO_D(_MMIO(_PCH_TRANSA_LINK_N2));
	MMIO_D(TRANS_DP_CTL(PIPE_A));
	MMIO_D(TRANS_DP_CTL(PIPE_B));
	MMIO_D(TRANS_DP_CTL(PIPE_C));
	MMIO_D(TVIDEO_DIP_CTL(PIPE_A));
	MMIO_D(TVIDEO_DIP_DATA(PIPE_A));
	MMIO_D(TVIDEO_DIP_GCP(PIPE_A));
	MMIO_D(TVIDEO_DIP_CTL(PIPE_B));
	MMIO_D(TVIDEO_DIP_DATA(PIPE_B));
	MMIO_D(TVIDEO_DIP_GCP(PIPE_B));
	MMIO_D(TVIDEO_DIP_CTL(PIPE_C));
	MMIO_D(TVIDEO_DIP_DATA(PIPE_C));
	MMIO_D(TVIDEO_DIP_GCP(PIPE_C));
	MMIO_D(_MMIO(_FDI_RXA_MISC));
	MMIO_D(_MMIO(_FDI_RXB_MISC));
	MMIO_D(_MMIO(_FDI_RXA_TUSIZE1));
	MMIO_D(_MMIO(_FDI_RXA_TUSIZE2));
	MMIO_D(_MMIO(_FDI_RXB_TUSIZE1));
	MMIO_D(_MMIO(_FDI_RXB_TUSIZE2));
	MMIO_D(PCH_PP_CONTROL);
	MMIO_D(PCH_PP_DIVISOR);
	MMIO_D(PCH_PP_STATUS);
	MMIO_D(PCH_LVDS);
	MMIO_D(_MMIO(_PCH_DPLL_A));
	MMIO_D(_MMIO(_PCH_DPLL_B));
	MMIO_D(_MMIO(_PCH_FPA0));
	MMIO_D(_MMIO(_PCH_FPA1));
	MMIO_D(_MMIO(_PCH_FPB0));
	MMIO_D(_MMIO(_PCH_FPB1));
	MMIO_D(PCH_DREF_CONTROL);
	MMIO_D(PCH_RAWCLK_FREQ);
	MMIO_D(PCH_DPLL_SEL);
	MMIO_D(_MMIO(0x61208));
	MMIO_D(_MMIO(0x6120c));
	MMIO_D(PCH_PP_ON_DELAYS);
	MMIO_D(PCH_PP_OFF_DELAYS);
	MMIO_D(_MMIO(0xe651c));
	MMIO_D(_MMIO(0xe661c));
	MMIO_D(_MMIO(0xe671c));
	MMIO_D(_MMIO(0xe681c));
	MMIO_D(_MMIO(0xe6c04));
	MMIO_D(_MMIO(0xe6e1c));
	MMIO_D(PCH_PORT_HOTPLUG);
	MMIO_D(LCPLL_CTL);
	MMIO_D(FUSE_STRAP);
	MMIO_D(DIGITAL_PORT_HOTPLUG_CNTRL);
	MMIO_D(DISP_ARB_CTL);
	MMIO_D(DISP_ARB_CTL2);
	MMIO_D(ILK_DISPLAY_CHICKEN1);
	MMIO_D(ILK_DISPLAY_CHICKEN2);
	MMIO_D(ILK_DSPCLK_GATE_D);
	MMIO_D(SOUTH_CHICKEN1);
	MMIO_D(SOUTH_CHICKEN2);
	MMIO_D(_MMIO(_TRANSA_CHICKEN1));
	MMIO_D(_MMIO(_TRANSB_CHICKEN1));
	MMIO_D(SOUTH_DSPCLK_GATE_D);
	MMIO_D(_MMIO(_TRANSA_CHICKEN2));
	MMIO_D(_MMIO(_TRANSB_CHICKEN2));
	MMIO_D(ILK_DPFC_CB_BASE(INTEL_FBC_A));
	MMIO_D(ILK_DPFC_CONTROL(INTEL_FBC_A));
	MMIO_D(ILK_DPFC_RECOMP_CTL(INTEL_FBC_A));
	MMIO_D(ILK_DPFC_STATUS(INTEL_FBC_A));
	MMIO_D(ILK_DPFC_FENCE_YOFF(INTEL_FBC_A));
	MMIO_D(ILK_DPFC_CHICKEN(INTEL_FBC_A));
	MMIO_D(ILK_FBC_RT_BASE);
	MMIO_D(IPS_CTL);
	MMIO_D(PIPE_CSC_COEFF_RY_GY(PIPE_A));
	MMIO_D(PIPE_CSC_COEFF_BY(PIPE_A));
	MMIO_D(PIPE_CSC_COEFF_RU_GU(PIPE_A));
	MMIO_D(PIPE_CSC_COEFF_BU(PIPE_A));
	MMIO_D(PIPE_CSC_COEFF_RV_GV(PIPE_A));
	MMIO_D(PIPE_CSC_COEFF_BV(PIPE_A));
	MMIO_D(PIPE_CSC_MODE(PIPE_A));
	MMIO_D(PIPE_CSC_PREOFF_HI(PIPE_A));
	MMIO_D(PIPE_CSC_PREOFF_ME(PIPE_A));
	MMIO_D(PIPE_CSC_PREOFF_LO(PIPE_A));
	MMIO_D(PIPE_CSC_POSTOFF_HI(PIPE_A));
	MMIO_D(PIPE_CSC_POSTOFF_ME(PIPE_A));
	MMIO_D(PIPE_CSC_POSTOFF_LO(PIPE_A));
	MMIO_D(PIPE_CSC_COEFF_RY_GY(PIPE_B));
	MMIO_D(PIPE_CSC_COEFF_BY(PIPE_B));
	MMIO_D(PIPE_CSC_COEFF_RU_GU(PIPE_B));
	MMIO_D(PIPE_CSC_COEFF_BU(PIPE_B));
	MMIO_D(PIPE_CSC_COEFF_RV_GV(PIPE_B));
	MMIO_D(PIPE_CSC_COEFF_BV(PIPE_B));
	MMIO_D(PIPE_CSC_MODE(PIPE_B));
	MMIO_D(PIPE_CSC_PREOFF_HI(PIPE_B));
	MMIO_D(PIPE_CSC_PREOFF_ME(PIPE_B));
	MMIO_D(PIPE_CSC_PREOFF_LO(PIPE_B));
	MMIO_D(PIPE_CSC_POSTOFF_HI(PIPE_B));
	MMIO_D(PIPE_CSC_POSTOFF_ME(PIPE_B));
	MMIO_D(PIPE_CSC_POSTOFF_LO(PIPE_B));
	MMIO_D(PIPE_CSC_COEFF_RY_GY(PIPE_C));
	MMIO_D(PIPE_CSC_COEFF_BY(PIPE_C));
	MMIO_D(PIPE_CSC_COEFF_RU_GU(PIPE_C));
	MMIO_D(PIPE_CSC_COEFF_BU(PIPE_C));
	MMIO_D(PIPE_CSC_COEFF_RV_GV(PIPE_C));
	MMIO_D(PIPE_CSC_COEFF_BV(PIPE_C));
	MMIO_D(PIPE_CSC_MODE(PIPE_C));
	MMIO_D(PIPE_CSC_PREOFF_HI(PIPE_C));
	MMIO_D(PIPE_CSC_PREOFF_ME(PIPE_C));
	MMIO_D(PIPE_CSC_PREOFF_LO(PIPE_C));
	MMIO_D(PIPE_CSC_POSTOFF_HI(PIPE_C));
	MMIO_D(PIPE_CSC_POSTOFF_ME(PIPE_C));
	MMIO_D(PIPE_CSC_POSTOFF_LO(PIPE_C));
	MMIO_D(PREC_PAL_INDEX(PIPE_A));
	MMIO_D(PREC_PAL_DATA(PIPE_A));
	MMIO_F(PREC_PAL_GC_MAX(PIPE_A, 0), 4 * 3);
	MMIO_D(PREC_PAL_INDEX(PIPE_B));
	MMIO_D(PREC_PAL_DATA(PIPE_B));
	MMIO_F(PREC_PAL_GC_MAX(PIPE_B, 0), 4 * 3);
	MMIO_D(PREC_PAL_INDEX(PIPE_C));
	MMIO_D(PREC_PAL_DATA(PIPE_C));
	MMIO_F(PREC_PAL_GC_MAX(PIPE_C, 0), 4 * 3);
	MMIO_D(_MMIO(0x60110));
	MMIO_D(_MMIO(0x61110));
	MMIO_F(_MMIO(0x70400), 0x40);
	MMIO_F(_MMIO(0x71400), 0x40);
	MMIO_F(_MMIO(0x72400), 0x40);
	MMIO_D(WM_LINETIME(PIPE_A));
	MMIO_D(WM_LINETIME(PIPE_B));
	MMIO_D(WM_LINETIME(PIPE_C));
	MMIO_D(SPLL_CTL);
	MMIO_D(_MMIO(_WRPLL_CTL1));
	MMIO_D(_MMIO(_WRPLL_CTL2));
	MMIO_D(PORT_CLK_SEL(PORT_A));
	MMIO_D(PORT_CLK_SEL(PORT_B));
	MMIO_D(PORT_CLK_SEL(PORT_C));
	MMIO_D(PORT_CLK_SEL(PORT_D));
	MMIO_D(PORT_CLK_SEL(PORT_E));
	MMIO_D(TRANS_CLK_SEL(TRANSCODER_A));
	MMIO_D(TRANS_CLK_SEL(TRANSCODER_B));
	MMIO_D(TRANS_CLK_SEL(TRANSCODER_C));
	MMIO_D(HSW_NDE_RSTWRN_OPT);
	MMIO_D(_MMIO(0x46508));
	MMIO_D(_MMIO(0x49080));
	MMIO_D(_MMIO(0x49180));
	MMIO_D(_MMIO(0x49280));
	MMIO_F(_MMIO(0x49090), 0x14);
	MMIO_F(_MMIO(0x49190), 0x14);
	MMIO_F(_MMIO(0x49290), 0x14);
	MMIO_D(GAMMA_MODE(PIPE_A));
	MMIO_D(GAMMA_MODE(PIPE_B));
	MMIO_D(GAMMA_MODE(PIPE_C));
	MMIO_D(TRANS_MULT(dev_priv, TRANSCODER_A));
	MMIO_D(TRANS_MULT(dev_priv, TRANSCODER_B));
	MMIO_D(TRANS_MULT(dev_priv, TRANSCODER_C));
	MMIO_D(HSW_TVIDEO_DIP_CTL(dev_priv, TRANSCODER_A));
	MMIO_D(HSW_TVIDEO_DIP_CTL(dev_priv, TRANSCODER_B));
	MMIO_D(HSW_TVIDEO_DIP_CTL(dev_priv, TRANSCODER_C));
	MMIO_D(SFUSE_STRAP);
	MMIO_D(SBI_ADDR);
	MMIO_D(SBI_DATA);
	MMIO_D(SBI_CTL_STAT);
	MMIO_D(PIXCLK_GATE);
	MMIO_F(DP_AUX_CH_CTL(AUX_CH_A), 6 * 4);
	MMIO_D(DDI_BUF_CTL(PORT_A));
	MMIO_D(DDI_BUF_CTL(PORT_B));
	MMIO_D(DDI_BUF_CTL(PORT_C));
	MMIO_D(DDI_BUF_CTL(PORT_D));
	MMIO_D(DDI_BUF_CTL(PORT_E));
	MMIO_D(DP_TP_CTL(PORT_A));
	MMIO_D(DP_TP_CTL(PORT_B));
	MMIO_D(DP_TP_CTL(PORT_C));
	MMIO_D(DP_TP_CTL(PORT_D));
	MMIO_D(DP_TP_CTL(PORT_E));
	MMIO_D(DP_TP_STATUS(PORT_A));
	MMIO_D(DP_TP_STATUS(PORT_B));
	MMIO_D(DP_TP_STATUS(PORT_C));
	MMIO_D(DP_TP_STATUS(PORT_D));
	MMIO_D(DP_TP_STATUS(PORT_E));
	MMIO_F(_MMIO(_DDI_BUF_TRANS_A), 0x50);
	MMIO_F(_MMIO(0x64e60), 0x50);
	MMIO_F(_MMIO(0x64eC0), 0x50);
	MMIO_F(_MMIO(0x64f20), 0x50);
	MMIO_F(_MMIO(0x64f80), 0x50);
	MMIO_D(HSW_AUD_CFG(PIPE_A));
	MMIO_D(HSW_AUD_PIN_ELD_CP_VLD);
	MMIO_D(HSW_AUD_MISC_CTRL(PIPE_A));
	MMIO_D(_MMIO(_TRANS_DDI_FUNC_CTL_A));
	MMIO_D(_MMIO(_TRANS_DDI_FUNC_CTL_B));
	MMIO_D(_MMIO(_TRANS_DDI_FUNC_CTL_C));
	MMIO_D(_MMIO(_TRANS_DDI_FUNC_CTL_EDP));
	MMIO_D(_MMIO(_TRANSA_MSA_MISC));
	MMIO_D(_MMIO(_TRANSB_MSA_MISC));
	MMIO_D(_MMIO(_TRANSC_MSA_MISC));
	MMIO_D(_MMIO(_TRANS_EDP_MSA_MISC));
	MMIO_D(FORCEWAKE);
	MMIO_D(FORCEWAKE_ACK);
	MMIO_D(GEN6_GT_CORE_STATUS);
	MMIO_D(GEN6_GT_THREAD_STATUS_REG);
	MMIO_D(GTFIFODBG);
	MMIO_D(GTFIFOCTL);
	MMIO_D(ECOBUS);
	MMIO_D(GEN6_RC_CONTROL);
	MMIO_D(GEN6_RC_STATE);
	MMIO_D(GEN6_RPNSWREQ);
	MMIO_D(GEN6_RC_VIDEO_FREQ);
	MMIO_D(GEN6_RP_DOWN_TIMEOUT);
	MMIO_D(GEN6_RP_INTERRUPT_LIMITS);
	MMIO_D(GEN6_RPSTAT1);
	MMIO_D(GEN6_RP_CONTROL);
	MMIO_D(GEN6_RP_UP_THRESHOLD);
	MMIO_D(GEN6_RP_DOWN_THRESHOLD);
	MMIO_D(GEN6_RP_CUR_UP_EI);
	MMIO_D(GEN6_RP_CUR_UP);
	MMIO_D(GEN6_RP_PREV_UP);
	MMIO_D(GEN6_RP_CUR_DOWN_EI);
	MMIO_D(GEN6_RP_CUR_DOWN);
	MMIO_D(GEN6_RP_PREV_DOWN);
	MMIO_D(GEN6_RP_UP_EI);
	MMIO_D(GEN6_RP_DOWN_EI);
	MMIO_D(GEN6_RP_IDLE_HYSTERSIS);
	MMIO_D(GEN6_RC1_WAKE_RATE_LIMIT);
	MMIO_D(GEN6_RC6_WAKE_RATE_LIMIT);
	MMIO_D(GEN6_RC6pp_WAKE_RATE_LIMIT);
	MMIO_D(GEN6_RC_EVALUATION_INTERVAL);
	MMIO_D(GEN6_RC_IDLE_HYSTERSIS);
	MMIO_D(GEN6_RC_SLEEP);
	MMIO_D(GEN6_RC1e_THRESHOLD);
	MMIO_D(GEN6_RC6_THRESHOLD);
	MMIO_D(GEN6_RC6p_THRESHOLD);
	MMIO_D(GEN6_RC6pp_THRESHOLD);
	MMIO_D(GEN6_PMINTRMSK);

	MMIO_D(RSTDBYCTL);
	MMIO_D(GEN6_GDRST);
	MMIO_F(FENCE_REG_GEN6_LO(0), 0x80);
	MMIO_D(CPU_VGACNTRL);
	MMIO_D(TILECTL);
	MMIO_D(GEN6_UCGCTL1);
	MMIO_D(GEN6_UCGCTL2);
	MMIO_F(_MMIO(0x4f000), 0x90);
	MMIO_D(GEN6_PCODE_DATA);
	MMIO_D(_MMIO(0x13812c));
	MMIO_D(GEN7_ERR_INT);
	MMIO_D(HSW_EDRAM_CAP);
	MMIO_D(HSW_IDICR);
	MMIO_D(GFX_FLSH_CNTL_GEN6);
	MMIO_D(_MMIO(0x3c));
	MMIO_D(_MMIO(0x860));
	MMIO_D(ECOSKPD(RENDER_RING_BASE));
	MMIO_D(_MMIO(0x121d0));
	MMIO_D(ECOSKPD(BLT_RING_BASE));
	MMIO_D(_MMIO(0x41d0));
	MMIO_D(GAC_ECO_BITS);
	MMIO_D(_MMIO(0x6200));
	MMIO_D(_MMIO(0x6204));
	MMIO_D(_MMIO(0x6208));
	MMIO_D(_MMIO(0x7118));
	MMIO_D(_MMIO(0x7180));
	MMIO_D(_MMIO(0x7408));
	MMIO_D(_MMIO(0x7c00));
	MMIO_D(GEN6_MBCTL);
	MMIO_D(_MMIO(0x911c));
	MMIO_D(_MMIO(0x9120));
	MMIO_D(GEN7_UCGCTL4);
	MMIO_D(GAB_CTL);
	MMIO_D(_MMIO(0x48800));
	MMIO_D(_MMIO(0xce044));
	MMIO_D(_MMIO(0xe6500));
	MMIO_D(_MMIO(0xe6504));
	MMIO_D(_MMIO(0xe6600));
	MMIO_D(_MMIO(0xe6604));
	MMIO_D(_MMIO(0xe6700));
	MMIO_D(_MMIO(0xe6704));
	MMIO_D(_MMIO(0xe6800));
	MMIO_D(_MMIO(0xe6804));
	MMIO_D(PCH_GMBUS4);
	MMIO_D(PCH_GMBUS5);
	MMIO_D(_MMIO(0x902c));
	MMIO_D(_MMIO(0xec008));
	MMIO_D(_MMIO(0xec00c));
	MMIO_D(_MMIO(0xec008 + 0x18));
	MMIO_D(_MMIO(0xec00c + 0x18));
	MMIO_D(_MMIO(0xec008 + 0x18 * 2));
	MMIO_D(_MMIO(0xec00c + 0x18 * 2));
	MMIO_D(_MMIO(0xec008 + 0x18 * 3));
	MMIO_D(_MMIO(0xec00c + 0x18 * 3));
	MMIO_D(_MMIO(0xec408));
	MMIO_D(_MMIO(0xec40c));
	MMIO_D(_MMIO(0xec408 + 0x18));
	MMIO_D(_MMIO(0xec40c + 0x18));
	MMIO_D(_MMIO(0xec408 + 0x18 * 2));
	MMIO_D(_MMIO(0xec40c + 0x18 * 2));
	MMIO_D(_MMIO(0xec408 + 0x18 * 3));
	MMIO_D(_MMIO(0xec40c + 0x18 * 3));
	MMIO_D(_MMIO(0xfc810));
	MMIO_D(_MMIO(0xfc81c));
	MMIO_D(_MMIO(0xfc828));
	MMIO_D(_MMIO(0xfc834));
	MMIO_D(_MMIO(0xfcc00));
	MMIO_D(_MMIO(0xfcc0c));
	MMIO_D(_MMIO(0xfcc18));
	MMIO_D(_MMIO(0xfcc24));
	MMIO_D(_MMIO(0xfd000));
	MMIO_D(_MMIO(0xfd00c));
	MMIO_D(_MMIO(0xfd018));
	MMIO_D(_MMIO(0xfd024));
	MMIO_D(_MMIO(0xfd034));
	MMIO_D(FPGA_DBG);
	MMIO_D(_MMIO(0x2054));
	MMIO_D(_MMIO(0x12054));
	MMIO_D(_MMIO(0x22054));
	MMIO_D(_MMIO(0x1a054));
	MMIO_D(_MMIO(0x44070));
	MMIO_D(_MMIO(0x2178));
	MMIO_D(_MMIO(0x217c));
	MMIO_D(_MMIO(0x12178));
	MMIO_D(_MMIO(0x1217c));
	MMIO_F(_MMIO(0x5200), 32);
	MMIO_F(_MMIO(0x5240), 32);
	MMIO_F(_MMIO(0x5280), 16);
	MMIO_D(BCS_SWCTRL);
	MMIO_F(HS_INVOCATION_COUNT, 8);
	MMIO_F(DS_INVOCATION_COUNT, 8);
	MMIO_F(IA_VERTICES_COUNT, 8);
	MMIO_F(IA_PRIMITIVES_COUNT, 8);
	MMIO_F(VS_INVOCATION_COUNT, 8);
	MMIO_F(GS_INVOCATION_COUNT, 8);
	MMIO_F(GS_PRIMITIVES_COUNT, 8);
	MMIO_F(CL_INVOCATION_COUNT, 8);
	MMIO_F(CL_PRIMITIVES_COUNT, 8);
	MMIO_F(PS_INVOCATION_COUNT, 8);
	MMIO_F(PS_DEPTH_COUNT, 8);
	MMIO_D(ARB_MODE);
	MMIO_RING_D(RING_BBADDR);
	MMIO_D(_MMIO(0x2220));
	MMIO_D(_MMIO(0x12220));
	MMIO_D(_MMIO(0x22220));
	MMIO_RING_D(RING_SYNC_1);
	MMIO_RING_D(RING_SYNC_0);
	MMIO_D(GUC_STATUS);

	MMIO_F(_MMIO(MCHBAR_MIRROR_BASE_SNB), 0x40000);
	MMIO_F(_MMIO(VGT_PVINFO_PAGE), VGT_PVINFO_SIZE);
	MMIO_F(LGC_PALETTE(PIPE_A, 0), 1024);
	MMIO_F(LGC_PALETTE(PIPE_B, 0), 1024);
	MMIO_F(LGC_PALETTE(PIPE_C, 0), 1024);

	return 0;
}

static int iterate_bdw_only_mmio(struct intel_gvt_mmio_table_iter *iter)
{
	MMIO_D(HSW_PWR_WELL_CTL1);
	MMIO_D(HSW_PWR_WELL_CTL2);
	MMIO_D(HSW_PWR_WELL_CTL3);
	MMIO_D(HSW_PWR_WELL_CTL4);
	MMIO_D(HSW_PWR_WELL_CTL5);
	MMIO_D(HSW_PWR_WELL_CTL6);

	MMIO_D(WM_MISC);
	MMIO_D(_MMIO(_SRD_CTL_EDP));

	MMIO_D(_MMIO(0xb1f0));
	MMIO_D(_MMIO(0xb1c0));
	MMIO_D(_MMIO(0xb100));
	MMIO_D(_MMIO(0xb10c));
	MMIO_D(_MMIO(0xb110));
	MMIO_D(_MMIO(0x83a4));
	MMIO_D(_MMIO(0x8430));
	MMIO_D(_MMIO(0x2248));
	MMIO_D(FORCEWAKE_ACK_HSW);

	return 0;
}

static int iterate_bdw_plus_mmio(struct intel_gvt_mmio_table_iter *iter)
{
	struct drm_i915_private *dev_priv = iter->i915;

	MMIO_D(GEN8_GT_IMR(0));
	MMIO_D(GEN8_GT_IER(0));
	MMIO_D(GEN8_GT_IIR(0));
	MMIO_D(GEN8_GT_ISR(0));
	MMIO_D(GEN8_GT_IMR(1));
	MMIO_D(GEN8_GT_IER(1));
	MMIO_D(GEN8_GT_IIR(1));
	MMIO_D(GEN8_GT_ISR(1));
	MMIO_D(GEN8_GT_IMR(2));
	MMIO_D(GEN8_GT_IER(2));
	MMIO_D(GEN8_GT_IIR(2));
	MMIO_D(GEN8_GT_ISR(2));
	MMIO_D(GEN8_GT_IMR(3));
	MMIO_D(GEN8_GT_IER(3));
	MMIO_D(GEN8_GT_IIR(3));
	MMIO_D(GEN8_GT_ISR(3));
	MMIO_D(GEN8_DE_PIPE_IMR(PIPE_A));
	MMIO_D(GEN8_DE_PIPE_IER(PIPE_A));
	MMIO_D(GEN8_DE_PIPE_IIR(PIPE_A));
	MMIO_D(GEN8_DE_PIPE_ISR(PIPE_A));
	MMIO_D(GEN8_DE_PIPE_IMR(PIPE_B));
	MMIO_D(GEN8_DE_PIPE_IER(PIPE_B));
	MMIO_D(GEN8_DE_PIPE_IIR(PIPE_B));
	MMIO_D(GEN8_DE_PIPE_ISR(PIPE_B));
	MMIO_D(GEN8_DE_PIPE_IMR(PIPE_C));
	MMIO_D(GEN8_DE_PIPE_IER(PIPE_C));
	MMIO_D(GEN8_DE_PIPE_IIR(PIPE_C));
	MMIO_D(GEN8_DE_PIPE_ISR(PIPE_C));
	MMIO_D(GEN8_DE_PORT_IMR);
	MMIO_D(GEN8_DE_PORT_IER);
	MMIO_D(GEN8_DE_PORT_IIR);
	MMIO_D(GEN8_DE_PORT_ISR);
	MMIO_D(GEN8_DE_MISC_IMR);
	MMIO_D(GEN8_DE_MISC_IER);
	MMIO_D(GEN8_DE_MISC_IIR);
	MMIO_D(GEN8_DE_MISC_ISR);
	MMIO_D(GEN8_PCU_IMR);
	MMIO_D(GEN8_PCU_IER);
	MMIO_D(GEN8_PCU_IIR);
	MMIO_D(GEN8_PCU_ISR);
	MMIO_D(GEN8_MASTER_IRQ);
	MMIO_RING_D(RING_ACTHD_UDW);

#define RING_REG(base) _MMIO((base) + 0xd0)
	MMIO_RING_D(RING_REG);
#undef RING_REG

#define RING_REG(base) _MMIO((base) + 0x230)
	MMIO_RING_D(RING_REG);
#undef RING_REG

#define RING_REG(base) _MMIO((base) + 0x234)
	MMIO_RING_F(RING_REG, 8);
#undef RING_REG

#define RING_REG(base) _MMIO((base) + 0x244)
	MMIO_RING_D(RING_REG);
#undef RING_REG

#define RING_REG(base) _MMIO((base) + 0x370)
	MMIO_RING_F(RING_REG, 48);
#undef RING_REG

#define RING_REG(base) _MMIO((base) + 0x3a0)
	MMIO_RING_D(RING_REG);
#undef RING_REG

	MMIO_D(PIPE_MISC(PIPE_A));
	MMIO_D(PIPE_MISC(PIPE_B));
	MMIO_D(PIPE_MISC(PIPE_C));
	MMIO_D(_MMIO(0x1c1d0));
	MMIO_D(GEN6_MBCUNIT_SNPCR);
	MMIO_D(GEN7_MISCCPCTL);
	MMIO_D(_MMIO(0x1c054));
	MMIO_D(GEN6_PCODE_MAILBOX);
	if (!IS_BROXTON(dev_priv))
		MMIO_D(GEN8_PRIVATE_PAT_LO);
	MMIO_D(GEN8_PRIVATE_PAT_HI);
	MMIO_D(GAMTARBMODE);

#define RING_REG(base) _MMIO((base) + 0x270)
	MMIO_RING_F(RING_REG, 32);
#undef RING_REG

	MMIO_RING_D(RING_HWS_PGA);
	MMIO_D(HDC_CHICKEN0);
	MMIO_D(CHICKEN_PIPESL_1(PIPE_A));
	MMIO_D(CHICKEN_PIPESL_1(PIPE_B));
	MMIO_D(CHICKEN_PIPESL_1(PIPE_C));
	MMIO_D(_MMIO(0x6671c));
	MMIO_D(_MMIO(0x66c00));
	MMIO_D(_MMIO(0x66c04));
	MMIO_D(HSW_GTT_CACHE_EN);
	MMIO_D(GEN8_EU_DISABLE0);
	MMIO_D(GEN8_EU_DISABLE1);
	MMIO_D(GEN8_EU_DISABLE2);
	MMIO_D(_MMIO(0xfdc));
	MMIO_D(GEN8_ROW_CHICKEN);
	MMIO_D(GEN7_ROW_CHICKEN2);
	MMIO_D(GEN8_UCGCTL6);
	MMIO_D(GEN8_L3SQCREG4);
	MMIO_D(GEN9_SCRATCH_LNCF1);
	MMIO_F(_MMIO(0x24d0), 48);
	MMIO_D(_MMIO(0x44484));
	MMIO_D(_MMIO(0x4448c));
	MMIO_D(GEN8_L3_LRA_1_GPGPU);
	MMIO_D(_MMIO(0x110000));
	MMIO_D(_MMIO(0x48400));
	MMIO_D(_MMIO(0x6e570));
	MMIO_D(_MMIO(0x65f10));
	MMIO_D(_MMIO(0xe194));
	MMIO_D(_MMIO(0xe188));
	MMIO_D(HALF_SLICE_CHICKEN2);
	MMIO_D(_MMIO(0x2580));
	MMIO_D(_MMIO(0xe220));
	MMIO_D(_MMIO(0xe230));
	MMIO_D(_MMIO(0xe240));
	MMIO_D(_MMIO(0xe260));
	MMIO_D(_MMIO(0xe270));
	MMIO_D(_MMIO(0xe280));
	MMIO_D(_MMIO(0xe2a0));
	MMIO_D(_MMIO(0xe2b0));
	MMIO_D(_MMIO(0xe2c0));
	MMIO_D(_MMIO(0x21f0));
	MMIO_D(GEN8_GAMW_ECO_DEV_RW_IA);
	MMIO_D(_MMIO(0x215c));
	MMIO_F(_MMIO(0x2290), 8);
	MMIO_D(_MMIO(0x2b00));
	MMIO_D(_MMIO(0x2360));
	MMIO_D(_MMIO(0x1c17c));
	MMIO_D(_MMIO(0x1c178));
	MMIO_D(_MMIO(0x4260));
	MMIO_D(_MMIO(0x4264));
	MMIO_D(_MMIO(0x4268));
	MMIO_D(_MMIO(0x426c));
	MMIO_D(_MMIO(0x4270));
	MMIO_D(_MMIO(0x4094));
	MMIO_D(_MMIO(0x22178));
	MMIO_D(_MMIO(0x1a178));
	MMIO_D(_MMIO(0x1a17c));
	MMIO_D(_MMIO(0x2217c));
	MMIO_D(EDP_PSR_IMR);
	MMIO_D(EDP_PSR_IIR);
	MMIO_D(_MMIO(0xe4cc));
	MMIO_D(GEN7_SC_INSTDONE);

	return 0;
}

static int iterate_pre_skl_mmio(struct intel_gvt_mmio_table_iter *iter)
{
	MMIO_D(FORCEWAKE_MT);

	MMIO_D(PCH_ADPA);
	MMIO_F(PCH_DP_AUX_CH_CTL(AUX_CH_B), 6 * 4);
	MMIO_F(PCH_DP_AUX_CH_CTL(AUX_CH_C), 6 * 4);
	MMIO_F(PCH_DP_AUX_CH_CTL(AUX_CH_D), 6 * 4);

	MMIO_F(_MMIO(0x70440), 0xc);
	MMIO_F(_MMIO(0x71440), 0xc);
	MMIO_F(_MMIO(0x72440), 0xc);
	MMIO_F(_MMIO(0x7044c), 0xc);
	MMIO_F(_MMIO(0x7144c), 0xc);
	MMIO_F(_MMIO(0x7244c), 0xc);

	return 0;
}

static int iterate_skl_plus_mmio(struct intel_gvt_mmio_table_iter *iter)
{
	struct drm_i915_private *dev_priv = iter->i915;

	MMIO_D(FORCEWAKE_RENDER_GEN9);
	MMIO_D(FORCEWAKE_ACK_RENDER_GEN9);
	MMIO_D(FORCEWAKE_GT_GEN9);
	MMIO_D(FORCEWAKE_ACK_GT_GEN9);
	MMIO_D(FORCEWAKE_MEDIA_GEN9);
	MMIO_D(FORCEWAKE_ACK_MEDIA_GEN9);
	MMIO_F(DP_AUX_CH_CTL(AUX_CH_B), 6 * 4);
	MMIO_F(DP_AUX_CH_CTL(AUX_CH_C), 6 * 4);
	MMIO_F(DP_AUX_CH_CTL(AUX_CH_D), 6 * 4);
	MMIO_D(HSW_PWR_WELL_CTL1);
	MMIO_D(HSW_PWR_WELL_CTL2);
	MMIO_D(DBUF_CTL_S(0));
	MMIO_D(GEN9_PG_ENABLE);
	MMIO_D(GEN9_MEDIA_PG_IDLE_HYSTERESIS);
	MMIO_D(GEN9_RENDER_PG_IDLE_HYSTERESIS);
	MMIO_D(GEN9_GAMT_ECO_REG_RW_IA);
	MMIO_D(MMCD_MISC_CTRL);
	MMIO_D(CHICKEN_PAR1_1);
	MMIO_D(DC_STATE_EN);
	MMIO_D(DC_STATE_DEBUG);
	MMIO_D(CDCLK_CTL);
	MMIO_D(LCPLL1_CTL);
	MMIO_D(LCPLL2_CTL);
	MMIO_D(_MMIO(_DPLL1_CFGCR1));
	MMIO_D(_MMIO(_DPLL2_CFGCR1));
	MMIO_D(_MMIO(_DPLL3_CFGCR1));
	MMIO_D(_MMIO(_DPLL1_CFGCR2));
	MMIO_D(_MMIO(_DPLL2_CFGCR2));
	MMIO_D(_MMIO(_DPLL3_CFGCR2));
	MMIO_D(DPLL_CTRL1);
	MMIO_D(DPLL_CTRL2);
	MMIO_D(DPLL_STATUS);
	MMIO_D(SKL_PS_WIN_POS(PIPE_A, 0));
	MMIO_D(SKL_PS_WIN_POS(PIPE_A, 1));
	MMIO_D(SKL_PS_WIN_POS(PIPE_B, 0));
	MMIO_D(SKL_PS_WIN_POS(PIPE_B, 1));
	MMIO_D(SKL_PS_WIN_POS(PIPE_C, 0));
	MMIO_D(SKL_PS_WIN_POS(PIPE_C, 1));
	MMIO_D(SKL_PS_WIN_SZ(PIPE_A, 0));
	MMIO_D(SKL_PS_WIN_SZ(PIPE_A, 1));
	MMIO_D(SKL_PS_WIN_SZ(PIPE_B, 0));
	MMIO_D(SKL_PS_WIN_SZ(PIPE_B, 1));
	MMIO_D(SKL_PS_WIN_SZ(PIPE_C, 0));
	MMIO_D(SKL_PS_WIN_SZ(PIPE_C, 1));
	MMIO_D(SKL_PS_CTRL(PIPE_A, 0));
	MMIO_D(SKL_PS_CTRL(PIPE_A, 1));
	MMIO_D(SKL_PS_CTRL(PIPE_B, 0));
	MMIO_D(SKL_PS_CTRL(PIPE_B, 1));
	MMIO_D(SKL_PS_CTRL(PIPE_C, 0));
	MMIO_D(SKL_PS_CTRL(PIPE_C, 1));
	MMIO_D(PLANE_BUF_CFG(PIPE_A, 0));
	MMIO_D(PLANE_BUF_CFG(PIPE_A, 1));
	MMIO_D(PLANE_BUF_CFG(PIPE_A, 2));
	MMIO_D(PLANE_BUF_CFG(PIPE_A, 3));
	MMIO_D(PLANE_BUF_CFG(PIPE_B, 0));
	MMIO_D(PLANE_BUF_CFG(PIPE_B, 1));
	MMIO_D(PLANE_BUF_CFG(PIPE_B, 2));
	MMIO_D(PLANE_BUF_CFG(PIPE_B, 3));
	MMIO_D(PLANE_BUF_CFG(PIPE_C, 0));
	MMIO_D(PLANE_BUF_CFG(PIPE_C, 1));
	MMIO_D(PLANE_BUF_CFG(PIPE_C, 2));
	MMIO_D(PLANE_BUF_CFG(PIPE_C, 3));
	MMIO_D(CUR_BUF_CFG(PIPE_A));
	MMIO_D(CUR_BUF_CFG(PIPE_B));
	MMIO_D(CUR_BUF_CFG(PIPE_C));
	MMIO_F(PLANE_WM(PIPE_A, 0, 0), 4 * 8);
	MMIO_F(PLANE_WM(PIPE_A, 1, 0), 4 * 8);
	MMIO_F(PLANE_WM(PIPE_A, 2, 0), 4 * 8);
	MMIO_F(PLANE_WM(PIPE_B, 0, 0), 4 * 8);
	MMIO_F(PLANE_WM(PIPE_B, 1, 0), 4 * 8);
	MMIO_F(PLANE_WM(PIPE_B, 2, 0), 4 * 8);
	MMIO_F(PLANE_WM(PIPE_C, 0, 0), 4 * 8);
	MMIO_F(PLANE_WM(PIPE_C, 1, 0), 4 * 8);
	MMIO_F(PLANE_WM(PIPE_C, 2, 0), 4 * 8);
	MMIO_F(CUR_WM(PIPE_A, 0), 4 * 8);
	MMIO_F(CUR_WM(PIPE_B, 0), 4 * 8);
	MMIO_F(CUR_WM(PIPE_C, 0), 4 * 8);
	MMIO_D(PLANE_WM_TRANS(PIPE_A, 0));
	MMIO_D(PLANE_WM_TRANS(PIPE_A, 1));
	MMIO_D(PLANE_WM_TRANS(PIPE_A, 2));
	MMIO_D(PLANE_WM_TRANS(PIPE_B, 0));
	MMIO_D(PLANE_WM_TRANS(PIPE_B, 1));
	MMIO_D(PLANE_WM_TRANS(PIPE_B, 2));
	MMIO_D(PLANE_WM_TRANS(PIPE_C, 0));
	MMIO_D(PLANE_WM_TRANS(PIPE_C, 1));
	MMIO_D(PLANE_WM_TRANS(PIPE_C, 2));
	MMIO_D(CUR_WM_TRANS(PIPE_A));
	MMIO_D(CUR_WM_TRANS(PIPE_B));
	MMIO_D(CUR_WM_TRANS(PIPE_C));
	MMIO_D(PLANE_NV12_BUF_CFG(PIPE_A, 0));
	MMIO_D(PLANE_NV12_BUF_CFG(PIPE_A, 1));
	MMIO_D(PLANE_NV12_BUF_CFG(PIPE_A, 2));
	MMIO_D(PLANE_NV12_BUF_CFG(PIPE_A, 3));
	MMIO_D(PLANE_NV12_BUF_CFG(PIPE_B, 0));
	MMIO_D(PLANE_NV12_BUF_CFG(PIPE_B, 1));
	MMIO_D(PLANE_NV12_BUF_CFG(PIPE_B, 2));
	MMIO_D(PLANE_NV12_BUF_CFG(PIPE_B, 3));
	MMIO_D(PLANE_NV12_BUF_CFG(PIPE_C, 0));
	MMIO_D(PLANE_NV12_BUF_CFG(PIPE_C, 1));
	MMIO_D(PLANE_NV12_BUF_CFG(PIPE_C, 2));
	MMIO_D(PLANE_NV12_BUF_CFG(PIPE_C, 3));
	MMIO_D(PLANE_AUX_DIST(PIPE_A, 0));
	MMIO_D(PLANE_AUX_DIST(PIPE_A, 1));
	MMIO_D(PLANE_AUX_DIST(PIPE_A, 2));
	MMIO_D(PLANE_AUX_DIST(PIPE_A, 3));
	MMIO_D(PLANE_AUX_DIST(PIPE_B, 0));
	MMIO_D(PLANE_AUX_DIST(PIPE_B, 1));
	MMIO_D(PLANE_AUX_DIST(PIPE_B, 2));
	MMIO_D(PLANE_AUX_DIST(PIPE_B, 3));
	MMIO_D(PLANE_AUX_DIST(PIPE_C, 0));
	MMIO_D(PLANE_AUX_DIST(PIPE_C, 1));
	MMIO_D(PLANE_AUX_DIST(PIPE_C, 2));
	MMIO_D(PLANE_AUX_DIST(PIPE_C, 3));
	MMIO_D(PLANE_AUX_OFFSET(PIPE_A, 0));
	MMIO_D(PLANE_AUX_OFFSET(PIPE_A, 1));
	MMIO_D(PLANE_AUX_OFFSET(PIPE_A, 2));
	MMIO_D(PLANE_AUX_OFFSET(PIPE_A, 3));
	MMIO_D(PLANE_AUX_OFFSET(PIPE_B, 0));
	MMIO_D(PLANE_AUX_OFFSET(PIPE_B, 1));
	MMIO_D(PLANE_AUX_OFFSET(PIPE_B, 2));
	MMIO_D(PLANE_AUX_OFFSET(PIPE_B, 3));
	MMIO_D(PLANE_AUX_OFFSET(PIPE_C, 0));
	MMIO_D(PLANE_AUX_OFFSET(PIPE_C, 1));
	MMIO_D(PLANE_AUX_OFFSET(PIPE_C, 2));
	MMIO_D(PLANE_AUX_OFFSET(PIPE_C, 3));
	MMIO_D(PLANE_CTL(PIPE_A, 2));
	MMIO_D(PLANE_CTL(PIPE_B, 2));
	MMIO_D(PLANE_CTL(PIPE_C, 2));
	MMIO_D(PLANE_SURF(PIPE_A, 2));
	MMIO_D(PLANE_SURF(PIPE_B, 2));
	MMIO_D(PLANE_SURF(PIPE_C, 2));
	MMIO_D(DMC_SSP_BASE);
	MMIO_D(DMC_HTP_SKL);
	MMIO_D(DMC_LAST_WRITE);
	MMIO_D(BDW_SCRATCH1);
	MMIO_D(SKL_DFSM);
	MMIO_D(DISPIO_CR_TX_BMU_CR0);
	MMIO_F(GEN9_GFX_MOCS(0), 0x7f8);
	MMIO_F(GEN7_L3CNTLREG2, 0x80);
	MMIO_D(RPM_CONFIG0);
	MMIO_D(_MMIO(0xd08));
	MMIO_D(RC6_LOCATION);
	MMIO_D(GEN7_FF_SLICE_CS_CHICKEN1);
	MMIO_D(GEN9_CS_DEBUG_MODE1);
	/* TRTT */
	MMIO_D(TRVATTL3PTRDW(0));
	MMIO_D(TRVATTL3PTRDW(1));
	MMIO_D(TRVATTL3PTRDW(2));
	MMIO_D(TRVATTL3PTRDW(3));
	MMIO_D(TRVADR);
	MMIO_D(TRTTE);
	MMIO_D(_MMIO(0x4dfc));
	MMIO_D(_MMIO(0x46430));
	MMIO_D(_MMIO(0x46520));
	MMIO_D(_MMIO(0xc403c));
	MMIO_D(GEN8_GARBCNTL);
	MMIO_D(DMA_CTRL);
	MMIO_D(_MMIO(0x65900));
	MMIO_D(GEN6_STOLEN_RESERVED);
	MMIO_D(_MMIO(0x4068));
	MMIO_D(_MMIO(0x67054));
	MMIO_D(_MMIO(0x6e560));
	MMIO_D(_MMIO(0x6e554));
	MMIO_D(_MMIO(0x2b20));
	MMIO_D(_MMIO(0x65f00));
	MMIO_D(_MMIO(0x65f08));
	MMIO_D(_MMIO(0x320f0));
	MMIO_D(_MMIO(0x70034));
	MMIO_D(_MMIO(0x71034));
	MMIO_D(_MMIO(0x72034));
	MMIO_D(PLANE_KEYVAL(PIPE_A, 0));
	MMIO_D(PLANE_KEYVAL(PIPE_B, 0));
	MMIO_D(PLANE_KEYVAL(PIPE_C, 0));
	MMIO_D(PLANE_KEYMAX(PIPE_A, 0));
	MMIO_D(PLANE_KEYMAX(PIPE_B, 0));
	MMIO_D(PLANE_KEYMAX(PIPE_C, 0));
	MMIO_D(PLANE_KEYMSK(PIPE_A, 0));
	MMIO_D(PLANE_KEYMSK(PIPE_B, 0));
	MMIO_D(PLANE_KEYMSK(PIPE_C, 0));
	MMIO_D(_MMIO(0x44500));
#define CSFE_CHICKEN1_REG(base) _MMIO((base) + 0xD4)
	MMIO_RING_D(CSFE_CHICKEN1_REG);
#undef CSFE_CHICKEN1_REG
	MMIO_D(GEN8_HDC_CHICKEN1);
	MMIO_D(GEN9_WM_CHICKEN3);

	if (IS_KABYLAKE(dev_priv) ||
	    IS_COFFEELAKE(dev_priv) || IS_COMETLAKE(dev_priv))
		MMIO_D(GAMT_CHKN_BIT_REG);
	if (!IS_BROXTON(dev_priv))
		MMIO_D(GEN9_CTX_PREEMPT_REG);
	MMIO_F(_MMIO(DMC_MMIO_START_RANGE), 0x3000);
	return 0;
}

static int iterate_bxt_mmio(struct intel_gvt_mmio_table_iter *iter)
{
	struct drm_i915_private *dev_priv = iter->i915;

	MMIO_F(_MMIO(0x80000), 0x3000);
	MMIO_D(GEN7_SAMPLER_INSTDONE);
	MMIO_D(GEN7_ROW_INSTDONE);
	MMIO_D(GEN8_FAULT_TLB_DATA0);
	MMIO_D(GEN8_FAULT_TLB_DATA1);
	MMIO_D(ERROR_GEN6);
	MMIO_D(DONE_REG);
	MMIO_D(EIR);
	MMIO_D(PGTBL_ER);
	MMIO_D(_MMIO(0x4194));
	MMIO_D(_MMIO(0x4294));
	MMIO_D(_MMIO(0x4494));
	MMIO_RING_D(RING_PSMI_CTL);
	MMIO_RING_D(RING_DMA_FADD);
	MMIO_RING_D(RING_DMA_FADD_UDW);
	MMIO_RING_D(RING_IPEHR);
	MMIO_RING_D(RING_INSTPS);
	MMIO_RING_D(RING_BBADDR_UDW);
	MMIO_RING_D(RING_BBSTATE);
	MMIO_RING_D(RING_IPEIR);
	MMIO_F(SOFT_SCRATCH(0), 16 * 4);
	MMIO_D(BXT_P_CR_GT_DISP_PWRON);
	MMIO_D(BXT_RP_STATE_CAP);
	MMIO_D(BXT_PHY_CTL_FAMILY(DPIO_PHY0));
	MMIO_D(BXT_PHY_CTL_FAMILY(DPIO_PHY1));
	MMIO_D(BXT_PHY_CTL(PORT_A));
	MMIO_D(BXT_PHY_CTL(PORT_B));
	MMIO_D(BXT_PHY_CTL(PORT_C));
	MMIO_D(BXT_PORT_PLL_ENABLE(PORT_A));
	MMIO_D(BXT_PORT_PLL_ENABLE(PORT_B));
	MMIO_D(BXT_PORT_PLL_ENABLE(PORT_C));
	MMIO_D(BXT_PORT_CL1CM_DW0(DPIO_PHY0));
	MMIO_D(BXT_PORT_CL1CM_DW9(DPIO_PHY0));
	MMIO_D(BXT_PORT_CL1CM_DW10(DPIO_PHY0));
	MMIO_D(BXT_PORT_CL1CM_DW28(DPIO_PHY0));
	MMIO_D(BXT_PORT_CL1CM_DW30(DPIO_PHY0));
	MMIO_D(BXT_PORT_CL2CM_DW6(DPIO_PHY0));
	MMIO_D(BXT_PORT_REF_DW3(DPIO_PHY0));
	MMIO_D(BXT_PORT_REF_DW6(DPIO_PHY0));
	MMIO_D(BXT_PORT_REF_DW8(DPIO_PHY0));
	MMIO_D(BXT_PORT_CL1CM_DW0(DPIO_PHY1));
	MMIO_D(BXT_PORT_CL1CM_DW9(DPIO_PHY1));
	MMIO_D(BXT_PORT_CL1CM_DW10(DPIO_PHY1));
	MMIO_D(BXT_PORT_CL1CM_DW28(DPIO_PHY1));
	MMIO_D(BXT_PORT_CL1CM_DW30(DPIO_PHY1));
	MMIO_D(BXT_PORT_CL2CM_DW6(DPIO_PHY1));
	MMIO_D(BXT_PORT_REF_DW3(DPIO_PHY1));
	MMIO_D(BXT_PORT_REF_DW6(DPIO_PHY1));
	MMIO_D(BXT_PORT_REF_DW8(DPIO_PHY1));
	MMIO_D(BXT_PORT_PLL_EBB_0(DPIO_PHY0, DPIO_CH0));
	MMIO_D(BXT_PORT_PLL_EBB_4(DPIO_PHY0, DPIO_CH0));
	MMIO_D(BXT_PORT_PCS_DW10_LN01(DPIO_PHY0, DPIO_CH0));
	MMIO_D(BXT_PORT_PCS_DW10_GRP(DPIO_PHY0, DPIO_CH0));
	MMIO_D(BXT_PORT_PCS_DW12_LN01(DPIO_PHY0, DPIO_CH0));
	MMIO_D(BXT_PORT_PCS_DW12_LN23(DPIO_PHY0, DPIO_CH0));
	MMIO_D(BXT_PORT_PCS_DW12_GRP(DPIO_PHY0, DPIO_CH0));
	MMIO_D(BXT_PORT_TX_DW2_LN(DPIO_PHY0, DPIO_CH0, 0));
	MMIO_D(BXT_PORT_TX_DW2_GRP(DPIO_PHY0, DPIO_CH0));
	MMIO_D(BXT_PORT_TX_DW3_LN(DPIO_PHY0, DPIO_CH0, 0));
	MMIO_D(BXT_PORT_TX_DW3_GRP(DPIO_PHY0, DPIO_CH0));
	MMIO_D(BXT_PORT_TX_DW4_LN(DPIO_PHY0, DPIO_CH0, 0));
	MMIO_D(BXT_PORT_TX_DW4_GRP(DPIO_PHY0, DPIO_CH0));
	MMIO_D(BXT_PORT_TX_DW14_LN(DPIO_PHY0, DPIO_CH0, 0));
	MMIO_D(BXT_PORT_TX_DW14_LN(DPIO_PHY0, DPIO_CH0, 1));
	MMIO_D(BXT_PORT_TX_DW14_LN(DPIO_PHY0, DPIO_CH0, 2));
	MMIO_D(BXT_PORT_TX_DW14_LN(DPIO_PHY0, DPIO_CH0, 3));
	MMIO_D(BXT_PORT_PLL(DPIO_PHY0, DPIO_CH0, 0));
	MMIO_D(BXT_PORT_PLL(DPIO_PHY0, DPIO_CH0, 1));
	MMIO_D(BXT_PORT_PLL(DPIO_PHY0, DPIO_CH0, 2));
	MMIO_D(BXT_PORT_PLL(DPIO_PHY0, DPIO_CH0, 3));
	MMIO_D(BXT_PORT_PLL(DPIO_PHY0, DPIO_CH0, 6));
	MMIO_D(BXT_PORT_PLL(DPIO_PHY0, DPIO_CH0, 8));
	MMIO_D(BXT_PORT_PLL(DPIO_PHY0, DPIO_CH0, 9));
	MMIO_D(BXT_PORT_PLL(DPIO_PHY0, DPIO_CH0, 10));
	MMIO_D(BXT_PORT_PLL_EBB_0(DPIO_PHY0, DPIO_CH1));
	MMIO_D(BXT_PORT_PLL_EBB_4(DPIO_PHY0, DPIO_CH1));
	MMIO_D(BXT_PORT_PCS_DW10_LN01(DPIO_PHY0, DPIO_CH1));
	MMIO_D(BXT_PORT_PCS_DW10_GRP(DPIO_PHY0, DPIO_CH1));
	MMIO_D(BXT_PORT_PCS_DW12_LN01(DPIO_PHY0, DPIO_CH1));
	MMIO_D(BXT_PORT_PCS_DW12_LN23(DPIO_PHY0, DPIO_CH1));
	MMIO_D(BXT_PORT_PCS_DW12_GRP(DPIO_PHY0, DPIO_CH1));
	MMIO_D(BXT_PORT_TX_DW2_LN(DPIO_PHY0, DPIO_CH1, 0));
	MMIO_D(BXT_PORT_TX_DW2_GRP(DPIO_PHY0, DPIO_CH1));
	MMIO_D(BXT_PORT_TX_DW3_LN(DPIO_PHY0, DPIO_CH1, 0));
	MMIO_D(BXT_PORT_TX_DW3_GRP(DPIO_PHY0, DPIO_CH1));
	MMIO_D(BXT_PORT_TX_DW4_LN(DPIO_PHY0, DPIO_CH1, 0));
	MMIO_D(BXT_PORT_TX_DW4_GRP(DPIO_PHY0, DPIO_CH1));
	MMIO_D(BXT_PORT_TX_DW14_LN(DPIO_PHY0, DPIO_CH1, 0));
	MMIO_D(BXT_PORT_TX_DW14_LN(DPIO_PHY0, DPIO_CH1, 1));
	MMIO_D(BXT_PORT_TX_DW14_LN(DPIO_PHY0, DPIO_CH1, 2));
	MMIO_D(BXT_PORT_TX_DW14_LN(DPIO_PHY0, DPIO_CH1, 3));
	MMIO_D(BXT_PORT_PLL(DPIO_PHY0, DPIO_CH1, 0));
	MMIO_D(BXT_PORT_PLL(DPIO_PHY0, DPIO_CH1, 1));
	MMIO_D(BXT_PORT_PLL(DPIO_PHY0, DPIO_CH1, 2));
	MMIO_D(BXT_PORT_PLL(DPIO_PHY0, DPIO_CH1, 3));
	MMIO_D(BXT_PORT_PLL(DPIO_PHY0, DPIO_CH1, 6));
	MMIO_D(BXT_PORT_PLL(DPIO_PHY0, DPIO_CH1, 8));
	MMIO_D(BXT_PORT_PLL(DPIO_PHY0, DPIO_CH1, 9));
	MMIO_D(BXT_PORT_PLL(DPIO_PHY0, DPIO_CH1, 10));
	MMIO_D(BXT_PORT_PLL_EBB_0(DPIO_PHY1, DPIO_CH0));
	MMIO_D(BXT_PORT_PLL_EBB_4(DPIO_PHY1, DPIO_CH0));
	MMIO_D(BXT_PORT_PCS_DW10_LN01(DPIO_PHY1, DPIO_CH0));
	MMIO_D(BXT_PORT_PCS_DW10_GRP(DPIO_PHY1, DPIO_CH0));
	MMIO_D(BXT_PORT_PCS_DW12_LN01(DPIO_PHY1, DPIO_CH0));
	MMIO_D(BXT_PORT_PCS_DW12_LN23(DPIO_PHY1, DPIO_CH0));
	MMIO_D(BXT_PORT_PCS_DW12_GRP(DPIO_PHY1, DPIO_CH0));
	MMIO_D(BXT_PORT_TX_DW2_LN(DPIO_PHY1, DPIO_CH0, 0));
	MMIO_D(BXT_PORT_TX_DW2_GRP(DPIO_PHY1, DPIO_CH0));
	MMIO_D(BXT_PORT_TX_DW3_LN(DPIO_PHY1, DPIO_CH0, 0));
	MMIO_D(BXT_PORT_TX_DW3_GRP(DPIO_PHY1, DPIO_CH0));
	MMIO_D(BXT_PORT_TX_DW4_LN(DPIO_PHY1, DPIO_CH0, 0));
	MMIO_D(BXT_PORT_TX_DW4_GRP(DPIO_PHY1, DPIO_CH0));
	MMIO_D(BXT_PORT_TX_DW14_LN(DPIO_PHY1, DPIO_CH0, 0));
	MMIO_D(BXT_PORT_TX_DW14_LN(DPIO_PHY1, DPIO_CH0, 1));
	MMIO_D(BXT_PORT_TX_DW14_LN(DPIO_PHY1, DPIO_CH0, 2));
	MMIO_D(BXT_PORT_TX_DW14_LN(DPIO_PHY1, DPIO_CH0, 3));
	MMIO_D(BXT_PORT_PLL(DPIO_PHY1, DPIO_CH0, 0));
	MMIO_D(BXT_PORT_PLL(DPIO_PHY1, DPIO_CH0, 1));
	MMIO_D(BXT_PORT_PLL(DPIO_PHY1, DPIO_CH0, 2));
	MMIO_D(BXT_PORT_PLL(DPIO_PHY1, DPIO_CH0, 3));
	MMIO_D(BXT_PORT_PLL(DPIO_PHY1, DPIO_CH0, 6));
	MMIO_D(BXT_PORT_PLL(DPIO_PHY1, DPIO_CH0, 8));
	MMIO_D(BXT_PORT_PLL(DPIO_PHY1, DPIO_CH0, 9));
	MMIO_D(BXT_PORT_PLL(DPIO_PHY1, DPIO_CH0, 10));
	MMIO_D(BXT_DE_PLL_CTL);
	MMIO_D(BXT_DE_PLL_ENABLE);
	MMIO_D(BXT_DSI_PLL_CTL);
	MMIO_D(BXT_DSI_PLL_ENABLE);
	MMIO_D(GEN9_CLKGATE_DIS_0);
	MMIO_D(GEN9_CLKGATE_DIS_4);
	MMIO_D(HSW_TVIDEO_DIP_GCP(dev_priv, TRANSCODER_A));
	MMIO_D(HSW_TVIDEO_DIP_GCP(dev_priv, TRANSCODER_B));
	MMIO_D(HSW_TVIDEO_DIP_GCP(dev_priv, TRANSCODER_C));
	MMIO_D(RC6_CTX_BASE);
	MMIO_D(GEN8_PUSHBUS_CONTROL);
	MMIO_D(GEN8_PUSHBUS_ENABLE);
	MMIO_D(GEN8_PUSHBUS_SHIFT);
	MMIO_D(GEN6_GFXPAUSE);
	MMIO_D(GEN8_L3SQCREG1);
	MMIO_D(GEN8_L3CNTLREG);
	MMIO_D(_MMIO(0x20D8));
	MMIO_F(GEN8_RING_CS_GPR(RENDER_RING_BASE, 0), 0x40);
	MMIO_F(GEN8_RING_CS_GPR(GEN6_BSD_RING_BASE, 0), 0x40);
	MMIO_F(GEN8_RING_CS_GPR(BLT_RING_BASE, 0), 0x40);
	MMIO_F(GEN8_RING_CS_GPR(VEBOX_RING_BASE, 0), 0x40);
	MMIO_D(GEN9_CTX_PREEMPT_REG);
	MMIO_D(GEN8_PRIVATE_PAT_LO);

	return 0;
}

/**
 * intel_gvt_iterate_mmio_table - Iterate the GVT MMIO table
 * @iter: the iterator
 *
 * This function is called for iterating the GVT MMIO table when i915 is
 * taking the snapshot of the HW and GVT is building MMIO tracking table.
 */
int intel_gvt_iterate_mmio_table(struct intel_gvt_mmio_table_iter *iter)
{
	struct drm_i915_private *i915 = iter->i915;
	int ret;

	ret = iterate_generic_mmio(iter);
	if (ret)
		goto err;

	if (IS_BROADWELL(i915)) {
		ret = iterate_bdw_only_mmio(iter);
		if (ret)
			goto err;
		ret = iterate_bdw_plus_mmio(iter);
		if (ret)
			goto err;
		ret = iterate_pre_skl_mmio(iter);
		if (ret)
			goto err;
	} else if (IS_SKYLAKE(i915) ||
		   IS_KABYLAKE(i915) ||
		   IS_COFFEELAKE(i915) ||
		   IS_COMETLAKE(i915)) {
		ret = iterate_bdw_plus_mmio(iter);
		if (ret)
			goto err;
		ret = iterate_skl_plus_mmio(iter);
		if (ret)
			goto err;
	} else if (IS_BROXTON(i915)) {
		ret = iterate_bdw_plus_mmio(iter);
		if (ret)
			goto err;
		ret = iterate_skl_plus_mmio(iter);
		if (ret)
			goto err;
		ret = iterate_bxt_mmio(iter);
		if (ret)
			goto err;
	}

	return 0;
err:
	return ret;
}
EXPORT_SYMBOL_NS_GPL(intel_gvt_iterate_mmio_table, "I915_GVT");
