]> Git Repo - linux.git/commitdiff
Merge drm/drm-next into drm-intel-next
authorRodrigo Vivi <[email protected]>
Tue, 12 Oct 2021 16:03:58 +0000 (12:03 -0400)
committerRodrigo Vivi <[email protected]>
Tue, 12 Oct 2021 16:03:58 +0000 (12:03 -0400)
Need to resync drm-intel-next with TTM and PXP stuff from
drm-intel-gt-next that is now in drm/drm-next.

Signed-off-by: Rodrigo Vivi <[email protected]>
1  2 
drivers/gpu/drm/i915/Makefile
drivers/gpu/drm/i915/display/intel_display.c
drivers/gpu/drm/i915/display/intel_display_types.h
drivers/gpu/drm/i915/i915_reg.h

index f35485806ec58291a506decac32be8274fb0a8a4,cdc244bbbfc164c98dd066d5984c2afd612cc96f..21b05ed0e4e8cbea422c4b4eea27ea2cce91e4f2
  # will most likely get a sudden build breakage... Hopefully we will fix
  # new warnings before CI updates!
  subdir-ccflags-y := -Wall -Wextra
- subdir-ccflags-y += $(call cc-disable-warning, unused-parameter)
- subdir-ccflags-y += $(call cc-disable-warning, type-limits)
- subdir-ccflags-y += $(call cc-disable-warning, missing-field-initializers)
+ subdir-ccflags-y += -Wno-unused-parameter
+ subdir-ccflags-y += -Wno-type-limits
+ subdir-ccflags-y += -Wno-missing-field-initializers
+ subdir-ccflags-y += -Wno-sign-compare
  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
  
@@@ -79,9 -76,6 +76,6 @@@ i915-$(CONFIG_PERF_EVENTS) += i915_pmu.
  
  # "Graphics Technology" (aka we talk to the gpu)
  gt-y += \
-       gt/debugfs_engines.o \
-       gt/debugfs_gt.o \
-       gt/debugfs_gt_pm.o \
        gt/gen2_engine_cs.o \
        gt/gen6_engine_cs.o \
        gt/gen6_ppgtt.o \
        gt/intel_gt.o \
        gt/intel_gt_buffer_pool.o \
        gt/intel_gt_clock_utils.o \
+       gt/intel_gt_debugfs.o \
+       gt/intel_gt_engines_debugfs.o \
        gt/intel_gt_irq.o \
        gt/intel_gt_pm.o \
+       gt/intel_gt_pm_debugfs.o \
        gt/intel_gt_pm_irq.o \
        gt/intel_gt_requests.o \
        gt/intel_gtt.o \
@@@ -155,6 -152,7 +152,7 @@@ gem-y += 
        gem/i915_gem_throttle.o \
        gem/i915_gem_tiling.o \
        gem/i915_gem_ttm.o \
+       gem/i915_gem_ttm_pm.o \
        gem/i915_gem_userptr.o \
        gem/i915_gem_wait.o \
        gem/i915_gemfs.o
@@@ -216,7 -214,6 +214,7 @@@ i915-y += 
        display/intel_drrs.o \
        display/intel_dsb.o \
        display/intel_fb.o \
 +      display/intel_fb_pin.o \
        display/intel_fbc.o \
        display/intel_fdi.o \
        display/intel_fifo_underrun.o \
        display/intel_hotplug.o \
        display/intel_lpe_audio.o \
        display/intel_overlay.o \
 +      display/intel_plane_initial.o \
        display/intel_psr.o \
        display/intel_quirks.o \
        display/intel_sprite.o \
@@@ -283,6 -279,16 +281,16 @@@ i915-y += 
  
  i915-y += i915_perf.o
  
+ # Protected execution platform (PXP) support
+ i915-$(CONFIG_DRM_I915_PXP) += \
+       pxp/intel_pxp.o \
+       pxp/intel_pxp_cmd.o \
+       pxp/intel_pxp_debugfs.o \
+       pxp/intel_pxp_irq.o \
+       pxp/intel_pxp_pm.o \
+       pxp/intel_pxp_session.o \
+       pxp/intel_pxp_tee.o
  # Post-mortem debug and GPU hang state capture
  i915-$(CONFIG_DRM_I915_CAPTURE_ERROR) += i915_gpu_error.o
  i915-$(CONFIG_DRM_I915_SELFTEST) += \
index 0fe3c2f50971219d48316f64db7d0052848497aa,8faa7f729547d05f443184bcc567b034615ce2ac..9cf987ee143d52dab3194b084230bfeae6e98677
  #include "gem/i915_gem_lmem.h"
  #include "gem/i915_gem_object.h"
  
 -#include "gt/intel_rps.h"
  #include "gt/gen8_ppgtt.h"
  
+ #include "pxp/intel_pxp.h"
  #include "g4x_dp.h"
  #include "g4x_hdmi.h"
  #include "i915_drv.h"
@@@ -95,7 -98,6 +97,7 @@@
  #include "intel_overlay.h"
  #include "intel_panel.h"
  #include "intel_pipe_crc.h"
 +#include "intel_plane_initial.h"
  #include "intel_pm.h"
  #include "intel_pps.h"
  #include "intel_psr.h"
