Skip to content

Commit 971c2b6

Browse files
committed
Merge tag 'drm-xe-next-2026-01-15' of https://gitlab.freedesktop.org/drm/xe/kernel into drm-next
UAPI Changes: - Remove unused KEEP_ACTIVE flag in the new multi queue uAPI (Niranjana) - Expose new temperature attributes in HWMON (Karthik) Driver Changes: - Force i2c into polling mode when in survivability (Raag) - Validate preferred system memory placement in xe_svm_range_validate (Brost) - Adjust page count tracepoints in shrinker (Brost) - Fix a couple drm_pagemap issues with multi-GPU (Brost) - Define GuC firmware for NVL-S (Roper) - Handle GT resume failure (Raag) - Improve wedged mode handling (Lukasz) - Add missing newlines to drm_warn messages (Osama) - Fix WQ_MEM_RECLAIM passed as max_active to alloc_workqueue (Marco) - Page-reclaim fixes and PRL stats addition (Brian) - Fix struct guc_lfd_file_header kernel-doc (Jani) - Allow compressible surfaces to be 1-way coherent (Xin) - Fix DRM scheduler layering violations in Xe (Brost) - Minor improvements to MERT code (Michal) - Privatize struct xe_ggtt_node (Maarten) - Convert wait for lmem init into an assert (Bala) - Enable GSC loading and PXP for PTL (Daniele) - Replace use of system_wq with tlb_inval->timeout_wq (Marco) - VRAM addr range bit expansion (Fei) - Cleanup unused header includes (Roper) Signed-off-by: Dave Airlie <airlied@redhat.com> From: Rodrigo Vivi <rodrigo.vivi@intel.com> Link: https://patch.msgid.link/aWkSxRQK7VhTlP32@intel.com
2 parents 9d10cd5 + 8367585 commit 971c2b6

134 files changed

Lines changed: 1391 additions & 973 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Documentation/ABI/testing/sysfs-driver-intel-xe-hwmon

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,22 @@ Description: RO. Package current voltage in millivolt.
109109

110110
Only supported for particular Intel Xe graphics platforms.
111111

112+
What: /sys/bus/pci/drivers/xe/.../hwmon/hwmon<i>/temp2_crit
113+
Date: January 2026
114+
KernelVersion: 7.0
115+
Contact: intel-xe@lists.freedesktop.org
116+
Description: RO. Package critical temperature in millidegree Celsius.
117+
118+
Only supported for particular Intel Xe graphics platforms.
119+
120+
What: /sys/bus/pci/drivers/xe/.../hwmon/hwmon<i>/temp2_emergency
121+
Date: January 2026
122+
KernelVersion: 7.0
123+
Contact: intel-xe@lists.freedesktop.org
124+
Description: RO. Package shutdown temperature in millidegree Celsius.
125+
126+
Only supported for particular Intel Xe graphics platforms.
127+
112128
What: /sys/bus/pci/drivers/xe/.../hwmon/hwmon<i>/temp2_input
113129
Date: March 2025
114130
KernelVersion: 6.15
@@ -117,6 +133,30 @@ Description: RO. Package temperature in millidegree Celsius.
117133

118134
Only supported for particular Intel Xe graphics platforms.
119135

136+
What: /sys/bus/pci/drivers/xe/.../hwmon/hwmon<i>/temp2_max
137+
Date: January 2026
138+
KernelVersion: 7.0
139+
Contact: intel-xe@lists.freedesktop.org
140+
Description: RO. Package maximum temperature limit in millidegree Celsius.
141+
142+
Only supported for particular Intel Xe graphics platforms.
143+
144+
What: /sys/bus/pci/drivers/xe/.../hwmon/hwmon<i>/temp3_crit
145+
Date: January 2026
146+
KernelVersion: 7.0
147+
Contact: intel-xe@lists.freedesktop.org
148+
Description: RO. VRAM critical temperature in millidegree Celsius.
149+
150+
Only supported for particular Intel Xe graphics platforms.
151+
152+
What: /sys/bus/pci/drivers/xe/.../hwmon/hwmon<i>/temp3_emergency
153+
Date: January 2026
154+
KernelVersion: 7.0
155+
Contact: intel-xe@lists.freedesktop.org
156+
Description: RO. VRAM shutdown temperature in millidegree Celsius.
157+
158+
Only supported for particular Intel Xe graphics platforms.
159+
120160
What: /sys/bus/pci/drivers/xe/.../hwmon/hwmon<i>/temp3_input
121161
Date: March 2025
122162
KernelVersion: 6.15
@@ -125,6 +165,76 @@ Description: RO. VRAM temperature in millidegree Celsius.
125165

