From 18476087f1a18dc279d200d934ad94fba1fb51d5 Mon Sep 17 00:00:00 2001 From: Ard Biesheuvel Date: Fri, 5 Dec 2025 12:35:01 +0100 Subject: drm/i915: Fix format string truncation warning MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GCC notices that the 16-byte uabi_name field could theoretically be too small for the formatted string if the instance number exceeds 100. So grow the field to 20 bytes. drivers/gpu/drm/i915/intel_memory_region.c: In function ‘intel_memory_region_create’: drivers/gpu/drm/i915/intel_memory_region.c:273:61: error: ‘%u’ directive output may be truncated writing between 1 and 5 bytes into a region of size between 3 and 11 [-Werror=format-truncation=] 273 | snprintf(mem->uabi_name, sizeof(mem->uabi_name), "%s%u", | ^~ drivers/gpu/drm/i915/intel_memory_region.c:273:58: note: directive argument in the range [0, 65535] 273 | snprintf(mem->uabi_name, sizeof(mem->uabi_name), "%s%u", | ^~~~~~ drivers/gpu/drm/i915/intel_memory_region.c:273:9: note: ‘snprintf’ output between 7 and 19 bytes into a destination of size 16 273 | snprintf(mem->uabi_name, sizeof(mem->uabi_name), "%s%u", | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 274 | intel_memory_type_str(type), instance); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Signed-off-by: Ard Biesheuvel Signed-off-by: Tvrtko Ursulin Link: https://lore.kernel.org/r/20251205113500.684286-2-ardb@kernel.org --- drivers/gpu/drm/i915/intel_memory_region.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/intel_memory_region.h b/drivers/gpu/drm/i915/intel_memory_region.h index b3b75be9ced5..e9a4e6090fe0 100644 --- a/drivers/gpu/drm/i915/intel_memory_region.h +++ b/drivers/gpu/drm/i915/intel_memory_region.h @@ -72,7 +72,7 @@ struct intel_memory_region { u16 instance; enum intel_region_id id; char name[16]; - char uabi_name[16]; + char uabi_name[20]; bool private; /* not for userspace */ struct { -- cgit v1.2.3 From 08889b706d4f0b8d2352b7ca29c2d8df4d0787cd Mon Sep 17 00:00:00 2001 From: Krzysztof Niemiec Date: Tue, 16 Dec 2025 19:09:01 +0100 Subject: drm/i915/gem: Zero-initialize the eb.vma array in i915_gem_do_execbuffer Initialize the eb.vma array with values of 0 when the eb structure is first set up. In particular, this sets the eb->vma[i].vma pointers to NULL, simplifying cleanup and getting rid of the bug described below. During the execution of eb_lookup_vmas(), the eb->vma array is successively filled up with struct eb_vma objects. This process includes calling eb_add_vma(), which might fail; however, even in the event of failure, eb->vma[i].vma is set for the currently processed buffer. If eb_add_vma() fails, eb_lookup_vmas() returns with an error, which prompts a call to eb_release_vmas() to clean up the mess. Since eb_lookup_vmas() might fail during processing any (possibly not first) buffer, eb_release_vmas() checks whether a buffer's vma is NULL to know at what point did the lookup function fail. In eb_lookup_vmas(), eb->vma[i].vma is set to NULL if either the helper function eb_lookup_vma() or eb_validate_vma() fails. eb->vma[i+1].vma is set to NULL in case i915_gem_object_userptr_submit_init() fails; the current one needs to be cleaned up by eb_release_vmas() at this point, so the next one is set. If eb_add_vma() fails, neither the current nor the next vma is set to NULL, which is a source of a NULL deref bug described in the issue linked in the Closes tag. When entering eb_lookup_vmas(), the vma pointers are set to the slab poison value, instead of NULL. This doesn't matter for the actual lookup, since it gets overwritten anyway, however the eb_release_vmas() function only recognizes NULL as the stopping value, hence the pointers are being set to NULL as they go in case of intermediate failure. This patch changes the approach to filling them all with NULL at the start instead, rather than handling that manually during failure. Reported-by: Gangmin Kim Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/15062 Fixes: 544460c33821 ("drm/i915: Multi-BB execbuf") Cc: stable@vger.kernel.org # 5.16.x Signed-off-by: Krzysztof Niemiec Reviewed-by: Janusz Krzysztofik Reviewed-by: Krzysztof Karas Reviewed-by: Andi Shyti Signed-off-by: Andi Shyti Link: https://lore.kernel.org/r/20251216180900.54294-2-krzysztof.niemiec@intel.com --- drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c | 37 ++++++++++++-------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c index 4eafc167a299..bd608cea396f 100644 --- a/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c +++ b/drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c @@ -950,13 +950,13 @@ static int eb_lookup_vmas(struct i915_execbuffer *eb) vma = eb_lookup_vma(eb, eb->exec[i].handle); if (IS_ERR(vma)) { err = PTR_ERR(vma); - goto err; + return err; } err = eb_validate_vma(eb, &eb->exec[i], vma); if (unlikely(err)) { i915_vma_put(vma); - goto err; + return err; } err = eb_add_vma(eb, ¤t_batch, i, vma); @@ -965,19 +965,8 @@ static int eb_lookup_vmas(struct i915_execbuffer *eb) if (i915_gem_object_is_userptr(vma->obj)) { err = i915_gem_object_userptr_submit_init(vma->obj); - if (err) { - if (i + 1 < eb->buffer_count) { - /* - * Execbuffer code expects last vma entry to be NULL, - * since we already initialized this entry, - * set the next value to NULL or we mess up - * cleanup handling. - */ - eb->vma[i + 1].vma = NULL; - } - + if (err) return err; - } eb->vma[i].flags |= __EXEC_OBJECT_USERPTR_INIT; eb->args->flags |= __EXEC_USERPTR_USED; @@ -985,10 +974,6 @@ static int eb_lookup_vmas(struct i915_execbuffer *eb) } return 0; - -err: - eb->vma[i].vma = NULL; - return err; } static int eb_lock_vmas(struct i915_execbuffer *eb) @@ -3374,7 +3359,8 @@ i915_gem_do_execbuffer(struct drm_device *dev, eb.exec = exec; eb.vma = (struct eb_vma *)(exec + args->buffer_count + 1); - eb.vma[0].vma = NULL; + memset(eb.vma, 0, (args->buffer_count + 1) * sizeof(struct eb_vma)); + eb.batch_pool = NULL; eb.invalid_flags = __EXEC_OBJECT_UNKNOWN_FLAGS; @@ -3583,7 +3569,18 @@ i915_gem_execbuffer2_ioctl(struct drm_device *dev, void *data, if (err) return err; - /* Allocate extra slots for use by the command parser */ + /* + * Allocate extra slots for use by the command parser. + * + * Note that this allocation handles two different arrays (the + * exec2_list array, and the eventual eb.vma array introduced in + * i915_gem_do_execbuffer()), that reside in virtually contiguous + * memory. Also note that the allocation intentionally doesn't fill the + * area with zeros, because the exec2_list part doesn't need to be, as + * it's immediately overwritten by user data a few lines below. + * However, the eb.vma part is explicitly zeroed later in + * i915_gem_do_execbuffer(). + */ exec2_list = kvmalloc_array(count + 2, eb_element_size(), __GFP_NOWARN | GFP_KERNEL); if (exec2_list == NULL) { -- cgit v1.2.3 From 78df43b95885eb764666eac2ea8e21e2953175e1 Mon Sep 17 00:00:00 2001 From: Sebastian Brzezinka Date: Tue, 16 Dec 2025 16:11:45 +0100 Subject: drm/i915/gt: use designated initializers for intel_gt_debugfs_file CONFIG_RANDSTRUCT may reorder structure fields, which makes positional initializers unsafe. The i915 GT debugfs tables were using positional initializers for `struct intel_gt_debugfs_file`, and on configs where the layout differs (e.g., presence/absence of the `.eval` callback), this can lead to fields being initialized incorrectly and trigger randstruct warnings such as: ``` drivers/gpu/drm/i915/gt/intel_gt_debugfs.c:75:51: note: randstruct: casting between randomized structure pointer types (constructor) ``` Switch all the GT debugfs file arrays to designated initializers. This binds each value to the intended member regardless of structure reordering or optional members and removes the warning while preserving the intended initialization. Also drops the '&' from intel_eval_slpc_support so .eval receives the function pointer directly. No functional change, only initialization style is updated. Signed-off-by: Sebastian Brzezinka Reviewed-by: Krzysztof Karas Reviewed-by: Andi Shyti Signed-off-by: Andi Shyti Link: https://lore.kernel.org/r/bae491e8098705a87304a7c94573b377e8c8fa37.1765897826.git.sebastian.brzezinka@intel.com --- drivers/gpu/drm/i915/gt/intel_gt_debugfs.c | 4 ++-- drivers/gpu/drm/i915/gt/intel_gt_engines_debugfs.c | 2 +- drivers/gpu/drm/i915/gt/intel_gt_pm_debugfs.c | 15 ++++++++------- drivers/gpu/drm/i915/gt/intel_sseu_debugfs.c | 4 ++-- drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_debugfs.c | 2 +- drivers/gpu/drm/i915/gt/uc/intel_guc_debugfs.c | 13 +++++++------ drivers/gpu/drm/i915/gt/uc/intel_guc_log_debugfs.c | 8 ++++---- drivers/gpu/drm/i915/gt/uc/intel_huc_debugfs.c | 2 +- drivers/gpu/drm/i915/gt/uc/intel_uc_debugfs.c | 2 +- 9 files changed, 27 insertions(+), 25 deletions(-) diff --git a/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c b/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c index dcd40b30a96b..71ebdd76ff37 100644 --- a/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c +++ b/drivers/gpu/drm/i915/gt/intel_gt_debugfs.c @@ -73,8 +73,8 @@ DEFINE_INTEL_GT_DEBUGFS_ATTRIBUTE(steering); static void gt_debugfs_register(struct intel_gt *gt, struct dentry *root) { static const struct intel_gt_debugfs_file files[] = { - { "reset", &reset_fops, NULL }, - { "steering", &steering_fops }, + { .name = "reset", .fops = &reset_fops }, + { .name = "steering", .fops = &steering_fops }, }; intel_gt_debugfs_register_files(root, files, ARRAY_SIZE(files), gt); diff --git a/drivers/gpu/drm/i915/gt/intel_gt_engines_debugfs.c b/drivers/gpu/drm/i915/gt/intel_gt_engines_debugfs.c index 3aa1d014c14d..ae6c78dfe452 100644 --- a/drivers/gpu/drm/i915/gt/intel_gt_engines_debugfs.c +++ b/drivers/gpu/drm/i915/gt/intel_gt_engines_debugfs.c @@ -29,7 +29,7 @@ DEFINE_INTEL_GT_DEBUGFS_ATTRIBUTE(engines); void intel_gt_engines_debugfs_register(struct intel_gt *gt, struct dentry *root) { static const struct intel_gt_debugfs_file files[] = { - { "engines", &engines_fops }, + { .name = "engines", .fops = &engines_fops }, }; intel_gt_debugfs_register_files(root, files, ARRAY_SIZE(files), gt); diff --git a/drivers/gpu/drm/i915/gt/intel_gt_pm_debugfs.c b/drivers/gpu/drm/i915/gt/intel_gt_pm_debugfs.c index 87ef85483bae..b2640cf17d9b 100644 --- a/drivers/gpu/drm/i915/gt/intel_gt_pm_debugfs.c +++ b/drivers/gpu/drm/i915/gt/intel_gt_pm_debugfs.c @@ -586,13 +586,14 @@ DEFINE_SIMPLE_ATTRIBUTE(perf_limit_reasons_fops, perf_limit_reasons_get, void intel_gt_pm_debugfs_register(struct intel_gt *gt, struct dentry *root) { static const struct intel_gt_debugfs_file files[] = { - { "drpc", &drpc_fops, NULL }, - { "frequency", &frequency_fops, NULL }, - { "forcewake", &fw_domains_fops, NULL }, - { "forcewake_user", &forcewake_user_fops, NULL}, - { "llc", &llc_fops, llc_eval }, - { "rps_boost", &rps_boost_fops, rps_eval }, - { "perf_limit_reasons", &perf_limit_reasons_fops, perf_limit_reasons_eval }, + { .name = "drpc", .fops = &drpc_fops }, + { .name = "frequency", .fops = &frequency_fops }, + { .name = "forcewake", .fops = &fw_domains_fops }, + { .name = "forcewake_user", .fops = &forcewake_user_fops}, + { .name = "llc", .fops = &llc_fops, .eval = llc_eval }, + { .name = "rps_boost", .fops = &rps_boost_fops, .eval = rps_eval }, + { .name = "perf_limit_reasons", .fops = &perf_limit_reasons_fops, + .eval = perf_limit_reasons_eval }, }; intel_gt_debugfs_register_files(root, files, ARRAY_SIZE(files), gt); diff --git a/drivers/gpu/drm/i915/gt/intel_sseu_debugfs.c b/drivers/gpu/drm/i915/gt/intel_sseu_debugfs.c index c2ee5e1826b5..bfdfd92ce209 100644 --- a/drivers/gpu/drm/i915/gt/intel_sseu_debugfs.c +++ b/drivers/gpu/drm/i915/gt/intel_sseu_debugfs.c @@ -291,8 +291,8 @@ DEFINE_INTEL_GT_DEBUGFS_ATTRIBUTE(sseu_topology); void intel_sseu_debugfs_register(struct intel_gt *gt, struct dentry *root) { static const struct intel_gt_debugfs_file files[] = { - { "sseu_status", &sseu_status_fops, NULL }, - { "sseu_topology", &sseu_topology_fops, NULL }, + { .name = "sseu_status", .fops = &sseu_status_fops }, + { .name = "sseu_topology", .fops = &sseu_topology_fops }, }; intel_gt_debugfs_register_files(root, files, ARRAY_SIZE(files), gt); diff --git a/drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_debugfs.c b/drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_debugfs.c index 5baacd822a1c..0ca811e8f314 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_debugfs.c +++ b/drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_debugfs.c @@ -29,7 +29,7 @@ DEFINE_INTEL_GT_DEBUGFS_ATTRIBUTE(gsc_info); void intel_gsc_uc_debugfs_register(struct intel_gsc_uc *gsc_uc, struct dentry *root) { static const struct intel_gt_debugfs_file files[] = { - { "gsc_info", &gsc_info_fops, NULL }, + { .name = "gsc_info", .fops = &gsc_info_fops }, }; if (!intel_gsc_uc_is_supported(gsc_uc)) diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_debugfs.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_debugfs.c index 7269eb0bbedf..a30e13970298 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_debugfs.c +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_debugfs.c @@ -132,12 +132,13 @@ DEFINE_SIMPLE_ATTRIBUTE(guc_sched_disable_gucid_threshold_fops, void intel_guc_debugfs_register(struct intel_guc *guc, struct dentry *root) { static const struct intel_gt_debugfs_file files[] = { - { "guc_info", &guc_info_fops, NULL }, - { "guc_registered_contexts", &guc_registered_contexts_fops, NULL }, - { "guc_slpc_info", &guc_slpc_info_fops, &intel_eval_slpc_support}, - { "guc_sched_disable_delay_ms", &guc_sched_disable_delay_ms_fops, NULL }, - { "guc_sched_disable_gucid_threshold", &guc_sched_disable_gucid_threshold_fops, - NULL }, + { .name = "guc_info", .fops = &guc_info_fops }, + { .name = "guc_registered_contexts", .fops = &guc_registered_contexts_fops }, + { .name = "guc_slpc_info", .fops = &guc_slpc_info_fops, + .eval = intel_eval_slpc_support }, + { .name = "guc_sched_disable_delay_ms", .fops = &guc_sched_disable_delay_ms_fops }, + { .name = "guc_sched_disable_gucid_threshold", + .fops = &guc_sched_disable_gucid_threshold_fops }, }; if (!intel_guc_is_supported(guc)) diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_log_debugfs.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_log_debugfs.c index ddfbe334689f..b4f3961a94c2 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_log_debugfs.c +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_log_debugfs.c @@ -162,10 +162,10 @@ void intel_guc_log_debugfs_register(struct intel_guc_log *log, struct dentry *root) { static const struct intel_gt_debugfs_file files[] = { - { "guc_log_dump", &guc_log_dump_fops, NULL }, - { "guc_load_err_log_dump", &guc_load_err_log_dump_fops, NULL }, - { "guc_log_level", &guc_log_level_fops, NULL }, - { "guc_log_relay", &guc_log_relay_fops, NULL }, + { .name = "guc_log_dump", .fops = &guc_log_dump_fops }, + { .name = "guc_load_err_log_dump", .fops = &guc_load_err_log_dump_fops}, + { .name = "guc_log_level", .fops = &guc_log_level_fops }, + { .name = "guc_log_relay", .fops = &guc_log_relay_fops }, }; if (!intel_guc_is_supported(log_to_guc(log))) diff --git a/drivers/gpu/drm/i915/gt/uc/intel_huc_debugfs.c b/drivers/gpu/drm/i915/gt/uc/intel_huc_debugfs.c index 15998963b863..da67854a9432 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_huc_debugfs.c +++ b/drivers/gpu/drm/i915/gt/uc/intel_huc_debugfs.c @@ -26,7 +26,7 @@ DEFINE_INTEL_GT_DEBUGFS_ATTRIBUTE(huc_info); void intel_huc_debugfs_register(struct intel_huc *huc, struct dentry *root) { static const struct intel_gt_debugfs_file files[] = { - { "huc_info", &huc_info_fops, NULL }, + { .name = "huc_info", .fops = &huc_info_fops }, }; if (!intel_huc_is_supported(huc)) diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc_debugfs.c b/drivers/gpu/drm/i915/gt/uc/intel_uc_debugfs.c index 6d541c866edb..d7499fcebe1d 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_uc_debugfs.c +++ b/drivers/gpu/drm/i915/gt/uc/intel_uc_debugfs.c @@ -40,7 +40,7 @@ DEFINE_INTEL_GT_DEBUGFS_ATTRIBUTE(uc_usage); void intel_uc_debugfs_register(struct intel_uc *uc, struct dentry *gt_root) { static const struct intel_gt_debugfs_file files[] = { - { "usage", &uc_usage_fops, NULL }, + { .name = "usage", .fops = &uc_usage_fops }, }; struct dentry *root; -- cgit v1.2.3 From 043fc9e961ef088aafc0f545c1efd8620d616c9f Mon Sep 17 00:00:00 2001 From: Sk Anirban Date: Tue, 23 Dec 2025 15:46:06 +0530 Subject: drm/i915/selftest: Add throttle reason diagnostics to RPS selftests Report GPU throttle reasons when RPS tests fail to reach expected frequencies or power levels. v2: Read the throttle value before the spinner ends (Raag) Add a condition before printing throttle value (Krzysztof) v3: Extend throttle reasons debug support (Raag) v4: Cosmetic changes (Raag) Signed-off-by: Sk Anirban Reviewed-by: Raag Jadav Reviewed-by: Krzysztof Karas Link: https://patch.msgid.link/20251223101605.3304379-2-sk.anirban@intel.com Signed-off-by: Matt Roper --- drivers/gpu/drm/i915/gt/selftest_rps.c | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/i915/gt/selftest_rps.c b/drivers/gpu/drm/i915/gt/selftest_rps.c index 73bc91c6ea07..be77fba2ec49 100644 --- a/drivers/gpu/drm/i915/gt/selftest_rps.c +++ b/drivers/gpu/drm/i915/gt/selftest_rps.c @@ -378,6 +378,7 @@ int live_rps_control(void *arg) enum intel_engine_id id; struct igt_spinner spin; intel_wakeref_t wakeref; + u32 throttle; int err = 0; /* @@ -463,6 +464,9 @@ int live_rps_control(void *arg) max = rps_set_check(rps, limit); max_dt = ktime_sub(ktime_get(), max_dt); + throttle = intel_uncore_read(gt->uncore, intel_gt_perf_limit_reasons_reg(gt)); + throttle &= GT0_PERF_LIMIT_REASONS_MASK; + min_dt = ktime_get(); min = rps_set_check(rps, rps->min_freq); min_dt = ktime_sub(ktime_get(), min_dt); @@ -478,11 +482,9 @@ int live_rps_control(void *arg) min, max, ktime_to_ns(min_dt), ktime_to_ns(max_dt)); if (limit != rps->max_freq) { - u32 throttle = intel_uncore_read(gt->uncore, - intel_gt_perf_limit_reasons_reg(gt)); - - pr_warn("%s: GPU throttled with reasons 0x%08x\n", - engine->name, throttle & GT0_PERF_LIMIT_REASONS_MASK); + if (throttle) + pr_warn("%s: GPU throttled with reasons 0x%08x\n", + engine->name, throttle); show_pstate_limits(rps); } @@ -1138,6 +1140,7 @@ int live_rps_power(void *arg) struct intel_engine_cs *engine; enum intel_engine_id id; struct igt_spinner spin; + u32 throttle; int err = 0; /* @@ -1195,6 +1198,9 @@ int live_rps_power(void *arg) max.freq = rps->max_freq; max.power = measure_power_at(rps, &max.freq); + throttle = intel_uncore_read(gt->uncore, intel_gt_perf_limit_reasons_reg(gt)); + throttle &= GT0_PERF_LIMIT_REASONS_MASK; + min.freq = rps->min_freq; min.power = measure_power_at(rps, &min.freq); @@ -1210,12 +1216,21 @@ int live_rps_power(void *arg) pr_notice("Could not control frequency, ran at [%d:%uMHz, %d:%uMhz]\n", min.freq, intel_gpu_freq(rps, min.freq), max.freq, intel_gpu_freq(rps, max.freq)); + + if (throttle) + pr_warn("%s: GPU throttled with reasons 0x%08x\n", + engine->name, throttle); continue; } if (11 * min.power > 10 * max.power) { pr_err("%s: did not conserve power when setting lower frequency!\n", engine->name); + + if (throttle) + pr_warn("%s: GPU throttled with reasons 0x%08x\n", + engine->name, throttle); + err = -EINVAL; break; } @@ -1241,6 +1256,7 @@ int live_rps_dynamic(void *arg) struct intel_engine_cs *engine; enum intel_engine_id id; struct igt_spinner spin; + u32 throttle; int err = 0; /* @@ -1293,6 +1309,9 @@ int live_rps_dynamic(void *arg) max.freq = wait_for_freq(rps, rps->max_freq, 500); max.dt = ktime_sub(ktime_get(), max.dt); + throttle = intel_uncore_read(gt->uncore, intel_gt_perf_limit_reasons_reg(gt)); + throttle &= GT0_PERF_LIMIT_REASONS_MASK; + igt_spinner_end(&spin); min.dt = ktime_get(); @@ -1308,6 +1327,11 @@ int live_rps_dynamic(void *arg) if (min.freq >= max.freq) { pr_err("%s: dynamic reclocking of spinner failed\n!", engine->name); + + if (throttle) + pr_warn("%s: GPU throttled with reasons 0x%08x\n", + engine->name, throttle); + err = -EINVAL; } -- cgit v1.2.3 From 9512d9fc2a7a4fee14854fbb3af89a8bf599f361 Mon Sep 17 00:00:00 2001 From: Julia Filipchuk Date: Wed, 12 Nov 2025 10:25:44 -0800 Subject: drm/i915/guc: Recommend GuC v70.53.0 for DG2, MTL UAPI compatibility version 1.26.0 Update recommended GuC version for DG2, MTL. Signed-off-by: Julia Filipchuk Reviewed-by: Daniele Ceraolo Spurio Signed-off-by: Daniele Ceraolo Spurio Link: https://patch.msgid.link/20251112182606.1470733-2-julia.filipchuk@intel.com --- drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c index e848a04a80dc..813e58b45d5d 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c +++ b/drivers/gpu/drm/i915/gt/uc/intel_uc_fw.c @@ -88,8 +88,8 @@ void intel_uc_fw_change_status(struct intel_uc_fw *uc_fw, * security fixes, etc. to be enabled. */ #define INTEL_GUC_FIRMWARE_DEFS(fw_def, guc_maj, guc_mmp) \ - fw_def(METEORLAKE, 0, guc_maj(mtl, 70, 12, 1)) \ - fw_def(DG2, 0, guc_maj(dg2, 70, 12, 1)) \ + fw_def(METEORLAKE, 0, guc_maj(mtl, 70, 53, 0)) \ + fw_def(DG2, 0, guc_maj(dg2, 70, 53, 0)) \ fw_def(ALDERLAKE_P, 0, guc_maj(adlp, 70, 12, 1)) \ fw_def(ALDERLAKE_P, 0, guc_mmp(adlp, 70, 1, 1)) \ fw_def(ALDERLAKE_P, 0, guc_mmp(adlp, 69, 0, 3)) \ -- cgit v1.2.3