Skip to content

Commit 6debb69

Browse files
committed
Merge tag 'drm-fixes-2025-08-23-1' of https://gitlab.freedesktop.org/drm/kernel
Pull drm fixes from Dave Airlie: "Weekly drm fixes. Looks like things did indeed get busier after rc2, nothing seems too major, but stuff scattered all over the place, amdgpu, xe, i915, hibmc, rust support code, and other small fixes. rust: - drm device memory layout and safety fixes tests: - Endianness fixes gpuvm: - docs warning fix panic: - fix division on 32-bit arm i915: - TypeC DP display Fixes - Silence rpm wakeref asserts on GEN11_GU_MISC_IIR access - Relocate compression repacking WA for JSL/EHL xe: - xe_vm_create fixes - fix vm bind ioctl double free amdgpu: - Replay fixes - SMU14 fix - Null check DC fixes - DCE6 DC fixes - Misc DC fixes bridge: - analogix_dp: devm_drm_bridge_alloc() error handling fix habanalabs: - Memory deallocation fix hibmc: - modesetting black screen fixes - fix UAF on irq - fix leak on i2c failure path nouveau: - memory leak fixes - typos rockchip: - Kconfig fix - register caching fix" * tag 'drm-fixes-2025-08-23-1' of https://gitlab.freedesktop.org/drm/kernel: (49 commits) drm/xe: Fix vm_bind_ioctl double free bug drm/xe: Move ASID allocation and user PT BO tracking into xe_vm_create drm/xe: Assign ioctl xe file handler to vm in xe_vm_create drm/i915/gt: Relocate compression repacking WA for JSL/EHL drm/i915: silence rpm wakeref asserts on GEN11_GU_MISC_IIR access drm/amd/display: Fix DP audio DTO1 clock source on DCE 6. drm/amd/display: Fix fractional fb divider in set_pixel_clock_v3 drm/amd/display: Don't print errors for nonexistent connectors drm/amd/display: Don't warn when missing DCE encoder caps drm/amd/display: Fill display clock and vblank time in dce110_fill_display_configs drm/amd/display: Find first CRTC and its line time in dce110_fill_display_configs drm/amd/display: Adjust DCE 8-10 clock, don't overclock by 15% drm/amd/display: Don't overclock DCE 6 by 15% drm/amd/display: Add null pointer check in mod_hdcp_hdcp1_create_session() drm/amd/display: Fix Xorg desktop unresponsive on Replay panel drm/amd/display: Avoid a NULL pointer dereference drm/amdgpu/swm14: Update power limit logic drm/amd/display: Revert Add HPO encoder support to Replay drm/i915/icl+/tc: Convert AUX powered WARN to a debug message drm/i915/lnl+/tc: Use the cached max lane count value ...
2 parents 471b25a + a60f5ee commit 6debb69

Some content is hidden

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

46 files changed

+382
-239
lines changed

MAINTAINERS

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8426,6 +8426,17 @@ T: git https://gitlab.freedesktop.org/drm/misc/kernel.git
84268426
F: drivers/gpu/drm/scheduler/
84278427
F: include/drm/gpu_scheduler.h
84288428

8429+
DRM GPUVM
8430+
M: Danilo Krummrich <[email protected]>
8431+
R: Matthew Brost <[email protected]>
8432+
R: Thomas Hellström <[email protected]>
8433+
R: Alice Ryhl <[email protected]>
8434+
8435+
S: Supported
8436+
T: git https://gitlab.freedesktop.org/drm/misc/kernel.git
8437+
F: drivers/gpu/drm/drm_gpuvm.c
8438+
F: include/drm/drm_gpuvm.h
8439+
84298440
DRM LOG
84308441
M: Jocelyn Falempe <[email protected]>
84318442
M: Javier Martinez Canillas <[email protected]>
@@ -10655,7 +10666,8 @@ S: Maintained
1065510666
F: block/partitions/efi.*
1065610667

1065710668
HABANALABS PCI DRIVER
10658-
M: Yaron Avizrat <[email protected]>
10669+
M: Koby Elbaz <[email protected]>
10670+
M: Konstantin Sinyuk <[email protected]>
1065910671
1066010672
S: Supported
1066110673
C: irc://irc.oftc.net/dri-devel