@@@ -852,7 -854,7 +854,7 @@@ unsigned int intel_remapped_info_size(c
        return size;
  }
  
 -static bool intel_plane_uses_fence(const struct intel_plane_state *plane_state)
 +bool intel_plane_uses_fence(const struct intel_plane_state *plane_state)
  {
        struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane);
        struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
                 plane_state->view.gtt.type == I915_GGTT_VIEW_NORMAL);
  }
  
 -static struct i915_vma *
 -intel_pin_fb_obj_dpt(struct drm_framebuffer *fb,
 -                   const struct i915_ggtt_view *view,
 -                   bool uses_fence,
 -                   unsigned long *out_flags,
 -                   struct i915_address_space *vm)
 -{
 -      struct drm_device *dev = fb->dev;
 -      struct drm_i915_private *dev_priv = to_i915(dev);
 -      struct drm_i915_gem_object *obj = intel_fb_obj(fb);
 -      struct i915_vma *vma;
 -      u32 alignment;
 -      int ret;
 -
 -      if (WARN_ON(!i915_gem_object_is_framebuffer(obj)))
 -              return ERR_PTR(-EINVAL);
 -
 -      alignment = 4096 * 512;
 -
 -      atomic_inc(&dev_priv->gpu_error.pending_fb_pin);
 -
 -      ret = i915_gem_object_set_cache_level(obj, I915_CACHE_NONE);
 -      if (ret) {
 -              vma = ERR_PTR(ret);
 -              goto err;
 -      }
 -
 -      vma = i915_vma_instance(obj, vm, view);
 -      if (IS_ERR(vma))
 -              goto err;
 -
 -      if (i915_vma_misplaced(vma, 0, alignment, 0)) {
 -              ret = i915_vma_unbind(vma);
 -              if (ret) {
 -                      vma = ERR_PTR(ret);
 -                      goto err;
 -              }
 -      }
 -
 -      ret = i915_vma_pin(vma, 0, alignment, PIN_GLOBAL);
 -      if (ret) {
 -              vma = ERR_PTR(ret);
 -              goto err;
 -      }
 -
 -      vma->display_alignment = max_t(u64, vma->display_alignment, alignment);
 -
 -      i915_gem_object_flush_if_display(obj);
 -
 -      i915_vma_get(vma);
 -err:
 -      atomic_dec(&dev_priv->gpu_error.pending_fb_pin);
 -
 -      return vma;
 -}
 -
 -struct i915_vma *
 -intel_pin_and_fence_fb_obj(struct drm_framebuffer *fb,
 -                         bool phys_cursor,
 -                         const struct i915_ggtt_view *view,
 -                         bool uses_fence,
 -                         unsigned long *out_flags)
 -{
 -      struct drm_device *dev = fb->dev;
 -      struct drm_i915_private *dev_priv = to_i915(dev);
 -      struct drm_i915_gem_object *obj = intel_fb_obj(fb);
 -      intel_wakeref_t wakeref;
 -      struct i915_gem_ww_ctx ww;
 -      struct i915_vma *vma;
 -      unsigned int pinctl;
 -      u32 alignment;
 -      int ret;
 -
 -      if (drm_WARN_ON(dev, !i915_gem_object_is_framebuffer(obj)))
 -              return ERR_PTR(-EINVAL);
 -
 -      if (phys_cursor)
 -              alignment = intel_cursor_alignment(dev_priv);
 -      else
 -              alignment = intel_surf_alignment(fb, 0);
 -      if (drm_WARN_ON(dev, alignment && !is_power_of_2(alignment)))
 -              return ERR_PTR(-EINVAL);
 -
 -      /* Note that the w/a also requires 64 PTE of padding following the
 -       * bo. We currently fill all unused PTE with the shadow page and so
 -       * we should always have valid PTE following the scanout preventing
 -       * the VT-d warning.
 -       */
 -      if (intel_scanout_needs_vtd_wa(dev_priv) && alignment < 256 * 1024)
 -              alignment = 256 * 1024;
 -
 -      /*
 -       * Global gtt pte registers are special registers which actually forward
 -       * writes to a chunk of system memory. Which means that there is no risk
 -       * that the register values disappear as soon as we call
 -       * intel_runtime_pm_put(), so it is correct to wrap only the
 -       * pin/unpin/fence and not more.
 -       */
 -      wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm);
 -
 -      atomic_inc(&dev_priv->gpu_error.pending_fb_pin);
 -
 -      /*
 -       * Valleyview is definitely limited to scanning out the first
 -       * 512MiB. Lets presume this behaviour was inherited from the
 -       * g4x display engine and that all earlier gen are similarly
 -       * limited. Testing suggests that it is a little more
 -       * complicated than this. For example, Cherryview appears quite
 -       * happy to scanout from anywhere within its global aperture.
 -       */
 -      pinctl = 0;
 -      if (HAS_GMCH(dev_priv))
 -              pinctl |= PIN_MAPPABLE;
 -
 -      i915_gem_ww_ctx_init(&ww, true);
 -retry:
 -      ret = i915_gem_object_lock(obj, &ww);
 -      if (!ret && phys_cursor)
 -              ret = i915_gem_object_attach_phys(obj, alignment);
 -      else if (!ret && HAS_LMEM(dev_priv))
 -              ret = i915_gem_object_migrate(obj, &ww, INTEL_REGION_LMEM);
 -      /* TODO: Do we need to sync when migration becomes async? */
 -      if (!ret)
 -              ret = i915_gem_object_pin_pages(obj);
 -      if (ret)
 -              goto err;
 -
 -      if (!ret) {
 -              vma = i915_gem_object_pin_to_display_plane(obj, &ww, alignment,
 -                                                         view, pinctl);
 -              if (IS_ERR(vma)) {
 -                      ret = PTR_ERR(vma);
 -                      goto err_unpin;
 -              }
 -      }
 -
 -      if (uses_fence && i915_vma_is_map_and_fenceable(vma)) {
 -              /*
 -               * Install a fence for tiled scan-out. Pre-i965 always needs a
 -               * fence, whereas 965+ only requires a fence if using
 -               * framebuffer compression.  For simplicity, we always, when
 -               * possible, install a fence as the cost is not that onerous.
 -               *
 -               * If we fail to fence the tiled scanout, then either the
 -               * modeset will reject the change (which is highly unlikely as
 -               * the affected systems, all but one, do not have unmappable
 -               * space) or we will not be able to enable full powersaving
 -               * techniques (also likely not to apply due to various limits
 -               * FBC and the like impose on the size of the buffer, which
 -               * presumably we violated anyway with this unmappable buffer).
 -               * Anyway, it is presumably better to stumble onwards with
 -               * something and try to run the system in a "less than optimal"
 -               * mode that matches the user configuration.
 -               */
 -              ret = i915_vma_pin_fence(vma);
 -              if (ret != 0 && DISPLAY_VER(dev_priv) < 4) {
 -                      i915_vma_unpin(vma);
 -                      goto err_unpin;
 -              }
 -              ret = 0;
 -
 -              if (vma->fence)
 -                      *out_flags |= PLANE_HAS_FENCE;
 -      }
 -
 -      i915_vma_get(vma);
 -
 -err_unpin:
 -      i915_gem_object_unpin_pages(obj);
 -err:
 -      if (ret == -EDEADLK) {
 -              ret = i915_gem_ww_ctx_backoff(&ww);
 -              if (!ret)
 -                      goto retry;
 -      }
 -      i915_gem_ww_ctx_fini(&ww);
 -      if (ret)
 -              vma = ERR_PTR(ret);
 -
 -      atomic_dec(&dev_priv->gpu_error.pending_fb_pin);
 -      intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref);
 -      return vma;
 -}
 -
 -void intel_unpin_fb_vma(struct i915_vma *vma, unsigned long flags)
 -{
 -      if (flags & PLANE_HAS_FENCE)
 -              i915_vma_unpin_fence(vma);
 -      i915_vma_unpin(vma);
 -      i915_vma_put(vma);
 -}
 -
  /*
   * Convert the x/y offsets into a linear offset.
   * Only valid with 0/180 degree rotation, which is fine since linear
@@@ -1047,6 -1241,123 +1049,6 @@@ u32 intel_plane_fb_max_stride(struct dr
                                 DRM_MODE_ROTATE_0);
  }
  
 -static struct i915_vma *
 -initial_plane_vma(struct drm_i915_private *i915,
 -                struct intel_initial_plane_config *plane_config)
 -{
 -      struct drm_i915_gem_object *obj;
 -      struct i915_vma *vma;
 -      u32 base, size;
 -
 -      if (plane_config->size == 0)
 -              return NULL;
 -
 -      base = round_down(plane_config->base,
 -                        I915_GTT_MIN_ALIGNMENT);
 -      size = round_up(plane_config->base + plane_config->size,
 -                      I915_GTT_MIN_ALIGNMENT);
 -      size -= base;
 -
 -      /*
 -       * If the FB is too big, just don't use it since fbdev is not very
 -       * important and we should probably use that space with FBC or other
 -       * features.
 -       */
 -      if (IS_ENABLED(CONFIG_FRAMEBUFFER_CONSOLE) &&
 -          size * 2 > i915->stolen_usable_size)
 -              return NULL;
 -
 -      obj = i915_gem_object_create_stolen_for_preallocated(i915, base, size);
 -      if (IS_ERR(obj))
 -              return NULL;
 -
 -      /*
 -       * Mark it WT ahead of time to avoid changing the
 -       * cache_level during fbdev initialization. The
 -       * unbind there would get stuck waiting for rcu.
 -       */
 -      i915_gem_object_set_cache_coherency(obj, HAS_WT(i915) ?
 -                                          I915_CACHE_WT : I915_CACHE_NONE);
 -
 -      switch (plane_config->tiling) {
 -      case I915_TILING_NONE:
 -              break;
 -      case I915_TILING_X:
 -      case I915_TILING_Y:
 -              obj->tiling_and_stride =
 -                      plane_config->fb->base.pitches[0] |
 -                      plane_config->tiling;
 -              break;
 -      default:
 -              MISSING_CASE(plane_config->tiling);
 -              goto err_obj;
 -      }
 -
 -      vma = i915_vma_instance(obj, &i915->ggtt.vm, NULL);
 -      if (IS_ERR(vma))
 -              goto err_obj;
 -
 -      if (i915_ggtt_pin(vma, NULL, 0, PIN_MAPPABLE | PIN_OFFSET_FIXED | base))
 -              goto err_obj;
 -
 -      if (i915_gem_object_is_tiled(obj) &&
 -          !i915_vma_is_map_and_fenceable(vma))
 -              goto err_obj;
 -
 -      return vma;
 -
 -err_obj:
 -      i915_gem_object_put(obj);
 -      return NULL;
 -}
 -
 -static bool
 -intel_alloc_initial_plane_obj(struct intel_crtc *crtc,
 -                            struct intel_initial_plane_config *plane_config)
 -{
 -      struct drm_device *dev = crtc->base.dev;
 -      struct drm_i915_private *dev_priv = to_i915(dev);
 -      struct drm_mode_fb_cmd2 mode_cmd = { 0 };
 -      struct drm_framebuffer *fb = &plane_config->fb->base;
 -      struct i915_vma *vma;
 -
 -      switch (fb->modifier) {
 -      case DRM_FORMAT_MOD_LINEAR:
 -      case I915_FORMAT_MOD_X_TILED:
 -      case I915_FORMAT_MOD_Y_TILED:
 -              break;
 -      default:
 -              drm_dbg(&dev_priv->drm,
 -                      "Unsupported modifier for initial FB: 0x%llx\n",
 -                      fb->modifier);
 -              return false;
 -      }
 -
 -      vma = initial_plane_vma(dev_priv, plane_config);
 -      if (!vma)
 -              return false;
 -
 -      mode_cmd.pixel_format = fb->format->format;
 -      mode_cmd.width = fb->width;
 -      mode_cmd.height = fb->height;
 -      mode_cmd.pitches[0] = fb->pitches[0];
 -      mode_cmd.modifier[0] = fb->modifier;
 -      mode_cmd.flags = DRM_MODE_FB_MODIFIERS;
 -
 -      if (intel_framebuffer_init(to_intel_framebuffer(fb),
 -                                 vma->obj, &mode_cmd)) {
 -              drm_dbg_kms(&dev_priv->drm, "intel fb init failed\n");
 -              goto err_vma;
 -      }
 -
 -      plane_config->vma = vma;
 -      return true;
 -
 -err_vma:
 -      i915_vma_put(vma);
 -      return false;
 -}
 -
  static void
  intel_set_plane_visible(struct intel_crtc_state *crtc_state,
                        struct intel_plane_state *plane_state,
@@@ -1082,8 -1393,8 +1084,8 @@@ static void fixup_plane_bitmasks(struc
        }
  }
  
 -static void intel_plane_disable_noatomic(struct intel_crtc *crtc,
 -                                       struct intel_plane *plane)
 +void intel_plane_disable_noatomic(struct intel_crtc *crtc,
 +                                struct intel_plane *plane)
  {
        struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
        struct intel_crtc_state *crtc_state =
        intel_wait_for_vblank(dev_priv, crtc->pipe);
  }
  
 -static bool
 -intel_reuse_initial_plane_obj(struct drm_i915_private *i915,
 -                            const struct intel_initial_plane_config *plane_config,
 -                            struct drm_framebuffer **fb,
 -                            struct i915_vma **vma)
 -{
 -      struct intel_crtc *crtc;
 -
 -      for_each_intel_crtc(&i915->drm, crtc) {
 -              struct intel_crtc_state *crtc_state =
 -                      to_intel_crtc_state(crtc->base.state);
 -              struct intel_plane *plane =
 -                      to_intel_plane(crtc->base.primary);
 -              struct intel_plane_state *plane_state =
 -                      to_intel_plane_state(plane->base.state);
 -
 -              if (!crtc_state->uapi.active)
 -                      continue;
 -
 -              if (!plane_state->ggtt_vma)
 -                      continue;
 -
 -              if (intel_plane_ggtt_offset(plane_state) == plane_config->base) {
 -                      *fb = plane_state->hw.fb;
 -                      *vma = plane_state->ggtt_vma;
 -                      return true;
 -              }
 -      }
 -
 -      return false;
 -}
 -
 -static void
 -intel_find_initial_plane_obj(struct intel_crtc *crtc,
 -                           struct intel_initial_plane_config *plane_config)
 -{
 -      struct drm_device *dev = crtc->base.dev;
 -      struct drm_i915_private *dev_priv = to_i915(dev);
 -      struct intel_crtc_state *crtc_state =
 -              to_intel_crtc_state(crtc->base.state);
 -      struct intel_plane *plane =
 -              to_intel_plane(crtc->base.primary);
 -      struct intel_plane_state *plane_state =
 -              to_intel_plane_state(plane->base.state);
 -      struct drm_framebuffer *fb;
 -      struct i915_vma *vma;
 -
 -      /*
 -       * TODO:
 -       *   Disable planes if get_initial_plane_config() failed.
 -       *   Make sure things work if the surface base is not page aligned.
 -       */
 -      if (!plane_config->fb)
 -              return;
 -
 -      if (intel_alloc_initial_plane_obj(crtc, plane_config)) {
 -              fb = &plane_config->fb->base;
 -              vma = plane_config->vma;
 -              goto valid_fb;
 -      }
 -
 -      /*
 -       * Failed to alloc the obj, check to see if we should share
 -       * an fb with another CRTC instead
 -       */
 -      if (intel_reuse_initial_plane_obj(dev_priv, plane_config, &fb, &vma))
 -              goto valid_fb;
 -
 -      /*
 -       * We've failed to reconstruct the BIOS FB.  Current display state
 -       * indicates that the primary plane is visible, but has a NULL FB,
 -       * which will lead to problems later if we don't fix it up.  The
 -       * simplest solution is to just disable the primary plane now and
 -       * pretend the BIOS never had it enabled.
 -       */
 -      intel_plane_disable_noatomic(crtc, plane);
 -      if (crtc_state->bigjoiner) {
 -              struct intel_crtc *slave =
 -                      crtc_state->bigjoiner_linked_crtc;
 -              intel_plane_disable_noatomic(slave, to_intel_plane(slave->base.primary));
 -      }
 -
 -      return;
 -
 -valid_fb:
 -      plane_state->uapi.rotation = plane_config->rotation;
 -      intel_fb_fill_view(to_intel_framebuffer(fb),
 -                         plane_state->uapi.rotation, &plane_state->view);
 -
 -      __i915_vma_pin(vma);
 -      plane_state->ggtt_vma = i915_vma_get(vma);
 -      if (intel_plane_uses_fence(plane_state) &&
 -          i915_vma_pin_fence(vma) == 0 && vma->fence)
 -              plane_state->flags |= PLANE_HAS_FENCE;
 -
 -      plane_state->uapi.src_x = 0;
 -      plane_state->uapi.src_y = 0;
 -      plane_state->uapi.src_w = fb->width << 16;
 -      plane_state->uapi.src_h = fb->height << 16;
 -
 -      plane_state->uapi.crtc_x = 0;
 -      plane_state->uapi.crtc_y = 0;
 -      plane_state->uapi.crtc_w = fb->width;
 -      plane_state->uapi.crtc_h = fb->height;
 -
 -      if (plane_config->tiling)
 -              dev_priv->preserve_bios_swizzle = true;
 -
 -      plane_state->uapi.fb = fb;
 -      drm_framebuffer_get(fb);
 -
 -      plane_state->uapi.crtc = &crtc->base;
 -      intel_plane_copy_uapi_to_hw_state(plane_state, plane_state, crtc);
 -
 -      atomic_or(plane->frontbuffer_bit, &to_intel_frontbuffer(fb)->bits);
 -}
 -
  unsigned int
  intel_plane_fence_y_offset(const struct intel_plane_state *plane_state)
  {
@@@ -1885,33 -2313,6 +1887,33 @@@ static bool needs_cursorclk_wa(const st
        return false;
  }
  
 +static void intel_async_flip_vtd_wa(struct drm_i915_private *i915,
 +                                  enum pipe pipe, bool enable)
 +{
 +      if (DISPLAY_VER(i915) == 9) {
 +              /*
 +               * "Plane N strech max must be programmed to 11b (x1)
 +               *  when Async flips are enabled on that plane."
 +               */
 +              intel_de_rmw(i915, CHICKEN_PIPESL_1(pipe),
 +                           SKL_PLANE1_STRETCH_MAX_MASK,
 +                           enable ? SKL_PLANE1_STRETCH_MAX_X1 : SKL_PLANE1_STRETCH_MAX_X8);
 +      } else {
 +              /* Also needed on HSW/BDW albeit undocumented */
 +              intel_de_rmw(i915, CHICKEN_PIPESL_1(pipe),
 +                           HSW_PRI_STRETCH_MAX_MASK,
 +                           enable ? HSW_PRI_STRETCH_MAX_X1 : HSW_PRI_STRETCH_MAX_X8);
 +      }
 +}
 +
 +static bool needs_async_flip_vtd_wa(const struct intel_crtc_state *crtc_state)
 +{
 +      struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev);
 +
 +      return crtc_state->uapi.async_flip && intel_vtd_active() &&
 +              (DISPLAY_VER(i915) == 9 || IS_BROADWELL(i915) || IS_HASWELL(i915));
 +}
 +
  static bool planes_enabling(const struct intel_crtc_state *old_crtc_state,
                            const struct intel_crtc_state *new_crtc_state)
  {
@@@ -1947,10 -2348,6 +1949,10 @@@ static void intel_post_plane_update(str
        intel_fbc_post_update(state, crtc);
        intel_drrs_page_flip(state, crtc);
  
 +      if (needs_async_flip_vtd_wa(old_crtc_state) &&
 +          !needs_async_flip_vtd_wa(new_crtc_state))
 +              intel_async_flip_vtd_wa(dev_priv, pipe, false);
 +
        if (needs_nv12_wa(old_crtc_state) &&
            !needs_nv12_wa(new_crtc_state))
                skl_wa_827(dev_priv, pipe, false);
@@@ -2049,10 -2446,6 +2051,10 @@@ static void intel_pre_plane_update(stru
        if (intel_fbc_pre_update(state, crtc))
                intel_wait_for_vblank(dev_priv, pipe);
  
 +      if (!needs_async_flip_vtd_wa(old_crtc_state) &&
 +          needs_async_flip_vtd_wa(new_crtc_state))
 +              intel_async_flip_vtd_wa(dev_priv, pipe, true);
 +
        /* Display WA 827 */
        if (!needs_nv12_wa(old_crtc_state) &&
            needs_nv12_wa(new_crtc_state))
@@@ -8596,13 -8989,28 +8598,28 @@@ static int intel_bigjoiner_add_affected
        return 0;
  }
  
+ static bool bo_has_valid_encryption(struct drm_i915_gem_object *obj)
+ {
+       struct drm_i915_private *i915 = to_i915(obj->base.dev);
+       return intel_pxp_key_check(&i915->gt.pxp, obj, false) == 0;
+ }
+ static bool pxp_is_borked(struct drm_i915_gem_object *obj)
+ {
+       return i915_gem_object_is_protected(obj) && !bo_has_valid_encryption(obj);
+ }
  static int intel_atomic_check_planes(struct intel_atomic_state *state)
  {
        struct drm_i915_private *dev_priv = to_i915(state->base.dev);
        struct intel_crtc_state *old_crtc_state, *new_crtc_state;
        struct intel_plane_state *plane_state;
        struct intel_plane *plane;
+       struct intel_plane_state *new_plane_state;
+       struct intel_plane_state *old_plane_state;
        struct intel_crtc *crtc;
+       const struct drm_framebuffer *fb;
        int i, ret;
  
        ret = icl_add_linked_planes(state);
                        return ret;
        }
  
+       for_each_new_intel_plane_in_state(state, plane, plane_state, i) {
+               new_plane_state = intel_atomic_get_new_plane_state(state, plane);
+               old_plane_state = intel_atomic_get_old_plane_state(state, plane);
+               fb = new_plane_state->hw.fb;
+               if (fb) {
+                       new_plane_state->decrypt = bo_has_valid_encryption(intel_fb_obj(fb));
+                       new_plane_state->force_black = pxp_is_borked(intel_fb_obj(fb));
+               } else {
+                       new_plane_state->decrypt = old_plane_state->decrypt;
+                       new_plane_state->force_black = old_plane_state->force_black;
+               }
+       }
        return 0;
  }
  
@@@ -8936,6 -9357,10 +8966,10 @@@ static int intel_atomic_check_async(str
                        drm_dbg_kms(&i915->drm, "Color range cannot be changed in async flip\n");
                        return -EINVAL;
                }
+               /* plane decryption is allow to change only in synchronous flips */
+               if (old_plane_state->decrypt != new_plane_state->decrypt)
+                       return -EINVAL;
        }
  
        return 0;
