Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp494233pxj; Tue, 18 May 2021 08:00:21 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyyoxa8+7Sw4n4u9NlhvUG8CxFqAwJVh0BVk2rYmoJN0JZJiq2zbPCCMPHgL1bFPZyUbikz X-Received: by 2002:a6b:3b4c:: with SMTP id i73mr4483825ioa.149.1621350020918; Tue, 18 May 2021 08:00:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621350020; cv=none; d=google.com; s=arc-20160816; b=LJRmFdgCqTYzuwjX6gflDT77vtUZtTJ15sC4/e5QWhz8au7WETr6VnskhYB9qYVutv Y325Qf2RDMi78RXI33O6gNwbyl84jIrWwGKx74/webTu4R89baQd0yElRib0q+oUPFhR kq1z1woRnsiVMGnhTz4AYRv/XJx4lKMkVO29KoJq8Wq7jgDxK08pjurzcy7xbBJoYWH1 Fh65pUFgWDjNKdQJ4Oe6KNggg28a19CIgJ97ur52mjT02ajp8yYeUto9SVsSb1HH411Z LSR1gni+JSQcF8WhfueVEVC1hlSS6nRN3XtTU/ApQV/UIy79G7KBsOOogyiMNbYwt+DN ijcw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=HRdcyKfGcroXfunvASUj+ApsB59NrmrXPeFZwFnMuz4=; b=K56eYmdI7Dv24huVYtnNQeVvCV88aXzn4PUPyYhwxyZRG0vQeefr8U8t4eed+R4vcu EEG3cUXFBtH6vQQYpRVPhVsSuOp2STiuJZqXQ3EB56omAqusiuI/0f2G220BdeNufqIW pVtRdBi1mzmmma9l2l42SvFi7aaU5x8erpOc/gaL2a4+w7fVBE++zop9ZfaAwgWhDwoW owhTDWQevu3kTPeeJfDCQSzVffvSnhmVM7yPjLUm0Tpkrm5r8NsslWTJtk0W6V77ZOaM FOR2gRUNfBEGnRmBx33Zmo2vF8PJdEZ/2typOhFT3j/vTao7EFM3bV/bYlyZ7WOhJ0Q8 9HZA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=YagTG+4m; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id h8si21507775jas.102.2021.05.18.08.00.06; Tue, 18 May 2021 08:00:20 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=YagTG+4m; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345184AbhEQPu2 (ORCPT + 99 others); Mon, 17 May 2021 11:50:28 -0400 Received: from mail.kernel.org ([198.145.29.99]:37924 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S245014AbhEQPd2 (ORCPT ); Mon, 17 May 2021 11:33:28 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 28A3A6192A; Mon, 17 May 2021 14:39:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1621262341; bh=tArG0LbwkgMqvZiX9utl9JqDm69j7Qv9lY9B2G031Lk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=YagTG+4mskJDQ2YnAoyZPTZtOeR/YfbgMxoCscyuHyueGaNIrkygj4Lm3xdhei4vn 2BGO+Tekf3dmfM5rTeMkxU6GfNHQ8fsFT0HeU5tWSzoARw6Zw0ODJHZOz6u375QBUC 8qtE9GEvoCnYKiUNAFwQJ0yABJSKrCLchFA5bC5k= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Kai-Heng Feng , Alex Deucher Subject: [PATCH 5.11 246/329] drm/radeon/dpm: Disable sclk switching on Oland when two 4K 60Hz monitors are connected Date: Mon, 17 May 2021 16:02:37 +0200 Message-Id: <20210517140310.429067997@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210517140302.043055203@linuxfoundation.org> References: <20210517140302.043055203@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Kai-Heng Feng commit 227545b9a08c68778ddd89428f99c351fc9315ac upstream. Screen flickers rapidly when two 4K 60Hz monitors are in use. This issue doesn't happen when one monitor is 4K 60Hz (pixelclock 594MHz) and another one is 4K 30Hz (pixelclock 297MHz). The issue is gone after setting "power_dpm_force_performance_level" to "high". Following the indication, we found that the issue occurs when sclk is too low. So resolve the issue by disabling sclk switching when there are two monitors requires high pixelclock (> 297MHz). v2: - Only apply the fix to Oland. Signed-off-by: Kai-Heng Feng Signed-off-by: Alex Deucher Cc: stable@vger.kernel.org Signed-off-by: Greg Kroah-Hartman --- drivers/gpu/drm/radeon/radeon.h | 1 + drivers/gpu/drm/radeon/radeon_pm.c | 8 ++++++++ drivers/gpu/drm/radeon/si_dpm.c | 3 +++ 3 files changed, 12 insertions(+) --- a/drivers/gpu/drm/radeon/radeon.h +++ b/drivers/gpu/drm/radeon/radeon.h @@ -1559,6 +1559,7 @@ struct radeon_dpm { void *priv; u32 new_active_crtcs; int new_active_crtc_count; + int high_pixelclock_count; u32 current_active_crtcs; int current_active_crtc_count; bool single_display; --- a/drivers/gpu/drm/radeon/radeon_pm.c +++ b/drivers/gpu/drm/radeon/radeon_pm.c @@ -1775,6 +1775,7 @@ static void radeon_pm_compute_clocks_dpm struct drm_device *ddev = rdev->ddev; struct drm_crtc *crtc; struct radeon_crtc *radeon_crtc; + struct radeon_connector *radeon_connector; if (!rdev->pm.dpm_enabled) return; @@ -1784,6 +1785,7 @@ static void radeon_pm_compute_clocks_dpm /* update active crtc counts */ rdev->pm.dpm.new_active_crtcs = 0; rdev->pm.dpm.new_active_crtc_count = 0; + rdev->pm.dpm.high_pixelclock_count = 0; if (rdev->num_crtc && rdev->mode_info.mode_config_initialized) { list_for_each_entry(crtc, &ddev->mode_config.crtc_list, head) { @@ -1791,6 +1793,12 @@ static void radeon_pm_compute_clocks_dpm if (crtc->enabled) { rdev->pm.dpm.new_active_crtcs |= (1 << radeon_crtc->crtc_id); rdev->pm.dpm.new_active_crtc_count++; + if (!radeon_crtc->connector) + continue; + + radeon_connector = to_radeon_connector(radeon_crtc->connector); + if (radeon_connector->pixelclock_for_modeset > 297000) + rdev->pm.dpm.high_pixelclock_count++; } } } --- a/drivers/gpu/drm/radeon/si_dpm.c +++ b/drivers/gpu/drm/radeon/si_dpm.c @@ -2979,6 +2979,9 @@ static void si_apply_state_adjust_rules( (rdev->pdev->device == 0x6605)) { max_sclk = 75000; } + + if (rdev->pm.dpm.high_pixelclock_count > 1) + disable_sclk_switching = true; } if (rps->vce_active) {