]> Git Repo - linux.git/commitdiff
Merge drm/drm-next into drm-intel-gt-next
authorJoonas Lahtinen <[email protected]>
Wed, 15 Sep 2021 10:23:27 +0000 (13:23 +0300)
committerJoonas Lahtinen <[email protected]>
Wed, 15 Sep 2021 10:23:27 +0000 (13:23 +0300)
Close the divergence which has caused patches not to apply and
have a solid baseline for the PXP patches that Rodrigo will send
a topic branch PR for.

Signed-off-by: Joonas Lahtinen <[email protected]>
1  2 
drivers/gpu/drm/i915/Makefile
drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c
drivers/gpu/drm/i915/gem/i915_gem_ttm.c
drivers/gpu/drm/i915/i915_debugfs.c
drivers/gpu/drm/i915/i915_drv.h
drivers/gpu/drm/i915/i915_gpu_error.c
drivers/gpu/drm/i915/i915_pci.c
drivers/gpu/drm/i915/i915_reg.h
drivers/gpu/drm/i915/intel_uncore.c
drivers/gpu/drm/ttm/ttm_bo_util.c

index c584188aa15a041f658223cfbf3ab3d5e21efc5b,642a5b5a1b81c4cf803c06e74eddd9ff9453a13d..335ba9f43d8f7c1d721970a977024e597bc78bf0
@@@ -19,6 -19,7 +19,6 @@@ subdir-ccflags-y += $(call cc-disable-w
  subdir-ccflags-y += $(call cc-disable-warning, unused-but-set-variable)
  # clang warnings
  subdir-ccflags-y += $(call cc-disable-warning, sign-compare)
 -subdir-ccflags-y += $(call cc-disable-warning, sometimes-uninitialized)
  subdir-ccflags-y += $(call cc-disable-warning, initializer-overrides)
  subdir-ccflags-y += $(call cc-disable-warning, frame-address)
  subdir-ccflags-$(CONFIG_DRM_I915_WERROR) += -Werror
@@@ -268,6 -269,7 +268,7 @@@ i915-y += 
        display/intel_pps.o \
        display/intel_qp_tables.o \
        display/intel_sdvo.o \
+       display/intel_snps_phy.o \
        display/intel_tv.o \
        display/intel_vdsc.o \
        display/intel_vrr.o \
index d2308145b4f1ee6a3f026c8955dfa4fcf2a98977,1aa249908b645a965c7c68dad93197712ca3dedd..c2f74dba0557b84a15a184d3997a6d3eaccbbe88
@@@ -733,7 -733,7 +733,7 @@@ static int eb_select_context(struct i91
                return PTR_ERR(ctx);
  
        eb->gem_context = ctx;
 -      if (rcu_access_pointer(ctx->vm))
 +      if (i915_gem_context_has_full_ppgtt(ctx))
                eb->invalid_flags |= EXEC_OBJECT_NEEDS_GTT;
  
        return 0;
@@@ -759,7 -759,11 +759,7 @@@ static int __eb_add_lut(struct i915_exe
        /* Check that the context hasn't been closed in the meantime */
        err = -EINTR;
        if (!mutex_lock_interruptible(&ctx->lut_mutex)) {
 -              struct i915_address_space *vm = rcu_access_pointer(ctx->vm);
 -
 -              if (unlikely(vm && vma->vm != vm))
 -                      err = -EAGAIN; /* user racing with ctx set-vm */
 -              else if (likely(!i915_gem_context_is_closed(ctx)))
 +              if (likely(!i915_gem_context_is_closed(ctx)))
                        err = radix_tree_insert(&ctx->handles_vma, handle, vma);
                else
                        err = -ENOENT;
@@@ -2427,7 -2431,7 +2427,7 @@@ __free_fence_array(struct eb_fence *fen
        while (n--) {
                drm_syncobj_put(ptr_mask_bits(fences[n].syncobj, 2));
                dma_fence_put(fences[n].dma_fence);
-               kfree(fences[n].chain_fence);
+               dma_fence_chain_free(fences[n].chain_fence);
        }
        kvfree(fences);
  }
@@@ -2541,9 -2545,7 +2541,7 @@@ add_timeline_fence_array(struct i915_ex
                                return -EINVAL;
                        }
  
-                       f->chain_fence =
-                               kmalloc(sizeof(*f->chain_fence),
-                                       GFP_KERNEL);
+                       f->chain_fence = dma_fence_chain_alloc();
                        if (!f->chain_fence) {
                                drm_syncobj_put(syncobj);
                                dma_fence_put(fence);
index 6995c66cbe21f785611f493cd2023c6abd50d27f,35eedc14f5228d5d4ca1f6339f52d3be987b48b2..3225fda1f0f6988643d7db7c987d54940d5005ef
@@@ -382,7 -382,6 +382,6 @@@ i915_ttm_region(struct ttm_device *bdev
  static struct sg_table *i915_ttm_tt_get_st(struct ttm_tt *ttm)
  {
        struct i915_ttm_tt *i915_tt = container_of(ttm, typeof(*i915_tt), ttm);
-       struct scatterlist *sg;
        struct sg_table *st;
        int ret;
  
        if (!st)
                return ERR_PTR(-ENOMEM);
  
-       sg = __sg_alloc_table_from_pages
-               (st, ttm->pages, ttm->num_pages, 0,
-                (unsigned long)ttm->num_pages << PAGE_SHIFT,
-                i915_sg_segment_size(), NULL, 0, GFP_KERNEL);
-       if (IS_ERR(sg)) {
+       ret = sg_alloc_table_from_pages_segment(st,
+                       ttm->pages, ttm->num_pages,
+                       0, (unsigned long)ttm->num_pages << PAGE_SHIFT,
+                       i915_sg_segment_size(), GFP_KERNEL);
+       if (ret) {
                kfree(st);
-               return ERR_CAST(sg);
+               return ERR_PTR(ret);
        }
  
        ret = dma_map_sgtable(i915_tt->dev, st, DMA_BIDIRECTIONAL, 0);
@@@ -431,7 -430,6 +430,7 @@@ i915_ttm_resource_get_st(struct drm_i91
  }
  
  static int i915_ttm_accel_move(struct ttm_buffer_object *bo,
 +                             bool clear,
                               struct ttm_resource *dst_mem,
                               struct sg_table *dst_st)
  {
                return -EINVAL;
  
        dst_level = i915_ttm_cache_level(i915, dst_mem, ttm);
 -      if (!ttm || !ttm_tt_is_populated(ttm)) {
 +      if (clear) {
                if (bo->type == ttm_bo_type_kernel)
                        return -EINVAL;
  
 -              if (ttm && !(ttm->page_flags & TTM_PAGE_FLAG_ZERO_ALLOC))
 -                      return 0;
 -
                intel_engine_pm_get(i915->gt.migrate.context->engine);
                ret = intel_context_migrate_clear(i915->gt.migrate.context, NULL,
                                                  dst_st->sgl, dst_level,
        return ret;
  }
  
 +static void __i915_ttm_move(struct ttm_buffer_object *bo, bool clear,
 +                          struct ttm_resource *dst_mem,
 +                          struct sg_table *dst_st)
 +{
 +      int ret;
 +
 +      ret = i915_ttm_accel_move(bo, clear, dst_mem, dst_st);
 +      if (ret) {
 +              struct drm_i915_gem_object *obj = i915_ttm_to_gem(bo);
 +              struct intel_memory_region *dst_reg, *src_reg;
 +              union {
 +                      struct ttm_kmap_iter_tt tt;
 +                      struct ttm_kmap_iter_iomap io;
 +              } _dst_iter, _src_iter;
 +              struct ttm_kmap_iter *dst_iter, *src_iter;
 +
 +              dst_reg = i915_ttm_region(bo->bdev, dst_mem->mem_type);
 +              src_reg = i915_ttm_region(bo->bdev, bo->resource->mem_type);
 +              GEM_BUG_ON(!dst_reg || !src_reg);
 +
 +              dst_iter = !cpu_maps_iomem(dst_mem) ?
 +                      ttm_kmap_iter_tt_init(&_dst_iter.tt, bo->ttm) :
 +                      ttm_kmap_iter_iomap_init(&_dst_iter.io, &dst_reg->iomap,
 +                                               dst_st, dst_reg->region.start);
 +
 +              src_iter = !cpu_maps_iomem(bo->resource) ?
 +                      ttm_kmap_iter_tt_init(&_src_iter.tt, bo->ttm) :
 +                      ttm_kmap_iter_iomap_init(&_src_iter.io, &src_reg->iomap,
 +                                               obj->ttm.cached_io_st,
 +                                               src_reg->region.start);
 +
 +              ttm_move_memcpy(clear, dst_mem->num_pages, dst_iter, src_iter);
 +      }
 +}
 +
  static int i915_ttm_move(struct ttm_buffer_object *bo, bool evict,
                         struct ttm_operation_ctx *ctx,
                         struct ttm_resource *dst_mem,
        struct drm_i915_gem_object *obj = i915_ttm_to_gem(bo);
        struct ttm_resource_manager *dst_man =
                ttm_manager_type(bo->bdev, dst_mem->mem_type);
 -      struct intel_memory_region *dst_reg, *src_reg;
 -      union {
 -              struct ttm_kmap_iter_tt tt;
 -              struct ttm_kmap_iter_iomap io;
 -      } _dst_iter, _src_iter;
 -      struct ttm_kmap_iter *dst_iter, *src_iter;
 +      struct ttm_tt *ttm = bo->ttm;
        struct sg_table *dst_st;
 +      bool clear;
        int ret;
  
 -      dst_reg = i915_ttm_region(bo->bdev, dst_mem->mem_type);
 -      src_reg = i915_ttm_region(bo->bdev, bo->resource->mem_type);
 -      GEM_BUG_ON(!dst_reg || !src_reg);
 -
        /* Sync for now. We could do the actual copy async. */
        ret = ttm_bo_wait_ctx(bo, ctx);
        if (ret)
        }
  
        /* Populate ttm with pages if needed. Typically system memory. */
 -      if (bo->ttm && (dst_man->use_tt ||
 -                      (bo->ttm->page_flags & TTM_PAGE_FLAG_SWAPPED))) {
 -              ret = ttm_tt_populate(bo->bdev, bo->ttm, ctx);
 +      if (ttm && (dst_man->use_tt || (ttm->page_flags & TTM_PAGE_FLAG_SWAPPED))) {
 +              ret = ttm_tt_populate(bo->bdev, ttm, ctx);
                if (ret)
                        return ret;
        }
        if (IS_ERR(dst_st))
                return PTR_ERR(dst_st);
  
 -      ret = i915_ttm_accel_move(bo, dst_mem, dst_st);
 -      if (ret) {
 -              /* If we start mapping GGTT, we can no longer use man::use_tt here. */
 -              dst_iter = !cpu_maps_iomem(dst_mem) ?
 -                      ttm_kmap_iter_tt_init(&_dst_iter.tt, bo->ttm) :
 -                      ttm_kmap_iter_iomap_init(&_dst_iter.io, &dst_reg->iomap,
 -                                               dst_st, dst_reg->region.start);
 -
 -              src_iter = !cpu_maps_iomem(bo->resource) ?
 -                      ttm_kmap_iter_tt_init(&_src_iter.tt, bo->ttm) :
 -                      ttm_kmap_iter_iomap_init(&_src_iter.io, &src_reg->iomap,
 -                                               obj->ttm.cached_io_st,
 -                                               src_reg->region.start);
 +      clear = !cpu_maps_iomem(bo->resource) && (!ttm || !ttm_tt_is_populated(ttm));
 +      if (!(clear && ttm && !(ttm->page_flags & TTM_PAGE_FLAG_ZERO_ALLOC)))
 +              __i915_ttm_move(bo, clear, dst_mem, dst_st);
  
 -              ttm_move_memcpy(bo, dst_mem->num_pages, dst_iter, src_iter);
 -      }
 -      /* Below dst_mem becomes bo->resource. */
        ttm_bo_move_sync_cleanup(bo, dst_mem);
        i915_ttm_adjust_domains_after_move(obj);
        i915_ttm_free_cached_io_st(obj);
index 2829df0aa65c2a810f8b0183659336aaed1e1ee1,44969f5dde509336d01a00594ae9301cfb0a42a6..04351a8515863be808456a47df912df8ea8be075
@@@ -238,7 -238,6 +238,7 @@@ i915_debugfs_describe_obj(struct seq_fi
  static int i915_gem_object_info(struct seq_file *m, void *data)
  {
        struct drm_i915_private *i915 = node_to_i915(m->private);
 +      struct drm_printer p = drm_seq_file_printer(m);
        struct intel_memory_region *mr;
        enum intel_region_id id;
  
                   atomic_read(&i915->mm.free_count),
                   i915->mm.shrink_memory);
        for_each_memory_region(mr, i915, id)
 -              seq_printf(m, "%s: total:%pa, available:%pa bytes\n",
 -                         mr->name, &mr->total, &mr->avail);
 +              intel_memory_region_debug(mr, &p);
  
        return 0;
  }
@@@ -420,11 -420,13 +420,11 @@@ static int i915_frequency_info(struct s
                int max_freq;
  
                rp_state_limits = intel_uncore_read(&dev_priv->uncore, GEN6_RP_STATE_LIMITS);
 -              if (IS_GEN9_LP(dev_priv)) {
 -                      rp_state_cap = intel_uncore_read(&dev_priv->uncore, BXT_RP_STATE_CAP);
 +              rp_state_cap = intel_rps_read_state_cap(rps);
 +              if (IS_GEN9_LP(dev_priv))
                        gt_perf_status = intel_uncore_read(&dev_priv->uncore, BXT_GT_PERF_STATUS);
 -              } else {
 -                      rp_state_cap = intel_uncore_read(&dev_priv->uncore, GEN6_RP_STATE_CAP);
 +              else
                        gt_perf_status = intel_uncore_read(&dev_priv->uncore, GEN6_GT_PERF_STATUS);
 -              }
  
                /* RPSTAT1 is in the GT power well */
                intel_uncore_forcewake_get(&dev_priv->uncore, FORCEWAKE_ALL);
                max_freq = (IS_GEN9_LP(dev_priv) ? rp_state_cap >> 0 :
                            rp_state_cap >> 16) & 0xff;
                max_freq *= (IS_GEN9_BC(dev_priv) ||
-                            GRAPHICS_VER(dev_priv) >= 10 ? GEN9_FREQ_SCALER : 1);
+                            GRAPHICS_VER(dev_priv) >= 11 ? GEN9_FREQ_SCALER : 1);
                seq_printf(m, "Lowest (RPN) frequency: %dMHz\n",
                           intel_gpu_freq(rps, max_freq));
  
                max_freq = (rp_state_cap & 0xff00) >> 8;
                max_freq *= (IS_GEN9_BC(dev_priv) ||
-                            GRAPHICS_VER(dev_priv) >= 10 ? GEN9_FREQ_SCALER : 1);
+                            GRAPHICS_VER(dev_priv) >= 11 ? GEN9_FREQ_SCALER : 1);
                seq_printf(m, "Nominal (RP1) frequency: %dMHz\n",
                           intel_gpu_freq(rps, max_freq));
  
                max_freq = (IS_GEN9_LP(dev_priv) ? rp_state_cap >> 16 :
                            rp_state_cap >> 0) & 0xff;
                max_freq *= (IS_GEN9_BC(dev_priv) ||
-                            GRAPHICS_VER(dev_priv) >= 10 ? GEN9_FREQ_SCALER : 1);
+                            GRAPHICS_VER(dev_priv) >= 11 ? GEN9_FREQ_SCALER : 1);
                seq_printf(m, "Max non-overclocked (RP0) frequency: %dMHz\n",
                           intel_gpu_freq(rps, max_freq));
                seq_printf(m, "Max overclocked frequency: %dMHz\n",
@@@ -634,7 -636,7 +634,7 @@@ static int i915_swizzle_info(struct seq
                           intel_uncore_read16(uncore, C0DRB3_BW));
                seq_printf(m, "C1DRB3 = 0x%04x\n",
                           intel_uncore_read16(uncore, C1DRB3_BW));
-       } else if (INTEL_GEN(dev_priv) >= 6) {
+       } else if (GRAPHICS_VER(dev_priv) >= 6) {
                seq_printf(m, "MAD_DIMM_C0 = 0x%08x\n",
                           intel_uncore_read(uncore, MAD_DIMM_C0));
                seq_printf(m, "MAD_DIMM_C1 = 0x%08x\n",
index 94175a49c15128187db144803936e7d62bfd9f47,005b1cec70075d9e6474cf5669fd56e30c6e0fdc..74fd7038527393dd319c9e30f7004d97f9195164
@@@ -332,8 -332,10 +332,10 @@@ struct drm_i915_display_funcs 
        int (*bw_calc_min_cdclk)(struct intel_atomic_state *state);
        int (*get_fifo_size)(struct drm_i915_private *dev_priv,
                             enum i9xx_plane_id i9xx_plane);
-       int (*compute_pipe_wm)(struct intel_crtc_state *crtc_state);
-       int (*compute_intermediate_wm)(struct intel_crtc_state *crtc_state);
+       int (*compute_pipe_wm)(struct intel_atomic_state *state,
+                              struct intel_crtc *crtc);
+       int (*compute_intermediate_wm)(struct intel_atomic_state *state,
+                                      struct intel_crtc *crtc);
        void (*initial_watermarks)(struct intel_atomic_state *state,
                                   struct intel_crtc *crtc);
        void (*atomic_update_watermarks)(struct intel_atomic_state *state,
@@@ -399,13 -401,14 +401,14 @@@ struct intel_fbc 
        /* This is always the inner lock when overlapping with struct_mutex and
         * it's the outer lock when overlapping with stolen_lock. */
        struct mutex lock;
-       unsigned threshold;
        unsigned int possible_framebuffer_bits;
        unsigned int busy_bits;
        struct intel_crtc *crtc;
  
        struct drm_mm_node compressed_fb;
-       struct drm_mm_node *compressed_llb;
+       struct drm_mm_node compressed_llb;
+       u8 limit;
  
        bool false_color;
  
@@@ -520,6 -523,7 +523,7 @@@ struct i915_drrs 
  #define QUIRK_PIN_SWIZZLED_PAGES (1<<5)
  #define QUIRK_INCREASE_T12_DELAY (1<<6)
  #define QUIRK_INCREASE_DDI_DISABLED_TIME (1<<7)
+ #define QUIRK_NO_PPS_BACKLIGHT_POWER_HOOK (1<<8)
  
  struct intel_fbdev;
  struct intel_fbc_work;
@@@ -629,6 -633,9 +633,9 @@@ i915_fence_timeout(const struct drm_i91
  
  #define HAS_HW_SAGV_WM(i915) (DISPLAY_VER(i915) >= 13 && !IS_DGFX(i915))
  
+ /* Amount of PSF GV points, BSpec precisely defines this */
+ #define I915_NUM_PSF_GV_POINTS 3
  struct ddi_vbt_port_info {
        /* Non-NULL if port present. */
        struct intel_bios_encoder_data *devdata;
@@@ -1142,12 -1149,16 +1149,16 @@@ struct drm_i915_private 
                        INTEL_DRAM_LPDDR5,
                } type;
                u8 num_qgv_points;
+               u8 num_psf_gv_points;
        } dram_info;
  
        struct intel_bw_info {
                /* for each QGV point */
                unsigned int deratedbw[I915_NUM_QGV_POINTS];
+               /* for each PSF GV point */
+               unsigned int psf_bw[I915_NUM_PSF_GV_POINTS];
                u8 num_qgv_points;
+               u8 num_psf_gv_points;
                u8 num_planes;
        } max_bw[6];
  
        /* For i915gm/i945gm vblank irq workaround */
        u8 vblank_enabled;
  
+       bool irq_enabled;
        /* perform PHY state sanity checks? */
        bool chv_phy_assert[2];
  
@@@ -1290,21 -1303,6 +1303,6 @@@ static inline struct drm_i915_private *
  
  #define INTEL_DEVID(dev_priv) (RUNTIME_INFO(dev_priv)->device_id)
  
- /*
-  * Deprecated: this will be replaced by individual IP checks:
-  * GRAPHICS_VER(), MEDIA_VER() and DISPLAY_VER()
-  */
- #define INTEL_GEN(dev_priv)           GRAPHICS_VER(dev_priv)
- /*
-  * Deprecated: use IS_GRAPHICS_VER(), IS_MEDIA_VER() and IS_DISPLAY_VER() as
-  * appropriate.
-  */
- #define IS_GEN_RANGE(dev_priv, s, e)  IS_GRAPHICS_VER(dev_priv, (s), (e))
- /*
-  * Deprecated: use GRAPHICS_VER(), MEDIA_VER() and DISPLAY_VER() as appropriate.
-  */
- #define IS_GEN(dev_priv, n)           (GRAPHICS_VER(dev_priv) == (n))
  #define IP_VER(ver, rel)              ((ver) << 8 | (rel))
  
  #define GRAPHICS_VER(i915)            (INTEL_INFO(i915)->graphics_ver)
  
  #define IS_DISPLAY_STEP(__i915, since, until) \
        (drm_WARN_ON(&(__i915)->drm, INTEL_DISPLAY_STEP(__i915) == STEP_NONE), \
-        INTEL_DISPLAY_STEP(__i915) >= (since) && INTEL_DISPLAY_STEP(__i915) <= (until))
+        INTEL_DISPLAY_STEP(__i915) >= (since) && INTEL_DISPLAY_STEP(__i915) < (until))
  
  #define IS_GT_STEP(__i915, since, until) \
        (drm_WARN_ON(&(__i915)->drm, INTEL_GT_STEP(__i915) == STEP_NONE), \
@@@ -1435,7 -1433,7 +1433,7 @@@ IS_SUBPLATFORM(const struct drm_i915_pr
  #define IS_GEMINILAKE(dev_priv)       IS_PLATFORM(dev_priv, INTEL_GEMINILAKE)
  #define IS_COFFEELAKE(dev_priv)       IS_PLATFORM(dev_priv, INTEL_COFFEELAKE)
  #define IS_COMETLAKE(dev_priv)        IS_PLATFORM(dev_priv, INTEL_COMETLAKE)
- #define IS_CANNONLAKE(dev_priv)       IS_PLATFORM(dev_priv, INTEL_CANNONLAKE)
+ #define IS_CANNONLAKE(dev_priv)       0
  #define IS_ICELAKE(dev_priv)  IS_PLATFORM(dev_priv, INTEL_ICELAKE)
  #define IS_JSL_EHL(dev_priv)  (IS_PLATFORM(dev_priv, INTEL_JASPERLAKE) || \
                                IS_PLATFORM(dev_priv, INTEL_ELKHARTLAKE))
  #define IS_CML_GT2(dev_priv)  (IS_COMETLAKE(dev_priv) && \
                                 INTEL_INFO(dev_priv)->gt == 2)
  
- #define IS_CNL_WITH_PORT_F(dev_priv) \
-       IS_SUBPLATFORM(dev_priv, INTEL_CANNONLAKE, INTEL_SUBPLATFORM_PORTF)
  #define IS_ICL_WITH_PORT_F(dev_priv) \
        IS_SUBPLATFORM(dev_priv, INTEL_ICELAKE, INTEL_SUBPLATFORM_PORTF)
  
  #define HAS_LOGICAL_RING_ELSQ(dev_priv) \
                (INTEL_INFO(dev_priv)->has_logical_ring_elsq)
  
- #define HAS_MASTER_UNIT_IRQ(dev_priv) (INTEL_INFO(dev_priv)->has_master_unit_irq)
  #define HAS_EXECLISTS(dev_priv) HAS_LOGICAL_RING_CONTEXTS(dev_priv)
  
  #define INTEL_PPGTT(dev_priv) (INTEL_INFO(dev_priv)->ppgtt_type)
  
  /* WaRsDisableCoarsePowerGating:skl,cnl */
  #define NEEDS_WaRsDisableCoarsePowerGating(dev_priv)                  \
-       (IS_CANNONLAKE(dev_priv) ||                                     \
-        IS_SKL_GT3(dev_priv) ||                                        \
-        IS_SKL_GT4(dev_priv))
+       (IS_SKL_GT3(dev_priv) || IS_SKL_GT4(dev_priv))
  
  #define HAS_GMBUS_IRQ(dev_priv) (GRAPHICS_VER(dev_priv) >= 4)
- #define HAS_GMBUS_BURST_READ(dev_priv) (GRAPHICS_VER(dev_priv) >= 10 || \
+ #define HAS_GMBUS_BURST_READ(dev_priv) (GRAPHICS_VER(dev_priv) >= 11 || \
                                        IS_GEMINILAKE(dev_priv) || \
                                        IS_KABYLAKE(dev_priv))
  
  
  #define HAS_DP_MST(dev_priv)  (INTEL_INFO(dev_priv)->display.has_dp_mst)
  
+ #define HAS_CDCLK_CRAWL(dev_priv)      (INTEL_INFO(dev_priv)->display.has_cdclk_crawl)
  #define HAS_DDI(dev_priv)              (INTEL_INFO(dev_priv)->display.has_ddi)
  #define HAS_FPGA_DBG_UNCLAIMED(dev_priv) (INTEL_INFO(dev_priv)->display.has_fpga_dbg)
  #define HAS_PSR(dev_priv)              (INTEL_INFO(dev_priv)->display.has_psr)
@@@ -1888,11 -1881,11 +1881,11 @@@ i915_gem_vm_lookup(struct drm_i915_file
  {
        struct i915_address_space *vm;
  
 -      rcu_read_lock();
 +      xa_lock(&file_priv->vm_xa);
        vm = xa_load(&file_priv->vm_xa, id);
 -      if (vm && !kref_get_unless_zero(&vm->ref))
 -              vm = NULL;
 -      rcu_read_unlock();
 +      if (vm)
 +              kref_get(&vm->ref);
 +      xa_unlock(&file_priv->vm_xa);
  
        return vm;
  }
index 91d5da7b0a2b8bac7e7878d54099caf4c2873a9a,9cf6ac575de15379baeb6617ea7c58ec7087c9f4..b9f66dbd46bbffda8a66d671f9cd5c22f21bfbfe
@@@ -431,7 -431,6 +431,7 @@@ static void error_print_instdone(struc
        const struct sseu_dev_info *sseu = &ee->engine->gt->info.sseu;
        int slice;
        int subslice;
 +      int iter;
  
        err_printf(m, "  INSTDONE: 0x%08x\n",
                   ee->instdone.instdone);
        if (GRAPHICS_VER(m->i915) <= 6)
                return;
  
 -      for_each_instdone_slice_subslice(m->i915, sseu, slice, subslice)
 -              err_printf(m, "  SAMPLER_INSTDONE[%d][%d]: 0x%08x\n",
 -                         slice, subslice,
 -                         ee->instdone.sampler[slice][subslice]);
 -
 -      for_each_instdone_slice_subslice(m->i915, sseu, slice, subslice)
 -              err_printf(m, "  ROW_INSTDONE[%d][%d]: 0x%08x\n",
 -                         slice, subslice,
 -                         ee->instdone.row[slice][subslice]);
 +      if (GRAPHICS_VER_FULL(m->i915) >= IP_VER(12, 50)) {
 +              for_each_instdone_gslice_dss_xehp(m->i915, sseu, iter, slice, subslice)
 +                      err_printf(m, "  SAMPLER_INSTDONE[%d][%d]: 0x%08x\n",
 +                                 slice, subslice,
 +                                 ee->instdone.sampler[slice][subslice]);
 +
 +              for_each_instdone_gslice_dss_xehp(m->i915, sseu, iter, slice, subslice)
 +                      err_printf(m, "  ROW_INSTDONE[%d][%d]: 0x%08x\n",
 +                                 slice, subslice,
 +                                 ee->instdone.row[slice][subslice]);
 +      } else {
 +              for_each_instdone_slice_subslice(m->i915, sseu, slice, subslice)
 +                      err_printf(m, "  SAMPLER_INSTDONE[%d][%d]: 0x%08x\n",
 +                                 slice, subslice,
 +                                 ee->instdone.sampler[slice][subslice]);
 +
 +              for_each_instdone_slice_subslice(m->i915, sseu, slice, subslice)
 +                      err_printf(m, "  ROW_INSTDONE[%d][%d]: 0x%08x\n",
 +                                 slice, subslice,
 +                                 ee->instdone.row[slice][subslice]);
 +      }
  
        if (GRAPHICS_VER(m->i915) < 12)
                return;
  
 +      if (GRAPHICS_VER_FULL(m->i915) >= IP_VER(12, 55)) {
 +              for_each_instdone_gslice_dss_xehp(m->i915, sseu, iter, slice, subslice)
 +                      err_printf(m, "  GEOM_SVGUNIT_INSTDONE[%d][%d]: 0x%08x\n",
 +                                 slice, subslice,
 +                                 ee->instdone.geom_svg[slice][subslice]);
 +      }
 +
        err_printf(m, "  SC_INSTDONE_EXTRA: 0x%08x\n",
                   ee->instdone.slice_common_extra[0]);
        err_printf(m, "  SC_INSTDONE_EXTRA2: 0x%08x\n",
@@@ -747,9 -727,18 +747,18 @@@ static void err_print_gt(struct drm_i91
        if (GRAPHICS_VER(m->i915) >= 12) {
                int i;
  
-               for (i = 0; i < GEN12_SFC_DONE_MAX; i++)
+               for (i = 0; i < GEN12_SFC_DONE_MAX; i++) {
+                       /*
+                        * SFC_DONE resides in the VD forcewake domain, so it
+                        * only exists if the corresponding VCS engine is
+                        * present.
+                        */
+                       if (!HAS_ENGINE(gt->_gt, _VCS(i * 2)))
+                               continue;
                        err_printf(m, "  SFC_DONE[%d]: 0x%08x\n", i,
                                   gt->sfc_done[i]);
+               }
  
                err_printf(m, "  GAM_DONE: 0x%08x\n", gt->gam_done);
        }
@@@ -1618,6 -1607,14 +1627,14 @@@ static void gt_record_regs(struct intel
  
        if (GRAPHICS_VER(i915) >= 12) {
                for (i = 0; i < GEN12_SFC_DONE_MAX; i++) {
+                       /*
+                        * SFC_DONE resides in the VD forcewake domain, so it
+                        * only exists if the corresponding VCS engine is
+                        * present.
+                        */
+                       if (!HAS_ENGINE(gt->_gt, _VCS(i * 2)))
+                               continue;
                        gt->sfc_done[i] =
                                intel_uncore_read(uncore, GEN12_SFC_DONE(i));
                }
index 4745f7aad848761db938409a79f86af76f5d333c,1bbd09ad528733f666107f2134b394b65eb42b91..d1da31df276cf6ba0c97dda72d413fb9b13865fb
@@@ -782,27 -782,13 +782,13 @@@ static const struct intel_device_info c
        .gt = 2,
  };
  
- #define GEN10_FEATURES \
-       GEN9_FEATURES, \
-       GEN(10), \
-       .dbuf.size = 1024 - 4, /* 4 blocks for bypass path allocation */ \
-       .display.has_dsc = 1, \
-       .has_coherent_ggtt = false, \
-       GLK_COLORS
- static const struct intel_device_info cnl_info = {
-       GEN10_FEATURES,
-       PLATFORM(INTEL_CANNONLAKE),
-       .gt = 2,
- };
  #define GEN11_DEFAULT_PAGE_SIZES \
        .page_sizes = I915_GTT_PAGE_SIZE_4K | \
                      I915_GTT_PAGE_SIZE_64K | \
                      I915_GTT_PAGE_SIZE_2M
  
  #define GEN11_FEATURES \
-       GEN10_FEATURES, \
+       GEN9_FEATURES, \
        GEN11_DEFAULT_PAGE_SIZES, \
        .abox_mask = BIT(0), \
        .cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) | \
                [TRANSCODER_DSI_1] = TRANSCODER_DSI1_OFFSET, \
        }, \
        GEN(11), \
+       .color = { .degamma_lut_size = 33, .gamma_lut_size = 262145 }, \
        .dbuf.size = 2048, \
        .dbuf.slice_mask = BIT(DBUF_S1) | BIT(DBUF_S2), \
-       .has_logical_ring_elsq = 1, \
-       .color = { .degamma_lut_size = 33, .gamma_lut_size = 262145 }
+       .display.has_dsc = 1, \
+       .has_coherent_ggtt = false, \
+       .has_logical_ring_elsq = 1
  
  static const struct intel_device_info icl_info = {
        GEN11_FEATURES,
  static const struct intel_device_info ehl_info = {
        GEN11_FEATURES,
        PLATFORM(INTEL_ELKHARTLAKE),
-       .require_force_probe = 1,
        .platform_engine_mask = BIT(RCS0) | BIT(BCS0) | BIT(VCS0) | BIT(VECS0),
        .ppgtt_size = 36,
  };
  static const struct intel_device_info jsl_info = {
        GEN11_FEATURES,
        PLATFORM(INTEL_JASPERLAKE),
-       .require_force_probe = 1,
        .platform_engine_mask = BIT(RCS0) | BIT(BCS0) | BIT(VCS0) | BIT(VECS0),
        .ppgtt_size = 36,
  };
@@@ -904,14 -890,14 +890,14 @@@ static const struct intel_device_info r
  
  #define DGFX_FEATURES \
        .memory_regions = REGION_SMEM | REGION_LMEM | REGION_STOLEN_LMEM, \
-       .has_master_unit_irq = 1, \
        .has_llc = 0, \
        .has_snoop = 1, \
        .is_dgfx = 1
  
 -static const struct intel_device_info dg1_info __maybe_unused = {
 +static const struct intel_device_info dg1_info = {
        GEN12_FEATURES,
        DGFX_FEATURES,
+       .graphics_rel = 10,
        PLATFORM(INTEL_DG1),
        .pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C) | BIT(PIPE_D),
        .require_force_probe = 1,
@@@ -926,6 -912,7 +912,6 @@@ static const struct intel_device_info a
        GEN12_FEATURES,
        PLATFORM(INTEL_ALDERLAKE_S),
        .pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C) | BIT(PIPE_D),
 -      .require_force_probe = 1,
        .display.has_hti = 1,
        .display.has_psr_hw_tracking = 0,
        .platform_engine_mask =
        .dma_mask_size = 39,
  };
  
+ #define XE_LPD_CURSOR_OFFSETS \
+       .cursor_offsets = { \
+               [PIPE_A] = CURSOR_A_OFFSET, \
+               [PIPE_B] = IVB_CURSOR_B_OFFSET, \
+               [PIPE_C] = IVB_CURSOR_C_OFFSET, \
+               [PIPE_D] = TGL_CURSOR_D_OFFSET, \
+       }
  #define XE_LPD_FEATURES \
-       .display.ver = 13,                                              \
-       .display.has_psr_hw_tracking = 0,                               \
-       .abox_mask = GENMASK(1, 0),                                     \
-       .pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C) | BIT(PIPE_D), \
-       .cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) |  \
-               BIT(TRANSCODER_C) | BIT(TRANSCODER_D),                  \
-       .dbuf.size = 4096,                                              \
-       .dbuf.slice_mask = BIT(DBUF_S1) | BIT(DBUF_S2) | BIT(DBUF_S3) | BIT(DBUF_S4)
+       .abox_mask = GENMASK(1, 0),                                             \
+       .color = { .degamma_lut_size = 0, .gamma_lut_size = 0 },                \
+       .cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) |          \
+               BIT(TRANSCODER_C) | BIT(TRANSCODER_D),                          \
+       .dbuf.size = 4096,                                                      \
+       .dbuf.slice_mask = BIT(DBUF_S1) | BIT(DBUF_S2) | BIT(DBUF_S3) |         \
+               BIT(DBUF_S4),                                                   \
+       .display.has_ddi = 1,                                                   \
+       .display.has_dmc = 1,                                                   \
+       .display.has_dp_mst = 1,                                                \
+       .display.has_dsb = 1,                                                   \
+       .display.has_dsc = 1,                                                   \
+       .display.has_fbc = 1,                                                   \
+       .display.has_fpga_dbg = 1,                                              \
+       .display.has_hdcp = 1,                                                  \
+       .display.has_hotplug = 1,                                               \
+       .display.has_ipc = 1,                                                   \
+       .display.has_psr = 1,                                                   \
+       .display.ver = 13,                                                      \
+       .pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C) | BIT(PIPE_D),     \
+       .pipe_offsets = {                                                       \
+               [TRANSCODER_A] = PIPE_A_OFFSET,                                 \
+               [TRANSCODER_B] = PIPE_B_OFFSET,                                 \
+               [TRANSCODER_C] = PIPE_C_OFFSET,                                 \
+               [TRANSCODER_D] = PIPE_D_OFFSET,                                 \
+       },                                                                      \
+       .trans_offsets = {                                                      \
+               [TRANSCODER_A] = TRANSCODER_A_OFFSET,                           \
+               [TRANSCODER_B] = TRANSCODER_B_OFFSET,                           \
+               [TRANSCODER_C] = TRANSCODER_C_OFFSET,                           \
+               [TRANSCODER_D] = TRANSCODER_D_OFFSET,                           \
+       },                                                                      \
+       XE_LPD_CURSOR_OFFSETS
  
  static const struct intel_device_info adl_p_info = {
        GEN12_FEATURES,
        XE_LPD_FEATURES,
        PLATFORM(INTEL_ALDERLAKE_P),
-       .has_cdclk_crawl = 1,
        .require_force_probe = 1,
+       .display.has_cdclk_crawl = 1,
        .display.has_modular_fia = 1,
+       .display.has_psr_hw_tracking = 0,
        .platform_engine_mask =
                BIT(RCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS0) | BIT(VCS2),
        .ppgtt_size = 48,
@@@ -1087,7 -1108,6 +1107,6 @@@ static const struct pci_device_id pciid
        INTEL_CML_GT2_IDS(&cml_gt2_info),
        INTEL_CML_U_GT1_IDS(&cml_gt1_info),
        INTEL_CML_U_GT2_IDS(&cml_gt2_info),
-       INTEL_CNL_IDS(&cnl_info),
        INTEL_ICL_11_IDS(&icl_info),
        INTEL_EHL_IDS(&ehl_info),
        INTEL_JSL_IDS(&jsl_info),
        INTEL_RKL_IDS(&rkl_info),
        INTEL_ADLS_IDS(&adl_s_info),
        INTEL_ADLP_IDS(&adl_p_info),
 +      INTEL_DG1_IDS(&dg1_info),
        {0, 0, 0}
  };
  MODULE_DEVICE_TABLE(pci, pciidlist);
@@@ -1215,12 -1234,12 +1234,12 @@@ static struct pci_driver i915_pci_drive
        .driver.pm = &i915_pm_ops,
  };
  
 -int i915_register_pci_driver(void)
 +int i915_pci_register_driver(void)
  {
        return pci_register_driver(&i915_pci_driver);
  }
  
 -void i915_unregister_pci_driver(void)
 +void i915_pci_unregister_driver(void)
  {
        pci_unregister_driver(&i915_pci_driver);
  }
index 00b17bc32afbbaa5c5d6e9e7f2ff76c8f25a2c05,664970f2bc62a76cf78956aa990b4d0186396fe7..76b437d5a37e9e9bed42206c366dc88740009780
@@@ -430,7 -430,7 +430,7 @@@ static inline bool i915_mmio_reg_valid(
  #define   GEN12_HCP_SFC_LOCK_ACK_BIT          REG_BIT(1)
  #define   GEN12_HCP_SFC_USAGE_BIT                     REG_BIT(0)
  
- #define GEN12_SFC_DONE(n)             _MMIO(0x1cc00 + (n) * 0x100)
+ #define GEN12_SFC_DONE(n)             _MMIO(0x1cc000 + (n) * 0x1000)
  #define GEN12_SFC_DONE_MAX            4
  
  #define RING_PP_DIR_BASE(base)                _MMIO((base) + 0x228)
  #define BXT_PORT_CL1CM_DW30(phy)      _BXT_PHY((phy), _PORT_CL1CM_DW30_BC)
  
  /*
-  * CNL/ICL Port/COMBO-PHY Registers
+  * ICL Port/COMBO-PHY Registers
   */
  #define _ICL_COMBOPHY_A                       0x162000
  #define _ICL_COMBOPHY_B                       0x6C000
                                              _RKL_COMBOPHY_D, \
                                              _ADL_COMBOPHY_E)
  
- /* CNL/ICL Port CL_DW registers */
+ /* ICL Port CL_DW registers */
  #define _ICL_PORT_CL_DW(dw, phy)      (_ICL_COMBOPHY(phy) + \
                                         4 * (dw))
  
- #define CNL_PORT_CL1CM_DW5            _MMIO(0x162014)
  #define ICL_PORT_CL_DW5(phy)          _MMIO(_ICL_PORT_CL_DW(5, phy))
  #define   CL_POWER_DOWN_ENABLE                (1 << 4)
  #define   SUS_CLOCK_CONFIG            (3 << 0)
  #define ICL_PORT_CL_DW12(phy)         _MMIO(_ICL_PORT_CL_DW(12, phy))
  #define   ICL_LANE_ENABLE_AUX         (1 << 0)
  
- /* CNL/ICL Port COMP_DW registers */
+ /* ICL Port COMP_DW registers */
  #define _ICL_PORT_COMP                        0x100
  #define _ICL_PORT_COMP_DW(dw, phy)    (_ICL_COMBOPHY(phy) + \
                                         _ICL_PORT_COMP + 4 * (dw))
  
- #define CNL_PORT_COMP_DW0             _MMIO(0x162100)
  #define ICL_PORT_COMP_DW0(phy)                _MMIO(_ICL_PORT_COMP_DW(0, phy))
  #define   COMP_INIT                   (1 << 31)
  
- #define CNL_PORT_COMP_DW1             _MMIO(0x162104)
  #define ICL_PORT_COMP_DW1(phy)                _MMIO(_ICL_PORT_COMP_DW(1, phy))
  
- #define CNL_PORT_COMP_DW3             _MMIO(0x16210c)
  #define ICL_PORT_COMP_DW3(phy)                _MMIO(_ICL_PORT_COMP_DW(3, phy))
  #define   PROCESS_INFO_DOT_0          (0 << 26)
  #define   PROCESS_INFO_DOT_1          (1 << 26)
  #define ICL_PORT_COMP_DW8(phy)                _MMIO(_ICL_PORT_COMP_DW(8, phy))
  #define   IREFGEN                     (1 << 24)
  
- #define CNL_PORT_COMP_DW9             _MMIO(0x162124)
  #define ICL_PORT_COMP_DW9(phy)                _MMIO(_ICL_PORT_COMP_DW(9, phy))
  
- #define CNL_PORT_COMP_DW10            _MMIO(0x162128)
  #define ICL_PORT_COMP_DW10(phy)               _MMIO(_ICL_PORT_COMP_DW(10, phy))
  
- /* CNL/ICL Port PCS registers */
- #define _CNL_PORT_PCS_DW1_GRP_AE      0x162304
- #define _CNL_PORT_PCS_DW1_GRP_B               0x162384
- #define _CNL_PORT_PCS_DW1_GRP_C               0x162B04
- #define _CNL_PORT_PCS_DW1_GRP_D               0x162B84
- #define _CNL_PORT_PCS_DW1_GRP_F               0x162A04
- #define _CNL_PORT_PCS_DW1_LN0_AE      0x162404
- #define _CNL_PORT_PCS_DW1_LN0_B               0x162604
- #define _CNL_PORT_PCS_DW1_LN0_C               0x162C04
- #define _CNL_PORT_PCS_DW1_LN0_D               0x162E04
- #define _CNL_PORT_PCS_DW1_LN0_F               0x162804
- #define CNL_PORT_PCS_DW1_GRP(phy)     _MMIO(_PICK(phy, \
-                                                   _CNL_PORT_PCS_DW1_GRP_AE, \
-                                                   _CNL_PORT_PCS_DW1_GRP_B, \
-                                                   _CNL_PORT_PCS_DW1_GRP_C, \
-                                                   _CNL_PORT_PCS_DW1_GRP_D, \
-                                                   _CNL_PORT_PCS_DW1_GRP_AE, \
-                                                   _CNL_PORT_PCS_DW1_GRP_F))
- #define CNL_PORT_PCS_DW1_LN0(phy)     _MMIO(_PICK(phy, \
-                                                   _CNL_PORT_PCS_DW1_LN0_AE, \
-                                                   _CNL_PORT_PCS_DW1_LN0_B, \
-                                                   _CNL_PORT_PCS_DW1_LN0_C, \
-                                                   _CNL_PORT_PCS_DW1_LN0_D, \
-                                                   _CNL_PORT_PCS_DW1_LN0_AE, \
-                                                   _CNL_PORT_PCS_DW1_LN0_F))
+ /* ICL Port PCS registers */
  #define _ICL_PORT_PCS_AUX             0x300
  #define _ICL_PORT_PCS_GRP             0x600
  #define _ICL_PORT_PCS_LN(ln)          (0x800 + (ln) * 0x100)
  #define   LATENCY_OPTIM_MASK          (0x3 << 2)
  #define   LATENCY_OPTIM_VAL(x)                ((x) << 2)
  
- /* CNL/ICL Port TX registers */
- #define _CNL_PORT_TX_AE_GRP_OFFSET            0x162340
- #define _CNL_PORT_TX_B_GRP_OFFSET             0x1623C0
- #define _CNL_PORT_TX_C_GRP_OFFSET             0x162B40
- #define _CNL_PORT_TX_D_GRP_OFFSET             0x162BC0
- #define _CNL_PORT_TX_F_GRP_OFFSET             0x162A40
- #define _CNL_PORT_TX_AE_LN0_OFFSET            0x162440
- #define _CNL_PORT_TX_B_LN0_OFFSET             0x162640
- #define _CNL_PORT_TX_C_LN0_OFFSET             0x162C40
- #define _CNL_PORT_TX_D_LN0_OFFSET             0x162E40
- #define _CNL_PORT_TX_F_LN0_OFFSET             0x162840
- #define _CNL_PORT_TX_DW_GRP(dw, port) (_PICK((port), \
-                                              _CNL_PORT_TX_AE_GRP_OFFSET, \
-                                              _CNL_PORT_TX_B_GRP_OFFSET, \
-                                              _CNL_PORT_TX_B_GRP_OFFSET, \
-                                              _CNL_PORT_TX_D_GRP_OFFSET, \
-                                              _CNL_PORT_TX_AE_GRP_OFFSET, \
-                                              _CNL_PORT_TX_F_GRP_OFFSET) + \
-                                              4 * (dw))
- #define _CNL_PORT_TX_DW_LN0(dw, port) (_PICK((port), \
-                                              _CNL_PORT_TX_AE_LN0_OFFSET, \
-                                              _CNL_PORT_TX_B_LN0_OFFSET, \
-                                              _CNL_PORT_TX_B_LN0_OFFSET, \
-                                              _CNL_PORT_TX_D_LN0_OFFSET, \
-                                              _CNL_PORT_TX_AE_LN0_OFFSET, \
-                                              _CNL_PORT_TX_F_LN0_OFFSET) + \
-                                              4 * (dw))
+ /* ICL Port TX registers */
  #define _ICL_PORT_TX_AUX              0x380
  #define _ICL_PORT_TX_GRP              0x680
  #define _ICL_PORT_TX_LN(ln)           (0x880 + (ln) * 0x100)
  #define _ICL_PORT_TX_DW_LN(dw, ln, phy) (_ICL_COMBOPHY(phy) + \
                                          _ICL_PORT_TX_LN(ln) + 4 * (dw))
  