126166
Only supported for particular Intel Xe graphics platforms.
127167

168+
What: /sys/bus/pci/drivers/xe/.../hwmon/hwmon<i>/temp4_crit
169+
Date: January 2026
170+
KernelVersion: 7.0
171+
Contact: intel-xe@lists.freedesktop.org
172+
Description: RO. Memory controller critical temperature in millidegree Celsius.
173+
174+
Only supported for particular Intel Xe graphics platforms.
175+
176+
What: /sys/bus/pci/drivers/xe/.../hwmon/hwmon<i>/temp4_emergency
177+
Date: January 2026
178+
KernelVersion: 7.0
179+
Contact: intel-xe@lists.freedesktop.org
180+
Description: RO. Memory controller shutdown temperature in millidegree Celsius.
181+
182+
Only supported for particular Intel Xe graphics platforms.
183+
184+
What: /sys/bus/pci/drivers/xe/.../hwmon/hwmon<i>/temp4_input
185+
Date: January 2026
186+
KernelVersion: 7.0
187+
Contact: intel-xe@lists.freedesktop.org
188+
Description: RO. Memory controller average temperature in millidegree Celsius.
189+
190+
Only supported for particular Intel Xe graphics platforms.
191+
192+
What: /sys/bus/pci/drivers/xe/.../hwmon/hwmon<i>/temp5_crit
193+
Date: January 2026
194+
KernelVersion: 7.0
195+
Contact: intel-xe@lists.freedesktop.org
196+
Description: RO. GPU PCIe critical temperature in millidegree Celsius.
197+
198+
Only supported for particular Intel Xe graphics platforms.
199+
200+
What: /sys/bus/pci/drivers/xe/.../hwmon/hwmon<i>/temp5_emergency
201+
Date: January 2026
202+
KernelVersion: 7.0
203+
Contact: intel-xe@lists.freedesktop.org
204+
Description: RO. GPU PCIe shutdown temperature in millidegree Celsius.
205+
206+
Only supported for particular Intel Xe graphics platforms.
207+
208+
What: /sys/bus/pci/drivers/xe/.../hwmon/hwmon<i>/temp5_input
209+
Date: January 2026
210+
KernelVersion: 7.0
211+
Contact: intel-xe@lists.freedesktop.org
212+
Description: RO. GPU PCIe temperature in millidegree Celsius.
213+
214+
What: /sys/bus/pci/drivers/xe/.../hwmon/hwmon<i>/temp[6-21]_crit
215+
Date: January 2026
216+
KernelVersion: 7.0
217+
Contact: intel-xe@lists.freedesktop.org
218+
Description: RO. VRAM channel critical temperature in millidegree Celsius.
219+
220+
Only supported for particular Intel Xe graphics platforms.
221+
222+
What: /sys/bus/pci/drivers/xe/.../hwmon/hwmon<i>/temp[6-21]_emergency
223+
Date: January 2026
224+
KernelVersion: 7.0
225+
Contact: intel-xe@lists.freedesktop.org
226+
Description: RO. VRAM channel shutdown temperature in millidegree Celsius.
227+
228+
Only supported for particular Intel Xe graphics platforms.
229+
230+
What: /sys/bus/pci/drivers/xe/.../hwmon/hwmon<i>/temp[6-21]_input
231+
Date: January 2026
232+
KernelVersion: 7.0
233+
Contact: intel-xe@lists.freedesktop.org
234+
Description: RO. VRAM channel temperature in millidegree Celsius.
235+
236+
Only supported for particular Intel Xe graphics platforms.
237+
128238
What: /sys/bus/pci/drivers/xe/.../hwmon/hwmon<i>/fan1_input
129239
Date: March 2025
130240
KernelVersion: 6.16

