]> Git Repo - J-linux.git/commitdiff
Merge drm/drm-next into drm-intel-next
authorRodrigo Vivi <[email protected]>
Tue, 2 Apr 2024 12:17:13 +0000 (08:17 -0400)
committerRodrigo Vivi <[email protected]>
Tue, 2 Apr 2024 12:17:13 +0000 (08:17 -0400)
Catching up on 6.9-rc2

Signed-off-by: Rodrigo Vivi <[email protected]>
1  2 
drivers/gpu/drm/i915/display/intel_dp.c
drivers/gpu/drm/i915/gt/intel_execlists_submission.c
drivers/gpu/drm/i915/gt/intel_workarounds.c
drivers/gpu/drm/xe/Makefile
include/uapi/drm/i915_drm.h

index 6a67eb37929288a8f4f1b469990bc1ca296ab6fd,f98ef4b42a448f57d5dfaf0459cba23a00946870..b393ddbb7b35b819c0fad01c03bc902c78816389
@@@ -443,9 -443,11 +443,9 @@@ static int dg2_max_source_rate(struct i
  
  static int icl_max_source_rate(struct intel_dp *intel_dp)
  {
 -      struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
 -      struct drm_i915_private *dev_priv = to_i915(dig_port->base.base.dev);
 -      enum phy phy = intel_port_to_phy(dev_priv, dig_port->base.port);
 +      struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
  
 -      if (intel_phy_is_combo(dev_priv, phy) && !intel_dp_is_edp(intel_dp))
 +      if (intel_encoder_is_combo(encoder) && !intel_dp_is_edp(intel_dp))
                return 540000;
  
        return 810000;
@@@ -461,9 -463,11 +461,9 @@@ static int ehl_max_source_rate(struct i
  
  static int mtl_max_source_rate(struct intel_dp *intel_dp)
  {
 -      struct intel_digital_port *dig_port = dp_to_dig_port(intel_dp);
 -      struct drm_i915_private *i915 = to_i915(dig_port->base.base.dev);
 -      enum phy phy = intel_port_to_phy(i915, dig_port->base.port);
 +      struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
  
 -      if (intel_is_c10phy(i915, phy))
 +      if (intel_encoder_is_c10phy(encoder))
                return 810000;
  
        return 2000000;
@@@ -495,7 -499,7 +495,7 @@@ intel_dp_set_source_rates(struct intel_
        /* The values must be in increasing order */
        static const int mtl_rates[] = {
                162000, 216000, 243000, 270000, 324000, 432000, 540000, 675000,
 -              810000, 1000000, 1350000, 2000000,
 +              810000, 1000000, 2000000,
        };
        static const int icl_rates[] = {
                162000, 216000, 270000, 324000, 432000, 540000, 648000, 810000,
@@@ -1913,9 -1917,8 +1913,9 @@@ icl_dsc_compute_link_config(struct inte
        dsc_max_bpp = min(dsc_max_bpp, pipe_bpp - 1);
  
        for (i = 0; i < ARRAY_SIZE(valid_dsc_bpp); i++) {
 -              if (valid_dsc_bpp[i] < dsc_min_bpp ||
 -                  valid_dsc_bpp[i] > dsc_max_bpp)
 +              if (valid_dsc_bpp[i] < dsc_min_bpp)
 +                      continue;
 +              if (valid_dsc_bpp[i] > dsc_max_bpp)
                        break;
  
                ret = dsc_compute_link_config(intel_dp,
@@@ -4036,84 -4039,39 +4036,84 @@@ intel_dp_get_dpcd(struct intel_dp *inte
                                           intel_dp->downstream_ports) == 0;
  }
  
 -static bool
 -intel_dp_can_mst(struct intel_dp *intel_dp)
 +static const char *intel_dp_mst_mode_str(enum drm_dp_mst_mode mst_mode)
 +{
 +      if (mst_mode == DRM_DP_MST)
 +              return "MST";
 +      else if (mst_mode == DRM_DP_SST_SIDEBAND_MSG)
 +              return "SST w/ sideband messaging";
 +      else
 +              return "SST";
 +}
 +
 +static enum drm_dp_mst_mode
 +intel_dp_mst_mode_choose(struct intel_dp *intel_dp,
 +                       enum drm_dp_mst_mode sink_mst_mode)
  {
        struct drm_i915_private *i915 = dp_to_i915(intel_dp);
  
 -      return i915->display.params.enable_dp_mst &&
 -              intel_dp_mst_source_support(intel_dp) &&
 -              drm_dp_read_mst_cap(&intel_dp->aux, intel_dp->dpcd);
 +      if (!i915->display.params.enable_dp_mst)
 +              return DRM_DP_SST;
 +
 +      if (!intel_dp_mst_source_support(intel_dp))
 +              return DRM_DP_SST;
 +
 +      if (sink_mst_mode == DRM_DP_SST_SIDEBAND_MSG &&
 +          !(intel_dp->dpcd[DP_MAIN_LINK_CHANNEL_CODING] & DP_CAP_ANSI_128B132B))
 +              return DRM_DP_SST;
 +
 +      return sink_mst_mode;
  }
  
 -static void
 -intel_dp_configure_mst(struct intel_dp *intel_dp)
 +static enum drm_dp_mst_mode
 +intel_dp_mst_detect(struct intel_dp *intel_dp)
  {
        struct drm_i915_private *i915 = dp_to_i915(intel_dp);
 -      struct intel_encoder *encoder =
 -              &dp_to_dig_port(intel_dp)->base;
 -      bool sink_can_mst = drm_dp_read_mst_cap(&intel_dp->aux, intel_dp->dpcd);
 +      struct intel_encoder *encoder = &dp_to_dig_port(intel_dp)->base;
 +      enum drm_dp_mst_mode sink_mst_mode;
 +      enum drm_dp_mst_mode mst_detect;
 +
 +      sink_mst_mode = drm_dp_read_mst_cap(&intel_dp->aux, intel_dp->dpcd);
 +
 +      mst_detect = intel_dp_mst_mode_choose(intel_dp, sink_mst_mode);
  
        drm_dbg_kms(&i915->drm,
 -                  "[ENCODER:%d:%s] MST support: port: %s, sink: %s, modparam: %s\n",
 +                  "[ENCODER:%d:%s] MST support: port: %s, sink: %s, modparam: %s -> enable: %s\n",
                    encoder->base.base.id, encoder->base.name,
                    str_yes_no(intel_dp_mst_source_support(intel_dp)),
 -                  str_yes_no(sink_can_mst),
 -                  str_yes_no(i915->display.params.enable_dp_mst));
 +                  intel_dp_mst_mode_str(sink_mst_mode),
 +                  str_yes_no(i915->display.params.enable_dp_mst),
 +                  intel_dp_mst_mode_str(mst_detect));
  
 +      return mst_detect;
 +}
 +
 +static void
 +intel_dp_mst_configure(struct intel_dp *intel_dp)
 +{
        if (!intel_dp_mst_source_support(intel_dp))
                return;
  
 -      intel_dp->is_mst = sink_can_mst &&
 -              i915->display.params.enable_dp_mst;
 +      intel_dp->is_mst = intel_dp->mst_detect != DRM_DP_SST;
 +
 +      drm_dp_mst_topology_mgr_set_mst(&intel_dp->mst_mgr, intel_dp->is_mst);
 +
 +      /* Avoid stale info on the next detect cycle. */
 +      intel_dp->mst_detect = DRM_DP_SST;
 +}
 +
 +static void
 +intel_dp_mst_disconnect(struct intel_dp *intel_dp)
 +{
 +      struct drm_i915_private *i915 = dp_to_i915(intel_dp);
  
 -      drm_dp_mst_topology_mgr_set_mst(&intel_dp->mst_mgr,
 -                                      intel_dp->is_mst);
 +      if (!intel_dp->is_mst)
 +              return;
 +
 +      drm_dbg_kms(&i915->drm, "MST device may have disappeared %d vs %d\n",
 +                  intel_dp->is_mst, intel_dp->mst_mgr.mst_state);
 +      intel_dp->is_mst = false;
 +      drm_dp_mst_topology_mgr_set_mst(&intel_dp->mst_mgr, intel_dp->is_mst);
  }
  
  static bool
@@@ -4161,73 -4119,6 +4161,6 @@@ intel_dp_needs_vsc_sdp(const struct int
        return false;
  }
  
- static ssize_t intel_dp_vsc_sdp_pack(const struct drm_dp_vsc_sdp *vsc,
-                                    struct dp_sdp *sdp, size_t size)
- {
-       size_t length = sizeof(struct dp_sdp);
-       if (size < length)
-               return -ENOSPC;
-       memset(sdp, 0, size);
-       /*
-        * Prepare VSC Header for SU as per DP 1.4a spec, Table 2-119
-        * VSC SDP Header Bytes
-        */
-       sdp->sdp_header.HB0 = 0; /* Secondary-Data Packet ID = 0 */
-       sdp->sdp_header.HB1 = vsc->sdp_type; /* Secondary-data Packet Type */
-       sdp->sdp_header.HB2 = vsc->revision; /* Revision Number */
-       sdp->sdp_header.HB3 = vsc->length; /* Number of Valid Data Bytes */
-       if (vsc->revision == 0x6) {
-               sdp->db[0] = 1;
-               sdp->db[3] = 1;
-       }
-       /*
-        * Revision 0x5 and revision 0x7 supports Pixel Encoding/Colorimetry
-        * Format as per DP 1.4a spec and DP 2.0 respectively.
-        */
-       if (!(vsc->revision == 0x5 || vsc->revision == 0x7))
-               goto out;
-       /* VSC SDP Payload for DB16 through DB18 */
-       /* Pixel Encoding and Colorimetry Formats  */
-       sdp->db[16] = (vsc->pixelformat & 0xf) << 4; /* DB16[7:4] */
-       sdp->db[16] |= vsc->colorimetry & 0xf; /* DB16[3:0] */
-       switch (vsc->bpc) {
-       case 6:
-               /* 6bpc: 0x0 */
-               break;
-       case 8:
-               sdp->db[17] = 0x1; /* DB17[3:0] */
-               break;
-       case 10:
-               sdp->db[17] = 0x2;
-               break;
-       case 12:
-               sdp->db[17] = 0x3;
-               break;
-       case 16:
-               sdp->db[17] = 0x4;
-               break;
-       default:
-               MISSING_CASE(vsc->bpc);
-               break;
-       }
-       /* Dynamic Range and Component Bit Depth */
-       if (vsc->dynamic_range == DP_DYNAMIC_RANGE_CTA)
-               sdp->db[17] |= 0x80;  /* DB17[7] */
-       /* Content Type */
-       sdp->db[18] = vsc->content_type & 0x7;
- out:
-       return length;
- }
  static ssize_t
  intel_dp_hdr_metadata_infoframe_sdp_pack(struct drm_i915_private *i915,
                                         const struct hdmi_drm_infoframe *drm_infoframe,
@@@ -4320,8 -4211,7 +4253,7 @@@ static void intel_write_dp_sdp(struct i
  
        switch (type) {
        case DP_SDP_VSC:
-               len = intel_dp_vsc_sdp_pack(&crtc_state->infoframes.vsc, &sdp,
-                                           sizeof(sdp));
+               len = drm_dp_vsc_sdp_pack(&crtc_state->infoframes.vsc, &sdp);
                break;
        case HDMI_PACKET_TYPE_GAMUT_METADATA:
                len = intel_dp_hdr_metadata_infoframe_sdp_pack(dev_priv,
@@@ -5473,8 -5363,6 +5405,8 @@@ intel_dp_detect_dpcd(struct intel_dp *i
        if (!intel_dp_get_dpcd(intel_dp))
                return connector_status_disconnected;
  
 +      intel_dp->mst_detect = intel_dp_mst_detect(intel_dp);
 +
        /* if there's no downstream port, we're done */
        if (!drm_dp_is_branch(dpcd))
                return connector_status_connected;
                connector_status_connected : connector_status_disconnected;
        }
  
 -      if (intel_dp_can_mst(intel_dp))
 +      if (intel_dp->mst_detect == DRM_DP_MST)
                return connector_status_connected;
  
        /* If no HPD, poke DDC gently */
@@@ -5791,7 -5679,15 +5723,7 @@@ intel_dp_detect(struct drm_connector *c
                memset(intel_connector->dp.dsc_dpcd, 0, sizeof(intel_connector->dp.dsc_dpcd));
                intel_dp->psr.sink_panel_replay_support = false;
  
 -              if (intel_dp->is_mst) {
 -                      drm_dbg_kms(&dev_priv->drm,
 -                                  "MST device may have disappeared %d vs %d\n",
 -                                  intel_dp->is_mst,
 -                                  intel_dp->mst_mgr.mst_state);
 -                      intel_dp->is_mst = false;
 -                      drm_dp_mst_topology_mgr_set_mst(&intel_dp->mst_mgr,
 -                                                      intel_dp->is_mst);
 -              }
 +              intel_dp_mst_disconnect(intel_dp);
  
                intel_dp_tunnel_disconnect(intel_dp);
  
  
        intel_dp_detect_dsc_caps(intel_dp, intel_connector);
  
 -      intel_dp_configure_mst(intel_dp);
 +      intel_dp_mst_configure(intel_dp);
  
        /*
         * TODO: Reset link params when switching to MST mode, until MST
@@@ -6593,6 -6489,7 +6525,6 @@@ intel_dp_init_connector(struct intel_di
        struct drm_device *dev = intel_encoder->base.dev;
        struct drm_i915_private *dev_priv = to_i915(dev);
        enum port port = intel_encoder->port;
 -      enum phy phy = intel_port_to_phy(dev_priv, port);
        int type;
  
        /* Initialize the work for modeset in case of link train failure */
                 * Currently we don't support eDP on TypeC ports, although in
                 * theory it could work on TypeC legacy ports.
                 */
 -              drm_WARN_ON(dev, intel_phy_is_tc(dev_priv, phy));
 +              drm_WARN_ON(dev, intel_encoder_is_tc(intel_encoder));
                type = DRM_MODE_CONNECTOR_eDP;
                intel_encoder->type = INTEL_OUTPUT_EDP;
  
                intel_connector->get_hw_state = intel_ddi_connector_get_hw_state;
        else
                intel_connector->get_hw_state = intel_connector_get_hw_state;
 +      intel_connector->sync_state = intel_dp_connector_sync_state;
  
        if (!intel_edp_init_connector(intel_dp, intel_connector)) {
                intel_dp_aux_fini(intel_dp);
index 4bc6c437e7f733bc3267006f85f705e37794ad19,b061a0a0d6b082021287bcd16a79bed6ed16eb27..355aab5b38baab9d1e46ce1c364761cc1bda516b
@@@ -493,7 -493,7 +493,7 @@@ __execlists_schedule_in(struct i915_req
                /* Use a fixed tag for OA and friends */
                GEM_BUG_ON(ce->tag <= BITS_PER_LONG);
                ce->lrc.ccid = ce->tag;
 -      } else if (GRAPHICS_VER_FULL(engine->i915) >= IP_VER(12, 50)) {
 +      } else if (GRAPHICS_VER_FULL(engine->i915) >= IP_VER(12, 55)) {
                /* We don't need a strict matching tag, just different values */
                unsigned int tag = ffs(READ_ONCE(engine->context_tag));
  
@@@ -613,7 -613,7 +613,7 @@@ static void __execlists_schedule_out(st
                intel_engine_add_retire(engine, ce->timeline);
  
        ccid = ce->lrc.ccid;
 -      if (GRAPHICS_VER_FULL(engine->i915) >= IP_VER(12, 50)) {
 +      if (GRAPHICS_VER_FULL(engine->i915) >= IP_VER(12, 55)) {
                ccid >>= XEHP_SW_CTX_ID_SHIFT - 32;
                ccid &= XEHP_MAX_CONTEXT_HW_ID;
        } else {
@@@ -1907,7 -1907,7 +1907,7 @@@ process_csb(struct intel_engine_cs *eng
                ENGINE_TRACE(engine, "csb[%d]: status=0x%08x:0x%08x\n",
                             head, upper_32_bits(csb), lower_32_bits(csb));
  
 -              if (GRAPHICS_VER_FULL(engine->i915) >= IP_VER(12, 50))
 +              if (GRAPHICS_VER_FULL(engine->i915) >= IP_VER(12, 55))
                        promote = xehp_csb_parse(csb);
                else if (GRAPHICS_VER(engine->i915) >= 12)
                        promote = gen12_csb_parse(csb);
@@@ -3272,6 -3272,9 +3272,9 @@@ static void execlists_park(struct intel
  {
        cancel_timer(&engine->execlists.timer);
        cancel_timer(&engine->execlists.preempt);
+       /* Reset upon idling, or we may delay the busy wakeup. */
+       WRITE_ONCE(engine->sched_engine->queue_priority_hint, INT_MIN);
  }
  
  static void add_to_engine(struct i915_request *rq)
@@@ -3479,7 -3482,7 +3482,7 @@@ logical_ring_default_vfuncs(struct inte
                }
        }
  
 -      if (GRAPHICS_VER_FULL(engine->i915) >= IP_VER(12, 50)) {
 +      if (GRAPHICS_VER_FULL(engine->i915) >= IP_VER(12, 55)) {
                if (intel_engine_has_preemption(engine))
                        engine->emit_bb_start = xehp_emit_bb_start;
                else
@@@ -3582,7 -3585,7 +3585,7 @@@ int intel_execlists_submission_setup(st
  
        engine->context_tag = GENMASK(BITS_PER_LONG - 2, 0);
        if (GRAPHICS_VER(engine->i915) >= 11 &&
 -          GRAPHICS_VER_FULL(engine->i915) < IP_VER(12, 50)) {
 +          GRAPHICS_VER_FULL(engine->i915) < IP_VER(12, 55)) {
                execlists->ccid |= engine->instance << (GEN11_ENGINE_INSTANCE_SHIFT - 32);
                execlists->ccid |= engine->class << (GEN11_ENGINE_CLASS_SHIFT - 32);
        }
index 88a52c6713689885b72964099a9d9cbb03cecfbc,25413809b9dc99734409210259a9f51f1fffad88..d1ab560fcdfccce4e0d0bcf22d5fdb292f439624
@@@ -257,6 -257,12 +257,6 @@@ wa_write(struct i915_wa_list *wal, i915
        wa_write_clr_set(wal, reg, ~0, set);
  }
  
 -static void
 -wa_mcr_write(struct i915_wa_list *wal, i915_mcr_reg_t reg, u32 set)
 -{
 -      wa_mcr_write_clr_set(wal, reg, ~0, set);
 -}
 -
  static void
  wa_write_or(struct i915_wa_list *wal, i915_reg_t reg, u32 set)
  {
@@@ -912,8 -918,12 +912,8 @@@ __intel_engine_init_ctx_wa(struct intel
  
        if (IS_GFX_GT_IP_RANGE(engine->gt, IP_VER(12, 70), IP_VER(12, 74)))
                xelpg_ctx_workarounds_init(engine, wal);
 -      else if (IS_PONTEVECCHIO(i915))
 -              ; /* noop; none at this time */
        else if (IS_DG2(i915))
                dg2_ctx_workarounds_init(engine, wal);
 -      else if (IS_XEHPSDV(i915))
 -              ; /* noop; none at this time */
        else if (IS_DG1(i915))
                dg1_ctx_workarounds_init(engine, wal);
        else if (GRAPHICS_VER(i915) == 12)
@@@ -1340,6 -1350,9 +1340,6 @@@ xehp_init_mcr(struct intel_gt *gt, stru
                gt->steering_table[MSLICE] = NULL;
        }
  
 -      if (IS_XEHPSDV(gt->i915) && slice_mask & BIT(0))
 -              gt->steering_table[GAM] = NULL;
 -
        slice = __ffs(slice_mask);
        subslice = intel_sseu_find_first_xehp_dss(sseu, GEN_DSS_PER_GSLICE, slice) %
                GEN_DSS_PER_GSLICE;
                __set_mcr_steering(wal, GAM_MCR_SELECTOR, 1, 0);
  }
  
 -static void
 -pvc_init_mcr(struct intel_gt *gt, struct i915_wa_list *wal)
 -{
 -      unsigned int dss;
 -
 -      /*
 -       * Setup implicit steering for COMPUTE and DSS ranges to the first
 -       * non-fused-off DSS.  All other types of MCR registers will be
 -       * explicitly steered.
 -       */
 -      dss = intel_sseu_find_first_xehp_dss(&gt->info.sseu, 0, 0);
 -      __add_mcr_wa(gt, wal, dss / GEN_DSS_PER_CSLICE, dss % GEN_DSS_PER_CSLICE);
 -}
 -
  static void
  icl_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list *wal)
  {
@@@ -1492,6 -1519,76 +1492,6 @@@ dg1_gt_workarounds_init(struct intel_g
        wa_write_or(wal, UNSLICE_UNIT_LEVEL_CLKGATE2, VSUNIT_CLKGATE_DIS_TGL);
  }
  
 -static void
 -xehpsdv_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list *wal)
 -{
 -      struct drm_i915_private *i915 = gt->i915;
 -
 -      xehp_init_mcr(gt, wal);
 -
 -      /* Wa_1409757795:xehpsdv */
 -      wa_mcr_write_or(wal, SCCGCTL94DC, CG3DDISURB);
 -
 -      /* Wa_18011725039:xehpsdv */
 -      if (IS_XEHPSDV_GRAPHICS_STEP(i915, STEP_A1, STEP_B0)) {
 -              wa_mcr_masked_dis(wal, MLTICTXCTL, TDONRENDER);
 -              wa_mcr_write_or(wal, L3SQCREG1_CCS0, FLUSHALLNONCOH);
 -      }
 -
 -      /* Wa_16011155590:xehpsdv */
 -      if (IS_XEHPSDV_GRAPHICS_STEP(i915, STEP_A0, STEP_B0))
 -              wa_write_or(wal, UNSLICE_UNIT_LEVEL_CLKGATE,
 -                          TSGUNIT_CLKGATE_DIS);
 -
 -      /* Wa_14011780169:xehpsdv */
 -      if (IS_XEHPSDV_GRAPHICS_STEP(i915, STEP_B0, STEP_FOREVER)) {
 -              wa_write_or(wal, UNSLCGCTL9440, GAMTLBOACS_CLKGATE_DIS |
 -                          GAMTLBVDBOX7_CLKGATE_DIS |
 -                          GAMTLBVDBOX6_CLKGATE_DIS |
 -                          GAMTLBVDBOX5_CLKGATE_DIS |
 -                          GAMTLBVDBOX4_CLKGATE_DIS |
 -                          GAMTLBVDBOX3_CLKGATE_DIS |
 -                          GAMTLBVDBOX2_CLKGATE_DIS |
 -                          GAMTLBVDBOX1_CLKGATE_DIS |
 -                          GAMTLBVDBOX0_CLKGATE_DIS |
 -                          GAMTLBKCR_CLKGATE_DIS |
 -                          GAMTLBGUC_CLKGATE_DIS |
 -                          GAMTLBBLT_CLKGATE_DIS);
 -              wa_write_or(wal, UNSLCGCTL9444, GAMTLBGFXA0_CLKGATE_DIS |
 -                          GAMTLBGFXA1_CLKGATE_DIS |
 -                          GAMTLBCOMPA0_CLKGATE_DIS |
 -                          GAMTLBCOMPA1_CLKGATE_DIS |
 -                          GAMTLBCOMPB0_CLKGATE_DIS |
 -                          GAMTLBCOMPB1_CLKGATE_DIS |
 -                          GAMTLBCOMPC0_CLKGATE_DIS |
 -                          GAMTLBCOMPC1_CLKGATE_DIS |
 -                          GAMTLBCOMPD0_CLKGATE_DIS |
 -                          GAMTLBCOMPD1_CLKGATE_DIS |
 -                          GAMTLBMERT_CLKGATE_DIS   |
 -                          GAMTLBVEBOX3_CLKGATE_DIS |
 -                          GAMTLBVEBOX2_CLKGATE_DIS |
 -                          GAMTLBVEBOX1_CLKGATE_DIS |
 -                          GAMTLBVEBOX0_CLKGATE_DIS);
 -      }
 -
 -      /* Wa_16012725990:xehpsdv */
 -      if (IS_XEHPSDV_GRAPHICS_STEP(i915, STEP_A1, STEP_FOREVER))
 -              wa_write_or(wal, UNSLICE_UNIT_LEVEL_CLKGATE, VFUNIT_CLKGATE_DIS);
 -
 -      /* Wa_14011060649:xehpsdv */
 -      wa_14011060649(gt, wal);
 -
 -      /* Wa_14012362059:xehpsdv */
 -      wa_mcr_write_or(wal, XEHP_MERT_MOD_CTRL, FORCE_MISS_FTLB);
 -
 -      /* Wa_14014368820:xehpsdv */
 -      wa_mcr_write_or(wal, XEHP_GAMCNTRL_CTRL,
 -                      INVALIDATION_BROADCAST_MODE_DIS | GLOBAL_INVALIDATION_MODE);
 -
 -      /* Wa_14010670810:xehpsdv */
 -      wa_mcr_write_or(wal, XEHP_L3NODEARBCFG, XEHP_LNESPARE);
 -}
 -
  static void
  dg2_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list *wal)
  {
        wa_mcr_write_or(wal, XEHP_L3NODEARBCFG, XEHP_LNESPARE);
  }
  
 -static void
 -pvc_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list *wal)
 -{
 -      pvc_init_mcr(gt, wal);
 -
 -      /* Wa_14015795083 */
 -      wa_write_clr(wal, GEN7_MISCCPCTL, GEN12_DOP_CLOCK_GATE_RENDER_ENABLE);
 -
 -      /* Wa_18018781329 */
 -      wa_mcr_write_or(wal, RENDER_MOD_CTRL, FORCE_MISS_FTLB);
 -      wa_mcr_write_or(wal, COMP_MOD_CTRL, FORCE_MISS_FTLB);
 -      wa_mcr_write_or(wal, XEHP_VDBX_MOD_CTRL, FORCE_MISS_FTLB);
 -      wa_mcr_write_or(wal, XEHP_VEBX_MOD_CTRL, FORCE_MISS_FTLB);
 -
 -      /* Wa_16016694945 */
 -      wa_mcr_masked_en(wal, XEHPC_LNCFMISCCFGREG0, XEHPC_OVRLSCCC);
 -}
 -
  static void
  xelpg_gt_workarounds_init(struct intel_gt *gt, struct i915_wa_list *wal)
  {
        /* Wa_14018575942 / Wa_18018781329 */
+       wa_mcr_write_or(wal, RENDER_MOD_CTRL, FORCE_MISS_FTLB);
        wa_mcr_write_or(wal, COMP_MOD_CTRL, FORCE_MISS_FTLB);
  
        /* Wa_22016670082 */
@@@ -1609,6 -1725,12 +1610,6 @@@ static void gt_tuning_settings(struct i
                wa_mcr_write_or(wal, XEHP_SQCM, EN_32B_ACCESS);
        }
  
 -      if (IS_PONTEVECCHIO(gt->i915)) {
 -              wa_mcr_write(wal, XEHPC_L3SCRUB,
 -                           SCRUB_CL_DWNGRADE_SHARED | SCRUB_RATE_4B_PER_CLK);
 -              wa_mcr_masked_en(wal, XEHPC_LNCFMISCCFGREG0, XEHPC_HOSTCACHEEN);
 -      }
 -
        if (IS_DG2(gt->i915)) {
                wa_mcr_write_or(wal, XEHP_L3SCQREG7, BLEND_FILL_CACHING_OPT_DIS);
                wa_mcr_write_or(wal, XEHP_SQCM, EN_32B_ACCESS);
@@@ -1633,8 -1755,12 +1634,8 @@@ gt_init_workarounds(struct intel_gt *gt
  
        if (IS_GFX_GT_IP_RANGE(gt, IP_VER(12, 70), IP_VER(12, 74)))
                xelpg_gt_workarounds_init(gt, wal);
 -      else if (IS_PONTEVECCHIO(i915))
 -              pvc_gt_workarounds_init(gt, wal);
        else if (IS_DG2(i915))
                dg2_gt_workarounds_init(gt, wal);
 -      else if (IS_XEHPSDV(i915))
 -              xehpsdv_gt_workarounds_init(gt, wal);
        else if (IS_DG1(i915))
                dg1_gt_workarounds_init(gt, wal);
        else if (GRAPHICS_VER(i915) == 12)
@@@ -2052,6 -2178,30 +2053,6 @@@ static void dg2_whitelist_build(struct 
        }
  }
  
 -static void blacklist_trtt(struct intel_engine_cs *engine)
 -{
 -      struct i915_wa_list *w = &engine->whitelist;
 -
 -      /*
 -       * Prevent read/write access to [0x4400, 0x4600) which covers
 -       * the TRTT range across all engines. Note that normally userspace
 -       * cannot access the other engines' trtt control, but for simplicity
 -       * we cover the entire range on each engine.
 -       */
 -      whitelist_reg_ext(w, _MMIO(0x4400),
 -                        RING_FORCE_TO_NONPRIV_DENY |
 -                        RING_FORCE_TO_NONPRIV_RANGE_64);
 -      whitelist_reg_ext(w, _MMIO(0x4500),
 -                        RING_FORCE_TO_NONPRIV_DENY |
 -                        RING_FORCE_TO_NONPRIV_RANGE_64);
 -}
 -
 -static void pvc_whitelist_build(struct intel_engine_cs *engine)
 -{
 -      /* Wa_16014440446:pvc */
 -      blacklist_trtt(engine);
 -}
 -
  static void xelpg_whitelist_build(struct intel_engine_cs *engine)
  {
        struct i915_wa_list *w = &engine->whitelist;
@@@ -2078,8 -2228,12 +2079,8 @@@ void intel_engine_init_whitelist(struc
                ; /* none yet */
        else if (IS_GFX_GT_IP_RANGE(engine->gt, IP_VER(12, 70), IP_VER(12, 74)))
                xelpg_whitelist_build(engine);
 -      else if (IS_PONTEVECCHIO(i915))
 -              pvc_whitelist_build(engine);
        else if (IS_DG2(i915))
                dg2_whitelist_build(engine);
 -      else if (IS_XEHPSDV(i915))
 -              ; /* none needed */
        else if (GRAPHICS_VER(i915) == 12)
                tgl_whitelist_build(engine);
        else if (GRAPHICS_VER(i915) == 11)
@@@ -2660,7 -2814,10 +2661,7 @@@ xcs_engine_wa_init(struct intel_engine_
  static void
  ccs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal)
  {
 -      if (IS_PVC_CT_STEP(engine->i915, STEP_A0, STEP_C0)) {
 -              /* Wa_14014999345:pvc */
 -              wa_mcr_masked_en(wal, GEN10_CACHE_MODE_SS, DISABLE_ECC);
 -      }
 +      /* boilerplate for any CCS engine workaround */
  }
  
  /*
@@@ -2693,7 -2850,7 +2694,7 @@@ add_render_compute_tuning_settings(stru
                wa_mcr_masked_field_set(wal, GEN9_ROW_CHICKEN4, THREAD_EX_ARB_MODE,
                                        THREAD_EX_ARB_MODE_RR_AFTER_DEP);
  
 -      if (GRAPHICS_VER(i915) == 12 && GRAPHICS_VER_FULL(i915) < IP_VER(12, 50))
 +      if (GRAPHICS_VER(i915) == 12 && GRAPHICS_VER_FULL(i915) < IP_VER(12, 55))
                wa_write_clr(wal, GEN8_GARBCNTL, GEN12_BUS_HASH_CTL_BIT_EXC);
  }
  
@@@ -2766,18 -2923,21 +2767,18 @@@ general_render_compute_wa_init(struct i
  
        if (IS_GFX_GT_IP_STEP(gt, IP_VER(12, 70), STEP_A0, STEP_B0) ||
            IS_GFX_GT_IP_STEP(gt, IP_VER(12, 71), STEP_A0, STEP_B0) ||
 -          IS_PONTEVECCHIO(i915) ||
            IS_DG2(i915)) {
                /* Wa_22014226127 */
                wa_mcr_write_or(wal, LSC_CHICKEN_BIT_0, DISABLE_D8_D16_COASLESCE);
        }
  
 -      if (IS_PONTEVECCHIO(i915) || IS_DG2(i915)) {
 +      if (IS_DG2(i915)) {
                /* Wa_14015227452:dg2,pvc */
                wa_mcr_masked_en(wal, GEN9_ROW_CHICKEN4, XEHP_DIS_BBL_SYSPIPE);
  
                /* Wa_16015675438:dg2,pvc */
                wa_masked_en(wal, FF_SLICE_CS_CHICKEN2, GEN12_PERF_FIX_BALANCING_CFE_DISABLE);
 -      }
  
 -      if (IS_DG2(i915)) {
                /*
                 * Wa_16011620976:dg2_g11
                 * Wa_22015475538:dg2
                           0 /* write-only, so skip validation */,
                           true);
        }
 -
 -      if (IS_XEHPSDV(i915)) {
 -              /* Wa_1409954639 */
 -              wa_mcr_masked_en(wal,
 -                               GEN8_ROW_CHICKEN,
 -                               SYSTOLIC_DOP_CLOCK_GATING_DIS);
 -
 -              /* Wa_1607196519 */
 -              wa_mcr_masked_en(wal,
 -                               GEN9_ROW_CHICKEN4,
 -                               GEN12_DISABLE_GRF_CLEAR);
 -
 -              /* Wa_14010449647:xehpsdv */
 -              wa_mcr_masked_en(wal, GEN8_HALF_SLICE_CHICKEN1,
 -                               GEN7_PSD_SINGLE_PORT_DISPATCH_ENABLE);
 -      }
  }
  
  static void
@@@ -2893,7 -3069,7 +2894,7 @@@ static bool mcr_range(struct drm_i915_p
        const struct i915_range *mcr_ranges;
        int i;
  
 -      if (GRAPHICS_VER_FULL(i915) >= IP_VER(12, 50))
 +      if (GRAPHICS_VER_FULL(i915) >= IP_VER(12, 55))
                mcr_ranges = mcr_ranges_xehp;
        else if (GRAPHICS_VER(i915) >= 12)
                mcr_ranges = mcr_ranges_gen12;
index 1f9b57eb5e7deac62e4bc9efd3dbb5941956687d,c29a850859ad5a6af449d0e05d4ce8c6d3c2173e..2671d8cf5092ec1a53c3a479128fbf92a5dd12e1
@@@ -42,7 -42,8 +42,8 @@@ generated_oob := $(obj)/generated/xe_wa
  quiet_cmd_wa_oob = GEN     $(notdir $(generated_oob))
        cmd_wa_oob = mkdir -p $(@D); $^ $(generated_oob)
  
- $(generated_oob) &: $(obj)/xe_gen_wa_oob $(srctree)/$(src)/xe_wa_oob.rules
+ $(obj)/generated/%_wa_oob.c $(obj)/generated/%_wa_oob.h: $(obj)/xe_gen_wa_oob \
+                $(srctree)/$(src)/xe_wa_oob.rules
        $(call cmd,wa_oob)
  
  uses_generated_oob := \
@@@ -158,8 -159,10 +159,10 @@@ xe-$(CONFIG_PCI_IOV) += 
        xe_lmtt_2l.o \
        xe_lmtt_ml.o
  
- xe-$(CONFIG_DRM_XE_KUNIT_TEST) += \
-       tests/xe_kunit_helpers.o
+ # include helpers for tests even when XE is built-in
+ ifdef CONFIG_DRM_XE_KUNIT_TEST
+ xe-y += tests/xe_kunit_helpers.o
+ endif
  
  # i915 Display compat #defines and #includes
  subdir-ccflags-$(CONFIG_DRM_XE_DISPLAY) += \
        -Ddrm_i915_gem_object=xe_bo \
        -Ddrm_i915_private=xe_device
  
 -CFLAGS_i915-display/intel_fbdev.o = -Wno-override-init
 -CFLAGS_i915-display/intel_display_device.o = -Wno-override-init
 -
  # Rule to build SOC code shared with i915
  $(obj)/i915-soc/%.o: $(srctree)/drivers/gpu/drm/i915/soc/%.c FORCE
        $(call cmd,force_checksrc)
index fb195d3b3e9fa5e766005f9cf817cc2553bc82a3,2ee338860b7e08c80fb9f0a65702dc1b18456b6b..1279a6b2bece0b8695289a36218814b3504dd62b
@@@ -2623,29 -2623,19 +2623,29 @@@ struct drm_i915_reg_read 
   *
   */
  
 +/*
 + * struct drm_i915_reset_stats - Return global reset and other context stats
 + *
 + * Driver keeps few stats for each contexts and also global reset count.
 + * This struct can be used to query those stats.
 + */
  struct drm_i915_reset_stats {
 +      /** @ctx_id: ID of the requested context */
        __u32 ctx_id;
 +
 +      /** @flags: MBZ */
        __u32 flags;
  
 -      /* All resets since boot/module reload, for all contexts */
 +      /** @reset_count: All resets since boot/module reload, for all contexts */
        __u32 reset_count;
  
 -      /* Number of batches lost when active in GPU, for this context */
 +      /** @batch_active: Number of batches lost when active in GPU, for this context */
        __u32 batch_active;
  
 -      /* Number of batches lost pending for execution, for this context */
 +      /** @batch_pending: Number of batches lost pending for execution, for this context */
        __u32 batch_pending;
  
 +      /** @pad: MBZ */
        __u32 pad;
  };
  
@@@ -3582,9 -3572,13 +3582,13 @@@ struct drm_i915_query_memory_regions 
   * struct drm_i915_query_guc_submission_version - query GuC submission interface version
   */
  struct drm_i915_query_guc_submission_version {
+       /** @branch: Firmware branch version. */
        __u32 branch;
+       /** @major: Firmware major version. */
        __u32 major;
+       /** @minor: Firmware minor version. */
        __u32 minor;
+       /** @patch: Firmware patch version. */
        __u32 patch;
  };
  
This page took 0.104629 seconds and 4 git commands to generate.