- #define CNL_PORT_TX_DW2_GRP(port)     _MMIO(_CNL_PORT_TX_DW_GRP(2, port))
- #define CNL_PORT_TX_DW2_LN0(port)     _MMIO(_CNL_PORT_TX_DW_LN0(2, port))
  #define ICL_PORT_TX_DW2_AUX(phy)      _MMIO(_ICL_PORT_TX_DW_AUX(2, phy))
  #define ICL_PORT_TX_DW2_GRP(phy)      _MMIO(_ICL_PORT_TX_DW_GRP(2, phy))
  #define ICL_PORT_TX_DW2_LN0(phy)      _MMIO(_ICL_PORT_TX_DW_LN(2, 0, phy))
  #define   RCOMP_SCALAR(x)             ((x) << 0)
  #define   RCOMP_SCALAR_MASK           (0xFF << 0)
  
- #define _CNL_PORT_TX_DW4_LN0_AE               0x162450
- #define _CNL_PORT_TX_DW4_LN1_AE               0x1624D0
- #define CNL_PORT_TX_DW4_GRP(port)     _MMIO(_CNL_PORT_TX_DW_GRP(4, (port)))
- #define CNL_PORT_TX_DW4_LN0(port)     _MMIO(_CNL_PORT_TX_DW_LN0(4, (port)))
- #define CNL_PORT_TX_DW4_LN(ln, port)   _MMIO(_CNL_PORT_TX_DW_LN0(4, (port)) + \
-                                          ((ln) * (_CNL_PORT_TX_DW4_LN1_AE - \
-                                                   _CNL_PORT_TX_DW4_LN0_AE)))
  #define ICL_PORT_TX_DW4_AUX(phy)      _MMIO(_ICL_PORT_TX_DW_AUX(4, phy))
  #define ICL_PORT_TX_DW4_GRP(phy)      _MMIO(_ICL_PORT_TX_DW_GRP(4, phy))
  #define ICL_PORT_TX_DW4_LN0(phy)      _MMIO(_ICL_PORT_TX_DW_LN(4, 0, phy))
  #define   CURSOR_COEFF(x)             ((x) << 0)
  #define   CURSOR_COEFF_MASK           (0x3F << 0)
  