drivers/gpu/drm/drm_pagemap.c

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -480,8 +480,18 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation,
480480
.start = start,
481481
.end = end,
482482
.pgmap_owner = pagemap->owner,
483-
.flags = MIGRATE_VMA_SELECT_SYSTEM | MIGRATE_VMA_SELECT_DEVICE_COHERENT |
484-
MIGRATE_VMA_SELECT_DEVICE_PRIVATE,
483+
/*
484+
* FIXME: MIGRATE_VMA_SELECT_DEVICE_PRIVATE intermittently
485+
* causes 'xe_exec_system_allocator --r *race*no*' to trigger aa
486+
* engine reset and a hard hang due to getting stuck on a folio
487+
* lock. This should work and needs to be root-caused. The only
488+
* downside of not selecting MIGRATE_VMA_SELECT_DEVICE_PRIVATE
489+
* is that device-to-device migrations won’t work; instead,
490+
* memory will bounce through system memory. This path should be
491+
* rare and only occur when the madvise attributes of memory are
492+
* changed or atomics are being used.
493+
*/
494+
.flags = MIGRATE_VMA_SELECT_SYSTEM | MIGRATE_VMA_SELECT_DEVICE_COHERENT,
485495
};
486496
unsigned long i, npages = npages_in_range(start, end);
487497
unsigned long own_pages = 0, migrated_pages = 0;
@@ -582,7 +592,7 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation,
582592

583593
err = ops->populate_devmem_pfn(devmem_allocation, npages, migrate.dst);
584594
if (err)
585-
goto err_finalize;
595+
goto err_aborted_migration;
586596

587597
own_pages = 0;
588598

