diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2025-07-30 19:26:49 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2025-07-30 19:26:49 -0700 | 
| commit | 260f6f4fda93c8485c8037865c941b42b9cba5d2 (patch) | |
| tree | 587a0ea46d3351f63250d19860b01da8217ac774 /rust/kernel/drm | |
| parent | 63eb28bb1402891b1ad2be02a530f29a9dd7f1cd (diff) | |
| parent | 711fa2667d8b230ff31f1855d0f25e3263268d8a (diff) | |
Merge tag 'drm-next-2025-07-30' of https://gitlab.freedesktop.org/drm/kernel
Pull drm updates from Dave Airlie:
 "Highlights:
   - Intel xe enable Panthor Lake, started adding WildCat Lake
   - amdgpu has a bunch of reset improvments along with the usual IP
     updates
   - msm got VM_BIND support which is important for vulkan sparse memory
   - more drm_panic users
   - gpusvm common code to handle a bunch of core SVM work outside
     drivers.
  Detail summary:
  Changes outside drm subdirectory:
   - 'shrink_shmem_memory()' for better shmem/hibernate interaction
   - Rust support infrastructure:
      - make ETIMEDOUT available
      - add size constants up to SZ_2G
      - add DMA coherent allocation bindings
   - mtd driver for Intel GPU non-volatile storage
   - i2c designware quirk for Intel xe
  core:
   - atomic helpers: tune enable/disable sequences
   - add task info to wedge API
   - refactor EDID quirks
   - connector: move HDR sink to drm_display_info
   - fourcc: half-float and 32-bit float formats
   - mode_config: pass format info to simplify
  dma-buf:
   - heaps: Give CMA heap a stable name
  ci:
   - add device tree validation and kunit
  displayport:
   - change AUX DPCD access probe address
   - add quirk for DPCD probe
   - add panel replay definitions
   - backlight control helpers
  fbdev:
   - make CONFIG_FIRMWARE_EDID available on all arches
  fence:
   - fix UAF issues
  format-helper:
   - improve tests
  gpusvm:
   - introduce devmem only flag for allocation
   - add timeslicing support to GPU SVM
  ttm:
   - improve eviction
  sched:
   - tracing improvements
   - kunit improvements
   - memory leak fixes
   - reset handling improvements
  color mgmt:
   - add hardware gamma LUT handling helpers
  bridge:
   - add destroy hook
   - switch to reference counted drm_bridge allocations
   - tc358767: convert to devm_drm_bridge_alloc
   - improve CEC handling
  panel:
   - switch to reference counter drm_panel allocations
   - fwnode panel lookup
   - Huiling hl055fhv028c support
   - Raspberry Pi 7" 720x1280 support
   - edp: KDC KD116N3730A05, N160JCE-ELL CMN, N116BCJ-EAK
   - simple: AUO P238HAN01
   - st7701: Winstar wf40eswaa6mnn0
   - visionox: rm69299-shift
   - Renesas R61307, Renesas R69328 support
   - DJN HX83112B
  hdmi:
   - add CEC handling
   - YUV420 output support
  xe:
   - WildCat Lake support
   - Enable PanthorLake by default
   - mark BMG as SRIOV capable
   - update firmware recommendations
   - Expose media OA units
   - aux-bux support for non-volatile memory
   - MTD intel-dg driver for non-volatile memory
   - Expose fan control and voltage regulator in sysfs
   - restructure migration for multi-device
   - Restore GuC submit UAF fix
   - make GEM shrinker drm managed
   - SRIOV VF Post-migration recovery of GGTT nodes
   - W/A additions/reworks
   - Prefetch support for svm ranges
   - Don't allocate managed BO for each policy change
   - HWMON fixes for BMG
   - Create LRC BO without VM
   - PCI ID updates
   - make SLPC debugfs files optional
   - rework eviction rejection of bound external BOs
   - consolidate PAT programming logic for pre/post Xe2
   - init changes for flicker-free boot
   - Enable GuC Dynamic Inhibit Context switch
  i915:
   - drm_panic support for i915/xe
   - initial flip queue off by default for LNL/PNL
   - Wildcat Lake Display support
   - Support for DSC fractional link bpp
   - Support for simultaneous Panel Replay and Adaptive sync
   - Support for PTL+ double buffer LUT
   - initial PIPEDMC event handling
   - drm_panel_follower support
   - DPLL interface renames
   - allocate struct intel_display dynamically
   - flip queue preperation
   - abstract DRAM detection better
   - avoid GuC scheduling stalls
   - remove DG1 force probe requirement
   - fix MEI interrupt handler on RT kernels
   - use backlight control helpers for eDP
   - more shared display code refactoring
  amdgpu:
   - add userq slot to INFO ioctl
   - SR-IOV hibernation support
   - Suspend improvements
   - Backlight improvements
   - Use scaling for non-native eDP modes
   - cleaner shader updates for GC 9.x
   - Remove fence slab
   - SDMA fw checks for userq support
   - RAS updates
   - DMCUB updates
   - DP tunneling fixes
   - Display idle D3 support
   - Per queue reset improvements
   - initial smartmux support
  amdkfd:
   - enable KFD on loongarch
   - mtype fix for ext coherent system memory
  radeon:
   - CS validation additional GL extensions
   - drop console lock during suspend/resume
   - bump driver version
  msm:
   - VM BIND support
   - CI: infrastructure updates
   - UBWC single source of truth
   - decouple GPU and KMS support
   - DP: rework I/O accessors
   - DPU: SM8750 support
   - DSI: SM8750 support
   - GPU: X1-45 support and speedbin support for X1-85
   - MDSS: SM8750 support
  nova:
   - register! macro improvements
   - DMA object abstraction
   - VBIOS parser + fwsec lookup
   - sysmem flush page support
   - falcon: generic falcon boot code and HAL
   - FWSEC-FRTS: fb setup and load/execute
  ivpu:
   - Add Wildcat Lake support
   - Add turbo flag
  ast:
   - improve hardware generations implementation
  imx:
   - IMX8qxq Display Controller support
  lima:
   - Rockchip RK3528 GPU support
  nouveau:
   - fence handling cleanup
  panfrost:
   - MT8370 support
   - bo labeling
   - 64-bit register access
  qaic:
   - add RAS support
  rockchip:
   - convert inno_hdmi to a bridge
  rz-du:
   - add RZ/V2H(P) support
   - MIPI-DSI DCS support
  sitronix:
   - ST7567 support
  sun4i:
   - add H616 support
  tidss:
   - add TI AM62L support
   - AM65x OLDI bridge support
  bochs:
   - drm panic support
  vkms:
   - YUV and R* format support
   - use faux device
  vmwgfx:
   - fence improvements
  hyperv:
   - move out of simple
   - add drm_panic support"