- #define CNL_PORT_TX_DW5_GRP(port)     _MMIO(_CNL_PORT_TX_DW_GRP(5, port))
- #define CNL_PORT_TX_DW5_LN0(port)     _MMIO(_CNL_PORT_TX_DW_LN0(5, port))
  #define ICL_PORT_TX_DW5_AUX(phy)      _MMIO(_ICL_PORT_TX_DW_AUX(5, phy))
  #define ICL_PORT_TX_DW5_GRP(phy)      _MMIO(_ICL_PORT_TX_DW_GRP(5, phy))
  #define ICL_PORT_TX_DW5_LN0(phy)      _MMIO(_ICL_PORT_TX_DW_LN(5, 0, phy))
  #define   RTERM_SELECT(x)             ((x) << 3)
  #define   RTERM_SELECT_MASK           (0x7 << 3)
  
- #define CNL_PORT_TX_DW7_GRP(port)     _MMIO(_CNL_PORT_TX_DW_GRP(7, (port)))
- #define CNL_PORT_TX_DW7_LN0(port)     _MMIO(_CNL_PORT_TX_DW_LN0(7, (port)))
  #define ICL_PORT_TX_DW7_AUX(phy)      _MMIO(_ICL_PORT_TX_DW_AUX(7, phy))
  #define ICL_PORT_TX_DW7_GRP(phy)      _MMIO(_ICL_PORT_TX_DW_GRP(7, phy))
  #define ICL_PORT_TX_DW7_LN0(phy)      _MMIO(_ICL_PORT_TX_DW_LN(7, 0, phy))
  #define   MG_DP_MODE_CFG_DP_X2_MODE                   (1 << 7)
  #define   MG_DP_MODE_CFG_DP_X1_MODE                   (1 << 6)
  
