Merge drm/drm-next into drm-intel-next
authorJani Nikula <jani.nikula@intel.com>
Mon, 2 Jan 2023 09:31:03 +0000 (11:31 +0200)
committerJani Nikula <jani.nikula@intel.com>
Mon, 2 Jan 2023 09:31:03 +0000 (11:31 +0200)
Sync up with v6.2-rc1.

Signed-off-by: Jani Nikula <jani.nikula@intel.com>
1  2 
drivers/gpu/drm/i915/Makefile
drivers/gpu/drm/i915/i915_driver.c
drivers/gpu/drm/i915/i915_drv.h
drivers/gpu/drm/i915/i915_irq.c
drivers/gpu/drm/i915/i915_pci.c
drivers/gpu/drm/i915/i915_reg.h

index 0ed5985c03b5bb8d17c92c40d975b459ff85d8e2,01974b82d205a757a12dfd92e09bf27d6e07d787..7046e435a15527d5ff03e252514eaf14f801d34b
@@@ -48,7 -48,9 +48,7 @@@ i915-y += i915_driver.o 
          i915_sysfs.o \
          i915_utils.o \
          intel_device_info.o \
 -        intel_dram.o \
          intel_memory_region.o \
 -        intel_pch.o \
          intel_pcode.o \
          intel_pm.o \
          intel_region_ttm.o \
          vlv_sideband.o \
          vlv_suspend.o
  
 +# core peripheral code
 +i915-y += \
 +      soc/intel_dram.o \
 +      soc/intel_pch.o
 +
  # core library code
  i915-y += \
        i915_memcpy.o \
@@@ -130,9 -127,11 +130,11 @@@ gt-y += 
        gt/intel_sseu.o \
        gt/intel_sseu_debugfs.o \
        gt/intel_timeline.o \
+       gt/intel_wopcm.o \
        gt/intel_workarounds.o \
        gt/shmem_utils.o \
        gt/sysfs_engines.o
  # x86 intel-gtt module support
  gt-$(CONFIG_X86) += gt/intel_ggtt_gmch.o
  # autogenerated null render state
@@@ -186,8 -185,7 +188,7 @@@ i915-y += 
          i915_trace_points.o \
          i915_ttm_buddy_manager.o \
          i915_vma.o \
-         i915_vma_resource.o \
-         intel_wopcm.o
+         i915_vma_resource.o
  
  # general-purpose microcontroller (GuC) support
  i915-y += gt/uc/intel_uc.o \
index 9ceea52ad9db6b2a418e4c97a8c4bcbfb0c184ff,69103ae37779217bc4235383aad1c757c63cd57c..ef94baebb337cde5191af574ae59812bcf08105e
@@@ -75,8 -75,6 +75,8 @@@
  
  #include "pxp/intel_pxp_pm.h"
  
 +#include "soc/intel_dram.h"
 +
  #include "i915_file_private.h"
  #include "i915_debugfs.h"
  #include "i915_driver.h"
@@@ -95,6 -93,7 +95,6 @@@
  #include "i915_sysfs.h"
  #include "i915_utils.h"
  #include "i915_vgpu.h"
 -#include "intel_dram.h"
  #include "intel_gvt.h"
  #include "intel_memory_region.h"
  #include "intel_pci_config.h"
