From nobody Sat Apr 4 03:27:35 2026 Received: from mail-pf1-f174.google.com (mail-pf1-f174.google.com [209.85.210.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0BA7E366831 for ; Sat, 21 Mar 2026 05:45:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774071918; cv=none; b=rPRBhBIG+jzlTSvD/RJt6L/5YJlc5lYCJxK5LH+Cpuw2vgUnvNHjCWI6Qd7RIA0+p6dyAtr+ituL6uUctyxPTbpgcD1n/AyKI9Vg/YWYYLqnq1kXepJ9v8iCq/57MPav21WOakCxYWDTdB3h94odyed57SkgmPwGRirqo6ZmXHg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774071918; c=relaxed/simple; bh=35+bFeOfe5NktlfXTSheef9StWYURJLfz5EMeTRV9oY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=hCwJ/RrTvrfnD86i9bfxBtVs9/CM5Vrapu47Sm2k+GZmge/D/FgBMuSUERgLaxEZz0AjOYQwZVRRtQgE/CXHQynIZKXUIAH37/OVXNs80kIoRCQ/X4JILBpKSUSPGtiL1hILjVOHytLNSoWZVA5ul7e/5MmCftOloSfjcxdEdIQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=GrN4jT0D; arc=none smtp.client-ip=209.85.210.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="GrN4jT0D" Received: by mail-pf1-f174.google.com with SMTP id d2e1a72fcca58-82735a41920so1096956b3a.2 for ; Fri, 20 Mar 2026 22:45:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1774071916; x=1774676716; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=4FP34IF1NqA/DrYCuAVhgwWOfQKjwg0Ze9v4T9XeI0k=; b=GrN4jT0D8t0LXks/ZPsMxBi2X6puSCdqzeg1t2n/yU0x7dg0lbNPADUGY0SUFC79jE /4NzaTdvp1w4ew88bGREVqGTOtYDxz072/611n4N9SMbC/I4kpPyV32RiQzSmMmbGHSF zluZ+eufbZToHEHZpq3vMPoytkIddTJW5NWH/lOs2HR7q3nWi+WXeAb0GEwMZYrbEtbs n9UFoiBF27d+6OQiSy96RnkQeA0inOwZX/PIeb96xnXZ9TF+oOeiX5xPilcnPZsxWry1 yRwtqM3TVL8JeP+V1N+o1EsakkVKk/R2toERMf1VZoM0NpaI7PMwUeaDRXgsxGT18WrZ N6Ug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774071916; x=1774676716; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=4FP34IF1NqA/DrYCuAVhgwWOfQKjwg0Ze9v4T9XeI0k=; b=gkUkyp/VqsbTJUd0nnMUgF4MpiXDhx43XuAWIAitRwLNcZQKdzB14FJmsb/qvWqVpG ttSP0rBbbZyZmW6H52qvhMDMr9W7p0ZMCAxxeTyj0+EEjRMjpX+ZBwPK4Jk2IqoYA7J4 NEOGytIrMfeFdzvEdlGtorXYiGw0xkMW2HGBMb+p909w0FMDTmEDJdePY85we00DggiF a0mXvBy0C50/LcLoOWL6I1GYXJSqev9sckDzrNwFH8vc0WgxVhuuO87/YDIQo1yKGgJ8 jk07RubrKcVYEU1fPmYiqZU7BO5yjCNTdxHpmwMNEHxVFKwYfGNHbcDPN9rjBsTASSOU wL1g== X-Forwarded-Encrypted: i=1; AJvYcCWB9M9XqvUPeuoGBUN8YX3SeQCJVQ0MgLFqbuf447Cnh7uxc3xUaQMwZmKFwcYzEkBNCNLSdjrMFSbkr08=@vger.kernel.org X-Gm-Message-State: AOJu0YwsW7BGPLw2pxWWojqf5uJ8y819WPKld7zaT6tVXzlyqpP0oOhj I9u/8rKOr3SCYsv9GHXi2/dgPjvat4OnwGML4wNOE4tdSIpq8tOWh5fX X-Gm-Gg: ATEYQzzvCfDdtBX1PAoTFN1jxodsBNVAiNmgjtR8i+o2KvbUKzw76iGVykWai5scPkl n27id0ORaSRSuqld+lvnLBwRtJkfWhfEbkul67mbASpHrjSQR5Xh1EDIyuXhihspvDiaF+WsZ+a gwpVSAS2UiTGIbb1KAjxAcNitkdokFvBpz4vrQ9bHN1WZTG6tvVICG/5DuRI1rAuZmZApBDf+Re AK+MXxMfsdFhZ7ogPNtnw+JWzj9NxCRAzla9qeQ4HuO2lUvIXTH9zH/X8UkfX9PI+aal7sk9Tns SuyD/h4mPT3gajkt/4GqV7pk+Kn+U7gn42Z6e+TnHUlsXvS5JjlDX8PTXMpJWGCfssPkwNllW+6 yNHgTuvknZpK2ROw8URmuxKG4nhSOVUSHAYhg89uSpvBwoXZc75Gaq+NsdYMWJi37UyOXL7z55b MJFtiJ3AWcG8viKb06lazavqBc63QJv2a2yi3lJToTPjd0tu2vyvhazWs= X-Received: by 2002:a05:6a00:13a9:b0:81e:6d2d:a121 with SMTP id d2e1a72fcca58-82a8c3c3239mr4749010b3a.62.1774071916251; Fri, 20 Mar 2026 22:45:16 -0700 (PDT) Received: from ryzen ([2601:644:8000:5b5d::8bd]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82b0409c681sm4338783b3a.37.2026.03.20.22.45.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Mar 2026 22:45:15 -0700 (PDT) From: Rosen Penev To: stable@vger.kernel.org Cc: Alex Deucher , =?UTF-8?q?Christian=20K=C3=B6nig?= , "Pan, Xinhui" , David Airlie , Daniel Vetter , Harry Wentland , Leo Li , Rodrigo Siqueira , Evan Quan , Mario Limonciello , Sasha Levin , Rosen Penev , Lijo Lazar , Ma Jun , Greg Kroah-Hartman , Srinivasan Shanmugam , "Mario Limonciello (AMD)" , Zhigang Luo , Bert Karwatzki , Ray Wu , Wayne Lin , Roman Li , Hersen Wu , =?UTF-8?q?Timur=20Krist=C3=B3f?= , Alex Hung , decce6 , Wentao Liang , amd-gfx@lists.freedesktop.org (open list:RADEON and AMDGPU DRM DRIVERS), dri-devel@lists.freedesktop.org (open list:DRM DRIVERS), linux-kernel@vger.kernel.org (open list) Subject: [PATCHv3 for 6.1 2/4] drm/amdgpu: clarify DC checks Date: Fri, 20 Mar 2026 22:44:51 -0700 Message-ID: <20260321054453.19683-3-rosenp@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260321054453.19683-1-rosenp@gmail.com> References: <20260321054453.19683-1-rosenp@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable From: Alex Deucher [ Upstream commit d09ef243035b75a6d403ebfeb7e87fa20d7e25c6 ] There are several places where we don't want to check if a particular asic could support DC, but rather, if DC is enabled. Set a flag if DC is enabled and check for that rather than if a device supports DC or not. Acked-by: Christian K=C3=B6nig Signed-off-by: Alex Deucher Signed-off-by: Rosen Penev --- drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 + drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c | 2 +- drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 32 ++++++++++--------- drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 4 +-- drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 2 +- .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 1 + .../gpu/drm/amd/pm/powerplay/amd_powerplay.c | 2 +- 8 files changed, 25 insertions(+), 21 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdg= pu/amdgpu.h index dcb5de01a220..c4287e09658f 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h @@ -1071,6 +1071,7 @@ struct amdgpu_device { struct work_struct reset_work; bool job_hang; + bool dc_enabled; }; static inline struct amdgpu_device *drm_to_adev(struct drm_device *ddev) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c b/drivers/gpu/drm/amd= /amdgpu/amdgpu_acpi.c index 5fa7f6d8aa30..9ced0c60ec8b 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c @@ -857,7 +857,7 @@ int amdgpu_acpi_init(struct amdgpu_device *adev) struct amdgpu_atif *atif =3D &amdgpu_acpi_priv.atif; if (atif->notifications.brightness_change) { - if (amdgpu_device_has_dc_support(adev)) { + if (adev->dc_enabled) { #if defined(CONFIG_DRM_AMD_DC) struct amdgpu_display_manager *dm =3D &adev->dm; diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c b/drivers/gpu/drm/= amd/amdgpu/amdgpu_debugfs.c index 3cca3f07f34d..11bfbf1d6a3d 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c @@ -1981,7 +1981,7 @@ int amdgpu_debugfs_init(struct amdgpu_device *adev) amdgpu_ta_if_debugfs_init(adev); #if defined(CONFIG_DRM_AMD_DC) - if (amdgpu_device_has_dc_support(adev)) + if (adev->dc_enabled) dtn_debugfs_init(adev); #endif diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/a= md/amdgpu/amdgpu_device.c index 535cc74c5880..a43f18defa7a 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c @@ -4402,25 +4402,27 @@ int amdgpu_device_resume(struct drm_device *dev, bo= ol fbcon) amdgpu_ras_resume(adev); - /* - * Most of the connector probing functions try to acquire runtime pm - * refs to ensure that the GPU is powered on when connector polling is - * performed. Since we're calling this from a runtime PM callback, - * trying to acquire rpm refs will cause us to deadlock. - * - * Since we're guaranteed to be holding the rpm lock, it's safe to - * temporarily disable the rpm helpers so this doesn't deadlock us. - */ + if (adev->mode_info.num_crtc) { + /* + * Most of the connector probing functions try to acquire runtime pm + * refs to ensure that the GPU is powered on when connector polling is + * performed. Since we're calling this from a runtime PM callback, + * trying to acquire rpm refs will cause us to deadlock. + * + * Since we're guaranteed to be holding the rpm lock, it's safe to + * temporarily disable the rpm helpers so this doesn't deadlock us. + */ #ifdef CONFIG_PM - dev->dev->power.disable_depth++; + dev->dev->power.disable_depth++; #endif - if (!amdgpu_device_has_dc_support(adev)) - drm_helper_hpd_irq_event(dev); - else - drm_kms_helper_hotplug_event(dev); + if (!adev->dc_enabled) + drm_helper_hpd_irq_event(dev); + else + drm_kms_helper_hotplug_event(dev); #ifdef CONFIG_PM - dev->dev->power.disable_depth--; + dev->dev->power.disable_depth--; #endif + } adev->in_suspend =3D false; if (adev->enable_mes) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c b/drivers/gpu/drm/= amd/amdgpu/amdgpu_display.c index 98cce09684f2..f9692e724409 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c @@ -534,7 +534,7 @@ uint32_t amdgpu_display_supported_domains(struct amdgpu= _device *adev, */ if ((bo_flags & AMDGPU_GEM_CREATE_CPU_GTT_USWC) && amdgpu_bo_support_uswc(bo_flags) && - amdgpu_device_has_dc_support(adev) && + adev->dc_enabled && adev->mode_info.gpu_vm_support) domain |=3D AMDGPU_GEM_DOMAIN_GTT; #endif @@ -1330,7 +1330,7 @@ int amdgpu_display_modeset_create_props(struct amdgpu= _device *adev) "dither", amdgpu_dither_enum_list, sz); - if (amdgpu_device_has_dc_support(adev)) { + if (adev->dc_enabled) { adev->mode_info.abm_level_property =3D drm_property_create_range(adev_to_drm(adev), 0, "abm level", 0, 4); diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/= amdgpu/amdgpu_drv.c index 055e05b2cb22..3c01bb464248 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c @@ -2530,7 +2530,7 @@ static int amdgpu_runtime_idle_check_display(struct d= evice *dev) if (ret) return ret; - if (amdgpu_device_has_dc_support(adev)) { + if (adev->dc_enabled) { struct drm_crtc *crtc; drm_for_each_crtc(crtc, drm_dev) { diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gp= u/drm/amd/display/amdgpu_dm/amdgpu_dm.c index 213054071904..7eff2b94ab66 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c @@ -4842,6 +4842,7 @@ static int dm_early_init(void *handle) adev_to_drm(adev)->dev, &dev_attr_s3_debug); #endif + adev->dc_enabled =3D true; return 0; } diff --git a/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c b/drivers/gpu= /drm/amd/pm/powerplay/amd_powerplay.c index ab8ae7464664..9bf85ca607c3 100644 --- a/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c +++ b/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c @@ -1567,7 +1567,7 @@ static void pp_pm_compute_clocks(void *handle) struct pp_hwmgr *hwmgr =3D handle; struct amdgpu_device *adev =3D hwmgr->adev; - if (!amdgpu_device_has_dc_support(adev)) { + if (!adev->dc_enabled) { amdgpu_dpm_get_active_displays(adev); adev->pm.pm_display_cfg.num_display =3D adev->pm.dpm.new_active_crtc_cou= nt; adev->pm.pm_display_cfg.vrefresh =3D amdgpu_dpm_get_vrefresh(adev); -- 2.53.0