@@@ -10053,6 -10478,279 +10087,6 @@@ static int intel_atomic_commit(struct d
        return 0;
  }
  
 -struct wait_rps_boost {
 -      struct wait_queue_entry wait;
 -
 -      struct drm_crtc *crtc;
 -      struct i915_request *request;
 -};
 -
 -static int do_rps_boost(struct wait_queue_entry *_wait,
 -                      unsigned mode, int sync, void *key)
 -{
 -      struct wait_rps_boost *wait = container_of(_wait, typeof(*wait), wait);
 -      struct i915_request *rq = wait->request;
 -
 -      /*
 -       * If we missed the vblank, but the request is already running it
 -       * is reasonable to assume that it will complete before the next
 -       * vblank without our intervention, so leave RPS alone.
 -       */
 -      if (!i915_request_started(rq))
 -              intel_rps_boost(rq);
 -      i915_request_put(rq);
 -
 -      drm_crtc_vblank_put(wait->crtc);
 -
 -      list_del(&wait->wait.entry);
 -      kfree(wait);
 -      return 1;
 -}
 -
 -static void add_rps_boost_after_vblank(struct drm_crtc *crtc,
 -                                     struct dma_fence *fence)
 -{
 -      struct wait_rps_boost *wait;
 -
 -      if (!dma_fence_is_i915(fence))
 -              return;
 -
 -      if (DISPLAY_VER(to_i915(crtc->dev)) < 6)
 -              return;
 -
 -      if (drm_crtc_vblank_get(crtc))
 -              return;
 -
 -      wait = kmalloc(sizeof(*wait), GFP_KERNEL);
 -      if (!wait) {
 -              drm_crtc_vblank_put(crtc);
 -              return;
 -      }
 -
 -      wait->request = to_request(dma_fence_get(fence));
 -      wait->crtc = crtc;
 -
 -      wait->wait.func = do_rps_boost;
 -      wait->wait.flags = 0;
 -
 -      add_wait_queue(drm_crtc_vblank_waitqueue(crtc), &wait->wait);
 -}
 -
 -int intel_plane_pin_fb(struct intel_plane_state *plane_state)
 -{
 -      struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane);
 -      struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
 -      struct drm_framebuffer *fb = plane_state->hw.fb;
 -      struct i915_vma *vma;
 -      bool phys_cursor =
 -              plane->id == PLANE_CURSOR &&
 -              INTEL_INFO(dev_priv)->display.cursor_needs_physical;
 -
 -      if (!intel_fb_uses_dpt(fb)) {
 -              vma = intel_pin_and_fence_fb_obj(fb, phys_cursor,
 -                                               &plane_state->view.gtt,
 -                                               intel_plane_uses_fence(plane_state),
 -                                               &plane_state->flags);
 -              if (IS_ERR(vma))
 -                      return PTR_ERR(vma);
 -
 -              plane_state->ggtt_vma = vma;
 -      } else {
 -              struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb);
 -
 -              vma = intel_dpt_pin(intel_fb->dpt_vm);
 -              if (IS_ERR(vma))
 -                      return PTR_ERR(vma);
 -
 -              plane_state->ggtt_vma = vma;
 -
 -              vma = intel_pin_fb_obj_dpt(fb, &plane_state->view.gtt, false,
 -                                         &plane_state->flags, intel_fb->dpt_vm);
 -              if (IS_ERR(vma)) {
 -                      intel_dpt_unpin(intel_fb->dpt_vm);
 -                      plane_state->ggtt_vma = NULL;
 -                      return PTR_ERR(vma);
 -              }
 -
 -              plane_state->dpt_vma = vma;
 -
 -              WARN_ON(plane_state->ggtt_vma == plane_state->dpt_vma);
 -      }
 -
 -      return 0;
 -}
 -
 -void intel_plane_unpin_fb(struct intel_plane_state *old_plane_state)
 -{
 -      struct drm_framebuffer *fb = old_plane_state->hw.fb;
 -      struct i915_vma *vma;
 -
 -      if (!intel_fb_uses_dpt(fb)) {
 -              vma = fetch_and_zero(&old_plane_state->ggtt_vma);
 -              if (vma)
 -                      intel_unpin_fb_vma(vma, old_plane_state->flags);
 -      } else {
 -              struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb);
 -
 -              vma = fetch_and_zero(&old_plane_state->dpt_vma);
 -              if (vma)
 -                      intel_unpin_fb_vma(vma, old_plane_state->flags);
 -
 -              vma = fetch_and_zero(&old_plane_state->ggtt_vma);
 -              if (vma)
 -                      intel_dpt_unpin(intel_fb->dpt_vm);
 -      }
 -}
 -
 -/**
 - * intel_prepare_plane_fb - Prepare fb for usage on plane
 - * @_plane: drm plane to prepare for
 - * @_new_plane_state: the plane state being prepared
 - *
 - * Prepares a framebuffer for usage on a display plane.  Generally this
 - * involves pinning the underlying object and updating the frontbuffer tracking
 - * bits.  Some older platforms need special physical address handling for
 - * cursor planes.
 - *
 - * Returns 0 on success, negative error code on failure.
 - */
 -int
 -intel_prepare_plane_fb(struct drm_plane *_plane,
 -                     struct drm_plane_state *_new_plane_state)
 -{
 -      struct i915_sched_attr attr = { .priority = I915_PRIORITY_DISPLAY };
 -      struct intel_plane *plane = to_intel_plane(_plane);
 -      struct intel_plane_state *new_plane_state =
 -              to_intel_plane_state(_new_plane_state);
 -      struct intel_atomic_state *state =
 -              to_intel_atomic_state(new_plane_state->uapi.state);
 -      struct drm_i915_private *dev_priv = to_i915(plane->base.dev);
 -      const struct intel_plane_state *old_plane_state =
 -              intel_atomic_get_old_plane_state(state, plane);
 -      struct drm_i915_gem_object *obj = intel_fb_obj(new_plane_state->hw.fb);
 -      struct drm_i915_gem_object *old_obj = intel_fb_obj(old_plane_state->hw.fb);
 -      int ret;
 -
 -      if (old_obj) {
 -              const struct intel_crtc_state *crtc_state =
 -                      intel_atomic_get_new_crtc_state(state,
 -                                                      to_intel_crtc(old_plane_state->hw.crtc));
 -
 -              /* Big Hammer, we also need to ensure that any pending
 -               * MI_WAIT_FOR_EVENT inside a user batch buffer on the
 -               * current scanout is retired before unpinning the old
 -               * framebuffer. Note that we rely on userspace rendering
 -               * into the buffer attached to the pipe they are waiting
 -               * on. If not, userspace generates a GPU hang with IPEHR
 -               * point to the MI_WAIT_FOR_EVENT.
 -               *
 -               * This should only fail upon a hung GPU, in which case we
 -               * can safely continue.
 -               */
 -              if (intel_crtc_needs_modeset(crtc_state)) {
 -                      ret = i915_sw_fence_await_reservation(&state->commit_ready,
 -                                                            old_obj->base.resv, NULL,
 -                                                            false, 0,
 -                                                            GFP_KERNEL);
 -                      if (ret < 0)
 -                              return ret;
 -              }
 -      }
 -
 -      if (new_plane_state->uapi.fence) { /* explicit fencing */
 -              i915_gem_fence_wait_priority(new_plane_state->uapi.fence,
 -                                           &attr);
 -              ret = i915_sw_fence_await_dma_fence(&state->commit_ready,
 -                                                  new_plane_state->uapi.fence,
 -                                                  i915_fence_timeout(dev_priv),
 -                                                  GFP_KERNEL);
 -              if (ret < 0)
 -                      return ret;
 -      }
 -
 -      if (!obj)
 -              return 0;
 -
 -
 -      ret = intel_plane_pin_fb(new_plane_state);
 -      if (ret)
 -              return ret;
 -
 -      i915_gem_object_wait_priority(obj, 0, &attr);
 -
 -      if (!new_plane_state->uapi.fence) { /* implicit fencing */
 -              struct dma_fence *fence;
 -
 -              ret = i915_sw_fence_await_reservation(&state->commit_ready,
 -                                                    obj->base.resv, NULL,
 -                                                    false,
 -                                                    i915_fence_timeout(dev_priv),
 -                                                    GFP_KERNEL);
 -              if (ret < 0)
 -                      goto unpin_fb;
 -
 -              fence = dma_resv_get_excl_unlocked(obj->base.resv);
 -              if (fence) {
 -                      add_rps_boost_after_vblank(new_plane_state->hw.crtc,
 -                                                 fence);
 -                      dma_fence_put(fence);
 -              }
 -      } else {
 -              add_rps_boost_after_vblank(new_plane_state->hw.crtc,
 -                                         new_plane_state->uapi.fence);
 -      }
 -
 -      /*
 -       * We declare pageflips to be interactive and so merit a small bias
 -       * towards upclocking to deliver the frame on time. By only changing
 -       * the RPS thresholds to sample more regularly and aim for higher
 -       * clocks we can hopefully deliver low power workloads (like kodi)
 -       * that are not quite steady state without resorting to forcing
 -       * maximum clocks following a vblank miss (see do_rps_boost()).
 -       */
 -      if (!state->rps_interactive) {
 -              intel_rps_mark_interactive(&dev_priv->gt.rps, true);
 -              state->rps_interactive = true;
 -      }
 -
 -      return 0;
 -
 -unpin_fb:
 -      intel_plane_unpin_fb(new_plane_state);
 -
 -      return ret;
 -}
 -
 -/**
 - * intel_cleanup_plane_fb - Cleans up an fb after plane use
 - * @plane: drm plane to clean up for
 - * @_old_plane_state: the state from the previous modeset
 - *
 - * Cleans up a framebuffer that has just been removed from a plane.
 - */
 -void
 -intel_cleanup_plane_fb(struct drm_plane *plane,
 -                     struct drm_plane_state *_old_plane_state)
 -{
 -      struct intel_plane_state *old_plane_state =
 -              to_intel_plane_state(_old_plane_state);
 -      struct intel_atomic_state *state =
 -              to_intel_atomic_state(old_plane_state->uapi.state);
 -      struct drm_i915_private *dev_priv = to_i915(plane->dev);
 -      struct drm_i915_gem_object *obj = intel_fb_obj(old_plane_state->hw.fb);
 -
 -      if (!obj)
 -              return;
 -
 -      if (state->rps_interactive) {
 -              intel_rps_mark_interactive(&dev_priv->gt.rps, false);
 -              state->rps_interactive = false;
 -      }
 -
 -      /* Should only be called after a successful intel_prepare_plane_fb()! */
 -      intel_plane_unpin_fb(old_plane_state);
 -}
 -
  /**
   * intel_plane_destroy - destroy a plane
   * @plane: plane to destroy
@@@ -10882,6 -11580,22 +10916,6 @@@ static void intel_mode_config_cleanup(s
        drm_mode_config_cleanup(&i915->drm);
  }
  
 -static void plane_config_fini(struct intel_initial_plane_config *plane_config)
 -{
 -      if (plane_config->fb) {
 -              struct drm_framebuffer *fb = &plane_config->fb->base;
 -
 -              /* We may only have the stub and not a full framebuffer */
 -              if (drm_framebuffer_read_refcount(fb))
 -                      drm_framebuffer_put(fb);
 -              else
 -                      kfree(fb);
 -      }
 -
 -      if (plane_config->vma)
 -              i915_vma_put(plane_config->vma);
 -}
 -
  /* part #1: call before irq install */
  int intel_modeset_init_noirq(struct drm_i915_private *i915)
  {
@@@ -11014,9 -11728,27 +11048,9 @@@ int intel_modeset_init_nogem(struct drm
        drm_modeset_unlock_all(dev);
  
        for_each_intel_crtc(dev, crtc) {
 -              struct intel_initial_plane_config plane_config = {};
 -
                if (!to_intel_crtc_state(crtc->base.state)->uapi.active)
                        continue;
 -
 -              /*
 -               * Note that reserving the BIOS fb up front prevents us
 -               * from stuffing other stolen allocations like the ring
 -               * on top.  This prevents some ugliness at boot time, and
 -               * can even allow for smooth boot transitions if the BIOS
 -               * fb is large enough for the active pipe configuration.
 -               */
 -              i915->display->get_initial_plane_config(crtc, &plane_config);
 -
 -              /*
 -               * If the fb is shared between multiple heads, we'll
 -               * just get the first one.
 -               */
 -              intel_find_initial_plane_obj(crtc, &plane_config);
 -
 -              plane_config_fini(&plane_config);
 +              intel_crtc_initial_plane_config(crtc);
        }
  
        /*
index 004fc0a12dfef6859910e3cb5f08e88bdba8a03e,21ce8bccc645acb5b360305728aa05de2fb91ebb..39e11eaec1a3f1cccade492af13a57abcea826a6
@@@ -626,6 -626,12 +626,12 @@@ struct intel_plane_state 
  
        struct intel_fb_view view;
  
+       /* Plane pxp decryption state */
+       bool decrypt;
+       /* Plane state to display black pixels when pxp is borked */
+       bool force_black;
        /* plane control register */
        u32 ctl;
  
@@@ -1574,6 -1580,7 +1580,6 @@@ struct intel_dp 
  
        struct intel_pps pps;
  
 -      bool can_mst; /* this port supports mst */
        bool is_mst;
        int active_mst_links;
  
index cfc40877681cfb9e015e2a2352cc72f4e9991cde,3e1baf9356ec0a62578d86e933232ac34c07befd..a897f4abea0c36cd1ab119249ed9612c89dcd859
@@@ -2555,6 -2555,32 +2555,32 @@@ static inline bool i915_mmio_reg_valid(
  #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)
  
  /* Fuse readout registers for GT */
  #define HSW_PAVP_FUSE1                        _MMIO(0x911C)
- #define   HSW_F1_EU_DIS_SHIFT         16
- #define   HSW_F1_EU_DIS_MASK          (0x3 << HSW_F1_EU_DIS_SHIFT)
+ #define   XEHP_SFC_ENABLE_MASK                REG_GENMASK(27, 24)
+ #define   HSW_F1_EU_DIS_MASK          REG_GENMASK(17, 16)
  #define   HSW_F1_EU_DIS_10EUS         0
  #define   HSW_F1_EU_DIS_8EUS          1
  #define   HSW_F1_EU_DIS_6EUS          2
  
  #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
@@@ -7228,6 -7258,7 +7258,7 @@@ enum 
  #define _PLANE_COLOR_CTL_3_A                  0x703CC /* GLK+ */
  #define   PLANE_COLOR_PIPE_GAMMA_ENABLE               (1 << 30) /* Pre-ICL */
  #define   PLANE_COLOR_YUV_RANGE_CORRECTION_DISABLE    (1 << 28)
+ #define   PLANE_COLOR_PLANE_CSC_ENABLE                        REG_BIT(21) /* ICL+ */
  #define   PLANE_COLOR_INPUT_CSC_ENABLE                (1 << 20) /* ICL+ */
  #define   PLANE_COLOR_PIPE_CSC_ENABLE         (1 << 23) /* Pre-ICL */
  #define   PLANE_COLOR_CSC_MODE_BYPASS                 (0 << 17)
  #define _PLANE_SURF_3(pipe)   _PIPE(pipe, _PLANE_SURF_3_A, _PLANE_SURF_3_B)
  #define PLANE_SURF(pipe, plane)       \
        _MMIO_PLANE(plane, _PLANE_SURF_1(pipe), _PLANE_SURF_2(pipe))
+ #define   PLANE_SURF_DECRYPT                  REG_BIT(2)
  
  #define _PLANE_OFFSET_1_B                     0x711a4
  #define _PLANE_OFFSET_2_B                     0x712a4
  /* irq instances for OTHER_CLASS */
  #define OTHER_GUC_INSTANCE    0
  #define OTHER_GTPM_INSTANCE   1
+ #define OTHER_KCR_INSTANCE    4
  
  #define GEN11_INTR_IDENTITY_REG(x)    _MMIO(0x190060 + ((x) * 4))
  
  #define  HSW_SPR_STRETCH_MAX_X1               REG_FIELD_PREP(HSW_SPR_STRETCH_MAX_MASK, 3)
  #define  HSW_FBCQ_DIS                 (1 << 22)
  #define  BDW_DPRS_MASK_VBLANK_SRD     (1 << 0)
 +#define  SKL_PLANE1_STRETCH_MAX_MASK  REG_GENMASK(1, 0)
 +#define  SKL_PLANE1_STRETCH_MAX_X8    REG_FIELD_PREP(SKL_PLANE1_STRETCH_MAX_MASK, 0)
 +#define  SKL_PLANE1_STRETCH_MAX_X4    REG_FIELD_PREP(SKL_PLANE1_STRETCH_MAX_MASK, 1)
 +#define  SKL_PLANE1_STRETCH_MAX_X2    REG_FIELD_PREP(SKL_PLANE1_STRETCH_MAX_MASK, 2)
 +#define  SKL_PLANE1_STRETCH_MAX_X1    REG_FIELD_PREP(SKL_PLANE1_STRETCH_MAX_MASK, 3)
  #define CHICKEN_PIPESL_1(pipe) _MMIO_PIPE(pipe, _CHICKEN_PIPESL_1_A, _CHICKEN_PIPESL_1_B)
  
  #define _CHICKEN_TRANS_A      0x420c0
@@@ -11378,6 -11406,51 +11411,51 @@@ enum skl_power_gate 
                                        _PAL_PREC_MULTI_SEG_DATA_A, \
                                        _PAL_PREC_MULTI_SEG_DATA_B)
  
+ #define _MMIO_PLANE_GAMC(plane, i, a, b)  _MMIO(_PIPE(plane, a, b) + (i) * 4)
+ /* Plane CSC Registers */
+ #define _PLANE_CSC_RY_GY_1_A  0x70210
+ #define _PLANE_CSC_RY_GY_2_A  0x70310
+ #define _PLANE_CSC_RY_GY_1_B  0x71210
+ #define _PLANE_CSC_RY_GY_2_B  0x71310
+ #define _PLANE_CSC_RY_GY_1(pipe)      _PIPE(pipe, _PLANE_CSC_RY_GY_1_A, \
+                                             _PLANE_CSC_RY_GY_1_B)
+ #define _PLANE_CSC_RY_GY_2(pipe)      _PIPE(pipe, _PLANE_INPUT_CSC_RY_GY_2_A, \
+                                             _PLANE_INPUT_CSC_RY_GY_2_B)
+ #define PLANE_CSC_COEFF(pipe, plane, index)   _MMIO_PLANE(plane, \
+                                                           _PLANE_CSC_RY_GY_1(pipe) +  (index) * 4, \
+                                                           _PLANE_CSC_RY_GY_2(pipe) + (index) * 4)
+ #define _PLANE_CSC_PREOFF_HI_1_A              0x70228
+ #define _PLANE_CSC_PREOFF_HI_2_A              0x70328
+ #define _PLANE_CSC_PREOFF_HI_1_B              0x71228
+ #define _PLANE_CSC_PREOFF_HI_2_B              0x71328
+ #define _PLANE_CSC_PREOFF_HI_1(pipe)  _PIPE(pipe, _PLANE_CSC_PREOFF_HI_1_A, \
+                                             _PLANE_CSC_PREOFF_HI_1_B)
+ #define _PLANE_CSC_PREOFF_HI_2(pipe)  _PIPE(pipe, _PLANE_CSC_PREOFF_HI_2_A, \
+                                             _PLANE_CSC_PREOFF_HI_2_B)
+ #define PLANE_CSC_PREOFF(pipe, plane, index)  _MMIO_PLANE(plane, _PLANE_CSC_PREOFF_HI_1(pipe) + \
+                                                           (index) * 4, _PLANE_CSC_PREOFF_HI_2(pipe) + \
+                                                           (index) * 4)
+ #define _PLANE_CSC_POSTOFF_HI_1_A             0x70234
+ #define _PLANE_CSC_POSTOFF_HI_2_A             0x70334
+ #define _PLANE_CSC_POSTOFF_HI_1_B             0x71234
+ #define _PLANE_CSC_POSTOFF_HI_2_B             0x71334
+ #define _PLANE_CSC_POSTOFF_HI_1(pipe) _PIPE(pipe, _PLANE_CSC_POSTOFF_HI_1_A, \
+                                             _PLANE_CSC_POSTOFF_HI_1_B)
+ #define _PLANE_CSC_POSTOFF_HI_2(pipe) _PIPE(pipe, _PLANE_CSC_POSTOFF_HI_2_A, \
+                                             _PLANE_CSC_POSTOFF_HI_2_B)
+ #define PLANE_CSC_POSTOFF(pipe, plane, index) _MMIO_PLANE(plane, _PLANE_CSC_POSTOFF_HI_1(pipe) + \
+                                                           (index) * 4, _PLANE_CSC_POSTOFF_HI_2(pipe) + \
+                                                           (index) * 4)
  /* pipe CSC & degamma/gamma LUTs on CHV */
  #define _CGM_PIPE_A_CSC_COEFF01       (VLV_DISPLAY_BASE + 0x67900)
  #define _CGM_PIPE_A_CSC_COEFF23       (VLV_DISPLAY_BASE + 0x67904)
This page took 0.18348 seconds and 4 git commands to generate.