Received: by 2002:a05:6358:701b:b0:131:369:b2a3 with SMTP id 27csp2543735rwo; Sun, 23 Jul 2023 18:31:48 -0700 (PDT) X-Google-Smtp-Source: APBJJlFHtAov5jxewjvAvuOzrZNLdtVNuheaqDZJmO6jdhkgVsslD8GDniRWvgO4yCL8NiniwA7g X-Received: by 2002:a17:90a:ce06:b0:268:abc:83e4 with SMTP id f6-20020a17090ace0600b002680abc83e4mr2704833pju.26.1690162308263; Sun, 23 Jul 2023 18:31:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690162308; cv=none; d=google.com; s=arc-20160816; b=lk3ueZYO9n0+XWX0KSXGa/zYySUnnNYabwlaK+hL8+DHuHey6Xk3yqBlF4Ih05j7N0 e75MBOHin5TeU1qiYP+gz1HMwonfY4UzWNlr0kTdgPz9zEeqoN3pMJxo4Gd4P6vNT4v3 f9kcKmbEsLwDBxrXCifhwoJ5S9xSKPr8YJqyLH2NsoQbI6wFvgsA8wZHeNMyxsKNMmPH b1P7GE0JJKOTltt3xArU3gKM9DDmzsf03Bup7+5JRX1wTQhbwt0/KRCDtaLBF3OCLbHg 7mGCoHs810tzhlf0SDM2krQeCnhH+KqEK2ihPE/00wFRLOrW00+CWe7lr1gfMQ+t1IzP lv1A== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=CeHH/9VmlvPxNvRpF/tTsWlu4PkkcLxPE8OMg7aAkZY=; fh=wcFlZP/naq9RqYhodPo7aJZPFqtBruFCSvVU7sBV0Mg=; b=eTD+d1rM467Y6gxJ/7EO1aNHG36rZTHDhz6GUXCW+RYcOdR3kai4heLQeR+8mQSwv5 NsSN84t04XJ/CmXomlB6zXrX37rGFAWZYhKecu6GxkaE+fOeYNmzx+n60L/CK84i9VQM PYKrUpPm0Rg9EKbVIbmAT3/ixjujIKfhJ+zL+N7dV+facKGyK8cKyt/b5NAkfEHL10ee +ER9PaFpgz8g+8RrW/685ADIgRRzdiX4oGim4nkpesGII8QJKsCNej1/MMTloVa/uUam d4AkCazzqj+M2KnK8XAcZnp948uST2nN8/Y8656eZwujU4P/FupX3wbzgXWqpSmxzpiG b+gg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=Otm3IVIb; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id mu14-20020a17090b388e00b002680e08a877si2211152pjb.186.2023.07.23.18.31.36; Sun, 23 Jul 2023 18:31:48 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=Otm3IVIb; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230346AbjGXBXc (ORCPT + 99 others); Sun, 23 Jul 2023 21:23:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53232 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230393AbjGXBWZ (ORCPT ); Sun, 23 Jul 2023 21:22:25 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4528FE78; Sun, 23 Jul 2023 18:22:01 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 0D6F160EF4; Mon, 24 Jul 2023 01:20:41 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id CF889C433C7; Mon, 24 Jul 2023 01:20:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1690161640; bh=5gnECKCSDPru2q8MOdfXNsDZ2UETGtzkDcyY78I1eKQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Otm3IVIb0E5P2SEC3OcCnXJC2SUyLkZc29oEB58NK554FNrWgvMvhx4QbPb4wYuiF 0VFyVp/HA1maTpBSnNk6bk/6jXt6vt1qk6+TFuf30pCsSzG6wqbPhzrgUc7yj1rlJJ kC6bZCuYaUWIAoCV5h09U94z5+DyuI4byAHdvnDanmTL4XfMMLNxOK8Qy2CgSnVMae yihLdydWvVTQ5LDQ0Q39HfkFWyklEwHMsiNoHIYqJldQiXeP9L5Bnhg160WmZWzmCb Vu2i6jNCiN8x2GRpIZDomSRCOD3yGw+hu/TxurFJN/WSNCj8c7TViLQRyq6T5fAx7m mtB+gRy9N71mA== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Nicholas Kazlauskas , Stylon Wang , Jun Lei , Daniel Wheeler , Alex Deucher , Sasha Levin , harry.wentland@amd.com, sunpeng.li@amd.com, Rodrigo.Siqueira@amd.com, christian.koenig@amd.com, Xinhui.Pan@amd.com, airlied@gmail.com, daniel@ffwll.ch, qingqing.zhuo@amd.com, michael.strauss@amd.com, Charlene.Liu@amd.com, Syed.Hassan@amd.com, jdhillon@amd.com, alex.hung@amd.com, trix@redhat.com, jiapeng.chong@linux.alibaba.com, hamza.mahfooz@amd.com, syedsaaem.rizvi@amd.com, daniel.miess@amd.com, amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Subject: [PATCH AUTOSEL 6.4 48/58] drm/amd/display: Skip DPP DTO update if root clock is gated Date: Sun, 23 Jul 2023 21:13:16 -0400 Message-Id: <20230724011338.2298062-48-sashal@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230724011338.2298062-1-sashal@kernel.org> References: <20230724011338.2298062-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore X-stable-base: Linux 6.4.5 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Nicholas Kazlauskas [ Upstream commit 30f90f3c1c2c63c2fa44f61233737d27b72637c2 ] [Why] Hardware implements root clock gating by utilizing the DPP DTO registers with a special case of DTO enabled, phase = 0, modulo = 1. This conflicts with our policy to always update the DPPDTO for cases where it's expected to be disabled. The pipes unexpectedly enter a higher power state than expected because of this programming flow. [How] Guard the upper layers of HWSS against this hardware quirk with programming the register with an internal state flag in DCCG. While technically acting as global state for the DCCG, HWSS shouldn't be expected to understand the hardware quirk for having DTO disabled causing more power than DTO enabled with this specific setting. This also prevents sequencing errors from occuring in the future if we have to program DPP DTO in multiple locations. Acked-by: Stylon Wang Signed-off-by: Nicholas Kazlauskas Reviewed-by: Jun Lei Tested-by: Daniel Wheeler Signed-off-by: Alex Deucher Signed-off-by: Sasha Levin --- drivers/gpu/drm/amd/display/dc/dcn31/dcn31_dccg.c | 8 ++++++++ drivers/gpu/drm/amd/display/dc/dcn314/dcn314_dccg.c | 5 +++++ drivers/gpu/drm/amd/display/dc/inc/hw/dccg.h | 1 + 3 files changed, 14 insertions(+) diff --git a/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_dccg.c b/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_dccg.c index 4c2fdfea162f5..65c1d754e2d6b 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_dccg.c +++ b/drivers/gpu/drm/amd/display/dc/dcn31/dcn31_dccg.c @@ -47,6 +47,14 @@ void dccg31_update_dpp_dto(struct dccg *dccg, int dpp_inst, int req_dppclk) { struct dcn_dccg *dccg_dcn = TO_DCN_DCCG(dccg); + if (dccg->dpp_clock_gated[dpp_inst]) { + /* + * Do not update the DPPCLK DTO if the clock is stopped. + * It is treated the same as if the pipe itself were in PG. + */ + return; + } + if (dccg->ref_dppclk && req_dppclk) { int ref_dppclk = dccg->ref_dppclk; int modulo, phase; diff --git a/drivers/gpu/drm/amd/display/dc/dcn314/dcn314_dccg.c b/drivers/gpu/drm/amd/display/dc/dcn314/dcn314_dccg.c index e0e7d32bb1a0e..cf23d7bc560a6 100644 --- a/drivers/gpu/drm/amd/display/dc/dcn314/dcn314_dccg.c +++ b/drivers/gpu/drm/amd/display/dc/dcn314/dcn314_dccg.c @@ -332,6 +332,9 @@ static void dccg314_dpp_root_clock_control( { struct dcn_dccg *dccg_dcn = TO_DCN_DCCG(dccg); + if (dccg->dpp_clock_gated[dpp_inst] == clock_on) + return; + if (clock_on) { /* turn off the DTO and leave phase/modulo at max */ REG_UPDATE(DPPCLK_DTO_CTRL, DPPCLK_DTO_ENABLE[dpp_inst], 0); @@ -345,6 +348,8 @@ static void dccg314_dpp_root_clock_control( DPPCLK0_DTO_PHASE, 0, DPPCLK0_DTO_MODULO, 1); } + + dccg->dpp_clock_gated[dpp_inst] = !clock_on; } static const struct dccg_funcs dccg314_funcs = { diff --git a/drivers/gpu/drm/amd/display/dc/inc/hw/dccg.h b/drivers/gpu/drm/amd/display/dc/inc/hw/dccg.h index 0b700b3d7d972..8dc804bbe98bd 100644 --- a/drivers/gpu/drm/amd/display/dc/inc/hw/dccg.h +++ b/drivers/gpu/drm/amd/display/dc/inc/hw/dccg.h @@ -68,6 +68,7 @@ struct dccg { const struct dccg_funcs *funcs; int pipe_dppclk_khz[MAX_PIPES]; int ref_dppclk; + bool dpp_clock_gated[MAX_PIPES]; //int dtbclk_khz[MAX_PIPES];/* TODO needs to be removed */ //int audio_dtbclk_khz;/* TODO needs to be removed */ //int ref_dtbclk_khz;/* TODO needs to be removed */ -- 2.39.2