From patchwork Sun Jun 23 21:46:48 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11011965 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 334CA924 for ; Mon, 24 Jun 2019 01:50:53 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 16BFA285CE for ; Mon, 24 Jun 2019 01:50:53 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 04E50286B5; Mon, 24 Jun 2019 01:50:53 +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 A231D285CE for ; Mon, 24 Jun 2019 01:50:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726354AbfFXBuw (ORCPT ); Sun, 23 Jun 2019 21:50:52 -0400 Received: from mail-lj1-f193.google.com ([209.85.208.193]:37536 "EHLO mail-lj1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726339AbfFXBuv (ORCPT ); Sun, 23 Jun 2019 21:50:51 -0400 Received: by mail-lj1-f193.google.com with SMTP id 131so10928839ljf.4; Sun, 23 Jun 2019 18:50:50 -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=oFAhsxZO8T7oZCxQiimcCo/LECLyus1D6/1BOS50MWw=; b=E2kifvmmy2gkmDOOuotj98pK8r+bOT2Mu3aN6jHcZVrA05ekxa0KYmYWF2Xq4BMacY rjtrQDXJc9przwGkUcfzTG5IDUv7A807WL+i9LLztPLYAqHJfglaQ6SkvfOUOVzMlKxc 17RThbglHNAn7TBzVbM8/iBL/MXeAAjyhi8z1AHKo+c1JSBYnke8Ivz57H7htIrw7esy dmyBpmBPUA5kHLRaN82HdYJCWlKx0L+a24kUdoYKET8r0x7bEApaVLGDaXnymci3dFb1 CQs5d0yjiFpagRZ48Yt0kI5BOZiKbsD9ePn54dElkr1qZG3JvZKyLuAbpqbF5JHvOs1e k3Vg== 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=oFAhsxZO8T7oZCxQiimcCo/LECLyus1D6/1BOS50MWw=; b=R23mBmi+iHyuemlRWGNQAGZqcKJqzcKe4cY58a4vdkkZd/mv0BwE87V8YfrzN+/hU9 f3LLVkA7zmEOCKCooaqFGVsKZgDwT2kCEm3cUrkqbELcdXHGnPgKX4Q1ZD5JUrTV7PUJ tasytymrZyj7CXEWKFSOuslmjM6FyF7f2sC4Vd2T2QyLBXjDjYuYKxXI5QX/Mu5E2H7t WICUd6aIjkeW94ksbV8Q2TbAZ6uxdO4avC3uOEUynnYCYXVfVI8Ttk2s9bBrBdGIEHhp qstCNXhETLjsHGcPsYoSAf6vtfcR6uRj0jdGAYbsv8C/zZvZt0BAOR8m8T0IykS77K8d Iz0Q== X-Gm-Message-State: APjAAAUIngf28EXfIZ4H3EJQ2t8DhkhZRyEpELsKbtyL3tR7px2wn7M9 Ag1QjJ3xSTr8gV2z/93llnWJMRW8 X-Google-Smtp-Source: APXvYqxzc6HuObFu5DbzYy7Unm9KOZXY7WwP1d6nYBJ5H/BV/iLBfvSJXcF5kdZs8bMetpEsE5FCxg== X-Received: by 2002:a2e:9a13:: with SMTP id o19mr12704403lji.102.1561326516005; Sun, 23 Jun 2019 14:48:36 -0700 (PDT) Received: from localhost.localdomain (ppp91-79-162-197.pppoe.mtu-net.ru. [91.79.162.197]) by smtp.gmail.com with ESMTPSA id m17sm1460029lfb.9.2019.06.23.14.48.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 23 Jun 2019 14:48:35 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Jonathan Hunter , Tomeu Vizoso Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 01/11] PM / devfreq: tegra30: Change irq type to unsigned int Date: Mon, 24 Jun 2019 00:46:48 +0300 Message-Id: <20190623214658.11680-2-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190623214658.11680-1-digetx@gmail.com> References: <20190623214658.11680-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 IRQ numbers are always positive, hence the corresponding variable should be unsigned to keep types consistent. This is a minor change that cleans up code a tad more. Suggested-by: Thierry Reding Signed-off-by: Dmitry Osipenko Acked-by: MyungJoo Ham --- drivers/devfreq/tegra30-devfreq.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index a6ba75f4106d..a27300f40b0b 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -160,7 +160,7 @@ struct tegra_devfreq { struct tegra_devfreq_device devices[ARRAY_SIZE(actmon_device_configs)]; - int irq; + unsigned int irq; }; struct tegra_actmon_emc_ratio { @@ -618,12 +618,12 @@ static int tegra_devfreq_probe(struct platform_device *pdev) return PTR_ERR(tegra->emc_clock); } - tegra->irq = platform_get_irq(pdev, 0); - if (tegra->irq < 0) { - err = tegra->irq; + err = platform_get_irq(pdev, 0); + if (err < 0) { dev_err(&pdev->dev, "Failed to get IRQ: %d\n", err); return err; } + tegra->irq = err; reset_control_assert(tegra->reset); From patchwork Sun Jun 23 21:46:49 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11011971 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 0F355924 for ; Mon, 24 Jun 2019 01:57:47 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id F177328AE3 for ; Mon, 24 Jun 2019 01:57:46 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E2DDD28AF7; Mon, 24 Jun 2019 01:57:46 +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 7DD8D28AE3 for ; Mon, 24 Jun 2019 01:57:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726596AbfFXB5Z (ORCPT ); Sun, 23 Jun 2019 21:57:25 -0400 Received: from mail-lf1-f67.google.com ([209.85.167.67]:34995 "EHLO mail-lf1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726304AbfFXB5Z (ORCPT ); Sun, 23 Jun 2019 21:57:25 -0400 Received: by mail-lf1-f67.google.com with SMTP id a25so8779735lfg.2; Sun, 23 Jun 2019 18:57: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=pV5FdcPTSttSNilu3xNSfhA13rB7Fsv+D3UEkNB3Vao=; b=j2nVHNaUaDmfaQ1v1oLYjsmWH4Df86NddlNnTBVZhahWGH9Zc67quvXy3RLaAd0Pir ggQdukCgt0XpA265FRrSxiGfdna2OAN1QQke71K6IxsCI3xmUX8VzGedX6a2TnuYn3JE pxMrQgt5fjZVg+W0uaNQY4L3Hq7FXf5FsB/PZ91+L9TJ8DSHg+uKpqXaKWtB3O9Uowl1 4yJOpwpxg3O90trBwwKW8SOicbyrNfjRBkR8Xw619Kx9txpoTG8/WWmefBRkHfECNLTc 62Aaa1UEWhH+uSiTSjC5gPT0AiZrjyBoeeqZGkLy6Grcf66W4youuigcOACjMRNYq57F kxFw== 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=pV5FdcPTSttSNilu3xNSfhA13rB7Fsv+D3UEkNB3Vao=; b=I1X7ig1xmtIDoT0FvT2kDwuXtK7bvyex1a+uVv4RxhdxEbFxIYlkytMPPyN4aKg7EX O19VV34wk8ADb43/eY1WAQBuPPSJox2qxTOi+o6Fyix7Afhh8YH/QmUyUU+0oRSlwpqj /5JbNKkXv75RlWCx3HgKE7hZ8YSskw5nKCsy5z2ejv/917knPqHVPlYXOQ2/4ejLWrGv 8MUMZOTUA1dwXsTWlb4FEA+9FidAIrKvxtqlsasaUWxrC17i2kAwgLG9kzZBsPqxTdXS +woFOCG4vRX49+oq2Pm6YPRfZaupOvD/iHEalCbTfkRwPfN4octYzdBGsaLvDmJNO43l AsWg== X-Gm-Message-State: APjAAAUJjAs6WDBeIAtKoCt+CKh6XRtTcSIKJ2zXj4KNF5yB6OEi/7wb juAGWUOhgR1yQe4mA6c+7AJI60OI X-Google-Smtp-Source: APXvYqy5FOHHOhNqhyIhilPgU90c5BWnM5hPhlqihQdHBJxpUWliCMm3uFA+tTpj7sz2NYHuedEoBA== X-Received: by 2002:a19:f808:: with SMTP id a8mr10291071lff.29.1561326516944; Sun, 23 Jun 2019 14:48:36 -0700 (PDT) Received: from localhost.localdomain (ppp91-79-162-197.pppoe.mtu-net.ru. [91.79.162.197]) by smtp.gmail.com with ESMTPSA id m17sm1460029lfb.9.2019.06.23.14.48.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 23 Jun 2019 14:48:36 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Jonathan Hunter , Tomeu Vizoso Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 02/11] PM / devfreq: tegra30: Keep interrupt disabled while governor is stopped Date: Mon, 24 Jun 2019 00:46:49 +0300 Message-Id: <20190623214658.11680-3-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190623214658.11680-1-digetx@gmail.com> References: <20190623214658.11680-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 to keep interrupt always-enabled, will be nicer to keep it disabled where appropriate. Suggested-by: Thierry Reding Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra30-devfreq.c | 43 ++++++++++++++++--------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index a27300f40b0b..5e2b133babdd 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -416,8 +417,6 @@ 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); @@ -442,8 +441,6 @@ static void tegra_actmon_stop(struct tegra_devfreq *tegra) } actmon_write_barrier(tegra); - - enable_irq(tegra->irq); } static int tegra_devfreq_target(struct device *dev, unsigned long *freq, @@ -552,6 +549,12 @@ static int tegra_governor_event_handler(struct devfreq *devfreq, { struct tegra_devfreq *tegra = dev_get_drvdata(devfreq->dev.parent); + /* + * Couple device with the governor early as it is needed at + * the moment of governor's start (used by ISR). + */ + tegra->devfreq = devfreq; + switch (event) { case DEVFREQ_GOV_START: devfreq_monitor_start(devfreq); @@ -586,10 +589,11 @@ static struct devfreq_governor tegra_devfreq_governor = { static int tegra_devfreq_probe(struct platform_device *pdev) { - struct tegra_devfreq *tegra; struct tegra_devfreq_device *dev; - unsigned int i; + struct tegra_devfreq *tegra; + struct devfreq *devfreq; unsigned long rate; + unsigned int i; int err; tegra = devm_kzalloc(&pdev->dev, sizeof(*tegra), GFP_KERNEL); @@ -625,6 +629,16 @@ static int tegra_devfreq_probe(struct platform_device *pdev) } tegra->irq = err; + irq_set_status_flags(tegra->irq, IRQ_NOAUTOEN); + + 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: %d\n", err); + return err; + } + reset_control_assert(tegra->reset); err = clk_prepare_enable(tegra->clock); @@ -672,28 +686,15 @@ static int tegra_devfreq_probe(struct platform_device *pdev) } tegra_devfreq_profile.initial_freq = clk_get_rate(tegra->emc_clock); - tegra->devfreq = devfreq_add_device(&pdev->dev, - &tegra_devfreq_profile, - "tegra_actmon", - NULL); + devfreq = devfreq_add_device(&pdev->dev, &tegra_devfreq_profile, + "tegra_actmon", NULL); if (IS_ERR(tegra->devfreq)) { err = PTR_ERR(tegra->devfreq); goto remove_governor; } - 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: %d\n", err); - goto remove_devfreq; - } - return 0; -remove_devfreq: - devfreq_remove_device(tegra->devfreq); - remove_governor: devfreq_remove_governor(&tegra_devfreq_governor); From patchwork Sun Jun 23 21:46:50 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11011975 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 27C9414B6 for ; Mon, 24 Jun 2019 01:58:13 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 195B228AE3 for ; Mon, 24 Jun 2019 01:58:13 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0C83828AF7; Mon, 24 Jun 2019 01:58: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 AD87428AE3 for ; Mon, 24 Jun 2019 01:58:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726837AbfFXB6I (ORCPT ); Sun, 23 Jun 2019 21:58:08 -0400 Received: from mail-lf1-f67.google.com ([209.85.167.67]:46194 "EHLO mail-lf1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726481AbfFXB6H (ORCPT ); Sun, 23 Jun 2019 21:58:07 -0400 Received: by mail-lf1-f67.google.com with SMTP id z15so8719122lfh.13; Sun, 23 Jun 2019 18:58:06 -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=jlaXfET5L4G5Q3oIQtoqkvvOO4wQfddYSuicKTgAAs4=; b=lJJ+DAigEEWSZ0iZcKVLVADsMkXpYMRq/4hgfXLDM4WddCHfXWIq6KwPvQnx9YDrpG gjswmyHmeu7Uz53jPMNj52gKyb9/aXJar7YWQkqhEc3yjrV+3cc+bHNZUsZDJdDqf9zV 6K7zxKH/7FJvnVclS3xHu6/NS5lzcpovpK+P8Wu9GwCgrXJIrxAIKGwZwCk+P2abtWTf tKNs4b9IOX4vy2D5O9OWolnnzWgk7FeLkUlH/IhHE4JIjhxg/Xx9pSzNoFcy9ZzzKn0k luFtU+SpIn3ERf1pOUFP+Z4CAtgiM4BrEinMd6aNVk4nI212Aao0iRNJSX+ntwphM+XV Bujg== 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=jlaXfET5L4G5Q3oIQtoqkvvOO4wQfddYSuicKTgAAs4=; b=UKNh4byHAXlUZqbm5GwQHQhctCMtN/BifyH26PCEO61xjJVqyAw+oVy5t8r1O7MlMM UrjyAUvzLpuADfguO+xjHKqz+DqY5eSGry3Xzs9+Ccjbn6cqOVQW/TyInJFRmW/NuiMJ RJQ0GCOrXwxqmkRFUBDUFLK/UCVFEu2qCtYqbn6vvzjaGqADr9Cx/+R3tEfP7SvKWrEP 506qraipQE6jnK3IFGho0ZjtPcA/0kUVAPyRfx3B4jmqiXVg+VCAE+SmUW5F71ChwC+F 1K5EknEHgT8AjmoxP9Z0Yj6p2+Jg2JifOmBTpPgYER09fxx+DMlAVU3kgxpW4HgxutBq 1dAw== X-Gm-Message-State: APjAAAUqilD5pI/CoheDZKSspf4asKf724Rtoz7xxqNG8cBF9dL8W6Gi u6UkODftqEGinab/7GRogR+8R8wf X-Google-Smtp-Source: APXvYqyym5mhGZi374E3oda5UerOu6AhLVBE6xpUJREvtKx9JcTanA/G90osamA3KqJoKPBu5wMMzw== X-Received: by 2002:a19:4:: with SMTP id 4mr8144577lfa.162.1561326517853; Sun, 23 Jun 2019 14:48:37 -0700 (PDT) Received: from localhost.localdomain (ppp91-79-162-197.pppoe.mtu-net.ru. [91.79.162.197]) by smtp.gmail.com with ESMTPSA id m17sm1460029lfb.9.2019.06.23.14.48.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 23 Jun 2019 14:48:37 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Jonathan Hunter , Tomeu Vizoso Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 03/11] PM / devfreq: tegra30: Handle possible round-rate error Date: Mon, 24 Jun 2019 00:46:50 +0300 Message-Id: <20190623214658.11680-4-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190623214658.11680-1-digetx@gmail.com> References: <20190623214658.11680-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 EMC clock rate rounding technically could fail, hence let's handle the error cases properly. Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra30-devfreq.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index 5e2b133babdd..5e606ae3f238 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -592,8 +592,8 @@ static int tegra_devfreq_probe(struct platform_device *pdev) struct tegra_devfreq_device *dev; struct tegra_devfreq *tegra; struct devfreq *devfreq; - unsigned long rate; unsigned int i; + long rate; int err; tegra = devm_kzalloc(&pdev->dev, sizeof(*tegra), GFP_KERNEL); @@ -650,8 +650,14 @@ static int tegra_devfreq_probe(struct platform_device *pdev) reset_control_deassert(tegra->reset); - tegra->max_freq = clk_round_rate(tegra->emc_clock, ULONG_MAX) / KHZ; + rate = clk_round_rate(tegra->emc_clock, ULONG_MAX); + if (rate < 0) { + dev_err(&pdev->dev, "Failed to round clock rate: %ld\n", rate); + return rate; + } + tegra->cur_freq = clk_get_rate(tegra->emc_clock) / KHZ; + tegra->max_freq = rate / KHZ; for (i = 0; i < ARRAY_SIZE(actmon_device_configs); i++) { dev = tegra->devices + i; @@ -662,6 +668,13 @@ 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); + if (rate < 0) { + dev_err(&pdev->dev, + "Failed to round clock rate: %ld\n", rate); + err = rate; + goto remove_opps; + } + err = dev_pm_opp_add(&pdev->dev, rate, 0); if (err) { dev_err(&pdev->dev, "Failed to add OPP: %d\n", err); From patchwork Sun Jun 23 21:46:51 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11011969 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 99C81924 for ; Mon, 24 Jun 2019 01:56:01 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8A54528AE3 for ; Mon, 24 Jun 2019 01:56:01 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7CBC828AF7; Mon, 24 Jun 2019 01:56:01 +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 1E69F28AE3 for ; Mon, 24 Jun 2019 01:56:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726341AbfFXBz4 (ORCPT ); Sun, 23 Jun 2019 21:55:56 -0400 Received: from mail-lj1-f196.google.com ([209.85.208.196]:34341 "EHLO mail-lj1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726304AbfFXBz4 (ORCPT ); Sun, 23 Jun 2019 21:55:56 -0400 Received: by mail-lj1-f196.google.com with SMTP id p17so10955507ljg.1; Sun, 23 Jun 2019 18:55:54 -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=d/7wNA8MAMSp7e/mZW/Vod5RtNn1ZWLvCZTV21PmCFE=; b=L0ZP1Du4UJarUZc83p78D1vv5rbMa++Zecy9gf2C/sEmE38z1CUDYNZtbdqay4oXjv wtksAbW8ZJBl1zkRqiyZxBgkX8zxclNP3TDtki7UUCskO8f0x8dF/zo+PGkI3o1Wnqi/ i6i1VOtCbFLD/F3Q2v741iVE01LGiwX1OIlGCx2rdKdMxEs8UUvQzcLOIZkHeFzPEMmf O+7ntMgJr7LbUvO4wcmhMT1Nfm4+tdl01l7NalOAjFOQbmQ3xeWcBteQdGUGixM2iFP7 l+1oKfaS1UXi747QDN2CI6R7McQFdu+ARuSVc4sAmUOw+bz4W9mIzlxY4kcIkY8+Jjrs 6Vlg== 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=d/7wNA8MAMSp7e/mZW/Vod5RtNn1ZWLvCZTV21PmCFE=; b=eZjr3sCktWJDTIrLc0rBRoTeZ2d4QbmRI0P8IOZS4UWqt0pyU7djDWyxHsPV5GzsX6 hNmivaXrFz4nAeKJPTaXuq1Clf4clmwglvAVRV8Sk65jSZmK/3f0iCPM5N99byduvUxJ MXJ+v7GClFYjNnsk8Qaz2MstWrI0+K2oPDlJhbe0rKuix/UNYJ11wC6LZsQp7RUX/mjG Jjwnfh9nU0PIrtBj9RCzlvl54rU24ksnLFg6V0KVAx1CTZbyzVibh/C4cS+Hyg72/K42 23PL4duwgJV2EP3q8EkneumOPjY/YXUqxCGsSlU0eypzBPqAG7DM4COCV2hPY4B0roOZ 899Q== X-Gm-Message-State: APjAAAXoLoDZTga7CEoJJVbpDBKKf1vaRNHci3Uu1OT1WN8bUkecRpUX F9tanAbAj0UVRlXDcElpZvD3LiDZ X-Google-Smtp-Source: APXvYqye4V5QSFOGkNtJMg/FAidBFWD3G9IlC1/a8d7S+Cona5FygRmeQ/8Dbd9tuc2t39l5UnZS1w== X-Received: by 2002:a2e:9250:: with SMTP id v16mr30382163ljg.89.1561326518772; Sun, 23 Jun 2019 14:48:38 -0700 (PDT) Received: from localhost.localdomain (ppp91-79-162-197.pppoe.mtu-net.ru. [91.79.162.197]) by smtp.gmail.com with ESMTPSA id m17sm1460029lfb.9.2019.06.23.14.48.37 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 23 Jun 2019 14:48:38 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Jonathan Hunter , Tomeu Vizoso Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 04/11] PM / devfreq: tegra30: Drop write-barrier Date: Mon, 24 Jun 2019 00:46:51 +0300 Message-Id: <20190623214658.11680-5-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190623214658.11680-1-digetx@gmail.com> References: <20190623214658.11680-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 in a write-barrier now, given that interrupt masking is handled by CPU's GIC now. Hence we know exactly that interrupt won't fire after stopping the devfreq's governor. In other cases we don't care about potential buffering of the writes to hardware and thus there is no need to stall CPU. Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra30-devfreq.c | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index 5e606ae3f238..4be7858c33bc 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -230,12 +230,6 @@ static void tegra_devfreq_update_wmark(struct tegra_devfreq *tegra, ACTMON_DEV_LOWER_WMARK); } -static void actmon_write_barrier(struct tegra_devfreq *tegra) -{ - /* ensure the update has reached the ACTMON */ - readl(tegra->regs + ACTMON_GLB_STATUS); -} - static void actmon_isr_device(struct tegra_devfreq *tegra, struct tegra_devfreq_device *dev) { @@ -287,8 +281,6 @@ static void actmon_isr_device(struct tegra_devfreq *tegra, device_writel(dev, dev_ctrl, ACTMON_DEV_CTRL); device_writel(dev, ACTMON_INTR_STATUS_CLEAR, ACTMON_DEV_INTR_STATUS); - - actmon_write_barrier(tegra); } static unsigned long actmon_cpu_to_emc_rate(struct tegra_devfreq *tegra, @@ -376,8 +368,6 @@ static int tegra_actmon_rate_notify_cb(struct notifier_block *nb, tegra_devfreq_update_wmark(tegra, dev); } - actmon_write_barrier(tegra); - return NOTIFY_OK; } @@ -423,8 +413,6 @@ static void tegra_actmon_start(struct tegra_devfreq *tegra) 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); } @@ -439,8 +427,6 @@ static void tegra_actmon_stop(struct tegra_devfreq *tegra) device_writel(&tegra->devices[i], ACTMON_INTR_STATUS_CLEAR, ACTMON_DEV_INTR_STATUS); } - - actmon_write_barrier(tegra); } static int tegra_devfreq_target(struct device *dev, unsigned long *freq, From patchwork Sun Jun 23 21:46:52 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11012015 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 7834A924 for ; Mon, 24 Jun 2019 02:06:08 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 68B3C28A9D for ; Mon, 24 Jun 2019 02:06:08 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5C33028AE8; Mon, 24 Jun 2019 02:06:08 +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 1996D28AF8 for ; Mon, 24 Jun 2019 02:06:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726514AbfFXCGC (ORCPT ); Sun, 23 Jun 2019 22:06:02 -0400 Received: from mail-lf1-f68.google.com ([209.85.167.68]:35435 "EHLO mail-lf1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726328AbfFXCGC (ORCPT ); Sun, 23 Jun 2019 22:06:02 -0400 Received: by mail-lf1-f68.google.com with SMTP id a25so8790132lfg.2; Sun, 23 Jun 2019 19:05:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=CoGCDWU5MclrhGGEVnaVillFZGoaSyHnpNFbq7mFCgg=; b=DzmfaYzEZPvW099BwLfiy6qoSGw7QNyPgWz0ypFI9+dEx70y8wn8nhV7v8JOOQ6Ljo ALEITJ2U2nRvFLF7O6Szl0UcFq1F0T9k63jwo9BklyNdlefTMK0c+EjHcLg2nUyHG6bh h9TlFWr5KNiTdlnziRBgGT/7Og6bpDCW8349rO+WCUyL55fVCNZvUYygRyj66ur3awzb 8eDUFwo5WhuJBYHaFC5gsKX/lmfSvJjCOb+B50zZtb1OAPYDFt6hdmhNzYwuEI91DU/A 3Qu6/cjIjWqNq+ZqMDCA42o9VmBbYBkP8DluUPPSswjw56V/28YJh3bSGe5m7Otj73F6 pv5Q== 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=CoGCDWU5MclrhGGEVnaVillFZGoaSyHnpNFbq7mFCgg=; b=dHXsX3yMl1g8/6kXSKNAkKEFiuIGrbpg80K5Rynmf4cWU2oPqOGR0G5OzjHV1VGGWC +/95GovTFdJVhs4oK+VyaQymav/PteA895dB9S1G7Sb0xhpI1KRPHqQ2ZIYHwN9hBcea TyHCl5pLSLm3W1m0hSISqAsjtYNHcCliVdG4gP7tmAeSICA9ygH0qzBUqLuUyPXd76DV ySHe2WeKUPETprsuCX9VbbsOrF1OsbehKfVhYC058kbcWtL80mmzKVi98xTn0vbNO1KX yulMDsysnvZhFm7qVD3UBoG2UD1A8B+fp2e++/0V2drhohB1gSfA8+ZhAEYq6p5Uw8L0 WhIw== X-Gm-Message-State: APjAAAV3xflkXYiikyctTtOKPfj/zDnPpj3vuz5C9utNoSw50OGXdtdR dWW/FM6PoZdS9Y/LLZ39wSWi2qDL X-Google-Smtp-Source: APXvYqz1iIV8lvTrl6GMQx+Iq4q5ajrms+PD6dXVsZBUQhu2LQpucjd+qg8A4cphCy7qaFgeKNY0uw== X-Received: by 2002:a19:9152:: with SMTP id y18mr33724150lfj.128.1561326519781; Sun, 23 Jun 2019 14:48:39 -0700 (PDT) Received: from localhost.localdomain (ppp91-79-162-197.pppoe.mtu-net.ru. [91.79.162.197]) by smtp.gmail.com with ESMTPSA id m17sm1460029lfb.9.2019.06.23.14.48.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 23 Jun 2019 14:48:39 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Jonathan Hunter , Tomeu Vizoso Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 05/11] PM / devfreq: tegra30: Rework frequency management logic Date: Mon, 24 Jun 2019 00:46:52 +0300 Message-Id: <20190623214658.11680-6-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190623214658.11680-1-digetx@gmail.com> References: <20190623214658.11680-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 current implementation is inaccurate and results in very intensive interrupt activity, which neglects the whole idea of polling offload to hardware. The reason of the shortcoming is that watermarks are not set up correctly and this results in ACTMON constantly asking to change freq and then these requests are ignored. Secondly, the CPU's client need to take into account that CPUFreq may change while memory activity not, thus an appropriate frequency notifier should be used instead of the clk-notifier. The end result of this patch is that there are few hundreds of ACTMON's interrupts instead of tens thousands after few minutes of a working devfreq, meanwhile the transitions activity stays about the same and governor becomes more reactive. Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra30-devfreq.c | 411 ++++++++++++++++++++++-------- 1 file changed, 301 insertions(+), 110 deletions(-) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index 4be7858c33bc..813b0f490b90 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -17,6 +17,7 @@ #include #include #include +#include #include "governor.h" @@ -40,6 +41,7 @@ #define ACTMON_DEV_AVG_UPPER_WMARK 0x10 #define ACTMON_DEV_AVG_LOWER_WMARK 0x14 #define ACTMON_DEV_COUNT_WEIGHT 0x18 +#define ACTMON_DEV_COUNT 0x1c #define ACTMON_DEV_AVG_COUNT 0x20 #define ACTMON_DEV_INTR_STATUS 0x24 @@ -47,6 +49,8 @@ #define ACTMON_DEV_INTR_CONSECUTIVE_UPPER BIT(31) #define ACTMON_DEV_INTR_CONSECUTIVE_LOWER BIT(30) +#define ACTMON_DEV_INTR_AVG_BELOW_WMARK BIT(25) +#define ACTMON_DEV_INTR_AVG_ABOVE_WMARK BIT(24) #define ACTMON_ABOVE_WMARK_WINDOW 1 #define ACTMON_BELOW_WMARK_WINDOW 3 @@ -63,9 +67,8 @@ * ACTMON_AVERAGE_WINDOW_LOG2: default value for @DEV_CTRL_K_VAL, which * translates to 2 ^ (K_VAL + 1). ex: 2 ^ (6 + 1) = 128 */ -#define ACTMON_AVERAGE_WINDOW_LOG2 6 -#define ACTMON_SAMPLING_PERIOD 12 /* ms */ -#define ACTMON_DEFAULT_AVG_BAND 6 /* 1/10 of % */ +#define ACTMON_AVERAGE_WINDOW_LOG2 6 +#define ACTMON_SAMPLING_PERIOD 12 /* ms */ #define KHZ 1000 @@ -142,9 +145,6 @@ struct tegra_devfreq_device { * watermark breaches. */ unsigned long boost_freq; - - /* Optimal frequency calculated from the stats for this device */ - unsigned long target_freq; }; struct tegra_devfreq { @@ -156,7 +156,8 @@ struct tegra_devfreq { struct clk *emc_clock; unsigned long max_freq; - unsigned long cur_freq; + + struct work_struct update_work; struct notifier_block rate_change_nb; struct tegra_devfreq_device devices[ARRAY_SIZE(actmon_device_configs)]; @@ -205,42 +206,216 @@ static unsigned long do_percent(unsigned long val, unsigned int pct) return val * pct / 100; } +static unsigned long actmon_cpu_to_emc_rate(struct tegra_devfreq *tegra) +{ + struct tegra_actmon_emc_ratio *ratio = actmon_emc_ratios; + unsigned int cpu_freq = cpufreq_get(0); + unsigned int i; + + for (i = 0; i < ARRAY_SIZE(actmon_emc_ratios); i++, ratio++) { + if (cpu_freq >= ratio->cpu_freq) { + if (ratio->emc_freq >= tegra->max_freq) + return tegra->max_freq; + else + return ratio->emc_freq; + } + } + + return 0; +} + +static unsigned long +tegra_actmon_account_cpu_freq(struct tegra_devfreq *tegra, + struct tegra_devfreq_device *dev, + unsigned long target_freq, + unsigned long count) +{ + unsigned long static_cpu_emc_freq; + + if (dev->config->avg_dependency_threshold && + dev->config->avg_dependency_threshold < count) { + static_cpu_emc_freq = actmon_cpu_to_emc_rate(tegra); + target_freq = max(target_freq, static_cpu_emc_freq); + } + + return target_freq; +} + +static unsigned long tegra_actmon_lower_freq(struct tegra_devfreq *tegra, + unsigned long target_freq) +{ + unsigned long lower = target_freq; + struct dev_pm_opp *opp; + + opp = dev_pm_opp_find_freq_floor(tegra->devfreq->dev.parent, &lower); + if (IS_ERR(opp)) + lower = 0; + else + dev_pm_opp_put(opp); + + return lower; +} + +static unsigned long tegra_actmon_upper_freq(struct tegra_devfreq *tegra, + unsigned long target_freq) +{ + unsigned long upper = target_freq + 1; + struct dev_pm_opp *opp; + + opp = dev_pm_opp_find_freq_ceil(tegra->devfreq->dev.parent, &upper); + if (IS_ERR(opp)) + upper = ULONG_MAX; + else + dev_pm_opp_put(opp); + + return upper; +} + +static void tegra_actmon_get_lower_upper(struct tegra_devfreq *tegra, + struct tegra_devfreq_device *dev, + unsigned long count, + unsigned long *lower, + unsigned long *upper) +{ + unsigned long target_freq, min; + + target_freq = count / ACTMON_SAMPLING_PERIOD * KHZ; + + /* + * Memory frequencies are guaranteed to have 1MHz granularity + * and thus we need this rounding down to get a proper watermarks + * range in a case where target_freq falls into a range of + * next_possible_opp_freq - 1MHz. + */ + target_freq = round_down(target_freq, 1000000); + + *lower = tegra_actmon_lower_freq(tegra, target_freq); + + /* + * When memory activity is below the minimum bandwidth that EMC + * driver could provide, the upper watermark should be set for + * the second OPP to avoid unnecessary interrupts activity when + * the minimum threshold is crossed towards zero bandwidth. + * + * ------ target_freq + * | ----------------- minimum possible freq + * v v + * |0|----------|min freq|----|second freq|----|third freq|---... + * ^ ^ + * | | + * ---- lower watermark ---- upper watermark + */ + min = tegra_actmon_upper_freq(tegra, 0); + + if (target_freq < min) + *upper = tegra_actmon_upper_freq(tegra, min); + else + *upper = tegra_actmon_upper_freq(tegra, target_freq); + + *lower /= KHZ; + *upper /= KHZ; + + /* + * The upper watermark should take into account CPU's frequency + * because cpu_to_emc_rate() may override the target_freq with + * a higher value and thus upper watermark need to be set up + * accordingly to avoid parasitic upper-events. + */ + *upper = tegra_actmon_account_cpu_freq(tegra, dev, *upper, count); + + *lower *= ACTMON_SAMPLING_PERIOD; + *upper *= ACTMON_SAMPLING_PERIOD; +} + static void tegra_devfreq_update_avg_wmark(struct tegra_devfreq *tegra, struct tegra_devfreq_device *dev) { - u32 avg = dev->avg_count; - u32 avg_band_freq = tegra->max_freq * ACTMON_DEFAULT_AVG_BAND / KHZ; - u32 band = avg_band_freq * ACTMON_SAMPLING_PERIOD; + unsigned long count = dev->avg_count; + unsigned long lower, upper; + + tegra_actmon_get_lower_upper(tegra, dev, count, &lower, &upper); - device_writel(dev, avg + band, ACTMON_DEV_AVG_UPPER_WMARK); + /* + * We want to get interrupts when MCCPU client crosses the + * dependency threshold in order to into / out of account the + * CPU's freq. + */ + if (lower == 0 && dev->config->avg_dependency_threshold) { + if (count < dev->config->avg_dependency_threshold) + upper = dev->config->avg_dependency_threshold; + else + lower = dev->config->avg_dependency_threshold; + } - avg = max(dev->avg_count, band); - device_writel(dev, avg - band, ACTMON_DEV_AVG_LOWER_WMARK); + device_writel(dev, lower, ACTMON_DEV_AVG_LOWER_WMARK); + device_writel(dev, upper, ACTMON_DEV_AVG_UPPER_WMARK); } static void tegra_devfreq_update_wmark(struct tegra_devfreq *tegra, struct tegra_devfreq_device *dev) { - u32 val = tegra->cur_freq * ACTMON_SAMPLING_PERIOD; + unsigned long count = device_readl(dev, ACTMON_DEV_COUNT); + unsigned long lower, upper, delta; - device_writel(dev, do_percent(val, dev->config->boost_up_threshold), - ACTMON_DEV_UPPER_WMARK); + /* + * Boosting logic kicks-in once lower / upper watermark is hit. + * + * count -------- --- upper delta + * v v + * ...--|OPP N|--|lower|<------->-<--------->|upper|--|OPP N+1|--... + * ^ ^ + * | | + * lower delta--- | + * | + * average count somewhere there------ + */ + + tegra_actmon_get_lower_upper(tegra, dev, count, &lower, &upper); + + /* don't forget to take boosting into account */ + upper += dev->boost_freq; + + /* the lesser memory activity goes, the harder is boost-down */ + delta = do_percent(count - lower, dev->config->boost_down_threshold); + device_writel(dev, count - delta, ACTMON_DEV_LOWER_WMARK); - device_writel(dev, do_percent(val, dev->config->boost_down_threshold), - ACTMON_DEV_LOWER_WMARK); + /* the higher memory activity goes, the softer is boost-up */ + delta = do_percent(upper - count, dev->config->boost_up_threshold); + device_writel(dev, count + delta, ACTMON_DEV_UPPER_WMARK); } static void actmon_isr_device(struct tegra_devfreq *tegra, struct tegra_devfreq_device *dev) { - u32 intr_status, dev_ctrl; + u32 intr_status, dev_ctrl, avg_intr_mask; + bool low_activity = true; dev->avg_count = device_readl(dev, ACTMON_DEV_AVG_COUNT); - tegra_devfreq_update_avg_wmark(tegra, dev); - intr_status = device_readl(dev, ACTMON_DEV_INTR_STATUS); dev_ctrl = device_readl(dev, ACTMON_DEV_CTRL); + avg_intr_mask = ACTMON_DEV_INTR_AVG_BELOW_WMARK | + ACTMON_DEV_INTR_AVG_ABOVE_WMARK; + + if (intr_status & avg_intr_mask) + tegra_devfreq_update_avg_wmark(tegra, dev); + + /* + * Instantly cutoff boosting if CPU isn't touching memory nearly + * at all for awhile, this result in a more interactive governing. + * + * MCALL doesn't have the minimum activity threshold. + * + * Note that it's important to disabled boosting before calling + * tegra_devfreq_update_wmark() because it takes boosting into + * account. + */ + if (dev->config->avg_dependency_threshold && + dev->avg_count < dev->config->avg_dependency_threshold) + dev->boost_freq = 0; + else + low_activity = false; + if (intr_status & ACTMON_DEV_INTR_CONSECUTIVE_UPPER) { /* * new_boost = min(old_boost * up_coef + step, max_freq) @@ -249,12 +424,10 @@ static void actmon_isr_device(struct tegra_devfreq *tegra, dev->config->boost_up_coeff); dev->boost_freq += ACTMON_BOOST_FREQ_STEP; - dev_ctrl |= ACTMON_DEV_CTRL_CONSECUTIVE_BELOW_WMARK_EN; - - if (dev->boost_freq >= tegra->max_freq) + if (dev->boost_freq >= tegra->max_freq && !low_activity) dev->boost_freq = tegra->max_freq; - else - dev_ctrl |= ACTMON_DEV_CTRL_CONSECUTIVE_ABOVE_WMARK_EN; + + tegra_devfreq_update_wmark(tegra, dev); } else if (intr_status & ACTMON_DEV_INTR_CONSECUTIVE_LOWER) { /* * new_boost = old_boost * down_coef @@ -263,19 +436,10 @@ static void actmon_isr_device(struct tegra_devfreq *tegra, dev->boost_freq = do_percent(dev->boost_freq, dev->config->boost_down_coeff); - dev_ctrl |= ACTMON_DEV_CTRL_CONSECUTIVE_ABOVE_WMARK_EN; - if (dev->boost_freq < (ACTMON_BOOST_FREQ_STEP >> 1)) dev->boost_freq = 0; - else - dev_ctrl |= ACTMON_DEV_CTRL_CONSECUTIVE_BELOW_WMARK_EN; - } - if (dev->config->avg_dependency_threshold) { - if (dev->avg_count >= dev->config->avg_dependency_threshold) - dev_ctrl |= ACTMON_DEV_CTRL_CONSECUTIVE_BELOW_WMARK_EN; - else if (dev->boost_freq == 0) - dev_ctrl &= ~ACTMON_DEV_CTRL_CONSECUTIVE_BELOW_WMARK_EN; + tegra_devfreq_update_wmark(tegra, dev); } device_writel(dev, dev_ctrl, ACTMON_DEV_CTRL); @@ -283,43 +447,20 @@ static void actmon_isr_device(struct tegra_devfreq *tegra, device_writel(dev, ACTMON_INTR_STATUS_CLEAR, ACTMON_DEV_INTR_STATUS); } -static unsigned long actmon_cpu_to_emc_rate(struct tegra_devfreq *tegra, - unsigned long cpu_freq) -{ - unsigned int i; - struct tegra_actmon_emc_ratio *ratio = actmon_emc_ratios; - - for (i = 0; i < ARRAY_SIZE(actmon_emc_ratios); i++, ratio++) { - if (cpu_freq >= ratio->cpu_freq) { - if (ratio->emc_freq >= tegra->max_freq) - return tegra->max_freq; - else - return ratio->emc_freq; - } - } - - return 0; -} - -static void actmon_update_target(struct tegra_devfreq *tegra, - struct tegra_devfreq_device *dev) +static unsigned long actmon_update_target(struct tegra_devfreq *tegra, + struct tegra_devfreq_device *dev) { - unsigned long cpu_freq = 0; - unsigned long static_cpu_emc_freq = 0; - unsigned int avg_sustain_coef; - - if (dev->config->avg_dependency_threshold) { - cpu_freq = cpufreq_get(0); - static_cpu_emc_freq = actmon_cpu_to_emc_rate(tegra, cpu_freq); - } + unsigned long avg_sustain_coef, target_freq; - 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); - dev->target_freq += dev->boost_freq; - if (dev->avg_count >= dev->config->avg_dependency_threshold) - dev->target_freq = max(dev->target_freq, static_cpu_emc_freq); + target_freq = dev->avg_count / ACTMON_SAMPLING_PERIOD; + target_freq = do_percent(target_freq, avg_sustain_coef); + target_freq += dev->boost_freq; + target_freq = tegra_actmon_account_cpu_freq(tegra, dev, target_freq, + dev->avg_count); + + return target_freq; } static irqreturn_t actmon_thread_isr(int irq, void *data) @@ -347,26 +488,53 @@ static irqreturn_t actmon_thread_isr(int irq, void *data) return handled ? IRQ_HANDLED : IRQ_NONE; } +static void tegra_actmon_update_watermarks(struct tegra_devfreq *tegra) +{ + struct tegra_devfreq_device *dev = tegra->devices; + unsigned int i; + + for (i = 0; i < ARRAY_SIZE(tegra->devices); i++, dev++) { + tegra_devfreq_update_avg_wmark(tegra, dev); + tegra_devfreq_update_wmark(tegra, dev); + } +} + +static void tegra_actmon_delayed_update(struct work_struct *work) +{ + struct tegra_devfreq *tegra = container_of(work, struct tegra_devfreq, + update_work); + unsigned long previous_freq; + + mutex_lock(&tegra->devfreq->lock); + + previous_freq = tegra->devfreq->previous_freq; + + update_devfreq(tegra->devfreq); + + /* + * CPU freq changed and this may result in a change of a target + * memory rate, hence the watermarks may need to be updated too + * because they depend on the CPU's freq and interrupt events will + * stop if the watermark's range is now larger than it should be. + */ + if (tegra->devfreq->previous_freq != previous_freq) + tegra_actmon_update_watermarks(tegra); + + mutex_unlock(&tegra->devfreq->lock); +} + static int tegra_actmon_rate_notify_cb(struct notifier_block *nb, unsigned long action, void *ptr) { - struct clk_notifier_data *data = ptr; struct tegra_devfreq *tegra; - struct tegra_devfreq_device *dev; - unsigned int i; - if (action != POST_RATE_CHANGE) + if (action != CPUFREQ_POSTCHANGE) return NOTIFY_OK; tegra = container_of(nb, struct tegra_devfreq, rate_change_nb); - tegra->cur_freq = data->new_rate / KHZ; - - for (i = 0; i < ARRAY_SIZE(tegra->devices); i++) { - dev = &tegra->devices[i]; - - tegra_devfreq_update_wmark(tegra, dev); - } + /* notifier runs with a disabled preemption */ + schedule_work(&tegra->update_work); return NOTIFY_OK; } @@ -374,11 +542,10 @@ static int tegra_actmon_rate_notify_cb(struct notifier_block *nb, static void tegra_actmon_configure_device(struct tegra_devfreq *tegra, struct tegra_devfreq_device *dev) { - u32 val = 0; - - dev->target_freq = tegra->cur_freq; + u32 val = 0, target_freq; - dev->avg_count = tegra->cur_freq * ACTMON_SAMPLING_PERIOD; + target_freq = clk_get_rate(tegra->emc_clock) / KHZ; + dev->avg_count = target_freq * ACTMON_SAMPLING_PERIOD; device_writel(dev, dev->avg_count, ACTMON_DEV_INIT_AVG); tegra_devfreq_update_avg_wmark(tegra, dev); @@ -403,9 +570,16 @@ static void tegra_actmon_configure_device(struct tegra_devfreq *tegra, device_writel(dev, val, ACTMON_DEV_CTRL); } -static void tegra_actmon_start(struct tegra_devfreq *tegra) +static void tegra_actmon_stop_device(struct tegra_devfreq_device *dev) +{ + device_writel(dev, 0x00000000, ACTMON_DEV_CTRL); + device_writel(dev, ACTMON_INTR_STATUS_CLEAR, ACTMON_DEV_INTR_STATUS); +} + +static int tegra_actmon_start(struct tegra_devfreq *tegra) { unsigned int i; + int err; actmon_writel(tegra, ACTMON_SAMPLING_PERIOD - 1, ACTMON_GLB_PERIOD_CTRL); @@ -413,7 +587,30 @@ static void tegra_actmon_start(struct tegra_devfreq *tegra) for (i = 0; i < ARRAY_SIZE(tegra->devices); i++) tegra_actmon_configure_device(tegra, &tegra->devices[i]); + /* + * We are estimating CPU's memory bandwidth requirement based on + * amount of memory accesses and system's load, judging by CPU's + * frequency. We also don't want to receive events about CPU's + * frequency transaction when governor is stopped, hence + * notifier is registered dynamically. + */ + err = cpufreq_register_notifier(&tegra->rate_change_nb, + CPUFREQ_TRANSITION_NOTIFIER); + if (err) { + dev_err(tegra->devfreq->dev.parent, + "Failed to register rate change notifier: %d\n", err); + goto err_stop; + } + enable_irq(tegra->irq); + + return 0; + +err_stop: + for (i = 0; i < ARRAY_SIZE(tegra->devices); i++) + tegra_actmon_stop_device(&tegra->devices[i]); + + return err; } static void tegra_actmon_stop(struct tegra_devfreq *tegra) @@ -422,11 +619,13 @@ static void tegra_actmon_stop(struct tegra_devfreq *tegra) 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); - } + cpufreq_unregister_notifier(&tegra->rate_change_nb, + CPUFREQ_TRANSITION_NOTIFIER); + + cancel_work_sync(&tegra->update_work); + + for (i = 0; i < ARRAY_SIZE(tegra->devices); i++) + tegra_actmon_stop_device(&tegra->devices[i]); } static int tegra_devfreq_target(struct device *dev, unsigned long *freq, @@ -469,13 +668,13 @@ static int tegra_devfreq_get_dev_status(struct device *dev, struct tegra_devfreq_device *actmon_dev; unsigned long cur_freq; - cur_freq = READ_ONCE(tegra->cur_freq); + cur_freq = clk_get_rate(tegra->emc_clock); /* 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; + stat->current_frequency = cur_freq; actmon_dev = &tegra->devices[MCALL]; @@ -486,7 +685,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 * cur_freq; + stat->total_time = cur_freq / KHZ * ACTMON_SAMPLING_PERIOD; stat->busy_time = min(stat->busy_time, stat->total_time); @@ -505,6 +704,7 @@ static int tegra_governor_get_target(struct devfreq *devfreq, struct devfreq_dev_status *stat; struct tegra_devfreq *tegra; struct tegra_devfreq_device *dev; + unsigned long dev_target_freq; unsigned long target_freq = 0; unsigned int i; int err; @@ -520,9 +720,9 @@ static int tegra_governor_get_target(struct devfreq *devfreq, for (i = 0; i < ARRAY_SIZE(tegra->devices); i++) { dev = &tegra->devices[i]; - actmon_update_target(tegra, dev); + dev_target_freq = actmon_update_target(tegra, dev); - target_freq = max(target_freq, dev->target_freq); + target_freq = max(target_freq, dev_target_freq); } *freq = target_freq * KHZ; @@ -534,6 +734,7 @@ static int tegra_governor_event_handler(struct devfreq *devfreq, unsigned int event, void *data) { struct tegra_devfreq *tegra = dev_get_drvdata(devfreq->dev.parent); + int ret = 0; /* * Couple device with the governor early as it is needed at @@ -544,7 +745,7 @@ static int tegra_governor_event_handler(struct devfreq *devfreq, switch (event) { case DEVFREQ_GOV_START: devfreq_monitor_start(devfreq); - tegra_actmon_start(tegra); + ret = tegra_actmon_start(tegra); break; case DEVFREQ_GOV_STOP: @@ -559,11 +760,11 @@ static int tegra_governor_event_handler(struct devfreq *devfreq, case DEVFREQ_GOV_RESUME: devfreq_monitor_resume(devfreq); - tegra_actmon_start(tegra); + ret = tegra_actmon_start(tegra); break; } - return 0; + return ret; } static struct devfreq_governor tegra_devfreq_governor = { @@ -642,7 +843,6 @@ static int tegra_devfreq_probe(struct platform_device *pdev) return rate; } - tegra->cur_freq = clk_get_rate(tegra->emc_clock) / KHZ; tegra->max_freq = rate / KHZ; for (i = 0; i < ARRAY_SIZE(actmon_device_configs); i++) { @@ -671,17 +871,12 @@ static int tegra_devfreq_probe(struct platform_device *pdev) 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; - } + INIT_WORK(&tegra->update_work, tegra_actmon_delayed_update); err = devfreq_add_governor(&tegra_devfreq_governor); if (err) { dev_err(&pdev->dev, "Failed to add governor: %d\n", err); - goto unreg_notifier; + goto remove_opps; } tegra_devfreq_profile.initial_freq = clk_get_rate(tegra->emc_clock); @@ -697,9 +892,6 @@ static int tegra_devfreq_probe(struct platform_device *pdev) remove_governor: devfreq_remove_governor(&tegra_devfreq_governor); -unreg_notifier: - clk_notifier_unregister(tegra->emc_clock, &tegra->rate_change_nb); - remove_opps: dev_pm_opp_remove_all_dynamic(&pdev->dev); @@ -716,7 +908,6 @@ static int tegra_devfreq_remove(struct platform_device *pdev) devfreq_remove_device(tegra->devfreq); devfreq_remove_governor(&tegra_devfreq_governor); - clk_notifier_unregister(tegra->emc_clock, &tegra->rate_change_nb); dev_pm_opp_remove_all_dynamic(&pdev->dev); reset_control_reset(tegra->reset); From patchwork Sun Jun 23 21:46:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11011973 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 85228924 for ; Mon, 24 Jun 2019 01:57:52 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7724528AE3 for ; Mon, 24 Jun 2019 01:57:52 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6AC5628AF7; Mon, 24 Jun 2019 01:57: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 188C928AE3 for ; Mon, 24 Jun 2019 01:57:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726509AbfFXB5r (ORCPT ); Sun, 23 Jun 2019 21:57:47 -0400 Received: from mail-lj1-f196.google.com ([209.85.208.196]:34461 "EHLO mail-lj1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726561AbfFXB5r (ORCPT ); Sun, 23 Jun 2019 21:57:47 -0400 Received: by mail-lj1-f196.google.com with SMTP id p17so10957939ljg.1; Sun, 23 Jun 2019 18:57:45 -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=rPiHCgSWlyFbcnT0W5lDiXP3U67kYIPo6pYV48G/ks4=; b=C1DpDdnAs/+ZUXfe2fzAHS/UGr5Kfwk03xsK7piYc3a4y31Wsl0HCxa1IPpTNCe/xL xIR5VtV2bX/3eiziVZQeieEbrrDaT8Bb5k1ZkD+eBL6HEvTYC4tFE/4IVgM75Jmf0leo 53+UZxGdQ0suo0D2va3pXO0JUx7BfcV3N5qZOCpqGnvGT4oHV7rc2yoisj1xpQUsRBEV F0Ui/7GYb569tH24oUl9/bWwawj92caTrnGQoDwlbcHepb/BYWchPrxaI7gxxZPyW81m A5Vml1XF/I/xqVJX7fnYJtjUu/gEb1/fdLxDQ/aooEHHh8DMuiAEFt1gnE9zDDtTKdGm xjPg== 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=rPiHCgSWlyFbcnT0W5lDiXP3U67kYIPo6pYV48G/ks4=; b=sfD0v4TweFsINSDYDJNi/t727YAITq11nTuitzKMe+Hl/5On0B6lOSTylpX5X8GAi+ rh/YQri1NXQ2TJZVTn4go8HFwYscBKXzrL8tTDUW7ffGnSx6QdkYn9c0pjxsQZPSq1io kUj4x7Jlw255O72yAQYqeCOCardHu0/ZbVsa1GTCC76VGS1v7miFbOsZYJ0D64h538UT 7gbrwlLJpHxNVXV3NvKEbYYgpiFENQPNT8w7Wgfag2WeWdMeQ3Lf5S6+9brgKk0PjXH9 nO+lqzEtXnLPLAnBBApyuucSvc+FqTpyAEBTwoPBbn/ecYB5ZGDnUGwdZj1CZox8wDzE Bc4w== X-Gm-Message-State: APjAAAU012jgqwB40vDPLLNTYCU0sv/iH+MMrLGmbOw7U+iJg4rWGCa1 NKPvA0zugIEG2n3TzLEOeD+JYegP X-Google-Smtp-Source: APXvYqxsJTx6rkvjW2d4Bcz7J2N9z0vFpkzEtCo9H2lCBuyurngQxI5WazFn9GloUrAxKt8D7HDBGw== X-Received: by 2002:a2e:6e0e:: with SMTP id j14mr12976611ljc.85.1561326520760; Sun, 23 Jun 2019 14:48:40 -0700 (PDT) Received: from localhost.localdomain (ppp91-79-162-197.pppoe.mtu-net.ru. [91.79.162.197]) by smtp.gmail.com with ESMTPSA id m17sm1460029lfb.9.2019.06.23.14.48.39 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 23 Jun 2019 14:48:40 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Jonathan Hunter , Tomeu Vizoso Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 06/11] PM / devfreq: tegra30: Reset boosting on startup Date: Mon, 24 Jun 2019 00:46:53 +0300 Message-Id: <20190623214658.11680-7-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190623214658.11680-1-digetx@gmail.com> References: <20190623214658.11680-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 Governor could be stopped while boosting is active. We have assumption that everything is reset on governor's restart, including the boosting value, which was missed. Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra30-devfreq.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index 813b0f490b90..fc278f2f1b62 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -544,6 +544,9 @@ static void tegra_actmon_configure_device(struct tegra_devfreq *tegra, { u32 val = 0, target_freq; + /* we don't want boosting on restart */ + dev->boost_freq = 0; + target_freq = clk_get_rate(tegra->emc_clock) / KHZ; dev->avg_count = target_freq * ACTMON_SAMPLING_PERIOD; device_writel(dev, dev->avg_count, ACTMON_DEV_INIT_AVG); From patchwork Sun Jun 23 21:46:54 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11012107 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 E3F291398 for ; Mon, 24 Jun 2019 03:17:05 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D4E4228AC0 for ; Mon, 24 Jun 2019 03:17:05 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C87ED28B02; Mon, 24 Jun 2019 03:17:05 +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 6D31428AC0 for ; Mon, 24 Jun 2019 03:17:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727412AbfFXDRE (ORCPT ); Sun, 23 Jun 2019 23:17:04 -0400 Received: from mail-lj1-f196.google.com ([209.85.208.196]:45665 "EHLO mail-lj1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726307AbfFXDRE (ORCPT ); Sun, 23 Jun 2019 23:17:04 -0400 Received: by mail-lj1-f196.google.com with SMTP id m23so11009176lje.12; Sun, 23 Jun 2019 20:17:02 -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=KuK/HJBB+sabov/uStjAYnZLIz/87lFFGThs8FI3mQo=; b=ADKaGoys8uZe39G6vzOfMQxp52ANy6A8hq08yILdHzRwsJVTh+iQef/bZ0c7nOSR2g AGya6G9fkSdH5RxY+V2hNNkAWm6Wz7mQSGtpYlh6K6DcKTipdnO24viU0h37W5p/GZoo G+Xa3l7M30vhz8jLJBsgDfLfXZ1Vd74dhbSODGuaEYXX/XYe0ZyQ8fe96Mj8XozKbzL9 brIlGizU9frPWEfQ6XONvPJ5UFx8t0dOJ9sp/QktoVRpc9M1P5gghU45p1kAplBoUxng 48iancZgoiCC2wH8EBvGh5ln1UnY1Ld4ynmRtCFmmF4bpddAsss6Pn8dZ5VeakjnnKXY aFeQ== 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=KuK/HJBB+sabov/uStjAYnZLIz/87lFFGThs8FI3mQo=; b=QX/X5Y6hAf4mNd+OAT9F5NFxcQH1bdwgEr35Rwnqcmx+dKbE6SapsPvyFXiLzR/6IP RSZDvKUncIRK3MQKqoc7ABeX4vleUtW9vgDh3kMe9oE9Oci66gCIm5T460gX3dquVEUC pNxFOXOp0dIGo9beU2qJnkq29YamrEBWuTwazT8pCP7EGwj19BCdrHkZYMkjYWff5rlw l9gxawyBfXz/buInfe8sF35xcCuww4KwQvYPJcfjD1vu+Won/yip09AdKVnWCzkLseNn V7p5RvM8UdcOr5P2N+Q8SpTyQUNjTRYm0OBAU95DVHc8SsDs2J8RYmrAYuV7leW6HQoU v+zg== X-Gm-Message-State: APjAAAUUqmXpIl0s4JDyN7AkVCjLgvezuRZwY530mIsWcN/8Ot1GNRfY FwQ8TP6VUwpwKGgn39gahw/tyXBa X-Google-Smtp-Source: APXvYqy5wejoCrg2EumLvR8/AjNLGElfUZlXldTgYEiYg4AcGai9CAXpJIsQcoAxhNsF+F1yekcT7w== X-Received: by 2002:a2e:959a:: with SMTP id w26mr33411080ljh.150.1561326522191; Sun, 23 Jun 2019 14:48:42 -0700 (PDT) Received: from localhost.localdomain (ppp91-79-162-197.pppoe.mtu-net.ru. [91.79.162.197]) by smtp.gmail.com with ESMTPSA id m17sm1460029lfb.9.2019.06.23.14.48.40 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 23 Jun 2019 14:48:41 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Jonathan Hunter , Tomeu Vizoso Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 07/11] PM / devfreq: tegra30: Reset boosting if clock rate changed Date: Mon, 24 Jun 2019 00:46:54 +0300 Message-Id: <20190623214658.11680-8-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190623214658.11680-1-digetx@gmail.com> References: <20190623214658.11680-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 a situation when memory activity is going up, hence boosting up starts to happen, and then governor ramps memory clock rate up. In this case consecutive events may be stopped if new "COUNT" is within watermarks range, meanwhile old boosting value remains, which is plainly wrong and results in unneeded "go down" events after ramping up. In a result of this change unnecessary interrupts activity goes even lower. Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra30-devfreq.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index fc278f2f1b62..6fb3ca125438 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -631,6 +631,24 @@ static void tegra_actmon_stop(struct tegra_devfreq *tegra) tegra_actmon_stop_device(&tegra->devices[i]); } +static void tegra_actmon_stop_boosting(struct tegra_devfreq *tegra) +{ + struct tegra_devfreq_device *dev = tegra->devices; + unsigned int i; + u32 dev_ctrl; + + for (i = 0; i < ARRAY_SIZE(tegra->devices); i++, dev++) { + if (!dev->boost_freq) + continue; + + dev_ctrl = device_readl(dev, ACTMON_DEV_CTRL); + dev_ctrl &= ~ACTMON_DEV_CTRL_CONSECUTIVE_BELOW_WMARK_EN; + device_writel(dev, dev_ctrl, ACTMON_DEV_CTRL); + + dev->boost_freq = 0; + } +} + static int tegra_devfreq_target(struct device *dev, unsigned long *freq, u32 flags) { @@ -656,6 +674,16 @@ static int tegra_devfreq_target(struct device *dev, unsigned long *freq, if (err) goto restore_min_rate; + /* + * Hence boosting-up could be active at the moment of the rate-change + * and in this case boosting should be reset because it doesn't relate + * to the new state. If average won't follow shortly in a case of going + * UP, then clock rate will drop back on next update due to the missed + * boosting. + */ + if (rate != devfreq->previous_freq) + tegra_actmon_stop_boosting(tegra); + return 0; restore_min_rate: From patchwork Sun Jun 23 21:46:55 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11012105 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 CFB9A17D2 for ; Mon, 24 Jun 2019 03:09:45 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BDD6628B02 for ; Mon, 24 Jun 2019 03:09:45 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id AC12628AF8; Mon, 24 Jun 2019 03:09:45 +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 5687D28AF8 for ; Mon, 24 Jun 2019 03:09:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727285AbfFXDJo (ORCPT ); Sun, 23 Jun 2019 23:09:44 -0400 Received: from mail-lj1-f196.google.com ([209.85.208.196]:33550 "EHLO mail-lj1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726307AbfFXDJo (ORCPT ); Sun, 23 Jun 2019 23:09:44 -0400 Received: by mail-lj1-f196.google.com with SMTP id h10so11079593ljg.0; Sun, 23 Jun 2019 20:09:42 -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=Y381zs7JqUeO4ZbV4kzg6cbvTaILm3gppCIZ9QaFOsw=; b=KLKEEFV7vyQEtxZ0uYEFUUY5ay9LG072nBkWBGisDQoh237JAJ6TnNhz4qsxgAGK22 YNFSxBL5c+kfsqSm+FEwy4tdVxBIPEC5Dz/4fbi4gx0NTUoGuGOnHdKG6AvZ8gAuLLBT FthFg8LiYixseIyfokMbAhKy0/fG2R5y40iC7A9pvKuE2dCAzxOGEoADpz1/gnKHdmgA Mlexq03Pe5YwnT9xH0yosgCWaP2TDN3CAM1SCK9kHzDCYkBmtiKgYbUgjyurURDmPqDe To/wh7jkGuUiJIIAU3QuGjUiiyRenvhT9dc+Jh0yg89XDyTXt3HIsMBxhcneBn3SzVk6 dBww== 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=Y381zs7JqUeO4ZbV4kzg6cbvTaILm3gppCIZ9QaFOsw=; b=llfoXSjqqAZsiV5PQLMguB7WTLH4i1UbRg+pH3Iasghf9h0JHGIHoXtb9OjzUGpBIW AU5tp5W7/xe0y6Dk+WH2fLntCaKksry2ehN+jhdnKaI9M9hA/BvUjvl7uwWciLFY0f+o G92Eg1kHWdhrkvTPreHDKxFdMTt4K0GcPk951mBPqV0VCHL/XEsQGm5hTdIZLJVKwBfP 0UVrhjqXtPh0Foc9RjwrGD22dUHvhX087pqvl7UT9rplOpA60+nrS91p6ahrcBQC75zU IORlUHJgP6d46cmyxoXelohEYuMpjnJ+dyk4RrUb2hucT+4yFS0UFgC/HHxdiTUlFrpf qn2w== X-Gm-Message-State: APjAAAWvf2V95Z44T0VZCrVa0BILC3HZDDKd3lU22gz1PF+VQwI0cvoC TUSQkphZ6bhdyxYY/djZ3GL21IwX X-Google-Smtp-Source: APXvYqwMtcEyUBqTG0OrMlZmNbYr3qFE2ieb5bqL32t92m479TGx4QU6qZIPGEn0PHf+rKxTEBwdpA== X-Received: by 2002:a2e:b1c1:: with SMTP id e1mr14060925lja.228.1561326523122; Sun, 23 Jun 2019 14:48:43 -0700 (PDT) Received: from localhost.localdomain (ppp91-79-162-197.pppoe.mtu-net.ru. [91.79.162.197]) by smtp.gmail.com with ESMTPSA id m17sm1460029lfb.9.2019.06.23.14.48.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 23 Jun 2019 14:48:42 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Jonathan Hunter , Tomeu Vizoso Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 08/11] PM / devfreq: tegra30: Stop de-boosting once it's finished Date: Mon, 24 Jun 2019 00:46:55 +0300 Message-Id: <20190623214658.11680-9-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190623214658.11680-1-digetx@gmail.com> References: <20190623214658.11680-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 Once boosting value is 0, then further consecutive-down events won't do anything useful since the only purpose of those consecutive events to boost the freq and de-boosting is over in the case of 0. Note that upper watermark is infinitely high in a case of frequency max out and thus the upper events are stopping by themselves. In a result of this change all parasite interrupts are fixed now and interrupts activity is nearly non-existent now! Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra30-devfreq.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index 6fb3ca125438..81449cc1392b 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -424,6 +424,8 @@ static void actmon_isr_device(struct tegra_devfreq *tegra, dev->config->boost_up_coeff); dev->boost_freq += ACTMON_BOOST_FREQ_STEP; + dev_ctrl |= ACTMON_DEV_CTRL_CONSECUTIVE_BELOW_WMARK_EN; + if (dev->boost_freq >= tegra->max_freq && !low_activity) dev->boost_freq = tegra->max_freq; @@ -442,6 +444,10 @@ static void actmon_isr_device(struct tegra_devfreq *tegra, tegra_devfreq_update_wmark(tegra, dev); } + /* no boosting => no need for consecutive-down interrupt */ + if (dev->boost_freq == 0) + dev_ctrl &= ~ACTMON_DEV_CTRL_CONSECUTIVE_BELOW_WMARK_EN; + device_writel(dev, dev_ctrl, ACTMON_DEV_CTRL); device_writel(dev, ACTMON_INTR_STATUS_CLEAR, ACTMON_DEV_INTR_STATUS); From patchwork Sun Jun 23 21:46:56 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11012019 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 D65051580 for ; Mon, 24 Jun 2019 02:07:37 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C786228A9D for ; Mon, 24 Jun 2019 02:07:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BB5D728AE8; Mon, 24 Jun 2019 02:07:37 +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 6661428AF8 for ; Mon, 24 Jun 2019 02:07:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726663AbfFXCHg (ORCPT ); Sun, 23 Jun 2019 22:07:36 -0400 Received: from mail-lj1-f193.google.com ([209.85.208.193]:39240 "EHLO mail-lj1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726360AbfFXCHg (ORCPT ); Sun, 23 Jun 2019 22:07:36 -0400 Received: by mail-lj1-f193.google.com with SMTP id v18so10929677ljh.6; Sun, 23 Jun 2019 19:07:34 -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=YUoP/TwInzxAmI5FyuGeNL3uUUuvUmrAozelA40npDc=; b=dt+IpZnL/XkzkPQ85iZLZb0U4PuL4OW2ARGM6x5a/ce/Z9BAiTRuRC791zCzc7ohtC hfBSDLl0bFhdPH9bYXaIMBNZp9+qd9XYbK8ewIEO22/NanxYiIxnSoNmDHEXL+UFNyoP ROPtppJ+CYqYfoJ/GVNBD1JoE68W8lpaEFqaqxzTR94N/tLJVk8o2JKrQU0MnRm/Bs9N NIJOn10u61/rk6jDxcbcvTF3gbPgXIhgokbjjzZdARjOGum0ubklpt1AjLFO1wyYA8vS jh0Hyg3ti5uGjKL0YfnMFhM0+kEE6JktQ2cXEgDAi2mOtkULLqJtKUyjaOAGcWVfQ6zv ebRw== 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=YUoP/TwInzxAmI5FyuGeNL3uUUuvUmrAozelA40npDc=; b=mAbtexs2GWvjJuT2VkEY9uEILOCy9UCSYFqxmRXtPYlHwXY36hK1pS/xxbD6RvvY0R c6tDeTcIZGQYD8/teuauUnEC4m6Y9C95GYFLw2ZvrQ8ienZGQuZ8SqMLmZyDi4aJ2CJe /x0CYP7R2W27ij2Ob/Skdxn286L7DyRHvCX8JuikzaJWRBqzQHR6ZTbjAYOn/u4iSb+M Ji0ki4Z37LHI+b4yNLjSOUc6K8blUOw1tVrwI9M5ABNp7ELekdzeP28ezkks/otsFaSp 8zKNkesHvnjywd82Y/HF2b7pWS5QVZXQVLB4/4V8cAR33/dGVXCi4VI+Z/aJ167+FWhB UE2A== X-Gm-Message-State: APjAAAUuRgOrNubbfcVSvqZQ5OQLuoXdgofW7eAmO0OkN96AHRNAtMmq 4msEnLtySqcyb6DeLnKIZqsYtN/B X-Google-Smtp-Source: APXvYqxFy4zg5sP10Iafd/jsNiR3o5hlxirUmF1MYJHuLe2fXY8cSySzySVjvsOXYv6vKN52CUHDUg== X-Received: by 2002:a2e:8793:: with SMTP id n19mr37244573lji.174.1561326524110; Sun, 23 Jun 2019 14:48:44 -0700 (PDT) Received: from localhost.localdomain (ppp91-79-162-197.pppoe.mtu-net.ru. [91.79.162.197]) by smtp.gmail.com with ESMTPSA id m17sm1460029lfb.9.2019.06.23.14.48.43 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 23 Jun 2019 14:48:43 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Jonathan Hunter , Tomeu Vizoso Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 09/11] PM / devfreq: tegra30: Don't enable consecutive-down interrupt on startup Date: Mon, 24 Jun 2019 00:46:56 +0300 Message-Id: <20190623214658.11680-10-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190623214658.11680-1-digetx@gmail.com> References: <20190623214658.11680-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 consecutive-down event tells that we should perform frequency de-boosting, but boosting is in a reset state on start and hence the event won't do anything useful for us and it will be just a dummy interrupt request. Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra30-devfreq.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index 81449cc1392b..168bfe78e525 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -572,7 +572,6 @@ static void tegra_actmon_configure_device(struct tegra_devfreq *tegra, << 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; From patchwork Sun Jun 23 21:46:57 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11011967 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 9D5BD14B6 for ; Mon, 24 Jun 2019 01:51:32 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8E9EB28AE3 for ; Mon, 24 Jun 2019 01:51:32 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 818A928AF7; Mon, 24 Jun 2019 01:51:32 +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 1484428AE3 for ; Mon, 24 Jun 2019 01:51:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726339AbfFXBv1 (ORCPT ); Sun, 23 Jun 2019 21:51:27 -0400 Received: from mail-lj1-f195.google.com ([209.85.208.195]:39180 "EHLO mail-lj1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726304AbfFXBv1 (ORCPT ); Sun, 23 Jun 2019 21:51:27 -0400 Received: by mail-lj1-f195.google.com with SMTP id v18so10906114ljh.6; Sun, 23 Jun 2019 18:51:25 -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=nYRS9MdYmFFWPAiEhPZWw0w+9h3W9S26RozsmwY92Y0=; b=DCITDwuX98eZYywKaF/pbpnW5bIW/EDVriGnq9GO16ZrW41YmdlOJSlLQgdnbVUjld 4eBdf/qjEQiyJZd0xJDSx2mwt4AsJd9zC8rXoXQ1e/R/raissCfOloEeT6T0ocmTuGle ZeekxnpMbt64xoey0x4v2IIlT9ZMRHrIeKKk2dVIT2uk7y/OTrOFVMGfK1er5ANXlmhJ 6sHLDaoLEz1bMOg/BrmnDbtQykqZ8ythYr2Wji9UN0WMf5pBgfW69mkudbswaHTgjPRU D1zAkQBpWTEUkokbCv7npcIZgB0g5qB1uMeRYzNHbC/Xed7eelrW9tikjrs1O1Nr10Y0 P/bg== 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=nYRS9MdYmFFWPAiEhPZWw0w+9h3W9S26RozsmwY92Y0=; b=O8plqKYa6l3EszuZPaKos7QxYuH12R3fpx/sA0hbL9zylX5z/UCKQEud3NYwTJYt5S jCGF8I9db2xQ9g1l1ey7Gvei3BQz7PQEy7J6W+XDlfy+G/qz0A1KmB5dT69+L6e2gVQC a2QLySgertTXBfB2j2CVnMKXi4TOuM0o0bLqQViM3MvyoBPkr1/d4MvxLmi15yuOHenI a/xq6ZnavD18kA0/ogpdm01fpJMfNjtTYdzqqhlfD0xAQnMdJqbHmdZ0M75K2XJRop1+ Lna33DXunrLIhd82Q7cjW4Mz9rmEAcm+wPUOTK5ZCGSe3w6NTobniGc0eKIAdN5KAxBR Dygw== X-Gm-Message-State: APjAAAXQ4XRHMYROF/CG3IR5vecugS0wLho7rPntPlEqDgnDYDwi4R3H sQt1iq7JfTEnEfIc6u2eKXewq2fv X-Google-Smtp-Source: APXvYqyc6zd1A7+jfFcgBuyYeoPiDicRsI/iIka3Ng3nzxm60bZJocNHEwfvzNCFK6/5dhzUzmW0fQ== X-Received: by 2002:a2e:3c1a:: with SMTP id j26mr33315913lja.230.1561326525033; Sun, 23 Jun 2019 14:48:45 -0700 (PDT) Received: from localhost.localdomain (ppp91-79-162-197.pppoe.mtu-net.ru. [91.79.162.197]) by smtp.gmail.com with ESMTPSA id m17sm1460029lfb.9.2019.06.23.14.48.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 23 Jun 2019 14:48:44 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Jonathan Hunter , Tomeu Vizoso Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 10/11] PM / devfreq: tegra30: Add debug messages Date: Mon, 24 Jun 2019 00:46:57 +0300 Message-Id: <20190623214658.11680-11-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190623214658.11680-1-digetx@gmail.com> References: <20190623214658.11680-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 debug messages to know about what's happening in hardware and how driver reacts. Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra30-devfreq.c | 33 +++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index 168bfe78e525..452bc10d2d72 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -277,6 +277,8 @@ static void tegra_actmon_get_lower_upper(struct tegra_devfreq *tegra, unsigned long *lower, unsigned long *upper) { + struct device *ddev = tegra->devfreq->dev.parent; + u32 offset = dev->config->offset; unsigned long target_freq, min; target_freq = count / ACTMON_SAMPLING_PERIOD * KHZ; @@ -312,6 +314,9 @@ static void tegra_actmon_get_lower_upper(struct tegra_devfreq *tegra, else *upper = tegra_actmon_upper_freq(tegra, target_freq); + dev_dbg(ddev, "%03x: target_freq %lu lower freq %lu upper freq %lu\n", + offset, target_freq, *lower, *upper); + *lower /= KHZ; *upper /= KHZ; @@ -384,12 +389,32 @@ static void tegra_devfreq_update_wmark(struct tegra_devfreq *tegra, device_writel(dev, count + delta, ACTMON_DEV_UPPER_WMARK); } +static void actmon_device_debug(struct tegra_devfreq *tegra, + struct tegra_devfreq_device *dev, + const char *prefix) +{ + dev_dbg(tegra->devfreq->dev.parent, + "%03x: %s: 0x%08x 0x%08x a %u %u %u c %u %u %u b %lu cpu %u\n", + dev->config->offset, prefix, + device_readl(dev, ACTMON_DEV_INTR_STATUS), + device_readl(dev, ACTMON_DEV_CTRL), + device_readl(dev, ACTMON_DEV_AVG_COUNT), + device_readl(dev, ACTMON_DEV_AVG_LOWER_WMARK), + device_readl(dev, ACTMON_DEV_AVG_UPPER_WMARK), + device_readl(dev, ACTMON_DEV_COUNT), + device_readl(dev, ACTMON_DEV_LOWER_WMARK), + device_readl(dev, ACTMON_DEV_UPPER_WMARK), + dev->boost_freq, cpufreq_get(0)); +} + static void actmon_isr_device(struct tegra_devfreq *tegra, struct tegra_devfreq_device *dev) { u32 intr_status, dev_ctrl, avg_intr_mask; bool low_activity = true; + actmon_device_debug(tegra, dev, "isr+"); + dev->avg_count = device_readl(dev, ACTMON_DEV_AVG_COUNT); intr_status = device_readl(dev, ACTMON_DEV_INTR_STATUS); dev_ctrl = device_readl(dev, ACTMON_DEV_CTRL); @@ -451,6 +476,8 @@ static void actmon_isr_device(struct tegra_devfreq *tegra, device_writel(dev, dev_ctrl, ACTMON_DEV_CTRL); device_writel(dev, ACTMON_INTR_STATUS_CLEAR, ACTMON_DEV_INTR_STATUS); + + actmon_device_debug(tegra, dev, "isr-"); } static unsigned long actmon_update_target(struct tegra_devfreq *tegra, @@ -737,6 +764,7 @@ static struct devfreq_dev_profile tegra_devfreq_profile = { static int tegra_governor_get_target(struct devfreq *devfreq, unsigned long *freq) { + struct device *ddev = devfreq->dev.parent; struct devfreq_dev_status *stat; struct tegra_devfreq *tegra; struct tegra_devfreq_device *dev; @@ -759,6 +787,11 @@ static int tegra_governor_get_target(struct devfreq *devfreq, dev_target_freq = actmon_update_target(tegra, dev); target_freq = max(target_freq, dev_target_freq); + + dev_dbg(ddev, "%03x: upd: dev_target_freq %lu\n", + dev->config->offset, dev_target_freq); + + actmon_device_debug(tegra, dev, "upd"); } *freq = target_freq * KHZ; From patchwork Sun Jun 23 21:46:58 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11011951 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 C609D6C5 for ; Mon, 24 Jun 2019 01:42:19 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B859E28874 for ; Mon, 24 Jun 2019 01:42:19 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id AC9AD28AF7; Mon, 24 Jun 2019 01:42:19 +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 56DC328874 for ; Mon, 24 Jun 2019 01:42:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726954AbfFXBmO (ORCPT ); Sun, 23 Jun 2019 21:42:14 -0400 Received: from mail-lf1-f65.google.com ([209.85.167.65]:46328 "EHLO mail-lf1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726453AbfFXBmO (ORCPT ); Sun, 23 Jun 2019 21:42:14 -0400 Received: by mail-lf1-f65.google.com with SMTP id z15so8703075lfh.13; Sun, 23 Jun 2019 18:42:12 -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=MIhByliPUZqKEV+ccmmIqHNl1GcApYUdE2mUQ8FYMHU=; b=mW5mbLVFEYFVu5tGaCTMS7E1JTJsIMI3IyTPm/d/TNT2vGZ16gb4QlXclgr7eqBIOx rW2i+3VPnZGuRWkVukvVc3nlHi8sJ4MqGav3TW7UW5yhpv6S+X5kqWH3GJu9UK5tT3/c 8KYMn8/84z0zzEQ2/VwKs4Z8DBV5GdAFS3Z3v6Kbzu70xn6sA1GTdZ+3XhaU6PKLySet yhoBoLw6LvBHpzaQGfVnhvfkgJffa9+NnZegixgh64J5Fk2wyZTPft7xxXpf0/7xz0bX RLL7x22jfsSR6oYxB+veoIX251WneidKAALXnQ+tGDBrbDc95SMZsqfQIdYI8wdwzIz+ e/8A== 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=MIhByliPUZqKEV+ccmmIqHNl1GcApYUdE2mUQ8FYMHU=; b=A23Zlac95N4YiU3MeXSZddH3LrBsfkklPezqbT1QeL0qD/bbvOX4SndnAVyHW+lTDr 6Gm0H5nF4oMTjPJcDvA9RLbqRwj3WZNzE2FS+LC9Mdq7PBKvj2GBkNjpIcpfd6zcbVkg QSn9ip5GyLb4UNjUVucwESCx9IeX/8YEDIao4+dybpMasQj7J1fsIuMHGAIioYY9uW9e 1oqhOhXZIB84SQeeiPBERKldB8qIzHy8DZoDioV8KbVgtD/7uxZKMH3NvuROTuEGpvYg NNwaL/5wQeTjVPlB0xyn+nB/VxGIhyW1AqMNvcJVUUZ5FYrMUb+or6ZA4R9fi2FG0Ji4 iLdQ== X-Gm-Message-State: APjAAAVJdnSGGjUdAG3U2YkA+G8xUuiFKOxkrvgytGDE50A3bBe6uglU htW6bX+3phxP+jbiYgnBYpDCBLnA X-Google-Smtp-Source: APXvYqyPvAr7gNVBaEEV2vjpR8MeGHeI080ygDMK72Ba030tMSyRVcQ4+ujSFRagVoa//VPqWkGrBw== X-Received: by 2002:a19:a550:: with SMTP id o77mr20745789lfe.81.1561326525960; Sun, 23 Jun 2019 14:48:45 -0700 (PDT) Received: from localhost.localdomain (ppp91-79-162-197.pppoe.mtu-net.ru. [91.79.162.197]) by smtp.gmail.com with ESMTPSA id m17sm1460029lfb.9.2019.06.23.14.48.45 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 23 Jun 2019 14:48:45 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Jonathan Hunter , Tomeu Vizoso Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 11/11] PM / devfreq: tegra30: Add Dmitry as maintainer Date: Mon, 24 Jun 2019 00:46:58 +0300 Message-Id: <20190623214658.11680-12-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190623214658.11680-1-digetx@gmail.com> References: <20190623214658.11680-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 I was contributing to the NVIDIA Tegra30+ devfreq driver recently and want to help keep it working and evolving in the future. Signed-off-by: Dmitry Osipenko --- MAINTAINERS | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 6c203278700f..ac347278f1fc 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -10214,6 +10214,14 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/mzx/devfreq.git S: Maintained F: drivers/devfreq/tegra20-devfreq.c +MEMORY FREQUENCY SCALING DRIVER FOR NVIDIA TEGRA30-TEGRA210 +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/tegra30-devfreq.c + MEMORY MANAGEMENT L: linux-mm@kvack.org W: http://www.linux-mm.org