+ /*
+  * DG2 SNPS PHY registers (TC1 = PHY_E)
+  */
+ #define _SNPS_PHY_A_BASE                      0x168000
+ #define _SNPS_PHY_B_BASE                      0x169000
+ #define _SNPS_PHY(phy)                                _PHY(phy, \
+                                                    _SNPS_PHY_A_BASE, \
+                                                    _SNPS_PHY_B_BASE)
+ #define _SNPS2(phy, reg)                      (_SNPS_PHY(phy) - \
+                                                _SNPS_PHY_A_BASE + (reg))
+ #define _MMIO_SNPS(phy, reg)                  _MMIO(_SNPS2(phy, reg))
+ #define _MMIO_SNPS_LN(ln, phy, reg)           _MMIO(_SNPS2(phy, \
+                                                            (reg) + (ln) * 0x10))
+ #define SNPS_PHY_MPLLB_CP(phy)                        _MMIO_SNPS(phy, 0x168000)
+ #define   SNPS_PHY_MPLLB_CP_INT                       REG_GENMASK(31, 25)
+ #define   SNPS_PHY_MPLLB_CP_INT_GS            REG_GENMASK(23, 17)
+ #define   SNPS_PHY_MPLLB_CP_PROP              REG_GENMASK(15, 9)
+ #define   SNPS_PHY_MPLLB_CP_PROP_GS           REG_GENMASK(7, 1)
+ #define SNPS_PHY_MPLLB_DIV(phy)                       _MMIO_SNPS(phy, 0x168004)
+ #define   SNPS_PHY_MPLLB_FORCE_EN             REG_BIT(31)
+ #define   SNPS_PHY_MPLLB_DIV5_CLK_EN          REG_BIT(29)
+ #define   SNPS_PHY_MPLLB_V2I                  REG_GENMASK(27, 26)
+ #define   SNPS_PHY_MPLLB_FREQ_VCO             REG_GENMASK(25, 24)
+ #define   SNPS_PHY_MPLLB_PMIX_EN              REG_BIT(10)
+ #define   SNPS_PHY_MPLLB_TX_CLK_DIV           REG_GENMASK(7, 5)
+ #define SNPS_PHY_MPLLB_FRACN1(phy)            _MMIO_SNPS(phy, 0x168008)
+ #define   SNPS_PHY_MPLLB_FRACN_EN             REG_BIT(31)
+ #define   SNPS_PHY_MPLLB_FRACN_CGG_UPDATE_EN  REG_BIT(30)
+ #define   SNPS_PHY_MPLLB_FRACN_DEN            REG_GENMASK(15, 0)
+ #define SNPS_PHY_MPLLB_FRACN2(phy)            _MMIO_SNPS(phy, 0x16800C)
+ #define   SNPS_PHY_MPLLB_FRACN_REM            REG_GENMASK(31, 16)
+ #define   SNPS_PHY_MPLLB_FRACN_QUOT           REG_GENMASK(15, 0)
+ #define SNPS_PHY_MPLLB_SSCEN(phy)             _MMIO_SNPS(phy, 0x168014)
+ #define   SNPS_PHY_MPLLB_SSC_EN                       REG_BIT(31)
+ #define   SNPS_PHY_MPLLB_SSC_UP_SPREAD                REG_BIT(30)
+ #define   SNPS_PHY_MPLLB_SSC_PEAK             REG_GENMASK(29, 10)
+ #define SNPS_PHY_MPLLB_SSCSTEP(phy)           _MMIO_SNPS(phy, 0x168018)
+ #define   SNPS_PHY_MPLLB_SSC_STEPSIZE         REG_GENMASK(31, 11)
+ #define SNPS_PHY_MPLLB_DIV2(phy)              _MMIO_SNPS(phy, 0x16801C)
+ #define   SNPS_PHY_MPLLB_HDMI_PIXEL_CLK_DIV   REG_GENMASK(19, 18)
+ #define   SNPS_PHY_MPLLB_HDMI_DIV             REG_GENMASK(17, 15)
+ #define   SNPS_PHY_MPLLB_REF_CLK_DIV          REG_GENMASK(14, 12)
+ #define   SNPS_PHY_MPLLB_MULTIPLIER           REG_GENMASK(11, 0)
+ #define SNPS_PHY_REF_CONTROL(phy)             _MMIO_SNPS(phy, 0x168188)
+ #define   SNPS_PHY_REF_CONTROL_REF_RANGE      REG_GENMASK(31, 27)
+ #define SNPS_PHY_TX_REQ(phy)                  _MMIO_SNPS(phy, 0x168200)
+ #define   SNPS_PHY_TX_REQ_LN_DIS_PWR_STATE_PSR        REG_GENMASK(31, 30)
+ #define SNPS_PHY_TX_EQ(ln, phy)                       _MMIO_SNPS_LN(ln, phy, 0x168300)
+ #define   SNPS_PHY_TX_EQ_MAIN                 REG_GENMASK(23, 18)
+ #define   SNPS_PHY_TX_EQ_POST                 REG_GENMASK(15, 10)
+ #define   SNPS_PHY_TX_EQ_PRE                  REG_GENMASK(7, 2)
  /* The spec defines this only for BXT PHY0, but lets assume that this
   * would exist for PHY1 too if it had a second channel.
   */
  #define RING_HWS_PGA(base)    _MMIO((base) + 0x80)
  #define RING_ID(base)         _MMIO((base) + 0x8c)
  #define RING_HWS_PGA_GEN6(base)       _MMIO((base) + 0x2080)
 +
 +#define RING_CMD_CCTL(base)   _MMIO((base) + 0xc4)
 +/*
 + * CMD_CCTL read/write fields take a MOCS value and _not_ a table index.
 + * The lsb of each can be considered a separate enabling bit for encryption.
 + * 6:0 == default MOCS value for reads  =>  6:1 == table index for reads.
 + * 13:7 == default MOCS value for writes => 13:8 == table index for writes.
 + * 15:14 == Reserved => 31:30 are set to 0.
 + */
 +#define CMD_CCTL_WRITE_OVERRIDE_MASK REG_GENMASK(13, 7)
 +#define CMD_CCTL_READ_OVERRIDE_MASK REG_GENMASK(6, 0)
 +#define CMD_CCTL_MOCS_MASK (CMD_CCTL_WRITE_OVERRIDE_MASK | \
 +                          CMD_CCTL_READ_OVERRIDE_MASK)
 +#define CMD_CCTL_MOCS_OVERRIDE(write, read)                                 \
 +              (REG_FIELD_PREP(CMD_CCTL_WRITE_OVERRIDE_MASK, (write) << 1) | \
 +               REG_FIELD_PREP(CMD_CCTL_READ_OVERRIDE_MASK, (read) << 1))
 +
 +#define BLIT_CCTL(base) _MMIO((base) + 0x204)
 +#define   BLIT_CCTL_DST_MOCS_MASK       REG_GENMASK(14, 8)
 +#define   BLIT_CCTL_SRC_MOCS_MASK       REG_GENMASK(6, 0)
 +#define   BLIT_CCTL_MASK (BLIT_CCTL_DST_MOCS_MASK | \
 +                        BLIT_CCTL_SRC_MOCS_MASK)
 +#define   BLIT_CCTL_MOCS(dst, src)                                   \
 +              (REG_FIELD_PREP(BLIT_CCTL_DST_MOCS_MASK, (dst) << 1) | \
 +               REG_FIELD_PREP(BLIT_CCTL_SRC_MOCS_MASK, (src) << 1))
 +
  #define RING_RESET_CTL(base)  _MMIO((base) + 0xd0)
  #define   RESET_CTL_CAT_ERROR    REG_BIT(2)
  #define   RESET_CTL_READY_TO_RESET REG_BIT(1)
  #define GEN12_SC_INSTDONE_EXTRA2      _MMIO(0x7108)
  #define GEN7_SAMPLER_INSTDONE _MMIO(0xe160)
  #define GEN7_ROW_INSTDONE     _MMIO(0xe164)
 +#define XEHPG_INSTDONE_GEOM_SVG               _MMIO(0x666c)
  #define MCFG_MCR_SELECTOR             _MMIO(0xfd0)
  #define SF_MCR_SELECTOR                       _MMIO(0xfd8)
  #define GEN8_MCR_SELECTOR             _MMIO(0xfdc)
  #define MI_MODE               _MMIO(0x209c)
  # define VS_TIMER_DISPATCH                            (1 << 6)
  # define MI_FLUSH_ENABLE                              (1 << 12)
 +# define TGL_NESTED_BB_EN                             (1 << 12)
  # define ASYNC_FLIP_PERF_DISABLE                      (1 << 14)
  # define MODE_IDLE                                    (1 << 9)
  # define STOP_RING                                    (1 << 8)
  
  #define GEN11_GT_SUBSLICE_DISABLE _MMIO(0x913C)
  
 -#define GEN12_GT_DSS_ENABLE _MMIO(0x913C)
 +#define GEN12_GT_GEOMETRY_DSS_ENABLE _MMIO(0x913C)
 +#define GEN12_GT_COMPUTE_DSS_ENABLE _MMIO(0x9144)
  
  #define XEHP_EU_ENABLE                        _MMIO(0x9134)
  #define XEHP_EU_ENA_MASK              0xFF
  #define   RPN_CAP_MASK                REG_GENMASK(23, 16)
  #define BXT_RP_STATE_CAP        _MMIO(0x138170)
  #define GEN9_RP_STATE_LIMITS  _MMIO(0x138148)
 +#define XEHPSDV_RP_STATE_CAP  _MMIO(0x250014)
  
  /*
   * Logical Context regs
@@@ -4656,23 -4617,26 +4647,26 @@@ enum 
  #define _PSR2_CTL_EDP                         0x6f900
  #define EDP_PSR2_CTL(tran)                    _MMIO_TRANS2(tran, _PSR2_CTL_A)
  #define   EDP_PSR2_ENABLE                     (1 << 31)
- #define   EDP_SU_TRACK_ENABLE                 (1 << 30)
+ #define   EDP_SU_TRACK_ENABLE                 (1 << 30) /* up to adl-p */
  #define   TGL_EDP_PSR2_BLOCK_COUNT_NUM_2      (0 << 28)
  #define   TGL_EDP_PSR2_BLOCK_COUNT_NUM_3      (1 << 28)
  #define   EDP_Y_COORDINATE_ENABLE             REG_BIT(25) /* display 10, 11 and 12 */