drivers/accel/habanalabs/gaudi2/gaudi2.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10437,7 +10437,7 @@ static int gaudi2_memset_device_memory(struct hl_device *hdev, u64 addr, u64 siz
1043710437
(u64 *)(lin_dma_pkts_arr), DEBUGFS_WRITE64);
1043810438
WREG32(sob_addr, 0);
1043910439

10440-
kfree(lin_dma_pkts_arr);
10440+
kvfree(lin_dma_pkts_arr);
1044110441

1044210442
return rc;
1044310443
}

drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -514,7 +514,7 @@ bool amdgpu_dmabuf_is_xgmi_accessible(struct amdgpu_device *adev,
514514
return false;
515515

516516
if (drm_gem_is_imported(obj)) {
517-
struct dma_buf *dma_buf = obj->dma_buf;
517+
struct dma_buf *dma_buf = obj->import_attach->dmabuf;
518518

519519
if (dma_buf->ops != &amdgpu_dmabuf_ops)
520520
/* No XGMI with non AMD GPUs */

drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -317,7 +317,8 @@ static int amdgpu_gem_object_open(struct drm_gem_object *obj,
317317
*/
318318
if (!vm->is_compute_context || !vm->process_info)
319319
return 0;
320-
if (!drm_gem_is_imported(obj) || !dma_buf_is_dynamic(obj->dma_buf))
320+
if (!drm_gem_is_imported(obj) ||
321+
!dma_buf_is_dynamic(obj->import_attach->dmabuf))
321322
return 0;
322323
mutex_lock_nested(&vm->process_info->lock, 1);
323324
if (!WARN_ON(!vm->process_info->eviction_fence)) {

drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1283,7 +1283,7 @@ int amdgpu_vm_bo_update(struct amdgpu_device *adev, struct amdgpu_bo_va *bo_va,
12831283
struct drm_gem_object *obj = &bo->tbo.base;
12841284

12851285
if (drm_gem_is_imported(obj) && bo_va->is_xgmi) {
1286-
struct dma_buf *dma_buf = obj->dma_buf;
1286+
struct dma_buf *dma_buf = obj->import_attach->dmabuf;
12871287
struct drm_gem_object *gobj = dma_buf->priv;
12881288
struct amdgpu_bo *abo = gem_to_amdgpu_bo(gobj);
12891289

drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7792,6 +7792,9 @@ amdgpu_dm_connector_atomic_check(struct drm_connector *conn,
77927792
struct amdgpu_dm_connector *aconn = to_amdgpu_dm_connector(conn);
77937793
int ret;
77947794

7795+
if (WARN_ON(unlikely(!old_con_state || !new_con_state)))
7796+
return -EINVAL;
7797+
77957798
trace_amdgpu_dm_connector_atomic_check(new_con_state);
77967799

77977800
if (conn->connector_type == DRM_MODE_CONNECTOR_DisplayPort) {

drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crtc.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,25 @@ static inline int amdgpu_dm_crtc_set_vblank(struct drm_crtc *crtc, bool enable)
299299
irq_type = amdgpu_display_crtc_idx_to_irq_type(adev, acrtc->crtc_id);
300300

301301
if (enable) {
302+
struct dc *dc = adev->dm.dc;
303+
struct drm_vblank_crtc *vblank = drm_crtc_vblank_crtc(crtc);
304+
struct psr_settings *psr = &acrtc_state->stream->link->psr_settings;
305+
struct replay_settings *pr = &acrtc_state->stream->link->replay_settings;
306+
bool sr_supported = (psr->psr_version != DC_PSR_VERSION_UNSUPPORTED) ||
307+
pr->config.replay_supported;
308+
309+
/*
310+
* IPS & self-refresh feature can cause vblank counter resets between
311+
* vblank disable and enable.
312+
* It may cause system stuck due to waiting for the vblank counter.
313+
* Call this function to estimate missed vblanks by using timestamps and
314+
* update the vblank counter in DRM.
315+
*/
316+
if (dc->caps.ips_support &&
317+
dc->config.disable_ips != DMUB_IPS_DISABLE_ALL &&
318+
sr_supported && vblank->config.disable_immediate)
319+
drm_crtc_vblank_restore(crtc);
320+
302321
/* vblank irq on -> Only need vupdate irq in vrr mode */
303322
if (amdgpu_dm_crtc_vrr_active(acrtc_state))
304323
rc = amdgpu_dm_crtc_set_vupdate_irq(crtc, true);

drivers/gpu/drm/amd/display/dc/bios/bios_parser.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -174,11 +174,8 @@ static struct graphics_object_id bios_parser_get_connector_id(
174174
return object_id;
175175
}
176176

177-
if (tbl->ucNumberOfObjects <= i) {
178-
dm_error("Can't find connector id %d in connector table of size %d.\n",
179-
i, tbl->ucNumberOfObjects);
177+
if (tbl->ucNumberOfObjects <= i)
180178
return object_id;
181-
}
182179

183180
id = le16_to_cpu(tbl->asObjects[i].usObjectID);
184181
object_id = object_id_from_bios_object_id(id);

drivers/gpu/drm/amd/display/dc/bios/command_table.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -993,7 +993,7 @@ static enum bp_result set_pixel_clock_v3(
993993
allocation.sPCLKInput.usFbDiv =
994994
cpu_to_le16((uint16_t)bp_params->feedback_divider);
995995
allocation.sPCLKInput.ucFracFbDiv =
996-
(uint8_t)bp_params->fractional_feedback_divider;
996+
(uint8_t)(bp_params->fractional_feedback_divider / 100000);
997997
allocation.sPCLKInput.ucPostDiv =
998998
(uint8_t)bp_params->pixel_clock_post_divider;
999999

drivers/gpu/drm/amd/display/dc/clk_mgr/dce100/dce_clk_mgr.c

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,9 @@ static const struct state_dependent_clocks dce80_max_clks_by_state[] = {
7272
/* ClocksStateLow */
7373
{ .display_clk_khz = 352000, .pixel_clk_khz = 330000},
7474
/* ClocksStateNominal */
75-
{ .display_clk_khz = 600000, .pixel_clk_khz = 400000 },
75+
{ .display_clk_khz = 625000, .pixel_clk_khz = 400000 },
7676
/* ClocksStatePerformance */
77-
{ .display_clk_khz = 600000, .pixel_clk_khz = 400000 } };
77+
{ .display_clk_khz = 625000, .pixel_clk_khz = 400000 } };
7878

7979
int dentist_get_divider_from_did(int did)
8080
{
@@ -391,8 +391,6 @@ static void dce_pplib_apply_display_requirements(
391391
{
392392
struct dm_pp_display_configuration *pp_display_cfg = &context->pp_display_cfg;
393393

394-
pp_display_cfg->avail_mclk_switch_time_us = dce110_get_min_vblank_time_us(context);
395-
396394
dce110_fill_display_configs(context, pp_display_cfg);
397395

398396
if (memcmp(&dc->current_state->pp_display_cfg, pp_display_cfg, sizeof(*pp_display_cfg)) != 0)
@@ -405,11 +403,9 @@ static void dce_update_clocks(struct clk_mgr *clk_mgr_base,
405403
{
406404
struct clk_mgr_internal *clk_mgr_dce = TO_CLK_MGR_INTERNAL(clk_mgr_base);
407405
struct dm_pp_power_level_change_request level_change_req;
408-
int patched_disp_clk = context->bw_ctx.bw.dce.dispclk_khz;
409-
410-
/*TODO: W/A for dal3 linux, investigate why this works */
411-
if (!clk_mgr_dce->dfs_bypass_active)
412-
patched_disp_clk = patched_disp_clk * 115 / 100;
406+
const int max_disp_clk =
407+
clk_mgr_dce->max_clks_by_state[DM_PP_CLOCKS_STATE_PERFORMANCE].display_clk_khz;
408+
int patched_disp_clk = MIN(max_disp_clk, context->bw_ctx.bw.dce.dispclk_khz);
413409

414410
level_change_req.power_level = dce_get_required_clocks_state(clk_mgr_base, context);
415411
/* get max clock state from PPLIB */

0 commit comments

Comments
 (0)