@@@ -373,8 -372,6 +373,6 @@@ static int i915_driver_early_probe(stru
        if (ret)
                goto err_ttm;
  
-       intel_wopcm_init_early(&dev_priv->wopcm);
        ret = intel_root_gt_init_early(dev_priv);
        if (ret < 0)
                goto err_rootgt;
index 05b84196216c43c90149e14729ff1c40fcebc5b6,a380db36d52c40e21da78a834bc6b442f857e518..360743a8a1636a44b037a1fbb925fcc8ebb7a1c5
@@@ -49,8 -49,6 +49,8 @@@
  #include "gt/intel_workarounds.h"
  #include "gt/uc/intel_uc.h"
  
 +#include "soc/intel_pch.h"
 +
  #include "i915_drm_client.h"
  #include "i915_gem.h"
  #include "i915_gpu_error.h"
  #include "i915_utils.h"
  #include "intel_device_info.h"
  #include "intel_memory_region.h"
 -#include "intel_pch.h"
  #include "intel_runtime_pm.h"
  #include "intel_step.h"
  #include "intel_uncore.h"
- #include "intel_wopcm.h"
  
  struct drm_i915_clock_gating_funcs;
  struct drm_i915_gem_object;
@@@ -236,8 -234,6 +235,6 @@@ struct drm_i915_private 
  
        struct intel_gvt *gvt;
  
-       struct intel_wopcm wopcm;
        struct pci_dev *bridge_dev;
  
        struct rb_root uabi_engines;
@@@ -470,7 -466,6 +467,7 @@@ static inline struct intel_gt *to_gt(st
  #define INTEL_REVID(dev_priv) (to_pci_dev((dev_priv)->drm.dev)->revision)
  
  #define HAS_DSB(dev_priv)     (INTEL_INFO(dev_priv)->display.has_dsb)
 +#define HAS_DSC(__i915)               (RUNTIME_INFO(__i915)->has_dsc)
  
  #define INTEL_DISPLAY_STEP(__i915) (RUNTIME_INFO(__i915)->step.display_step)
  #define INTEL_GRAPHICS_STEP(__i915) (RUNTIME_INFO(__i915)->step.graphics_step)
@@@ -727,10 -722,10 +724,14 @@@ IS_SUBPLATFORM(const struct drm_i915_pr
  #define IS_XEHPSDV_GRAPHICS_STEP(__i915, since, until) \
        (IS_XEHPSDV(__i915) && IS_GRAPHICS_STEP(__i915, since, until))
  
+ #define IS_MTL_GRAPHICS_STEP(__i915, variant, since, until) \
+       (IS_SUBPLATFORM(__i915, INTEL_METEORLAKE, INTEL_SUBPLATFORM_##variant) && \
+        IS_GRAPHICS_STEP(__i915, since, until))
 +#define IS_MTL_DISPLAY_STEP(__i915, since, until) \
 +      (IS_METEORLAKE(__i915) && \
 +       IS_DISPLAY_STEP(__i915, since, until))
 +
  /*
   * DG2 hardware steppings are a bit unusual.  The hardware design was forked to
   * create three variants (G10, G11, and G12) which each have distinct
  #define __HAS_ENGINE(engine_mask, id) ((engine_mask) & BIT(id))
  #define HAS_ENGINE(gt, id) __HAS_ENGINE((gt)->info.engine_mask, id)
  
- #define ENGINE_INSTANCES_MASK(gt, first, count) ({            \
+ #define __ENGINE_INSTANCES_MASK(mask, first, count) ({                        \
        unsigned int first__ = (first);                                 \
        unsigned int count__ = (count);                                 \
-       ((gt)->info.engine_mask &                                               \
-        GENMASK(first__ + count__ - 1, first__)) >> first__;           \
+       ((mask) & GENMASK(first__ + count__ - 1, first__)) >> first__;  \
  })
+ #define ENGINE_INSTANCES_MASK(gt, first, count) \
+       __ENGINE_INSTANCES_MASK((gt)->info.engine_mask, first, count)
  #define RCS_MASK(gt) \
        ENGINE_INSTANCES_MASK(gt, RCS0, I915_MAX_RCS)
  #define BCS_MASK(gt) \
index c4e46da6502c47b0597e420e5302fbf5cc038bf8,edfe363af8389f1e5f1ec396d8b39c4612be23e7..54ea28cf8a1a5965224deded22556fa75052ea5c
@@@ -1085,8 -1085,9 +1085,9 @@@ static void ivb_parity_work(struct work
                kobject_uevent_env(&dev_priv->drm.primary->kdev->kobj,
                                   KOBJ_CHANGE, parity_event);
  
-               DRM_DEBUG("Parity error: Slice = %d, Row = %d, Bank = %d, Sub bank = %d.\n",
-                         slice, row, bank, subbank);
+               drm_dbg(&dev_priv->drm,
+                       "Parity error: Slice = %d, Row = %d, Bank = %d, Sub bank = %d.\n",
+                       slice, row, bank, subbank);
  
                kfree(parity_event[4]);
                kfree(parity_event[3]);
@@@ -1973,10 -1974,7 +1974,10 @@@ static void icp_irq_handler(struct drm_
        if (ddi_hotplug_trigger) {
                u32 dig_hotplug_reg;
  
 +              /* Locking due to DSI native GPIO sequences */
 +              spin_lock(&dev_priv->irq_lock);
                dig_hotplug_reg = intel_uncore_rmw(&dev_priv->uncore, SHOTPLUG_CTL_DDI, 0, 0);
 +              spin_unlock(&dev_priv->irq_lock);
  
                intel_get_hpd_pins(dev_priv, &pin_mask, &long_mask,
                                   ddi_hotplug_trigger, dig_hotplug_reg,
@@@ -2450,8 -2448,8 +2451,8 @@@ gen8_de_irq_handler(struct drm_i915_pri
                        ret = IRQ_HANDLED;
                        gen8_de_misc_irq_handler(dev_priv, iir);
                } else {
 -                      drm_err(&dev_priv->drm,
 -                              "The master control interrupt lied (DE MISC)!\n");
 +                      drm_err_ratelimited(&dev_priv->drm,
 +                                          "The master control interrupt lied (DE MISC)!\n");
                }
        }
  
                        ret = IRQ_HANDLED;
                        gen11_hpd_irq_handler(dev_priv, iir);
                } else {
 -                      drm_err(&dev_priv->drm,
 -                              "The master control interrupt lied, (DE HPD)!\n");
 +                      drm_err_ratelimited(&dev_priv->drm,
 +                                          "The master control interrupt lied, (DE HPD)!\n");
                }
        }
  
                        }
  
                        if (!found)
 -                              drm_err(&dev_priv->drm,
 -                                      "Unexpected DE Port interrupt\n");
 +                              drm_err_ratelimited(&dev_priv->drm,
 +                                                  "Unexpected DE Port interrupt\n");
                }
                else
 -                      drm_err(&dev_priv->drm,
 -                              "The master control interrupt lied (DE PORT)!\n");
 +                      drm_err_ratelimited(&dev_priv->drm,
 +                                          "The master control interrupt lied (DE PORT)!\n");
        }
  
        for_each_pipe(dev_priv, pipe) {
  
                iir = intel_uncore_read(&dev_priv->uncore, GEN8_DE_PIPE_IIR(pipe));
                if (!iir) {
 -                      drm_err(&dev_priv->drm,
 -                              "The master control interrupt lied (DE PIPE)!\n");
 +                      drm_err_ratelimited(&dev_priv->drm,
 +                                          "The master control interrupt lied (DE PIPE)!\n");
                        continue;
                }
  
  
                fault_errors = iir & gen8_de_pipe_fault_mask(dev_priv);
                if (fault_errors)
 -                      drm_err(&dev_priv->drm,
 -                              "Fault errors on pipe %c: 0x%08x\n",
 -                              pipe_name(pipe),
 -                              fault_errors);
 +                      drm_err_ratelimited(&dev_priv->drm,
 +                                          "Fault errors on pipe %c: 0x%08x\n",
 +                                          pipe_name(pipe),
 +                                          fault_errors);
        }
  
        if (HAS_PCH_SPLIT(dev_priv) && !HAS_PCH_NOP(dev_priv) &&
@@@ -2776,7 -2774,8 +2777,8 @@@ static irqreturn_t dg1_irq_handler(int 
                master_ctl = raw_reg_read(regs, GEN11_GFX_MSTR_IRQ);
                raw_reg_write(regs, GEN11_GFX_MSTR_IRQ, master_ctl);
        } else {
-               DRM_ERROR("Tile not supported: 0x%08x\n", master_tile_ctl);
+               drm_err(&i915->drm, "Tile not supported: 0x%08x\n",
+                       master_tile_ctl);
                dg1_master_intr_enable(regs);
                return IRQ_NONE;
        }
@@@ -3942,7 -3941,7 +3944,7 @@@ static void i8xx_error_irq_ack(struct d
  static void i8xx_error_irq_handler(struct drm_i915_private *dev_priv,
                                   u16 eir, u16 eir_stuck)
  {
-       DRM_DEBUG("Master Error: EIR 0x%04x\n", eir);
+       drm_dbg(&dev_priv->drm, "Master Error: EIR 0x%04x\n", eir);
  
        if (eir_stuck)
                drm_dbg(&dev_priv->drm, "EIR stuck: 0x%04x, masked\n",
@@@ -3977,7 -3976,7 +3979,7 @@@ static void i9xx_error_irq_ack(struct d
  static void i9xx_error_irq_handler(struct drm_i915_private *dev_priv,
                                   u32 eir, u32 eir_stuck)
  {
-       DRM_DEBUG("Master Error, EIR 0x%08x\n", eir);
+       drm_dbg(&dev_priv->drm, "Master Error, EIR 0x%08x\n", eir);
  
        if (eir_stuck)
                drm_dbg(&dev_priv->drm, "EIR stuck: 0x%08x, masked\n",
index b28ccbebc821feb5dd49bdd6b89ec1d05b5ed0b9,6da9784fe4a244bd4088817db862f2ef677a9ffa..48225bf6efe7c0bdb9c6b15c66c37d06e3c196f4
                [PIPE_D] = TGL_CURSOR_D_OFFSET, \
        }
  
 -#define I9XX_COLORS \
 +#define I845_COLORS \
        .display.color = { .gamma_lut_size = 256 }
 -#define I965_COLORS \
 +#define I9XX_COLORS \
        .display.color = { .gamma_lut_size = 129, \
                   .gamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING, \
        }
        .dma_mask_size = 32, \
        I845_PIPE_OFFSETS, \
        I845_CURSOR_OFFSETS, \
 -      I9XX_COLORS, \
 +      I845_COLORS, \
        GEN_DEFAULT_PAGE_SIZES, \
        GEN_DEFAULT_REGIONS
  
@@@ -341,7 -341,7 +341,7 @@@ static const struct intel_device_info p
        .dma_mask_size = 36, \
        I9XX_PIPE_OFFSETS, \
        I9XX_CURSOR_OFFSETS, \
 -      I965_COLORS, \
 +      I9XX_COLORS, \
        GEN_DEFAULT_PAGE_SIZES, \
        GEN_DEFAULT_REGIONS
  
@@@ -547,7 -547,7 +547,7 @@@ static const struct intel_device_info v
        .display.mmio_offset = VLV_DISPLAY_BASE,
        I9XX_PIPE_OFFSETS,
        I9XX_CURSOR_OFFSETS,
 -      I965_COLORS,
 +      I9XX_COLORS,
        GEN_DEFAULT_PAGE_SIZES,
        GEN_DEFAULT_REGIONS,
  };
@@@ -889,7 -889,7 +889,7 @@@ static const struct intel_device_info j
        TGL_CURSOR_OFFSETS, \
        .has_global_mocs = 1, \
        .has_pxp = 1, \
 -      .display.has_dsb = 0 /* FIXME: LUT load is broken with DSB */
 +      .display.has_dsb = 1
  
  static const struct intel_device_info tgl_info = {
        GEN12_FEATURES,
@@@ -948,7 -948,7 +948,7 @@@ static const struct intel_device_info a
  #define XE_LPD_FEATURES \
        .display.abox_mask = GENMASK(1, 0),                                     \
        .display.color = {                                                      \
 -              .degamma_lut_size = 128, .gamma_lut_size = 1024,                \
 +              .degamma_lut_size = 129, .gamma_lut_size = 1024,                \
                .degamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING |             \
                                     DRM_COLOR_LUT_EQUAL_CHANNELS,              \
        },                                                                      \
@@@ -1117,7 -1117,6 +1117,7 @@@ static const struct intel_device_info p
        XE_LPD_FEATURES,        \
        .__runtime.display.ip.ver = 14, \
        .display.has_cdclk_crawl = 1, \
 +      .display.has_cdclk_squash = 1, \
        .__runtime.fbc_mask = BIT(INTEL_FBC_A) | BIT(INTEL_FBC_B)
  
  static const struct intel_gt_definition xelpmp_extra_gt[] = {
        {}
  };
  
 -__maybe_unused
  static const struct intel_device_info mtl_info = {
        XE_HP_FEATURES,
        XE_LPDP_FEATURES,
        .extra_gt_list = xelpmp_extra_gt,
        .has_flat_ccs = 0,
        .has_gmd_id = 1,
+       .has_guc_deprivilege = 1,
        .has_mslice_steering = 0,
        .has_snoop = 1,
        .__runtime.memory_regions = REGION_SMEM | REGION_STOLEN_LMEM,
index 37452140cb93a9d53f892645c99debc21224edf2,8e1892d147741c47dd4a25df76169c6e5441ee6b..c76a02c6d22c4ea64f97ac4e702e3b35c186a164
  #define GEN11_VEBOX2_RING_BASE                0x1d8000
  #define XEHP_VEBOX3_RING_BASE         0x1e8000
  #define XEHP_VEBOX4_RING_BASE         0x1f8000
+ #define MTL_GSC_RING_BASE             0x11a000
  #define GEN12_COMPUTE0_RING_BASE      0x1a000
  #define GEN12_COMPUTE1_RING_BASE      0x1c000
  #define GEN12_COMPUTE2_RING_BASE      0x1e000
  #define   PALETTE_RED_MASK            REG_GENMASK(23, 16)
  #define   PALETTE_GREEN_MASK          REG_GENMASK(15, 8)
  #define   PALETTE_BLUE_MASK           REG_GENMASK(7, 0)
 +/* pre-i965 10bit interpolated mode ldw */
 +#define   PALETTE_10BIT_RED_LDW_MASK  REG_GENMASK(23, 16)
 +#define   PALETTE_10BIT_GREEN_LDW_MASK        REG_GENMASK(15, 8)
 +#define   PALETTE_10BIT_BLUE_LDW_MASK REG_GENMASK(7, 0)
 +/* pre-i965 10bit interpolated mode udw */
 +#define   PALETTE_10BIT_RED_EXP_MASK  REG_GENMASK(23, 22)
 +#define   PALETTE_10BIT_RED_MANT_MASK REG_GENMASK(21, 18)
 +#define   PALETTE_10BIT_RED_UDW_MASK  REG_GENMASK(17, 16)
 +#define   PALETTE_10BIT_GREEN_EXP_MASK        REG_GENMASK(15, 14)
 +#define   PALETTE_10BIT_GREEN_MANT_MASK       REG_GENMASK(13, 10)
 +#define   PALETTE_10BIT_GREEN_UDW_MASK        REG_GENMASK(9, 8)
 +#define   PALETTE_10BIT_BLUE_EXP_MASK REG_GENMASK(7, 6)
 +#define   PALETTE_10BIT_BLUE_MANT_MASK        REG_GENMASK(5, 2)
 +#define   PALETTE_10BIT_BLUE_UDW_MASK REG_GENMASK(1, 0)
  #define PALETTE(pipe, i)      _MMIO(DISPLAY_MMIO_BASE(dev_priv) + \
                                      _PICK((pipe), _PALETTE_A,         \
                                            _PALETTE_B, _CHV_PALETTE_C) + \
  #define   SDVO_PIPE_SEL_MASK_CHV              (3 << 24)
  #define   SDVO_PIPE_SEL_CHV(pipe)             ((pipe) << 24)
  
 -
 -/* DVO port control */
 -#define _DVOA                 0x61120
 -#define DVOA                  _MMIO(_DVOA)
 -#define _DVOB                 0x61140
 -#define DVOB                  _MMIO(_DVOB)
 -#define _DVOC                 0x61160
 -#define DVOC                  _MMIO(_DVOC)
 -#define   DVO_ENABLE                  (1 << 31)
 -#define   DVO_PIPE_SEL_SHIFT          30
 -#define   DVO_PIPE_SEL_MASK           (1 << 30)
 -#define   DVO_PIPE_SEL(pipe)          ((pipe) << 30)
 -#define   DVO_PIPE_STALL_UNUSED               (0 << 28)
 -#define   DVO_PIPE_STALL              (1 << 28)
 -#define   DVO_PIPE_STALL_TV           (2 << 28)
 -#define   DVO_PIPE_STALL_MASK         (3 << 28)
 -#define   DVO_USE_VGA_SYNC            (1 << 15)
 -#define   DVO_DATA_ORDER_I740         (0 << 14)
 -#define   DVO_DATA_ORDER_FP           (1 << 14)
 -#define   DVO_VSYNC_DISABLE           (1 << 11)
 -#define   DVO_HSYNC_DISABLE           (1 << 10)
 -#define   DVO_VSYNC_TRISTATE          (1 << 9)
 -#define   DVO_HSYNC_TRISTATE          (1 << 8)
 -#define   DVO_BORDER_ENABLE           (1 << 7)
 -#define   DVO_DATA_ORDER_GBRG         (1 << 6)
 -#define   DVO_DATA_ORDER_RGGB         (0 << 6)
 -#define   DVO_DATA_ORDER_GBRG_ERRATA  (0 << 6)
 -#define   DVO_DATA_ORDER_RGGB_ERRATA  (1 << 6)
 -#define   DVO_VSYNC_ACTIVE_HIGH               (1 << 4)
 -#define   DVO_HSYNC_ACTIVE_HIGH               (1 << 3)
 -#define   DVO_BLANK_ACTIVE_HIGH               (1 << 2)
 -#define   DVO_OUTPUT_CSTATE_PIXELS    (1 << 1)        /* SDG only */
 -#define   DVO_OUTPUT_SOURCE_SIZE_PIXELS       (1 << 0)        /* SDG only */
 -#define   DVO_PRESERVE_MASK           (0x7 << 24)
 -#define DVOA_SRCDIM           _MMIO(0x61124)
 -#define DVOB_SRCDIM           _MMIO(0x61144)
 -#define DVOC_SRCDIM           _MMIO(0x61164)
 -#define   DVO_SRCDIM_HORIZONTAL_SHIFT 12
 -#define   DVO_SRCDIM_VERTICAL_SHIFT   0
 -
  /* LVDS port control */
  #define LVDS                  _MMIO(0x61180)
  /*
  
  #define  _PIPEAGCMAX           0x70010
  #define  _PIPEBGCMAX           0x71010
 -#define PIPEGCMAX(pipe, i)     _MMIO_PIPE2(pipe, _PIPEAGCMAX + (i) * 4)
 +#define PIPEGCMAX(pipe, i)     _MMIO_PIPE2(pipe, _PIPEAGCMAX + (i) * 4) /* u1.16 */
  
  #define _PIPE_ARB_CTL_A                       0x70028 /* icl+ */
  #define PIPE_ARB_CTL(pipe)            _MMIO_PIPE2(pipe, _PIPE_ARB_CTL_A)
  
  #define  _PREC_PIPEAGCMAX              0x4d000
  #define  _PREC_PIPEBGCMAX              0x4d010
 -#define PREC_PIPEGCMAX(pipe, i)        _MMIO(_PIPE(pipe, _PIPEAGCMAX, _PIPEBGCMAX) + (i) * 4)
 +#define PREC_PIPEGCMAX(pipe, i)        _MMIO(_PIPE(pipe, _PIPEAGCMAX, _PIPEBGCMAX) + (i) * 4) /* u1.16 */
  
  #define _GAMMA_MODE_A         0x4a480
  #define _GAMMA_MODE_B         0x4ac80
  #define GAMMA_MODE(pipe) _MMIO_PIPE(pipe, _GAMMA_MODE_A, _GAMMA_MODE_B)
 -#define  PRE_CSC_GAMMA_ENABLE (1 << 31)
 -#define  POST_CSC_GAMMA_ENABLE        (1 << 30)
 -#define  GAMMA_MODE_MODE_MASK (3 << 0)
 -#define  GAMMA_MODE_MODE_8BIT (0 << 0)
 -#define  GAMMA_MODE_MODE_10BIT        (1 << 0)
 -#define  GAMMA_MODE_MODE_12BIT        (2 << 0)
 -#define  GAMMA_MODE_MODE_SPLIT        (3 << 0) /* ivb-bdw */
 -#define  GAMMA_MODE_MODE_12BIT_MULTI_SEGMENTED        (3 << 0) /* icl + */
 +#define  PRE_CSC_GAMMA_ENABLE                 REG_BIT(31) /* icl+ */
 +#define  POST_CSC_GAMMA_ENABLE                        REG_BIT(30) /* icl+ */
 +#define  PALETTE_ANTICOL_DISABLE              REG_BIT(15) /* skl+ */
 +#define  GAMMA_MODE_MODE_MASK                 REG_GENMASK(1, 0)
 +#define  GAMMA_MODE_MODE_8BIT                 REG_FIELD_PREP(GAMMA_MODE_MODE_MASK, 0)
 +#define  GAMMA_MODE_MODE_10BIT                        REG_FIELD_PREP(GAMMA_MODE_MODE_MASK, 1)
 +#define  GAMMA_MODE_MODE_12BIT                        REG_FIELD_PREP(GAMMA_MODE_MODE_MASK, 2)
 +#define  GAMMA_MODE_MODE_SPLIT                        REG_FIELD_PREP(GAMMA_MODE_MODE_MASK, 3) /* ivb-bdw */
 +#define  GAMMA_MODE_MODE_12BIT_MULTI_SEG      REG_FIELD_PREP(GAMMA_MODE_MODE_MASK, 3) /* icl-tgl */
  
  /* Display Internal Timeout Register */
  #define RM_TIMEOUT            _MMIO(0x42060)
  
  #define SHOTPLUG_CTL_DDI                              _MMIO(0xc4030)
  #define   SHOTPLUG_CTL_DDI_HPD_ENABLE(hpd_pin)                        (0x8 << (_HPD_PIN_DDI(hpd_pin) * 4))
 +#define   SHOTPLUG_CTL_DDI_HPD_OUTPUT_DATA(hpd_pin)           (0x4 << (_HPD_PIN_DDI(hpd_pin) * 4))
  #define   SHOTPLUG_CTL_DDI_HPD_STATUS_MASK(hpd_pin)           (0x3 << (_HPD_PIN_DDI(hpd_pin) * 4))
  #define   SHOTPLUG_CTL_DDI_HPD_NO_DETECT(hpd_pin)             (0x0 << (_HPD_PIN_DDI(hpd_pin) * 4))
  #define   SHOTPLUG_CTL_DDI_HPD_SHORT_DETECT(hpd_pin)          (0x1 << (_HPD_PIN_DDI(hpd_pin) * 4))
  #define  CHASSIS_CLK_REQ_DURATION_MASK        (0xf << 8)
  #define  CHASSIS_CLK_REQ_DURATION(x)  ((x) << 8)
  #define  SBCLK_RUN_REFCLK_DIS         (1 << 7)
 +#define  ICP_SECOND_PPS_IO_SELECT     REG_BIT(2)
  #define  SPT_PWM_GRANULARITY          (1 << 0)
  #define SOUTH_CHICKEN2                _MMIO(0xc2004)
  #define  FDI_MPHY_IOSFSB_RESET_STATUS (1 << 13)
  /*   XEHP_PCODE_FREQUENCY_CONFIG param2 */
  #define     PCODE_MBOX_DOMAIN_NONE            0x0
  #define     PCODE_MBOX_DOMAIN_MEDIAFF         0x3
+ /* Wa_14017210380: mtl */
+ #define   PCODE_MBOX_GT_STATE                 0x50
+ /* sub-commands (param1) */
+ #define     PCODE_MBOX_GT_STATE_MEDIA_BUSY    0x1
+ #define     PCODE_MBOX_GT_STATE_MEDIA_NOT_BUSY        0x2
+ /* param2 */
+ #define     PCODE_MBOX_GT_STATE_DOMAIN_MEDIA  0x1
  #define GEN6_PCODE_DATA                               _MMIO(0x138128)
  #define   GEN6_PCODE_FREQ_IA_RATIO_SHIFT      8
  #define   GEN6_PCODE_FREQ_RING_RATIO_SHIFT    16
@@@ -7523,10 -7556,11 +7533,10 @@@ enum skl_power_gate 
  #define _PAL_PREC_INDEX_A     0x4A400
  #define _PAL_PREC_INDEX_B     0x4AC00
  #define _PAL_PREC_INDEX_C     0x4B400
 -#define   PAL_PREC_10_12_BIT          (0 << 31)
 -#define   PAL_PREC_SPLIT_MODE         (1 << 31)
 -#define   PAL_PREC_AUTO_INCREMENT     (1 << 15)
 -#define   PAL_PREC_INDEX_VALUE_MASK   (0x3ff << 0)
 -#define   PAL_PREC_INDEX_VALUE(x)     ((x) << 0)
 +#define   PAL_PREC_SPLIT_MODE         REG_BIT(31)
 +#define   PAL_PREC_AUTO_INCREMENT     REG_BIT(15)
 +#define   PAL_PREC_INDEX_VALUE_MASK   REG_GENMASK(9, 0)
 +#define   PAL_PREC_INDEX_VALUE(x)     REG_FIELD_PREP(PAL_PREC_INDEX_VALUE_MASK, (x))
  #define _PAL_PREC_DATA_A      0x4A404
  #define _PAL_PREC_DATA_B      0x4AC04
  #define _PAL_PREC_DATA_C      0x4B404
  
  #define PREC_PAL_INDEX(pipe)          _MMIO_PIPE(pipe, _PAL_PREC_INDEX_A, _PAL_PREC_INDEX_B)
  #define PREC_PAL_DATA(pipe)           _MMIO_PIPE(pipe, _PAL_PREC_DATA_A, _PAL_PREC_DATA_B)
 -#define PREC_PAL_GC_MAX(pipe, i)      _MMIO(_PIPE(pipe, _PAL_PREC_GC_MAX_A, _PAL_PREC_GC_MAX_B) + (i) * 4)
 -#define PREC_PAL_EXT_GC_MAX(pipe, i)  _MMIO(_PIPE(pipe, _PAL_PREC_EXT_GC_MAX_A, _PAL_PREC_EXT_GC_MAX_B) + (i) * 4)
 -#define PREC_PAL_EXT2_GC_MAX(pipe, i) _MMIO(_PIPE(pipe, _PAL_PREC_EXT2_GC_MAX_A, _PAL_PREC_EXT2_GC_MAX_B) + (i) * 4)
 +#define PREC_PAL_GC_MAX(pipe, i)      _MMIO(_PIPE(pipe, _PAL_PREC_GC_MAX_A, _PAL_PREC_GC_MAX_B) + (i) * 4) /* u1.16 */
 +#define PREC_PAL_EXT_GC_MAX(pipe, i)  _MMIO(_PIPE(pipe, _PAL_PREC_EXT_GC_MAX_A, _PAL_PREC_EXT_GC_MAX_B) + (i) * 4) /* u3.16 */
 +#define PREC_PAL_EXT2_GC_MAX(pipe, i) _MMIO(_PIPE(pipe, _PAL_PREC_EXT2_GC_MAX_A, _PAL_PREC_EXT2_GC_MAX_B) + (i) * 4) /* glk+, u3.16 */
  
  #define _PRE_CSC_GAMC_INDEX_A 0x4A484
  #define _PRE_CSC_GAMC_INDEX_B 0x4AC84
  #define _PRE_CSC_GAMC_INDEX_C 0x4B484
 -#define   PRE_CSC_GAMC_AUTO_INCREMENT (1 << 10)
 +#define   PRE_CSC_GAMC_AUTO_INCREMENT REG_BIT(10)
 +#define   PRE_CSC_GAMC_INDEX_VALUE_MASK       REG_GENMASK(7, 0)
 +#define   PRE_CSC_GAMC_INDEX_VALUE(x) REG_FIELD_PREP(PRE_CSC_GAMC_INDEX_VALUE_MASK, (x))
  #define _PRE_CSC_GAMC_DATA_A  0x4A488
  #define _PRE_CSC_GAMC_DATA_B  0x4AC88
  #define _PRE_CSC_GAMC_DATA_C  0x4B488
  /* ICL Multi segmented gamma */
  #define _PAL_PREC_MULTI_SEG_INDEX_A   0x4A408
  #define _PAL_PREC_MULTI_SEG_INDEX_B   0x4AC08
 -#define  PAL_PREC_MULTI_SEGMENT_AUTO_INCREMENT                REG_BIT(15)
 -#define  PAL_PREC_MULTI_SEGMENT_INDEX_VALUE_MASK      REG_GENMASK(4, 0)
 +#define   PAL_PREC_MULTI_SEG_AUTO_INCREMENT   REG_BIT(15)
 +#define   PAL_PREC_MULTI_SEG_INDEX_VALUE_MASK REG_GENMASK(4, 0)
 +#define   PAL_PREC_MULTI_SEG_INDEX_VALUE(x)   REG_FIELD_PREP(PAL_PREC_MULTI_SEG_INDEX_VALUE_MASK, (x))
  
  #define _PAL_PREC_MULTI_SEG_DATA_A    0x4A40C
  #define _PAL_PREC_MULTI_SEG_DATA_B    0x4AC0C