+ #define   EDP_PSR2_SU_SDP_SCANLINE            REG_BIT(25) /* display 13+ */
  #define   EDP_MAX_SU_DISABLE_TIME(t)          ((t) << 20)
  #define   EDP_MAX_SU_DISABLE_TIME_MASK                (0x1f << 20)
  #define   EDP_PSR2_IO_BUFFER_WAKE_MAX_LINES   8
  #define   EDP_PSR2_IO_BUFFER_WAKE(lines)      ((EDP_PSR2_IO_BUFFER_WAKE_MAX_LINES - (lines)) << 13)
  #define   EDP_PSR2_IO_BUFFER_WAKE_MASK                (3 << 13)
  #define   TGL_EDP_PSR2_IO_BUFFER_WAKE_MIN_LINES       5
- #define   TGL_EDP_PSR2_IO_BUFFER_WAKE(lines)  (((lines) - TGL_EDP_PSR2_IO_BUFFER_WAKE_MIN_LINES) << 13)
+ #define   TGL_EDP_PSR2_IO_BUFFER_WAKE_SHIFT   13
+ #define   TGL_EDP_PSR2_IO_BUFFER_WAKE(lines)  (((lines) - TGL_EDP_PSR2_IO_BUFFER_WAKE_MIN_LINES) << TGL_EDP_PSR2_IO_BUFFER_WAKE_SHIFT)
  #define   TGL_EDP_PSR2_IO_BUFFER_WAKE_MASK    (7 << 13)
  #define   EDP_PSR2_FAST_WAKE_MAX_LINES                8
  #define   EDP_PSR2_FAST_WAKE(lines)           ((EDP_PSR2_FAST_WAKE_MAX_LINES - (lines)) << 11)
  #define   EDP_PSR2_FAST_WAKE_MASK             (3 << 11)
  #define   TGL_EDP_PSR2_FAST_WAKE_MIN_LINES    5
- #define   TGL_EDP_PSR2_FAST_WAKE(lines)               (((lines) - TGL_EDP_PSR2_FAST_WAKE_MIN_LINES) << 10)
+ #define   TGL_EDP_PSR2_FAST_WAKE_MIN_SHIFT    10
+ #define   TGL_EDP_PSR2_FAST_WAKE(lines)               (((lines) - TGL_EDP_PSR2_FAST_WAKE_MIN_LINES) << TGL_EDP_PSR2_FAST_WAKE_MIN_SHIFT)
  #define   TGL_EDP_PSR2_FAST_WAKE_MASK         (7 << 10)
  #define   EDP_PSR2_TP2_TIME_500us             (0 << 8)
  #define   EDP_PSR2_TP2_TIME_100us             (1 << 8)
  #define PSR2_SU_STATUS_MASK(frame)    (0x3ff << PSR2_SU_STATUS_SHIFT(frame))
  #define PSR2_SU_STATUS_FRAMES         8
  
- #define _PSR2_MAN_TRK_CTL_A                           0x60910
- #define _PSR2_MAN_TRK_CTL_EDP                         0x6f910
- #define PSR2_MAN_TRK_CTL(tran)                                _MMIO_TRANS2(tran, _PSR2_MAN_TRK_CTL_A)
- #define  PSR2_MAN_TRK_CTL_ENABLE                      REG_BIT(31)
- #define  PSR2_MAN_TRK_CTL_SU_REGION_START_ADDR_MASK   REG_GENMASK(30, 21)
- #define  PSR2_MAN_TRK_CTL_SU_REGION_START_ADDR(val)   REG_FIELD_PREP(PSR2_MAN_TRK_CTL_SU_REGION_START_ADDR_MASK, val)
+ #define _PSR2_MAN_TRK_CTL_A                                   0x60910
+ #define _PSR2_MAN_TRK_CTL_EDP                                 0x6f910
+ #define PSR2_MAN_TRK_CTL(tran)                                        _MMIO_TRANS2(tran, _PSR2_MAN_TRK_CTL_A)
+ #define  PSR2_MAN_TRK_CTL_ENABLE                              REG_BIT(31)
+ #define  PSR2_MAN_TRK_CTL_SU_REGION_START_ADDR_MASK           REG_GENMASK(30, 21)
+ #define  PSR2_MAN_TRK_CTL_SU_REGION_START_ADDR(val)           REG_FIELD_PREP(PSR2_MAN_TRK_CTL_SU_REGION_START_ADDR_MASK, val)
  #define  PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR_MASK             REG_GENMASK(20, 11)
  #define  PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR(val)             REG_FIELD_PREP(PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR_MASK, val)
- #define  PSR2_MAN_TRK_CTL_SF_SINGLE_FULL_FRAME                REG_BIT(3)
- #define  PSR2_MAN_TRK_CTL_SF_CONTINUOS_FULL_FRAME     REG_BIT(2)
- #define  PSR2_MAN_TRK_CTL_SF_PARTIAL_FRAME_UPDATE     REG_BIT(1)
+ #define  PSR2_MAN_TRK_CTL_SF_SINGLE_FULL_FRAME                        REG_BIT(3)
+ #define  PSR2_MAN_TRK_CTL_SF_CONTINUOS_FULL_FRAME             REG_BIT(2)
+ #define  PSR2_MAN_TRK_CTL_SF_PARTIAL_FRAME_UPDATE             REG_BIT(1)
+ #define  ADLP_PSR2_MAN_TRK_CTL_SU_REGION_START_ADDR_MASK      REG_GENMASK(28, 16)
+ #define  ADLP_PSR2_MAN_TRK_CTL_SU_REGION_START_ADDR(val)      REG_FIELD_PREP(ADLP_PSR2_MAN_TRK_CTL_SU_REGION_START_ADDR_MASK, val)
+ #define  ADLP_PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR_MASK                REG_GENMASK(12, 0)
+ #define  ADLP_PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR(val)                REG_FIELD_PREP(ADLP_PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR_MASK, val)
+ #define  ADLP_PSR2_MAN_TRK_CTL_SF_SINGLE_FULL_FRAME           REG_BIT(14)
+ #define  ADLP_PSR2_MAN_TRK_CTL_SF_CONTINUOS_FULL_FRAME                REG_BIT(13)
  
  /* Icelake DSC Rate Control Range Parameter Registers */
  #define DSCA_RC_RANGE_PARAMETERS_0            _MMIO(0x6B240)
  #define   PIPEMISC_HDR_MODE_PRECISION (1 << 23) /* icl+ */
  #define   PIPEMISC_OUTPUT_COLORSPACE_YUV  (1 << 11)
  #define   PIPEMISC_PIXEL_ROUNDING_TRUNC       REG_BIT(8) /* tgl+ */
- #define   PIPEMISC_DITHER_BPC_MASK    (7 << 5)
- #define   PIPEMISC_DITHER_8_BPC               (0 << 5)
- #define   PIPEMISC_DITHER_10_BPC      (1 << 5)
- #define   PIPEMISC_DITHER_6_BPC               (2 << 5)
- #define   PIPEMISC_DITHER_12_BPC      (3 << 5)
+ /*
+  * For Display < 13, Bits 5-7 of PIPE MISC represent DITHER BPC with
+  * valid values of: 6, 8, 10 BPC.
+  * ADLP+, the bits 5-7 represent PORT OUTPUT BPC with valid values of:
+  * 6, 8, 10, 12 BPC.
+  */
+ #define   PIPEMISC_BPC_MASK           (7 << 5)
+ #define   PIPEMISC_8_BPC              (0 << 5)
+ #define   PIPEMISC_10_BPC             (1 << 5)
+ #define   PIPEMISC_6_BPC              (2 << 5)
+ #define   PIPEMISC_12_BPC_ADLP                (4 << 5) /* adlp+ */
  #define   PIPEMISC_DITHER_ENABLE      (1 << 4)
  #define   PIPEMISC_DITHER_TYPE_MASK   (3 << 2)
  #define   PIPEMISC_DITHER_TYPE_SP     (0 << 2)
  #define SKL_PS_ECC_STAT(pipe, id)  _MMIO_PIPE(pipe,     \
                        _ID(id, _PS_ECC_STAT_1A, _PS_ECC_STAT_2A),   \
                        _ID(id, _PS_ECC_STAT_1B, _PS_ECC_STAT_2B))
- #define CNL_PS_COEF_INDEX_SET(pipe, id, set)  _MMIO_PIPE(pipe,    \
+ #define GLK_PS_COEF_INDEX_SET(pipe, id, set)  _MMIO_PIPE(pipe,    \
                        _ID(id, _PS_COEF_SET0_INDEX_1A, _PS_COEF_SET0_INDEX_2A) + (set) * 8, \
                        _ID(id, _PS_COEF_SET0_INDEX_1B, _PS_COEF_SET0_INDEX_2B) + (set) * 8)
  
- #define CNL_PS_COEF_DATA_SET(pipe, id, set)  _MMIO_PIPE(pipe,     \
+ #define GLK_PS_COEF_DATA_SET(pipe, id, set)  _MMIO_PIPE(pipe,     \
                        _ID(id, _PS_COEF_SET0_DATA_1A, _PS_COEF_SET0_DATA_2A) + (set) * 8, \
                        _ID(id, _PS_COEF_SET0_DATA_1B, _PS_COEF_SET0_DATA_2B) + (set) * 8)
  /* legacy palette */
  #define  GAMMA_MODE_MODE_12BIT_MULTI_SEGMENTED        (3 << 0) /* icl + */
  
  /* DMC */
- #define DMC_PROGRAM(i)                _MMIO(0x80000 + (i) * 4)
+ #define DMC_PROGRAM(addr, i)  _MMIO((addr) + (i) * 4)
  #define DMC_SSP_BASE_ADDR_GEN9        0x00002FC0
  #define DMC_HTP_ADDR_SKL      0x00500034
  #define DMC_SSP_BASE          _MMIO(0x8F074)
  #define  DSI1_NON_TE                  (1 << 31)
  #define  DSI0_NON_TE                  (1 << 30)
  #define  ICL_AUX_CHANNEL_E            (1 << 29)
- #define  CNL_AUX_CHANNEL_F            (1 << 28)
+ #define  ICL_AUX_CHANNEL_F            (1 << 28)
  #define  GEN9_AUX_CHANNEL_D           (1 << 27)
  #define  GEN9_AUX_CHANNEL_C           (1 << 26)
  #define  GEN9_AUX_CHANNEL_B           (1 << 25)
  #define  GEN11_GT_DW1_IRQ             (1 << 1)
  #define  GEN11_GT_DW0_IRQ             (1 << 0)
  
- #define DG1_MSTR_UNIT_INTR            _MMIO(0x190008)
+ #define DG1_MSTR_TILE_INTR            _MMIO(0x190008)
  #define   DG1_MSTR_IRQ                        REG_BIT(31)
- #define   DG1_MSTR_UNIT(u)            REG_BIT(u)
+ #define   DG1_MSTR_TILE(t)            REG_BIT(t)
  
  #define GEN11_DISPLAY_INT_CTL         _MMIO(0x44200)
  #define  GEN11_DISPLAY_IRQ_ENABLE     (1 << 31)
  # define CHICKEN3_DGMG_DONE_FIX_DISABLE               (1 << 2)
  
  #define CHICKEN_PAR1_1                        _MMIO(0x42080)
+ #define  IGNORE_KVMR_PIPE_A           REG_BIT(23)
  #define  KBL_ARB_FILL_SPARE_22                REG_BIT(22)
  #define  DIS_RAM_BYPASS_PSR2_MAN_TRACK        (1 << 16)
  #define  SKL_DE_COMPRESSED_HASH_MODE  (1 << 15)
  #define  KVM_CONFIG_CHANGE_NOTIFICATION_SELECT        (1 << 14)
  
  #define CHICKEN_MISC_2                _MMIO(0x42084)
- #define  CNL_COMP_PWR_DOWN    (1 << 23)
  #define  KBL_ARB_FILL_SPARE_14        REG_BIT(14)
  #define  KBL_ARB_FILL_SPARE_13        REG_BIT(13)
  #define  GLK_CL2_PWR_DOWN     (1 << 12)
                                            [TRANSCODER_B] = _CHICKEN_TRANS_B, \
                                            [TRANSCODER_C] = _CHICKEN_TRANS_C, \
                                            [TRANSCODER_D] = _CHICKEN_TRANS_D))
- #define  HSW_FRAME_START_DELAY_MASK   (3 << 27)
- #define  HSW_FRAME_START_DELAY(x)     ((x) << 27) /* 0-3 */
- #define  VSC_DATA_SEL_SOFTWARE_CONTROL        (1 << 25) /* GLK and CNL+ */
- #define  DDI_TRAINING_OVERRIDE_ENABLE (1 << 19)
- #define  DDI_TRAINING_OVERRIDE_VALUE  (1 << 18)
- #define  DDIE_TRAINING_OVERRIDE_ENABLE        (1 << 17) /* CHICKEN_TRANS_A only */
- #define  DDIE_TRAINING_OVERRIDE_VALUE (1 << 16) /* CHICKEN_TRANS_A only */
- #define  PSR2_ADD_VERTICAL_LINE_COUNT   (1 << 15)
- #define  PSR2_VSC_ENABLE_PROG_HEADER    (1 << 12)
+ #define  HSW_FRAME_START_DELAY_MASK   REG_GENMASK(28, 27)
+ #define  HSW_FRAME_START_DELAY(x)     REG_FIELD_PREP(HSW_FRAME_START_DELAY_MASK, x)
+ #define  VSC_DATA_SEL_SOFTWARE_CONTROL        REG_BIT(25) /* GLK */
+ #define  FECSTALL_DIS_DPTSTREAM_DPTTG REG_BIT(23)
+ #define  DDI_TRAINING_OVERRIDE_ENABLE REG_BIT(19)
+ #define  DDI_TRAINING_OVERRIDE_VALUE  REG_BIT(18)
+ #define  DDIE_TRAINING_OVERRIDE_ENABLE        REG_BIT(17) /* CHICKEN_TRANS_A only */
+ #define  DDIE_TRAINING_OVERRIDE_VALUE REG_BIT(16) /* CHICKEN_TRANS_A only */
+ #define  PSR2_ADD_VERTICAL_LINE_COUNT REG_BIT(15)
+ #define  PSR2_VSC_ENABLE_PROG_HEADER  REG_BIT(12)
  
  #define DISP_ARB_CTL  _MMIO(0x45000)
  #define  DISP_FBC_MEMORY_WAKE         (1 << 31)
  
  #define GEN8_CHICKEN_DCPR_1           _MMIO(0x46430)
  #define   SKL_SELECT_ALTERNATE_DC_EXIT        (1 << 30)
- #define   CNL_DELAY_PMRSP             (1 << 22)
+ #define   ICL_DELAY_PMRSP             (1 << 22)
  #define   MASK_WAKEMEM                        (1 << 13)
- #define   CNL_DDI_CLOCK_REG_ACCESS_ON (1 << 7)
  
  #define GEN11_CHICKEN_DCPR_2                  _MMIO(0x46434)
  #define   DCPR_MASK_MAXLATENCY_MEMUP_CLR      REG_BIT(27)
  #define   SKL_DFSM_PIPE_B_DISABLE     (1 << 21)
  #define   SKL_DFSM_PIPE_C_DISABLE     (1 << 28)
  #define   TGL_DFSM_PIPE_D_DISABLE     (1 << 22)
- #define   CNL_DFSM_DISPLAY_DSC_DISABLE        (1 << 7)
+ #define   GLK_DFSM_DISPLAY_DSC_DISABLE        (1 << 7)
  
  #define SKL_DSSM                              _MMIO(0x51004)
- #define CNL_DSSM_CDCLK_PLL_REFCLK_24MHz               (1 << 31)
  #define ICL_DSSM_CDCLK_PLL_REFCLK_MASK                (7 << 29)
  #define ICL_DSSM_CDCLK_PLL_REFCLK_24MHz               (0 << 29)
  #define ICL_DSSM_CDCLK_PLL_REFCLK_19_2MHz     (1 << 29)
  
  /* GEN8 chicken */
  #define HDC_CHICKEN0                          _MMIO(0x7300)
