Merge tag 'drm-next-2024-03-13' of https://gitlab.freedesktop.org/drm/kernel
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 14 Mar 2024 01:34:05 +0000 (18:34 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 14 Mar 2024 01:34:05 +0000 (18:34 -0700)
Pull drm updates from Dave Airlie:
 "Highlights are usual, more AMD IP blocks for future hw, i915/xe
  changes, Displayport tunnelling support for i915, msm YUV over DP
  changes, new tests for ttm, but its mostly a lot of stuff all over the
  place from lots of people.

  core:
   - EDID cleanups
   - scheduler error handling fixes
   - managed: add drmm_release_action() with tests
   - add ratelimited drm debug print
   - DPCD PSR early transport macro
   - DP tunneling and bandwidth allocation helpers
   - remove built-in edids
   - dp: Avoid AUX transfers on powered-down displays
   - dp: Add VSC SDP helpers

  cross drivers:
   - use new drm print helpers
   - switch to ->read_edid callback
   - gem: add stats for shared buffers plus updates to amdgpu, i915, xe

  syncobj:
   - fixes to waiting and sleeping

  ttm:
   - add tests
   - fix errno codes
   - simply busy-placement handling
   - fix page decryption

  media:
   - tc358743: fix v4l device registration

  video:
   - move all kernel parameters for video behind CONFIG_VIDEO

  sound:
   - remove <drm/drm_edid.h> include from header

  ci:
   - add tests for msm
   - fix apq8016 runner

  efifb:
   - use copy of global screen_info state

  vesafb:
   - use copy of global screen_info state

  simplefb:
   - fix logging

  bridge:
   - ite-6505: fix DP link-training bug
   - samsung-dsim: fix error checking in probe
   - samsung-dsim: add bsh-smm-s2/pro boards
   - tc358767: fix regmap usage
   - imx: add i.MX8MP HDMI PVI plus DT bindings
   - imx: add i.MX8MP HDMI TX plus DT bindings
   - sii902x: fix probing and unregistration
   - tc358767: limit pixel PLL input range
   - switch to new drm_bridge_read_edid() interface

  panel:
   - ltk050h3146w: error-handling fixes
   - panel-edp: support delay between power-on and enable; use put_sync
     in unprepare; support Mediatek MT8173 Chromebooks, BOE NV116WHM-N49
     V8.0, BOE NV122WUM-N41, CSO MNC207QS1-1 plus DT bindings
   - panel-lvds: support EDT ETML0700Z9NDHA plus DT bindings
   - panel-novatek: FRIDA FRD400B25025-A-CTK plus DT bindings
   - add BOE TH101MB31IG002-28A plus DT bindings
   - add EDT ETML1010G3DRA plus DT bindings
   - add Novatek NT36672E LCD DSI plus DT bindings
   - nt36523: support 120Hz timings, fix includes
   - simple: fix display timings on RK32FN48H
   - visionox-vtdr6130: fix initialization
   - add Powkiddy RGB10MAX3 plus DT bindings
   - st7703: support panel rotation plus DT bindings
   - add Himax HX83112A plus DT bindings
   - ltk500hd1829: add support for ltk101b4029w and admatec 9904370
   - simple: add BOE BP082WX1-100 8.2" panel plus DT bindungs

  panel-orientation-quirks:
   - GPD Win Mini

  amdgpu:
   - Validate DMABuf imports in compute VMs
   - Add RAS ACA framework
   - PSP 13 fixes
   - Misc code cleanups
   - Replay fixes
   - Atom interpretor PS, WS bounds checking
   - DML2 fixes
   - Audio fixes
   - DCN 3.5 Z state fixes
   - Remove deprecated ida_simple usage
   - UBSAN fixes
   - RAS fixes
   - Enable seq64 infrastructure
   - DC color block enablement
   - Documentation updates
   - DC documentation updates
   - DMCUB updates
   - ATHUB 4.1 support
   - LSDMA 7.0 support
   - JPEG DPG support
   - IH 7.0 support
   - HDP 7.0 support
   - VCN 5.0 support
   - SMU 13.0.6 updates
   - NBIO 7.11 updates
   - SDMA 6.1 updates
   - MMHUB 3.3 updates
   - DCN 3.5.1 support
   - NBIF 6.3.1 support
   - VPE 6.1.1 support

  amdkfd:
   - Validate DMABuf imports in compute VMs
   - SVM fixes
   - Trap handler updates and enhancements
   - Fix cache size reporting
   - Relocate the trap handler

  radeon:
   - Atom interpretor PS, WS bounds checking
   - Misc code cleanups

  xe:
   - new query for GuC submission version
   - Remove unused persistent exec_queues
   - Add vram frequency sysfs attributes
   - Add the flag XE_VM_BIND_FLAG_DUMPABLE
   - Drop pre-production workarounds
   - Drop kunit tests for unsupported platforms
   - Start pumbling SR-IOV support with memory based interrupts for VF
   - Allow to map BO in GGTT with PAT index corresponding to XE_CACHE_UC
     to work with memory based interrupts
   - Add GuC Doorbells Manager as prep work SR-IOV
   - Implement additional workarounds for xe2 and MTL
   - Program a few registers according to perfomance guide spec for Xe2
   - Fix remaining 32b build issues and enable it back
   - Fix build with CONFIG_DEBUG_FS=n
   - Fix warnings from GuC ABI headers
   - Introduce Relay Communication for SR-IOV for VF <-> GuC <-> PF
   - Release mmap mappings on rpm suspend
   - Disable mid-thread preemption when not properly supported by
     hardware
   - Fix xe_exec by reserving extra fence slot for CPU bind
   - Fix xe_exec with full long running exec queue
   - Canonicalize addresses where needed for Xe2 and add to devcoredum
   - Toggle USM support for Xe2
   - Only allow 1 ufence per exec / bind IOCTL
   - Add GuC firmware loading for Lunar Lake
   - Add XE_VMA_PTE_64K VMA flag

  i915:
   - Add more ADL-N PCI IDs
   - Enable fastboot also on older platforms
   - Early transport for panel replay and PSR
   - New ARL PCI IDs
   - DP TPS4 PHY test pattern support
   - Unify and improve VSC SDP for PSR and non-PSR cases
   - Refactor memory regions and improve debug logging
   - Rework global state serialization
   - Remove unused CDCLK divider fields
   - Unify HDCP connector logging format
   - Use display instead of graphics version in display code
   - Move VBT and opregion debugfs next to the implementation
   - Abstract opregion interface, use opaque type
   - MTL fixes
   - HPD handling fixes
   - Add GuC submission interface version query
   - Atomically invalidate userptr on mmu-notifier
   - Update handling of MMIO triggered reports
   - Don't make assumptions about intel_wakeref_t type
   - Extend driver code of Xe_LPG to Xe_LPG+
   - Add flex arrays to struct i915_syncmap
   - Allow for very slow HuC loading
   - DP tunneling and bandwidth allocation support

  msm:
   - Correct bindings for MSM8976 and SM8650 platforms
   - Start migration of MDP5 platforms to DPU driver
   - X1E80100 MDSS support
   - DPU:
      - Improve DSC allocation, fixing several important corner cases
      - Add support for SDM630/SDM660 platforms
      - Simplify dpu_encoder_phys_ops
      - Apply fixes targeting DSC support with a single DSC encoder
      - Apply fixes for HCTL_EN timing configuration
      - X1E80100 support
      - Add support for YUV420 over DP
   - GPU:
      - fix sc7180 UBWC config
      - fix a7xx LLC config
      - new gpu support: a305B, a750, a702
      - machine support: SM7150 (different power levels than other a618)
      - a7xx devcoredump support

  habanalabs:
   - configure IRQ affinity according to NUMA node
   - move HBM MMU page tables inside the HBM
   - improve device reset
   - check extended PCIe errors

  ivpu:
   - updates to firmware API
   - refactor BO allocation

  imx:
   - use devm_ functions during init

  hisilicon:
   - fix EDID includes

  mgag200:
   - improve ioremap usage
   - convert to struct drm_edid
   - Work around PCI write bursts

  nouveau:
   - disp: use kmemdup()
   - fix EDID includes
   - documentation fixes

  qaic:
   - fixes to BO handling
   - make use of DRM managed release
   - fix order of remove operations

  rockchip:
   - analogix_dp: get encoder port from DT
   - inno_hdmi: support HDMI for RK3128
   - lvds: error-handling fixes

  ssd130x:
   - support SSD133x plus DT bindings

  tegra:
   - fix error handling

  tilcdc:
   - make use of DRM managed release

  v3d:
   - show memory stats in debugfs
   - Support display MMU page size

  vc4:
   - fix error handling in plane prepare_fb
   - fix framebuffer test in plane helpers

  virtio:
   - add venus capset defines

  vkms:
   - fix OOB access when programming the LUT
   - Kconfig improvements

  vmwgfx:
   - unmap surface before changing plane state
   - fix memory leak in error handling
   - documentation fixes
   - list command SVGA_3D_CMD_DEFINE_GB_SURFACE_V4 as invalid
   - fix null-pointer deref in execbuf
   - refactor display-mode probing
   - fix fencing for creating cursor MOBs
   - fix cursor-memory lifetime

  xlnx:
   - fix live video input for ZynqMP DPSUB

  lima:
   - fix memory leak

  loongson:
   - fail if no VRAM present

  meson:
   - switch to new drm_bridge_read_edid() interface

  renesas:
   - add RZ/G2L DU support plus DT bindings

  mxsfb:
   - Use managed mode config

  sun4i:
   - HDMI: updates to atomic mode setting

  mediatek:
   - Add display driver for MT8188 VDOSYS1
   - DSI driver cleanups
   - Filter modes according to hardware capability
   - Fix a null pointer crash in mtk_drm_crtc_finish_page_flip

  etnaviv:
   - enhancements for NPU and MRT support"

* tag 'drm-next-2024-03-13' of https://gitlab.freedesktop.org/drm/kernel: (1420 commits)
  drm/amd/display: Removed redundant @ symbol to fix kernel-doc warnings in -next repo
  drm/amd/pm: wait for completion of the EnableGfxImu message
  drm/amdgpu/soc21: add mode2 asic reset for SMU IP v14.0.1
  drm/amdgpu: add smu 14.0.1 support
  drm/amdgpu: add VPE 6.1.1 discovery support
  drm/amdgpu/vpe: add VPE 6.1.1 support
  drm/amdgpu/vpe: don't emit cond exec command under collaborate mode
  drm/amdgpu/vpe: add collaborate mode support for VPE
  drm/amdgpu/vpe: add PRED_EXE and COLLAB_SYNC OPCODE
  drm/amdgpu/vpe: add multi instance VPE support
  drm/amdgpu/discovery: add nbif v6_3_1 ip block
  drm/amdgpu: Add nbif v6_3_1 ip block support
  drm/amdgpu: Add pcie v6_1_0 ip headers (v5)
  drm/amdgpu: Add nbif v6_3_1 ip headers (v5)
  arch/powerpc: Remove <linux/fb.h> from backlight code
  macintosh/via-pmu-backlight: Include <linux/backlight.h>
  fbdev/chipsfb: Include <linux/backlight.h>
  drm/etnaviv: Restore some id values
  drm/amdkfd: make kfd_class constant
  drm/amdgpu: add ring timeout information in devcoredump
  ...

28 files changed:
1  2 
Documentation/admin-guide/kernel-parameters.txt
Documentation/devicetree/bindings/display/panel/novatek,nt35510.yaml
Documentation/devicetree/bindings/vendor-prefixes.yaml
MAINTAINERS
drivers/accel/ivpu/ivpu_pm.c
drivers/gpu/drm/Kconfig
drivers/gpu/drm/bridge/ti-sn65dsi86.c
drivers/gpu/drm/drm_gem_vram_helper.c
drivers/gpu/drm/drm_probe_helper.c
drivers/gpu/drm/i915/display/intel_display_types.h
drivers/gpu/drm/i915/display/intel_dp.c
drivers/gpu/drm/i915/display/intel_dp.h
drivers/gpu/drm/i915/display/intel_dp_mst.c
drivers/gpu/drm/i915/display/intel_psr.c
drivers/gpu/drm/msm/dp/dp_display.c
drivers/gpu/drm/panel/panel-boe-tv101wum-nl6.c
drivers/gpu/drm/tests/drm_mm_test.c
drivers/gpu/drm/xe/xe_bo.c
drivers/gpu/drm/xe/xe_exec_queue.c
drivers/gpu/drm/xe/xe_exec_queue_types.h
drivers/gpu/drm/xe/xe_execlist.c
drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
drivers/gpu/drm/xe/xe_lrc.c
drivers/gpu/drm/xe/xe_mmio.c
drivers/gpu/drm/xe/xe_pm.c
drivers/gpu/drm/xe/xe_vm.c
drivers/gpu/drm/xe/xe_vm_types.h
include/uapi/drm/xe_drm.h

diff --cc MAINTAINERS
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 94d2a15d8444ad6a9d88029091cf4aafda60f497,6ece2c563c7a0f94a25d3aea6153e2b7c78685dd..f0c3ed37b350b901d984ec0383e19eee6a23836d
@@@ -5699,9 -5702,13 +5702,16 @@@ intel_dp_detect(struct drm_connector *c
                goto out;
        }
  
+       ret = intel_dp_tunnel_detect(intel_dp, ctx);
+       if (ret == -EDEADLK)
+               return ret;
+       if (ret == 1)
+               intel_connector->base.epoch_counter++;
 +      if (!intel_dp_is_edp(intel_dp))
 +              intel_psr_init_dpcd(intel_dp);
 +
        intel_dp_detect_dsc_caps(intel_dp, intel_connector);
  
        intel_dp_configure_mst(intel_dp);
index 375d0677cd8c516c56ca2cf9ba592b4746677304,564a587e2d018d5bf1092fdb0166b6af0a1dd5d5..c540d3a73fe74521380735f4c772d41645fc4851
@@@ -43,10 -43,14 +43,16 @@@ void intel_dp_adjust_compliance_config(
  bool intel_dp_limited_color_range(const struct intel_crtc_state *crtc_state,
                                  const struct drm_connector_state *conn_state);
  int intel_dp_min_bpp(enum intel_output_format output_format);
+ void intel_dp_init_modeset_retry_work(struct intel_connector *connector);
+ void intel_dp_queue_modeset_retry_work(struct intel_connector *connector);
+ void
+ intel_dp_queue_modeset_retry_for_link(struct intel_atomic_state *state,
+                                     struct intel_encoder *encoder,
+                                     const struct intel_crtc_state *crtc_state);
  bool intel_dp_init_connector(struct intel_digital_port *dig_port,
                             struct intel_connector *intel_connector);
 +void intel_dp_connector_sync_state(struct intel_connector *connector,
 +                                 const struct intel_crtc_state *crtc_state);
  void intel_dp_set_link_params(struct intel_dp *intel_dp,
                              int link_rate, int lane_count);
  int intel_dp_get_link_train_fallback_values(struct intel_dp *intel_dp,
Simple merge
Simple merge
Simple merge
index 49223026c89fd5e3626be84a9687774d29b6bcb2,4bb8f897bf150280e9dc0de5dd437f72bda92ba4..11e150f4c0c1f753bf344224b433f26231efd782
@@@ -306,9 -347,98 +347,13 @@@ static int exec_queue_set_timeslice(str
            !xe_hw_engine_timeout_in_range(value, min, max))
                return -EINVAL;
  
-       return q->ops->set_timeslice(q, value);
+       if (!create)
+               return q->ops->set_timeslice(q, value);
+       q->sched_props.timeslice_us = value;
+       return 0;
  }
  
 -static int exec_queue_set_preemption_timeout(struct xe_device *xe,
 -                                           struct xe_exec_queue *q, u64 value,
 -                                           bool create)
 -{
 -      u32 min = 0, max = 0;
 -
 -      xe_exec_queue_get_prop_minmax(q->hwe->eclass,
 -                                    XE_EXEC_QUEUE_PREEMPT_TIMEOUT, &min, &max);
 -
 -      if (xe_exec_queue_enforce_schedule_limit() &&
 -          !xe_hw_engine_timeout_in_range(value, min, max))
 -              return -EINVAL;
 -
 -      if (!create)
 -              return q->ops->set_preempt_timeout(q, value);
 -
 -      q->sched_props.preempt_timeout_us = value;
 -      return 0;
 -}
 -
 -static int exec_queue_set_job_timeout(struct xe_device *xe, struct xe_exec_queue *q,
 -                                    u64 value, bool create)
 -{
 -      u32 min = 0, max = 0;
 -
 -      if (XE_IOCTL_DBG(xe, !create))
 -              return -EINVAL;
 -
 -      xe_exec_queue_get_prop_minmax(q->hwe->eclass,
 -                                    XE_EXEC_QUEUE_JOB_TIMEOUT, &min, &max);
 -
 -      if (xe_exec_queue_enforce_schedule_limit() &&
 -          !xe_hw_engine_timeout_in_range(value, min, max))
 -              return -EINVAL;
 -
 -      q->sched_props.job_timeout_ms = value;
 -
 -      return 0;
 -}
 -
 -static int exec_queue_set_acc_trigger(struct xe_device *xe, struct xe_exec_queue *q,
 -                                    u64 value, bool create)
 -{
 -      if (XE_IOCTL_DBG(xe, !create))
 -              return -EINVAL;
 -
 -      if (XE_IOCTL_DBG(xe, !xe->info.has_usm))
 -              return -EINVAL;
 -
 -      q->usm.acc_trigger = value;
 -
 -      return 0;
 -}
 -
 -static int exec_queue_set_acc_notify(struct xe_device *xe, struct xe_exec_queue *q,
 -                                   u64 value, bool create)
 -{
 -      if (XE_IOCTL_DBG(xe, !create))
 -              return -EINVAL;
 -
 -      if (XE_IOCTL_DBG(xe, !xe->info.has_usm))
 -              return -EINVAL;
 -
 -      q->usm.acc_notify = value;
 -
 -      return 0;
 -}
 -
 -static int exec_queue_set_acc_granularity(struct xe_device *xe, struct xe_exec_queue *q,
 -                                        u64 value, bool create)
 -{
 -      if (XE_IOCTL_DBG(xe, !create))
 -              return -EINVAL;
 -
 -      if (XE_IOCTL_DBG(xe, !xe->info.has_usm))
 -              return -EINVAL;
 -
 -      if (value > DRM_XE_ACC_GRANULARITY_64M)
 -              return -EINVAL;
 -
 -      q->usm.acc_granularity = value;
 -
 -      return 0;
 -}
 -
  typedef int (*xe_exec_queue_set_property_fn)(struct xe_device *xe,
                                             struct xe_exec_queue *q,
                                             u64 value, bool create);
Simple merge
index f4c485289dbe4d606e9022c5b58eec8e8123fdca,e3a4131ebb587900eec32b2f46e146d914390336..f03e077f81a04fcb9344f8c634856acab516c6f1
@@@ -320,15 -313,9 +321,13 @@@ int xe_gt_tlb_invalidation_vma(struct x
   */
  int xe_gt_tlb_invalidation_wait(struct xe_gt *gt, int seqno)
  {
-       struct xe_device *xe = gt_to_xe(gt);
        struct xe_guc *guc = &gt->uc.guc;
-       struct drm_printer p = drm_err_printer(__func__);
        int ret;
  
 +      /* Execlists not supported */
 +      if (gt_to_xe(gt)->info.force_execlist)
 +              return 0;
 +
        /*
         * XXX: See above, this algorithm only works if seqno are always in
         * order
Simple merge
Simple merge
Simple merge
index 3b21afe5b4883fa64aeb92c6d2174b014be96c59,e3bde897f6e8aa90a591aab9255e35aed7567b15..d28260351af2e330c16dbbf94609f19b285d1806
@@@ -2154,7 -2131,12 +2168,8 @@@ vm_bind_ioctl_ops_create(struct xe_vm *
                struct xe_vma_op *op = gpuva_op_to_vma_op(__op);
  
                if (__op->op == DRM_GPUVA_OP_MAP) {
 -                      op->map.immediate =
 -                              flags & DRM_XE_VM_BIND_FLAG_IMMEDIATE;
 -                      op->map.read_only =
 -                              flags & DRM_XE_VM_BIND_FLAG_READONLY;
                        op->map.is_null = flags & DRM_XE_VM_BIND_FLAG_NULL;
+                       op->map.dumpable = flags & DRM_XE_VM_BIND_FLAG_DUMPABLE;
                        op->map.pat_index = pat_index;
                } else if (__op->op == DRM_GPUVA_OP_PREFETCH) {
                        op->prefetch.region = prefetch_region;
@@@ -2346,8 -2329,12 +2362,10 @@@ static int vm_bind_ioctl_ops_parse(stru
                switch (op->base.op) {
                case DRM_GPUVA_OP_MAP:
                {
 -                      flags |= op->map.read_only ?
 -                              VMA_CREATE_FLAG_READ_ONLY : 0;
                        flags |= op->map.is_null ?
                                VMA_CREATE_FLAG_IS_NULL : 0;
+                       flags |= op->map.dumpable ?
+                               VMA_CREATE_FLAG_DUMPABLE : 0;
  
                        vma = new_vma(vm, &op->base.map, op->map.pat_index,
                                      flags);
index 7300eea5394ba8c1ece10dba63314bf733ee5157,292f8cadb40fde7c4123663cbf9ba991d8795855..79b5cab57711995a6dc3938f5269d73efddee95e
@@@ -295,8 -270,14 +277,10 @@@ struct xe_vm 
  struct xe_vma_op_map {
        /** @vma: VMA to map */
        struct xe_vma *vma;
 -      /** @immediate: Immediate bind */
 -      bool immediate;
 -      /** @read_only: Read only */
 -      bool read_only;
        /** @is_null: is NULL binding */
        bool is_null;
+       /** @dumpable: whether BO is dumped on GPU hang */
+       bool dumpable;
        /** @pat_index: The pat index to use for this operation. */
        u16 pat_index;
  };
Simple merge