@@ -621,8 +631,10 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation,
621631
err = drm_pagemap_migrate_range(devmem_allocation, migrate.src, migrate.dst,
622632
pages, pagemap_addr, &last, &cur,
623633
mdetails);
624-
if (err)
634+
if (err) {
635+
npages = i + 1;
625636
goto err_finalize;
637+
}
626638
}
627639
cur.start = npages;
628640
cur.ops = NULL; /* Force migration */
@@ -646,7 +658,7 @@ int drm_pagemap_migrate_to_devmem(struct drm_pagemap_devmem *devmem_allocation,
646658
err_aborted_migration:
647659
migrate_vma_pages(&migrate);
648660

649-
for (i = 0; i < npages;) {
661+
for (i = 0; !err && i < npages;) {
650662
struct page *page = migrate_pfn_to_page(migrate.src[i]);
651663
unsigned long nr_pages = page ? NR_PAGES(folio_order(page_folio(page))) : 1;
652664

drivers/gpu/drm/xe/Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,8 @@ always-$(CONFIG_DRM_XE_WERROR) += \
370370
$(patsubst %.h,%.hdrtest, $(shell cd $(src) && find * -name '*.h' $(hdrtest_find_args)))
371371

372372
quiet_cmd_hdrtest = HDRTEST $(patsubst %.hdrtest,%.h,$@)
373-
cmd_hdrtest = $(CC) -DHDRTEST $(filter-out $(CFLAGS_GCOV), $(c_flags)) -S -o /dev/null -x c /dev/null -include $<; touch $@
373+
cmd_hdrtest = $(CC) $(filter-out $(CFLAGS_GCOV), $(c_flags)) -S -o /dev/null -x c /dev/null -include $< -include $<; \
374+
$(srctree)/scripts/kernel-doc -none -Werror $<; touch $@
374375

375376
$(obj)/%.hdrtest: $(src)/%.h FORCE
376377
$(call if_changed_dep,hdrtest)

drivers/gpu/drm/xe/abi/guc_lfd_abi.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ struct guc_lfd_data_os_info {
148148
} __packed;
149149

150150
/**
151-
* struct guc_logfile_header - Header of GuC Log Streaming-LFD-File Format.
151+
* struct guc_lfd_file_header - Header of GuC Log Streaming-LFD-File Format.
152152
* This structure encapsulates the layout of the guc-log-file format
153153
*/
154154
struct guc_lfd_file_header {
@@ -163,8 +163,7 @@ struct guc_lfd_file_header {
163163
#define GUC_LFD_FILE_HEADER_VERSION_MASK_MAJOR GENMASK(31, 16)
164164
#define GUC_LFD_FILE_HEADER_VERSION_MASK_MINOR GENMASK(15, 0)
165165

166-
/** @stream: A stream of one or more guc_lfd_data LFD blocks
167-
*/
166+
/** @stream: A stream of one or more guc_lfd_data LFD blocks */
168167
u32 stream[];
169168
} __packed;
170169

drivers/gpu/drm/xe/compat-i915-headers/i915_vma.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
#include <uapi/drm/i915_drm.h>
1010

11-
#include "xe_ggtt_types.h"
11+
#include "xe_ggtt.h"
1212

1313
#include <linux/refcount.h>
1414

@@ -30,7 +30,7 @@ struct i915_vma {
3030

3131
static inline u32 i915_ggtt_offset(const struct i915_vma *vma)
3232
{
33-
return vma->node->base.start;
33+
return xe_ggtt_node_addr(vma->node);
3434
}
3535

3636
#endif

drivers/gpu/drm/xe/display/xe_fb_pin.c

Lines changed: 52 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -171,20 +171,21 @@ static int __xe_pin_fb_vma_dpt(const struct intel_framebuffer *fb,
171171
}
172172

173173
static void
174-
write_ggtt_rotated(struct xe_bo *bo, struct xe_ggtt *ggtt, u32 *ggtt_ofs, u32 bo_ofs,
174+
write_ggtt_rotated(struct xe_ggtt *ggtt, u32 *ggtt_ofs,
175+
u64 pte_flags,
176+
xe_ggtt_set_pte_fn write_pte,
177+
struct xe_bo *bo, u32 bo_ofs,
175178
u32 width, u32 height, u32 src_stride, u32 dst_stride)
176179
{
177-
struct xe_device *xe = xe_bo_device(bo);
178180
u32 column, row;
179-
u64 pte = ggtt->pt_ops->pte_encode_flags(bo, xe->pat.idx[XE_CACHE_NONE]);
180181

181182
for (column = 0; column < width; column++) {
182183
u32 src_idx = src_stride * (height - 1) + column + bo_ofs;
183184

184185
for (row = 0; row < height; row++) {
185186
u64 addr = xe_bo_addr(bo, src_idx * XE_PAGE_SIZE, XE_PAGE_SIZE);
186187

187-
ggtt->pt_ops->ggtt_set_pte(ggtt, *ggtt_ofs, pte | addr);
188+
write_pte(ggtt, *ggtt_ofs, pte_flags | addr);
188189
*ggtt_ofs += XE_PAGE_SIZE;
189190
src_idx -= src_stride;
190191
}
@@ -194,6 +195,28 @@ write_ggtt_rotated(struct xe_bo *bo, struct xe_ggtt *ggtt, u32 *ggtt_ofs, u32 bo
194195
}
195196
}
196197

198+
struct fb_rotate_args {
199+
const struct i915_gtt_view *view;
200+
struct xe_bo *bo;
201+
};
202+
203+
static void write_ggtt_rotated_node(struct xe_ggtt *ggtt, struct xe_ggtt_node *node,
204+
u64 pte_flags, xe_ggtt_set_pte_fn write_pte, void *data)
205+
{
206+
struct fb_rotate_args *args = data;
207+
struct xe_bo *bo = args->bo;
208+
const struct intel_rotation_info *rot_info = &args->view->rotated;
209+
u32 ggtt_ofs = xe_ggtt_node_addr(node);
210+
211+
for (u32 i = 0; i < ARRAY_SIZE(rot_info->plane); i++)
212+
write_ggtt_rotated(ggtt, &ggtt_ofs, pte_flags, write_pte,
213+
bo, rot_info->plane[i].offset,
214+
rot_info->plane[i].width,
215+
rot_info->plane[i].height,
216+
rot_info->plane[i].src_stride,
217+
rot_info->plane[i].dst_stride);
218+
}
219+
197220
static int __xe_pin_fb_vma_ggtt(const struct intel_framebuffer *fb,
198221
const struct i915_gtt_view *view,
199222
struct i915_vma *vma,
@@ -204,66 +227,43 @@ static int __xe_pin_fb_vma_ggtt(const struct intel_framebuffer *fb,
204227
struct xe_device *xe = to_xe_device(fb->base.dev);
205228
struct xe_tile *tile0 = xe_device_get_root_tile(xe);
206229
struct xe_ggtt *ggtt = tile0->mem.ggtt;
230+
u64 pte, size;
207231
u32 align;
208-
int ret;
232+
int ret = 0;
209233

210234
/* TODO: Consider sharing framebuffer mapping?
211235
* embed i915_vma inside intel_framebuffer
212236
*/
213237
guard(xe_pm_runtime_noresume)(xe);
214-
ACQUIRE(mutex_intr, lock)(&ggtt->lock);
215-
ret = ACQUIRE_ERR(mutex_intr, &lock);
216-
if (ret)
217-
return ret;
218238

219239
align = XE_PAGE_SIZE;
220-
if (xe_bo_is_vram(bo) && ggtt->flags & XE_GGTT_FLAGS_64K)
221-
align = max_t(u32, align, SZ_64K);
240+
if (xe_bo_is_vram(bo) && xe->info.vram_flags & XE_VRAM_FLAGS_NEED64K)
241+
align = max(align, SZ_64K);
222242

243+
/* Fast case, preallocated GGTT view? */
223244
if (bo->ggtt_node[tile0->id] && view->type == I915_GTT_VIEW_NORMAL) {
224245
vma->node = bo->ggtt_node[tile0->id];
225-
} else if (view->type == I915_GTT_VIEW_NORMAL) {
226-
vma->node = xe_ggtt_node_init(ggtt);
227-
if (IS_ERR(vma->node))
228-
return PTR_ERR(vma->node);
229-
230-
ret = xe_ggtt_node_insert_locked(vma->node, xe_bo_size(bo), align, 0);
231-
if (ret) {
232-
xe_ggtt_node_fini(vma->node);
233-
return ret;
234-
}
235-
236-
xe_ggtt_map_bo(ggtt, vma->node, bo, xe->pat.idx[XE_CACHE_NONE]);
237-
} else {
238-
u32 i, ggtt_ofs;
239-
const struct intel_rotation_info *rot_info = &view->rotated;
240-
241-
/* display seems to use tiles instead of bytes here, so convert it back.. */
242-
u32 size = intel_rotation_info_size(rot_info) * XE_PAGE_SIZE;
243-
244-
vma->node = xe_ggtt_node_init(ggtt);
245-
if (IS_ERR(vma->node)) {
246-
ret = PTR_ERR(vma->node);
247-
return ret;
248-
}
249-
250-
ret = xe_ggtt_node_insert_locked(vma->node, size, align, 0);
251-
if (ret) {
252-
xe_ggtt_node_fini(vma->node);
253-
return ret;
254-
}
255-
256-
ggtt_ofs = vma->node->base.start;
257-
258-
for (i = 0; i < ARRAY_SIZE(rot_info->plane); i++)
259-
write_ggtt_rotated(bo, ggtt, &ggtt_ofs,
260-
rot_info->plane[i].offset,
261-
rot_info->plane[i].width,
262-
rot_info->plane[i].height,
263-
rot_info->plane[i].src_stride,
264-
rot_info->plane[i].dst_stride);
246+
return 0;
265247
}
266248

249+
/* TODO: Consider sharing framebuffer mapping?
250+
* embed i915_vma inside intel_framebuffer
251+
*/
252+
if (view->type == I915_GTT_VIEW_NORMAL)
253+
size = xe_bo_size(bo);
254+
else
255+
/* display uses tiles instead of bytes here, so convert it back.. */
256+
size = intel_rotation_info_size(&view->rotated) * XE_PAGE_SIZE;
257+
258+
pte = xe_ggtt_encode_pte_flags(ggtt, bo, xe->pat.idx[XE_CACHE_NONE]);
259+
vma->node = xe_ggtt_node_insert_transform(ggtt, bo, pte,
260+
ALIGN(size, align), align,
261+
view->type == I915_GTT_VIEW_NORMAL ?
262+
NULL : write_ggtt_rotated_node,
263+
&(struct fb_rotate_args){view, bo});
264+
if (IS_ERR(vma->node))
265+
ret = PTR_ERR(vma->node);
266+
267267
return ret;
268268
}
269269

@@ -353,7 +353,7 @@ static void __xe_unpin_fb_vma(struct i915_vma *vma)
353353
if (vma->dpt)
354354
xe_bo_unpin_map_no_vm(vma->dpt);
355355
else if (!xe_ggtt_node_allocated(vma->bo->ggtt_node[tile_id]) ||
356-
vma->bo->ggtt_node[tile_id]->base.start != vma->node->base.start)
356+
vma->bo->ggtt_node[tile_id] != vma->node)
357357
xe_ggtt_node_remove(vma->node, false);
358358

359359
ttm_bo_reserve(&vma->bo->ttm, false, false, NULL);

drivers/gpu/drm/xe/display/xe_hdcp_gsc.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ static bool intel_hdcp_gsc_check_status(struct drm_device *drm)
3939
struct xe_gt *gt = tile->media_gt;
4040
struct xe_gsc *gsc = &gt->uc.gsc;
4141

42-
if (!gsc || !xe_uc_fw_is_enabled(&gsc->fw)) {
42+
if (!gsc || !xe_uc_fw_is_available(&gsc->fw)) {
4343
drm_dbg_kms(&xe->drm,
4444
"GSC Components not ready for HDCP2.x\n");
4545
return false;

0 commit comments

Comments
 (0)