Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp6029632ybi; Sun, 7 Jul 2019 19:08:27 -0700 (PDT) X-Google-Smtp-Source: APXvYqxok9cBXX+UNq0TkqBZ0Xy+Krz8mi0FtlbEj9L51RDNHCMn/KuREy7oKvgWE2ZnPGXUey0n X-Received: by 2002:a17:90a:1b4a:: with SMTP id q68mr21855856pjq.61.1562551707655; Sun, 07 Jul 2019 19:08:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1562551707; cv=none; d=google.com; s=arc-20160816; b=HNxrXOKORGwsBRXSGJVNXwQOs+/RC2m9KymKz2SSQyCG+Ww5I5TGqQ18qnzZpAF+w9 i1BLhdWi0UhZwVv8WibcGgOV1gSeSQfbhUE8f8ANjLE3ROMGxmwsy6+1WcJ8QK4+klPg WcLKH5AcA6NbcWIsPQRCzGdjgfQQCLZIeFzziY7DYPxcT8sNqzjgwHEiN362WxxO/JyX S3UaXPm/49S27nvDb8i2Lrb5moqT+CIzDScrMj1oStXZ8xkohWhSQXpcr7V83SWtyPTk fxzmxqH51nPeL2BxSrHfXuhjKQA8KMvz0EiomMEFowNVH//zoh8EGvI4YmoAj4fP8cMQ Zmpg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=YbpUkQHY6Ip6i0r/7exLkfwdi2NsHJU1OTryULkaYts=; b=wjE608UKaGFD0sLG4Ux2yKaGUoLKiOolHmZp26h/EzGgp+v8TMU7ub+hymrn3btrkO KnZwVPX/V8TEfaZ7XpA4sezdLbxZV2CfxK112yiGwn3S7X+RhEwjYz/imAClO2k305Z8 bTmh4eEIEx8v/qrVFMXf6zt25ruuYgoNQie8Flc0pKAzjrOf38o1rrxmz/lJ+ylLe1Lb ciunMQgjlVXURMrIhNdwTKMi9H5BPURB52UfNmrgi8/QRp07MGzBfZm9h8E1nTupQ/82 yL/ILYAv+6ClCerLQqPCgwEYlQ8OQDlXlh2VqC+/P8zSzW5XuHAPtZbt89jw6VlH4Wwj xOgA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=BLXkljUp; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k32si16265740pjb.11.2019.07.07.19.08.12; Sun, 07 Jul 2019 19:08:27 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=BLXkljUp; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727491AbfGGXI6 (ORCPT + 99 others); Sun, 7 Jul 2019 19:08:58 -0400 Received: from mail-qt1-f194.google.com ([209.85.160.194]:45458 "EHLO mail-qt1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727341AbfGGXI6 (ORCPT ); Sun, 7 Jul 2019 19:08:58 -0400 Received: by mail-qt1-f194.google.com with SMTP id j19so16258119qtr.12; Sun, 07 Jul 2019 16:08:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=YbpUkQHY6Ip6i0r/7exLkfwdi2NsHJU1OTryULkaYts=; b=BLXkljUpTEmVUt/VutqfDgk7OUIUZHw4jD7ozcWcd0aG5U9eACZHI0xROyMrLDDVbP lPCRyQUCYZbgbak1tDOMp1w+n+nKfiS4ejsF58wRqp+kKvGdS53GTElovDS3z87RNrcM 4MWVl1SApfvuGHE3YBl5167xzYJmlQ/1v52brGxglNc5N5a3Pbt3Gyd6XEibSF9N+9VP O2qBsBeco059nglx5DRsFqrBLDdRWlEPT3nDzP2xTMhsXJQeaeCOdcJVg+v7CTmKxDt7 TjdLZ51CuksE6Rr0GZtCx9UQFcD8mcxo14AZy0TwM/aMZdOOV26xG9LTjtokjrXzT4uu oTSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=YbpUkQHY6Ip6i0r/7exLkfwdi2NsHJU1OTryULkaYts=; b=UA9TnxOPdgOSb/wmXe0yA5u69CbAXLqLQt4fGA9ZBFn1vQyg/XR0WSxFjien2zAkbo 9PWPr8Jf2dI9w8ISkTkBH1pbSPITKmrcA3Jili2W8jA3Foj2kE99B3fDsUcozjOeVRXz 0/dIIUt+qlhLoQXFhHhoOp8WZKJ2yr0/vZ13vWOsk4jAG6XDCHwLt/wI4AmLJrfmHVmL K3RYgo5arNBYkTf+OqYlMoMhiotE/XkP7O9onV/kvp0tevuib9i3vtMn/VycNEs665MM 4sS8ySD3w7VkTad3BqrL25cmge/f5E0DQUSmDofLJvjmAn9DVs/9e1kXiEiWGn23kMXm i9wA== X-Gm-Message-State: APjAAAUvX97NdI2FoGpQj0t7VTlfH15PtKZ+WXrwyWdRL7ianpMzNfo1 I2juQt5H1xL7xtI58f6LOcI= X-Received: by 2002:a0c:d14e:: with SMTP id c14mr12399534qvh.206.1562540937735; Sun, 07 Jul 2019 16:08:57 -0700 (PDT) Received: from localhost.localdomain (ppp79-139-233-208.pppoe.spdop.ru. [79.139.233.208]) by smtp.gmail.com with ESMTPSA id k74sm7434319qke.53.2019.07.07.16.08.56 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 07 Jul 2019 16:08:57 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , Peter De Schrijver Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1] soc/tegra: pmc: Query PCLK clock rate at probe time Date: Mon, 8 Jul 2019 02:08:43 +0300 Message-Id: <20190707230843.11224-1-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The PCLK clock is running off SCLK, which is a critical clock that is very unlikely to randomly change its rate. It's also a bit clumsy (and apparently incorrect) to query the clock's rate with interrupts being disabled because clk_get_rate() takes a mutex and that's the case during suspend/cpuidle entering. Lastly, it's better to always fully reprogram PMC state because it's not obvious whether it could be changed after SC7. Signed-off-by: Dmitry Osipenko --- drivers/soc/tegra/pmc.c | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/drivers/soc/tegra/pmc.c b/drivers/soc/tegra/pmc.c index 9f9c1c677cf4..532e0ada012b 100644 --- a/drivers/soc/tegra/pmc.c +++ b/drivers/soc/tegra/pmc.c @@ -1433,6 +1433,7 @@ void tegra_pmc_set_suspend_mode(enum tegra_suspend_mode mode) void tegra_pmc_enter_suspend_mode(enum tegra_suspend_mode mode) { unsigned long long rate = 0; + u64 ticks; u32 value; switch (mode) { @@ -1441,7 +1442,7 @@ void tegra_pmc_enter_suspend_mode(enum tegra_suspend_mode mode) break; case TEGRA_SUSPEND_LP2: - rate = clk_get_rate(pmc->clk); + rate = pmc->rate; break; default: @@ -1451,26 +1452,20 @@ void tegra_pmc_enter_suspend_mode(enum tegra_suspend_mode mode) if (WARN_ON_ONCE(rate == 0)) rate = 100000000; - if (rate != pmc->rate) { - u64 ticks; - - ticks = pmc->cpu_good_time * rate + USEC_PER_SEC - 1; - do_div(ticks, USEC_PER_SEC); - tegra_pmc_writel(pmc, ticks, PMC_CPUPWRGOOD_TIMER); - - ticks = pmc->cpu_off_time * rate + USEC_PER_SEC - 1; - do_div(ticks, USEC_PER_SEC); - tegra_pmc_writel(pmc, ticks, PMC_CPUPWROFF_TIMER); + ticks = pmc->cpu_good_time * rate + USEC_PER_SEC - 1; + do_div(ticks, USEC_PER_SEC); + tegra_pmc_writel(pmc, ticks, PMC_CPUPWRGOOD_TIMER); - wmb(); - - pmc->rate = rate; - } + ticks = pmc->cpu_off_time * rate + USEC_PER_SEC - 1; + do_div(ticks, USEC_PER_SEC); + tegra_pmc_writel(pmc, ticks, PMC_CPUPWROFF_TIMER); value = tegra_pmc_readl(pmc, PMC_CNTRL); value &= ~PMC_CNTRL_SIDE_EFFECT_LP0; value |= PMC_CNTRL_CPU_PWRREQ_OE; tegra_pmc_writel(pmc, value, PMC_CNTRL); + + wmb(); } #endif @@ -2082,6 +2077,7 @@ static int tegra_pmc_probe(struct platform_device *pdev) pmc->clk = NULL; } + pmc->rate = clk_get_rate(pmc->clk); pmc->dev = &pdev->dev; tegra_pmc_init(pmc); -- 2.22.0