Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp3670732pxf; Mon, 5 Apr 2021 19:24:59 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyW3REX0bHockvRmeqpu/NNyAkscE9UA1ymq7JqmZ/2GXeyiZzF/oAXTbIMpDMcnmoR5vMA X-Received: by 2002:a17:906:7c57:: with SMTP id g23mr30766286ejp.195.1617675899455; Mon, 05 Apr 2021 19:24:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1617675899; cv=none; d=google.com; s=arc-20160816; b=UPsZo/cfoSTexRNktT6m52PZ3W0qpD3/Pi0aH0Ha8f1MKYQeVZvlM+YF9EhHBod+Zq J/+OaSwKoICepm0g4kcB3fU2jxgWRyzPhGd8xuBy1c9Ff8GXMJaK3+8QySIpgtpHtRnc iqrHy/UJNBQNVOVt3fQHTcm+xPP9M2T7Err3JEA47JgJmVCrz7lttup1V3gNSFEVIzxT uCuHKKsWxGGxXa9B2JhapJggWHdlgJo8Re10nXo1GIQkAgqKQOhCkbBTuiwQ9DQI4Hxl 9aY/vpHIM8h9mxrahecJgri+uf2Jjgb5IJgaSc1dTZS5OAHRzfyt/LYpHX54iaYQCmIv ePnA== 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=GSgZ6V8OtBgH6xPVi9T+/q1lXMKhnwCaDz5oo/WYpgs=; b=ivN1mWvyg3X7rSg56SQbvsKGU4fJORIuZA5h2K6IhUeWiOvwyak8zXtGZByPcHYwwM lH6SAkbOqsYPCbkOfAFaYIqO4VN2GgIF4RWrx5ZhvKgwXuSnHybxz4gLPilLv2cf4F4t InnOWOZiHhYNMSar/luDNttk1KsEvAo9+11Bn2yPvsE0DqMXd95mRlINV8wKMk1RyWd7 7NfM76mzIIKtPqgPzo9UP+rTtXcB/eYnbT9nCMl7QEKfm40JETU4oQ8NoB0A/yJPiBJf g1MRfnecQsahdwij4NkKVfqZBYeeLT3M81A+6CDmsQ5WcxYnGmB5isFc7lMOajN1w8BU gUpw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=UUw65nq7; 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=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id v21si7150921edc.419.2021.04.05.19.24.36; Mon, 05 Apr 2021 19:24:59 -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=@kernel.org header.s=k20201202 header.b=UUw65nq7; 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=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242032AbhDEQGp (ORCPT + 99 others); Mon, 5 Apr 2021 12:06:45 -0400 Received: from mail.kernel.org ([198.145.29.99]:57204 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242173AbhDEQFN (ORCPT ); Mon, 5 Apr 2021 12:05:13 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 537BE613DD; Mon, 5 Apr 2021 16:05:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1617638707; bh=TXztknuaVtG48pbylDS46y44Jtupw/59hlWRCyx51hY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=UUw65nq7Hp/s18tzK8lPtvr0Hj/PvKfDKgH93SB0R74MI4d5BrM+jBo/aYIHsPuDd tXedsl28xxVrs3j+Xg9RTZFdnQmBD5OBcr9EKwt+lMdNWgRlmi5XRg3An5Tg3Nrzsq mBbCacDxUlz0qlMggsI9NvrJMJk6pgLrQK8fX6KJ64a/oCqPSjOXuidVa9XlQ28kQD hLFOf2EPeiJpLpPGXBFVyDTTEdz7Jk0qRPZxsIQLb+N6u1t0SXOJ4UPBkW3RNOaSwD K/U8Fcg71EfNgtt8oy5dYqaJQBx5cmTkhVzTEmqygfZv3WEqt1IJC1GlVNestLA879 I/Ll457UOduoA== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Dmitry Osipenko , Thierry Reding , Sasha Levin , dri-devel@lists.freedesktop.org, linux-tegra@vger.kernel.org Subject: [PATCH AUTOSEL 5.4 06/13] drm/tegra: dc: Don't set PLL clock to 0Hz Date: Mon, 5 Apr 2021 12:04:51 -0400 Message-Id: <20210405160459.268794-6-sashal@kernel.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210405160459.268794-1-sashal@kernel.org> References: <20210405160459.268794-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Dmitry Osipenko [ Upstream commit f8fb97c915954fc6de6513cdf277103b5c6df7b3 ] RGB output doesn't allow to change parent clock rate of the display and PCLK rate is set to 0Hz in this case. The tegra_dc_commit_state() shall not set the display clock to 0Hz since this change propagates to the parent clock. The DISP clock is defined as a NODIV clock by the tegra-clk driver and all NODIV clocks use the CLK_SET_RATE_PARENT flag. This bug stayed unnoticed because by default PLLP is used as the parent clock for the display controller and PLLP silently skips the erroneous 0Hz rate changes because it always has active child clocks that don't permit rate changes. The PLLP isn't acceptable for some devices that we want to upstream (like Samsung Galaxy Tab and ASUS TF700T) due to a display panel clock rate requirements that can't be fulfilled by using PLLP and then the bug pops up in this case since parent clock is set to 0Hz, killing the display output. Don't touch DC clock if pclk=0 in order to fix the problem. Signed-off-by: Dmitry Osipenko Signed-off-by: Thierry Reding Signed-off-by: Sasha Levin --- drivers/gpu/drm/tegra/dc.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c index fbf57bc3cdab..617cbe468aec 100644 --- a/drivers/gpu/drm/tegra/dc.c +++ b/drivers/gpu/drm/tegra/dc.c @@ -1667,6 +1667,11 @@ static void tegra_dc_commit_state(struct tegra_dc *dc, dev_err(dc->dev, "failed to set clock rate to %lu Hz\n", state->pclk); + + err = clk_set_rate(dc->clk, state->pclk); + if (err < 0) + dev_err(dc->dev, "failed to set clock %pC to %lu Hz: %d\n", + dc->clk, state->pclk, err); } DRM_DEBUG_KMS("rate: %lu, div: %u\n", clk_get_rate(dc->clk), @@ -1677,11 +1682,6 @@ static void tegra_dc_commit_state(struct tegra_dc *dc, value = SHIFT_CLK_DIVIDER(state->div) | PIXEL_CLK_DIVIDER_PCD1; tegra_dc_writel(dc, value, DC_DISP_DISP_CLOCK_CONTROL); } - - err = clk_set_rate(dc->clk, state->pclk); - if (err < 0) - dev_err(dc->dev, "failed to set clock %pC to %lu Hz: %d\n", - dc->clk, state->pclk, err); } static void tegra_dc_stop(struct tegra_dc *dc) -- 2.30.2