* tag 'drm-next-2025-07-30' of https://gitlab.freedesktop.org/drm/kernel: (1479 commits)
  drm/tidss: oldi: convert to devm_drm_bridge_alloc() API
  drm/tidss: encoder: convert to devm_drm_bridge_alloc()
  drm/amdgpu: move reset support type checks into the caller
  drm/amdgpu/sdma7: re-emit unprocessed state on ring reset
  drm/amdgpu/sdma6: re-emit unprocessed state on ring reset
  drm/amdgpu/sdma5.2: re-emit unprocessed state on ring reset
  drm/amdgpu/sdma5: re-emit unprocessed state on ring reset
  drm/amdgpu/gfx12: re-emit unprocessed state on ring reset
  drm/amdgpu/gfx11: re-emit unprocessed state on ring reset
  drm/amdgpu/gfx10: re-emit unprocessed state on ring reset
  drm/amdgpu/gfx9.4.3: re-emit unprocessed state on kcq reset
  drm/amdgpu/gfx9: re-emit unprocessed state on kcq reset
  drm/amdgpu: Add WARN_ON to the resource clear function
  drm/amd/pm: Use cached metrics data on SMUv13.0.6
  drm/amd/pm: Use cached data for min/max clocks
  gpu: nova-core: fix bounds check in PmuLookupTableEntry::new
  drm/amdgpu: Replace HQD terminology with slots naming
  drm/amdgpu: Add user queue instance count in HW IP info
  drm/amd/amdgpu: Add helper functions for isp buffers
  drm/amd/amdgpu: Initialize swnode for ISP MFD device
  ...
