From nobody Sat Apr 4 03:27:29 2026 Received: from mail-pg1-f181.google.com (mail-pg1-f181.google.com [209.85.215.181]) (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 F0DC0361679 for ; Sat, 21 Mar 2026 05:45:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774071916; cv=none; b=IvilY7ie5d66o1c3+UhgfLNclcMrJgJFwkXCuxP9wJSWGmOxF6IrJXtLQSdH0pyRUHdo2J+KPAu3q9yDdQaSbd5vqBTJ7+adIn/foNefrJX13jExhzNptUA+FDvx3xAa+TvzP1ikDUFsYSrzJyO08qePfXaTxB49OzePKpx5NZ8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774071916; c=relaxed/simple; bh=i7nQ2WIpVHkGr58Dz5ea9MVfRGb+mu/aUFRQk/jxX/I=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=qNsJmiAWLxY7uNVMa14rD3UfCb9onf3DOAe3g1O3D6a5qKY4zAJHAJO/Fh+sVdEFuP27y/3e1JdfqN50pmQYWUpMs0qEba+YTduzVWCCRBEzvmKOuWLis17yfxaGv00cTihaHBQWEfV/jjxSfhCxpmX9QRo+xbRReOLRzvsik4M= 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=PtOFOYQB; arc=none smtp.client-ip=209.85.215.181 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="PtOFOYQB" Received: by mail-pg1-f181.google.com with SMTP id 41be03b00d2f7-c741bd1ad11so1241410a12.1 for ; Fri, 20 Mar 2026 22:45:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1774071914; x=1774676714; 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=+adMGPlhVk0bbFqFiUYYCeP0eNPb1PCXZHc4YqFFXSQ=; b=PtOFOYQBqPllLweqqvRgJvYYrEgzytUmksnJwKFEi3GXuWkp/nyLDwsHN/f1HyEMp2 NY41rbRY3XJwP4Ed0/ZBdDD5VXey15TI3he1Hk/61QYhrfAoWXwRH+8uyS7L7Mbz0nKZ fJTIK4VE+D0r1Nrha5EpDSy1JrBc7G8EYhtWBxmZdoFWTUAwmhMyBTOngzKvsIrxM8LM jHkCwLQ60APIfO+ipe+R6gXzb7URWg1BE/7m4U6KlIs/mBSqaT34HT0FAAc29XrzJO3T gDHq3IKRUYRijl5y2aEOWDxVHk0SNOlk4vOt+mdapC6o1amyQHTJeMlQkbgO1ePJb5Ec 9Qdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774071914; x=1774676714; 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=+adMGPlhVk0bbFqFiUYYCeP0eNPb1PCXZHc4YqFFXSQ=; b=iB+IQwYDv/UTq+Ck0Ns3RxgIeKjhoDrwF5s6HvL3zEemr1mmdi2DnEAOqwwkZCjq4S j+ytwrgfbZcfNfV27IJEe5C9X002lhn5Fw7/+5/lXHKtdWCLnVfJlIJgGcWj06AspRcT SauJU1Hzo1HPtrS2cg6RzgjoZGEOGQLlOu/iefcfhcohYl05jh6Kq4Kc7QmsumJnOMy8 UXcCd7/6GBNczWHWW9QuVxchzEYqUHz2xUEBTLTLGbK27NScTx0gFu7FPFkFLNK6Xc1F vZnk+ekWyczepk766XFWRV7mGbM5mpka/73NI/l2bM1eza+Li1GcbXggauvxZA1b1F/l fRVQ== X-Forwarded-Encrypted: i=1; AJvYcCUhOGIdkLIQhLm8Lrqx22UjB/MRLSLDdeegkc0duZ0XweE+fEIjcuMLhmYXD7jxwJEvv8nlebTM5jY/Plc=@vger.kernel.org X-Gm-Message-State: AOJu0Yxx6FTQgRQ9Q4b5LX9LexVPI4TtNi1U78SLpaCmpRcO6+YntjiG 2EKuCxfTjPIxBfj/Rin6oj2XKcXAEadmTpTzhsfwoaHuY230vK/QmKoM X-Gm-Gg: ATEYQzx7BZcE/nvAuZz+CsEfl7BlSWpnehbe9bzDqqgQsoP7FSJtCMdUdf8D+MOTfnd 9Re/k1Fgs+u/XJlaUNBAabXocjoBOc8kudRsKqu5eR30SGTL17tjgfRwVPS2dpagE5kE0Y5+No8 uOI5ruL9t6ZGxAzRo+S1LxJA1oe+HlomsuYrJhAhbhYRH1/BqdR18lc6ay/A3j6EjH4xPNcOH2C OHnJRjLVtZyeQAUEylhdF6TI4iLfCmzPIIfHVjXrF8uxjJ0HPftis0raZaucn1hNgvxjRlaOudm 1O6JMgojnr+Oimyb4MrN2HtB4v+oxhhHePHiMN8Xj4XZg1BY29KAbpUra4XZ8Wu3YZut9SGuQ3z SYv1ErWLHRpI3HFQcreJC/i9qBykZf4NRXkOhBIA0rqj4bxytkqjQNyVUjPfvGehIJ6W6xOmMej QeTu5KKHvSQjV3jok7zi0lL71bnSPEi241+V85LFIpeHUwDSf0OzAb0tM= X-Received: by 2002:a05:6a20:9146:b0:398:8bd7:4f80 with SMTP id adf61e73a8af0-39bcec0692amr4985522637.46.1774071914235; Fri, 20 Mar 2026 22:45:14 -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.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Mar 2026 22:45:13 -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 1/4] drm/amdgpu: use proper DC check in amdgpu_display_supported_domains() Date: Fri, 20 Mar 2026 22:44:50 -0700 Message-ID: <20260321054453.19683-2-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 96ce96f8773da4814622fd97e5226915a2c30706 ] amdgpu_device_asic_has_dc_support() just checks the asic itself. amdgpu_device_has_dc_support() is a runtime check which not only checks the asic, but also other things in the driver like whether virtual display is enabled. We want the latter here. Acked-by: Christian K=C3=B6nig Signed-off-by: Alex Deucher Signed-off-by: Rosen Penev Acked-by: Christian K=C3=B6nig for backporting t= his series and those two additional patches. --- drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c b/drivers/gpu/drm/= amd/amdgpu/amdgpu_display.c index cd0bccc95205..98cce09684f2 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_asic_has_dc_support(adev->asic_type) && + amdgpu_device_has_dc_support(adev) && adev->mode_info.gpu_vm_support) domain |=3D AMDGPU_GEM_DOMAIN_GTT; #endif -- 2.53.0 From nobody Sat Apr 4 03:27:29 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 Acked-by: Christian K=C3=B6nig for backporting t= his series and those two additional patches. --- 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 From nobody Sat Apr 4 03:27:29 2026 Received: from mail-pg1-f172.google.com (mail-pg1-f172.google.com [209.85.215.172]) (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 2F94B366067 for ; Sat, 21 Mar 2026 05:45:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.172 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774071920; cv=none; b=XrTqnS+dd2kvHw3hJGoHbCxkQVk6VLCJH/fqvmuVrRmt0l1M+uwvMOYMIGcpSMBvv+GUst+6ypm1dE/GVaXQ2T1KYYDvbzBwVBzZszMpVk2xpQExGhIgBH1G3kWPIKE/zrrocYCh4hnNOnN0m4jaPsXa7mmN3OP8w1ZcoLiE3yc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774071920; c=relaxed/simple; bh=OTEGbLxfG/+JbD147AvwQimPpqoFOw6uqccG8cJ2Ut0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Uy8+81QHTU7CaAecxasZwdpuQ8zGom51PVRTEcHN3Y1RmRq0udCDA4USISCXP4nhuyy7rde0k/SW6Stf3NIaE6Exg1R7ptTfewt9WsXJYr6BI5zbl/9unbHPOfcIs3fP6bBejADm07g+9wTZLl1jHQMXfvgiO4Ej0W5CmLitFeg= 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=gupGfsZU; arc=none smtp.client-ip=209.85.215.172 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="gupGfsZU" Received: by mail-pg1-f172.google.com with SMTP id 41be03b00d2f7-c736261ee8dso952308a12.1 for ; Fri, 20 Mar 2026 22:45:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1774071918; x=1774676718; 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=o1e3VlB8M6gxe/ov0H5wYQTMPrywihYmSqb8em+k4zw=; b=gupGfsZUr3DeIfBMVhfRA+03mHymDIamsPLtxJ2He0Sel1PcQ/y7qteZuDYGepbCzt pQS3Jqp41oQZAFCT5s4nzhx8AZN8IvtaM4soszc/Ujku0dYV+40K23Q1Pavilm+2q/T5 OCwS5pb+qy8p42Ij+4JSR0cxzhuEzKhWI+2u0t/tj2QWai4NVdwoXUvw8MvcNiSx78nv yFh6gScw/VQgvOQAFYvxFZosia4qltIAda8ym6GDAziEiLznnQ7ouOgXjgWRpWPSPW0K QhVKTlCnlGg+Izx114vf86XziEV7J8Usla9s+zHKTw77g/weGXvEKvND3fwCND2nO0yp AYLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774071918; x=1774676718; 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=o1e3VlB8M6gxe/ov0H5wYQTMPrywihYmSqb8em+k4zw=; b=ExkrSINkkX/zgTGLBbZSOzwCTB6eErQTSh6BfbLnSSS/fCg+i7ZXl9ZHiGsDRgEQD7 8ee41x4z88YtZEO07Cp+4FwRjosAeCdu6c74Qz1derafaMP5j6wD3yMJBZUCLHxTxQG2 +61fageTqFlBhP71FzYzpCRSwSrjAOZR8ScibjPKLZmdlOZVEhqrzmn9gMPp+mSiJ4rh 5YYxGHuHVqGvjEbX3rsPkroO3REyB4I2WVOlv1UfSlO77MF/wPyRVRYBL6Gul9nI9ZA5 U+yxTijgoOPRQA7PM+I+Ls+kaySrMinD20yRHVfa6/lx6jAoak3MlxSMN1ZRseDtYIaX Sjxg== X-Forwarded-Encrypted: i=1; AJvYcCUCB7eAdfmPQn+ezsUdTcAYAzu2L67J8s0PmGUBbSEZ/u0h1mDcQefxSXzj9rIZ0yD1m3QW/UbwzN6G0TI=@vger.kernel.org X-Gm-Message-State: AOJu0YylHts8Ryk/WjyoLrcWQSbh2OWEMKEh8qoS05bFSNA3vpBWCKzX CQ8aOTZG3O5kw6pvHIAUwQsjG3aY0l5y30Tz+sJCiLdvxi2iOgrvqhZd X-Gm-Gg: ATEYQzzgR3LPGJ0OblD/6dmXTkDBgYol0NQbIQ87fxshWFEPYmFbUkow95721yEovqN aBZliYax4Ayo/njOi4IPoo8KmYYuqfMqelaTVJKPef/a9vkzSDWo/J9Zkh9y+pa4MiV+p+zgEKf bCsMEn2ShcX4FaS0AmVcZBXXIwEUgG1wfxKebG0Thnoxscp+aG2pMZxemYxnLnYdHs43u+cBdXZ NzFjt3hZjUkrUapfWDVL7/3dfQ5+Zsc42/4iF3D0v1XUIA0/AtoNlVSkIgwlNx3cduULW9j6ocW TeNmZAxvnwu4X9a5/x/aWmbEpGSWBdZOc3UdmvSH5Z442TEQyPFbSwaXqqqfkfKKMUoeZHPG0gn E8tuL6U7wYxr1Ez0NcRTuMienQDo9zM+eH72XpHXgR5pI4zDGXy5pqaRsrfU8iqy0ivnUcUM4qC pLZJE/0A33zTMKVbOQmzdf4ES3Yb80hhLac0bWkLWAAf+ylBFk1C8Babg= X-Received: by 2002:a05:6a21:6d99:b0:398:7357:bb81 with SMTP id adf61e73a8af0-39bce9f0d74mr5250717637.15.1774071918403; Fri, 20 Mar 2026 22:45:18 -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.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Mar 2026 22:45:17 -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 3/4] drm/amd/display: Add pixel_clock to amd_pp_display_configuration Date: Fri, 20 Mar 2026 22:44:52 -0700 Message-ID: <20260321054453.19683-4-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: Timur Krist=C3=B3f [ Upstream commit b515dcb0dc4e85d8254f5459cfb32fce88dacbfb ] This commit adds the pixel_clock field to the display config struct so that power management (DPM) can use it. We currently don't have a proper bandwidth calculation on old GPUs with DCE 6-10 because dce_calcs only supports DCE 11+. So the power management (DPM) on these GPUs may need to make ad-hoc decisions for display based on the pixel clock. Also rename sym_clock to pixel_clock in dm_pp_single_disp_config to avoid confusion with other code where the sym_clock refers to the DisplayPort symbol clock. Signed-off-by: Timur Krist=C3=B3f Signed-off-by: Alex Deucher Signed-off-by: Rosen Penev Acked-by: Christian K=C3=B6nig for backporting t= his series and those two additional patches. --- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c | 1 + drivers/gpu/drm/amd/display/dc/clk_mgr/dce110/dce110_clk_mgr.c | 2 +- drivers/gpu/drm/amd/display/dc/dm_services_types.h | 2 +- drivers/gpu/drm/amd/include/dm_pp_interface.h | 1 + 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c b/dri= vers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c index 75284e2cec74..c4e7d9212cd4 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_pp_smu.c @@ -97,6 +97,7 @@ bool dm_pp_apply_display_requirements( const struct dm_pp_single_disp_config *dc_cfg =3D &pp_display_cfg->disp_configs[i]; adev->pm.pm_display_cfg.displays[i].controller_id =3D dc_cfg->pipe_idx = + 1; + adev->pm.pm_display_cfg.displays[i].pixel_clock =3D dc_cfg->pixel_clock; } amdgpu_dpm_display_configuration_change(adev, &adev->pm.pm_display_cfg); diff --git a/drivers/gpu/drm/amd/display/dc/clk_mgr/dce110/dce110_clk_mgr.c= b/drivers/gpu/drm/amd/display/dc/clk_mgr/dce110/dce110_clk_mgr.c index fb2f154f4fda..bce53ab36f3e 100644 --- a/drivers/gpu/drm/amd/display/dc/clk_mgr/dce110/dce110_clk_mgr.c +++ b/drivers/gpu/drm/amd/display/dc/clk_mgr/dce110/dce110_clk_mgr.c @@ -164,7 +164,7 @@ void dce110_fill_display_configs( stream->link->cur_link_settings.link_rate; cfg->link_settings.link_spread =3D stream->link->cur_link_settings.link_spread; - cfg->sym_clock =3D stream->phy_pix_clk; + cfg->pixel_clock =3D stream->phy_pix_clk; /* Round v_refresh*/ cfg->v_refresh =3D stream->timing.pix_clk_100hz * 100; cfg->v_refresh /=3D stream->timing.h_total; diff --git a/drivers/gpu/drm/amd/display/dc/dm_services_types.h b/drivers/g= pu/drm/amd/display/dc/dm_services_types.h index b52ba6ffabe1..954b3aa65adb 100644 --- a/drivers/gpu/drm/amd/display/dc/dm_services_types.h +++ b/drivers/gpu/drm/amd/display/dc/dm_services_types.h @@ -127,7 +127,7 @@ struct dm_pp_single_disp_config { uint32_t src_height; uint32_t src_width; uint32_t v_refresh; - uint32_t sym_clock; /* HDMI only */ + uint32_t pixel_clock; /* Pixel clock in KHz (for HDMI only: normalized) */ struct dc_link_settings link_settings; /* DP only */ }; diff --git a/drivers/gpu/drm/amd/include/dm_pp_interface.h b/drivers/gpu/dr= m/amd/include/dm_pp_interface.h index 1d93a0c574c9..ee4212cc93d1 100644 --- a/drivers/gpu/drm/amd/include/dm_pp_interface.h +++ b/drivers/gpu/drm/amd/include/dm_pp_interface.h @@ -66,6 +66,7 @@ struct single_display_configuration uint32_t view_resolution_cy; enum amd_pp_display_config_type displayconfigtype; uint32_t vertical_refresh; /* for active display */ + uint32_t pixel_clock; /* Pixel clock in KHz (for HDMI only: normalized) */ }; #define MAX_NUM_DISPLAY 32 -- 2.53.0 From nobody Sat Apr 4 03:27:29 2026 Received: from mail-pf1-f170.google.com (mail-pf1-f170.google.com [209.85.210.170]) (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 6ADA4361679 for ; Sat, 21 Mar 2026 05:45:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774071925; cv=none; b=OWftcdzsEaY//3VM/NijBg6Gf6IZMuTgcisJDDdLnRgV22M/z3av3tW/2UPEhBioNFGINGl60y5Q4UHXrOVYEm4olQwB+I+66jeTgWl7V2Dn1hqlIuSBfjcvk+gqalYrP2o1cTxEzFC+clG2sw83kgay5mGMHa625Tc4S+Eif8U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774071925; c=relaxed/simple; bh=kNMlH2XhVonaDfaqvjgoER1rDhjPF7i5Jkwi4w8bsds=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=Y+JvaoRvqTMgZ+jRp+liS8T+6xlfvX/jckPXkP7rwfLiW2BGG123ESWULXqO+CnJjd5sWRReAqv+Ki1ZsTXizHYPAB4nqKG0SgE1NvpOEKBtE5Pqs/i7dIt6VPfWjbsdyzUgSnk5djGvIdwQKRgkPMUY3IuEn7ywbnQCS0NUljk= 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=gJn0s2I1; arc=none smtp.client-ip=209.85.210.170 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="gJn0s2I1" Received: by mail-pf1-f170.google.com with SMTP id d2e1a72fcca58-82985f42664so1770062b3a.0 for ; Fri, 20 Mar 2026 22:45:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1774071921; x=1774676721; 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=NjvyyKp+kerkpBKvLgO2U9Ah6zaz9YuhJLQKe3qODCg=; b=gJn0s2I1/YYVzKHlcA5Ku+c90ry3O6vz12OAc0c98ouYVN9hL3EH7KK83k/nTB2qvu 1BdU0uE9Zodc80i5qs1HWExbDlOu02m7vVm6iUzKaTmMohOnMDi4WEtD7TNQmvrw1qJ8 zvq65dvNQ4MViVJ9D8JLtrfxyZSKDu/v8Eh/Ngu1b/JAokeFLLSPoFFOYLQUUFCCXmBC AtW2ppaxmmq0LmgIJxpMqLXmpCJ/sBljyUtR2u9wEllU/A/BkyahuWhrTgSHj/D5RWB+ YbwvkZxp4NzWrV730QFkYKCCsK2mdRag5OYTXGzOVHUbcNXYJlKBUHyNq5rsqofXwb/T OT7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774071921; x=1774676721; 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=NjvyyKp+kerkpBKvLgO2U9Ah6zaz9YuhJLQKe3qODCg=; b=Ac6FNVUlzi0T7bMhKeOwoS+4qcKbQ20WnYbS85u5WZpCVE8kIhfmhut7qei2h2vq1L +FeQBon7yacx6nXW+C3AzKgI4aLSMecnEVfktPBeZOdBp3vpwEBW2+uWQr/9jm1S9H19 lbO7qvljWx67GI+1KD/DSf8ckCG3w+0+3dfJD8L8b88+Rk22SWYdnUGMf6cByfjQJjV7 ZEFKmP9nAIeEHdVCN1u6dxoJ/G0pUXH4jBkk4Aj4pA0rU/qhb3ecSbQz1HRrIB9k7nq5 5FDvnLUrW0lANx7tnLZiQneC++/gY6PytLRoGI0lXybS/jyRBheOrxGTFQLdC3axzxp0 wxLg== X-Forwarded-Encrypted: i=1; AJvYcCXfPl0tCwNdVBhZ7c4EBDgmoUR8U3fahlQtB/1tgYepHGZpF4DZsP3ze77Rkw7a7sbmL2YmsVHty0Pdr9w=@vger.kernel.org X-Gm-Message-State: AOJu0YxCUWn+ECacZv7vCwrV8W1e40U8kWD/BQZ+cGCaDiHq+lY81iDm k736+vzpssTZR4uHWvH/ELM3e07bcDdJlqF69CeQvxCKqmbGCSJ0oPbU X-Gm-Gg: ATEYQzxHCJvOAFfwDu9xFTRzNOYmSHGjWJ6aKoSGZW5RaQwVI3+K42M7rF6C7WjkQPN KazzG4RF273/faYG6h3DoRb/q4QHKnuh+f7uCEziBokursWf9gVg+sm9Vn0yPqtL9GubenlRPxQ 5mawu74Zc+hr9+3K2AvhY7rWM/MskeJI0MmiXMeDTdKiZupbLIpDBLuzKzZJJosZ/R63b3SFpG1 FuTc+QVK7xXGCzimtf0yZkvfvpaHE9atQs/vjFwHylEyYqk9zF8fPSK1AsjDhd3886V6ojtu6sW W2hXgtJV/IkT4YoN9nF6xpEDz8MH8Z4+EE5W9yumrR9d+WD2mpptJ1qKMc5Yoxytv6U8zpqJq6l HEgURUshJARPZ4uF++HZqv2OHWTZX7REviWbWj2ucL8Rlpu37Y55N3Hbhwzeq4y1w0obP1I2DRZ lSzL9xzZywAzFjUrVGlk8x8hsZ1XA8GWcXFPuDM1xQ1m0i+SVnfvQFzZh/DFjg6y3RbA== X-Received: by 2002:a05:6a00:1f0f:b0:81a:7d1e:8132 with SMTP id d2e1a72fcca58-82a8c2821a1mr4070784b3a.21.1774071920566; Fri, 20 Mar 2026 22:45:20 -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.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 20 Mar 2026 22:45:20 -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 4/4] drm/amd/pm: Use pm_display_cfg in legacy DPM (v2) Date: Fri, 20 Mar 2026 22:44:53 -0700 Message-ID: <20260321054453.19683-5-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: Timur Krist=C3=B3f [ Upstream commit 9d73b107a61b73e7101d4b728ddac3d2c77db111 ] This commit is necessary for DC to function well with chips that use the legacy power management code, ie. SI and KV. Communicate display information from DC to the legacy PM code. Currently DC uses pm_display_cfg to communicate power management requirements from the display code to the DPM code. However, the legacy (non-DC) code path used different fields and therefore could not take into account anything from DC. Change the legacy display code to fill the same pm_display_cfg struct as DC and use the same in the legacy DPM code. To ease review and reduce churn, this commit does not yet delete the now unneeded code, that is done in the next commit. v2: Rebase. Fix single_display in amdgpu_dpm_pick_power_state. Signed-off-by: Timur Krist=C3=B3f Signed-off-by: Alex Deucher Signed-off-by: Rosen Penev Acked-by: Christian K=C3=B6nig for backporting t= his series and those two additional patches. --- drivers/gpu/drm/amd/pm/amdgpu_dpm_internal.c | 67 +++++++++++++++++++ .../gpu/drm/amd/pm/inc/amdgpu_dpm_internal.h | 2 + drivers/gpu/drm/amd/pm/legacy-dpm/kv_dpm.c | 4 +- .../gpu/drm/amd/pm/legacy-dpm/legacy_dpm.c | 6 +- drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c | 65 ++++++------------ .../gpu/drm/amd/pm/powerplay/amd_powerplay.c | 11 +-- 6 files changed, 97 insertions(+), 58 deletions(-) diff --git a/drivers/gpu/drm/amd/pm/amdgpu_dpm_internal.c b/drivers/gpu/drm= /amd/pm/amdgpu_dpm_internal.c index 2d2d2d5e6763..9ef965e4a92e 100644 --- a/drivers/gpu/drm/amd/pm/amdgpu_dpm_internal.c +++ b/drivers/gpu/drm/amd/pm/amdgpu_dpm_internal.c @@ -100,3 +100,70 @@ u32 amdgpu_dpm_get_vrefresh(struct amdgpu_device *adev) return vrefresh; } + +void amdgpu_dpm_get_display_cfg(struct amdgpu_device *adev) +{ + struct drm_device *ddev =3D adev_to_drm(adev); + struct amd_pp_display_configuration *cfg =3D &adev->pm.pm_display_cfg; + struct single_display_configuration *display_cfg; + struct drm_crtc *crtc; + struct amdgpu_crtc *amdgpu_crtc; + struct amdgpu_connector *conn; + int num_crtcs =3D 0; + int vrefresh; + u32 vblank_in_pixels, vblank_time_us; + + cfg->min_vblank_time =3D 0xffffffff; /* if the displays are off, vblank t= ime is max */ + + if (adev->mode_info.num_crtc && adev->mode_info.mode_config_initialized) { + list_for_each_entry(crtc, &ddev->mode_config.crtc_list, head) { + amdgpu_crtc =3D to_amdgpu_crtc(crtc); + + /* The array should only contain active displays. */ + if (!amdgpu_crtc->enabled) + continue; + + conn =3D to_amdgpu_connector(amdgpu_crtc->connector); + display_cfg =3D &adev->pm.pm_display_cfg.displays[num_crtcs++]; + + if (amdgpu_crtc->hw_mode.clock) { + vrefresh =3D drm_mode_vrefresh(&amdgpu_crtc->hw_mode); + + vblank_in_pixels =3D + amdgpu_crtc->hw_mode.crtc_htotal * + (amdgpu_crtc->hw_mode.crtc_vblank_end - + amdgpu_crtc->hw_mode.crtc_vdisplay + + (amdgpu_crtc->v_border * 2)); + + vblank_time_us =3D + vblank_in_pixels * 1000 / amdgpu_crtc->hw_mode.clock; + + /* The legacy (non-DC) code has issues with mclk switching + * with refresh rates over 120 Hz. Disable mclk switching. + */ + if (vrefresh > 120) + vblank_time_us =3D 0; + + /* Find minimum vblank time. */ + if (vblank_time_us < cfg->min_vblank_time) + cfg->min_vblank_time =3D vblank_time_us; + + /* Find vertical refresh rate of first active display. */ + if (!cfg->vrefresh) + cfg->vrefresh =3D vrefresh; + } + + if (amdgpu_crtc->crtc_id < cfg->crtc_index) { + /* Find first active CRTC and its line time. */ + cfg->crtc_index =3D amdgpu_crtc->crtc_id; + cfg->line_time_in_us =3D amdgpu_crtc->line_time; + } + + display_cfg->controller_id =3D amdgpu_crtc->crtc_id; + display_cfg->pixel_clock =3D conn->pixelclock_for_modeset; + } + } + + cfg->display_clk =3D adev->clock.default_dispclk; + cfg->num_display =3D num_crtcs; +} diff --git a/drivers/gpu/drm/amd/pm/inc/amdgpu_dpm_internal.h b/drivers/gpu= /drm/amd/pm/inc/amdgpu_dpm_internal.h index 5c2a89f0d5d5..8be11510cd92 100644 --- a/drivers/gpu/drm/amd/pm/inc/amdgpu_dpm_internal.h +++ b/drivers/gpu/drm/amd/pm/inc/amdgpu_dpm_internal.h @@ -29,4 +29,6 @@ u32 amdgpu_dpm_get_vblank_time(struct amdgpu_device *adev= ); u32 amdgpu_dpm_get_vrefresh(struct amdgpu_device *adev); +void amdgpu_dpm_get_display_cfg(struct amdgpu_device *adev); + #endif diff --git a/drivers/gpu/drm/amd/pm/legacy-dpm/kv_dpm.c b/drivers/gpu/drm/a= md/pm/legacy-dpm/kv_dpm.c index a75c04d510fd..de25e63abc7b 100644 --- a/drivers/gpu/drm/amd/pm/legacy-dpm/kv_dpm.c +++ b/drivers/gpu/drm/amd/pm/legacy-dpm/kv_dpm.c @@ -2312,7 +2312,7 @@ static void kv_apply_state_adjust_rules(struct amdgpu= _device *adev, if (pi->sys_info.nb_dpm_enable) { force_high =3D (mclk >=3D pi->sys_info.nbp_memory_clock[3]) || - pi->video_start || (adev->pm.dpm.new_active_crtc_count >=3D 3) || + pi->video_start || (adev->pm.pm_display_cfg.num_display >=3D 3) || pi->disable_nb_ps3_in_battery; ps->dpm0_pg_nb_ps_lo =3D force_high ? 0x2 : 0x3; ps->dpm0_pg_nb_ps_hi =3D 0x2; @@ -2371,7 +2371,7 @@ static int kv_calculate_nbps_level_settings(struct am= dgpu_device *adev) return 0; force_high =3D ((mclk >=3D pi->sys_info.nbp_memory_clock[3]) || - (adev->pm.dpm.new_active_crtc_count >=3D 3) || pi->video_start); + (adev->pm.pm_display_cfg.num_display >=3D 3) || pi->video_start); if (force_high) { for (i =3D pi->lowest_valid; i <=3D pi->highest_valid; i++) diff --git a/drivers/gpu/drm/amd/pm/legacy-dpm/legacy_dpm.c b/drivers/gpu/d= rm/amd/pm/legacy-dpm/legacy_dpm.c index 2fd97f5cf8f6..1aa435ddde9a 100644 --- a/drivers/gpu/drm/amd/pm/legacy-dpm/legacy_dpm.c +++ b/drivers/gpu/drm/amd/pm/legacy-dpm/legacy_dpm.c @@ -797,8 +797,7 @@ static struct amdgpu_ps *amdgpu_dpm_pick_power_state(st= ruct amdgpu_device *adev, int i; struct amdgpu_ps *ps; u32 ui_class; - bool single_display =3D (adev->pm.dpm.new_active_crtc_count < 2) ? - true : false; + bool single_display =3D adev->pm.pm_display_cfg.num_display < 2; /* check if the vblank period is too short to adjust the mclk */ if (single_display && adev->powerplay.pp_funcs->vblank_too_short) { @@ -1003,7 +1002,8 @@ void amdgpu_legacy_dpm_compute_clocks(void *handle) { struct amdgpu_device *adev =3D (struct amdgpu_device *)handle; - amdgpu_dpm_get_active_displays(adev); + if (!adev->dc_enabled) + amdgpu_dpm_get_display_cfg(adev); amdgpu_dpm_change_power_state_locked(adev); } diff --git a/drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c b/drivers/gpu/drm/a= md/pm/legacy-dpm/si_dpm.c index 0972d1a58579..064d406e9af7 100644 --- a/drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c +++ b/drivers/gpu/drm/amd/pm/legacy-dpm/si_dpm.c @@ -3058,7 +3058,7 @@ static int si_get_vce_clock_voltage(struct amdgpu_dev= ice *adev, static bool si_dpm_vblank_too_short(void *handle) { struct amdgpu_device *adev =3D (struct amdgpu_device *)handle; - u32 vblank_time =3D amdgpu_dpm_get_vblank_time(adev); + u32 vblank_time =3D adev->pm.pm_display_cfg.min_vblank_time; /* we never hit the non-gddr5 limit so disable it */ u32 switch_limit =3D adev->gmc.vram_type =3D=3D AMDGPU_VRAM_TYPE_GDDR5 ? = 450 : 0; @@ -3424,9 +3424,10 @@ static void rv770_get_engine_memory_ss(struct amdgpu= _device *adev) static void si_apply_state_adjust_rules(struct amdgpu_device *adev, struct amdgpu_ps *rps) { + const struct amd_pp_display_configuration *display_cfg =3D + &adev->pm.pm_display_cfg; struct si_ps *ps =3D si_get_ps(rps); struct amdgpu_clock_and_voltage_limits *max_limits; - struct amdgpu_connector *conn; bool disable_mclk_switching =3D false; bool disable_sclk_switching =3D false; u32 mclk, sclk; @@ -3475,14 +3476,9 @@ static void si_apply_state_adjust_rules(struct amdgp= u_device *adev, * For example, 4K 60Hz and 1080p 144Hz fall into this category. * Find number of such displays connected. */ - for (i =3D 0; i < adev->mode_info.num_crtc; i++) { - if (!(adev->pm.dpm.new_active_crtcs & (1 << i)) || - !adev->mode_info.crtcs[i]->enabled) - continue; - - conn =3D to_amdgpu_connector(adev->mode_info.crtcs[i]->connector); - - if (conn->pixelclock_for_modeset > 297000) + for (i =3D 0; i < display_cfg->num_display; i++) { + /* The array only contains active displays. */ + if (display_cfg->displays[i].pixel_clock > 297000) high_pixelclock_count++; } @@ -3515,7 +3511,7 @@ static void si_apply_state_adjust_rules(struct amdgpu= _device *adev, rps->ecclk =3D 0; } - if ((adev->pm.dpm.new_active_crtc_count > 1) || + if ((adev->pm.pm_display_cfg.num_display > 1) || si_dpm_vblank_too_short(adev)) disable_mclk_switching =3D true; @@ -3663,7 +3659,7 @@ static void si_apply_state_adjust_rules(struct amdgpu= _device *adev, ps->performance_levels[i].mclk, max_limits->vddc, &ps->performance_levels[i].vddc); btc_apply_voltage_dependency_rules(&adev->pm.dpm.dyn_state.vddc_dependen= cy_on_dispclk, - adev->clock.current_dispclk, + display_cfg->display_clk, max_limits->vddc, &ps->performance_levels[i].vddc); } @@ -4188,16 +4184,16 @@ static void si_program_ds_registers(struct amdgpu_d= evice *adev) static void si_program_display_gap(struct amdgpu_device *adev) { + const struct amd_pp_display_configuration *cfg =3D &adev->pm.pm_display_c= fg; u32 tmp, pipe; - int i; tmp =3D RREG32(CG_DISPLAY_GAP_CNTL) & ~(DISP1_GAP_MASK | DISP2_GAP_MASK); - if (adev->pm.dpm.new_active_crtc_count > 0) + if (cfg->num_display > 0) tmp |=3D DISP1_GAP(R600_PM_DISPLAY_GAP_VBLANK_OR_WM); else tmp |=3D DISP1_GAP(R600_PM_DISPLAY_GAP_IGNORE); - if (adev->pm.dpm.new_active_crtc_count > 1) + if (cfg->num_display > 1) tmp |=3D DISP2_GAP(R600_PM_DISPLAY_GAP_VBLANK_OR_WM); else tmp |=3D DISP2_GAP(R600_PM_DISPLAY_GAP_IGNORE); @@ -4207,17 +4203,8 @@ static void si_program_display_gap(struct amdgpu_dev= ice *adev) tmp =3D RREG32(DCCG_DISP_SLOW_SELECT_REG); pipe =3D (tmp & DCCG_DISP1_SLOW_SELECT_MASK) >> DCCG_DISP1_SLOW_SELECT_SH= IFT; - if ((adev->pm.dpm.new_active_crtc_count > 0) && - (!(adev->pm.dpm.new_active_crtcs & (1 << pipe)))) { - /* find the first active crtc */ - for (i =3D 0; i < adev->mode_info.num_crtc; i++) { - if (adev->pm.dpm.new_active_crtcs & (1 << i)) - break; - } - if (i =3D=3D adev->mode_info.num_crtc) - pipe =3D 0; - else - pipe =3D i; + if (cfg->num_display > 0 && pipe !=3D cfg->crtc_index) { + pipe =3D cfg->crtc_index; tmp &=3D ~DCCG_DISP1_SLOW_SELECT_MASK; tmp |=3D DCCG_DISP1_SLOW_SELECT(pipe); @@ -4228,7 +4215,7 @@ static void si_program_display_gap(struct amdgpu_devi= ce *adev) * This can be a problem on PowerXpress systems or if you want to use the= card * for offscreen rendering or compute if there are no crtcs enabled. */ - si_notify_smc_display_change(adev, adev->pm.dpm.new_active_crtc_count > 0= ); + si_notify_smc_display_change(adev, cfg->num_display > 0); } static void si_enable_spread_spectrum(struct amdgpu_device *adev, bool ena= ble) @@ -5533,7 +5520,7 @@ static int si_convert_power_level_to_smc(struct amdgp= u_device *adev, (pl->mclk <=3D pi->mclk_stutter_mode_threshold) && !eg_pi->uvd_enabled && (RREG32(DPG_PIPE_STUTTER_CONTROL) & STUTTER_ENABLE) && - (adev->pm.dpm.new_active_crtc_count <=3D 2)) { + (adev->pm.pm_display_cfg.num_display <=3D 2)) { level->mcFlags |=3D SISLANDS_SMC_MC_STUTTER_EN; if (gmc_pg) @@ -5685,7 +5672,7 @@ static bool si_is_state_ulv_compatible(struct amdgpu_= device *adev, /* XXX validate against display requirements! */ for (i =3D 0; i < adev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.count= ; i++) { - if (adev->clock.current_dispclk <=3D + if (adev->pm.pm_display_cfg.display_clk <=3D adev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries[i].clk) { if (ulv->pl.vddc < adev->pm.dpm.dyn_state.vddc_dependency_on_dispclk.entries[i].v) @@ -5839,30 +5826,22 @@ static int si_upload_ulv_state(struct amdgpu_device= *adev) static int si_upload_smc_data(struct amdgpu_device *adev) { - struct amdgpu_crtc *amdgpu_crtc =3D NULL; - int i; + const struct amd_pp_display_configuration *cfg =3D &adev->pm.pm_display_c= fg; u32 crtc_index =3D 0; u32 mclk_change_block_cp_min =3D 0; u32 mclk_change_block_cp_max =3D 0; - for (i =3D 0; i < adev->mode_info.num_crtc; i++) { - if (adev->pm.dpm.new_active_crtcs & (1 << i)) { - amdgpu_crtc =3D adev->mode_info.crtcs[i]; - break; - } - } - /* When a display is plugged in, program these so that the SMC * performs MCLK switching when it doesn't cause flickering. * When no display is plugged in, there is no need to restrict * MCLK switching, so program them to zero. */ - if (adev->pm.dpm.new_active_crtc_count && amdgpu_crtc) { - crtc_index =3D amdgpu_crtc->crtc_id; + if (cfg->num_display) { + crtc_index =3D cfg->crtc_index; - if (amdgpu_crtc->line_time) { - mclk_change_block_cp_min =3D 200 / amdgpu_crtc->line_time; - mclk_change_block_cp_max =3D 100 / amdgpu_crtc->line_time; + if (cfg->line_time_in_us) { + mclk_change_block_cp_min =3D 200 / cfg->line_time_in_us; + mclk_change_block_cp_max =3D 100 / cfg->line_time_in_us; } } diff --git a/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c b/drivers/gpu= /drm/amd/pm/powerplay/amd_powerplay.c index 9bf85ca607c3..1f8b744d6b17 100644 --- a/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c +++ b/drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c @@ -1568,16 +1568,7 @@ static void pp_pm_compute_clocks(void *handle) struct amdgpu_device *adev =3D hwmgr->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); - adev->pm.pm_display_cfg.min_vblank_time =3D amdgpu_dpm_get_vblank_time(a= dev); - /* we have issues with mclk switching with - * refresh rates over 120 hz on the non-DC code. - */ - if (adev->pm.pm_display_cfg.vrefresh > 120) - adev->pm.pm_display_cfg.min_vblank_time =3D 0; - + amdgpu_dpm_get_display_cfg(adev); pp_display_configuration_change(handle, &adev->pm.pm_display_cfg); } -- 2.53.0