summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/xe
AgeCommit message (Collapse)Author
10 hoursMerge branch 'for-next' of ↵Mark Brown
https://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86.git
10 hoursMerge branch 'modules-next' of ↵Mark Brown
https://git.kernel.org/pub/scm/linux/kernel/git/modules/linux.git # Conflicts: # drivers/gpu/drm/clients/drm_fbdev_helper.c # drivers/gpu/drm/xe/xe_guc_log.c
10 hoursMerge branch 'drm-xe-next' of https://gitlab.freedesktop.org/drm/xe/kernel.gitMark Brown
# Conflicts: # drivers/gpu/drm/xe/xe_sysctrl_mailbox.c
10 hoursMerge branch 'drm-next' of https://gitlab.freedesktop.org/drm/kernel.gitMark Brown
# Conflicts: # drivers/firmware/qcom/Kconfig # drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c # drivers/gpu/drm/vc4/vc4_v3d.c # drivers/soc/qcom/qcom-geni-se.c # rust/kernel/mem.rs
12 hoursMerge branch 'configfs-next' of ↵Mark Brown
https://git.kernel.org/pub/scm/linux/kernel/git/leitao/linux.git
17 hoursdrm/xe/xe_ras: Track offlined pages by firmware to avoid duplicatesRiana Tauro
A memory scrubber can report multiple errors at the same address. Track pages already successfully offlined by the firmware so that subsequent reports for the same address are removed from the firmware queue instead of issuing redundant page offline requests. Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com> Reviewed-by: Tejas Upadhyay <tejas.upadhyay@intel.com> Link: https://patch.msgid.link/20261013055959.2569963-14-riana.tauro@intel.com Signed-off-by: Riana Tauro <riana.tauro@intel.com>
17 hoursdrm/xe/xe_ttm_vram: Report max_pages reported by firmware to userspaceRiana Tauro
Report the maximum number of pages returned by firmware at probe, resolving the existing TODO. Cc: Tejas Upadhyay <tejas.upadhyay@intel.com> Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com> Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com> Reviewed-by: Tejas Upadhyay <tejas.upadhyay@intel.com> Link: https://patch.msgid.link/20261013055959.2569963-13-riana.tauro@intel.com Signed-off-by: Riana Tauro <riana.tauro@intel.com>
17 hoursdrm/xe/xe_ras: Add function to get maximum pages firmware can storeRiana Tauro
Add function to get maximum number of pages that firmware can store for offline tracking. This will be used to report max pages to userspace. Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com> Reviewed-by: Tejas Upadhyay <tejas.upadhyay@intel.com> Link: https://patch.msgid.link/20261013055959.2569963-12-riana.tauro@intel.com Signed-off-by: Riana Tauro <riana.tauro@intel.com>
17 hoursdrm/xe/xe_ras: Add support to query page offline queue and listRiana Tauro
Add support to query page offline list and queue from firmware during module load. The page offline list command retrieves pages that are already offlined by the firmware. The page offline queue command retrieves the pages pending to be offlined by the firmware. Cc: Tejas Upadhyay <tejas.upadhyay@intel.com> Reviewed-by: Tejas Upadhyay <tejas.upadhyay@intel.com> Link: https://patch.msgid.link/20261013055959.2569963-11-riana.tauro@intel.com Signed-off-by: Riana Tauro <riana.tauro@intel.com>
17 hoursdrm/xe/xe_ras: Handle page offline requests for device memory ecc errorsRiana Tauro
Add basic support for sending page offline/remove requests to system controller and use it for device memory ECC error handling. Pages that belong to critical BOs cannot be handled by offlining and require a SBR (Secondary Bus Reset). Pages that are configured for log-only handling are not marked as bad by firmware. For all other valid page addresses, the first occurrence of error indicates a poison error and the page is offlined only by software. Firmware avoids permanently marking the page as bad. The second occurrence of an error indicates a Double-bit ECC error and the firmware permanently marks the page as bad. Cc: Tejas Upadhyay <tejas.upadhyay@intel.com> Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com> Reviewed-by: Tejas Upadhyay <tejas.upadhyay@intel.com> Link: https://patch.msgid.link/20261013055959.2569963-10-riana.tauro@intel.com Signed-off-by: Riana Tauro <riana.tauro@intel.com>
17 hoursdrm/xe: Separate drm-ras netlink data from device and firmware RAS stateRiana Tauro
Keep the DRM RAS data used for netlink reporting separate from the device and firmware RAS state in xe_device. Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com> Reviewed-by: Tejas Upadhyay <tejas.upadhyay@intel.com> Link: https://patch.msgid.link/20261013055959.2569963-9-riana.tauro@intel.com Signed-off-by: Riana Tauro <riana.tauro@intel.com>
21 hoursdrm/xe/gt: Disable GT reset worker before engine teardownSatyanarayana K V P
During tear-down process, a reset queued from Guc timeout handler can still access hwe after hwe is freed. Register a separate devm action that disables and drains the reset worker, so it runs before any engine is torn down. Fixes: 09c452d1171f ("drm/xe/gt: Synchronize GT reset with device unbind") Signed-off-by: Satyanarayana K V P <satyanarayana.k.v.p@intel.com> Cc: Matthew Brost <matthew.brost@intel.com> Cc: Piotr Piórkowski <piotr.piorkowski@intel.com> Cc: Balasubramani Vivekanandan <balasubramani.vivekanandan@intel.com> Assisted-by: LLM Reviewed-by: Piotr Piórkowski <piotr.piorkowski@intel.com> Signed-off-by: Matthew Brost <matthew.brost@intel.com> Link: https://patch.msgid.link/20261013152417.3189567-8-satyanarayana.k.v.p@intel.com
21 hoursdrm/xe/guc: Protect timeout handling from device unplugSatyanarayana K V P
The GuC scheduler timeout callback accesses device and GT state while handling a timed-out job. Guard the callback with drm_dev_enter() and drm_dev_exit() so device unplug waits for in-flight timeout handling. If unplug has already started, mark the job with -ENODEV and return it to the scheduler for cleanup. Fixes: 6eb2aad402cc ("drm/xe: Move hw_engine_fini to devm managed") Signed-off-by: Satyanarayana K V P <satyanarayana.k.v.p@intel.com> Cc: Matthew Brost <matthew.brost@intel.com> Cc: Piotr Piórkowski <piotr.piorkowski@intel.com> Assisted-by: LLM Reviewed-by: Matthew Brost <matthew.brost@intel.com> Signed-off-by: Matthew Brost <matthew.brost@intel.com> Link: https://patch.msgid.link/20261013152417.3189567-7-satyanarayana.k.v.p@intel.com
21 hoursdrm/xe: Prevent VF memory IRQ from accessing a torn-down engineSatyanarayana K V P
The VF memory IRQ handler iterates over HW engines whose names are set. Engine teardown clears hwe->gt but leaves hwe->name set, so the handler can select an engine whose GT has already been invalidated. This can cause a NULL pointer dereference in xe_hw_engine_handle_irq(). Invalidate the engine name during teardown so subsequent engine scans skip it. Signed-off-by: Satyanarayana K V P <satyanarayana.k.v.p@intel.com> Cc: Matthew Brost <matthew.brost@intel.com> Cc: Piotr Piórkowski <piotr.piorkowski@intel.com> Fixes: 6eb2aad402cc ("drm/xe: Move hw_engine_fini to devm managed") Reviewed-by: Piotr Piórkowski <piotr.piorkowski@intel.com> Signed-off-by: Matthew Brost <matthew.brost@intel.com> Link: https://patch.msgid.link/20261013152417.3189567-6-satyanarayana.k.v.p@intel.com
29 hoursdrm/xe/guc: Add dump_cache to optimize GuC CT/Log compression flowAlan Previn
During xe_devcoredump preparation, __xe_devcoredump_read is invoked multiple times, the first time just to get the output size. We should avoid time and energy waste of recompressing the GuC-log-event buffer and GuC-CT buffers repeatedly. Thus, add a dump_cache structure into GuC CT and log snapshot structures to attempt and store a first pass at compressing these buffers for reuse on subsequent calls to __xe_devcoredump_read. Also, ensure any failure of the first compression attempt will still fallback to store the raw dump without compression which is also required when CONFIG_DRM_XE_COMPRESS_DUMP is not enabled. Signed-off-by: Alan Previn <alan.previn.teres.alexis@intel.com> Assisted-by: LLM Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> Link: https://patch.msgid.link/20261013222846.308259-8-alan.previn.teres.alexis@intel.com Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
29 hoursdrm/xe/guc: Compress GuC log and CTB dump with zstdZhanjun Dong
With default settings, GuC log is 8MB in size and dumping the log is time-consuming. In debugging scenarios, dump-to-dmesg suffers truncation loss because CI's size limit is 2MB. Additionally, if also forwarded to serial console, it takes several minutes. In use-case of continuous error+log collection over extended period, we pressure CI's allocated storage. Thus, compress the GuC log data dump to address these issues and multiply any benefits from a future upgrade in CI's size limits. Replace the raw ascii85 dumps of GuC log snapshots with a zstd-compressed ascii85 stream and reuse the same helper for CTB snapshot output. Use zstd streaming with the default compression level of 3 and an estimated source size of 0 so the compression workspace stays bounded even for multi-megabyte logs. Add a new Kconfig option DRM_XE_COMPRESS_DUMP to control whether GuC log and CTB dumps are compressed with ZSTD. This allows users to choose between reduced dump sizes and lower memory usage. Signed-off-by: Zhanjun Dong <zhanjun.dong@intel.com> Signed-off-by: Alan Previn <alan.previn.teres.alexis@intel.com> Acked-by: José Roberto de Souza <jose.souza@intel.com> Acked-by: Rodrigo Vivi <rodrigo.vivi@intel.com> Reviewed-by: Julia Filipchuk <julia.filipchuk@intel.com> Link: https://patch.msgid.link/20261013222846.308259-7-alan.previn.teres.alexis@intel.com Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
29 hoursdrm/xe: Remove extra newlines from LRC snapshot dumpZhanjun Dong
The LRC snapshot printer adds an extra newline before the replay offset and replay length lines. This leaves blank lines in the HWCTX section of the dump. Remove the stray newlines so the snapshot output remains compact and consistently formatted. Signed-off-by: Zhanjun Dong <zhanjun.dong@intel.com> Signed-off-by: Alan Previn <alan.previn.teres.alexis@intel.com> Acked-by: José Roberto de Souza <jose.souza@intel.com> Reviewed-by: Julia Filipchuk <julia.filipchuk@intel.com> Link: https://patch.msgid.link/20261013222846.308259-6-alan.previn.teres.alexis@intel.com Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
31 hoursdrm/xe/vram: Report VRAM errors using structured xe_log APIDnyaneshwar Bhadane
Replace few drm_err()/drm_info() with xe_log_err_fatal()/xe_log_info() using the VRAM component tag. The "no CPU visible VRAM" error uses tile or device as the log location depending on the caller context. While at it, print the u64 total VRAM size with %#llx instead of %pa. %pa expects a phys_addr_t, which is only 32 bits wide on configs without CONFIG_PHYS_ADDR_T_64BIT, so the value could be truncated. Signed-off-by: Dnyaneshwar Bhadane <dnyaneshwar.bhadane@intel.com> Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com> Link: https://patch.msgid.link/20261012122522.2307625-13-dnyaneshwar.bhadane@intel.com Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
31 hoursdrm/xe/vram: Report tile vs device VRAM visibility errorsDnyaneshwar Bhadane
Derive the owning tile of a struct xe_vram_region inside vram_region_init() from vram->id, so the "no CPU visible VRAM" error can distinguish a per-tile region from the device-wide region without changing the function's signature. Signed-off-by: Dnyaneshwar Bhadane <dnyaneshwar.bhadane@intel.com> Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com> Link: https://patch.msgid.link/20261012122522.2307625-12-dnyaneshwar.bhadane@intel.com Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
31 hoursdrm/xe/lmtt: Report invalidation errors using structured xe_log APIDnyaneshwar Bhadane
Replace xe_tile_sriov_err() with xe_log_err() using the LMTT component tag for LMTT and MERT invalidation failures, preserving the SR-IOV prefix in the log message. Signed-off-by: Dnyaneshwar Bhadane <dnyaneshwar.bhadane@intel.com> Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com> Link: https://patch.msgid.link/20261012122522.2307625-11-dnyaneshwar.bhadane@intel.com Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
31 hoursdrm/xe/pci: Report unknown GMDID versions using structured xe_log APIDnyaneshwar Bhadane
Replace drm_err() with xe_log_err() using the REGS component tag when hardware reports unrecognized graphics or media IP versions during GMDID handling. Signed-off-by: Dnyaneshwar Bhadane <dnyaneshwar.bhadane@intel.com> Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com> Link: https://patch.msgid.link/20261012122522.2307625-10-dnyaneshwar.bhadane@intel.com Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
31 hoursdrm/xe/pat: Report missing PAT table using structured xe_log APIDnyaneshwar Bhadane
Replace drm_err() with xe_log_err() using the PAT component tag when a platform has no matching PAT table entry. Signed-off-by: Dnyaneshwar Bhadane <dnyaneshwar.bhadane@intel.com> Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com> Link: https://patch.msgid.link/20261012122522.2307625-9-dnyaneshwar.bhadane@intel.com Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
31 hoursdrm/xe/pat: Return error from xe_pat_init_early() on unknown platformDnyaneshwar Bhadane
xe_pat_init_early() currently only logs an error when the platform's graphics version doesn't match any known PAT table, but continues probing with an uninitialized pat.ops. This can lead to a NULL pointer dereference later when pat.ops is used. Change xe_pat_init_early() to return an int and propagate -ENODATA to xe_device_probe() so the driver fails to load cleanly instead of continuing in a broken state. Fixes: 152d7f2db978 ("drm/xe/pat: Handle unicast vs MCR PAT registers") Signed-off-by: Dnyaneshwar Bhadane <dnyaneshwar.bhadane@intel.com> Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com> Link: https://patch.msgid.link/20261012122522.2307625-8-dnyaneshwar.bhadane@intel.com Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
31 hoursdrm/xe/reg_sr: Report save-restore errors using structured xe_log APIDnyaneshwar Bhadane
Replace xe_gt_notice() and xe_gt_err() calls with xe_log_info() and xe_log_err() using the RTP and REGS component tags for register save-restore operations. Signed-off-by: Dnyaneshwar Bhadane <dnyaneshwar.bhadane@intel.com> Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com> Link: https://patch.msgid.link/20261012122522.2307625-7-dnyaneshwar.bhadane@intel.com Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
31 hoursdrm/xe/memirq: Report errors using structured xe_log APIDnyaneshwar Bhadane
Replace memirq_err() calls with xe_log_err() using the MEMIRQ component tag for memory-based IRQ failures v2: - No need to log ERR_PTR(err) explicitly (Mallesh) - Using tile instead of xe for more local log location(sashiko bot) Signed-off-by: Dnyaneshwar Bhadane <dnyaneshwar.bhadane@intel.com> Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com> Link: https://patch.msgid.link/20261012122522.2307625-6-dnyaneshwar.bhadane@intel.com Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
31 hoursdrm/xe/mmio: Report BAR mapping errors using structured xe_log APIDnyaneshwar Bhadane
Replace xe_err() calls with xe_log_err_fatal() using the REGS component tag for MMIO BAR probe failures Signed-off-by: Dnyaneshwar Bhadane <dnyaneshwar.bhadane@intel.com> Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com> Link: https://patch.msgid.link/20261012122522.2307625-5-dnyaneshwar.bhadane@intel.com Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
31 hoursdrm/xe/hwmon: Report errors using structured xe_log APIDnyaneshwar Bhadane
Replace drm_err() calls with xe_log_err() using the HWMON component tag to enable structured error reporting with SIGID for hardware monitor failures: Signed-off-by: Dnyaneshwar Bhadane <dnyaneshwar.bhadane@intel.com> Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com> Link: https://patch.msgid.link/20261012122522.2307625-4-dnyaneshwar.bhadane@intel.com Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
31 hoursdrm/xe/ggtt: Report GGTT errors using structured loggingDnyaneshwar Bhadane
Replace xe_tile_err() calls with xe_log_err_fatal() using the GGTT component tag in GGTT initialization error paths. Signed-off-by: Dnyaneshwar Bhadane <dnyaneshwar.bhadane@intel.com> Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com> Link: https://patch.msgid.link/20261012122522.2307625-3-dnyaneshwar.bhadane@intel.com Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
31 hoursdrm/xe/log: Add VRAM, PAT, and HWMON DRIVER_HARDWARE componentsDnyaneshwar Bhadane
Register new DRIVER_HARDWARE log components for hardware I/O subsystems that currently lack structured error reporting: - VRAM (ID 6): Video RAM/Local Memory access and BAR visibility errors - PAT (ID 7): Page Attribute Table programming errors - HWMON (ID 8): Hardware monitor registration and sensor errors All three use IO_BUS as their default SIGID since they interact with hardware through MMIO or PCode register paths. Signed-off-by: Dnyaneshwar Bhadane <dnyaneshwar.bhadane@intel.com> Reviewed-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com> Link: https://patch.msgid.link/20261012122522.2307625-2-dnyaneshwar.bhadane@intel.com Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
2 daysdrm/xe/uc: Add missing HuC firmware entry for Alderlake-NKumar, Sachin
ALDERLAKE_N is listed in XE_GUC_FIRMWARE_DEFS but was missing from XE_HUC_FIRMWARE_DEFS, so uc_fw_auto_select() never finds a HuC blob for this platform. xe_huc_init() then silently treats HuC as XE_UC_FIRMWARE_NOT_SUPPORTED and returns early with no log output, so the gap is invisible in dmesg. Media encode that depend on HuC (e.g. VP9 VDEnc BRC/header probability update) assume HuC is available and still program HuC-dependent HCP/VDEnc commands for the VDBOX engine. With HuC firmware never loaded/authenticated, the first such command stalls the only VCS engine on this single-VDBOX GT1 part, which shows up as: xe 0000:00:02.0: [drm] Tile0: GT0: Engine memory CAT error: class=vcs ... xe 0000:00:02.0: [drm] *ERROR* Tile0: GT0: GuC engine reset request failed reproducing on every run, on the very first VP9 keyframe, at both 1080p and 4K. H264 encode is unaffected since this driver's AVC VDEnc path does not depend on HuC. ADL-P/ADL-S/RKL/TGL are unaffected since they already have a HuC table entry. Note i915 never hit this: i915 has no distinct ALDERLAKE_N platform at the GT/firmware level (ADL-N is only a display subplatform of ALDERLAKE_P there), so it inherits TIGERLAKE's HuC blob automatically. xe gives ALDERLAKE_N its own top-level platform enum, so it needs its own explicit table row. Fix by adding ALDERLAKE_N to XE_HUC_FIRMWARE_DEFS, reusing the same "tgl" HuC blob already used by ALDERLAKE_P/ALDERLAKE_S/ROCKETLAKE/ TIGERLAKE, which share the identical Gen12/TGL-LP media IP block. Signed-off-by: Kumar, Sachin <sachin.kumar@intel.com> Reviewed-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com> Link: https://patch.msgid.link/20261005081549.1594153-1-sachin.kumar@intel.com Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
2 daysdrm/xe: Bump LRU for external objects on exec and rebindThomas Hellström
The VM's private BOs get their LRU position refreshed in bulk via ttm_lru_bulk_move_tail() on vm->lru_bulk_move, both after a successful non-LR exec and after the LR preempt-fence rebind worker runs. External objects (BOs potentially shared across VMs) are never added to that per-VM bulk move list, so their LRU position is never refreshed by either path. This makes external objects in active use look more evictable than they are. Add xe_vm_bump_lru(), which, under a single lru_lock critical section, performs the bulk move of the VM's private BOs and bumps each external object locked by the drm_exec transaction. Use it from both the non-LR exec path and the LR rebind worker, replacing the open-coded bulk move. Fixes: d490ecf57790 ("drm/xe: Rework xe_exec and the VM rebind worker to use the drm_exec helper") Cc: Matthew Auld <matthew.auld@intel.com> Cc: Matthew Brost <matthew.brost@intel.com> Cc: <stable@vger.kernel.org> # v6.8+ Assisted-by: LLM Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com> Reviewed-by: Matthew Brost <matthew.brost@intel.com> Reviewed-by: Matthew Auld <matthew.auld@intel.com> Link: https://patch.msgid.link/20261012132607.21387-1-thomas.hellstrom@linux.intel.com
3 daysdrm/xe/oa: Zero OA buffer at allocationBommu Krishnaiah
ttm_bo_type_kernel BOs are not guaranteed to be zeroed on allocation and may contain data from previously freed pages. Since the OA buffer is mmap'able by userspace, this can expose stale kernel memory contents. Streams opened with DRM_XE_OA_PROPERTY_OA_DISABLED allocate the OA buffer without calling xe_oa_init_oa_buffer(). Zero the buffer at allocation to prevent information disclosure through mmap. The existing zeroing in xe_oa_init_oa_buffer() remains necessary for zero report-id/timestamp detection on enable/re-enable. Fixes: 392bf22238ff ("drm/xe/oa/uapi: OA buffer mmap") Assisted-by: LLM Cc: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com> Cc: Ghimiray, Himal Prasad <himal.prasad.ghimiray@intel.com> Signed-off-by: Bommu Krishnaiah <krishnaiah.bommu@intel.com> Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com> Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com> Reviewed-by: Tejas Upadhyay <tejas.upadhyay@intel.com> Link: https://patch.msgid.link/20261006020314.2711762-1-krishnaiah.bommu@intel.com Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
3 daysdrm/xe/tests: add regression for eviction of a BO with no resourceNiranjana Vishwanathapura
Exercise the xe_evict_flags() NULL-resource path: import a dma-buf, gut the importer to an empty placement so it drops its resource, then drive the real xe_dma_buf_move_notify() -> xe_bo_evict() path and verify it no longer faults. Assisted-by: GitHub-Copilot:claude-opus-4.8 Signed-off-by: Niranjana Vishwanathapura <niranjana.vishwanathapura@intel.com> Reviewed-by: Maarten Lankhorst <dev@lankhorst.se> Link: https://patch.msgid.link/20261012215014.1495677-6-niranjana.vishwanathapura@intel.com
3 daysdrm/xe: skip eviction of a BO with no resourceNiranjana Vishwanathapura
xe_evict_flags() switches on tbo->resource->mem_type to choose an eviction placement. An xe BO can reach eviction with no ttm.resource, e.g. an imported dma-buf BO whose resource was freed during teardown while its attachment is still live: the exporter then invalidates it via xe_dma_buf_move_notify() -> xe_bo_evict(), and the switch dereferences a NULL resource and faults. A BO with no resource has nothing placed or mapped, so there is nothing to evict. Return an empty placement (num_placement = 0), mirroring the handling already used for non-xe scatter-gather BOs just above; ttm_bo_validate() then takes the pipeline-gutting path and returns 0. Without the fix the xe_dma_buf@xe_test_dmabuf_move_notify_no_resource dynamic live selftest will fail with below stack. BUG: kernel NULL pointer dereference, address: 0000000000000010 RIP: 0010:xe_evict_flags+0xf4/0x140 [xe] Call Trace: <TASK> xe_bo_evict+0x40/0xa0 [xe] ? ttm_bo_pipeline_gutting+0x71/0x180 [ttm] xe_test_dmabuf_move_notify_no_resource+0x182/0x440 [xe] xe_dma_buf_kunit+0x387/0x580 [xe] v2: Add Fixes tag and failure info in commit text (Matt Brost) Fixes: dd08ebf6c352 ("drm/xe: Introduce a new DRM driver for Intel GPUs") Assisted-by: GitHub-Copilot:claude-opus-4.8 Signed-off-by: Niranjana Vishwanathapura <niranjana.vishwanathapura@intel.com> Reviewed-by: Tejas Upadhyay <tejas.upadhyay@intel.com> Link: https://patch.msgid.link/20261012215014.1495677-5-niranjana.vishwanathapura@intel.com
3 daysdrm/xe/log: fix documentation title levelsGuillaume Tucker
Fix an htmldocs build error in the gpu/xe section by moving all the titles one level higher in the Xe SIGID page to keep a consistent hierarchy. This is the error message: Documentation/gpu/xe/xe_sigid.rst:10: (SEVERE/4) Title level inconsistent: All the other pages in the xe section use <h2> titles so follow the same convention here as well. Signed-off-by: Guillaume Tucker <gtucker@gtucker.io> Link: https://patch.msgid.link/2320050536ca29afe69ecd163eb974a40df571fc.1791740369.git.gtucker@gtucker.io Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
3 daysdrm/xe/ras: Fix sysctrl and drm-ras discrepancyRaag Jadav
There are cases where a reported error is valid for sysctrl but it's not exposed as a valid uapi through drm-ras. We allow such error to be logged but it's redundant to try to send an error-event for it. Early return such cases and prevent misleading drm-ras error-event failures. Fixes: 6a9493e47075 ("drm/xe/xe_ras: Report correctable/uncorrectable error events to userspace") Signed-off-by: Raag Jadav <raag.jadav@intel.com> Reviewed-by: Riana Tauro <riana.tauro@intel.com> Link: https://patch.msgid.link/20261012101712.125146-1-raag.jadav@intel.com Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
6 daysdrm/xe/sysctrl: Add mailbox control state to error messagesAnoop Vijay
Include decoded mailbox control register information in mailbox busy, timeout and firmware error paths to provide additional context for failure debugging Signed-off-by: Anoop Vijay <anoop.c.vijay@intel.com> Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com> Link: https://patch.msgid.link/20261009064754.3927132-2-anoop.c.vijay@intel.com Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
6 daysdrm/xe: Don't transfer shrinker pages for pinned bos on purgeable state changeThomas Hellström
Pinned bos have their pages removed from the shrinker's shrinkable / purgeable counts on pin, and added back on unpin according to the bo's purgeable state at that time. However, xe_bo_set_purgeable_shrinker() unconditionally transfers pages between the shrinkable and purgeable counts. If the purgeable state of a pinned bo changes, for example by userspace madvising DONTNEED on a VMA of a bo that is also pinned as a scanout buffer, this underflows one count and, after unpin, leaves the other one permanently inflated. Only update the purgeable flag for pinned bos, and leave the page accounting to unpin. Fixes: 536a2ead3a8f ("drm/xe/bo: Add purgeable shrinker state helpers") Cc: Arvind Yadav <arvind.yadav@intel.com> Cc: Matthew Brost <matthew.brost@intel.com> Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com> Cc: Matthew Auld <matthew.auld@intel.com> Cc: intel-xe@lists.freedesktop.org Cc: <stable@vger.kernel.org> # v7.1+ Assisted-by: LLM Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com> Reviewed-by: Matthew Auld <matthew.auld@intel.com> Link: https://patch.msgid.link/20261009070053.7790-1-thomas.hellstrom@linux.intel.com
7 daysMerge tag 'drm-intel-next-2026-10-02' of ↵Dave Airlie
https://gitlab.freedesktop.org/drm/i915/kernel into drm-next [airlied: add xe fixup] - Vswing / Pre-emphasis Override (Michal) - Enable AS SDP Skip Frames (Uma) - Handle negative configuration index on DP link caps for robustness (Luca) - Perform full wedge on display reset (Ville) - PSR related revert and fix (Nemesa) - Preparation for enabling SDR plane color pipeline (Chaitanya, Pranay) - An eDP quirk for HP Pavilion Plus (Ankit) - DP MST fixes (Imre) - General display fixes and small improvements (Jani, Lalit, Vinod, Sebastian) - Introduce PME (Power Management Event) support on display hotplug (Vinod) - Force eDP sink awake on dpcd init (Arun) - Stop using the configurable fence timeout and other cleanups (Jani) - Add support for Common SDP Transmission Line (Ankit, Arun) - Map AUX power domains to DC_off (Suraj) - Handle VSC SDP revision 7 in unpack (Juasheem) - Disable VRR DC balance by default (Mitul) - Switch to modern drm_dp_dpcd* accessors (Jani) - Lg DPCD access errors (Suraj) - Fixes to make i915 work well with PREEMPT_RT (Maarten, Sebastian) - Update the CMN_SDP_TL in fastset path (Ankit) - Use a shared gtt_view_types.h header (Jani) Signed-off-by: Dave Airlie <airlied@redhat.com> From: Rodrigo Vivi <rodrigo.vivi@intel.com> Link: https://patch.msgid.link/asAD6RRGxlbIPdhz@intel.com
7 daysdrm/xe/nvm: define survivability partitionAlexander Usyskin
Define 8M survivability partition for CRI when storage is open for write override. Signed-off-by: Alexander Usyskin <alexander.usyskin@intel.com> Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> Link: https://patch.msgid.link/20260930-cri_surviv-v3-2-357aeed5fc60@intel.com Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
8 daysdrm/xe/i2c: cancel the client work on removeFan Wu
xe_i2c_notifier() stores the DesignWare adapter in i2c->adapter and schedules i2c->work when the adapter is registered under the xe I2C platform device, and xe_i2c_client_work() then instantiates the AMC client device on that adapter. xe_i2c_remove() tears down the AMC, unregisters the client devices, the bus notifier and the adapter platform device, but it never drains i2c->work. A work item that is still queued or running when the adapter is unregistered dereferences i2c->adapter in i2c_new_client_device() after platform_device_unregister() has released the adapter. The work item is also embedded in the devm-allocated struct xe_i2c, so a work item still queued after the drm device devm unwind frees that allocation runs its callback on freed memory. The bus notifier is the only thing that schedules this work, and it is unregistered after the client devices. An instance that is still queued when the teardown runs can therefore write i2c->client[XE_I2C_CLIENT_AMC] while the loop is unregistering and clearing the same array, and an AMC client it instantiates late is only cleaned up by the adapter's own child sweep in i2c_del_adapter(). Move bus_unregister_notifier() in front of the client teardown loop and cancel the work right after it, so no new instance can be scheduled and a queued instance is drained before the client array is touched. A running instance still finds a live adapter, since the adapter is unregistered later. Fixes: f0e53aadd702 ("drm/xe: Support for I2C attached MCUs") Link: https://lore.kernel.org/intel-xe/20260912085932.101598-1-fanwu01@zju.edu.cn/ Cc: stable@vger.kernel.org Assisted-by: LLM, in-house static analysis tool Co-developed-by: Song Li <songl@zju.edu.cn> Signed-off-by: Song Li <songl@zju.edu.cn> Signed-off-by: Fan Wu <fanwu01@zju.edu.cn> Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Link: https://patch.msgid.link/20260928013030.612592-1-fanwu01@zju.edu.cn Link: https://patch.msgid.link/20261006000413.318561-2-rodrigo.vivi@intel.com Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com> (cherry picked from commit a23f27d5ec11c3f418c5e5531eea34ccda2b5b20) Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
9 daysdrm/xe: Keep VRAM fault injection within the usable rangeTejas Upadhyay
xe_ttm_vram_inject_fault() picked its starting address from vr->actual_physical_size, which includes the CCS/GSM/DSM infrastructure zone beyond vr->usable_size. The buddy allocator (vram_mgr->mm) only manages usable_size, so the first probed address can land in that infra zone; xe_ttm_vram_addr_to_region() then returns NULL for it and xe_ttm_vram_handle_addr_fault() requests an SBR instead of exercising page offlining. Start the probe at usable_size - PAGE_SIZE and stay within usable_size so the injected fault always lands on real, buddy-managed VRAM. Fixes: 6ef3eb10aea4 ("drm/xe: Add fault-inject based VRAM page offline injection") Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com> Link: https://patch.msgid.link/20261006124125.1560295-10-tejas.upadhyay@intel.com Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
9 daysdrm/xe: Drop RCU list handling for VRAM bad-page tracking, use mgr->lockTejas Upadhyay
queued_pages and offlined_pages were mutated with list_add_rcu()/ list_del_rcu()/kfree_rcu(), but the only lockless consumer was the vram_bad_pages debugfs show function. Every other reader and writer already runs under mgr->lock, so the RCU protection bought nothing but complexity and a rcu_head field on every tracked entry. Convert all list operations to plain list_add()/list_del()/kfree(), including the retry helper added by the ghost-ownership fix, and have vram_bad_pages_show() take mgr->lock instead of rcu_read_lock() so list traversal is always serialized against mutation. Fixes: 7737f819e9f1 ("drm/xe/vram: Add VRAM page offline fault handler") Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com> Link: https://patch.msgid.link/20261006124125.1560295-9-tejas.upadhyay@intel.com Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
9 daysdrm/xe: Re-validate external pin under resv lock before VRAM purgeTejas Upadhyay
xe_ttm_vram_reserve_page_at_addr() checks xe_bo_is_user() && xe_bo_is_pinned() while holding only mgr->lock, not the BO's reservation lock, since it must run before the owning BO is even known to be purgeable. A user BO can become pinned after that check passes but before xe_ttm_vram_purge_page() runs. xe_ttm_vram_purge_page() takes the reservation lock but only rechecks xe_bo_is_pinned(), not xe_bo_is_user(). If the race is hit, it calls xe_bo_unpin() (the kernel-BO unpin path, not xe_bo_unpin_external())on an externally pinned BO and then purges its backing store while userspace/hardware still expects it to be resident. Recheck xe_bo_is_user() && xe_bo_is_pinned() under the reservation lock and reject the purge, requesting SBR with -EIO the same way the caller's own critical-BO check already does. Fixes: 7737f819e9f1 ("drm/xe/vram: Add VRAM page offline fault handler") Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com> Link: https://patch.msgid.link/20261006124125.1560295-8-tejas.upadhyay@intel.com Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
9 daysdrm/xe: Clean up kernel-doc typos in VRAM managerTejas Upadhyay
Fix grammatical errors and misspelled hardware probing definitions within the TTM VRAM manager structures. Reviewed-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com> Link: https://patch.msgid.link/20261006124125.1560295-7-tejas.upadhyay@intel.com Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
9 daysdrm/xe/i2c: cancel the client work on removeFan Wu
xe_i2c_notifier() stores the DesignWare adapter in i2c->adapter and schedules i2c->work when the adapter is registered under the xe I2C platform device, and xe_i2c_client_work() then instantiates the AMC client device on that adapter. xe_i2c_remove() tears down the AMC, unregisters the client devices, the bus notifier and the adapter platform device, but it never drains i2c->work. A work item that is still queued or running when the adapter is unregistered dereferences i2c->adapter in i2c_new_client_device() after platform_device_unregister() has released the adapter. The work item is also embedded in the devm-allocated struct xe_i2c, so a work item still queued after the drm device devm unwind frees that allocation runs its callback on freed memory. The bus notifier is the only thing that schedules this work, and it is unregistered after the client devices. An instance that is still queued when the teardown runs can therefore write i2c->client[XE_I2C_CLIENT_AMC] while the loop is unregistering and clearing the same array, and an AMC client it instantiates late is only cleaned up by the adapter's own child sweep in i2c_del_adapter(). Move bus_unregister_notifier() in front of the client teardown loop and cancel the work right after it, so no new instance can be scheduled and a queued instance is drained before the client array is touched. A running instance still finds a live adapter, since the adapter is unregistered later. Fixes: f0e53aadd702 ("drm/xe: Support for I2C attached MCUs") Link: https://lore.kernel.org/intel-xe/20260912085932.101598-1-fanwu01@zju.edu.cn/ Cc: stable@vger.kernel.org Assisted-by: LLM, in-house static analysis tool Co-developed-by: Song Li <songl@zju.edu.cn> Signed-off-by: Song Li <songl@zju.edu.cn> Signed-off-by: Fan Wu <fanwu01@zju.edu.cn> Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Link: https://patch.msgid.link/20260928013030.612592-1-fanwu01@zju.edu.cn Link: https://patch.msgid.link/20261006000413.318561-2-rodrigo.vivi@intel.com Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
9 daysdrm/xe/sysctrl: Fix mailbox header handlingMallesh Koujalagi
The mailbox header was defined as __le32, which required cpu_to_le32() and le32_to_cpu() conversions whenever it was write or read. These conversions are unnecessary because the header is always handled as a 32-bit value, not as raw bytes. It is written with xe_mmio_write32() and read with xe_mmio_read32(), which already handle any required byte-order conversion through the underlying writel()/readl() accessors. As a result, the header value is already in CPU byte order when used by the driver. Keeping the extra conversions had no effect on little-endian systems and could cause an incorrect on big-endian systems. So use u32 for the mailbox header and remove the unnecessary endianness conversions. Fixes: 1f95f618182b ("drm/xe/xe_sysctrl: Add System Controller mailbox communication support") Suggested-by: Michal Wajdeczko <michal.wajdeczko@intel.com> Signed-off-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com> Tested-by: Anoop Vijay <anoop.c.vijay@intel.com> Reviewed-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com> Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com> Link: https://patch.msgid.link/20260924060900.146167-18-mallesh.koujalagi@intel.com (cherry picked from commit 5137b391599579371c32f555958d3cf55e19bd88) Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
10 daysdrm/xe: Don't allow XE_VALIDATION_UNIMPLEMENTED outside of debug buildsThomas Hellström
The XE_VALIDATION_UNIMPLEMENTED macro is only intended for convenience use during development. It is not allowed in production builds. Ensure that by conditioning it on CONFIG_DRM_XE_DEBUG. Cc: Matthew Auld <matthew.auld@intel.com> Cc: Matthew Brost <matthew.brost@intel.com> Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com> Reviewed-by: Matthew Auld <matthew.auld@intel.com> Link: https://patch.msgid.link/20261005135135.161447-1-thomas.hellstrom@linux.intel.com
10 daysdrm/xe/sysctrl: Report 'System Controller event' error using SIGIDMallesh Koujalagi
Report 'System Controller event' error using xe_log() helpers. Signed-off-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com> Reviewed-by: Michal Wajdeczko <michal.wajdeczko@intel.com> Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com> Link: https://patch.msgid.link/20260924060900.146167-22-mallesh.koujalagi@intel.com
10 daysdrm/xe/sysctrl: Log group and command ID on mailbox failureMallesh Koujalagi
Include the mailbox group ID and command code in error logs for command preparation and execution failures. Signed-off-by: Mallesh Koujalagi <mallesh.koujalagi@intel.com> Reviewed-by: Michal Wajdeczko <michal.wajdeczko@intel.com> Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com> Link: https://patch.msgid.link/20260924060900.146167-21-mallesh.koujalagi@intel.com