]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
Merge tag 'drm-next-2025-10-01' of https://gitlab.freedesktop.org/drm/kernel
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 2 Oct 2025 19:47:25 +0000 (12:47 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 2 Oct 2025 19:47:25 +0000 (12:47 -0700)
Pull drm updates from Dave Airlie:
 "cross-subsystem:
   - i2c-hid: Make elan touch controllers power on after panel is
     enabled
   - dt bindings for STM32MP25 SoC
   - pci vgaarb: use screen_info helpers
   - rust pin-init updates
   - add MEI driver for late binding firmware update/load

  uapi:
   - add ioctl for reassigning GEM handles
   - provide boot_display attribute on boot-up devices

  core:
   - document DRM_MODE_PAGE_FLIP_EVENT
   - add vendor specific recovery method to drm device wedged uevent

  gem:
   - Simplify gpuvm locking

  ttm:
   - add interface to populate buffers

  sched:
   - Fix race condition in trace code

  atomic:
   - Reallow no-op async page flips

  display:
   - dp: Fix command length

  video:
   - Improve pixel-format handling for struct screen_info

  rust:
   - drop Opaque<> from ioctl args
   - Alloc:
       - BorrowedPage type and AsPageIter traits
       - Implement Vmalloc::to_page() and VmallocPageIter
   - DMA/Scatterlist:
       - Add dma::DataDirection and type alias for dma_addr_t
       - Abstraction for struct scatterlist and sg_table
   - DRM:
       - simplify use of generics
       - add DriverFile type alias
       - drop Object::SIZE
   - Rust:
       - pin-init tree merge
       - Various methods for AsBytes and FromBytes traits

  gpuvm:
   - Support madvice in Xe driver

  gpusvm:
   - fix hmm_pfn_to_map_order usage in gpusvm

  bridge:
   - Improve and fix ref counting on bridge management
   - cdns-dsi: Various improvements to mode setting
   - Support Solomon SSD2825 plus DT bindings
   - Support Waveshare DSI2DPI plus DT bindings
   - Support Content Protection property
   - display-connector: Improve DP display detection
   - Add support for Radxa Ra620 plus DT bindings
   - adv7511: Provide SPD and HDMI infoframes
   - it6505: Replace crypto_shash with sha()
   - synopsys: Add support for DW DPTX Controller plus DT bindings
   - adv7511: Write full Audio infoframe
   - ite6263: Support vendor-specific infoframes
   - simple: Add support for Realtek RTD2171 DP-to-HDMI plus DT bindings

  panel:
   - panel-edp: Support mt8189 Chromebooks; Support BOE NV140WUM-N64;
     Support SHP LQ134Z1; Fixes
   - panel-simple: Support Olimex LCD-OLinuXino-5CTS plus DT bindings
   - Support Samsung AMS561RA01
   - Support Hydis HV101HD1 plus DT bindings
   - ilitek-ili9881c: Refactor mode setting; Add support for Bestar
     BSD1218-A101KL68 LCD plus DT bindings
   - lvds: Add support for Ampire AMP19201200B5TZQW-T03 to DT bindings
   - edp: Add support for additonal mt8189 Chromebook panels
   - lvds: Add DT bindings for EDT ETML0700Z8DHA

  amdgpu:
   - add CRIU support for gem objects
   - RAS updates
   - VCN SRAM load fixes
   - EDID read fixes
   - eDP ALPM support
   - Documentation updates
   - Rework PTE flag generation
   - DCE6 fixes
   - VCN devcoredump cleanup
   - MMHUB client id fixes
   - VCN 5.0.1 RAS support
   - SMU 13.0.x updates
   - Expanded PCIe DPC support
   - Expanded VCN reset support
   - VPE per queue reset support
   - give kernel jobs unique id for tracing
   - pre-populate exported buffers
   - cyan skillfish updates
   - make vbios build number available in sysfs
   - userq updates
   - HDCP updates
   - support MMIO remap page as ttm pool
   - JPEG parser updates
   - DCE6 DC updates
   - use devm for i2c buses
   - GPUVM locking updates
   - Drop non-DC DCE11 code
   - improve fallback handling for pixel encoding

  amdkfd:
   - SVM/page migration fixes
   - debugfs fixes
   - add CRIO support for gem objects
   - SVM updates

  radeon:
   - use dev_warn_once in CS parsers

  xe:
   - add madvise interface
   - add DRM_IOCTL_XE_VM_QUERY_MEMORY_RANGE_ATTRS to query VMA count
     and memory attributes
   - drop L# bank mask reporting from media GT3 on Xe3+.
   - add SLPC power_profile sysfs interface
   - add configs attribs to add post/mid context-switch commands
   - handle firmware reported hardware errors notifying userspace with
     device wedged uevent
   - use same dir structure across sysfs/debugfs
   - cleanup and future proof vram region init
   - add G-states and PCI link states to debugfs
   - Add SRIOV support for CCS surfaces on Xe2+
   - Enable SRIOV PF mode by default on supported platforms
   - move flush to common code
   - extended core workarounds for Xe2/3
   - use DRM scheduler for delayed GT TLB invalidations
   - configs improvements and allow VF device enablement
   - prep work to expose mmio regions to userspace
   - VF migration support added
   - prepare GPU SVM for THP migration
   - start fixing XE_PAGE_SIZE vs PAGE_SIZE
   - add PSMI support for hw validation
   - resize VF bars to max possible size according to number of VFs
   - Ensure GT is in C0 during resume
   - pre-populate exported buffers
   - replace xe_hmm with gpusvm
   - add more SVM GT stats to debugfs
   - improve fake pci and WA kunnit handle for new platform testing
   - Test GuC to GuC comms to add debugging
   - use attribute groups to simplify sysfs registration
   - add Late Binding firmware code to interact with MEI

  i915:
   - apply multiple JSL/EHL/Gen7/Gen6 workarounds properly
   - protect against overflow in active_engine()
   - Use try_cmpxchg64() in __active_lookup()
   - include GuC registers in error state
   - get rid of dev->struct_mutex
   - iopoll: generalize read_poll_timout
   - lots more display refactoring
   - Reject HBR3 in any eDP Panel
   - Prune modes for YUV420
   - Display Wa fix, additions, and updates
   - DP: Fix 2.7 Gbps link training on g4x
   - DP: Adjust the idle pattern handling
   - DP: Shuffle the link training code a bit
   - Don't set/read the DSI C clock divider on GLK
   - Enable_psr kernel parameter changes
   - Type-C enabled/disconnected dp-alt sink
   - Wildcat Lake enabling
   - DP HDR updates
   - DRAM detection
   - wait PSR idle on dsb commit
   - Remove FBC modulo 4 restriction for ADL-P+
   - panic: refactor framebuffer allocation

  habanalabs:
   - debug/visibility improvements
   - vmalloc-backed coherent mmap support
   - HLDIO infrastructure

  nova-core:
   - various register!() macro improvements
   - minor vbios/firmware fixes/refactoring
   - advance firmware boot stages; process Booter and patch signatures
   - process GSP and GSP bootloader
   - Add r570.144 firmware bindings and update to it
   - Move GSP boot code to own module
   - Use new pin-init features to store driver's private data in a
     single allocation
   - Update ARef import from sync::aref

  nova-drm:
   - Update ARef import from sync::aref

  tyr:
   - initial driver skeleton for a rust driver for ARM Mali GPUs
   - capable of powering up, query metadata and provide it to userspace.

  msm:
   - GPU and Core:
      - in DT bindings describe clocks per GPU type
      - GMU bandwidth voting for x1-85
      - a623/a663 speedbins
      - cleanup some remaining no-iommu leftovers after VM_BIND conversion
      - fix GEM obj 32b size truncation
      - add missing VM_BIND param validation
      - IFPC for x1-85 and a750
      - register xml and gen_header.py sync from mesa
   - Display:
      - add missing bindings for display on SC8180X
      - added DisplayPort MST bindings
      - conversion from round_rate() to determine_rate()

  amdxdna:
   - add IOCTL_AMDXDNA_GET_ARRAY
   - support user space allocated buffers
   - streamline PM interfaces
   - Refactoring wrt. hardware contexts
   - improve error reporting

  nouveau:
   - use GSP firmware by default
   - improve error reporting
   - Pre-populate exported buffers

  ast:
   - Clean up detection of DRAM config

  exynos:
   - add DSIM bridge driver support for Exynos7870
   - Document Exynos7870 DSIM compatible in dt-binding

  panthor:
   - Print task/pid on errors
   - Add support for Mali G710, G510, G310, Gx15, Gx20, Gx25
   - Improve cache flushing
   - Fail VM bind if BO has offset

  renesas:
   - convert to RUNTIME_PM_OPS

  rcar-du:
   - Make number of lanes configurable
   - Use RUNTIME_PM_OPS
   - Add support for DSI commands

  rocket:
   - Add driver for Rockchip NPU plus DT bindings
   - Use kfree() and sizeof() correctly
   - Test DMA status

  rockchip:
   - dsi2: Add support for RK3576 plus DT bindings
   - Add support for RK3588 DPTX output

  tidss:
   - Use crtc_ fields for programming display mode
   - Remove other drivers from aperture

  pixpaper:
   - Add support for Mayqueen Pixpaper plus DT bindings

  v3d:
   - Support querying nubmer of GPU resets for KHR_robustness

  stm:
   - Clean up logging
   - ltdc: Add support support for STM32MP257F-EV1 plus DT bindings

  sitronix:
   - st7571-i2c: Add support for inverted displays and 2-bit grayscale

  tidss:
   - Convert to kernel's FIELD_ macros

  vesadrm:
   - Support 8-bit palette mode

  imagination:
   - Improve power management
   - Add support for TH1520 GPU
   - Support Risc-V architectures

  v3d:
   - Improve job management and locking

  vkms:
   - Support variants of ARGB8888, ARGB16161616, RGB565, RGB888 and P01x
   - Spport YUV with 16-bit components"

* tag 'drm-next-2025-10-01' of https://gitlab.freedesktop.org/drm/kernel: (1455 commits)
  drm/amd: Add name to modes from amdgpu_connector_add_common_modes()
  drm/amd: Drop some common modes from amdgpu_connector_add_common_modes()
  drm/amdgpu: update MODULE_PARM_DESC for freesync_video
  drm/amd: Use dynamic array size declaration for amdgpu_connector_add_common_modes()
  drm/amd/display: Share dce100_validate_global with DCE6-8
  drm/amd/display: Share dce100_validate_bandwidth with DCE6-8
  drm/amdgpu: Fix fence signaling race condition in userqueue
  amd/amdkfd: enhance kfd process check in switch partition
  amd/amdkfd: resolve a race in amdgpu_amdkfd_device_fini_sw
  drm/amd/display: Reject modes with too high pixel clock on DCE6-10
  drm/amd: Drop unnecessary check in amdgpu_connector_add_common_modes()
  drm/amd/display: Only enable common modes for eDP and LVDS
  drm/amdgpu: remove the redeclaration of variable i
  drm/amdgpu/userq: assign an error code for invalid userq va
  drm/amdgpu: revert "rework reserved VMID handling" v2
  drm/amdgpu: remove leftover from enforcing isolation by VMID
  drm/amdgpu: Add fallback to pipe reset if KCQ ring reset fails
  accel/habanalabs: add Infineon version check
  accel/habanalabs/gaudi2: read preboot status after recovering from dirty state
  accel/habanalabs: add HL_GET_P_STATE passthrough type
  ...

32 files changed:
1  2 
.mailmap
Documentation/devicetree/bindings/display/panel/panel-simple.yaml
Documentation/devicetree/bindings/vendor-prefixes.yaml
Documentation/gpu/nova/core/todo.rst
MAINTAINERS
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
drivers/gpu/drm/bridge/analogix/anx7625.c
drivers/gpu/drm/drm_gpuvm.c
drivers/gpu/drm/i915/display/intel_ddi.c
drivers/gpu/drm/panthor/panthor_sched.c
drivers/gpu/drm/xe/tests/xe_pci.c
drivers/gpu/drm/xe/tests/xe_pci_test.h
drivers/gpu/nova-core/driver.rs
drivers/gpu/nova-core/fb.rs
drivers/gpu/nova-core/gpu.rs
drivers/gpu/nova-core/regs/macros.rs
drivers/gpu/nova-core/vbios.rs
rust/bindings/bindings_helper.h
rust/helpers/helpers.c
rust/kernel/alloc/allocator.rs
rust/kernel/alloc/kbox.rs
rust/kernel/alloc/kvec.rs
rust/kernel/alloc/layout.rs
rust/kernel/devres.rs
rust/kernel/dma.rs
rust/kernel/drm/device.rs
rust/kernel/drm/driver.rs
rust/kernel/drm/gem/mod.rs
rust/kernel/drm/ioctl.rs
rust/kernel/lib.rs
samples/rust/rust_dma.rs
samples/rust/rust_driver_pci.rs

diff --cc .mailmap
Simple merge
index 7aa17199ea434b77c12b7e4df51a1369913ff640,49a5117d2bbb0cd6b21da5e864ec00b5d0dbd7dd..f1d1882009ba9e80127bae0151af157879fe3070
@@@ -965,8 -935,8 +967,10 @@@ patternProperties
      description: Maxim Integrated Products
    "^maxlinear,.*":
      description: MaxLinear Inc.
 +  "^maxtor,.*":
 +    description: Maxtor Corporation
+   "^mayqueen,.*":
+     description: Mayqueen Technologies Ltd.
    "^mbvl,.*":
      description: Mobiveil Inc.
    "^mcube,.*":
Simple merge
diff --cc MAINTAINERS
Simple merge
Simple merge
index f707e0a5429596a85b8e9b031dfc71ff280b9719,aa29ac759d5db27c0360b585a026a6a07d2f5616..49b37dfd4e58d67922e9fc1a63d52f8f8fb73dde
  #include <kunit/test-bug.h>
  #include <kunit/visibility.h>
  
 -const void *xe_pci_fake_data_gen_params(const void *prev, char *desc)
+ #define PLATFORM_CASE(platform__, graphics_step__)                                    \
+       {                                                                               \
+               .platform = XE_ ## platform__,                                          \
+               .subplatform = XE_SUBPLATFORM_NONE,                                     \
+               .step = { .graphics = STEP_ ## graphics_step__ }                        \
+       }
+ #define SUBPLATFORM_CASE(platform__, subplatform__, graphics_step__)                  \
+       {                                                                               \
+               .platform = XE_ ## platform__,                                          \
+               .subplatform = XE_SUBPLATFORM_ ## platform__ ## _ ## subplatform__,     \
+               .step = { .graphics = STEP_ ## graphics_step__ }                        \
+       }
+ #define GMDID_CASE(platform__, graphics_verx100__, graphics_step__,                   \
+                  media_verx100__, media_step__)                                       \
+       {                                                                               \
+               .platform = XE_ ## platform__,                                          \
+               .subplatform = XE_SUBPLATFORM_NONE,                                     \
+               .graphics_verx100 = graphics_verx100__,                                 \
+               .media_verx100 = media_verx100__,                                       \
+               .step = { .graphics = STEP_ ## graphics_step__,                         \
+                          .media = STEP_ ## media_step__ }                             \
+       }
+ static const struct xe_pci_fake_data cases[] = {
+       PLATFORM_CASE(TIGERLAKE, B0),
+       PLATFORM_CASE(DG1, A0),
+       PLATFORM_CASE(DG1, B0),
+       PLATFORM_CASE(ALDERLAKE_S, A0),
+       PLATFORM_CASE(ALDERLAKE_S, B0),
+       PLATFORM_CASE(ALDERLAKE_S, C0),
+       PLATFORM_CASE(ALDERLAKE_S, D0),
+       PLATFORM_CASE(ALDERLAKE_P, A0),
+       PLATFORM_CASE(ALDERLAKE_P, B0),
+       PLATFORM_CASE(ALDERLAKE_P, C0),
+       SUBPLATFORM_CASE(ALDERLAKE_S, RPLS, D0),
+       SUBPLATFORM_CASE(ALDERLAKE_P, RPLU, E0),
+       SUBPLATFORM_CASE(DG2, G10, C0),
+       SUBPLATFORM_CASE(DG2, G11, B1),
+       SUBPLATFORM_CASE(DG2, G12, A1),
+       GMDID_CASE(METEORLAKE, 1270, A0, 1300, A0),
+       GMDID_CASE(METEORLAKE, 1271, A0, 1300, A0),
+       GMDID_CASE(METEORLAKE, 1274, A0, 1300, A0),
+       GMDID_CASE(LUNARLAKE, 2004, A0, 2000, A0),
+       GMDID_CASE(LUNARLAKE, 2004, B0, 2000, A0),
+       GMDID_CASE(BATTLEMAGE, 2001, A0, 1301, A1),
+       GMDID_CASE(PANTHERLAKE, 3000, A0, 3000, A0),
+ };
+ KUNIT_ARRAY_PARAM(platform, cases, xe_pci_fake_data_desc);
+ /**
+  * xe_pci_fake_data_gen_params - Generate struct xe_pci_fake_data parameters
+  * @prev: the pointer to the previous parameter to iterate from or NULL
+  * @desc: output buffer with minimum size of KUNIT_PARAM_DESC_SIZE
+  *
+  * This function prepares struct xe_pci_fake_data parameter.
+  *
+  * To be used only as a parameter generator function in &KUNIT_CASE_PARAM.
+  *
+  * Return: pointer to the next parameter or NULL if no more parameters
+  */
 -      return platform_gen_params(prev, desc);
++const void *xe_pci_fake_data_gen_params(struct kunit *test, const void *prev, char *desc)
+ {
++      return platform_gen_params(test, prev, desc);
+ }
+ EXPORT_SYMBOL_IF_KUNIT(xe_pci_fake_data_gen_params);
+ static const struct xe_device_desc *lookup_desc(enum xe_platform p)
+ {
+       const struct xe_device_desc *desc;
+       const struct pci_device_id *ids;
+       for (ids = pciidlist; ids->driver_data; ids++) {
+               desc = (const void *)ids->driver_data;
+               if (desc->platform == p)
+                       return desc;
+       }
+       return NULL;
+ }
+ static const struct xe_subplatform_desc *lookup_sub_desc(enum xe_platform p, enum xe_subplatform s)
+ {
+       const struct xe_device_desc *desc = lookup_desc(p);
+       const struct xe_subplatform_desc *spd;
+       if (desc && desc->subplatforms)
+               for (spd = desc->subplatforms; spd->subplatform; spd++)
+                       if (spd->subplatform == s)
+                               return spd;
+       return NULL;
+ }
+ static const char *lookup_platform_name(enum xe_platform p)
+ {
+       const struct xe_device_desc *desc = lookup_desc(p);
+       return desc ? desc->platform_name : "INVALID";
+ }
+ static const char *__lookup_subplatform_name(enum xe_platform p, enum xe_subplatform s)
+ {
+       const struct xe_subplatform_desc *desc = lookup_sub_desc(p, s);
+       return desc ? desc->name : "INVALID";
+ }
+ static const char *lookup_subplatform_name(enum xe_platform p, enum xe_subplatform s)
+ {
+       return s == XE_SUBPLATFORM_NONE ? "" : __lookup_subplatform_name(p, s);
+ }
+ static const char *subplatform_prefix(enum xe_subplatform s)
+ {
+       return s == XE_SUBPLATFORM_NONE ? "" : " ";
+ }
+ static const char *step_prefix(enum xe_step step)
+ {
+       return step == STEP_NONE ? "" : " ";
+ }
+ static const char *step_name(enum xe_step step)
+ {
+       return step == STEP_NONE ? "" : xe_step_name(step);
+ }
+ static const char *sriov_prefix(enum xe_sriov_mode mode)
+ {
+       return mode <= XE_SRIOV_MODE_NONE ? "" : " ";
+ }
+ static const char *sriov_name(enum xe_sriov_mode mode)
+ {
+       return mode <= XE_SRIOV_MODE_NONE ? "" : xe_sriov_mode_to_string(mode);
+ }
+ static const char *lookup_graphics_name(unsigned int verx100)
+ {
+       const struct xe_ip *ip = find_graphics_ip(verx100);
+       return ip ? ip->name : "";
+ }
+ static const char *lookup_media_name(unsigned int verx100)
+ {
+       const struct xe_ip *ip = find_media_ip(verx100);
+       return ip ? ip->name : "";
+ }
+ /**
+  * xe_pci_fake_data_desc - Describe struct xe_pci_fake_data parameter
+  * @param: the &struct xe_pci_fake_data parameter to describe
+  * @desc: output buffer with minimum size of KUNIT_PARAM_DESC_SIZE
+  *
+  * This function prepares description of the struct xe_pci_fake_data parameter.
+  *
+  * It is tailored for use in parameterized KUnit tests where parameter generator
+  * is based on the struct xe_pci_fake_data arrays.
+  */
+ void xe_pci_fake_data_desc(const struct xe_pci_fake_data *param, char *desc)
+ {
+       if (param->graphics_verx100 || param->media_verx100)
+               snprintf(desc, KUNIT_PARAM_DESC_SIZE, "%s%s%s %u.%02u(%s)%s%s %u.%02u(%s)%s%s%s%s",
+                        lookup_platform_name(param->platform),
+                        subplatform_prefix(param->subplatform),
+                        lookup_subplatform_name(param->platform, param->subplatform),
+                        param->graphics_verx100 / 100, param->graphics_verx100 % 100,
+                        lookup_graphics_name(param->graphics_verx100),
+                        step_prefix(param->step.graphics), step_name(param->step.graphics),
+                        param->media_verx100 / 100, param->media_verx100 % 100,
+                        lookup_media_name(param->media_verx100),
+                        step_prefix(param->step.media), step_name(param->step.media),
+                        sriov_prefix(param->sriov_mode), sriov_name(param->sriov_mode));
+       else
+               snprintf(desc, KUNIT_PARAM_DESC_SIZE, "%s%s%s%s%s%s%s",
+                        lookup_platform_name(param->platform),
+                        subplatform_prefix(param->subplatform),
+                        lookup_subplatform_name(param->platform, param->subplatform),
+                        step_prefix(param->step.graphics), step_name(param->step.graphics),
+                        sriov_prefix(param->sriov_mode), sriov_name(param->sriov_mode));
+ }
+ EXPORT_SYMBOL_IF_KUNIT(xe_pci_fake_data_desc);
  static void xe_ip_kunit_desc(const struct xe_ip *param, char *desc)
  {
        snprintf(desc, KUNIT_PARAM_DESC_SIZE, "%u.%02u %s",
@@@ -44,9 -251,16 +251,16 @@@ KUNIT_ARRAY_PARAM(pci_id, pciidlist, xe
   *
   * Return: pointer to the next parameter or NULL if no more parameters
   */
 -const void *xe_pci_graphics_ip_gen_param(const void *prev, char *desc)
 +const void *xe_pci_graphics_ip_gen_param(struct kunit *test, const void *prev, char *desc)
  {
 -      const void *next = pre_gmdid_graphics_ip_gen_params(prev, desc);
++      const void *next = pre_gmdid_graphics_ip_gen_params(test, prev, desc);
+       if (next)
+               return next;
+       if (is_insidevar(prev, pre_gmdid_graphics_ips))
+               prev = NULL;
 -      return graphics_ip_gen_params(prev, desc);
 +      return graphics_ip_gen_params(test, prev, desc);
  }
  EXPORT_SYMBOL_IF_KUNIT(xe_pci_graphics_ip_gen_param);
  
   *
   * Return: pointer to the next parameter or NULL if no more parameters
   */
 -const void *xe_pci_media_ip_gen_param(const void *prev, char *desc)
 +const void *xe_pci_media_ip_gen_param(struct kunit *test, const void *prev, char *desc)
  {
 -      const void *next = pre_gmdid_media_ip_gen_params(prev, desc);
++      const void *next = pre_gmdid_media_ip_gen_params(test, prev, desc);
+       if (next)
+               return next;
+       if (is_insidevar(prev, pre_gmdid_media_ips))
+               prev = NULL;
 -      return media_ip_gen_params(prev, desc);
 +      return media_ip_gen_params(test, prev, desc);
  }
  EXPORT_SYMBOL_IF_KUNIT(xe_pci_media_ip_gen_param);
  
index 6d8bc56f7bde62f079c185a8e209544411cf87cc,5e9a7ffc747f1f65e28acac463a17c943c6e8c88..30505d1cbefc828ebe3254e29b8813df1d9901ad
@@@ -23,12 -24,12 +25,12 @@@ struct xe_pci_fake_data 
  };
  
  int xe_pci_fake_device_init(struct xe_device *xe);
 -const void *xe_pci_fake_data_gen_params(const void *prev, char *desc);
++const void *xe_pci_fake_data_gen_params(struct kunit *test, const void *prev, char *desc);
+ void xe_pci_fake_data_desc(const struct xe_pci_fake_data *param, char *desc);
  
 -const void *xe_pci_graphics_ip_gen_param(const void *prev, char *desc);
 -const void *xe_pci_media_ip_gen_param(const void *prev, char *desc);
 -const void *xe_pci_id_gen_param(const void *prev, char *desc);
 -const void *xe_pci_live_device_gen_param(const void *prev, char *desc);
 +const void *xe_pci_graphics_ip_gen_param(struct kunit *test, const void *prev, char *desc);
 +const void *xe_pci_media_ip_gen_param(struct kunit *test, const void *prev, char *desc);
 +const void *xe_pci_id_gen_param(struct kunit *test, const void *prev, char *desc);
 +const void *xe_pci_live_device_gen_param(struct kunit *test, const void *prev, char *desc);
  
  #endif
Simple merge
index e4dc74f2f90a7bc4d237394146590661ad516782,68559902ae78bdef8d9bbe88a2f33eecde2ebcab..27d9edab8347c5ed3be104d62a9e32709238bb92
@@@ -3,9 -3,8 +3,9 @@@
  use core::ops::Range;
  
  use kernel::prelude::*;
 +use kernel::ptr::{Alignable, Alignment};
  use kernel::sizes::*;
- use kernel::types::ARef;
+ use kernel::sync::aref::ARef;
  use kernel::{dev_warn, device};
  
  use crate::dma::DmaObject;
index 600cc90b5fabea14a15c75bb692216cdaf85951f,5da9ad72648340ed988184737219b14771f31b7a..af20e2daea24f6984a068802f0f4c86823f4ca05
@@@ -1,17 -1,14 +1,13 @@@
  // SPDX-License-Identifier: GPL-2.0
  
 -use kernel::{device, devres::Devres, error::code::*, pci, prelude::*, sync::Arc};
 +use kernel::{device, devres::Devres, error::code::*, fmt, pci, prelude::*, sync::Arc};
  
  use crate::driver::Bar0;
- use crate::falcon::{gsp::Gsp, sec2::Sec2, Falcon};
- use crate::fb::FbLayout;
+ use crate::falcon::{gsp::Gsp as GspFalcon, sec2::Sec2 as Sec2Falcon, Falcon};
  use crate::fb::SysmemFlush;
- use crate::firmware::fwsec::{FwsecCommand, FwsecFirmware};
- use crate::firmware::{Firmware, FIRMWARE_VERSION};
  use crate::gfw;
+ use crate::gsp::Gsp;
  use crate::regs;
- use crate::util;
- use crate::vbios::Vbios;
 -use core::fmt;
  
  macro_rules! define_chipset {
      ({ $($variant:ident = $value:expr),* $(,)* }) =>
index 6b9df4205f4698806671b1f3c8263ec746133506,754c14ee7f401688da51e138db71ccaa58445aa6..8058e1696df976119d6abb4c4768b9e3716b0ebb
@@@ -315,11 -567,47 +567,47 @@@ macro_rules! register 
          );
      };
  
-     // Creates the IO accessors for a fixed offset register.
-     (@io $name:ident @ $offset:expr) => {
+     // Generates the `Debug` implementation for `$name`.
+     (@debug $name:ident { $($field:ident;)* }) => {
 -        impl ::core::fmt::Debug for $name {
 -            fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
++        impl ::kernel::fmt::Debug for $name {
++            fn fmt(&self, f: &mut ::kernel::fmt::Formatter<'_>) -> ::kernel::fmt::Result {
+                 f.debug_struct(stringify!($name))
 -                    .field("<raw>", &format_args!("{:#x}", &self.0))
++                    .field("<raw>", &::kernel::prelude::fmt!("{:#x}", &self.0))
+                 $(
+                     .field(stringify!($field), &self.$field())
+                 )*
+                     .finish()
+             }
+         }
+     };
+     // Generates the `Default` implementation for `$name`.
+     (@default $name:ident { $($field:ident;)* }) => {
+         /// Returns a value for the register where all fields are set to their default value.
+         impl ::core::default::Default for $name {
+             fn default() -> Self {
+                 #[allow(unused_mut)]
+                 let mut value = Self(Default::default());
+                 ::kernel::macros::paste!(
+                 $(
+                 value.[<set_ $field>](Default::default());
+                 )*
+                 );
+                 value
+             }
+         }
+     };
+     // Generates the IO accessors for a fixed offset register.
+     (@io_fixed $name:ident @ $offset:expr) => {
          #[allow(dead_code)]
          impl $name {
-             #[inline]
+             pub(crate) const OFFSET: usize = $offset;
+             /// Read the register from its address in `io`.
+             #[inline(always)]
              pub(crate) fn read<const SIZE: usize, T>(io: &T) -> Self where
                  T: ::core::ops::Deref<Target = ::kernel::io::Io<SIZE>>,
              {
index 091642d6a5a158f82e4fc69b720fb6a4835c711b,e6a06071420566560d69697e85dd0c6b384f33cb..71fbe71b84db9d93fd7ac8eca58e67f97e4bc46a
@@@ -8,9 -8,8 +8,9 @@@ use crate::firmware::FalconUCodeDescV3
  use core::convert::TryFrom;
  use kernel::device;
  use kernel::error::Result;
- use kernel::pci;
  use kernel::prelude::*;
 +use kernel::ptr::{Alignable, Alignment};
+ use kernel::types::ARef;
  
  /// The offset of the VBIOS ROM in the BAR0 space.
  const ROM_OFFSET: usize = 0x300000;
index 606b3b77a52afe994f99e361522ba22728d44484,c2cc52ee9945b5abd4148dca05c24d51bf440da4..5128e2f12038c0a58b1971f46c245403d03e0bef
@@@ -47,8 -46,8 +47,9 @@@
  #include <linux/cpufreq.h>
  #include <linux/cpumask.h>
  #include <linux/cred.h>
 +#include <linux/debugfs.h>
  #include <linux/device/faux.h>
+ #include <linux/dma-direction.h>
  #include <linux/dma-mapping.h>
  #include <linux/errname.h>
  #include <linux/ethtool.h>
Simple merge
index 869d9fd6952742412ec1d920d38cc7742460739a,84ee7e9d7b0eb1c35fae5897d4c642c63824ebb5..08fd31bf72d2ccee828a223262a4dcbfca9a0e32
@@@ -15,10 -15,12 +15,14 @@@ use core::ptr::NonNull
  
  use crate::alloc::{AllocError, Allocator};
  use crate::bindings;
+ use crate::page;
  use crate::pr_warn;
  
 +const ARCH_KMALLOC_MINALIGN: usize = bindings::ARCH_KMALLOC_MINALIGN;
 +
+ mod iter;
+ pub use self::iter::VmallocPageIter;
  /// The contiguous kernel allocator.
  ///
  /// `Kmalloc` is typically used for physically contiguous allocations up to page size, but also
index 27c4b5a9b61dc55c82d10a2a07f53e29a77bebe4,b69ff4a1d7487b84b242b23379444bba64e60cc7..2137c37000042b39521af84c86a742177c066ddb
@@@ -16,8 -17,8 +16,9 @@@ use core::ptr::NonNull
  use core::result::Result;
  
  use crate::ffi::c_void;
 +use crate::fmt;
  use crate::init::InPlaceInit;
+ use crate::page::AsPageIter;
  use crate::types::ForeignOwnable;
  use pin_init::{InPlaceWrite, Init, PinInit, ZeroableOption};
  
index dfc101e03f358a70d73a9acce1257ee0e1f6486c,ac438e70a1edba8981ad541c4af345fccefe64fa..5c3496b31e8bd78c13f88bffc568aa2d30b64554
@@@ -7,9 -7,10 +7,12 @@@ use super::
      layout::ArrayLayout,
      AllocError, Allocator, Box, Flags,
  };
- use crate::fmt;
 -use crate::page::AsPageIter;
++use crate::{
++    fmt,
++    page::AsPageIter,
++};
  use core::{
      borrow::{Borrow, BorrowMut},
 -    fmt,
      marker::PhantomData,
      mem::{ManuallyDrop, MaybeUninit},
      ops::Deref,
Simple merge
Simple merge
index 68fe6762442438e008e8a2119b4699da0a78a9c5,b2a6282876da17252dde97e70d751b48ae9a9bad..2569c21208e37b9503609cc4c1ea2846a629d6c5
@@@ -9,10 -9,20 +9,20 @@@ use crate::
      device::{Bound, Core},
      error::{to_result, Result},
      prelude::*,
 +    sync::aref::ARef,
      transmute::{AsBytes, FromBytes},
 -    types::ARef,
  };
  
+ /// DMA address type.
+ ///
+ /// Represents a bus address used for Direct Memory Access (DMA) operations.
+ ///
+ /// This is an alias of the kernel's `dma_addr_t`, which may be `u32` or `u64` depending on
+ /// `CONFIG_ARCH_DMA_ADDR_T_64BIT`.
+ ///
+ /// Note that this may be `u64` even on 32-bit architectures.
+ pub type DmaAddress = bindings::dma_addr_t;
  /// Trait to be implemented by DMA capable bus devices.
  ///
  /// The [`dma::Device`](Device) trait should be implemented by bus specific device representations,
Simple merge
Simple merge
Simple merge
Simple merge
index 4bc7a1e11a9f8aeb9dfc02f05cb54ef1696135e3,44e4b8853ff3cb0af0ec5f124aa6013e19c9d16b..2b0cb6df8e0f00413fe660cebf4e93a2e675baff
@@@ -17,8 -17,8 +17,9 @@@
  // the unstable features in use.
  //
  // Stable since Rust 1.79.0.
 +#![feature(generic_nonzero)]
  #![feature(inline_const)]
+ #![feature(pointer_is_aligned)]
  //
  // Stable since Rust 1.81.0.
  #![feature(lint_reasons)]
index ead8b542bb4aed8776cd7a042cd50ef4aa19726c,04007e29fd855887201d1a7628ae47ff2a2f4ee6..4d324f06cc2a63f101f9954f884f02dff09eb911
@@@ -5,13 -5,16 +5,15 @@@
  //! To make this driver probe, QEMU must be run with `-device pci-testdev`.
  
  use kernel::{
 -    bindings,
      device::Core,
-     dma::{CoherentAllocation, Device, DmaMask},
-     pci,
+     dma::{CoherentAllocation, DataDirection, Device, DmaMask},
+     page, pci,
      prelude::*,
 -    types::ARef,
+     scatterlist::{Owned, SGTable},
 +    sync::aref::ARef,
  };
  
+ #[pin_data(PinnedDrop)]
  struct DmaSampleDriver {
      pdev: ARef<pci::Device>,
      ca: CoherentAllocation<MyStruct>,
Simple merge