Diffstat (limited to 'rust/kernel/drm')
| -rw-r--r-- | rust/kernel/drm/device.rs | 2 | ||||
| -rw-r--r-- | rust/kernel/drm/file.rs | 8 | ||||
| -rw-r--r-- | rust/kernel/drm/gem/mod.rs | 16 | ||||
| -rw-r--r-- | rust/kernel/drm/ioctl.rs | 4 | 
4 files changed, 15 insertions, 15 deletions
| diff --git a/rust/kernel/drm/device.rs b/rust/kernel/drm/device.rs index 16935f42fe2e..32029fde55eb 100644 --- a/rust/kernel/drm/device.rs +++ b/rust/kernel/drm/device.rs @@ -154,7 +154,7 @@ impl<T: drm::Driver> Device<T> {      /// Additionally, callers must ensure that the `struct device`, `ptr` is pointing to, is      /// embedded in `Self`.      #[doc(hidden)] -    pub unsafe fn as_ref<'a>(ptr: *const bindings::drm_device) -> &'a Self { +    pub unsafe fn from_raw<'a>(ptr: *const bindings::drm_device) -> &'a Self {          // SAFETY: By the safety requirements of this function `ptr` is a valid pointer to a          // `struct drm_device` embedded in `Self`.          let ptr = unsafe { Self::from_drm_device(ptr) }; diff --git a/rust/kernel/drm/file.rs b/rust/kernel/drm/file.rs index b9527705e551..e8789c9110d6 100644 --- a/rust/kernel/drm/file.rs +++ b/rust/kernel/drm/file.rs @@ -32,7 +32,7 @@ impl<T: DriverFile> File<T> {      /// # Safety      ///      /// `raw_file` must be a valid pointer to an open `struct drm_file`, opened through `T::open`. -    pub unsafe fn as_ref<'a>(ptr: *mut bindings::drm_file) -> &'a File<T> { +    pub unsafe fn from_raw<'a>(ptr: *mut bindings::drm_file) -> &'a File<T> {          // SAFETY: `raw_file` is valid by the safety requirements of this function.          unsafe { &*ptr.cast() }      } @@ -61,10 +61,10 @@ impl<T: DriverFile> File<T> {          // SAFETY: A callback from `struct drm_driver::open` guarantees that          // - `raw_dev` is valid pointer to a `struct drm_device`,          // - the corresponding `struct drm_device` has been registered. -        let drm = unsafe { drm::Device::as_ref(raw_dev) }; +        let drm = unsafe { drm::Device::from_raw(raw_dev) };          // SAFETY: `raw_file` is a valid pointer to a `struct drm_file`. -        let file = unsafe { File::<T>::as_ref(raw_file) }; +        let file = unsafe { File::<T>::from_raw(raw_file) };          let inner = match T::open(drm) {              Err(e) => { @@ -89,7 +89,7 @@ impl<T: DriverFile> File<T> {          raw_file: *mut bindings::drm_file,      ) {          // SAFETY: This reference won't escape this function -        let file = unsafe { File::<T>::as_ref(raw_file) }; +        let file = unsafe { File::<T>::from_raw(raw_file) };          // SAFETY: `file.driver_priv` has been created in `open_callback` through `KBox::into_raw`.          let _ = unsafe { KBox::from_raw(file.driver_priv()) }; diff --git a/rust/kernel/drm/gem/mod.rs b/rust/kernel/drm/gem/mod.rs index 4cd69fa84318..a24c9a2fc201 100644 --- a/rust/kernel/drm/gem/mod.rs +++ b/rust/kernel/drm/gem/mod.rs @@ -51,7 +51,7 @@ pub trait IntoGEMObject: Sized + super::private::Sealed + AlwaysRefCounted {      /// - `self_ptr` must be a valid pointer to `Self`.      /// - The caller promises that holding the immutable reference returned by this function does      ///   not violate rust's data aliasing rules and remains valid throughout the lifetime of `'a`. -    unsafe fn as_ref<'a>(self_ptr: *mut bindings::drm_gem_object) -> &'a Self; +    unsafe fn from_raw<'a>(self_ptr: *mut bindings::drm_gem_object) -> &'a Self;  }  // SAFETY: All gem objects are refcounted. @@ -86,12 +86,12 @@ extern "C" fn open_callback<T: BaseDriverObject<U>, U: BaseObject>(  ) -> core::ffi::c_int {      // SAFETY: `open_callback` is only ever called with a valid pointer to a `struct drm_file`.      let file = unsafe { -        drm::File::<<<U as IntoGEMObject>::Driver as drm::Driver>::File>::as_ref(raw_file) +        drm::File::<<<U as IntoGEMObject>::Driver as drm::Driver>::File>::from_raw(raw_file)      };      // SAFETY: `open_callback` is specified in the AllocOps structure for `Object<T>`, ensuring that      // `raw_obj` is indeed contained within a `Object<T>`.      let obj = unsafe { -        <<<U as IntoGEMObject>::Driver as drm::Driver>::Object as IntoGEMObject>::as_ref(raw_obj) +        <<<U as IntoGEMObject>::Driver as drm::Driver>::Object as IntoGEMObject>::from_raw(raw_obj)      };      match T::open(obj, file) { @@ -106,12 +106,12 @@ extern "C" fn close_callback<T: BaseDriverObject<U>, U: BaseObject>(  ) {      // SAFETY: `open_callback` is only ever called with a valid pointer to a `struct drm_file`.      let file = unsafe { -        drm::File::<<<U as IntoGEMObject>::Driver as drm::Driver>::File>::as_ref(raw_file) +        drm::File::<<<U as IntoGEMObject>::Driver as drm::Driver>::File>::from_raw(raw_file)      };      // SAFETY: `close_callback` is specified in the AllocOps structure for `Object<T>`, ensuring      // that `raw_obj` is indeed contained within a `Object<T>`.      let obj = unsafe { -        <<<U as IntoGEMObject>::Driver as drm::Driver>::Object as IntoGEMObject>::as_ref(raw_obj) +        <<<U as IntoGEMObject>::Driver as drm::Driver>::Object as IntoGEMObject>::from_raw(raw_obj)      };      T::close(obj, file); @@ -124,7 +124,7 @@ impl<T: DriverObject> IntoGEMObject for Object<T> {          self.obj.get()      } -    unsafe fn as_ref<'a>(self_ptr: *mut bindings::drm_gem_object) -> &'a Self { +    unsafe fn from_raw<'a>(self_ptr: *mut bindings::drm_gem_object) -> &'a Self {          let self_ptr: *mut Opaque<bindings::drm_gem_object> = self_ptr.cast();          // SAFETY: `obj` is guaranteed to be in an `Object<T>` via the safety contract of this @@ -170,9 +170,9 @@ pub trait BaseObject: IntoGEMObject {          // - A `drm::Driver` can only have a single `File` implementation.          // - `file` uses the same `drm::Driver` as `Self`.          // - Therefore, we're guaranteed that `ptr` must be a gem object embedded within `Self`. -        // - And we check if the pointer is null befoe calling as_ref(), ensuring that `ptr` is a +        // - And we check if the pointer is null befoe calling from_raw(), ensuring that `ptr` is a          //   valid pointer to an initialized `Self`. -        let obj = unsafe { Self::as_ref(ptr) }; +        let obj = unsafe { Self::from_raw(ptr) };          // SAFETY:          // - We take ownership of the reference of `drm_gem_object_lookup()`. diff --git a/rust/kernel/drm/ioctl.rs b/rust/kernel/drm/ioctl.rs index 445639404fb7..fdec01c37168 100644 --- a/rust/kernel/drm/ioctl.rs +++ b/rust/kernel/drm/ioctl.rs @@ -134,7 +134,7 @@ macro_rules! declare_drm_ioctls {                              // FIXME: Currently there is nothing enforcing that the types of the                              // dev/file match the current driver these ioctls are being declared                              // for, and it's not clear how to enforce this within the type system. -                            let dev = $crate::drm::device::Device::as_ref(raw_dev); +                            let dev = $crate::drm::device::Device::from_raw(raw_dev);                              // SAFETY: The ioctl argument has size `_IOC_SIZE(cmd)`, which we                              // asserted above matches the size of this type, and all bit patterns of                              // UAPI structs must be valid. @@ -142,7 +142,7 @@ macro_rules! declare_drm_ioctls {                                  &*(raw_data as *const $crate::types::Opaque<$crate::uapi::$struct>)                              };                              // SAFETY: This is just the DRM file structure -                            let file = unsafe { $crate::drm::File::as_ref(raw_file) }; +                            let file = unsafe { $crate::drm::File::from_raw(raw_file) };                              match $func(dev, data, file) {                                  Err(e) => e.to_errno(), | 
