From patchwork Wed Apr 17 22:29:10 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 10906361 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 143A4161F for ; Wed, 17 Apr 2019 22:41:29 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id F2F2028B79 for ; Wed, 17 Apr 2019 22:41:28 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E70B928B81; Wed, 17 Apr 2019 22:41:28 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 87DAD28B79 for ; Wed, 17 Apr 2019 22:41:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387509AbfDQWl2 (ORCPT ); Wed, 17 Apr 2019 18:41:28 -0400 Received: from mail-pg1-f195.google.com ([209.85.215.195]:35817 "EHLO mail-pg1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725848AbfDQWl1 (ORCPT ); Wed, 17 Apr 2019 18:41:27 -0400 Received: by mail-pg1-f195.google.com with SMTP id g8so218136pgf.2; Wed, 17 Apr 2019 15:41:27 -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:in-reply-to:references :mime-version:content-transfer-encoding; bh=7gSgxpoZvck6q57Fc1Ag09/Sll6e8T2kyeInAsQ6ito=; b=IFggYSzs8G7bxWUnIIOIIj21Eh1evC1LMf7z4nyyPoV81gbY3yXu4F0BClwO9GzbgH YPn2ZJ8s53zbtg0Fq9o4Zy2PugCEWSCWg4XGHMuZszYnfIA6RlamNzuxflUdcgGexdbF DcZxg16UdNatokBEz0fOIOp0BG2a8ElFTctPuFc8GHc407qYwZhs7zFoRKPQBRsGi0sx z6S/SeknBS69ziIz6LCjZp7+LGGWmQzF5G12w5ZrPbw0sSb0DlnuCcolk4jKmAFBW2iI x18zSzpvaroqgrWuIJoEMGNGizLRrNxD4Fm69439ZG2CVo6CAoMEmt/A0jTBhb6uJu0h jS3A== 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=7gSgxpoZvck6q57Fc1Ag09/Sll6e8T2kyeInAsQ6ito=; b=ccCKGU5jDpYbk2FRcGoM52lzrGNhvTU5hYIfZfArIOk4BL9u5iSKpPvVvPEMx1z2CV oUJbFU7hiuiYajTVBrFjdaTWIWf+sFruM7O0hW2ieFtdO5pOYA/pxrDBG78g1RVCN6p4 zBBZBtiBlUlrqOr1XHLRjS9ZbciWMsEn9KVAyWZuRqTZ87DwTqPvRh448VdhlKbrhZhK ml48/DKLat7KhvMFA/XqkoW907dYSWnIKBd8z7rCqFYCj5BfJImlzk4cnL9NYG6bVDM+ 3NC0TCQqZ6CqhGhMpeQgDzG/nTf/cl5tVOFr2TIQtmgGAnaKhafJfy0/EwNYgINhbJfO z4YQ== X-Gm-Message-State: APjAAAX0TT1bs1//69wnc/g0rtANxmPasyCtJUXHpHeVChYGjSCHvG9O yM8RCnVDJzG7j9+TmI3VoXo= X-Google-Smtp-Source: APXvYqykeUB6eirz9G4egN4Ti2bhq0KETwXQb4JSVJ9+C9N0Y2UHGYBmzeGmjZHPuB48abZtPm9gXQ== X-Received: by 2002:a62:204b:: with SMTP id g72mr90392624pfg.51.1555540443714; Wed, 17 Apr 2019 15:34:03 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l26sm281030pfb.20.2019.04.17.15.33.57 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 17 Apr 2019 15:34:03 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v3 01/16] PM / devfreq: tegra: Fix kHz to Hz conversion Date: Thu, 18 Apr 2019 01:29:10 +0300 Message-Id: <20190417222925.5815-2-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190417222925.5815-1-digetx@gmail.com> References: <20190417222925.5815-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The kHz to Hz is incorrectly converted in a few places in the code, this results in a wrong frequency being calculated because devfreq core uses OPP frequencies that are given in Hz to clamp the rate, while tegra-devfreq gives to the core value in kHz and then it also expects to receive value in kHz from the core. In a result memory freq is always set to a value which is close to ULONG_MAX because of the bug. Hence the EMC frequency is always capped to the maximum and the driver doesn't do anything useful. This patch was tested on Tegra30 and Tegra124 SoC's, EMC frequency scaling works properly now. Cc: # 4.14+ Tested-by: Steev Klimaszewski Reviewed-by: Chanwoo Choi Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra-devfreq.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index c89ba7b834ff..43cd1233f87b 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -486,11 +486,11 @@ static int tegra_devfreq_target(struct device *dev, unsigned long *freq, { struct tegra_devfreq *tegra = dev_get_drvdata(dev); struct dev_pm_opp *opp; - unsigned long rate = *freq * KHZ; + unsigned long rate; - opp = devfreq_recommended_opp(dev, &rate, flags); + opp = devfreq_recommended_opp(dev, freq, flags); if (IS_ERR(opp)) { - dev_err(dev, "Failed to find opp for %lu KHz\n", *freq); + dev_err(dev, "Failed to find opp for %lu Hz\n", *freq); return PTR_ERR(opp); } rate = dev_pm_opp_get_freq(opp); @@ -499,8 +499,6 @@ static int tegra_devfreq_target(struct device *dev, unsigned long *freq, clk_set_min_rate(tegra->emc_clock, rate); clk_set_rate(tegra->emc_clock, 0); - *freq = rate; - return 0; } @@ -510,7 +508,7 @@ static int tegra_devfreq_get_dev_status(struct device *dev, struct tegra_devfreq *tegra = dev_get_drvdata(dev); struct tegra_devfreq_device *actmon_dev; - stat->current_frequency = tegra->cur_freq; + stat->current_frequency = tegra->cur_freq * KHZ; /* To be used by the tegra governor */ stat->private_data = tegra; @@ -565,7 +563,7 @@ static int tegra_governor_get_target(struct devfreq *devfreq, target_freq = max(target_freq, dev->target_freq); } - *freq = target_freq; + *freq = target_freq * KHZ; return 0; } From patchwork Wed Apr 17 22:29:11 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 10906357 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C21131390 for ; Wed, 17 Apr 2019 22:41:14 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id ADD1028B6E for ; Wed, 17 Apr 2019 22:41:14 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A23B228B7B; Wed, 17 Apr 2019 22:41:14 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 43CC828B6E for ; Wed, 17 Apr 2019 22:41:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387607AbfDQWlF (ORCPT ); Wed, 17 Apr 2019 18:41:05 -0400 Received: from mail-pl1-f193.google.com ([209.85.214.193]:35617 "EHLO mail-pl1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729079AbfDQWlF (ORCPT ); Wed, 17 Apr 2019 18:41:05 -0400 Received: by mail-pl1-f193.google.com with SMTP id w24so181274plp.2; Wed, 17 Apr 2019 15:41:04 -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:in-reply-to:references :mime-version:content-transfer-encoding; bh=MfIFaN/cDvep9inRd5PqDA7WzNgKemRCq9lkW6WG194=; b=gZUf0MJLz1hjZN+HLg990m7oIWJZwioScKmoZ88SXDUEZ/pLHcZK+AHFo4AgMLf5Ha qKB50yzy9zN0wrxyYFrpXlgJLl9x69HK1Go4+VmoUypMcQZi3ycXt8t+DwHiOKZCTbXt sAni1PVSAcN9rEqGC0grl0qSChFuVMnYKyjcNZYnUqIfe2J0Weq0R7+JUm5oZ/gDgSNd VCiGUNF58NDS5a2tD47oql9kB3yjykY+/kWe4M+XYL7XProLgXr+cw2DYyf2hXQlQpVb 6R1mLYblCDiQuJSbTc8QUqSxSqbTmQ6QvTU4ZsiAOvfcpiw0O9YpPzA9OV7InV/0ZWkL GqOQ== 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=MfIFaN/cDvep9inRd5PqDA7WzNgKemRCq9lkW6WG194=; b=gFinQks6IdqmcGVmzi5oVW79Cpn6A9/L/aKdItiyNCrUN9VVWRTLCi/myeDIgvNety /w6HKCb/+ABxVadPm7LisnIPWTvrA2V8PTGM7WRsMbvmr2/3UKh9esotXURDVwYDK+IW JNLDZTsqi8eV7K/pkDXF3y1hg3SW7Npu8QVZDB318tm9WG7kWnHCO5SQdGFLpXJkOxw1 SDKRkusgvnD0EvxagNoMXX/aMALaEUMhr7b1Cdd/QBCIaKfRXXxKT5Z+SUszFDZo58MC 84YlQpQ8hseULwYBDjMnomiE3eUseOV+bCr1DYKrUv0/2xWjRpkNyMyN6CNu6tmjG97C b8pw== X-Gm-Message-State: APjAAAVlReXQa2vxWJx+tcJjF9N3C6wKTw0XwAygfkmZuNBcTv7h+myJ GHPoXQmkC8hoQjgp/PVP9rg= X-Google-Smtp-Source: APXvYqxD8zyDfsyd12cU9lZENFvoXgXHm2vw//SmJBRxzO3RVC2nGtjX3VZzavkaxuzwgXId/24qEg== X-Received: by 2002:a17:902:b94a:: with SMTP id h10mr92452463pls.82.1555540450496; Wed, 17 Apr 2019 15:34:10 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l26sm281030pfb.20.2019.04.17.15.34.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 17 Apr 2019 15:34:09 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v3 02/16] PM / devfreq: tegra: Replace readl-writel with relaxed versions Date: Thu, 18 Apr 2019 01:29:11 +0300 Message-Id: <20190417222925.5815-3-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190417222925.5815-1-digetx@gmail.com> References: <20190417222925.5815-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP There is no need to insert memory barrier on each readl/writel invocation, hence use the relaxed versions. Reviewed-by: Chanwoo Choi Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra-devfreq.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index 43cd1233f87b..f7378a42d184 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -191,23 +191,23 @@ static struct tegra_actmon_emc_ratio actmon_emc_ratios[] = { static u32 actmon_readl(struct tegra_devfreq *tegra, u32 offset) { - return readl(tegra->regs + offset); + return readl_relaxed(tegra->regs + offset); } static void actmon_writel(struct tegra_devfreq *tegra, u32 val, u32 offset) { - writel(val, tegra->regs + offset); + writel_relaxed(val, tegra->regs + offset); } static u32 device_readl(struct tegra_devfreq_device *dev, u32 offset) { - return readl(dev->regs + offset); + return readl_relaxed(dev->regs + offset); } static void device_writel(struct tegra_devfreq_device *dev, u32 val, u32 offset) { - writel(val, dev->regs + offset); + writel_relaxed(val, dev->regs + offset); } static unsigned long do_percent(unsigned long val, unsigned int pct) From patchwork Wed Apr 17 22:29:12 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 10906373 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id ACD721390 for ; Wed, 17 Apr 2019 22:42:52 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9575928B6E for ; Wed, 17 Apr 2019 22:42:52 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8627228B7B; Wed, 17 Apr 2019 22:42:52 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2601428B6E for ; Wed, 17 Apr 2019 22:42:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387578AbfDQWmh (ORCPT ); Wed, 17 Apr 2019 18:42:37 -0400 Received: from mail-pg1-f195.google.com ([209.85.215.195]:37775 "EHLO mail-pg1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725848AbfDQWmh (ORCPT ); Wed, 17 Apr 2019 18:42:37 -0400 Received: by mail-pg1-f195.google.com with SMTP id e6so213826pgc.4; Wed, 17 Apr 2019 15:42:36 -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:in-reply-to:references :mime-version:content-transfer-encoding; bh=pafXGoHRoY3A9Ph0hnVkDMbF8BglHn/cfuWPvnCS8lw=; b=fqhSHNmQRy7y06vC6WeN/3ibyxgU8qX9OHe08A8MxJjWQcI/wUreW9AfoBVOwKkXg5 J01KwnlgyKtGg7ZTdBJ/atOPYOaJMLeLDxsG+xwbjvHdPPfyTHO/u+/ZpY2ZvGLJC9K4 IzawYgvu+kTRXBRhoDTRsVqFJY5AGQgAS8KXDmDQJOw7JTW8zGZcoBsEs1n1BUzQLjuO XfwT9EN7hihmyxpQrGpwo6beC1hnHwl9NpxRWuT9rUQ0GHFdCjNHFH0V4cDLq6MmC/Cn 2VUcrG+gKdqNQC8fB+LaEZR+T7zjYYzY7uxl4wM85Iffi3867tUFZjyme6rUSFVfgjoJ ys2A== 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=pafXGoHRoY3A9Ph0hnVkDMbF8BglHn/cfuWPvnCS8lw=; b=UcANLHnjdoqKJhz1CfBvdr82puLbAGJQRZ1z0ar05c/iBByFVDDJ1fBKhANienpEDM CsPf9rUJNCzA+6yPs16SxjQ1A/mXl5K2S14o+ocyEQ30RUqe4/Wq/rvNCALaJV2RjjvT Y3lca3Hu0fQJIPygAjquq5ADobaYXqlk6moMET0MHctrEmk1S40re3mDAYYx6TTAnksw KiVUG3O5Y9l+I4ja4FuW/U+swUrLX9RRPfxPAvJQMSUB8wdNWAkWLntO268E82fsETdE l/jWjGnV+3jaE4WXuyvFAIOY/HJQ45uAmWjXDbLcY+mDbk08dU2XdWaGI2F9qzKXltsg GGnw== X-Gm-Message-State: APjAAAUrUYAhNorcEx0r3eI9gLf1yOpVrRdK+BSQRa2EosaLOWU3j3b9 Z7VuyFOZmNNL1w2Mn4WWXAw= X-Google-Smtp-Source: APXvYqz1NF1ezLUhlkM2Vr4oOeYBbg7GWGjmBKTim7Qiq+4Q8cX3IuyIH1/ixYKCcuKByFdkG1Km+Q== X-Received: by 2002:aa7:85d9:: with SMTP id z25mr92085581pfn.31.1555540457209; Wed, 17 Apr 2019 15:34:17 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l26sm281030pfb.20.2019.04.17.15.34.10 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 17 Apr 2019 15:34:16 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v3 03/16] PM / devfreq: tegra: Replace write memory barrier with the read barrier Date: Thu, 18 Apr 2019 01:29:12 +0300 Message-Id: <20190417222925.5815-4-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190417222925.5815-1-digetx@gmail.com> References: <20190417222925.5815-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The write memory barrier isn't needed because the BUS buffer is flushed by read after write that happens after the removed wmb(), we will also use readl() instead of the relaxed version to ensure that read is indeed completed. Reviewed-by: Chanwoo Choi Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra-devfreq.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index f7378a42d184..7d7b9a5895b2 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -243,8 +243,7 @@ static void tegra_devfreq_update_wmark(struct tegra_devfreq *tegra, static void actmon_write_barrier(struct tegra_devfreq *tegra) { /* ensure the update has reached the ACTMON */ - wmb(); - actmon_readl(tegra, ACTMON_GLB_STATUS); + readl(tegra->regs + ACTMON_GLB_STATUS); } static void actmon_isr_device(struct tegra_devfreq *tegra, From patchwork Wed Apr 17 22:29:13 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 10906351 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D8C721390 for ; Wed, 17 Apr 2019 22:40:38 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C48E128B6E for ; Wed, 17 Apr 2019 22:40:38 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B909E28B7B; Wed, 17 Apr 2019 22:40:38 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6D3FE28B6E for ; Wed, 17 Apr 2019 22:40:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387561AbfDQWkc (ORCPT ); Wed, 17 Apr 2019 18:40:32 -0400 Received: from mail-pf1-f195.google.com ([209.85.210.195]:33748 "EHLO mail-pf1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387506AbfDQWkc (ORCPT ); Wed, 17 Apr 2019 18:40:32 -0400 Received: by mail-pf1-f195.google.com with SMTP id h5so150586pfo.0; Wed, 17 Apr 2019 15:40:32 -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:in-reply-to:references :mime-version:content-transfer-encoding; bh=lQt5SyxbZBQA5PhlPjU2yH3iv3jJNAlRNNELR/55A5Y=; b=q5cphJCaaTLcNknoPQphcV0nu8xswtz8zVzOAHIQZFvyaeadsYryNGKxoViGHMB8vG tELPG1co8EOqaiCr8gk05Lfvd+EMw5Bh7fhPq+OzFLVqNGsODE72I9LcYBKzqnrwEtOF B/ZGt59L2bJgqFuuIRNMVwJvpX5HgcdpA1daX79qRT0ujWw5GtpuuCUe2ejY+oUe/DI/ +D2sL6HncDHsbshy31lwxfv7hS1gj8ykCx86H5YhQBsEFNuciqgSxLnrzF8BsxRZ8aQY Nx1o/M/zntiC7r+phTTtbxo/YhereEWlB7B/Hv6WLIs5hnda9CxoNVHs5J9t7BFHMVqE Q/ZA== 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=lQt5SyxbZBQA5PhlPjU2yH3iv3jJNAlRNNELR/55A5Y=; b=CjQIWyXP2u48+yp/b26qpCeOZLs1u/+iyS149fP4/gVMI37YcZjDtp7he1fuN/fWXD FI5CBIxS9D9nh7ZH7Jzi15e0j+ov30zGQNVb3vodSJ39Fdyto6Y5J2voN5b7MRtl86Dr Kifxd6hlKPQh74SX564qJEbni/1rScAZB89OwNj85Da08PrrkTGRvMOVEqW9oNrZm4wv 5Y1EPACtabEw8vrkJOvaa8b1uZ5THrETs5tADsiiREKeZ0ifD5ZksM76Mg78lvMer9aI 3M3I5uUcmeR6MwAcifit2qnGubK5NkfLZRFQyLoVm21GpcylgfKcSQdXFlayxfRzZzFw U0HA== X-Gm-Message-State: APjAAAXC+VIbih2H7I5ntUxW8ghJ1QGJGSEIyOf0jX+8WoE3BM8pT853 fqW+hu+OEXmVlAAWICIXSko= X-Google-Smtp-Source: APXvYqzPy+1pd3AnQMWyzEo7Vtv0dunMOHGYZbQgTrXS/VLJW+GIvWF76kBQq3DM8gRCkJy3Kp1ZKQ== X-Received: by 2002:a05:6a00:11:: with SMTP id h17mr44286279pfk.232.1555540464015; Wed, 17 Apr 2019 15:34:24 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l26sm281030pfb.20.2019.04.17.15.34.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 17 Apr 2019 15:34:23 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v3 04/16] PM / devfreq: tegra: Don't ignore clk errors Date: Thu, 18 Apr 2019 01:29:13 +0300 Message-Id: <20190417222925.5815-5-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190417222925.5815-1-digetx@gmail.com> References: <20190417222925.5815-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The clk_set_min_rate() could fail and in this case clk_set_rate() sets rate to 0, which may drop EMC rate to minimum and make machine very difficult to use. Signed-off-by: Dmitry Osipenko Reviewed-by: Chanwoo Choi --- drivers/devfreq/tegra-devfreq.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index 7d7b9a5895b2..c7428c5eee23 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -484,8 +484,10 @@ static int tegra_devfreq_target(struct device *dev, unsigned long *freq, u32 flags) { struct tegra_devfreq *tegra = dev_get_drvdata(dev); + struct devfreq *devfreq = tegra->devfreq; struct dev_pm_opp *opp; unsigned long rate; + int err; opp = devfreq_recommended_opp(dev, freq, flags); if (IS_ERR(opp)) { @@ -495,10 +497,20 @@ static int tegra_devfreq_target(struct device *dev, unsigned long *freq, rate = dev_pm_opp_get_freq(opp); dev_pm_opp_put(opp); - clk_set_min_rate(tegra->emc_clock, rate); - clk_set_rate(tegra->emc_clock, 0); + err = clk_set_min_rate(tegra->emc_clock, rate); + if (err) + return err; + + err = clk_set_rate(tegra->emc_clock, 0); + if (err) + goto restore_min_rate; return 0; + +restore_min_rate: + clk_set_min_rate(tegra->emc_clock, devfreq->previous_freq); + + return err; } static int tegra_devfreq_get_dev_status(struct device *dev, From patchwork Wed Apr 17 22:29:14 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 10906345 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 7BD50161F for ; Wed, 17 Apr 2019 22:40:06 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 627C9287E7 for ; Wed, 17 Apr 2019 22:40:06 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 515C028952; Wed, 17 Apr 2019 22:40:06 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 44DB8287E7 for ; Wed, 17 Apr 2019 22:40:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730361AbfDQWjx (ORCPT ); Wed, 17 Apr 2019 18:39:53 -0400 Received: from mail-pg1-f194.google.com ([209.85.215.194]:32844 "EHLO mail-pg1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725848AbfDQWjw (ORCPT ); Wed, 17 Apr 2019 18:39:52 -0400 Received: by mail-pg1-f194.google.com with SMTP id k19so220234pgh.0; Wed, 17 Apr 2019 15:39:52 -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:in-reply-to:references :mime-version:content-transfer-encoding; bh=hT2F8IjKIQoszn6Buk6j3BScSUALq9H2lCvIgZ7MA44=; b=nMWkuCWPEy6xYKGNLnQQZ2wVDGHklhg6yR+3Z9AOiIxqZwzSE/SJ7ugOYVcpODMCo1 CoffGqPHSX6M40W37VklMFwsmrDvnSr11u8i3JJncfIAq02G3hkrW1MIDNCBEeymzdSO rc8cpqLIDDN6wqu01N0JGG6p6VpVx5TFVmxPolw+51jTVMzXGXtVfLddGjGUHOoJogRI 1dvNd+Izp9Q8tgNYAZwIlXrzj5K7qo3TRKNr8HoSR1S2H074rWzOEZ391KkeoFEp2BHe 94oeOAHb+tt0/wsPNej06r99G7qw7yoMn3OMrlm8uxCdoy1eCExoicq4Pz67oDDnfnCB ZOzQ== 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=hT2F8IjKIQoszn6Buk6j3BScSUALq9H2lCvIgZ7MA44=; b=XkkX/oKQXibHCCYecAgZD8gybHaDM8Rbj3Asb3V0gt/1lp2M49E4bGzFUXeULNV0Hz +4K40iLH9kzpEqhSjsZCm+lRj/yylps3tlfseq0jUdi4dm763wBbBpSqp0LBM9s5HA4o BRGVyFss6AYE7FIx31mKs9F78ydCMVDSg9osOx2tMmhnQTXhrHWlIusMErzLpPs5U/eg 5h/1Yf21H5hJ6rM37mcRe9AcrFSC8sV9c9nTLbzSF4lUMrADQbc4GjOOS/oH/qjN7IvI NttZQ78v92pAjy9qzXlzsh0gIYP/HODLK2q4tDTnjq+ZB6Fgx4700PisS+AFi5Rx4cPX GSYA== X-Gm-Message-State: APjAAAUIZp7I3G5wG6VcesEBhKg4/ddINkT+JbdsJsAKubnhi0NQeXXh 2ou3/K160qHABFcXUaZjtfQ= X-Google-Smtp-Source: APXvYqw/qkTcwNganclPa7L+waXlLyeek6AotB65mpl+0/MFZQZpqItmhFqEAnYG8x6gJc8zWzDb5A== X-Received: by 2002:a65:6655:: with SMTP id z21mr49205781pgv.33.1555540470935; Wed, 17 Apr 2019 15:34:30 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l26sm281030pfb.20.2019.04.17.15.34.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 17 Apr 2019 15:34:30 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v3 05/16] PM / devfreq: tegra: Don't set EMC clock rate to maximum on probe Date: Thu, 18 Apr 2019 01:29:14 +0300 Message-Id: <20190417222925.5815-6-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190417222925.5815-1-digetx@gmail.com> References: <20190417222925.5815-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP There is no real benefit from doing so, hence let's drop that rate setting for consistency. Reviewed-by: Chanwoo Choi Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra-devfreq.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index c7428c5eee23..24ec65556c39 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -653,8 +653,6 @@ static int tegra_devfreq_probe(struct platform_device *pdev) return PTR_ERR(tegra->emc_clock); } - clk_set_rate(tegra->emc_clock, ULONG_MAX); - tegra->rate_change_nb.notifier_call = tegra_actmon_rate_notify_cb; err = clk_notifier_register(tegra->emc_clock, &tegra->rate_change_nb); if (err) { From patchwork Wed Apr 17 22:29:15 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 10906369 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id EEF9D161F for ; Wed, 17 Apr 2019 22:42:44 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D854E28B6E for ; Wed, 17 Apr 2019 22:42:44 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id CBAAC28B7B; Wed, 17 Apr 2019 22:42:44 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4C39828B6E for ; Wed, 17 Apr 2019 22:42:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387793AbfDQWmi (ORCPT ); Wed, 17 Apr 2019 18:42:38 -0400 Received: from mail-pf1-f194.google.com ([209.85.210.194]:42943 "EHLO mail-pf1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387569AbfDQWmi (ORCPT ); Wed, 17 Apr 2019 18:42:38 -0400 Received: by mail-pf1-f194.google.com with SMTP id w25so132205pfi.9; Wed, 17 Apr 2019 15:42:37 -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:in-reply-to:references :mime-version:content-transfer-encoding; bh=IH0pLwwRbv47T9XNR0cT/BCMrgmfF5LArY0xNHrsMrc=; b=uxzCQdrK32LVR/6ByHW6SGfzwOQ2gAHoFwnuQ7n/yVCD6qfUB4AopLgzerWHvH9z77 +yYX5bSn5lk7n1gooHQs0PVVShyaevjS2KyTKMUwnwb3jAPUsCvRIqZdWPWbscpytTzB xDSxFGWd9iY4U1b5+8XNJLVEZx9A3AQEeKhwprr/buDchXio/Ne3hC2/hzppDWxLHSh1 WARFxVPfphsYsJJqije6l8jtknfiT3SyoT9QfZWpYIh1IO1PdB5ECN0w7aF3i38hGvYq CVON4biIS8m8qH/9ke2Qm9oXIlKCs2B92Q/tAv3fP2jXKxqD7j217AOyTD9zNLoxU8iO 873Q== 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=IH0pLwwRbv47T9XNR0cT/BCMrgmfF5LArY0xNHrsMrc=; b=BTp+s1WLdqYDMsDZo7g5x2zDzWMA79g907mCMJqIB5UK8lDFTnD4eZBOVXJFnbkwpB dFH8wh+sDG1buUycaak8GAZO1pXzAEV9gSUs9neY5C1o1sg+jCVafUWzai9wo1Nd1UQy lhzEZtCY2KWZjCRv+i+wzf20qQMwup2zXuGVuQWENvTW0cFe005oDmZ6UAQ3l4ChPjwn oZrd3rLZiQKqyLbwfxCEbKOzRcQ7sADJrxF04HZvoz/oHt0+WdmDupLmrflC2tvDEJZf uRIUjMkt+jC4Xt43ca6UEgnKuFyUOtEd88qJTunoO9p/T/k8kxLrlBs33OXQLWeu0ioe cPww== X-Gm-Message-State: APjAAAWittL9OqFYI41+zE2JGkm8dkzuAYKk1zyzBk6+BJAUE3ZvrfAj EexbiJWjEwycqbv2lNz/u38= X-Google-Smtp-Source: APXvYqx9xBvUto5kHMobG06D9k07efckxEfhWjdZJEEbsgN4lDp4fVhNLnDp4uPdeLvyhswxDCtBWA== X-Received: by 2002:a63:e70c:: with SMTP id b12mr82284143pgi.399.1555540477636; Wed, 17 Apr 2019 15:34:37 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l26sm281030pfb.20.2019.04.17.15.34.31 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 17 Apr 2019 15:34:37 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v3 06/16] PM / devfreq: tegra: Drop primary interrupt handler Date: Thu, 18 Apr 2019 01:29:15 +0300 Message-Id: <20190417222925.5815-7-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190417222925.5815-1-digetx@gmail.com> References: <20190417222925.5815-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP There is no real need in the primary interrupt handler, hence move everything to the secondary (threaded) handler. In a result locking is consistent now and there are no potential races with the interrupt handler because it is protected with the devfreq's mutex. Signed-off-by: Dmitry Osipenko Reviewed-by: Chanwoo Choi --- drivers/devfreq/tegra-devfreq.c | 55 +++++++++++---------------------- 1 file changed, 18 insertions(+), 37 deletions(-) diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index 24ec65556c39..b65313fe3c2e 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -144,7 +144,6 @@ static struct tegra_devfreq_device_config actmon_device_configs[] = { struct tegra_devfreq_device { const struct tegra_devfreq_device_config *config; void __iomem *regs; - spinlock_t lock; /* Average event count sampled in the last interrupt */ u32 avg_count; @@ -249,11 +248,8 @@ static void actmon_write_barrier(struct tegra_devfreq *tegra) static void actmon_isr_device(struct tegra_devfreq *tegra, struct tegra_devfreq_device *dev) { - unsigned long flags; u32 intr_status, dev_ctrl; - spin_lock_irqsave(&dev->lock, flags); - dev->avg_count = device_readl(dev, ACTMON_DEV_AVG_COUNT); tegra_devfreq_update_avg_wmark(tegra, dev); @@ -302,26 +298,6 @@ static void actmon_isr_device(struct tegra_devfreq *tegra, device_writel(dev, ACTMON_INTR_STATUS_CLEAR, ACTMON_DEV_INTR_STATUS); actmon_write_barrier(tegra); - - spin_unlock_irqrestore(&dev->lock, flags); -} - -static irqreturn_t actmon_isr(int irq, void *data) -{ - struct tegra_devfreq *tegra = data; - bool handled = false; - unsigned int i; - u32 val; - - val = actmon_readl(tegra, ACTMON_GLB_STATUS); - for (i = 0; i < ARRAY_SIZE(tegra->devices); i++) { - if (val & tegra->devices[i].config->irq_mask) { - actmon_isr_device(tegra, tegra->devices + i); - handled = true; - } - } - - return handled ? IRQ_WAKE_THREAD : IRQ_NONE; } static unsigned long actmon_cpu_to_emc_rate(struct tegra_devfreq *tegra, @@ -348,15 +324,12 @@ static void actmon_update_target(struct tegra_devfreq *tegra, unsigned long cpu_freq = 0; unsigned long static_cpu_emc_freq = 0; unsigned int avg_sustain_coef; - unsigned long flags; if (dev->config->avg_dependency_threshold) { cpu_freq = cpufreq_get(0); static_cpu_emc_freq = actmon_cpu_to_emc_rate(tegra, cpu_freq); } - spin_lock_irqsave(&dev->lock, flags); - dev->target_freq = dev->avg_count / ACTMON_SAMPLING_PERIOD; avg_sustain_coef = 100 * 100 / dev->config->boost_up_threshold; dev->target_freq = do_percent(dev->target_freq, avg_sustain_coef); @@ -364,19 +337,31 @@ static void actmon_update_target(struct tegra_devfreq *tegra, if (dev->avg_count >= dev->config->avg_dependency_threshold) dev->target_freq = max(dev->target_freq, static_cpu_emc_freq); - - spin_unlock_irqrestore(&dev->lock, flags); } static irqreturn_t actmon_thread_isr(int irq, void *data) { struct tegra_devfreq *tegra = data; + bool handled = false; + unsigned int i; + u32 val; mutex_lock(&tegra->devfreq->lock); - update_devfreq(tegra->devfreq); + + val = actmon_readl(tegra, ACTMON_GLB_STATUS); + for (i = 0; i < ARRAY_SIZE(tegra->devices); i++) { + if (val & tegra->devices[i].config->irq_mask) { + actmon_isr_device(tegra, tegra->devices + i); + handled = true; + } + } + + if (handled) + update_devfreq(tegra->devfreq); + mutex_unlock(&tegra->devfreq->lock); - return IRQ_HANDLED; + return handled ? IRQ_HANDLED : IRQ_NONE; } static int tegra_actmon_rate_notify_cb(struct notifier_block *nb, @@ -386,7 +371,6 @@ static int tegra_actmon_rate_notify_cb(struct notifier_block *nb, struct tegra_devfreq *tegra; struct tegra_devfreq_device *dev; unsigned int i; - unsigned long flags; if (action != POST_RATE_CHANGE) return NOTIFY_OK; @@ -398,9 +382,7 @@ static int tegra_actmon_rate_notify_cb(struct notifier_block *nb, for (i = 0; i < ARRAY_SIZE(tegra->devices); i++) { dev = &tegra->devices[i]; - spin_lock_irqsave(&dev->lock, flags); tegra_devfreq_update_wmark(tegra, dev); - spin_unlock_irqrestore(&dev->lock, flags); } actmon_write_barrier(tegra); @@ -682,7 +664,6 @@ static int tegra_devfreq_probe(struct platform_device *pdev) dev = tegra->devices + i; dev->config = actmon_device_configs + i; dev->regs = tegra->regs + dev->config->offset; - spin_lock_init(&dev->lock); tegra_actmon_configure_device(tegra, dev); } @@ -700,8 +681,8 @@ static int tegra_devfreq_probe(struct platform_device *pdev) platform_set_drvdata(pdev, tegra); - err = devm_request_threaded_irq(&pdev->dev, irq, actmon_isr, - actmon_thread_isr, IRQF_SHARED, + err = devm_request_threaded_irq(&pdev->dev, irq, NULL, + actmon_thread_isr, IRQF_ONESHOT, "tegra-devfreq", tegra); if (err) { dev_err(&pdev->dev, "Interrupt request failed\n"); From patchwork Wed Apr 17 22:29:16 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 10906371 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 948FC161F for ; Wed, 17 Apr 2019 22:42:50 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7FE8328B79 for ; Wed, 17 Apr 2019 22:42:50 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 71B8F28B6E; Wed, 17 Apr 2019 22:42:50 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1304928B6E for ; Wed, 17 Apr 2019 22:42:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387617AbfDQWmo (ORCPT ); Wed, 17 Apr 2019 18:42:44 -0400 Received: from mail-pg1-f194.google.com ([209.85.215.194]:43708 "EHLO mail-pg1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725848AbfDQWmi (ORCPT ); Wed, 17 Apr 2019 18:42:38 -0400 Received: by mail-pg1-f194.google.com with SMTP id z9so199531pgu.10; Wed, 17 Apr 2019 15:42:38 -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:in-reply-to:references :mime-version:content-transfer-encoding; bh=bd6CuU34AilBms8eSyHr+RYrpMcFPF6MtjKM0lW5yy0=; b=bp8qCbUSM8fk5ikmVaYDZHCOm5pWkt4TscIrcrDyOmQlyy4vu2OAAW6fD1p2GVpBa5 2I0fxxhyys+fyMSYEkQYcZ3MLKuwsNx6r9RnN5S0L0Fi+RWSptbbxF6gJBMSQHv4uFpV 3MBHLGrcJ3CllW8MmHGtSItV1WqaY4uyoKHFtskQlcjrpf5/x62xpw2SuffeQTwRJu3n VIjSifTb/Br3JrugO63aGHbD51i3eMWCPGt/o45tTxfnJ8o4g6Oep9gnDSLhyqPklahe ow4Pl5bdkdySxkHiLYE8xYll/eotnZiNphaj8HsOH0Q7jtj5GTl0/YgdX5gV5FDRmKNH wvhA== 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=bd6CuU34AilBms8eSyHr+RYrpMcFPF6MtjKM0lW5yy0=; b=R1zmslewvy4bbQNmtWgGf/rhsXgrkQ7qnXi5LVsyiWjEaZjdtYFGXC1O6+RW6SklCp DMgxtHfxKxzujiDcrhskM1AYIZ71LKVGZN+bR4gQRQ8Xs8GdnEvZflhNGsk3irWVNcUT cXzkj7BbbxL2DMM2uPvpp0S+FXLPp7oj30js5V5SEExJUyF5FcDq/DVoXJw2RC5ertDX DPmHDIgJ4K2LLbnpRp9uBEq5nRwx6OYo4aOiEU4dhZnNs9iJeueId73F3Ou06fTpXrLC dnPg5G/ZcQ1Qco3NDRGsxDnDgkYWut4jWga+awCaGF//5nbEEkf7pxfLt5FSHKgOJzg7 nf6A== X-Gm-Message-State: APjAAAUy6Ldt96RMq2Y7YVy1foqRy4ClAvhLDOWEGdCOQSsdmxkHrho5 QqZfROkyCjzD7LdzBvh1x08= X-Google-Smtp-Source: APXvYqywS8RqrxMwKtai/xDuvIet5MYHvg3YV6tHi7dqnQsHfBCJ0a6joxu1te5dyJy3Q/g0rqAQJQ== X-Received: by 2002:a65:448b:: with SMTP id l11mr85063289pgq.185.1555540484380; Wed, 17 Apr 2019 15:34:44 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l26sm281030pfb.20.2019.04.17.15.34.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 17 Apr 2019 15:34:43 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v3 07/16] PM / devfreq: tegra: Properly disable interrupts Date: Thu, 18 Apr 2019 01:29:16 +0300 Message-Id: <20190417222925.5815-8-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190417222925.5815-1-digetx@gmail.com> References: <20190417222925.5815-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP There is no guarantee that interrupt handling isn't running in parallel with tegra_actmon_disable_interrupts(), hence it is necessary to protect DEV_CTRL register accesses and clear IRQ status with ACTMON's IRQ being disabled in the Interrupt Controller in order to ensure that device interrupt is indeed being disabled. Signed-off-by: Dmitry Osipenko Reviewed-by: Chanwoo Choi --- drivers/devfreq/tegra-devfreq.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index b65313fe3c2e..ce1eb97a2090 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -171,6 +171,8 @@ struct tegra_devfreq { struct notifier_block rate_change_nb; struct tegra_devfreq_device devices[ARRAY_SIZE(actmon_device_configs)]; + + int irq; }; struct tegra_actmon_emc_ratio { @@ -417,6 +419,8 @@ static void tegra_actmon_disable_interrupts(struct tegra_devfreq *tegra) u32 val; unsigned int i; + disable_irq(tegra->irq); + for (i = 0; i < ARRAY_SIZE(tegra->devices); i++) { dev = &tegra->devices[i]; @@ -427,9 +431,14 @@ static void tegra_actmon_disable_interrupts(struct tegra_devfreq *tegra) val &= ~ACTMON_DEV_CTRL_CONSECUTIVE_ABOVE_WMARK_EN; device_writel(dev, val, ACTMON_DEV_CTRL); + + device_writel(dev, ACTMON_INTR_STATUS_CLEAR, + ACTMON_DEV_INTR_STATUS); } actmon_write_barrier(tegra); + + enable_irq(tegra->irq); } static void tegra_actmon_configure_device(struct tegra_devfreq *tegra, @@ -604,7 +613,6 @@ static int tegra_devfreq_probe(struct platform_device *pdev) struct resource *res; unsigned int i; unsigned long rate; - int irq; int err; tegra = devm_kzalloc(&pdev->dev, sizeof(*tegra), GFP_KERNEL); @@ -673,15 +681,16 @@ static int tegra_devfreq_probe(struct platform_device *pdev) dev_pm_opp_add(&pdev->dev, rate, 0); } - irq = platform_get_irq(pdev, 0); - if (irq < 0) { - dev_err(&pdev->dev, "Failed to get IRQ: %d\n", irq); - return irq; + tegra->irq = platform_get_irq(pdev, 0); + if (tegra->irq < 0) { + err = tegra->irq; + dev_err(&pdev->dev, "Failed to get IRQ: %d\n", err); + return err; } platform_set_drvdata(pdev, tegra); - err = devm_request_threaded_irq(&pdev->dev, irq, NULL, + err = devm_request_threaded_irq(&pdev->dev, tegra->irq, NULL, actmon_thread_isr, IRQF_ONESHOT, "tegra-devfreq", tegra); if (err) { From patchwork Wed Apr 17 22:29:17 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 10906355 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 2E899161F for ; Wed, 17 Apr 2019 22:41:13 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1A9D228B6E for ; Wed, 17 Apr 2019 22:41:13 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0E96528B7B; Wed, 17 Apr 2019 22:41:13 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 86D4128B6E for ; Wed, 17 Apr 2019 22:41:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387545AbfDQWlH (ORCPT ); Wed, 17 Apr 2019 18:41:07 -0400 Received: from mail-pl1-f195.google.com ([209.85.214.195]:46222 "EHLO mail-pl1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387624AbfDQWlG (ORCPT ); Wed, 17 Apr 2019 18:41:06 -0400 Received: by mail-pl1-f195.google.com with SMTP id y6so156025pll.13; Wed, 17 Apr 2019 15:41:05 -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:in-reply-to:references :mime-version:content-transfer-encoding; bh=86fe+O7jXPA0qhy2wYrXIFfPfbOKD6IEbw+ZHbB55Jw=; b=ShvckbTbf5uva6JBmfeHPUGpnJfTmMF6naxlXa7RdilrKH23aKbj2xIXQGH6h27Q2J j1SLP+f8zCRPUFVrQkGcHuYZm/J2/ne9liMR1MEOM2s0tFnGp7V0tiWqmghH86XCHb/l nvucwylTk7Yi4VCFbKuQNsJ9RFpzPl+ZiAgGC20sKaNCugtMeTUfaNvME7+xOa/yakgG 9BiwXbjV9cKRhHV9JW373oD8BAP2lBJq2RJaJVheUaCP9znFA+T7amL/lr51YErnJ2Ke ndgSroPIOO9I9s/npm0CtEeVKYoWXOHp4UhWN+vL6DAjyxxHv8CEamsrEGq5+rKmLk31 c0Mw== 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=86fe+O7jXPA0qhy2wYrXIFfPfbOKD6IEbw+ZHbB55Jw=; b=FhD84aoAgKTHgDEtfc9Aeia4QofPKlCFd0SLgY09Sufo7+dds4QHogHuoZYFMLoAQt RTD6DyglfkZrEPpFNSlpzZeBLvUEPREajIuomPWk44wzZ7FOe8Kl+Sl7PNI7utJLjgs7 wjpN/SoIaP786hqx3x0Z9CFOejKSxsiDCZgTdDMGx4TBVGBPgR87nkrCODw2y2Je4QrE NS4RWWNmNAQC0th9Vb4PCDCxyhJAA6gwN77uihmJsFXmYmdX0xpY8lprbIvBcys1+ijF bvEUqwkOB/wAbsKk9reMmwdnW6LNWWdFx6gJrZR2YjKrTkhvdrfRcgmn1MoaMHMYGmfV XLNA== X-Gm-Message-State: APjAAAWEh3WpEessIj+z7DyxfubGySi4fTSO6U/iA43CVLyzE6USi0Fg YjNkHV97T/F5C1J4hXzPjbI= X-Google-Smtp-Source: APXvYqw94dZ5ZmRzzGoBYKd0tZ3CBOJF5VuewFILC9V1lenb/mv0W5ESdXarsfImkv/NIoJZfKwHtw== X-Received: by 2002:a17:902:be04:: with SMTP id r4mr93253916pls.218.1555540491074; Wed, 17 Apr 2019 15:34:51 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l26sm281030pfb.20.2019.04.17.15.34.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 17 Apr 2019 15:34:50 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v3 08/16] PM / devfreq: tegra: Clean up driver's probe / remove Date: Thu, 18 Apr 2019 01:29:17 +0300 Message-Id: <20190417222925.5815-9-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190417222925.5815-1-digetx@gmail.com> References: <20190417222925.5815-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Reset hardware, disable ACTMON clock, release OPP's and handle all possible error cases correctly, maintaining the correct tear down order. Also use devm_platform_ioremap_resource() which is now available in the kernel. Signed-off-by: Dmitry Osipenko Reviewed-by: Chanwoo Choi --- drivers/devfreq/tegra-devfreq.c | 83 +++++++++++++++++++-------------- 1 file changed, 47 insertions(+), 36 deletions(-) diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index ce1eb97a2090..70946e432d3c 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -610,7 +610,6 @@ static int tegra_devfreq_probe(struct platform_device *pdev) { struct tegra_devfreq *tegra; struct tegra_devfreq_device *dev; - struct resource *res; unsigned int i; unsigned long rate; int err; @@ -619,9 +618,7 @@ static int tegra_devfreq_probe(struct platform_device *pdev) if (!tegra) return -ENOMEM; - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - - tegra->regs = devm_ioremap_resource(&pdev->dev, res); + tegra->regs = devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(tegra->regs)) return PTR_ERR(tegra->regs); @@ -643,11 +640,10 @@ static int tegra_devfreq_probe(struct platform_device *pdev) return PTR_ERR(tegra->emc_clock); } - tegra->rate_change_nb.notifier_call = tegra_actmon_rate_notify_cb; - err = clk_notifier_register(tegra->emc_clock, &tegra->rate_change_nb); - if (err) { - dev_err(&pdev->dev, - "Failed to register rate change notifier\n"); + tegra->irq = platform_get_irq(pdev, 0); + if (tegra->irq < 0) { + err = tegra->irq; + dev_err(&pdev->dev, "Failed to get IRQ: %d\n", err); return err; } @@ -678,54 +674,69 @@ static int tegra_devfreq_probe(struct platform_device *pdev) for (rate = 0; rate <= tegra->max_freq * KHZ; rate++) { rate = clk_round_rate(tegra->emc_clock, rate); - dev_pm_opp_add(&pdev->dev, rate, 0); - } - tegra->irq = platform_get_irq(pdev, 0); - if (tegra->irq < 0) { - err = tegra->irq; - dev_err(&pdev->dev, "Failed to get IRQ: %d\n", err); - return err; + err = dev_pm_opp_add(&pdev->dev, rate, 0); + if (err) { + dev_err(&pdev->dev, "Failed to add OPP: %d\n", err); + goto remove_opps; + } } platform_set_drvdata(pdev, tegra); + tegra->rate_change_nb.notifier_call = tegra_actmon_rate_notify_cb; + err = clk_notifier_register(tegra->emc_clock, &tegra->rate_change_nb); + if (err) { + dev_err(&pdev->dev, + "Failed to register rate change notifier\n"); + goto remove_opps; + } + + tegra_devfreq_profile.initial_freq = clk_get_rate(tegra->emc_clock); + tegra->devfreq = devfreq_add_device(&pdev->dev, + &tegra_devfreq_profile, + "tegra_actmon", + NULL); + if (IS_ERR(tegra->devfreq)) { + err = PTR_ERR(tegra->devfreq); + goto unreg_notifier; + } + err = devm_request_threaded_irq(&pdev->dev, tegra->irq, NULL, actmon_thread_isr, IRQF_ONESHOT, "tegra-devfreq", tegra); if (err) { - dev_err(&pdev->dev, "Interrupt request failed\n"); - return err; + dev_err(&pdev->dev, "Interrupt request failed: %d\n", err); + goto remove_devfreq; } - tegra_devfreq_profile.initial_freq = clk_get_rate(tegra->emc_clock); - tegra->devfreq = devm_devfreq_add_device(&pdev->dev, - &tegra_devfreq_profile, - "tegra_actmon", - NULL); - return 0; + +remove_devfreq: + devfreq_remove_device(tegra->devfreq); + +unreg_notifier: + clk_notifier_unregister(tegra->emc_clock, &tegra->rate_change_nb); + +remove_opps: + dev_pm_opp_remove_all_dynamic(&pdev->dev); + + reset_control_reset(tegra->reset); + clk_disable_unprepare(tegra->clock); + + return err; } static int tegra_devfreq_remove(struct platform_device *pdev) { struct tegra_devfreq *tegra = platform_get_drvdata(pdev); - int irq = platform_get_irq(pdev, 0); - u32 val; - unsigned int i; - - for (i = 0; i < ARRAY_SIZE(actmon_device_configs); i++) { - val = device_readl(&tegra->devices[i], ACTMON_DEV_CTRL); - val &= ~ACTMON_DEV_CTRL_ENB; - device_writel(&tegra->devices[i], val, ACTMON_DEV_CTRL); - } - - actmon_write_barrier(tegra); - devm_free_irq(&pdev->dev, irq, tegra); + devfreq_remove_device(tegra->devfreq); + dev_pm_opp_remove_all_dynamic(&pdev->dev); clk_notifier_unregister(tegra->emc_clock, &tegra->rate_change_nb); + reset_control_reset(tegra->reset); clk_disable_unprepare(tegra->clock); return 0; From patchwork Wed Apr 17 22:29:18 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 10906347 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 963DD161F for ; Wed, 17 Apr 2019 22:40:21 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7BFF328B6E for ; Wed, 17 Apr 2019 22:40:21 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 69F3D28B7B; Wed, 17 Apr 2019 22:40:21 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1473C28B6E for ; Wed, 17 Apr 2019 22:40:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729331AbfDQWkU (ORCPT ); Wed, 17 Apr 2019 18:40:20 -0400 Received: from mail-pf1-f194.google.com ([209.85.210.194]:37135 "EHLO mail-pf1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725848AbfDQWkU (ORCPT ); Wed, 17 Apr 2019 18:40:20 -0400 Received: by mail-pf1-f194.google.com with SMTP id 8so141012pfr.4; Wed, 17 Apr 2019 15:40:19 -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:in-reply-to:references :mime-version:content-transfer-encoding; bh=gUeEb4L2PznAGGX6A12fvqFt4+0O7XpXxOJtNihy39E=; b=V0+T6SRj/yCzAmOAxViE12CwL/16gs7B8ptaNnnsR/geJPMLtoYHlTLSfEAnHxUeeU ECn0QYbWn3FBD1GdTHkW85fwuu5b2MiMmt7MiMytOvdGJCCKpLtthiVDArdcaBNCyh9R LevxLX+amq38n3kewC1dtRM21QcF6TEikMQI7fM0umyJRIjidPWYHUTaqLFpVZ3gkgSY uwF6tfXfCfk0mnpxZHDlOqI4YyZ8zj2qjR3O6xWmUf/KzAdElnzrDpDgYtGDWk2HCI31 iFYrLczEX6Ybj3hPewKjRGa3KCrblEii4FrXJ6XF4v0YVefXe6SoTpwlN+cWsjR/8avX OhNQ== 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=gUeEb4L2PznAGGX6A12fvqFt4+0O7XpXxOJtNihy39E=; b=fhUDTqbrcuLtM8yOYyoWbPmxv4NIPejFRP9T5nPsm4YZgA/ypGxzPR4jcFY4tcaBDD XSDdh8Pgw1aEvXYzHCUtLkGLofz8zRQdclirYV9gU0tAbeSIRLOneiwqP6ouh4VekN/F ObjPLB2mqSTsXpsPZmGH/5eVowZYLID5P1ZJXifpVf1VYAb6pyMLao9dItg5KSx1D2kr qy46zTKdZHhsJLwsCeGXVCmlXrpJuHIcH/TmIyBYCvOp17ajupHXUnIa4FpHnudZOnJq Oz+AcLREOqz7KtgfDasoAskoTEqfP+qNnCkjLqjtryfASKs7ObrEqG2FQA31UDUygRl2 vHlQ== X-Gm-Message-State: APjAAAXeoArvb8q89+KnBW+qMBxbOuEM2nSs9Hqhr7xFRcIt2A4YnXUY Vkc8B1Ir+RmM9/2M2CSKvL4= X-Google-Smtp-Source: APXvYqw+fS97NbUebTghjOHpeoA2FJoUCKFmtWv421Bmr9husj2TTWqPojpS/1lS6tRd2xX4Kb6c6w== X-Received: by 2002:a62:cfc4:: with SMTP id b187mr91170819pfg.130.1555540497790; Wed, 17 Apr 2019 15:34:57 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l26sm281030pfb.20.2019.04.17.15.34.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 17 Apr 2019 15:34:57 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v3 09/16] PM / devfreq: tegra: Avoid inconsistency of current frequency value Date: Thu, 18 Apr 2019 01:29:18 +0300 Message-Id: <20190417222925.5815-10-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190417222925.5815-1-digetx@gmail.com> References: <20190417222925.5815-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The frequency value potentially could change in-between. It doesn't cause any real problem at all right now, but that could change in the future. Hence let's avoid the inconsistency. Reviewed-by: Chanwoo Choi Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra-devfreq.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index 70946e432d3c..d72c16752012 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -509,13 +509,15 @@ static int tegra_devfreq_get_dev_status(struct device *dev, { struct tegra_devfreq *tegra = dev_get_drvdata(dev); struct tegra_devfreq_device *actmon_dev; + unsigned long cur_freq; - stat->current_frequency = tegra->cur_freq * KHZ; + cur_freq = READ_ONCE(tegra->cur_freq); /* To be used by the tegra governor */ stat->private_data = tegra; /* The below are to be used by the other governors */ + stat->current_frequency = cur_freq * KHZ; actmon_dev = &tegra->devices[MCALL]; @@ -526,7 +528,7 @@ static int tegra_devfreq_get_dev_status(struct device *dev, stat->busy_time *= 100 / BUS_SATURATION_RATIO; /* Number of cycles in a sampling period */ - stat->total_time = ACTMON_SAMPLING_PERIOD * tegra->cur_freq; + stat->total_time = ACTMON_SAMPLING_PERIOD * cur_freq; stat->busy_time = min(stat->busy_time, stat->total_time); From patchwork Wed Apr 17 22:29:19 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 10906375 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 313F2161F for ; Wed, 17 Apr 2019 22:43:13 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1C88A28B6E for ; Wed, 17 Apr 2019 22:43:13 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0FEB628B7B; Wed, 17 Apr 2019 22:43:13 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B097328B6E for ; Wed, 17 Apr 2019 22:43:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731846AbfDQWnM (ORCPT ); Wed, 17 Apr 2019 18:43:12 -0400 Received: from mail-pf1-f196.google.com ([209.85.210.196]:36797 "EHLO mail-pf1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725848AbfDQWnL (ORCPT ); Wed, 17 Apr 2019 18:43:11 -0400 Received: by mail-pf1-f196.google.com with SMTP id z5so145948pfn.3; Wed, 17 Apr 2019 15:43:11 -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:in-reply-to:references :mime-version:content-transfer-encoding; bh=k6Pr36LZNLjaMWytmQ2oiF4ANNpidxKFHqrr3mek8mw=; b=jhIfB8c8280b29Bn9iobebXWNuX4TNUhrhzSN+sLCgndes9qQpZ6rbt0RiwI186ls0 YDEk4JxRU5Td5T3/fHCw05YEsGVdiNEYOwv3dcPqiErcGNFrYYZymWiBtv+IWLBn2Tvn NrNsIS1ZdiqUQvYlifHfSfb/B3eoJGrJfSezJkNCUedpWqMhIuwfBiKwkwsNIg0ZTosz /xHw8pgTAJBQVpx2Os1sJtQ7Tyt4iTjjAgTT7+/5y9bn6ycjHsUPKEg+cIxzcQsCr8BW eta5FB6UTHqFanx5ank5+XLT5emUUy3WOeZs3WVEceT3LVO0N2H9hiX8T0upHowVP3m9 ZZgA== 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=k6Pr36LZNLjaMWytmQ2oiF4ANNpidxKFHqrr3mek8mw=; b=Xcgll4EqGprLAjLyAWahmawjFViK229Lvk3fXmhzA2mNGCyN9Eo1y2o4+SesGSuX46 lGnGjdr49VDnikJTw4UhcJCp1/eAVblTZaeI9oclXFt2eouuGVmoqYDnNWLo2GJ0kKFm Mx0kkRr3iPXBvJdQauMgkpue54F0IEJYb53oofMzn0N0CvQRXWZxqFFxLynlc5eXEUeN 2jRQmUx/PcQ7GEk/EhUd4jL/wlHjqS9kafY0/OoBpDRNsvvtmA6qewaz4UMnq2NQb8QI Z/lBMoRzazs7/AhCXP5JOVIAa8OrkcP3l9bc9Kx7/MrKtMuDZheifSX7jBW/CsIw6o05 a1/g== X-Gm-Message-State: APjAAAVUl7Y7oLAu6MrEHQpRJGqkwNPHe/4OaRA/Oj2mi5gOGGLtqBBh ZXtN/vziw1Wu46W3igd9wH8= X-Google-Smtp-Source: APXvYqxf3vzMaAPN9gDU6LKmYZABS5f0D10Z8ep1JCuWlVE+zoz1ycgLMsnNHulbiC9AnCp26EQ2uQ== X-Received: by 2002:aa7:8c86:: with SMTP id p6mr93630321pfd.37.1555540504519; Wed, 17 Apr 2019 15:35:04 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l26sm281030pfb.20.2019.04.17.15.34.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 17 Apr 2019 15:35:04 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v3 10/16] PM / devfreq: tegra: Mark ACTMON's governor as immutable Date: Thu, 18 Apr 2019 01:29:19 +0300 Message-Id: <20190417222925.5815-11-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190417222925.5815-1-digetx@gmail.com> References: <20190417222925.5815-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The ACTMON's governor supports only the Tegra's devfreq device and there is no need to use any other governor, hence let's mark Tegra governor as immutable to permanently stick it with Tegra's devfreq device. Reviewed-by: Chanwoo Choi Signed-off-by: Dmitry Osipenko --- drivers/devfreq/Kconfig | 1 - drivers/devfreq/tegra-devfreq.c | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/devfreq/Kconfig b/drivers/devfreq/Kconfig index 6a172d338f6d..a78dffe603c1 100644 --- a/drivers/devfreq/Kconfig +++ b/drivers/devfreq/Kconfig @@ -94,7 +94,6 @@ config ARM_EXYNOS_BUS_DEVFREQ config ARM_TEGRA_DEVFREQ tristate "Tegra DEVFREQ Driver" depends on ARCH_TEGRA_124_SOC - select DEVFREQ_GOV_SIMPLE_ONDEMAND select PM_OPP help This adds the DEVFREQ driver for the Tegra family of SoCs. diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index d72c16752012..272232ce2960 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -606,6 +606,7 @@ static struct devfreq_governor tegra_devfreq_governor = { .name = "tegra_actmon", .get_target_freq = tegra_governor_get_target, .event_handler = tegra_governor_event_handler, + .immutable = true, }; static int tegra_devfreq_probe(struct platform_device *pdev) From patchwork Wed Apr 17 22:29:20 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 10906381 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3AE4E1390 for ; Wed, 17 Apr 2019 22:43:30 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 26E3628B6E for ; Wed, 17 Apr 2019 22:43:30 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 18F0628B7B; Wed, 17 Apr 2019 22:43:30 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A94BE28B6E for ; Wed, 17 Apr 2019 22:43:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387748AbfDQWnY (ORCPT ); Wed, 17 Apr 2019 18:43:24 -0400 Received: from mail-pg1-f193.google.com ([209.85.215.193]:34721 "EHLO mail-pg1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725848AbfDQWnX (ORCPT ); Wed, 17 Apr 2019 18:43:23 -0400 Received: by mail-pg1-f193.google.com with SMTP id v12so222491pgq.1; Wed, 17 Apr 2019 15:43:23 -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:in-reply-to:references :mime-version:content-transfer-encoding; bh=+fNoakO5VGR+YqCvREKu6Ww81w6B+n7Tmbl7xvjsl6s=; b=oTrb038yLMNUyy4lKfkvUg9bMSq6XXqmjJsEG1M/3N9CBhee9YJR/6IaKp24VwIGqZ /p/525WPOZ1/vof0g2a41pEywrCBkWpiELaY48KOXuhRWaQe1Mmt2MIb/+c5tPe+b3Aj 8r5yuVkN+MCu3fjk+ZluropNZrcqSxGRtSFi++HBV73nEz6FCbtEDw+idROnFQN+A4np +rKL1NcjX9IdufXVzXweI/ltbVXV6djgspnddu1ThOxYk/w9rmnZNVMDCRTuM1VPHlEP TyF/k4AzFFvw2Bgm3KdicaP9+strpx8aRzgiOI7d+RQ8vbOZ7sze6N8L3LC8SjbonNnS EEig== 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=+fNoakO5VGR+YqCvREKu6Ww81w6B+n7Tmbl7xvjsl6s=; b=aibdyzp97ny5AbGfU78Xw5WNWYyJuqgiI8n/AiEMHBvbMSWedLzYIbqTHSXVYPy3KU /ibAOKUa3YWCCUuXTeL66d77i4/Qp0y39efprj6coBLh3H/yAh4nAHg9zjYxQDHFT6UP r1GpPIdjzOvjKSCoE8K1SP+FCm/pF3E1fPdTdcnZcF+h64pPQaqxYitO/NGkeRBarRv0 00JlrrhnWM8UoKvc9YEl446Z9BAR0p7dqqjw1xI2Wkkl4SwX8dwMP3didzz/vphiNPzS Nzf3Ad4qGHN0PHRTzsoprK8yK/58DkzG83h3ziFKXYU8++kDjbmmRHS687+yqOcZRZLm iUsA== X-Gm-Message-State: APjAAAVrmLzjRzcuqM5MH+TIdFkl0T6WasrpbFSzXnTIovICkXK70Tyu QAK4+/7PiwQOm5CUjAtVfws= X-Google-Smtp-Source: APXvYqzuBKXpLz5w5/+N6A3xfVdyZtGa9JO1YBV5vFrogX5oLpEZPXG5F4sBKW2VAT3ILssx4ZS78w== X-Received: by 2002:a63:cc0a:: with SMTP id x10mr82524102pgf.179.1555540511286; Wed, 17 Apr 2019 15:35:11 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l26sm281030pfb.20.2019.04.17.15.35.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 17 Apr 2019 15:35:10 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v3 11/16] PM / devfreq: tegra: Move governor registration to driver's probe Date: Thu, 18 Apr 2019 01:29:20 +0300 Message-Id: <20190417222925.5815-12-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190417222925.5815-1-digetx@gmail.com> References: <20190417222925.5815-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP There is no need to register the ACTMON's governor separately from the driver, hence let's move the registration into the driver's probe function for consistency and to make code cleaner a tad. Reviewed-by: Chanwoo Choi Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra-devfreq.c | 43 +++++++++------------------------ 1 file changed, 12 insertions(+), 31 deletions(-) diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index 272232ce2960..62f35e818122 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -695,6 +695,12 @@ static int tegra_devfreq_probe(struct platform_device *pdev) goto remove_opps; } + err = devfreq_add_governor(&tegra_devfreq_governor); + if (err) { + dev_err(&pdev->dev, "Failed to add governor: %d\n", err); + goto unreg_notifier; + } + tegra_devfreq_profile.initial_freq = clk_get_rate(tegra->emc_clock); tegra->devfreq = devfreq_add_device(&pdev->dev, &tegra_devfreq_profile, @@ -702,7 +708,7 @@ static int tegra_devfreq_probe(struct platform_device *pdev) NULL); if (IS_ERR(tegra->devfreq)) { err = PTR_ERR(tegra->devfreq); - goto unreg_notifier; + goto remove_governor; } err = devm_request_threaded_irq(&pdev->dev, tegra->irq, NULL, @@ -718,6 +724,9 @@ static int tegra_devfreq_probe(struct platform_device *pdev) remove_devfreq: devfreq_remove_device(tegra->devfreq); +remove_governor: + devfreq_remove_governor(&tegra_devfreq_governor); + unreg_notifier: clk_notifier_unregister(tegra->emc_clock, &tegra->rate_change_nb); @@ -735,6 +744,7 @@ static int tegra_devfreq_remove(struct platform_device *pdev) struct tegra_devfreq *tegra = platform_get_drvdata(pdev); devfreq_remove_device(tegra->devfreq); + devfreq_remove_governor(&tegra_devfreq_governor); dev_pm_opp_remove_all_dynamic(&pdev->dev); clk_notifier_unregister(tegra->emc_clock, &tegra->rate_change_nb); @@ -760,36 +770,7 @@ static struct platform_driver tegra_devfreq_driver = { .of_match_table = tegra_devfreq_of_match, }, }; - -static int __init tegra_devfreq_init(void) -{ - int ret = 0; - - ret = devfreq_add_governor(&tegra_devfreq_governor); - if (ret) { - pr_err("%s: failed to add governor: %d\n", __func__, ret); - return ret; - } - - ret = platform_driver_register(&tegra_devfreq_driver); - if (ret) - devfreq_remove_governor(&tegra_devfreq_governor); - - return ret; -} -module_init(tegra_devfreq_init) - -static void __exit tegra_devfreq_exit(void) -{ - int ret = 0; - - platform_driver_unregister(&tegra_devfreq_driver); - - ret = devfreq_remove_governor(&tegra_devfreq_governor); - if (ret) - pr_err("%s: failed to remove governor: %d\n", __func__, ret); -} -module_exit(tegra_devfreq_exit) +module_platform_driver(tegra_devfreq_driver); MODULE_LICENSE("GPL v2"); MODULE_DESCRIPTION("Tegra devfreq driver"); From patchwork Wed Apr 17 22:29:21 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 10906367 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 768F71390 for ; Wed, 17 Apr 2019 22:42:34 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6035528B6E for ; Wed, 17 Apr 2019 22:42:34 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 549CA28B7B; Wed, 17 Apr 2019 22:42:34 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C7DE728B6E for ; Wed, 17 Apr 2019 22:42:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731116AbfDQWmd (ORCPT ); Wed, 17 Apr 2019 18:42:33 -0400 Received: from mail-pl1-f193.google.com ([209.85.214.193]:41671 "EHLO mail-pl1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725848AbfDQWmd (ORCPT ); Wed, 17 Apr 2019 18:42:33 -0400 Received: by mail-pl1-f193.google.com with SMTP id d1so168239plj.8; Wed, 17 Apr 2019 15:42:32 -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:in-reply-to:references :mime-version:content-transfer-encoding; bh=UGhwmqxYys+b5h8DSBtXrBhmaqFi5uiahazIWk9yJ4o=; b=Ud8t+g48EJkehj64M7LPHWSvRVF+mFT8SaCxQaKt49aXSrFWR0qq1RAvP7XRyDq19U 96K0RiP3pwMpSwcfisKWOkPb+ByVzX4ltq8/F5wccUThuHwSUrB5XSu+eDfiHBTF61fz W7CWwbz+L0N6UnNY0tflWnNcbOBVhWLBcz+imMMt3KwAGlekaWmLiHdiYQf0dIvmserQ z3QqDTiRvPBEI36yc8CXm0NDv/fgo6pw965DeQd7Y9v39ocZE3s7Vv7iZM71TNd+6wGF UbFVNoZA5fkITG+cocQiC6fvaRchOLXa9+h+Hl4z8ueHNayyG3NW4IK0/JnhI79KChU0 4KfA== 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=UGhwmqxYys+b5h8DSBtXrBhmaqFi5uiahazIWk9yJ4o=; b=X6vpZSfNyWYTqbWpuzDd76M/F1FhWS97bq/k+iNP4f1WSbb8CCGTWokFo+4HCEV4h+ tCLgiZLkeSJbUBQ6FtvX80HhvduRhAWmOrj7sXP9XovUyzARy+aUKVZbMpG6V8F+5xk7 Qhc7YeM578Vm7h7dYvNrVc/XjfzZyZRKnRRFB0/HDhhS3KeiD2D3F3Tp0cJN3EBjjx8h C1UmXvGiT7+HLDHZLljN50iYwF0cw4f6VSvoOUd5TsiI9JmqeMD58SkETIdnZSJqp8wd /9JSRxX2+hnd2tf589IhWR1zLXrGmJ3pFeabdItau2XOAtLZBIWBc+L3dLuX39ul8klZ HeNg== X-Gm-Message-State: APjAAAWGVEYbsdRjQkDE5+s+B3TgJl8Teyrak+8wO3GxyCFf1WItR0cp YNxgx8Eq+xZIw/FWFFXE4d4= X-Google-Smtp-Source: APXvYqyZvSgsANYMTvaaumL4t7Ffe8MKILHQoXvLsg0WySxH92STATA/nh+Q+XUx2qMjTFFLxOQsog== X-Received: by 2002:a17:902:9a4c:: with SMTP id x12mr44488019plv.90.1555540518043; Wed, 17 Apr 2019 15:35:18 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l26sm281030pfb.20.2019.04.17.15.35.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 17 Apr 2019 15:35:17 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v3 12/16] PM / devfreq: tegra: Reconfigure hardware on governor's restart Date: Thu, 18 Apr 2019 01:29:21 +0300 Message-Id: <20190417222925.5815-13-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190417222925.5815-1-digetx@gmail.com> References: <20190417222925.5815-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Move hardware configuration to governor's start/resume methods. This allows to re-initialize hardware counters and reconfigure cleanly if governor was stopped/paused. That is needed because we are not aware of all hardware changes that happened while governor was stopped and the paused state may get out of sync with reality, hence it's better to start with a clean slate after the pause. In a result there is no memory bandwidth starvation after resume from suspend-to-ram that results in display controller underflowing that happens on resume because of improper decision made by devfreq about the required memory frequency. This change also cleans up code a tad by moving hardware-configuration code into a single location. Signed-off-by: Dmitry Osipenko Reviewed-by: Chanwoo Choi --- drivers/devfreq/tegra-devfreq.c | 98 ++++++++++++++------------------- 1 file changed, 40 insertions(+), 58 deletions(-) diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index 62f35e818122..e9ab49394d35 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -392,55 +392,6 @@ static int tegra_actmon_rate_notify_cb(struct notifier_block *nb, return NOTIFY_OK; } -static void tegra_actmon_enable_interrupts(struct tegra_devfreq *tegra) -{ - struct tegra_devfreq_device *dev; - u32 val; - unsigned int i; - - for (i = 0; i < ARRAY_SIZE(tegra->devices); i++) { - dev = &tegra->devices[i]; - - val = device_readl(dev, ACTMON_DEV_CTRL); - val |= ACTMON_DEV_CTRL_AVG_ABOVE_WMARK_EN; - val |= ACTMON_DEV_CTRL_AVG_BELOW_WMARK_EN; - val |= ACTMON_DEV_CTRL_CONSECUTIVE_BELOW_WMARK_EN; - val |= ACTMON_DEV_CTRL_CONSECUTIVE_ABOVE_WMARK_EN; - - device_writel(dev, val, ACTMON_DEV_CTRL); - } - - actmon_write_barrier(tegra); -} - -static void tegra_actmon_disable_interrupts(struct tegra_devfreq *tegra) -{ - struct tegra_devfreq_device *dev; - u32 val; - unsigned int i; - - disable_irq(tegra->irq); - - for (i = 0; i < ARRAY_SIZE(tegra->devices); i++) { - dev = &tegra->devices[i]; - - val = device_readl(dev, ACTMON_DEV_CTRL); - val &= ~ACTMON_DEV_CTRL_AVG_ABOVE_WMARK_EN; - val &= ~ACTMON_DEV_CTRL_AVG_BELOW_WMARK_EN; - val &= ~ACTMON_DEV_CTRL_CONSECUTIVE_BELOW_WMARK_EN; - val &= ~ACTMON_DEV_CTRL_CONSECUTIVE_ABOVE_WMARK_EN; - - device_writel(dev, val, ACTMON_DEV_CTRL); - - device_writel(dev, ACTMON_INTR_STATUS_CLEAR, - ACTMON_DEV_INTR_STATUS); - } - - actmon_write_barrier(tegra); - - enable_irq(tegra->irq); -} - static void tegra_actmon_configure_device(struct tegra_devfreq *tegra, struct tegra_devfreq_device *dev) { @@ -464,11 +415,47 @@ static void tegra_actmon_configure_device(struct tegra_devfreq *tegra, << ACTMON_DEV_CTRL_CONSECUTIVE_BELOW_WMARK_NUM_SHIFT; val |= (ACTMON_ABOVE_WMARK_WINDOW - 1) << ACTMON_DEV_CTRL_CONSECUTIVE_ABOVE_WMARK_NUM_SHIFT; + val |= ACTMON_DEV_CTRL_AVG_ABOVE_WMARK_EN; + val |= ACTMON_DEV_CTRL_AVG_BELOW_WMARK_EN; + val |= ACTMON_DEV_CTRL_CONSECUTIVE_BELOW_WMARK_EN; + val |= ACTMON_DEV_CTRL_CONSECUTIVE_ABOVE_WMARK_EN; val |= ACTMON_DEV_CTRL_ENB; device_writel(dev, val, ACTMON_DEV_CTRL); +} + +static void tegra_actmon_start(struct tegra_devfreq *tegra) +{ + unsigned int i; + + disable_irq(tegra->irq); + + actmon_writel(tegra, ACTMON_SAMPLING_PERIOD - 1, + ACTMON_GLB_PERIOD_CTRL); + + for (i = 0; i < ARRAY_SIZE(tegra->devices); i++) + tegra_actmon_configure_device(tegra, &tegra->devices[i]); + + actmon_write_barrier(tegra); + + enable_irq(tegra->irq); +} + +static void tegra_actmon_stop(struct tegra_devfreq *tegra) +{ + unsigned int i; + + disable_irq(tegra->irq); + + for (i = 0; i < ARRAY_SIZE(tegra->devices); i++) { + device_writel(&tegra->devices[i], 0x00000000, ACTMON_DEV_CTRL); + device_writel(&tegra->devices[i], ACTMON_INTR_STATUS_CLEAR, + ACTMON_DEV_INTR_STATUS); + } actmon_write_barrier(tegra); + + enable_irq(tegra->irq); } static int tegra_devfreq_target(struct device *dev, unsigned long *freq, @@ -580,22 +567,22 @@ static int tegra_governor_event_handler(struct devfreq *devfreq, switch (event) { case DEVFREQ_GOV_START: devfreq_monitor_start(devfreq); - tegra_actmon_enable_interrupts(tegra); + tegra_actmon_start(tegra); break; case DEVFREQ_GOV_STOP: - tegra_actmon_disable_interrupts(tegra); + tegra_actmon_stop(tegra); devfreq_monitor_stop(devfreq); break; case DEVFREQ_GOV_SUSPEND: - tegra_actmon_disable_interrupts(tegra); + tegra_actmon_stop(tegra); devfreq_monitor_suspend(devfreq); break; case DEVFREQ_GOV_RESUME: devfreq_monitor_resume(devfreq); - tegra_actmon_enable_interrupts(tegra); + tegra_actmon_start(tegra); break; } @@ -664,15 +651,10 @@ static int tegra_devfreq_probe(struct platform_device *pdev) tegra->max_freq = clk_round_rate(tegra->emc_clock, ULONG_MAX) / KHZ; tegra->cur_freq = clk_get_rate(tegra->emc_clock) / KHZ; - actmon_writel(tegra, ACTMON_SAMPLING_PERIOD - 1, - ACTMON_GLB_PERIOD_CTRL); - for (i = 0; i < ARRAY_SIZE(actmon_device_configs); i++) { dev = tegra->devices + i; dev->config = actmon_device_configs + i; dev->regs = tegra->regs + dev->config->offset; - - tegra_actmon_configure_device(tegra, dev); } for (rate = 0; rate <= tegra->max_freq * KHZ; rate++) { From patchwork Wed Apr 17 22:29:22 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 10906359 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 24728161F for ; Wed, 17 Apr 2019 22:41:21 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 10D9428B79 for ; Wed, 17 Apr 2019 22:41:21 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 04EFF28B81; Wed, 17 Apr 2019 22:41:21 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A155328B79 for ; Wed, 17 Apr 2019 22:41:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387645AbfDQWlP (ORCPT ); Wed, 17 Apr 2019 18:41:15 -0400 Received: from mail-pf1-f196.google.com ([209.85.210.196]:46741 "EHLO mail-pf1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731857AbfDQWlP (ORCPT ); Wed, 17 Apr 2019 18:41:15 -0400 Received: by mail-pf1-f196.google.com with SMTP id 9so122241pfj.13; Wed, 17 Apr 2019 15:41:15 -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:in-reply-to:references :mime-version:content-transfer-encoding; bh=QgAlvPXLOPPvqeePDR0VxoNM/ii/ZZ0PATgQsPuV3J8=; b=vKVblKbLKav0IYfwhBOE+vDWoC8eq8HC1DG+BoYOU+YxzWEOgz2Dh83Hmls4K7o4Fe SSfi51UrRrVFgh+b5+DewbA76BlB5kjAawggizIfa00XoRtHPxgO75CrinShb0D5flqt zXHbemWXo0AEABxixicnxV9ryYXZUK5ppgPHaT2UnQFftaWdlWZs1GzM1icQQY7jXcNE J6sIaoBFOvVw3uUIsO8Hk6xNvfXGLSNNrHMSLX65NvPLKVSiYwjc2SfJCHlNf0uI83NG k1dF14p27os0wOKycjeUskGvdK2hmGUepDPLY3yffM65DCdAZQxtAzPxX858VTP26bRJ 2Xhw== 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=QgAlvPXLOPPvqeePDR0VxoNM/ii/ZZ0PATgQsPuV3J8=; b=ttogM7wH0Xco1dTgjQqTflmjFB+GB6NXtqGFHB3IPfFMavS+wVY6T/Sr5FzdhnUHgQ QYLzQStnFbADiV1b7zwxmkCReYiyi2ThBwPDYuZ0URWriA5bbCI2PNWpjiRiTU6XpRmn Dy7xArhWfSnvPL96Y94RbXsCL5IQ0opqS60TnMSzzeedYG9LqRbwDQftaE0qe3rgXPs2 NVfQ0pjtY5nZzmsc8xJJpKEcCLznWDxPfjKM2Nsm6oMOfaet91M5aYdU884KU6a7lpb4 5IFRE9foQsgFj+uoL8A7ZO2ElDGQIPQNcLFTi0kGX64Xph4JrRnorbAcyPspmprnoLyr Bmjg== X-Gm-Message-State: APjAAAXD+a33Rp9AJiHTD0ePml79XnwSi2vDaf+iE8EIsXzXOfWoQO8C 00RmvCbn5DDUXk1cx4F9i8Y= X-Google-Smtp-Source: APXvYqxKP1r6Akq/mQoseI7Bpurspbu75oPeQlGDu0DdM3dQKoxwwaDx2T7owfvq633BGfpHapXAPw== X-Received: by 2002:a63:6a43:: with SMTP id f64mr52497357pgc.366.1555540524801; Wed, 17 Apr 2019 15:35:24 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l26sm281030pfb.20.2019.04.17.15.35.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 17 Apr 2019 15:35:24 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v3 13/16] PM / devfreq: tegra: Support Tegra30 Date: Thu, 18 Apr 2019 01:29:22 +0300 Message-Id: <20190417222925.5815-14-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190417222925.5815-1-digetx@gmail.com> References: <20190417222925.5815-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The devfreq driver can be used on Tegra30 without any code change and it works perfectly fine, the default Tegra124 parameters are good enough for Tegra30. Signed-off-by: Dmitry Osipenko Reviewed-by: Chanwoo Choi --- drivers/devfreq/Kconfig | 4 ++-- drivers/devfreq/tegra-devfreq.c | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/devfreq/Kconfig b/drivers/devfreq/Kconfig index a78dffe603c1..56db9dc05edb 100644 --- a/drivers/devfreq/Kconfig +++ b/drivers/devfreq/Kconfig @@ -92,8 +92,8 @@ config ARM_EXYNOS_BUS_DEVFREQ This does not yet operate with optimal voltages. config ARM_TEGRA_DEVFREQ - tristate "Tegra DEVFREQ Driver" - depends on ARCH_TEGRA_124_SOC + tristate "NVIDIA Tegra30/114/124/210 DEVFREQ Driver" + depends on ARCH_TEGRA select PM_OPP help This adds the DEVFREQ driver for the Tegra family of SoCs. diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index e9ab49394d35..029afc5fb6a9 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -738,6 +738,7 @@ static int tegra_devfreq_remove(struct platform_device *pdev) } static const struct of_device_id tegra_devfreq_of_match[] = { + { .compatible = "nvidia,tegra30-actmon" }, { .compatible = "nvidia,tegra124-actmon" }, { }, }; From patchwork Wed Apr 17 22:29:23 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 10906353 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6CBE4161F for ; Wed, 17 Apr 2019 22:41:03 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5726928B6E for ; Wed, 17 Apr 2019 22:41:03 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4BBC428B7B; Wed, 17 Apr 2019 22:41:03 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id ECC7328B6E for ; Wed, 17 Apr 2019 22:41:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730848AbfDQWlC (ORCPT ); Wed, 17 Apr 2019 18:41:02 -0400 Received: from mail-pl1-f194.google.com ([209.85.214.194]:43395 "EHLO mail-pl1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729079AbfDQWlC (ORCPT ); Wed, 17 Apr 2019 18:41:02 -0400 Received: by mail-pl1-f194.google.com with SMTP id n8so163609plp.10; Wed, 17 Apr 2019 15:41:01 -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:in-reply-to:references :mime-version:content-transfer-encoding; bh=wI1Y30GzShQIq71Qmpx4lrEpWFmLVF7D2Tq0E543U/s=; b=b8t6HiouiwCTPb8TzfzulDQl83HhdDbCn6A7eTvNss7MmEBUTk1CRakMqZzq01eam8 5q/ZOiwlGY7UYXhPT/j8pEV+rPf7N9zqR4JK3+h7dcDE+FWiBsBLOGbkUxG7sFE2e9aG 7xCqqrN/D5s4Q6zl02LtKFCwTiVzFuHhnNOL56A3V1nvFXC4oYmxjU7/Na7RX2W5u9Ob HW/lg12A0aFe5DNym1EIMVPzsLlY/dvn3DpgzNJN37OWwz6bWy0yCdUvOex4mU8fHqu8 vAGK4Gnj5Ri40RYLX2qbgf11Pf4FtCIxIpuBjRKjUswmWrtJCaJqFAO1bMlOrvvNKof/ NsBw== 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=wI1Y30GzShQIq71Qmpx4lrEpWFmLVF7D2Tq0E543U/s=; b=Bf9nAx5+j91kIyCpWjKhfam5FY1jZWPHXhpH2CCzSOII/HWt+x0KVhDSAWzYoiyz8k 3KRg4yka0acAVcV8VCNzQcdTRCxAQfueWjLMZrj8VJg2ZkVtI9P69IrvprKO2L/V/pxC j8NCUvuh71h7zRy/qPH7+eNeovGMrrodZHek2Ve7UV1Ud3z8ZniyQdOaIiqM/S939LuP Cns3mOHFMCxsPbUKi+Zz93IMi1YuhccxvFjOfqK0hj4ZiAGEE+JgB0DVpvmU0RRhE5kE M3dH3BPS++t2WR3nP1KrBy5NsUzwaU+GBLejsU6kvBvAmouEJ8cOVrfxGql8jY8VcR9q 7n3w== X-Gm-Message-State: APjAAAXcD7HjKQIGewv0JT1ttF3uIL4GEkWM0VxvhGTbFUiDKaYcHpFd ndQeWpgAzJf6EJLqF2VmSn4= X-Google-Smtp-Source: APXvYqyNvTpK/tL3ZSyPN7NxYDJWkUAKYB4uSXmmvnQr6oPf+JnU6CPycgxFPboLVmL0g7o8A4NcQg== X-Received: by 2002:a17:902:9043:: with SMTP id w3mr92257864plz.101.1555540531587; Wed, 17 Apr 2019 15:35:31 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l26sm281030pfb.20.2019.04.17.15.35.25 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 17 Apr 2019 15:35:31 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v3 14/16] PM / devfreq: tegra: Enable COMPILE_TEST for the driver Date: Thu, 18 Apr 2019 01:29:23 +0300 Message-Id: <20190417222925.5815-15-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190417222925.5815-1-digetx@gmail.com> References: <20190417222925.5815-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The driver's compilation doesn't have any specific dependencies, hence the COMPILE_TEST option can be supported in Kconfig. Reviewed-by: Chanwoo Choi Signed-off-by: Dmitry Osipenko --- drivers/devfreq/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/devfreq/Kconfig b/drivers/devfreq/Kconfig index 56db9dc05edb..a6bba6e1e7d9 100644 --- a/drivers/devfreq/Kconfig +++ b/drivers/devfreq/Kconfig @@ -93,7 +93,7 @@ config ARM_EXYNOS_BUS_DEVFREQ config ARM_TEGRA_DEVFREQ tristate "NVIDIA Tegra30/114/124/210 DEVFREQ Driver" - depends on ARCH_TEGRA + depends on ARCH_TEGRA || COMPILE_TEST select PM_OPP help This adds the DEVFREQ driver for the Tegra family of SoCs. From patchwork Wed Apr 17 22:29:24 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 10906363 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id BEC3917E6 for ; Wed, 17 Apr 2019 22:41:42 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A95E728B6E for ; Wed, 17 Apr 2019 22:41:42 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9D70F28B7B; Wed, 17 Apr 2019 22:41:42 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4843628B79 for ; Wed, 17 Apr 2019 22:41:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731129AbfDQWll (ORCPT ); Wed, 17 Apr 2019 18:41:41 -0400 Received: from mail-pf1-f193.google.com ([209.85.210.193]:35803 "EHLO mail-pf1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725848AbfDQWlk (ORCPT ); Wed, 17 Apr 2019 18:41:40 -0400 Received: by mail-pf1-f193.google.com with SMTP id t21so147229pfh.2; Wed, 17 Apr 2019 15:41:40 -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:in-reply-to:references :mime-version:content-transfer-encoding; bh=3XEK6Pvi3zB6H8VfU96ClgLVU6pHyUCojM/czvj15Lo=; b=RZn5atacQWnTfP+DZ829vuRvEG0BlvCymGCZM1SyV3GB+OCHkkuzq/VENl3awp7phK lv93zs8Rvu05pV/MqgAhhnT5gmQqHut5u2tTP+BbBv7q/UnuP4TknyRB8le6ypD0gtmW xddOyqcp/bfeYOSZMgKta4+PFxLx8oD0uOsDmqb5u7qy6+8fws6tpNHo6Eall2i/GXAv cxxmIH5ZErS6hFuQsuFrcZzwhIttCHPzgovkgefPVP1Hk4x9nleCcr/0ut8kCzuXtiMV SgyGCgGowgpGdvll/JQ2O90mnlSmiCcvQan/aehhhbdw7wgAFI/4UYaJoFLA2x+6MgPL bFBw== 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=3XEK6Pvi3zB6H8VfU96ClgLVU6pHyUCojM/czvj15Lo=; b=BTQw32KF3Xah2pp9EpSAkRw+8L6RERaPyVhu0LuwC5axdcrA0JSTXJQega/QJnu5gX 0ZeSf3h66bz76azR+k6DX+GRbeUHd4V292T1P01cnz0zsCIuTET5m/Yoi86L7UfEFOp7 YB+rEqJqI+jqVdrkwJ9azlRiPQWi6MEGx4fuqP/MSvumbFwdqmasZ9qHMQbGTaIar24O 4mnuqZ01MRzNjgM/knGBMJlj1UcOS189tZUcic6f/Olurry47y75xbz532HNfyZ362RS l2lKTOrUFZ7qF6wIna9spz7SfzgLAkNuI+OKJJWALyMR1j8CPn531GFzm/ImAUEdBmqM VgUA== X-Gm-Message-State: APjAAAVGD50Cb/OHX3zMG2cN6aQq3uMuPSh2PqQ/JN574akO2c3PwXGi sgsZrSWc8L4zUUj5I6ub4oE= X-Google-Smtp-Source: APXvYqw6SZVmZDHQnbEW8jS+B9in9NK6LXGkGvMkr2K8pqGnrEanq+es0SX8zXXzIL8XSatPVohwXQ== X-Received: by 2002:a63:cc0b:: with SMTP id x11mr68565422pgf.35.1555540538443; Wed, 17 Apr 2019 15:35:38 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l26sm281030pfb.20.2019.04.17.15.35.32 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 17 Apr 2019 15:35:37 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v3 15/16] PM / devfreq: tegra: Rename tegra-devfreq.c to tegra30-devfreq.c Date: Thu, 18 Apr 2019 01:29:24 +0300 Message-Id: <20190417222925.5815-16-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190417222925.5815-1-digetx@gmail.com> References: <20190417222925.5815-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP In order to reflect that driver serves NVIDIA Tegra30 and later SoC generations, let's rename the driver's source file to "tegra30-devfreq.c". This will make driver files to look more consistent after addition of a driver for Tegra20. Signed-off-by: Dmitry Osipenko Reviewed-by: Chanwoo Choi --- drivers/devfreq/Makefile | 2 +- drivers/devfreq/{tegra-devfreq.c => tegra30-devfreq.c} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename drivers/devfreq/{tegra-devfreq.c => tegra30-devfreq.c} (100%) diff --git a/drivers/devfreq/Makefile b/drivers/devfreq/Makefile index 32b8d4d3f12c..47e5aeeebfd1 100644 --- a/drivers/devfreq/Makefile +++ b/drivers/devfreq/Makefile @@ -10,7 +10,7 @@ obj-$(CONFIG_DEVFREQ_GOV_PASSIVE) += governor_passive.o # DEVFREQ Drivers obj-$(CONFIG_ARM_EXYNOS_BUS_DEVFREQ) += exynos-bus.o obj-$(CONFIG_ARM_RK3399_DMC_DEVFREQ) += rk3399_dmc.o -obj-$(CONFIG_ARM_TEGRA_DEVFREQ) += tegra-devfreq.o +obj-$(CONFIG_ARM_TEGRA_DEVFREQ) += tegra30-devfreq.o # DEVFREQ Event Drivers obj-$(CONFIG_PM_DEVFREQ_EVENT) += event/ diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra30-devfreq.c similarity index 100% rename from drivers/devfreq/tegra-devfreq.c rename to drivers/devfreq/tegra30-devfreq.c From patchwork Wed Apr 17 22:29:25 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 10906379 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D4DC71390 for ; Wed, 17 Apr 2019 22:43:21 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BF2DE28B6E for ; Wed, 17 Apr 2019 22:43:21 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B3AF128B7B; Wed, 17 Apr 2019 22:43:21 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0AE2128B6E for ; Wed, 17 Apr 2019 22:43:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387821AbfDQWnU (ORCPT ); Wed, 17 Apr 2019 18:43:20 -0400 Received: from mail-pg1-f193.google.com ([209.85.215.193]:44050 "EHLO mail-pg1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725848AbfDQWnU (ORCPT ); Wed, 17 Apr 2019 18:43:20 -0400 Received: by mail-pg1-f193.google.com with SMTP id i2so197938pgj.11; Wed, 17 Apr 2019 15:43:19 -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:in-reply-to:references :mime-version:content-transfer-encoding; bh=Ldt/gMqUoTia1r5kWEOCtxg7qB1prjq5nzjT+0b4O1I=; b=FUvnq4Iu4fItbpisPxzGQe+Q3/2ENX2rAL8UnQuQn3m6FHlCWZmQZ7s7QCjIXSSev0 +wzf6PkgOVBYF76TV/yxYr+5FCv6kHJ0IZBpfA6xr/ELJBDRab4Z5p7oPqZXC1NFndgY I+Dj/myzru2ER2/IAeUe1AehVWe0oeguKpELS/XlBtNFlHATKvuBjkkwtmUfRcTc5HZ8 Uq6Dhh6Bqfk9KWS6HuhbWEjZdMgGg4wk1ESX+kOqtN8YE1GHF9YUrvCjGGaMacHGcjOB Aga61fvSm7IioulbsqUiZERQLPHErluS3KKCTkFEST1hEW9MncF7nrpSxSy/ZRa8yIO4 +6cA== 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=Ldt/gMqUoTia1r5kWEOCtxg7qB1prjq5nzjT+0b4O1I=; b=e1robnuQBM9D3NOj41mzKIBeRFGUDvAjMjCNv1n4rDqsoZCP6g/H8LWlXTVyUKOvoR V+lg3aBDNx72AyjJCQYF6v0wHuSCAyBkoTjHIQA5XSBRshzK8ZJg8T1IsqdM+1lrJsmr Fw+L2/tK5tPEST7FOLPaGX0tZJhjZV3dXZznaU4F5ktaszbEpRNXU0p+1pQKY6Fj6Rq9 OQ81r8p7toANkNjtrjcxdTge54X+lzJal3K3fSw6GEg7kcthbjwSmy/fEoAmARZ3Q2rn nDxCi4QjnmHdvzkcwPIys+tGuL3XKmHWsfah/BAwSRej9Fx0+/EDQvSF0ISrhcNviuA9 1icw== X-Gm-Message-State: APjAAAUpgvqFVwAzXvTofwMcpheKaBqdk4NlILAjusv3KG2LTfW2kiLm Vp3FCuC60jbapkj+WNb6Xa0= X-Google-Smtp-Source: APXvYqyhGfUz9MhERILGcUY0gpp3TyYKd5FukSJuUcDRNVj+PFBRGFrT3UZacAWLf/kPq5YxNHXLog== X-Received: by 2002:aa7:85d9:: with SMTP id z25mr92092566pfn.31.1555540545136; Wed, 17 Apr 2019 15:35:45 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l26sm281030pfb.20.2019.04.17.15.35.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 17 Apr 2019 15:35:44 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v3 16/16] PM / devfreq: Introduce driver for NVIDIA Tegra20 Date: Thu, 18 Apr 2019 01:29:25 +0300 Message-Id: <20190417222925.5815-17-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190417222925.5815-1-digetx@gmail.com> References: <20190417222925.5815-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Add devfreq driver for NVIDIA Tegra20 SoC's. The driver periodically reads out Memory Controller counters and adjusts memory frequency based on the memory clients activity. Signed-off-by: Dmitry Osipenko Reviewed-by: Chanwoo Choi --- MAINTAINERS | 8 ++ drivers/devfreq/Kconfig | 10 ++ drivers/devfreq/Makefile | 1 + drivers/devfreq/tegra20-devfreq.c | 202 ++++++++++++++++++++++++++++++ 4 files changed, 221 insertions(+) create mode 100644 drivers/devfreq/tegra20-devfreq.c diff --git a/MAINTAINERS b/MAINTAINERS index 002d564efbe5..c70896550a27 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -10070,6 +10070,14 @@ F: include/linux/memblock.h F: mm/memblock.c F: Documentation/core-api/boot-time-mm.rst +MEMORY FREQUENCY SCALING DRIVER FOR NVIDIA TEGRA20 +M: Dmitry Osipenko +L: linux-pm@vger.kernel.org +L: linux-tegra@vger.kernel.org +T: git git://git.kernel.org/pub/scm/linux/kernel/git/mzx/devfreq.git +S: Maintained +F: drivers/devfreq/tegra20-devfreq.c + MEMORY MANAGEMENT L: linux-mm@kvack.org W: http://www.linux-mm.org diff --git a/drivers/devfreq/Kconfig b/drivers/devfreq/Kconfig index a6bba6e1e7d9..1530dbefa31f 100644 --- a/drivers/devfreq/Kconfig +++ b/drivers/devfreq/Kconfig @@ -100,6 +100,16 @@ config ARM_TEGRA_DEVFREQ It reads ACTMON counters of memory controllers and adjusts the operating frequencies and voltages with OPP support. +config ARM_TEGRA20_DEVFREQ + tristate "NVIDIA Tegra20 DEVFREQ Driver" + depends on (TEGRA_MC && TEGRA20_EMC) || COMPILE_TEST + select DEVFREQ_GOV_SIMPLE_ONDEMAND + select PM_OPP + help + This adds the DEVFREQ driver for the Tegra20 family of SoCs. + It reads Memory Controller counters and adjusts the operating + frequencies and voltages with OPP support. + config ARM_RK3399_DMC_DEVFREQ tristate "ARM RK3399 DMC DEVFREQ Driver" depends on ARCH_ROCKCHIP diff --git a/drivers/devfreq/Makefile b/drivers/devfreq/Makefile index 47e5aeeebfd1..338ae8440db6 100644 --- a/drivers/devfreq/Makefile +++ b/drivers/devfreq/Makefile @@ -11,6 +11,7 @@ obj-$(CONFIG_DEVFREQ_GOV_PASSIVE) += governor_passive.o obj-$(CONFIG_ARM_EXYNOS_BUS_DEVFREQ) += exynos-bus.o obj-$(CONFIG_ARM_RK3399_DMC_DEVFREQ) += rk3399_dmc.o obj-$(CONFIG_ARM_TEGRA_DEVFREQ) += tegra30-devfreq.o +obj-$(CONFIG_ARM_TEGRA20_DEVFREQ) += tegra20-devfreq.o # DEVFREQ Event Drivers obj-$(CONFIG_PM_DEVFREQ_EVENT) += event/ diff --git a/drivers/devfreq/tegra20-devfreq.c b/drivers/devfreq/tegra20-devfreq.c new file mode 100644 index 000000000000..ec2cec6808ed --- /dev/null +++ b/drivers/devfreq/tegra20-devfreq.c @@ -0,0 +1,202 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * NVIDIA Tegra20 devfreq driver + * + * Copyright (C) 2019 GRATE-DRIVER project + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "governor.h" + +#define MC_STAT_CONTROL 0x90 +#define MC_STAT_EMC_CLOCK_LIMIT 0xa0 +#define MC_STAT_EMC_CLOCKS 0xa4 +#define MC_STAT_EMC_CONTROL 0xa8 +#define MC_STAT_EMC_COUNT 0xb8 + +#define EMC_GATHER_CLEAR (1 << 8) +#define EMC_GATHER_ENABLE (3 << 8) + +struct tegra_devfreq { + struct devfreq *devfreq; + struct clk *clk; + void __iomem *regs; +}; + +static int tegra_devfreq_target(struct device *dev, unsigned long *freq, + u32 flags) +{ + struct tegra_devfreq *tegra = dev_get_drvdata(dev); + struct devfreq *devfreq = tegra->devfreq; + struct dev_pm_opp *opp; + unsigned long rate; + int err; + + opp = devfreq_recommended_opp(dev, freq, flags); + if (IS_ERR(opp)) + return PTR_ERR(opp); + + rate = dev_pm_opp_get_freq(opp); + dev_pm_opp_put(opp); + + err = clk_set_min_rate(tegra->clk, rate); + if (err) + return err; + + err = clk_set_rate(tegra->clk, 0); + if (err) + goto restore_min_rate; + + return 0; + +restore_min_rate: + clk_set_min_rate(tegra->clk, devfreq->previous_freq); + + return err; +} + +static int tegra_devfreq_get_dev_status(struct device *dev, + struct devfreq_dev_status *stat) +{ + struct tegra_devfreq *tegra = dev_get_drvdata(dev); + + stat->busy_time = readl_relaxed(tegra->regs + MC_STAT_EMC_COUNT); + stat->total_time = readl_relaxed(tegra->regs + MC_STAT_EMC_CLOCKS) / 8; + stat->current_frequency = clk_get_rate(tegra->clk); + + writel_relaxed(EMC_GATHER_CLEAR, tegra->regs + MC_STAT_CONTROL); + writel_relaxed(EMC_GATHER_ENABLE, tegra->regs + MC_STAT_CONTROL); + + return 0; +} + +static struct devfreq_dev_profile tegra_devfreq_profile = { + .polling_ms = 500, + .target = tegra_devfreq_target, + .get_dev_status = tegra_devfreq_get_dev_status, +}; + +static struct tegra_mc *tegra_get_memory_controller(void) +{ + struct platform_device *pdev; + struct device_node *np; + struct tegra_mc *mc; + + np = of_find_compatible_node(NULL, NULL, "nvidia,tegra20-mc-gart"); + if (!np) + return ERR_PTR(-ENOENT); + + pdev = of_find_device_by_node(np); + of_node_put(np); + if (!pdev) + return ERR_PTR(-ENODEV); + + mc = platform_get_drvdata(pdev); + if (!mc) + return ERR_PTR(-EPROBE_DEFER); + + return mc; +} + +static int tegra_devfreq_probe(struct platform_device *pdev) +{ + struct tegra_devfreq *tegra; + struct tegra_mc *mc; + unsigned long max_rate; + unsigned long rate; + int err; + + mc = tegra_get_memory_controller(); + if (IS_ERR(mc)) { + err = PTR_ERR(mc); + dev_err(&pdev->dev, "failed to get memory controller: %d\n", + err); + return err; + } + + tegra = devm_kzalloc(&pdev->dev, sizeof(*tegra), GFP_KERNEL); + if (!tegra) + return -ENOMEM; + + /* EMC is a system-critical clock that is always enabled */ + tegra->clk = devm_clk_get(&pdev->dev, "emc"); + if (IS_ERR(tegra->clk)) { + err = PTR_ERR(tegra->clk); + dev_err(&pdev->dev, "failed to get emc clock: %d\n", err); + return err; + } + + tegra->regs = mc->regs; + + max_rate = clk_round_rate(tegra->clk, ULONG_MAX); + + for (rate = 0; rate <= max_rate; rate++) { + rate = clk_round_rate(tegra->clk, rate); + + err = dev_pm_opp_add(&pdev->dev, rate, 0); + if (err) { + dev_err(&pdev->dev, "failed to add opp: %d\n", err); + goto remove_opps; + } + } + + /* + * Reset statistic gathers state, select global bandwidth for the + * statistics collection mode and set clocks counter saturation + * limit to maximum. + */ + writel_relaxed(0x00000000, tegra->regs + MC_STAT_CONTROL); + writel_relaxed(0x00000000, tegra->regs + MC_STAT_EMC_CONTROL); + writel_relaxed(0xffffffff, tegra->regs + MC_STAT_EMC_CLOCK_LIMIT); + + platform_set_drvdata(pdev, tegra); + + tegra->devfreq = devfreq_add_device(&pdev->dev, &tegra_devfreq_profile, + DEVFREQ_GOV_SIMPLE_ONDEMAND, NULL); + if (IS_ERR(tegra->devfreq)) { + err = PTR_ERR(tegra->devfreq); + goto remove_opps; + } + + return 0; + +remove_opps: + dev_pm_opp_remove_all_dynamic(&pdev->dev); + + return err; +} + +static int tegra_devfreq_remove(struct platform_device *pdev) +{ + struct tegra_devfreq *tegra = platform_get_drvdata(pdev); + + devfreq_remove_device(tegra->devfreq); + dev_pm_opp_remove_all_dynamic(&pdev->dev); + + return 0; +} + +static struct platform_driver tegra_devfreq_driver = { + .probe = tegra_devfreq_probe, + .remove = tegra_devfreq_remove, + .driver = { + .name = "tegra20-devfreq", + }, +}; +module_platform_driver(tegra_devfreq_driver); + +MODULE_ALIAS("platform:tegra20-devfreq"); +MODULE_AUTHOR("Dmitry Osipenko "); +MODULE_DESCRIPTION("NVIDIA Tegra20 devfreq driver"); +MODULE_LICENSE("GPL v2");