- #define CNL_HDC_CHICKEN0                      _MMIO(0xE5F0)
  #define ICL_HDC_MODE                          _MMIO(0xE5F4)
  #define  HDC_FORCE_CSR_NON_COHERENT_OVR_DISABLE       (1 << 15)
  #define  HDC_FENCE_DEST_SLM_DISABLE           (1 << 14)
  #define _PIPEC_CHICKEN                                0x72038
  #define PIPE_CHICKEN(pipe)                    _MMIO_PIPE(pipe, _PIPEA_CHICKEN,\
                                                           _PIPEB_CHICKEN)
- #define   UNDERRUN_RECOVERY_DISABLE           REG_BIT(30)
+ #define   UNDERRUN_RECOVERY_DISABLE_ADLP      REG_BIT(30)
+ #define   UNDERRUN_RECOVERY_ENABLE_DG2                REG_BIT(30)
  #define   PIXEL_ROUNDING_TRUNC_FB_PASSTHRU    (1 << 15)
  #define   PER_PIXEL_ALPHA_BYPASS_EN           (1 << 7)
  
  #define   ICL_PCODE_MEM_SUBSYSYSTEM_INFO      0xd
  #define     ICL_PCODE_MEM_SS_READ_GLOBAL_INFO (0x0 << 8)
  #define     ICL_PCODE_MEM_SS_READ_QGV_POINT_INFO(point)       (((point) << 16) | (0x1 << 8))
+ #define     ADL_PCODE_MEM_SS_READ_PSF_GV_INFO ((0) | (0x2 << 8))
  #define   ICL_PCODE_SAGV_DE_MEM_SS_CONFIG     0xe
  #define     ICL_PCODE_POINTS_RESTRICTED               0x0
- #define     ICL_PCODE_POINTS_RESTRICTED_MASK  0x1
+ #define     ICL_PCODE_POINTS_RESTRICTED_MASK  0xf
+ #define   ADLS_PSF_PT_SHIFT                   8
+ #define   ADLS_QGV_PT_MASK                    REG_GENMASK(7, 0)
+ #define   ADLS_PSF_PT_MASK                    REG_GENMASK(10, 8)
  #define   GEN6_PCODE_READ_D_COMP              0x10
  #define   GEN6_PCODE_WRITE_D_COMP             0x11
  #define   ICL_PCODE_EXIT_TCCOLD                       0x12
  #define   HSW_SAMPLE_C_PERFORMANCE    (1 << 9)
  #define   GEN8_CENTROID_PIXEL_OPT_DIS (1 << 8)
  #define   GEN9_DISABLE_OCL_OOB_SUPPRESS_LOGIC (1 << 5)
- #define   CNL_FAST_ANISO_L1_BANKING_FIX       (1 << 4)
  #define   GEN8_SAMPLER_POWER_BYPASS_DIS       (1 << 1)
  
  #define GEN9_HALF_SLICE_CHICKEN7      _MMIO(0xe194)
  /* HSW/BDW power well */
  #define   HSW_PW_CTL_IDX_GLOBAL                       15
  
- /* SKL/BXT/GLK/CNL power wells */
+ /* SKL/BXT/GLK power wells */
  #define   SKL_PW_CTL_IDX_PW_2                 15
  #define   SKL_PW_CTL_IDX_PW_1                 14
- #define   CNL_PW_CTL_IDX_AUX_F                        12
- #define   CNL_PW_CTL_IDX_AUX_D                        11
  #define   GLK_PW_CTL_IDX_AUX_C                        10
  #define   GLK_PW_CTL_IDX_AUX_B                        9
  #define   GLK_PW_CTL_IDX_AUX_A                        8
- #define   CNL_PW_CTL_IDX_DDI_F                        6
  #define   SKL_PW_CTL_IDX_DDI_D                        4
  #define   SKL_PW_CTL_IDX_DDI_C                        3
  #define   SKL_PW_CTL_IDX_DDI_B                        2
@@@ -9887,19 -9862,6 +9892,6 @@@ enum skl_power_gate 
        ((pw_idx) - ICL_PW_CTL_IDX_PW_1 + SKL_PG1)
  #define  SKL_FUSE_PG_DIST_STATUS(pg)          (1 << (27 - (pg)))
  
- #define _CNL_AUX_REG_IDX(pw_idx)      ((pw_idx) - GLK_PW_CTL_IDX_AUX_B)
- #define _CNL_AUX_ANAOVRD1_B           0x162250
- #define _CNL_AUX_ANAOVRD1_C           0x162210
- #define _CNL_AUX_ANAOVRD1_D           0x1622D0
- #define _CNL_AUX_ANAOVRD1_F           0x162A90
- #define CNL_AUX_ANAOVRD1(pw_idx)      _MMIO(_PICK(_CNL_AUX_REG_IDX(pw_idx), \
-                                                   _CNL_AUX_ANAOVRD1_B, \
-                                                   _CNL_AUX_ANAOVRD1_C, \
-                                                   _CNL_AUX_ANAOVRD1_D, \
-                                                   _CNL_AUX_ANAOVRD1_F))
- #define   CNL_AUX_ANAOVRD1_ENABLE     (1 << 16)
- #define   CNL_AUX_ANAOVRD1_LDO_BYPASS (1 << 23)
  #define _ICL_AUX_REG_IDX(pw_idx)      ((pw_idx) - ICL_PW_CTL_IDX_AUX_A)
  #define _ICL_AUX_ANAOVRD1_A           0x162398
  #define _ICL_AUX_ANAOVRD1_B           0x6C398
  #define  TRANS_DDI_BPC_10             (1 << 20)
  #define  TRANS_DDI_BPC_6              (2 << 20)
  #define  TRANS_DDI_BPC_12             (3 << 20)
- #define  TRANS_DDI_PORT_SYNC_MASTER_SELECT_MASK       REG_GENMASK(19, 18) /* bdw-cnl */
+ #define  TRANS_DDI_PORT_SYNC_MASTER_SELECT_MASK       REG_GENMASK(19, 18)
  #define  TRANS_DDI_PORT_SYNC_MASTER_SELECT(x) REG_FIELD_PREP(TRANS_DDI_PORT_SYNC_MASTER_SELECT_MASK, (x))
  #define  TRANS_DDI_PVSYNC             (1 << 17)
  #define  TRANS_DDI_PHSYNC             (1 << 16)
- #define  TRANS_DDI_PORT_SYNC_ENABLE   REG_BIT(15) /* bdw-cnl */
+ #define  TRANS_DDI_PORT_SYNC_ENABLE   REG_BIT(15)
  #define  TRANS_DDI_EDP_INPUT_MASK     (7 << 12)
  #define  TRANS_DDI_EDP_INPUT_A_ON     (0 << 12)
  #define  TRANS_DDI_EDP_INPUT_A_ONOFF  (4 << 12)
  #define  PORT_SYNC_MODE_MASTER_SELECT_MASK    REG_GENMASK(2, 0)
  #define  PORT_SYNC_MODE_MASTER_SELECT(x)      REG_FIELD_PREP(PORT_SYNC_MODE_MASTER_SELECT_MASK, (x))
  
+ #define TRANS_CMTG_CHICKEN            _MMIO(0x6fa90)
+ #define  DISABLE_DPT_CLK_GATING               REG_BIT(1)
  /* DisplayPort Transport Control */
  #define _DP_TP_CTL_A                  0x64040
  #define _DP_TP_CTL_B                  0x64140
  #define TRANS_MSA_MISC(tran) _MMIO_TRANS2(tran, _TRANSA_MSA_MISC)
  /* See DP_MSA_MISC_* for the bit definitions */
  
+ #define _TRANS_A_SET_CONTEXT_LATENCY          0x6007C
+ #define _TRANS_B_SET_CONTEXT_LATENCY          0x6107C
+ #define _TRANS_C_SET_CONTEXT_LATENCY          0x6207C
+ #define _TRANS_D_SET_CONTEXT_LATENCY          0x6307C
+ #define TRANS_SET_CONTEXT_LATENCY(tran)               _MMIO_TRANS2(tran, _TRANS_A_SET_CONTEXT_LATENCY)
+ #define  TRANS_SET_CONTEXT_LATENCY_MASK               REG_GENMASK(15, 0)
+ #define  TRANS_SET_CONTEXT_LATENCY_VALUE(x)   REG_FIELD_PREP(TRANS_SET_CONTEXT_LATENCY_MASK, (x))
  /* LCPLL Control */
  #define LCPLL_CTL                     _MMIO(0x130040)
  #define  LCPLL_PLL_DISABLE            (1 << 31)
  #define DPLL_CFGCR1(id)       _MMIO_PIPE((id) - SKL_DPLL1, _DPLL1_CFGCR1, _DPLL2_CFGCR1)
  #define DPLL_CFGCR2(id)       _MMIO_PIPE((id) - SKL_DPLL1, _DPLL1_CFGCR2, _DPLL2_CFGCR2)
  
- /*
-  * CNL Clocks
-  */
- #define DPCLKA_CFGCR0                         _MMIO(0x6C200)
- #define  DPCLKA_CFGCR0_DDI_CLK_OFF(port)      (1 << ((port) ==  PORT_F ? 23 : \
-                                                     (port) + 10))
- #define  DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(port)        ((port) == PORT_F ? 21 : \
-                                               (port) * 2)
- #define  DPCLKA_CFGCR0_DDI_CLK_SEL_MASK(port) (3 << DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(port))
- #define  DPCLKA_CFGCR0_DDI_CLK_SEL(pll, port) ((pll) << DPCLKA_CFGCR0_DDI_CLK_SEL_SHIFT(port))
  /* ICL Clocks */
  #define ICL_DPCLKA_CFGCR0                     _MMIO(0x164280)
  #define  ICL_DPCLKA_CFGCR0_DDI_CLK_OFF(phy)   (1 << _PICK(phy, 10, 11, 24, 4, 5))
                                                        ADLS_DPCLKA_DDIJ_SEL_MASK, \
                                                        ADLS_DPCLKA_DDIK_SEL_MASK)
  
- /* CNL PLL */
+ /* ICL PLL */
  #define DPLL0_ENABLE          0x46010
  #define DPLL1_ENABLE          0x46014
  #define _ADLS_DPLL2_ENABLE    0x46018
  #define  PLL_LOCK             (1 << 30)
  #define  PLL_POWER_ENABLE     (1 << 27)
  #define  PLL_POWER_STATE      (1 << 26)
- #define CNL_DPLL_ENABLE(pll)  _MMIO_PLL3(pll, DPLL0_ENABLE, DPLL1_ENABLE, \
+ #define ICL_DPLL_ENABLE(pll)  _MMIO_PLL3(pll, DPLL0_ENABLE, DPLL1_ENABLE, \
                                           _ADLS_DPLL2_ENABLE, _ADLS_DPLL3_ENABLE)
  
+ #define _DG2_PLL3_ENABLE      0x4601C
+ #define DG2_PLL_ENABLE(pll) _MMIO_PLL3(pll, DPLL0_ENABLE, DPLL1_ENABLE, \
+                                      _ADLS_DPLL2_ENABLE, _DG2_PLL3_ENABLE)
  #define TBT_PLL_ENABLE                _MMIO(0x46020)
  
  #define _MG_PLL1_ENABLE               0x46030
                                                   _MG_PLL_TDC_COLDST_BIAS_PORT1, \
                                                   _MG_PLL_TDC_COLDST_BIAS_PORT2)
  
- #define _CNL_DPLL0_CFGCR0             0x6C000
- #define _CNL_DPLL1_CFGCR0             0x6C080
- #define  DPLL_CFGCR0_HDMI_MODE                (1 << 30)
- #define  DPLL_CFGCR0_SSC_ENABLE               (1 << 29)
- #define  DPLL_CFGCR0_SSC_ENABLE_ICL   (1 << 25)
- #define  DPLL_CFGCR0_LINK_RATE_MASK   (0xf << 25)
- #define  DPLL_CFGCR0_LINK_RATE_2700   (0 << 25)
- #define  DPLL_CFGCR0_LINK_RATE_1350   (1 << 25)
- #define  DPLL_CFGCR0_LINK_RATE_810    (2 << 25)
- #define  DPLL_CFGCR0_LINK_RATE_1620   (3 << 25)
- #define  DPLL_CFGCR0_LINK_RATE_1080   (4 << 25)
- #define  DPLL_CFGCR0_LINK_RATE_2160   (5 << 25)
- #define  DPLL_CFGCR0_LINK_RATE_3240   (6 << 25)
- #define  DPLL_CFGCR0_LINK_RATE_4050   (7 << 25)
- #define  DPLL_CFGCR0_DCO_FRACTION_MASK        (0x7fff << 10)
- #define  DPLL_CFGCR0_DCO_FRACTION_SHIFT       (10)
- #define  DPLL_CFGCR0_DCO_FRACTION(x)  ((x) << 10)
- #define  DPLL_CFGCR0_DCO_INTEGER_MASK (0x3ff)
- #define CNL_DPLL_CFGCR0(pll)          _MMIO_PLL(pll, _CNL_DPLL0_CFGCR0, _CNL_DPLL1_CFGCR0)
- #define _CNL_DPLL0_CFGCR1             0x6C004
- #define _CNL_DPLL1_CFGCR1             0x6C084
- #define  DPLL_CFGCR1_QDIV_RATIO_MASK  (0xff << 10)
- #define  DPLL_CFGCR1_QDIV_RATIO_SHIFT (10)
- #define  DPLL_CFGCR1_QDIV_RATIO(x)    ((x) << 10)
- #define  DPLL_CFGCR1_QDIV_MODE_SHIFT  (9)
- #define  DPLL_CFGCR1_QDIV_MODE(x)     ((x) << 9)
- #define  DPLL_CFGCR1_KDIV_MASK                (7 << 6)
- #define  DPLL_CFGCR1_KDIV_SHIFT               (6)
- #define  DPLL_CFGCR1_KDIV(x)          ((x) << 6)
- #define  DPLL_CFGCR1_KDIV_1           (1 << 6)
- #define  DPLL_CFGCR1_KDIV_2           (2 << 6)
- #define  DPLL_CFGCR1_KDIV_3           (4 << 6)
- #define  DPLL_CFGCR1_PDIV_MASK                (0xf << 2)
- #define  DPLL_CFGCR1_PDIV_SHIFT               (2)
- #define  DPLL_CFGCR1_PDIV(x)          ((x) << 2)
- #define  DPLL_CFGCR1_PDIV_2           (1 << 2)
- #define  DPLL_CFGCR1_PDIV_3           (2 << 2)
- #define  DPLL_CFGCR1_PDIV_5           (4 << 2)
- #define  DPLL_CFGCR1_PDIV_7           (8 << 2)
- #define  DPLL_CFGCR1_CENTRAL_FREQ     (3 << 0)
- #define  DPLL_CFGCR1_CENTRAL_FREQ_8400        (3 << 0)
- #define  TGL_DPLL_CFGCR1_CFSELOVRD_NORMAL_XTAL        (0 << 0)
- #define CNL_DPLL_CFGCR1(pll)          _MMIO_PLL(pll, _CNL_DPLL0_CFGCR1, _CNL_DPLL1_CFGCR1)
  #define _ICL_DPLL0_CFGCR0             0x164000
  #define _ICL_DPLL1_CFGCR0             0x164080
  #define ICL_DPLL_CFGCR0(pll)          _MMIO_PLL(pll, _ICL_DPLL0_CFGCR0, \
                                                  _ICL_DPLL1_CFGCR0)
+ #define   DPLL_CFGCR0_HDMI_MODE               (1 << 30)
+ #define   DPLL_CFGCR0_SSC_ENABLE      (1 << 29)
+ #define   DPLL_CFGCR0_SSC_ENABLE_ICL  (1 << 25)
+ #define   DPLL_CFGCR0_LINK_RATE_MASK  (0xf << 25)
+ #define   DPLL_CFGCR0_LINK_RATE_2700  (0 << 25)
+ #define   DPLL_CFGCR0_LINK_RATE_1350  (1 << 25)
+ #define   DPLL_CFGCR0_LINK_RATE_810   (2 << 25)
+ #define   DPLL_CFGCR0_LINK_RATE_1620  (3 << 25)
+ #define   DPLL_CFGCR0_LINK_RATE_1080  (4 << 25)
+ #define   DPLL_CFGCR0_LINK_RATE_2160  (5 << 25)
+ #define   DPLL_CFGCR0_LINK_RATE_3240  (6 << 25)
+ #define   DPLL_CFGCR0_LINK_RATE_4050  (7 << 25)
+ #define   DPLL_CFGCR0_DCO_FRACTION_MASK       (0x7fff << 10)
+ #define   DPLL_CFGCR0_DCO_FRACTION_SHIFT      (10)
+ #define   DPLL_CFGCR0_DCO_FRACTION(x) ((x) << 10)
+ #define   DPLL_CFGCR0_DCO_INTEGER_MASK        (0x3ff)
  
  #define _ICL_DPLL0_CFGCR1             0x164004
  #define _ICL_DPLL1_CFGCR1             0x164084
  #define ICL_DPLL_CFGCR1(pll)          _MMIO_PLL(pll, _ICL_DPLL0_CFGCR1, \
                                                  _ICL_DPLL1_CFGCR1)
+ #define   DPLL_CFGCR1_QDIV_RATIO_MASK (0xff << 10)
+ #define   DPLL_CFGCR1_QDIV_RATIO_SHIFT        (10)
+ #define   DPLL_CFGCR1_QDIV_RATIO(x)   ((x) << 10)
+ #define   DPLL_CFGCR1_QDIV_MODE_SHIFT (9)
+ #define   DPLL_CFGCR1_QDIV_MODE(x)    ((x) << 9)
+ #define   DPLL_CFGCR1_KDIV_MASK               (7 << 6)
+ #define   DPLL_CFGCR1_KDIV_SHIFT              (6)
+ #define   DPLL_CFGCR1_KDIV(x)         ((x) << 6)
+ #define   DPLL_CFGCR1_KDIV_1          (1 << 6)
+ #define   DPLL_CFGCR1_KDIV_2          (2 << 6)
+ #define   DPLL_CFGCR1_KDIV_3          (4 << 6)
+ #define   DPLL_CFGCR1_PDIV_MASK               (0xf << 2)
+ #define   DPLL_CFGCR1_PDIV_SHIFT              (2)
+ #define   DPLL_CFGCR1_PDIV(x)         ((x) << 2)
+ #define   DPLL_CFGCR1_PDIV_2          (1 << 2)
+ #define   DPLL_CFGCR1_PDIV_3          (2 << 2)
+ #define   DPLL_CFGCR1_PDIV_5          (4 << 2)
+ #define   DPLL_CFGCR1_PDIV_7          (8 << 2)
+ #define   DPLL_CFGCR1_CENTRAL_FREQ    (3 << 0)
+ #define   DPLL_CFGCR1_CENTRAL_FREQ_8400       (3 << 0)
+ #define   TGL_DPLL_CFGCR1_CFSELOVRD_NORMAL_XTAL       (0 << 0)
  
  #define _TGL_DPLL0_CFGCR0             0x164284
  #define _TGL_DPLL1_CFGCR0             0x16428C
  #define   BXT_DE_PLL_LOCK             (1 << 30)
  #define   BXT_DE_PLL_FREQ_REQ         (1 << 23)
  #define   BXT_DE_PLL_FREQ_REQ_ACK     (1 << 22)
- #define   CNL_CDCLK_PLL_RATIO(x)      (x)
- #define   CNL_CDCLK_PLL_RATIO_MASK    0xff
+ #define   ICL_CDCLK_PLL_RATIO(x)      (x)
+ #define   ICL_CDCLK_PLL_RATIO_MASK    0xff
  
  /* GEN9 DC */
  #define DC_STATE_EN                   _MMIO(0x45504)
  #define SKL_MEMORY_FREQ_MULTIPLIER_HZ         266666666
  #define SKL_MC_BIOS_DATA_0_0_0_MCHBAR_PCU     _MMIO(MCHBAR_MIRROR_BASE_SNB + 0x5E04)
  #define  SKL_REQ_DATA_MASK                    (0xF << 0)
+ #define  DG1_GEAR_TYPE                                REG_BIT(16)
  
  #define SKL_MAD_INTER_CHANNEL_0_0_0_MCHBAR_MCMAIN _MMIO(MCHBAR_MIRROR_BASE_SNB + 0x5000)
  #define  SKL_DRAM_DDR_TYPE_MASK                       (0x3 << 0)
  #define  SKL_DRAM_RANK_1                      (0x0 << 10)
  #define  SKL_DRAM_RANK_2                      (0x1 << 10)
  #define  SKL_DRAM_RANK_MASK                   (0x1 << 10)
- #define  CNL_DRAM_SIZE_MASK                   0x7F
- #define  CNL_DRAM_WIDTH_MASK                  (0x3 << 7)
- #define  CNL_DRAM_WIDTH_SHIFT                 7
- #define  CNL_DRAM_WIDTH_X8                    (0x0 << 7)
- #define  CNL_DRAM_WIDTH_X16                   (0x1 << 7)
- #define  CNL_DRAM_WIDTH_X32                   (0x2 << 7)
- #define  CNL_DRAM_RANK_MASK                   (0x3 << 9)
- #define  CNL_DRAM_RANK_SHIFT                  9
- #define  CNL_DRAM_RANK_1                      (0x0 << 9)
- #define  CNL_DRAM_RANK_2                      (0x1 << 9)
- #define  CNL_DRAM_RANK_3                      (0x2 << 9)
- #define  CNL_DRAM_RANK_4                      (0x3 << 9)
+ #define  ICL_DRAM_SIZE_MASK                   0x7F
+ #define  ICL_DRAM_WIDTH_MASK                  (0x3 << 7)
+ #define  ICL_DRAM_WIDTH_SHIFT                 7
+ #define  ICL_DRAM_WIDTH_X8                    (0x0 << 7)
+ #define  ICL_DRAM_WIDTH_X16                   (0x1 << 7)
+ #define  ICL_DRAM_WIDTH_X32                   (0x2 << 7)
+ #define  ICL_DRAM_RANK_MASK                   (0x3 << 9)
+ #define  ICL_DRAM_RANK_SHIFT                  9
+ #define  ICL_DRAM_RANK_1                      (0x0 << 9)
+ #define  ICL_DRAM_RANK_2                      (0x1 << 9)
+ #define  ICL_DRAM_RANK_3                      (0x2 << 9)
+ #define  ICL_DRAM_RANK_4                      (0x3 << 9)
+ #define SA_PERF_STATUS_0_0_0_MCHBAR_PC                _MMIO(MCHBAR_MIRROR_BASE_SNB + 0x5918)
+ #define  DG1_QCLK_RATIO_MASK                  REG_GENMASK(9, 2)
+ #define  DG1_QCLK_REFERENCE                   REG_BIT(10)
+ #define MCHBAR_CH0_CR_TC_PRE_0_0_0_MCHBAR     _MMIO(MCHBAR_MIRROR_BASE_SNB + 0x4000)
+ #define   DG1_DRAM_T_RDPRE_MASK                       REG_GENMASK(16, 11)
+ #define   DG1_DRAM_T_RP_MASK                  REG_GENMASK(6, 0)
+ #define MCHBAR_CH0_CR_TC_PRE_0_0_0_MCHBAR_HIGH        _MMIO(MCHBAR_MIRROR_BASE_SNB + 0x4004)
+ #define   DG1_DRAM_T_RCD_MASK                 REG_GENMASK(15, 9)
+ #define   DG1_DRAM_T_RAS_MASK                 REG_GENMASK(8, 1)
  
  /*
   * Please see hsw_read_dcomp() and hsw_write_dcomp() before using this register,
                                                 _ICL_PHY_MISC_B)
  #define  ICL_PHY_MISC_MUX_DDID                        (1 << 28)
  #define  ICL_PHY_MISC_DE_IO_COMP_PWR_DOWN     (1 << 23)
+ #define  DG2_PHY_DP_TX_ACK_MASK                       REG_GENMASK(23, 20)
  
  /* Icelake Display Stream Compression Registers */
  #define DSCA_PICTURE_PARAMETER_SET_0          _MMIO(0x6B200)
index de4ef9bd3b51104617a610dcfd10c3e1125784af,6b38bc2811c1ba70b60b74f0fcf719bc0d6a2aef..f9767054dbdf9898a584b6fc567475a79a7b2bcc
@@@ -64,7 -64,7 +64,7 @@@ static void mmio_debug_resume(struct in
  
  static const char * const forcewake_domain_names[] = {
        "render",
 -      "blitter",
 +      "gt",
        "media",
        "vdbox0",
        "vdbox1",
@@@ -945,92 -945,105 +945,92 @@@ static const struct intel_forcewake_ran
  #define __gen11_fwtable_reg_read_fw_domains(uncore, offset) \
        find_fw_domain(uncore, offset)
  
 -#define __gen12_fwtable_reg_read_fw_domains(uncore, offset) \
 -      find_fw_domain(uncore, offset)
 -
  /* *Must* be sorted by offset! See intel_shadow_table_check(). */
 -static const i915_reg_t gen8_shadowed_regs[] = {
 -      RING_TAIL(RENDER_RING_BASE),    /* 0x2000 (base) */
 -      GEN6_RPNSWREQ,                  /* 0xA008 */
 -      GEN6_RC_VIDEO_FREQ,             /* 0xA00C */
 -      RING_TAIL(GEN6_BSD_RING_BASE),  /* 0x12000 (base) */
 -      RING_TAIL(VEBOX_RING_BASE),     /* 0x1a000 (base) */
 -      RING_TAIL(BLT_RING_BASE),       /* 0x22000 (base) */
 +static const struct i915_range gen8_shadowed_regs[] = {
 +      { .start =  0x2030, .end =  0x2030 },
 +      { .start =  0xA008, .end =  0xA00C },
 +      { .start = 0x12030, .end = 0x12030 },
 +      { .start = 0x1a030, .end = 0x1a030 },
 +      { .start = 0x22030, .end = 0x22030 },
        /* TODO: Other registers are not yet used */
  };
  
 -static const i915_reg_t gen11_shadowed_regs[] = {
 -      RING_TAIL(RENDER_RING_BASE),                    /* 0x2000 (base) */
 -      RING_EXECLIST_CONTROL(RENDER_RING_BASE),        /* 0x2550 */
 -      GEN6_RPNSWREQ,                                  /* 0xA008 */
 -      GEN6_RC_VIDEO_FREQ,                             /* 0xA00C */
 -      RING_TAIL(BLT_RING_BASE),                       /* 0x22000 (base) */
 -      RING_EXECLIST_CONTROL(BLT_RING_BASE),           /* 0x22550 */
 -      RING_TAIL(GEN11_BSD_RING_BASE),                 /* 0x1C0000 (base) */
 -      RING_EXECLIST_CONTROL(GEN11_BSD_RING_BASE),     /* 0x1C0550 */
 -      RING_TAIL(GEN11_BSD2_RING_BASE),                /* 0x1C4000 (base) */
 -      RING_EXECLIST_CONTROL(GEN11_BSD2_RING_BASE),    /* 0x1C4550 */
 -      RING_TAIL(GEN11_VEBOX_RING_BASE),               /* 0x1C8000 (base) */
 -      RING_EXECLIST_CONTROL(GEN11_VEBOX_RING_BASE),   /* 0x1C8550 */
 -      RING_TAIL(GEN11_BSD3_RING_BASE),                /* 0x1D0000 (base) */
 -      RING_EXECLIST_CONTROL(GEN11_BSD3_RING_BASE),    /* 0x1D0550 */
 -      RING_TAIL(GEN11_BSD4_RING_BASE),                /* 0x1D4000 (base) */
 -      RING_EXECLIST_CONTROL(GEN11_BSD4_RING_BASE),    /* 0x1D4550 */
 -      RING_TAIL(GEN11_VEBOX2_RING_BASE),              /* 0x1D8000 (base) */
 -      RING_EXECLIST_CONTROL(GEN11_VEBOX2_RING_BASE),  /* 0x1D8550 */
 -      /* TODO: Other registers are not yet used */
 +static const struct i915_range gen11_shadowed_regs[] = {
 +      { .start =   0x2030, .end =   0x2030 },
 +      { .start =   0x2550, .end =   0x2550 },
 +      { .start =   0xA008, .end =   0xA00C },
 +      { .start =  0x22030, .end =  0x22030 },
 +      { .start =  0x22230, .end =  0x22230 },
 +      { .start =  0x22510, .end =  0x22550 },
 +      { .start = 0x1C0030, .end = 0x1C0030 },
 +      { .start = 0x1C0230, .end = 0x1C0230 },
 +      { .start = 0x1C0510, .end = 0x1C0550 },
 +      { .start = 0x1C4030, .end = 0x1C4030 },
 +      { .start = 0x1C4230, .end = 0x1C4230 },
 +      { .start = 0x1C4510, .end = 0x1C4550 },
 +      { .start = 0x1C8030, .end = 0x1C8030 },
 +      { .start = 0x1C8230, .end = 0x1C8230 },
 +      { .start = 0x1C8510, .end = 0x1C8550 },
 +      { .start = 0x1D0030, .end = 0x1D0030 },
 +      { .start = 0x1D0230, .end = 0x1D0230 },
 +      { .start = 0x1D0510, .end = 0x1D0550 },
 +      { .start = 0x1D4030, .end = 0x1D4030 },
 +      { .start = 0x1D4230, .end = 0x1D4230 },
 +      { .start = 0x1D4510, .end = 0x1D4550 },
 +      { .start = 0x1D8030, .end = 0x1D8030 },
 +      { .start = 0x1D8230, .end = 0x1D8230 },
 +      { .start = 0x1D8510, .end = 0x1D8550 },
  };
  
 -static const i915_reg_t gen12_shadowed_regs[] = {
 -      RING_TAIL(RENDER_RING_BASE),                    /* 0x2000 (base) */
 -      RING_EXECLIST_CONTROL(RENDER_RING_BASE),        /* 0x2550 */
 -      GEN6_RPNSWREQ,                                  /* 0xA008 */
 -      GEN6_RC_VIDEO_FREQ,                             /* 0xA00C */
 -      RING_TAIL(BLT_RING_BASE),                       /* 0x22000 (base) */
 -      RING_EXECLIST_CONTROL(BLT_RING_BASE),           /* 0x22550 */
 -      RING_TAIL(GEN11_BSD_RING_BASE),                 /* 0x1C0000 (base) */
 -      RING_EXECLIST_CONTROL(GEN11_BSD_RING_BASE),     /* 0x1C0550 */
 -      RING_TAIL(GEN11_BSD2_RING_BASE),                /* 0x1C4000 (base) */
 -      RING_EXECLIST_CONTROL(GEN11_BSD2_RING_BASE),    /* 0x1C4550 */
 -      RING_TAIL(GEN11_VEBOX_RING_BASE),               /* 0x1C8000 (base) */
 -      RING_EXECLIST_CONTROL(GEN11_VEBOX_RING_BASE),   /* 0x1C8550 */
 -      RING_TAIL(GEN11_BSD3_RING_BASE),                /* 0x1D0000 (base) */
 -      RING_EXECLIST_CONTROL(GEN11_BSD3_RING_BASE),    /* 0x1D0550 */
 -      RING_TAIL(GEN11_BSD4_RING_BASE),                /* 0x1D4000 (base) */
 -      RING_EXECLIST_CONTROL(GEN11_BSD4_RING_BASE),    /* 0x1D4550 */
 -      RING_TAIL(GEN11_VEBOX2_RING_BASE),              /* 0x1D8000 (base) */
 -      RING_EXECLIST_CONTROL(GEN11_VEBOX2_RING_BASE),  /* 0x1D8550 */
 -      /* TODO: Other registers are not yet used */
 -};
 +static const struct i915_range gen12_shadowed_regs[] = {
 +      { .start =   0x2030, .end =   0x2030 },
 +      { .start =   0x2510, .end =   0x2550 },
 +      { .start =   0xA008, .end =   0xA00C },
 +      { .start =   0xA188, .end =   0xA188 },
 +      { .start =   0xA278, .end =   0xA278 },
 +      { .start =   0xA540, .end =   0xA56C },
 +      { .start =   0xC4C8, .end =   0xC4C8 },
 +      { .start =   0xC4D4, .end =   0xC4D4 },
 +      { .start =   0xC600, .end =   0xC600 },
 +      { .start =  0x22030, .end =  0x22030 },
 +      { .start =  0x22510, .end =  0x22550 },
 +      { .start = 0x1C0030, .end = 0x1C0030 },
 +      { .start = 0x1C0510, .end = 0x1C0550 },
 +      { .start = 0x1C4030, .end = 0x1C4030 },
 +      { .start = 0x1C4510, .end = 0x1C4550 },
 +      { .start = 0x1C8030, .end = 0x1C8030 },
 +      { .start = 0x1C8510, .end = 0x1C8550 },
 +      { .start = 0x1D0030, .end = 0x1D0030 },
 +      { .start = 0x1D0510, .end = 0x1D0550 },
 +      { .start = 0x1D4030, .end = 0x1D4030 },
 +      { .start = 0x1D4510, .end = 0x1D4550 },
 +      { .start = 0x1D8030, .end = 0x1D8030 },
 +      { .start = 0x1D8510, .end = 0x1D8550 },
  
 -static const i915_reg_t xehp_shadowed_regs[] = {
 -      RING_TAIL(RENDER_RING_BASE),                    /* 0x2000 (base) */
 -      RING_EXECLIST_CONTROL(RENDER_RING_BASE),        /* 0x2550 */
 -      GEN6_RPNSWREQ,                                  /* 0xA008 */
 -      GEN6_RC_VIDEO_FREQ,                             /* 0xA00C */
 -      RING_TAIL(BLT_RING_BASE),                       /* 0x22000 (base) */
 -      RING_EXECLIST_CONTROL(BLT_RING_BASE),           /* 0x22550 */
 -      RING_TAIL(GEN11_BSD_RING_BASE),                 /* 0x1C0000 (base) */
 -      RING_EXECLIST_CONTROL(GEN11_BSD_RING_BASE),     /* 0x1C0550 */
 -      RING_TAIL(GEN11_BSD2_RING_BASE),                /* 0x1C4000 (base) */
 -      RING_EXECLIST_CONTROL(GEN11_BSD2_RING_BASE),    /* 0x1C4550 */
 -      RING_TAIL(GEN11_VEBOX_RING_BASE),               /* 0x1C8000 (base) */
 -      RING_EXECLIST_CONTROL(GEN11_VEBOX_RING_BASE),   /* 0x1C8550 */
 -      RING_TAIL(GEN11_BSD3_RING_BASE),                /* 0x1D0000 (base) */
 -      RING_EXECLIST_CONTROL(GEN11_BSD3_RING_BASE),    /* 0x1D0550 */
 -      RING_TAIL(GEN11_BSD4_RING_BASE),                /* 0x1D4000 (base) */
 -      RING_EXECLIST_CONTROL(GEN11_BSD4_RING_BASE),    /* 0x1D4550 */
 -      RING_TAIL(GEN11_VEBOX2_RING_BASE),              /* 0x1D8000 (base) */
 -      RING_EXECLIST_CONTROL(GEN11_VEBOX2_RING_BASE),  /* 0x1D8550 */
 -      RING_TAIL(XEHP_BSD5_RING_BASE),                 /* 0x1E0000 (base) */
 -      RING_EXECLIST_CONTROL(XEHP_BSD5_RING_BASE),     /* 0x1E0550 */
 -      RING_TAIL(XEHP_BSD6_RING_BASE),                 /* 0x1E4000 (base) */
 -      RING_EXECLIST_CONTROL(XEHP_BSD6_RING_BASE),     /* 0x1E4550 */
 -      RING_TAIL(XEHP_VEBOX3_RING_BASE),               /* 0x1E8000 (base) */
 -      RING_EXECLIST_CONTROL(XEHP_VEBOX3_RING_BASE),   /* 0x1E8550 */
 -      RING_TAIL(XEHP_BSD7_RING_BASE),                 /* 0x1F0000 (base) */
 -      RING_EXECLIST_CONTROL(XEHP_BSD7_RING_BASE),     /* 0x1F0550 */
 -      RING_TAIL(XEHP_BSD8_RING_BASE),                 /* 0x1F4000 (base) */
 -      RING_EXECLIST_CONTROL(XEHP_BSD8_RING_BASE),     /* 0x1F4550 */
 -      RING_TAIL(XEHP_VEBOX4_RING_BASE),               /* 0x1F8000 (base) */
 -      RING_EXECLIST_CONTROL(XEHP_VEBOX4_RING_BASE),   /* 0x1F8550 */
 -      /* TODO: Other registers are not yet used */
 +      /*
 +       * The rest of these ranges are specific to Xe_HP and beyond, but
 +       * are reserved/unused ranges on earlier gen12 platforms, so they can
 +       * be safely added to the gen12 table.
 +       */
 +      { .start = 0x1E0030, .end = 0x1E0030 },
 +      { .start = 0x1E0510, .end = 0x1E0550 },
 +      { .start = 0x1E4030, .end = 0x1E4030 },
 +      { .start = 0x1E4510, .end = 0x1E4550 },
 +      { .start = 0x1E8030, .end = 0x1E8030 },
 +      { .start = 0x1E8510, .end = 0x1E8550 },
 +      { .start = 0x1F0030, .end = 0x1F0030 },
 +      { .start = 0x1F0510, .end = 0x1F0550 },
 +      { .start = 0x1F4030, .end = 0x1F4030 },
 +      { .start = 0x1F4510, .end = 0x1F4550 },
 +      { .start = 0x1F8030, .end = 0x1F8030 },
 +      { .start = 0x1F8510, .end = 0x1F8550 },
  };
  
 -static int mmio_reg_cmp(u32 key, const i915_reg_t *reg)
 +static int mmio_range_cmp(u32 key, const struct i915_range *range)
  {
 -      u32 offset = i915_mmio_reg_offset(*reg);
 -
 -      if (key < offset)
 +      if (key < range->start)
                return -1;
 -      else if (key > offset)
 +      else if (key > range->end)
                return 1;
        else
                return 0;
  #define __is_X_shadowed(x) \
  static bool is_##x##_shadowed(u32 offset) \
  { \
 -      const i915_reg_t *regs = x##_shadowed_regs; \
 +      const struct i915_range *regs = x##_shadowed_regs; \
        return BSEARCH(offset, regs, ARRAY_SIZE(x##_shadowed_regs), \
 -                     mmio_reg_cmp); \
 +                     mmio_range_cmp); \
  }
  
  __is_X_shadowed(gen8)
  __is_X_shadowed(gen11)
  __is_X_shadowed(gen12)
 -__is_X_shadowed(xehp)
  
  static enum forcewake_domains
  gen6_reg_write_fw_domains(struct intel_uncore *uncore, i915_reg_t reg)
@@@ -1110,6 -1124,15 +1110,6 @@@ static const struct intel_forcewake_ran
        __fwd; \
  })
  
 -#define __xehp_fwtable_reg_write_fw_domains(uncore, offset) \
 -({ \
 -      enum forcewake_domains __fwd = 0; \
 -      const u32 __offset = (offset); \
 -      if (!is_xehp_shadowed(__offset)) \
 -              __fwd = find_fw_domain(uncore, __offset); \
 -      __fwd; \
 -})
 -
  /* *Must* be sorted by offset ranges! See intel_fw_table_check(). */
  static const struct intel_forcewake_range __gen9_fw_ranges[] = {
        GEN_FW_RANGE(0x0, 0xaff, FORCEWAKE_GT),
@@@ -1621,6 -1644,7 +1621,6 @@@ __gen_read(func, 16) 
  __gen_read(func, 32) \
  __gen_read(func, 64)
  
 -__gen_reg_read_funcs(gen12_fwtable);
  __gen_reg_read_funcs(gen11_fwtable);
  __gen_reg_read_funcs(fwtable);
  __gen_reg_read_funcs(gen6);
@@@ -1712,6 -1736,7 +1712,6 @@@ __gen_write(func, 8) 
  __gen_write(func, 16) \
  __gen_write(func, 32)
  
 -__gen_reg_write_funcs(xehp_fwtable);
  __gen_reg_write_funcs(gen12_fwtable);
  __gen_reg_write_funcs(gen11_fwtable);
  __gen_reg_write_funcs(fwtable);
@@@ -2088,16 -2113,16 +2088,16 @@@ static int uncore_forcewake_init(struc
  
        if (GRAPHICS_VER_FULL(i915) >= IP_VER(12, 55)) {
                ASSIGN_FW_DOMAINS_TABLE(uncore, __dg2_fw_ranges);
 -              ASSIGN_WRITE_MMIO_VFUNCS(uncore, xehp_fwtable);
 +              ASSIGN_WRITE_MMIO_VFUNCS(uncore, gen12_fwtable);
                ASSIGN_READ_MMIO_VFUNCS(uncore, gen11_fwtable);
        } else if (GRAPHICS_VER_FULL(i915) >= IP_VER(12, 50)) {
                ASSIGN_FW_DOMAINS_TABLE(uncore, __xehp_fw_ranges);
 -              ASSIGN_WRITE_MMIO_VFUNCS(uncore, xehp_fwtable);
 +              ASSIGN_WRITE_MMIO_VFUNCS(uncore, gen12_fwtable);
                ASSIGN_READ_MMIO_VFUNCS(uncore, gen11_fwtable);
        } else if (GRAPHICS_VER(i915) >= 12) {
                ASSIGN_FW_DOMAINS_TABLE(uncore, __gen12_fw_ranges);
                ASSIGN_WRITE_MMIO_VFUNCS(uncore, gen12_fwtable);
 -              ASSIGN_READ_MMIO_VFUNCS(uncore, gen12_fwtable);
 +              ASSIGN_READ_MMIO_VFUNCS(uncore, gen11_fwtable);
        } else if (GRAPHICS_VER(i915) == 11) {
                ASSIGN_FW_DOMAINS_TABLE(uncore, __gen11_fw_ranges);
                ASSIGN_WRITE_MMIO_VFUNCS(uncore, gen11_fwtable);
@@@ -2149,7 -2174,7 +2149,7 @@@ int intel_uncore_init_mmio(struct intel
                return -ENODEV;
        }
  
-       if (INTEL_GEN(i915) > 5 && !intel_vgpu_active(i915))
+       if (GRAPHICS_VER(i915) > 5 && !intel_vgpu_active(i915))
                uncore->flags |= UNCORE_HAS_FORCEWAKE;
  
        if (!intel_uncore_has_forcewake(uncore)) {
index e3747f0696744bea133842a5588b9cc60669b486,1c5ffe2935af55162cccac4569ffabbb6b8e7664..c893c3db26236294bec2c74ff7e0ead9d157c6b0
@@@ -63,6 -63,9 +63,9 @@@ int ttm_mem_io_reserve(struct ttm_devic
  void ttm_mem_io_free(struct ttm_device *bdev,
                     struct ttm_resource *mem)
  {
+       if (!mem)
+               return;
        if (!mem->bus.offset && !mem->bus.addr)
                return;
  
  
  /**
   * ttm_move_memcpy - Helper to perform a memcpy ttm move operation.
 - * @bo: The struct ttm_buffer_object.
 - * @new_mem: The struct ttm_resource we're moving to (copy destination).
 - * @new_iter: A struct ttm_kmap_iter representing the destination resource.
 + * @clear: Whether to clear rather than copy.
 + * @num_pages: Number of pages of the operation.
 + * @dst_iter: A struct ttm_kmap_iter representing the destination resource.
   * @src_iter: A struct ttm_kmap_iter representing the source resource.
   *
   * This function is intended to be able to move out async under a
   * dma-fence if desired.
   */
 -void ttm_move_memcpy(struct ttm_buffer_object *bo,
 +void ttm_move_memcpy(bool clear,
                     u32 num_pages,
                     struct ttm_kmap_iter *dst_iter,
                     struct ttm_kmap_iter *src_iter)
  {
        const struct ttm_kmap_iter_ops *dst_ops = dst_iter->ops;
        const struct ttm_kmap_iter_ops *src_ops = src_iter->ops;
 -      struct ttm_tt *ttm = bo->ttm;
        struct dma_buf_map src_map, dst_map;
        pgoff_t i;
  
                return;
  
        /* Don't move nonexistent data. Clear destination instead. */
 -      if (src_ops->maps_tt && (!ttm || !ttm_tt_is_populated(ttm))) {
 -              if (ttm && !(ttm->page_flags & TTM_PAGE_FLAG_ZERO_ALLOC))
 -                      return;
 -
 +      if (clear) {
                for (i = 0; i < num_pages; ++i) {
                        dst_ops->map_local(dst_iter, &dst_map, i);
                        if (dst_map.is_iomem)
@@@ -136,13 -143,11 +139,12 @@@ int ttm_bo_move_memcpy(struct ttm_buffe
        struct ttm_resource *src_mem = bo->resource;
        struct ttm_resource_manager *src_man =
                ttm_manager_type(bdev, src_mem->mem_type);
-       struct ttm_resource src_copy = *src_mem;
        union {
                struct ttm_kmap_iter_tt tt;
                struct ttm_kmap_iter_linear_io io;
        } _dst_iter, _src_iter;
        struct ttm_kmap_iter *dst_iter, *src_iter;
 +      bool clear;
        int ret = 0;
  
        if (ttm && ((ttm->page_flags & TTM_PAGE_FLAG_SWAPPED) ||
                goto out_src_iter;
        }
  
 -      ttm_move_memcpy(bo, dst_mem->num_pages, dst_iter, src_iter);
 +      clear = src_iter->ops->maps_tt && (!ttm || !ttm_tt_is_populated(ttm));
 +      if (!(clear && ttm && !(ttm->page_flags & TTM_PAGE_FLAG_ZERO_ALLOC)))
 +              ttm_move_memcpy(clear, dst_mem->num_pages, dst_iter, src_iter);
  
-       src_copy = *src_mem;
+       if (!src_iter->ops->maps_tt)
+               ttm_kmap_iter_linear_io_fini(&_src_iter.io, bdev, src_mem);
        ttm_bo_move_sync_cleanup(bo, dst_mem);
  
-       if (!src_iter->ops->maps_tt)
-               ttm_kmap_iter_linear_io_fini(&_src_iter.io, bdev, &src_copy);
  out_src_iter:
        if (!dst_iter->ops->maps_tt)
                ttm_kmap_iter_linear_io_fini(&_dst_iter.io, bdev, dst_mem);
This page took 0.223148 seconds and 4 git commands to generate.