From patchwork Sun Jul 7 22:32:40 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11034389 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 9AEB114C0 for ; Sun, 7 Jul 2019 22:36:54 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8A3162823E for ; Sun, 7 Jul 2019 22:36:54 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7EC6028249; Sun, 7 Jul 2019 22:36:54 +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 0089A281DB for ; Sun, 7 Jul 2019 22:36:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727888AbfGGWfG (ORCPT ); Sun, 7 Jul 2019 18:35:06 -0400 Received: from mail-qk1-f194.google.com ([209.85.222.194]:42172 "EHLO mail-qk1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727820AbfGGWfG (ORCPT ); Sun, 7 Jul 2019 18:35:06 -0400 Received: by mail-qk1-f194.google.com with SMTP id 201so9736274qkm.9; Sun, 07 Jul 2019 15:35: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=1GRslL4EnHGZP4FEUc01VEaloEpJ+EJtnU0AoEc0Vkg=; b=Dq658kTnH+bJmzzKQebxCm6H/b9auU3+xHq6E4Vyg8NWPr8ZkjuE/DSv89Xa+tBDPI fp/KIMEdyPRsjy/+/cCpv79CWzJAjx2eIRmK3P+H/suzHPe8IBYx0NsPvnyo88u/2+bC Vdi6wxkkuJShGaPt/Oy9/O+ycJECF4F2W58NKn9cJumIzij5uYTQBWkghBId/7q9VYL2 3mAYBPoPFcznzz4cvASpU2WK4XBr5lBJWIrZU+S2RJqX0EykEIlR6q8olEk9UcBBpr1M MQcwjFX7FOzwld2aOgSz2QOH61l6Ih4N97WY90JGRIzreDIvld8PRX+wdvacOOGxQHrT DiWQ== 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=1GRslL4EnHGZP4FEUc01VEaloEpJ+EJtnU0AoEc0Vkg=; b=ChkDmOXCju1B927M8iVGHQ+vviFD3LzT03AiRC3nq88N5g6Z3h3eqSDKfyHC+EPhIz Qw3Bw5KzJfW3x7Gif1oEYXfFZ7QjCFUKqhvckyqJGefFZbRvLXK1VZ2a6xPcrtt02MyR fksvHXa9K+e8d3BK3LApHaJH3kxBuNdjH933x8AgUD9VnIuC+fVbtVhFUFYLX8Mf9PWr L7zylNQ2ElAtiVjFTb3kqkmhCBcDrFyhBbXcBtjW5ZUxIsip7uQ1ukJKNZ7AJwqIawHT 3tHG87Y7TgNaYRJ0kbyzgbuQzP+E5A3eywKsjD9pj9o3UO/Rczia11SFXt0xTK+xM0Nh //Xw== X-Gm-Message-State: APjAAAVcXKq12saoHucXiqDH6CS8Zs0QIRXJ2TSv9MM+T8Oe6u+prdtk JclGnte5Sli0DiIXQqQM/Jc= X-Google-Smtp-Source: APXvYqz76uLnxjafUBM8ZO38/c1vs0QZRfmgCmsQBNAxgX+a9o7Rr/QQXuIrld/Vmigs4TG7ehRvkw== X-Received: by 2002:a37:a94:: with SMTP id 142mr10923891qkk.89.1562538904833; Sun, 07 Jul 2019 15:35:04 -0700 (PDT) Received: from localhost.localdomain (ppp79-139-233-208.pppoe.spdop.ru. [79.139.233.208]) by smtp.gmail.com with ESMTPSA id p4sm6998453qkb.84.2019.07.07.15.35.02 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 07 Jul 2019 15:35:04 -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 v4 01/24] PM / devfreq: tegra30: Change irq type to unsigned int Date: Mon, 8 Jul 2019 01:32:40 +0300 Message-Id: <20190707223303.6755-2-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190707223303.6755-1-digetx@gmail.com> References: <20190707223303.6755-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 Acked-by: MyungJoo Ham Signed-off-by: Dmitry Osipenko Reviewed-by: Chanwoo Choi --- 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 Jul 7 22:32:41 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11034387 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 29AC0138D for ; Sun, 7 Jul 2019 22:36:53 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 19E6D281DB for ; Sun, 7 Jul 2019 22:36:53 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0E0B628249; Sun, 7 Jul 2019 22:36: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 9C25F281DB for ; Sun, 7 Jul 2019 22:36:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727925AbfGGWfI (ORCPT ); Sun, 7 Jul 2019 18:35:08 -0400 Received: from mail-qk1-f195.google.com ([209.85.222.195]:42176 "EHLO mail-qk1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727820AbfGGWfI (ORCPT ); Sun, 7 Jul 2019 18:35:08 -0400 Received: by mail-qk1-f195.google.com with SMTP id 201so9736335qkm.9; Sun, 07 Jul 2019 15:35:07 -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=12VJs13OPjF9DGDUp85PAmf8xnTp6sUbGcgLhNyWjKk=; b=H4tohP6G1QNw/WjZ9idhiG2O2oPpbuKQvEZZ3eZ7e0vG1bkcD9FoFavETEys4Ph/z4 ppKiZJfsIepTR+O1dF3KFDFgbLBN4AGEipOmA0RQQXbUU0wwG7/OH1t8tRXaHqb8Cgsi HNLJ8nw9I6yKXwg9JptVEko1P1KvbThdV84ur3CO1P4vXhGXu2MdzyJechX8vaoxkQqL Pn+Vmiq8+quIb4ARQZke1nif5vxePivaQLMRCddfAzTbHV0i1yrga426jIXx/xTFZjX3 sd9iYL5gUCJAGgOcnZ8ugLsh4mgGuGWntiWGQ8hLinuu3cfSknLqaZEVRjmRDJjLA9KA QTtA== 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=12VJs13OPjF9DGDUp85PAmf8xnTp6sUbGcgLhNyWjKk=; b=lU9eiX6QkgZbIw6sxYXfKie6w7M0/2ALCP1qwFYIbDzkhFlXjsI7KqwtB8+3D+u9li jeALYKfVRoGXoxIw9laRKtJTiTXqWfoFrWUh8/mR20u+D1z8mcXyMpRxpy6DQaPJSk1m wL/CLhduu0KlgXDHIQGACwRx6qxEa/lu7D51UzFaqeqc3mHRxl9DEinPTVs7WVBX0Pru YiSUzEe5p6NPpAnxWsGTRg2RkKRkPgKouAZ60LR4W1dX4iF5rEL9sFuIZzGmZJrQMbdN mAHM4EoQNKbGMUKdckWDxNnMQVY7ePhSFC2vPS7j1iXZSxvWPJNA8WF/5uMNQzYRE1aN 7Ehg== X-Gm-Message-State: APjAAAV0WwaeoXpk+yzmWdlsHsHQ2l34hjsRxo8vnBOM6GeIDeJGOMax vmc14DaJJYf4ChLjCrGu2u0= X-Google-Smtp-Source: APXvYqw6eMmwwP/w/3GxGhcKKtV81ByIY9T4odzqpLaNWtvEw/XiUogLnfiUkIR4nu9rGZCozQZ1uw== X-Received: by 2002:a37:a892:: with SMTP id r140mr11241188qke.435.1562538906999; Sun, 07 Jul 2019 15:35:06 -0700 (PDT) Received: from localhost.localdomain (ppp79-139-233-208.pppoe.spdop.ru. [79.139.233.208]) by smtp.gmail.com with ESMTPSA id p4sm6998453qkb.84.2019.07.07.15.35.04 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 07 Jul 2019 15:35:06 -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 v4 02/24] PM / devfreq: tegra30: Keep interrupt disabled while governor is stopped Date: Mon, 8 Jul 2019 01:32:41 +0300 Message-Id: <20190707223303.6755-3-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190707223303.6755-1-digetx@gmail.com> References: <20190707223303.6755-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 while governor is inactive. 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 Jul 7 22:32:42 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11034385 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 3689814C0 for ; Sun, 7 Jul 2019 22:36:51 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 265B0281DB for ; Sun, 7 Jul 2019 22:36:51 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1AB4128249; Sun, 7 Jul 2019 22:36:51 +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 BEFA9281DB for ; Sun, 7 Jul 2019 22:36:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727959AbfGGWfL (ORCPT ); Sun, 7 Jul 2019 18:35:11 -0400 Received: from mail-qt1-f195.google.com ([209.85.160.195]:41179 "EHLO mail-qt1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727958AbfGGWfK (ORCPT ); Sun, 7 Jul 2019 18:35:10 -0400 Received: by mail-qt1-f195.google.com with SMTP id d17so14851054qtj.8; Sun, 07 Jul 2019 15:35:09 -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=czl8I5gKhvk++0w3bldmz2Eq/vwY8HztKcv8wW9FTnbwxNtiFcizqR82uXjUTfqlig +hQtXM8L0mCju6DNcI/nfEkNCfsSWIzSH7VI3cu8qa6LogDH7i/gQyXYam/MADIfzVPh hajAw6LKCUZj3xO3UurFlAAehcWucTx2rjF3uTbHr4uCkbvpkGQarQpNfRaoP52bnEru GYrZURTCotI9k9Foq77QAXKcNdZ43d5d0duio1vD5uUVtOrVXIMqb2qVYAwlRKhYds8X mbqJMqc2p5RIZr9anaFAUH3b029UwsqrOgcW+ZbLpe9KxBfkkxdaH4AUotf7iDed8cVp hDlQ== 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=pZVRXgxqeZSKu7d0YuUFqVz0+LgtZxK48MMfn9YYcNDhsiL58hMMvzgtCTFn9SzxS9 okJTfEaEYll6jRDof/vVFkQahrU3twGBM+H3vZDf6MEXi4kydBFTFPq3MQy2TEVIRZe5 Sdc1xOd1Zrt9L3pLeKMKdcoA5hcOgzWOJXgyWZYeBAQjdZeDQyxzalGE6vXxBbKp6kBq 8lLwXv2adrGENSfTRr/POYYYKiOAWHur+6xqdeKM8C52G6WRQbpncdvzBVOVJDMPmtvK b3uexafWaVJvFCFbiRwk+WxVWVAeHtFCAlgikqVsrnNBD1n+W7NwuvkEfZAdbecu5fiM Roig== X-Gm-Message-State: APjAAAU6ZaYMJNVheF5NC2L5SId1n8jM/92frXvjL4eL1jpg4v2ZmfPM LfAk1op56pPD5nySddrLbZI= X-Google-Smtp-Source: APXvYqwlHqqL6FMXYIr2G3oyRdB0MjQ5KfEpKQYzgJhaNraQ8mJW6QYclTmjH6f/+dLaBVRN0AVKPw== X-Received: by 2002:ac8:26e3:: with SMTP id 32mr8646003qtp.79.1562538909214; Sun, 07 Jul 2019 15:35:09 -0700 (PDT) Received: from localhost.localdomain (ppp79-139-233-208.pppoe.spdop.ru. [79.139.233.208]) by smtp.gmail.com with ESMTPSA id p4sm6998453qkb.84.2019.07.07.15.35.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 07 Jul 2019 15:35:08 -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 v4 03/24] PM / devfreq: tegra30: Handle possible round-rate error Date: Mon, 8 Jul 2019 01:32:42 +0300 Message-Id: <20190707223303.6755-4-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190707223303.6755-1-digetx@gmail.com> References: <20190707223303.6755-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 Jul 7 22:32:43 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11034383 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 1348E14C0 for ; Sun, 7 Jul 2019 22:36:50 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 03AF2281DB for ; Sun, 7 Jul 2019 22:36:50 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id EBBBF28249; Sun, 7 Jul 2019 22:36:49 +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 97328281DB for ; Sun, 7 Jul 2019 22:36:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727990AbfGGWfM (ORCPT ); Sun, 7 Jul 2019 18:35:12 -0400 Received: from mail-qk1-f195.google.com ([209.85.222.195]:40210 "EHLO mail-qk1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727976AbfGGWfM (ORCPT ); Sun, 7 Jul 2019 18:35:12 -0400 Received: by mail-qk1-f195.google.com with SMTP id s145so8308417qke.7; Sun, 07 Jul 2019 15:35: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=d/7wNA8MAMSp7e/mZW/Vod5RtNn1ZWLvCZTV21PmCFE=; b=Mgz75SUj6Os/EudqOEC/oBAyqgfTPVMfyIE8oEG4TWJBd5pvPJE3GL4gOQM7cBgb9B 96QNKDj0hnltu1thjc9e1Br0BoujHjk1jfNLsFU5nKYetCLKuSYJOryiNnZ+66gEcBlF euRgHUu4jp3b21iDErEgsvhQ67mbuEiXST7Nkuw5tUqGG8WiVU/730iqxSqVunfPTdfb HptiByBY61179gR2xu278m/T7OBqGrdeTV41aL2GgjXTAJuyeaPmNsF9cu2tAmWJSmTq t9GpOsXQH0cBB4k51/lBxo8+iTWTZ3kFVk+GzpQHO7puzHLUwCIkUZWU55trWy9iXr2W ufsw== 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=Y0YbP8MI7FDFn/gJUv7YJiuCfS7letkyk7Ry4FCPkKJjOkeWJRsyptI4B3HQlpK9mc xI+Q/MJQ14qZ9Uss0LHiJuZplLtuwMFAbQ9LlHu29kTBrczIg0rRE0B3n7OIklQPtz0C DJPSL9ntqDcj9Y7uMTt2ghyyp6kerYqC4RwsIUbKRwJ16f9TqygIyDkR181JRvWEHu5O pEorMcbphJT1Z+px190oDoWVwJGUYw8DpixBwwDgpUSNsxddUiHLLhWD2dsPAMjGcTSX Ohx+filllSofyfB4bA/azbR7QK94A4CSHiLX88x0DEPxnF/SPadS/WxZOmfOZYxc6s6S rxhQ== X-Gm-Message-State: APjAAAU53B3Ey1gFLDGKw/yWJE2HEjwcdF9c8Zrq3IGywl6fQspL/it/ WJON9g5gz908CLGvzclK7Yg= X-Google-Smtp-Source: APXvYqwbavblSKuBFepupufoL+W7UvW2ZudBlD3FBiTWI2yAVYZ4gZRloa7pqqy/f72aOMYldgEVbw== X-Received: by 2002:a37:91c2:: with SMTP id t185mr11750419qkd.193.1562538911388; Sun, 07 Jul 2019 15:35:11 -0700 (PDT) Received: from localhost.localdomain (ppp79-139-233-208.pppoe.spdop.ru. [79.139.233.208]) by smtp.gmail.com with ESMTPSA id p4sm6998453qkb.84.2019.07.07.15.35.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 07 Jul 2019 15:35:11 -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 v4 04/24] PM / devfreq: tegra30: Drop write-barrier Date: Mon, 8 Jul 2019 01:32:43 +0300 Message-Id: <20190707223303.6755-5-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190707223303.6755-1-digetx@gmail.com> References: <20190707223303.6755-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 Reviewed-by: Chanwoo Choi --- 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 Jul 7 22:32:44 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11034381 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 F1FBA14DB for ; Sun, 7 Jul 2019 22:36:44 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E09DA281DB for ; Sun, 7 Jul 2019 22:36:44 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D4BD328249; Sun, 7 Jul 2019 22:36: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 BD752281DB for ; Sun, 7 Jul 2019 22:36:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727976AbfGGWfP (ORCPT ); Sun, 7 Jul 2019 18:35:15 -0400 Received: from mail-qk1-f195.google.com ([209.85.222.195]:37748 "EHLO mail-qk1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728026AbfGGWfP (ORCPT ); Sun, 7 Jul 2019 18:35:15 -0400 Received: by mail-qk1-f195.google.com with SMTP id d15so11882851qkl.4; Sun, 07 Jul 2019 15:35:14 -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=RWaKWiwTp16uNl3jKSsZwUt7LQlKSwdw8J/YvJD0EMw=; b=EyxvXNmhRXjzCUdgGTPJyosTpfCQqfNnDCDsFp0alZ54Z7Ulh0/GJZ14jvlXFgiodC XZ4qWoo7QGX2xnZMQLdaiFUSzDkPQD7kJnhOVJZK+y0wPdPqvgPnCA/oxpud74Vp0BoE g2GdjpRWyKwXFkEZO1n1YDXEzqeNBTTFsSUnLhxXehxdnZkIxHty6Nkh3NFWw9U41gy3 H/6Gc5y9Cq0CROKbMI5j8LTEStazjYY3Qn46bj6/ujPcDdrv1Hppq9nkFCUX5r/lDt9k tVySfx0H4w2KexTE0H1mhbVr2dcY4+7EQov4biVZNYwMjYkwatLRgGNbU4WjibWrgQSc sh6Q== 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=RWaKWiwTp16uNl3jKSsZwUt7LQlKSwdw8J/YvJD0EMw=; b=sYikOYR0Yl9zh3Y6z+pGFgjIq5jykmPo5vUJy62iu1bu7kdfJQPHVfxAMilyWybulz 8lXLU3wDXEa0U49mEaOqtL83XtveSaYhIKuSDKJwOR0vGIbkjDw8wiDjm6pUJf6nAE/2 3ykqCOuhLiUmh691hB3L9wsGKQtCMA6q7u+1eHdN7PXh9Fk7LzcvmRsoTo2v49ee8eOY fSNx3bVFUbjQoPqSVha4lxzlpTRCdK87TYVWCOjmKzSUJdRigbS9dojq15HWLcf6t/Ef r+E1MokZsXoBUVvHQcRN1ArjeNFa1M7Asnx6tfR+LL5Ip5FMUHy/nlKiZ5lcDCItcmwr /wCg== X-Gm-Message-State: APjAAAXBVet8YDl4GTN6X2DiFmYtcVjujQYWkKklAFYAnvzosjg39ba6 6tU1qk/ewMswdYjCj98Sbv4= X-Google-Smtp-Source: APXvYqxPTjF3nIbJ85Fncm/OOJqni51npQAniJA79rgiVSFbIm5NB1zUreUtd+1cXuCoKTqA+RT07w== X-Received: by 2002:ae9:e64d:: with SMTP id x13mr11142407qkl.445.1562538913740; Sun, 07 Jul 2019 15:35:13 -0700 (PDT) Received: from localhost.localdomain (ppp79-139-233-208.pppoe.spdop.ru. [79.139.233.208]) by smtp.gmail.com with ESMTPSA id p4sm6998453qkb.84.2019.07.07.15.35.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 07 Jul 2019 15:35:13 -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 v4 05/24] PM / devfreq: tegra30: Set up watermarks properly Date: Mon, 8 Jul 2019 01:32:44 +0300 Message-Id: <20190707223303.6755-6-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190707223303.6755-1-digetx@gmail.com> References: <20190707223303.6755-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. 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. Since watermarks are set precisely correct now, the boosting logic is changed a tad to accommodate the change. The "average sustain coefficient" multiplier is gone now since there is no need to compensate the improper watermarks and EMC frequency-bump happens once boosting hits the upper watermark enough times, depending on the per-device boosting threshold. Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra30-devfreq.c | 293 +++++++++++++++++++++--------- 1 file changed, 209 insertions(+), 84 deletions(-) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index 4be7858c33bc..16f7e6cf3b99 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -47,6 +47,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 +65,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 +143,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 +154,6 @@ struct tegra_devfreq { struct clk *emc_clock; unsigned long max_freq; - unsigned long cur_freq; struct notifier_block rate_change_nb; struct tegra_devfreq_device devices[ARRAY_SIZE(actmon_device_configs)]; @@ -205,42 +202,182 @@ 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 static_cpu_emc_freq; + + if (dev->config->avg_dependency_threshold && + dev->config->avg_dependency_threshold < dev->avg_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 target_freq, + unsigned long *lower, + unsigned long *upper) +{ + /* + * 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); + + /* watermarks are set at the borders of the corresponding OPPs */ + *lower = tegra_actmon_lower_freq(tegra, target_freq); + *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); + + *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 lower, upper, freq; - device_writel(dev, avg + band, ACTMON_DEV_AVG_UPPER_WMARK); + freq = dev->avg_count / ACTMON_SAMPLING_PERIOD * KHZ; + tegra_actmon_get_lower_upper(tegra, dev, freq, &lower, &upper); - avg = max(dev->avg_count, band); - device_writel(dev, avg - band, ACTMON_DEV_AVG_LOWER_WMARK); + /* + * We want to get interrupts when MCCPU client crosses the + * dependency threshold in order to take into / out of account + * the CPU's freq. + */ + if (lower < dev->config->avg_dependency_threshold && + upper > dev->config->avg_dependency_threshold) { + if (dev->avg_count < dev->config->avg_dependency_threshold) + upper = dev->config->avg_dependency_threshold; + else + lower = dev->config->avg_dependency_threshold; + } + + 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) + struct tegra_devfreq_device *dev, + unsigned long freq) { - u32 val = tegra->cur_freq * ACTMON_SAMPLING_PERIOD; + unsigned long lower, upper, delta; + + /* + * Boosting logic kicks-in once lower / upper watermark is hit. + * The watermarks are based on the updated EMC rate and the + * average activity. + * + * The higher watermark is set in accordance to the EMC rate + * because we want to set it to the highest mark here and EMC rate + * represents that mark. The consecutive-upper interrupts are + * always enabled and we don't want to receive them if they won't + * do anything useful, hence the upper watermark is capped to maximum. + * Note that the EMC rate is changed once boosting pushed the rate + * too high, in that case boosting-up will be stopped because + * upper watermark is much higher now and it is *important* to + * stop the unwanted interrupts. + */ + tegra_actmon_get_lower_upper(tegra, dev, freq - 1, &lower, &upper); + + delta = do_percent(upper - lower, dev->config->boost_up_threshold); + device_writel(dev, lower + delta, ACTMON_DEV_UPPER_WMARK); - device_writel(dev, do_percent(val, dev->config->boost_up_threshold), - ACTMON_DEV_UPPER_WMARK); + /* + * Meanwhile the lower mark is based on the average value + * because it is the lowest possible consecutive-mark for this + * device. Once that mark is hit and boosting is stopped, the + * interrupt is disabled by ISR. + */ + freq = dev->avg_count / ACTMON_SAMPLING_PERIOD * KHZ; + tegra_actmon_get_lower_upper(tegra, dev, freq, &lower, &upper); - device_writel(dev, do_percent(val, dev->config->boost_down_threshold), - ACTMON_DEV_LOWER_WMARK); + delta = do_percent(upper - lower, dev->config->boost_down_threshold); + device_writel(dev, lower + delta, ACTMON_DEV_LOWER_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; 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); + if (intr_status & ACTMON_DEV_INTR_CONSECUTIVE_UPPER) { /* * new_boost = min(old_boost * up_coef + step, max_freq) @@ -253,8 +390,6 @@ static void actmon_isr_device(struct tegra_devfreq *tegra, if (dev->boost_freq >= tegra->max_freq) dev->boost_freq = tegra->max_freq; - else - dev_ctrl |= ACTMON_DEV_CTRL_CONSECUTIVE_ABOVE_WMARK_EN; } else if (intr_status & ACTMON_DEV_INTR_CONSECUTIVE_LOWER) { /* * new_boost = old_boost * down_coef @@ -263,63 +398,37 @@ 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; + if (intr_status & avg_intr_mask) { + /* + * Once average watermark is hit, it means that the memory + * activity changed significantly and thus boosting-up shall + * be reset because EMC clock rate will be changed and + * boosting will restart in this case. + */ + dev->boost_freq = 0; } - device_writel(dev, dev_ctrl, ACTMON_DEV_CTRL); + /* 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); } -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 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; + target_freq = dev->avg_count / ACTMON_SAMPLING_PERIOD + dev->boost_freq; + target_freq = tegra_actmon_account_cpu_freq(tegra, dev, target_freq); - if (dev->avg_count >= dev->config->avg_dependency_threshold) - dev->target_freq = max(dev->target_freq, static_cpu_emc_freq); + return target_freq; } static irqreturn_t actmon_thread_isr(int irq, void *data) @@ -351,8 +460,8 @@ 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; + struct tegra_devfreq *tegra; unsigned int i; if (action != POST_RATE_CHANGE) @@ -360,12 +469,28 @@ static int tegra_actmon_rate_notify_cb(struct notifier_block *nb, tegra = container_of(nb, struct tegra_devfreq, rate_change_nb); - tegra->cur_freq = data->new_rate / KHZ; - + /* + * EMC rate could change due to three reasons: + * + * 1. Average watermark hit + * 2. Boosting overflow + * 3. CPU freq change + * + * Once rate is changed, the consecutive watermarks need to be + * updated in order for boosting to work properly and to avoid + * unnecessary interrupts. Note that the consecutive range is set for + * all of devices using the same rate, hence if CPU is doing much + * less than the other memory clients, then its upper watermark will + * be very high in comparison to the actual activity (lower watermark) + * and thus unnecessary upper-interrupts will be suppressed. + * + * The average watermarks also should be updated because of 3. + */ for (i = 0; i < ARRAY_SIZE(tegra->devices); i++) { dev = &tegra->devices[i]; - tegra_devfreq_update_wmark(tegra, dev); + tegra_devfreq_update_avg_wmark(tegra, dev); + tegra_devfreq_update_wmark(tegra, dev, data->new_rate); } return NOTIFY_OK; @@ -374,15 +499,14 @@ 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); - tegra_devfreq_update_wmark(tegra, dev); + tegra_devfreq_update_wmark(tegra, dev, target_freq); device_writel(dev, ACTMON_COUNT_WEIGHT, ACTMON_DEV_COUNT_WEIGHT); device_writel(dev, ACTMON_INTR_STATUS_CLEAR, ACTMON_DEV_INTR_STATUS); @@ -469,13 +593,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 +610,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 +629,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 +645,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; @@ -642,7 +767,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,7 +795,8 @@ 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); + err = clk_notifier_register(tegra->emc_clock, + &tegra->rate_change_nb); if (err) { dev_err(&pdev->dev, "Failed to register rate change notifier\n"); From patchwork Sun Jul 7 22:32:45 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11034379 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 9933A138D for ; Sun, 7 Jul 2019 22:36:44 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8A2B22823E for ; Sun, 7 Jul 2019 22:36:44 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7E82628305; Sun, 7 Jul 2019 22:36: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 2EAAA2823E for ; Sun, 7 Jul 2019 22:36:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727860AbfGGWgn (ORCPT ); Sun, 7 Jul 2019 18:36:43 -0400 Received: from mail-qt1-f196.google.com ([209.85.160.196]:34869 "EHLO mail-qt1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728043AbfGGWfR (ORCPT ); Sun, 7 Jul 2019 18:35:17 -0400 Received: by mail-qt1-f196.google.com with SMTP id d23so16300732qto.2; Sun, 07 Jul 2019 15:35:16 -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=3N4+CnGw3uZRT26u6KujNlQMivpwesG5iBfNg5ReVc0=; b=Z0b8a1DzdUogow88YGmv2m1TPJjQNaorzeuy7WwmS22LKu/m3PfpMAomKInpcE+QEQ LhB/58nxQfosQ9c+4MyNfa9lafEDbgr14m50xhWXXvTWScmuSKN/7KafzNUo9lbrIMO6 S5dd1JaTrDIF1R4kEIs0AahAuk7FnVX5Xm58CTZ+r+hZYwkaaRtmRSdRVpaUcOSJGkgK nE6aNAVifPm4gIuxyLVF8V9n3HFeRjfr+Sx2VcROsYSsuEGcaolVYF69bFodEJ6wjxmO QdCbfLNaixmwbfVbtbI/XsjD70faVs3fr4mN47HumePveyEkWEMfVf/OlpgYJcJvXv/z cxxg== 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=3N4+CnGw3uZRT26u6KujNlQMivpwesG5iBfNg5ReVc0=; b=m4jvC/Is+pET6m2YAT8qXT4rvrMCoBMhZgwz74xSjmFNH0VI5wC7hYCRrqKCjzmo0S 1+xf/YlsDf2xpNHzCPa2ioJ3U4ePzhBhzK8wJ06XrzcbNHWi1WPjIMKLZmykI8wS5rm7 ddG0UYufKHAie0UBNLIDnF6X0V7qz3BH3FCGq6EA+A0YICjN9a+AJn+3VG5OSA+MqK1V Mqgz3B3gxG0YNzurhp2IAwwUf2b9cu/FEFqOk0BxrsWu8uBjRtZQX+jMXbBVvePsoDlp z6v0y954JbiFPl5RgledRypPgtUDmxy4s0uPFrOXFsD/7QRgPtMlBxqW/6yVozq1udoX aUJQ== X-Gm-Message-State: APjAAAVBPMEL0DQnJs1ARZAwiTXnxCvEmLIt0+5duArrHK9q73sEjiwY OH/5qS8VVpfBbf0lcWexBj0= X-Google-Smtp-Source: APXvYqykxghm2VzyjKrVM/CfIz/Y5pXnpTCd96dFGiqreY2m7zas+kaWtCMp7cVjlOPkwqntZj3m8Q== X-Received: by 2002:ac8:450e:: with SMTP id q14mr8746094qtn.132.1562538915896; Sun, 07 Jul 2019 15:35:15 -0700 (PDT) Received: from localhost.localdomain (ppp79-139-233-208.pppoe.spdop.ru. [79.139.233.208]) by smtp.gmail.com with ESMTPSA id p4sm6998453qkb.84.2019.07.07.15.35.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 07 Jul 2019 15:35:15 -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 v4 06/24] PM / devfreq: tegra30: Tune up boosting thresholds Date: Mon, 8 Jul 2019 01:32:45 +0300 Message-Id: <20190707223303.6755-7-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190707223303.6755-1-digetx@gmail.com> References: <20190707223303.6755-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 Now that average-sustain coefficient / multiplier is gone, it won't hurt to re-tune the boosting thresholds to get a bit harder boosting for MCALL clients, resulting in a more reactive governing in a case of multimedia applications usage like 3d / video. Signed-off-by: Dmitry Osipenko Reviewed-by: Chanwoo Choi --- drivers/devfreq/tegra30-devfreq.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index 16f7e6cf3b99..2bf65409ddd8 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -111,8 +111,8 @@ static struct tegra_devfreq_device_config actmon_device_configs[] = { .irq_mask = 1 << 26, .boost_up_coeff = 200, .boost_down_coeff = 50, - .boost_up_threshold = 60, - .boost_down_threshold = 40, + .boost_up_threshold = 50, + .boost_down_threshold = 25, }, { /* MCCPU: memory accesses from the CPUs */ From patchwork Sun Jul 7 22:32:46 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11034343 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 17BFF14C0 for ; Sun, 7 Jul 2019 22:35:22 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E65232793A for ; Sun, 7 Jul 2019 22:35:21 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D378D28249; Sun, 7 Jul 2019 22:35: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 36C9D2793A for ; Sun, 7 Jul 2019 22:35:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728026AbfGGWfT (ORCPT ); Sun, 7 Jul 2019 18:35:19 -0400 Received: from mail-qk1-f193.google.com ([209.85.222.193]:45771 "EHLO mail-qk1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728068AbfGGWfT (ORCPT ); Sun, 7 Jul 2019 18:35:19 -0400 Received: by mail-qk1-f193.google.com with SMTP id s22so11844875qkj.12; Sun, 07 Jul 2019 15:35:18 -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=0e7rvBkRZtsgKkmjKUB6YCiStdbbh2Mug1KxsKGWUgI=; b=G74u2+9J4ZGb8115Z7GXCQByUUxxOuppXYOLSfGsjLAbEBA3F4U4IZkQkjMCmFU4IW KFtGX1OFJ21KPQjysRppJulgVBHtxo0WQMScvci2+1Bh0o0S6ptF8mPB3Oa8s2btI3LC UZ4LNkV8HGy6SziVLoGHuOd6EvExfvfdTPZCCYQMfeV9a9g78kPD8m7k4/999F9KLE5t pO0zV9GppIH/jJOskTeX2h/UazYw+hMJDHE5SpNkvdWK1gHFmD3lLM9x/xRJKGUSbDMG rc3mjYVKPv3lZRebyKO0MVT/BcBhikovaFkO8V0qXvh9AP0roeF93cgBzIUXdinSbOT8 YxIg== 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=0e7rvBkRZtsgKkmjKUB6YCiStdbbh2Mug1KxsKGWUgI=; b=cvSZYC/qC3w2jRweDKaP+WXt6GBdEWAl2hCF7b8NBY7TN2kBI0jM1E+4bZHD/Kot07 vtZgC6AVmoX3xEaEw13wggS40wNnCmElhdMcl/8nEuhxt/xHqbiqIoUb8qpPzQ7cNKfO aQE5dhXHtCm3w0XSt8gXNSD+/fJNFEXo5mvTgEW6kh0dn+QHGQ4PwfT7P5Tf7ADJikDL IwM1cHLLFw8nxnbuLBOhpwsauYzFVSa3O+h4OAaUZ2NdHPatBe1p+GLTlcMtyx5sizeJ h+MJ3M5WjQH6aYdx3A9Cmm0z5OiHvrozJB1Uv3uGSjW0Cv4LmOLnCP/6j7MjnIs0VO1B IpZg== X-Gm-Message-State: APjAAAWq5VA03fJcTdYY9cwQMoq2oqGSeX6l6gp36MjrCvAwwQPkrXMW ULR8nhlWtFV3RRCTfB4ihb4= X-Google-Smtp-Source: APXvYqw62o5FWT+iUe3r3vnNRvwthjiFwTphb3GCGM2SZvz5sLPQubrWqLNH4apJvAzbelChZbFv9w== X-Received: by 2002:a37:6290:: with SMTP id w138mr11218440qkb.139.1562538918044; Sun, 07 Jul 2019 15:35:18 -0700 (PDT) Received: from localhost.localdomain (ppp79-139-233-208.pppoe.spdop.ru. [79.139.233.208]) by smtp.gmail.com with ESMTPSA id p4sm6998453qkb.84.2019.07.07.15.35.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 07 Jul 2019 15:35:17 -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 v4 07/24] PM / devfreq: tegra30: Use CPUFreq notifier Date: Mon, 8 Jul 2019 01:32:46 +0300 Message-Id: <20190707223303.6755-8-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190707223303.6755-1-digetx@gmail.com> References: <20190707223303.6755-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 CPU's client need to take into account that CPUFreq may change while memory activity not, staying high. Thus an appropriate frequency notifier should be used in addition to the clk-notifier. Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra30-devfreq.c | 105 +++++++++++++++++++++++++----- 1 file changed, 88 insertions(+), 17 deletions(-) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index 2bf65409ddd8..48a799fa5f63 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -17,6 +17,7 @@ #include #include #include +#include #include "governor.h" @@ -154,7 +155,10 @@ struct tegra_devfreq { struct clk *emc_clock; unsigned long max_freq; - struct notifier_block rate_change_nb; + struct notifier_block clk_rate_change_nb; + + struct work_struct update_work; + struct notifier_block cpu_rate_change_nb; struct tegra_devfreq_device devices[ARRAY_SIZE(actmon_device_configs)]; @@ -456,8 +460,8 @@ static irqreturn_t actmon_thread_isr(int irq, void *data) return handled ? IRQ_HANDLED : IRQ_NONE; } -static int tegra_actmon_rate_notify_cb(struct notifier_block *nb, - unsigned long action, void *ptr) +static int tegra_actmon_clk_notify_cb(struct notifier_block *nb, + unsigned long action, void *ptr) { struct clk_notifier_data *data = ptr; struct tegra_devfreq_device *dev; @@ -467,7 +471,7 @@ static int tegra_actmon_rate_notify_cb(struct notifier_block *nb, if (action != POST_RATE_CHANGE) return NOTIFY_OK; - tegra = container_of(nb, struct tegra_devfreq, rate_change_nb); + tegra = container_of(nb, struct tegra_devfreq, clk_rate_change_nb); /* * EMC rate could change due to three reasons: @@ -496,6 +500,37 @@ static int tegra_actmon_rate_notify_cb(struct notifier_block *nb, return NOTIFY_OK; } +static void tegra_actmon_delayed_update(struct work_struct *work) +{ + struct tegra_devfreq *tegra = container_of(work, struct tegra_devfreq, + update_work); + + mutex_lock(&tegra->devfreq->lock); + update_devfreq(tegra->devfreq); + mutex_unlock(&tegra->devfreq->lock); +} + +static int tegra_actmon_cpu_notify_cb(struct notifier_block *nb, + unsigned long action, void *ptr) +{ + struct tegra_devfreq *tegra; + + if (action != CPUFREQ_POSTCHANGE) + return NOTIFY_OK; + + tegra = container_of(nb, struct tegra_devfreq, cpu_rate_change_nb); + + /* + * CPUFreq driver should support CPUFREQ_ASYNC_NOTIFICATION in order + * to allow asynchronous notifications. This means we can't block + * here for too long, otherwise CPUFreq's core will complain with a + * warning splat. + */ + schedule_work(&tegra->update_work); + + return NOTIFY_OK; +} + static void tegra_actmon_configure_device(struct tegra_devfreq *tegra, struct tegra_devfreq_device *dev) { @@ -527,9 +562,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); @@ -537,7 +579,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->cpu_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) @@ -546,11 +611,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->cpu_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, @@ -659,6 +726,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 @@ -669,7 +737,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: @@ -684,11 +752,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 = { @@ -794,9 +862,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; + tegra->cpu_rate_change_nb.notifier_call = tegra_actmon_cpu_notify_cb; + INIT_WORK(&tegra->update_work, tegra_actmon_delayed_update); + + tegra->clk_rate_change_nb.notifier_call = tegra_actmon_clk_notify_cb; err = clk_notifier_register(tegra->emc_clock, - &tegra->rate_change_nb); + &tegra->clk_rate_change_nb); if (err) { dev_err(&pdev->dev, "Failed to register rate change notifier\n"); @@ -823,7 +894,7 @@ static int tegra_devfreq_probe(struct platform_device *pdev) devfreq_remove_governor(&tegra_devfreq_governor); unreg_notifier: - clk_notifier_unregister(tegra->emc_clock, &tegra->rate_change_nb); + clk_notifier_unregister(tegra->emc_clock, &tegra->clk_rate_change_nb); remove_opps: dev_pm_opp_remove_all_dynamic(&pdev->dev); @@ -841,7 +912,7 @@ 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); + clk_notifier_unregister(tegra->emc_clock, &tegra->clk_rate_change_nb); dev_pm_opp_remove_all_dynamic(&pdev->dev); reset_control_reset(tegra->reset); From patchwork Sun Jul 7 22:32:47 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11034377 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 842E914DB for ; Sun, 7 Jul 2019 22:36:41 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 74BD3281DB for ; Sun, 7 Jul 2019 22:36:41 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6805328249; Sun, 7 Jul 2019 22:36:41 +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 EC3C7281DB for ; Sun, 7 Jul 2019 22:36:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728109AbfGGWfV (ORCPT ); Sun, 7 Jul 2019 18:35:21 -0400 Received: from mail-qk1-f196.google.com ([209.85.222.196]:37757 "EHLO mail-qk1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728090AbfGGWfV (ORCPT ); Sun, 7 Jul 2019 18:35:21 -0400 Received: by mail-qk1-f196.google.com with SMTP id d15so11883031qkl.4; Sun, 07 Jul 2019 15:35:20 -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=afdqxa+MI/Zw9XC1saAD57FYuQTdjrhBAxQl2lE5kwU=; b=EFEU5R4COaEDjeex0WlKiCc51R3hdmHjEC20GWJCpbDajImycEiX1LMcORx6vGRCL0 HPPWBmEqAxxF6Ocx/ihM/zzmwC2h2srVnSSA1aIcSQv6lzGtAfALHGIp1S5/8LHbZQxx lImteqP48gxV8e8KTWVu1B1t0ikGnXivYS/oy6MqfpCycpPV9mfyQPjs7Ja0daTloK93 nhcEmjs7b6IDC4I8HajdZCunaoXCm58oOEl3fDAKdI4PRuWtbUMrWRIAc3OM7bvVbF4l HNJo9XA+Nxc7sN/i45D3YTY3wGM+iKP5E1wxDdNWSIRDGmmzvVnYe+MLP8kzrmdqglDe Q4YQ== 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=afdqxa+MI/Zw9XC1saAD57FYuQTdjrhBAxQl2lE5kwU=; b=GSQKqqLjjHn9jE2POCN+EWEBll3Jkkyq/vcj7gymgQedsBX91mn8J7TsbukpqtnYy3 MYiirA/dzKKKj8aj8TMOPzhvsW1eIG+bG4ArQmLhrhAy+v/Fp8kX0XU/12eWSCmKcmts EOZjhl1nhlOUWH8DahKTEXwijpzq3OlbsVZ/WQJ12DVEZwyuPRivB0pttwQeltVbZ3L/ x9MkPqPUTDuyUla4Yb7fA+rZeIhul0HC5qpJdBX05zlWExJ9pEbbRRlNnqtNwyJ9Q3A9 V2oc3tVZXcna0YGmuNRsGV968ORZwgMFQN0j7qbiMjr4UjRZAkGVmSe75Uxu46++pIaJ lz1Q== X-Gm-Message-State: APjAAAWgqlklYA3Vah/EpQoErkyS713VhYQhXZW4e5A/+t62vxtvdW2D WPyF5lY/3fD2VKnBoYGU60c= X-Google-Smtp-Source: APXvYqxHp7VhhyzeNDnrQQCZsAcNoKzAF1AriyX55Ijsd0g+arUfu3GNnCuin97MXjhzQOo05K6ARg== X-Received: by 2002:ae9:f209:: with SMTP id m9mr11452571qkg.251.1562538920307; Sun, 07 Jul 2019 15:35:20 -0700 (PDT) Received: from localhost.localdomain (ppp79-139-233-208.pppoe.spdop.ru. [79.139.233.208]) by smtp.gmail.com with ESMTPSA id p4sm6998453qkb.84.2019.07.07.15.35.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 07 Jul 2019 15:35:19 -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 v4 08/24] PM / devfreq: tegra30: Move clk-notifier's registration to governor's start Date: Mon, 8 Jul 2019 01:32:47 +0300 Message-Id: <20190707223303.6755-9-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190707223303.6755-1-digetx@gmail.com> References: <20190707223303.6755-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 point in receiving of the notifications while governor is stopped, let's keep them disabled like we do for the CPU freq-change notifications. This also fixes a potential use-after-free bug if notification happens after device's removal. Signed-off-by: Dmitry Osipenko Reviewed-by: Chanwoo Choi --- drivers/devfreq/tegra30-devfreq.c | 33 ++++++++++++++++++------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index 48a799fa5f63..d5d04c25023b 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -576,6 +576,19 @@ static int tegra_actmon_start(struct tegra_devfreq *tegra) actmon_writel(tegra, ACTMON_SAMPLING_PERIOD - 1, ACTMON_GLB_PERIOD_CTRL); + /* + * CLK notifications are needed in order to reconfigure the upper + * consecutive watermark in accordance to the actual clock rate + * to avoid unnecessary upper interrupts. + */ + err = clk_notifier_register(tegra->emc_clock, + &tegra->clk_rate_change_nb); + if (err) { + dev_err(tegra->devfreq->dev.parent, + "Failed to register rate change notifier\n"); + return err; + } + for (i = 0; i < ARRAY_SIZE(tegra->devices); i++) tegra_actmon_configure_device(tegra, &tegra->devices[i]); @@ -602,6 +615,8 @@ static int tegra_actmon_start(struct tegra_devfreq *tegra) for (i = 0; i < ARRAY_SIZE(tegra->devices); i++) tegra_actmon_stop_device(&tegra->devices[i]); + clk_notifier_unregister(tegra->emc_clock, &tegra->clk_rate_change_nb); + return err; } @@ -618,6 +633,8 @@ static void tegra_actmon_stop(struct tegra_devfreq *tegra) for (i = 0; i < ARRAY_SIZE(tegra->devices); i++) tegra_actmon_stop_device(&tegra->devices[i]); + + clk_notifier_unregister(tegra->emc_clock, &tegra->clk_rate_change_nb); } static int tegra_devfreq_target(struct device *dev, unsigned long *freq, @@ -862,22 +879,14 @@ static int tegra_devfreq_probe(struct platform_device *pdev) platform_set_drvdata(pdev, tegra); + tegra->clk_rate_change_nb.notifier_call = tegra_actmon_clk_notify_cb; tegra->cpu_rate_change_nb.notifier_call = tegra_actmon_cpu_notify_cb; INIT_WORK(&tegra->update_work, tegra_actmon_delayed_update); - tegra->clk_rate_change_nb.notifier_call = tegra_actmon_clk_notify_cb; - err = clk_notifier_register(tegra->emc_clock, - &tegra->clk_rate_change_nb); - if (err) { - dev_err(&pdev->dev, - "Failed to register rate change notifier\n"); - 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; + goto remove_opps; } tegra_devfreq_profile.initial_freq = clk_get_rate(tegra->emc_clock); @@ -893,9 +902,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->clk_rate_change_nb); - remove_opps: dev_pm_opp_remove_all_dynamic(&pdev->dev); @@ -912,7 +918,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->clk_rate_change_nb); dev_pm_opp_remove_all_dynamic(&pdev->dev); reset_control_reset(tegra->reset); From patchwork Sun Jul 7 22:32: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: 11034373 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 8ADAA138D for ; Sun, 7 Jul 2019 22:36:35 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7B13D281DB for ; Sun, 7 Jul 2019 22:36:35 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6EAC428249; Sun, 7 Jul 2019 22:36:35 +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 28640281DB for ; Sun, 7 Jul 2019 22:36:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728151AbfGGWf0 (ORCPT ); Sun, 7 Jul 2019 18:35:26 -0400 Received: from mail-qt1-f194.google.com ([209.85.160.194]:43678 "EHLO mail-qt1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728128AbfGGWfX (ORCPT ); Sun, 7 Jul 2019 18:35:23 -0400 Received: by mail-qt1-f194.google.com with SMTP id w17so13114910qto.10; Sun, 07 Jul 2019 15:35:22 -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=6ICuZeSplUMLkTfqTJvkEHZk7YjPYPX7TJabyKVwwTM=; b=AdeG6WOwwDo6uXUZ4RDPowi0tNJ9inveFi52N/RSm9kywwrbKUHIlikirnrhFvdVF5 LW0iwjolrh04ooyDHSvlOFlkI8Hwmi0NIt31JDIAUClcmsqsc5ueDMKuJKrLSnFg+N/l t1ywdgbgGUc0OJ1HMbvrNGi1KT5ze19bWPEYkgh2Z1I6QRCjoW14utEr95sSp8KPz9Uu DiRRlBT3zw63A1qG9UmuH1PR3FKsD9q3DR71PqzBcRuwgNbBkNxQEb/xXpaw2erANmry QvpbGrv96bk0FrLwPwV6jsz1WDu4+7CPJu0RH3veWJFQarIWzg1gqbF6W09QeiYKYQdA FuDA== 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=6ICuZeSplUMLkTfqTJvkEHZk7YjPYPX7TJabyKVwwTM=; b=HNUwxluurGio3zYeEKS+wSfzONDC+Sz39xowTVLl96fSzMkWJoNApxFHp4IiQAqGEb 9B6ejB+FmwoZevjI03c2+CFbmJSEhn3cj2HIH82Q/cwkgkUzDQ6hQewLtS6icxo136O3 Hp5lZ5d9PyN5aiPAIwrbJoOzk1iOh6H7A6gSfMo7VoW3pN7/fPhv+tjyvpANmG4oJlAr sYbv7aODgtzkCwBN7jr+ct0qzC0Qlrbb6TfKs7EYYaLkXLh+x4li2to/RlEggKbiF5LJ U9j5IvDYhtjO1PpEUKBrd2xMK6aqLJqJqzmMwmFfks8jbfv+J4JY9+Whdh+7XupgENFI +XBQ== X-Gm-Message-State: APjAAAWZVkYAq4inO9mNe/Dn6TGEJnHBWcSmjY4weNlFK20YqKp16k8b 6skFoh9dW08FlUFk5eAOPjI= X-Google-Smtp-Source: APXvYqzz8l2Ogd2j+gAwakywckhxE39XSVdl3U2XwEO9xis9NJ04Pz9CpDwiFyYR+wYCXbxqHFtOnA== X-Received: by 2002:ac8:4a10:: with SMTP id x16mr11644087qtq.282.1562538922478; Sun, 07 Jul 2019 15:35:22 -0700 (PDT) Received: from localhost.localdomain (ppp79-139-233-208.pppoe.spdop.ru. [79.139.233.208]) by smtp.gmail.com with ESMTPSA id p4sm6998453qkb.84.2019.07.07.15.35.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 07 Jul 2019 15:35:22 -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 v4 09/24] PM / devfreq: tegra30: Reset boosting on startup Date: Mon, 8 Jul 2019 01:32:48 +0300 Message-Id: <20190707223303.6755-10-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190707223303.6755-1-digetx@gmail.com> References: <20190707223303.6755-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 Reviewed-by: Chanwoo Choi --- 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 d5d04c25023b..32fe95458ee7 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -536,6 +536,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 Jul 7 22:32: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: 11034375 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 1063014C0 for ; Sun, 7 Jul 2019 22:36:41 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 00F6C2823E for ; Sun, 7 Jul 2019 22:36:41 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E903E28249; Sun, 7 Jul 2019 22:36:40 +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 A148C281DB for ; Sun, 7 Jul 2019 22:36:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727587AbfGGWgf (ORCPT ); Sun, 7 Jul 2019 18:36:35 -0400 Received: from mail-qk1-f196.google.com ([209.85.222.196]:45780 "EHLO mail-qk1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728090AbfGGWfZ (ORCPT ); Sun, 7 Jul 2019 18:35:25 -0400 Received: by mail-qk1-f196.google.com with SMTP id s22so11844995qkj.12; Sun, 07 Jul 2019 15:35:24 -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=Eow1dYYoeoJ54xsm/mKUN81QYFx7NbA89068qq2m7Xg=; b=XRgYyof6EP8K76c++/0kueiahPl68p2Mk2DeCe8oTgkt11a53ivcXbrLTAGUeLE6Xs 2ZihkeVuAprXBTPo7Rvtb8/ZVB9W3YbSxRDTGOQLbHyIGo7W8lZ1KcB9Fwm5Kv9AIeoQ ca5HqIjKqaKiJf5Sixwo221pz0s6QIXnIAvbY+mBnMV2NIzMsvFFk/GJKDUVSzIIfMKT K6tRHiTE2mptsSEriD+bWdPOYpUSy8qlfUl1qzpRM1ASgX9Uytfa0yJfyveTxH3NLifR C/69W2c42f9ceri2LqGS6jZMHYmINSI03VFi4EKf37sIjaYBu8ZfXywNPmyxyP408se4 p9vw== 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=Eow1dYYoeoJ54xsm/mKUN81QYFx7NbA89068qq2m7Xg=; b=JU+eK0GOp7c/wJ4h28yNzrLZO9YI8kBU0yQYhmqDaRJcZxYv1DD+SezLk4H1FM073t LZVx+liVBsPFiHP0S8LY9ARGif3d1G1kGkokaxf3tkJW+jyK8QTeNtM3XHOGDhLtQ58E v1ooLLH3ulLo/lH0OJqkjojV8NdXI/UdRIaW/vThvGNgF+kMmj11xqLqusT0hZ2peEL+ KiG3w2Rbj9PIBeEUi0V7St8yNhapV1PLHuk666DV5+s+WRA62G3dzi4ZZt968WEvfOPu oOe7FdZY/hqbtB94TPUtyX4cofy/bDa9+ovQ63ArBYyvtV1G7lo66OmGuNIwdzcg/Bha xtYw== X-Gm-Message-State: APjAAAUOM3Rd3el7iZ3rcMD+tWXc/Jm9HBoIMjwNIE4HU1UUN+rPa+aQ wpTPJt7u9pMhPzRsSKTwigc= X-Google-Smtp-Source: APXvYqyxIK3rl89DrlYf/JwcY1qeTKWCI6KkyfRW5mfxQKGSaerYcBq3Wu2n5nQlr7wdHBdtOr18zA== X-Received: by 2002:a37:be85:: with SMTP id o127mr12008405qkf.194.1562538924676; Sun, 07 Jul 2019 15:35:24 -0700 (PDT) Received: from localhost.localdomain (ppp79-139-233-208.pppoe.spdop.ru. [79.139.233.208]) by smtp.gmail.com with ESMTPSA id p4sm6998453qkb.84.2019.07.07.15.35.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 07 Jul 2019 15:35:24 -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 v4 10/24] PM / devfreq: tegra30: Don't enable consecutive-down interrupt on startup Date: Mon, 8 Jul 2019 01:32:49 +0300 Message-Id: <20190707223303.6755-11-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190707223303.6755-1-digetx@gmail.com> References: <20190707223303.6755-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 32fe95458ee7..878c9396bb8c 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -558,7 +558,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 Jul 7 22:32: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: 11034371 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 35AB814C0 for ; Sun, 7 Jul 2019 22:36:33 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 249BB281DB for ; Sun, 7 Jul 2019 22:36:33 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 184A928249; Sun, 7 Jul 2019 22:36:33 +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 A4F6A281DB for ; Sun, 7 Jul 2019 22:36:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728128AbfGGWf2 (ORCPT ); Sun, 7 Jul 2019 18:35:28 -0400 Received: from mail-qt1-f196.google.com ([209.85.160.196]:46427 "EHLO mail-qt1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728167AbfGGWf1 (ORCPT ); Sun, 7 Jul 2019 18:35:27 -0400 Received: by mail-qt1-f196.google.com with SMTP id h21so14059827qtn.13; Sun, 07 Jul 2019 15:35: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=GZ96cU5HmVV0tuL41y22oWuoLKod2s58C7+TO/6oSIs=; b=bzCwVILkXkLPQr7G9owqFb/CujCyPJYv83lKqkyFeGOFb93UTssrZogzuaTtQ7zaJN sqlyqP8FGhKgWo9psaXWqXe+Eoil0ewLDkKgYk8kI//zTI59Z7DfSD3RhRWP6iLP0GXt Hm544UmyPLRHnARCmCYupkq6ctTMTgbuFM9ABVlZJ4cSFs5/+SD8jZ271n5RON/Oc9sY GOpZAH1tYeUZZ5/n5Az9RR51cWF4ORrvEGZCBxPt38wiGOcEdQXAI8CItmQA0k3xCxWb 5XtPIlKqzeANGmUgAv6+quuxbMv5orcgsTE02Uy33oPBH9kzq5/nlb9s5D5gspJUEq3S 8rRA== 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=GZ96cU5HmVV0tuL41y22oWuoLKod2s58C7+TO/6oSIs=; b=lmEQ/E+0jZFicPieLBOQOUB1NOc7zG5ahGR/uO5r5jyriTgoUVpeZD+/qykHYyp2xi ETiGOKKSGVxP8+z2n3iKjVf9aEx76G/ZDZOMMuVU+/WdhuFul328qAouSSh3BZkh49Vr bY3I+CuykwImOmarx0lOE4K6RYeNhkw7E7foMt09nVqkpDfNpJJYh2/ZajRMfEehvHGE jGlQhOkd49TAWUC5kys32fHZpyWFU20mLc0kfjH1QYLSRlVQX7JiL+nHfakOIyCH09Of 2Wekup+r+2AqsMIk47Qfs20Qbmq0rp82f5/VPxBgApUXS0FJAY4Gq4BTvkMInkJmpM8s 9Nug== X-Gm-Message-State: APjAAAW6RCUuk2hixCQ/sSkeTmi13ZwiIRGCxa79/pGFNGD2at66Irj7 zhZ7+gv7Ziyv6GMCfs3ao7A= X-Google-Smtp-Source: APXvYqyMQtUrKV07BcXhuvpVU7NrK+8bdE8chNiCIrhqZTbt2gWmtjSYyq8rQIltT3OcJZ1nmTOvhA== X-Received: by 2002:a0c:c68d:: with SMTP id d13mr12403746qvj.145.1562538926823; Sun, 07 Jul 2019 15:35:26 -0700 (PDT) Received: from localhost.localdomain (ppp79-139-233-208.pppoe.spdop.ru. [79.139.233.208]) by smtp.gmail.com with ESMTPSA id p4sm6998453qkb.84.2019.07.07.15.35.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 07 Jul 2019 15:35:26 -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 v4 11/24] PM / devfreq: tegra30: Add debug messages Date: Mon, 8 Jul 2019 01:32:50 +0300 Message-Id: <20190707223303.6755-12-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190707223303.6755-1-digetx@gmail.com> References: <20190707223303.6755-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 | 35 +++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index 878c9396bb8c..c6c4a07d3e07 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -41,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 @@ -276,6 +277,9 @@ 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; + /* * Memory frequencies are guaranteed to have 1MHz granularity * and thus we need this rounding down to get a proper watermarks @@ -288,6 +292,9 @@ static void tegra_actmon_get_lower_upper(struct tegra_devfreq *tegra, *lower = tegra_actmon_lower_freq(tegra, target_freq); *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; @@ -367,11 +374,31 @@ static void tegra_devfreq_update_wmark(struct tegra_devfreq *tegra, device_writel(dev, lower + delta, ACTMON_DEV_LOWER_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; + 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); @@ -422,6 +449,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, @@ -712,6 +741,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; @@ -734,6 +764,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 Jul 7 22:32: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: 11034369 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 A5BF614C0 for ; Sun, 7 Jul 2019 22:36:31 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 956D6281DB for ; Sun, 7 Jul 2019 22:36:31 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8991E28249; Sun, 7 Jul 2019 22:36:31 +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 37F49281DB for ; Sun, 7 Jul 2019 22:36:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728231AbfGGWfa (ORCPT ); Sun, 7 Jul 2019 18:35:30 -0400 Received: from mail-qt1-f196.google.com ([209.85.160.196]:43689 "EHLO mail-qt1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728219AbfGGWfa (ORCPT ); Sun, 7 Jul 2019 18:35:30 -0400 Received: by mail-qt1-f196.google.com with SMTP id w17so13115029qto.10; Sun, 07 Jul 2019 15:35:29 -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=P8izkl+JagpZCrW+m67iAjkazRjM0cubMx9lc/bUK18=; b=HwiB+UzPVrvwe/IGnv+dX3XmG0dFpPLYv8lCHgIayB86aToRKa0Lq1wcBxAAd2j/gy nunisRtkI/Xh+AH72djQtS5l6TCNjOWpToy7vZokDQq0J+rVkOEtw1HKxqWfxNPh7adX Vt/k/Zef+jUIuKfWNaiqKgE0x48MjMzAJXgT8Qhl6NFLGHQtWWQ40wDEJQJNfLQJj7pG ljo8Pyei0rFregAgqqg+cxu6FT2CU6AjKlXyWdXxB4C73jfuXcMYxqPmnK+o8Il0VdQz gnzFRALXW3s+EuuvE1JW703JyCGBSUBcSKzVWicaCsAr7HciL5agXsSdOgI7C/fxOjbQ RmqQ== 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=P8izkl+JagpZCrW+m67iAjkazRjM0cubMx9lc/bUK18=; b=sgDTGp1NxM6zpzceoW7/4X/aMb/AhRW+KyQdWAGyR0qYU9aEKJgsk/kM4BHnqgg6WJ ox5PMsf3fWaB5tZEoT7gJ0I+yMhG8B1VjBE6Asd2JOUmXQJoc3Ku/LA7xpxdmzYyvkws ZNSGKelQYV/q2Mb48xaevLhO8A3qFTgg4X41DVHTTw2wuuKkGxG9g8dIRq1MX0iOxALr 7dU7v/P3qShIGQCPCEhG17OWjK+d8sTnyjTWnmTUbsEq9QrZY5ayRUJQh2ALwCjabJ1w 6yQxsGCREtpNCSWjjeK2EIkHIijfdWDIfUpzJXtgNbCeZLEKROodkm7OyIwfNiye5Xxk a6QQ== X-Gm-Message-State: APjAAAVFnp5ig9W0jClw64QYzv/B/y+kkD3UeecM/aezIbFb0kNXZyjD VcG7TeFQ8NkbxrLA4uMOz9o= X-Google-Smtp-Source: APXvYqyl44I8ZfXdzJs+BQw8s8lArwUi6Qv0H92jERiPmNbyCCL5xaoCWKhCtC/9bM5N8rJueum/Dg== X-Received: by 2002:ac8:2b10:: with SMTP id 16mr11404610qtu.351.1562538928979; Sun, 07 Jul 2019 15:35:28 -0700 (PDT) Received: from localhost.localdomain (ppp79-139-233-208.pppoe.spdop.ru. [79.139.233.208]) by smtp.gmail.com with ESMTPSA id p4sm6998453qkb.84.2019.07.07.15.35.26 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 07 Jul 2019 15:35:28 -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 v4 12/24] PM / devfreq: tegra30: Inline all one-line functions Date: Mon, 8 Jul 2019 01:32:51 +0300 Message-Id: <20190707223303.6755-13-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190707223303.6755-1-digetx@gmail.com> References: <20190707223303.6755-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 Depending on a kernel's configuration, a single line functions may not be inlined by compiler (like enabled ftracing for example). Let's inline such functions explicitly for consistency. Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra30-devfreq.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index c6c4a07d3e07..1a10df5dbbed 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -181,28 +181,29 @@ static struct tegra_actmon_emc_ratio actmon_emc_ratios[] = { { 250000, 100000 }, }; -static u32 actmon_readl(struct tegra_devfreq *tegra, u32 offset) +static inline u32 actmon_readl(struct tegra_devfreq *tegra, u32 offset) { return readl_relaxed(tegra->regs + offset); } -static void actmon_writel(struct tegra_devfreq *tegra, u32 val, u32 offset) +static inline void actmon_writel(struct tegra_devfreq *tegra, + u32 val, u32 offset) { writel_relaxed(val, tegra->regs + offset); } -static u32 device_readl(struct tegra_devfreq_device *dev, u32 offset) +static inline u32 device_readl(struct tegra_devfreq_device *dev, u32 offset) { return readl_relaxed(dev->regs + offset); } -static void device_writel(struct tegra_devfreq_device *dev, u32 val, - u32 offset) +static inline void device_writel(struct tegra_devfreq_device *dev, + u32 val, u32 offset) { writel_relaxed(val, dev->regs + offset); } -static unsigned long do_percent(unsigned long val, unsigned int pct) +static inline unsigned long do_percent(unsigned long val, unsigned int pct) { return val * pct / 100; } From patchwork Sun Jul 7 22:32: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: 11034345 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 52B20138D for ; Sun, 7 Jul 2019 22:35:38 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3FBEE26C9B for ; Sun, 7 Jul 2019 22:35:38 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 31C3726E79; Sun, 7 Jul 2019 22:35: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 D57E026C9B for ; Sun, 7 Jul 2019 22:35:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728262AbfGGWfc (ORCPT ); Sun, 7 Jul 2019 18:35:32 -0400 Received: from mail-qt1-f194.google.com ([209.85.160.194]:39420 "EHLO mail-qt1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728245AbfGGWfc (ORCPT ); Sun, 7 Jul 2019 18:35:32 -0400 Received: by mail-qt1-f194.google.com with SMTP id l9so7999965qtu.6; Sun, 07 Jul 2019 15:35:31 -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=12B/bt6SVgc5lffZlTQjWurlY0GI/nKmVUIlM0Zspto=; b=nv5M5gN5WenSCeUsr4wlhXkUnYMrFcybWFVtxdBxx1xdIUU+TdmhKrgc0By4lwH/g0 DkjKsh5J0IchjYMG96JBD5pBsEE4VELim5G1qkLTl0P74ze4cr6zjf5MoZW/32X0JnzW ci2Ng3jTuzyznnafE70gDgZMpGdPmgMCEq/fqxJvSObuSD1oxW3bWH6iCcYNT82NtfqS Z1zJkfZ5WtdHcrzDChAkT5IAqPkutAfsi+HRqs7xHyksEEpoy9X/58BMP6S1K+xj3vyR YW63Kt4e3quMev3r8fjMrBr4fQdM485nmb6QK2LykvHjcmhy2jlul6159aw3JrhJ30dR heeQ== 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=12B/bt6SVgc5lffZlTQjWurlY0GI/nKmVUIlM0Zspto=; b=SBlivrfXyF7kCgR8d1l9PhEkApRvQiirdfAv3SNCW6EYoM1c9pPiTUshHPqbIic5rn kDqHFV109Ql2c/j1cv3Tnrtaa9Ne4Eq4bur+7mMkqEI4vcpKHQEKBAswZhmYC4Oxsxwy JPbuvJ4GiQuTZTT8+aSBb0zYDiLCalcUs5t0+GKwyiD2s3ihtjKmJ4lI1HLkoANok1cs tUmxoT6bZgEj0/fZG9DEx7H3AzTNb36+p5UeHvPW6z99b6fC7MYIBxN8DiwMlvyWFfrZ uw0iMtAuOxU3LSO4f410trWxUH2YDcm/f8j25v0sOFZIQJ7CxE8iVtT8MzJMK/36bMP3 sjxA== X-Gm-Message-State: APjAAAXd9yIiPIHTnuDKuqQGvH3UWXpJ+LP80sM90AAFecNbz/h9B/Ur bMO0aTEWqrCc3H+YjwiB/+0= X-Google-Smtp-Source: APXvYqwa2HyxP3kBjbyqrwpBs4ocftkBWbbxoaqsTk+w9KUcnbFVRdGSslt66cOd5ENj8kxkHDohCA== X-Received: by 2002:ac8:3637:: with SMTP id m52mr11485782qtb.238.1562538931176; Sun, 07 Jul 2019 15:35:31 -0700 (PDT) Received: from localhost.localdomain (ppp79-139-233-208.pppoe.spdop.ru. [79.139.233.208]) by smtp.gmail.com with ESMTPSA id p4sm6998453qkb.84.2019.07.07.15.35.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 07 Jul 2019 15:35:30 -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 v4 13/24] PM / devfreq: tegra30: Constify structs Date: Mon, 8 Jul 2019 01:32:52 +0300 Message-Id: <20190707223303.6755-14-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190707223303.6755-1-digetx@gmail.com> References: <20190707223303.6755-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 Constify unmodifiable structs for consistency. Signed-off-by: Dmitry Osipenko Reviewed-by: Chanwoo Choi --- drivers/devfreq/tegra30-devfreq.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index 1a10df5dbbed..2f59c78930bd 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -106,7 +106,7 @@ enum tegra_actmon_device { MCCPU, }; -static struct tegra_devfreq_device_config actmon_device_configs[] = { +static const struct tegra_devfreq_device_config actmon_device_configs[] = { { /* MCALL: All memory accesses (including from the CPUs) */ .offset = 0x1c0, @@ -171,7 +171,7 @@ struct tegra_actmon_emc_ratio { unsigned long emc_freq; }; -static struct tegra_actmon_emc_ratio actmon_emc_ratios[] = { +static const struct tegra_actmon_emc_ratio actmon_emc_ratios[] = { { 1400000, ULONG_MAX }, { 1200000, 750000 }, { 1100000, 600000 }, @@ -210,7 +210,7 @@ static inline unsigned long do_percent(unsigned long val, unsigned int pct) static unsigned long actmon_cpu_to_emc_rate(struct tegra_devfreq *tegra) { - struct tegra_actmon_emc_ratio *ratio = actmon_emc_ratios; + const struct tegra_actmon_emc_ratio *ratio = actmon_emc_ratios; unsigned int cpu_freq = cpufreq_get(0); unsigned int i; From patchwork Sun Jul 7 22:32: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: 11034365 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 4961514C0 for ; Sun, 7 Jul 2019 22:36:29 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3A95D281DB for ; Sun, 7 Jul 2019 22:36:29 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2EBF828305; Sun, 7 Jul 2019 22:36:29 +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 CBE27281DB for ; Sun, 7 Jul 2019 22:36:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728318AbfGGWfh (ORCPT ); Sun, 7 Jul 2019 18:35:37 -0400 Received: from mail-qk1-f194.google.com ([209.85.222.194]:46964 "EHLO mail-qk1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728286AbfGGWfe (ORCPT ); Sun, 7 Jul 2019 18:35:34 -0400 Received: by mail-qk1-f194.google.com with SMTP id r4so11823939qkm.13; Sun, 07 Jul 2019 15:35:33 -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=0vYdWHvcNeD8bzgZp8vF5XHbjJftawzlzYH1bDaoyZ0=; b=TP3zxrPFtJczz039nqsSlo8CKJh3gZO2XxzaDVK2oqqk/ZcSXAAPzEEGd1BHYTW9WQ 21I8xkIEcc0DZwYsMNVdMhLCcwMwM5erCb6MlCyME+VV9A/cbawvKf/8zqLa85QjItlA FQCSwRwFpVEZ2L491FWyZaGHm7sBKHGrsm5DRphEwrjmq6kHhUlcee01QCvZQlFEGhNI ZJcpOfvkUkI2hbX2tT7EJZ0Qsae9f11szkotM3D52jPLofJvYomM3RY7rjnOGHRdSxkT ORsNmCm7LityX+Qh0/w0rCmT7IEO1TsxetgY5Y3ykzUR/tv4HKaT2D9r66hT8ufaoTcH 14Kg== 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=0vYdWHvcNeD8bzgZp8vF5XHbjJftawzlzYH1bDaoyZ0=; b=bVG6hfznNisDID9gOf9kZpuj/QmUsCdQXrbTIdI7pYdWhOo00tlpE7yeLsDiX+Euwi 8+Qn0AyQnDbhPTRv3OdyPeaBmf7nDnttPYrUyXeCgQ5EtkAOa0Tm0coSIjpTWVQ4MlpT DlwWgT1PLibasbeHf8uyKbhjOY+fRtJZubi9ynotq1Ie2uPln1nEAIJpdx3OVZ0ubJ8P Qs6q0LK2zz5+CUW06S/yzcUcTDIu9pL9TMO0I+fvqEBMBtlLMGCI1M6hK/h00avfyVam yX4Gp0hk7h3K06hfbGGeCy5E41O4UAFUP8b0qjiO1HXW/pSQDe7lvtvQmTIoCap43S/S LxYA== X-Gm-Message-State: APjAAAUB0jnp5JrYlWnsRwpUuOhcjU313fsSS2IYJFPT+LseRP+r2YHi O5r0KGFzoV/dbLyMfPyur54= X-Google-Smtp-Source: APXvYqwtHvECo86X/+TKnEe4XBqE1z3jXmCk2BA9L5dY++ZA6UJvVIU+z15Fzl49grrUVPMGKAKqVg== X-Received: by 2002:a05:620a:16a6:: with SMTP id s6mr11700823qkj.39.1562538933325; Sun, 07 Jul 2019 15:35:33 -0700 (PDT) Received: from localhost.localdomain (ppp79-139-233-208.pppoe.spdop.ru. [79.139.233.208]) by smtp.gmail.com with ESMTPSA id p4sm6998453qkb.84.2019.07.07.15.35.31 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 07 Jul 2019 15:35:32 -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 v4 14/24] PM / devfreq: tegra30: Ensure that target freq won't overflow Date: Mon, 8 Jul 2019 01:32:53 +0300 Message-Id: <20190707223303.6755-15-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190707223303.6755-1-digetx@gmail.com> References: <20190707223303.6755-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 Potentially very high boosting could cause an integer overflow for a highly clocked memory after conversion to MHz. Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra30-devfreq.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index 2f59c78930bd..0de1efdaabf4 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -460,6 +460,7 @@ static unsigned long actmon_update_target(struct tegra_devfreq *tegra, unsigned long target_freq; target_freq = dev->avg_count / ACTMON_SAMPLING_PERIOD + dev->boost_freq; + target_freq = min(target_freq, ULONG_MAX / KHZ); target_freq = tegra_actmon_account_cpu_freq(tegra, dev, target_freq); return target_freq; From patchwork Sun Jul 7 22:32: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: 11034367 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 8F7EE138D for ; Sun, 7 Jul 2019 22:36:29 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7F314281DB for ; Sun, 7 Jul 2019 22:36:29 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 735C828249; Sun, 7 Jul 2019 22:36:29 +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 2B7302823E for ; Sun, 7 Jul 2019 22:36:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728308AbfGGWfh (ORCPT ); Sun, 7 Jul 2019 18:35:37 -0400 Received: from mail-qk1-f194.google.com ([209.85.222.194]:37768 "EHLO mail-qk1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728245AbfGGWfg (ORCPT ); Sun, 7 Jul 2019 18:35:36 -0400 Received: by mail-qk1-f194.google.com with SMTP id d15so11883282qkl.4; Sun, 07 Jul 2019 15:35:35 -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=k9WSyPCB4rRAI9+QNTWdJTxNh0K8pTknWsVtmMdfXoE=; b=YYWFYuliBA0TJafpCWYhmHq/ipz530A97NxM3WFJNFfsKoAxq5AIRXCvQbDGYaHo6o AA3yi7pZ0KNDrop79OiD6XOrcu9Wb9HUjXdnbXH9c4GS2mBZoSRrDYJzJnrbJJoQik6O WF8VsCWbl5RVdDKdcfse0CKrufD0BT7HjqfzEe5GQEywxuCbln2qYUYGVbXZ1/tZpIUc 9RwwPuSbZiMpTiI+Osl3deDosszvcvI29OmVDGHa4/Un/Qp4hZB2P5sHv88uWw2DOIfV /J/G52M8M5mlLelP3vGHOFPb+9rjoX1y6h8/LNt+UWT2AohWUHNt5dUrPqPc/8rfY6eO boPA== 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=k9WSyPCB4rRAI9+QNTWdJTxNh0K8pTknWsVtmMdfXoE=; b=i3FCEpnfL+zrGQc4Nv+L10R25C8HSuND7kU3zk0AlAl6uMGkDdySP5yhq2JPK7vhsU DJjKv0dKZ7k6IHkzelyGFJuLwjypFBiT9CkM4fC5s2EMO/dVw4Se32yTQRkVhcNeU/Zn y071+UDldSDLljHHSZCkPlb4BWg9zO5aOfYeh4/LL6axHAV7L2sAEaUM73ZWGDEQRdWN l8m03gzoZP5q9lm3f/pUK5EwB+sAQ0levJocme28EcCChh/9ojRYTNt2BHkKAG1yoBx9 g+S10XkFAEi9XhR5QmM1cp+wuLoOQAbUigC6LAIQwsK5yp9Ex8Jpk2F3Xmz2OlJF9nn+ vofw== X-Gm-Message-State: APjAAAX+ZJrZqEhNDdAqMff+dqVkJZlFU0eJ9ONK6flZFltdONhBc2er G/Xw8P9VaGYwd1iiO8dtyeg= X-Google-Smtp-Source: APXvYqyooYWHFit0xGZITwo452W8QmbToLSLJElLvtLZMWgL5u434Pm2LqkehQSBCt1Hu1C2+n3xNg== X-Received: by 2002:ae9:ee14:: with SMTP id i20mr10717529qkg.428.1562538935582; Sun, 07 Jul 2019 15:35:35 -0700 (PDT) Received: from localhost.localdomain (ppp79-139-233-208.pppoe.spdop.ru. [79.139.233.208]) by smtp.gmail.com with ESMTPSA id p4sm6998453qkb.84.2019.07.07.15.35.33 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 07 Jul 2019 15:35: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 v4 15/24] PM / devfreq: tegra30: Fix integer overflow on CPU's freq max out Date: Mon, 8 Jul 2019 01:32:54 +0300 Message-Id: <20190707223303.6755-16-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190707223303.6755-1-digetx@gmail.com> References: <20190707223303.6755-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 another kHz-conversion bug in the code, resulting in integer overflow. Although, this time the resulting value is 4294966296 and it's close to ULONG_MAX, which is okay in this case. Signed-off-by: Dmitry Osipenko Reviewed-by: Chanwoo Choi --- drivers/devfreq/tegra30-devfreq.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index 0de1efdaabf4..60ebf9c9cd86 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -172,7 +172,7 @@ struct tegra_actmon_emc_ratio { }; static const struct tegra_actmon_emc_ratio actmon_emc_ratios[] = { - { 1400000, ULONG_MAX }, + { 1400000, ULONG_MAX / KHZ }, { 1200000, 750000 }, { 1100000, 600000 }, { 1000000, 500000 }, From patchwork Sun Jul 7 22:32: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: 11034363 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 8E27314C0 for ; Sun, 7 Jul 2019 22:36:27 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 79E082823E for ; Sun, 7 Jul 2019 22:36:27 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6D138281DB; Sun, 7 Jul 2019 22:36:27 +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 A2F7C281DB for ; Sun, 7 Jul 2019 22:36:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727914AbfGGWgV (ORCPT ); Sun, 7 Jul 2019 18:36:21 -0400 Received: from mail-qk1-f194.google.com ([209.85.222.194]:42215 "EHLO mail-qk1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728342AbfGGWfi (ORCPT ); Sun, 7 Jul 2019 18:35:38 -0400 Received: by mail-qk1-f194.google.com with SMTP id 201so9737001qkm.9; Sun, 07 Jul 2019 15:35: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=/RyCEOobH4WY4xQ97rfFi7procKS5t2VsaDWPrts+Ic=; b=PFGdKA/DMNSwbCSdsloKCIinHgnpDmE9rLB06RDzu71yYOG9rg0RvNJmzMqoUjbCTK ziuF3sN7j4va+5KiGiVkxHXQMq8fbgNVnIloMpjhJkYgYTVehZ4Ny80bv0odI7tb/Y9o lMVe4+sjtu0krXOR3CXTFLdEXIRJW/la4ko52UzTBsl1LqSx/FY9+NjbUYEd7yw6KE3Y OTYnw+QAHlaGnqhO/PX00HtHVohUzu9scdlyigy4QxrJlYW0/IUI4AIfntU5YZTdwjqF Hpmb/d1Rlr20OA4hoUPuvONfEn48o0wBgvhIQiwwSBva+0j6PHhXpNLuwrLCmHRxBMg2 gAig== 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=/RyCEOobH4WY4xQ97rfFi7procKS5t2VsaDWPrts+Ic=; b=rV8a8WwEJNl0lfervyuYw66mgLnLV/f+vRHKYQVbfISc4R0hfGS8FefCYS4k3pQ2E2 OThziW8hBYPAeQG9gYFuMpe/R6VflEzI67ovQrfvtlmVRq4Zn3r7hndM5nnDAuDFv1AF 30YxG+7u8kIqMgOEhitfCq17qCQHkPuIHWvB7k9GAHGrKTgi+EJp1Y/uD6/B6W2sMIlz KUyUFkMbiQN3f0V1Yy3KWpozLnyqVtzKoFh9pGxeUsvyk04YsVsJ3J9lQT7xiTUSrgzF YnJTTFW54S6CrkD7zlbErq1Q3THxBx2GACWIs60UeHDh6l8Aq76z8eUz+/Ppp8UK93KA udHg== X-Gm-Message-State: APjAAAXYGqKNDQcmYrksSvjTSO5cPOgq48LXDGWbbdnn8D21qd88OZxx 8wZJ+7fc5KYqT268K+AFZuM= X-Google-Smtp-Source: APXvYqxPJBjVVJ5vbuMGKrdWeVHpUMPzR3yyNz3x4cinw9gbXnlgDg0Nx+/ZqMsooqmg7WykoAFQKw== X-Received: by 2002:a37:c448:: with SMTP id h8mr11739254qkm.308.1562538937878; Sun, 07 Jul 2019 15:35:37 -0700 (PDT) Received: from localhost.localdomain (ppp79-139-233-208.pppoe.spdop.ru. [79.139.233.208]) by smtp.gmail.com with ESMTPSA id p4sm6998453qkb.84.2019.07.07.15.35.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 07 Jul 2019 15:35: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 v4 16/24] PM / devfreq: tegra30: Use kHz units uniformly in the code Date: Mon, 8 Jul 2019 01:32:55 +0300 Message-Id: <20190707223303.6755-17-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190707223303.6755-1-digetx@gmail.com> References: <20190707223303.6755-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 Now that all kHz-conversion related bugs are fixed, we can use the kHz uniformly. This makes code cleaner and avoids integer divisions in the code, which is useful in a case of Tegra30 that has Cortex A9 CPU that doesn't support integer division instructions, hence all divisions are actually made in software mode. Another small benefit from this change is that now powertop utility correctly displays devfreq's stats, for some reason it expects them to be in kHz. Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra30-devfreq.c | 78 +++++++++++++++++-------------- 1 file changed, 43 insertions(+), 35 deletions(-) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index 60ebf9c9cd86..6ebf0f505767 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -72,6 +72,8 @@ #define KHZ 1000 +#define KHZ_MAX (ULONG_MAX / KHZ) + /* Assume that the bus is saturated if the utilization is 25% */ #define BUS_SATURATION_RATIO 25 @@ -124,7 +126,7 @@ static const struct tegra_devfreq_device_config actmon_device_configs[] = { .boost_down_coeff = 90, .boost_up_threshold = 27, .boost_down_threshold = 10, - .avg_dependency_threshold = 50000, + .avg_dependency_threshold = 50000 / ACTMON_SAMPLING_PERIOD, }, }; @@ -137,8 +139,11 @@ struct tegra_devfreq_device { const struct tegra_devfreq_device_config *config; void __iomem *regs; - /* Average event count sampled in the last interrupt */ - u32 avg_count; + /* + * Average event count sampled in the last interrupt and converted + * to frequency value. + */ + u32 avg_freq; /* * Extra frequency to increase the target by due to consecutive @@ -172,7 +177,7 @@ struct tegra_actmon_emc_ratio { }; static const struct tegra_actmon_emc_ratio actmon_emc_ratios[] = { - { 1400000, ULONG_MAX / KHZ }, + { 1400000, KHZ_MAX }, { 1200000, 750000 }, { 1100000, 600000 }, { 1000000, 500000 }, @@ -234,7 +239,7 @@ tegra_actmon_account_cpu_freq(struct tegra_devfreq *tegra, unsigned long static_cpu_emc_freq; if (dev->config->avg_dependency_threshold && - dev->config->avg_dependency_threshold < dev->avg_count) { + dev->config->avg_dependency_threshold < dev->avg_freq) { static_cpu_emc_freq = actmon_cpu_to_emc_rate(tegra); target_freq = max(target_freq, static_cpu_emc_freq); } @@ -265,7 +270,7 @@ static unsigned long tegra_actmon_upper_freq(struct tegra_devfreq *tegra, opp = dev_pm_opp_find_freq_ceil(tegra->devfreq->dev.parent, &upper); if (IS_ERR(opp)) - upper = ULONG_MAX; + upper = KHZ_MAX; else dev_pm_opp_put(opp); @@ -287,7 +292,7 @@ static void tegra_actmon_get_lower_upper(struct tegra_devfreq *tegra, * range in a case where target_freq falls into a range of * next_possible_opp_freq - 1MHz. */ - target_freq = round_down(target_freq, 1000000); + target_freq = round_down(target_freq, 1000); /* watermarks are set at the borders of the corresponding OPPs */ *lower = tegra_actmon_lower_freq(tegra, target_freq); @@ -296,9 +301,6 @@ static void tegra_actmon_get_lower_upper(struct tegra_devfreq *tegra, dev_dbg(ddev, "%03x: target_freq %lu lower freq %lu upper freq %lu\n", offset, target_freq, *lower, *upper); - *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 @@ -314,22 +316,23 @@ static void tegra_actmon_get_lower_upper(struct tegra_devfreq *tegra, static void tegra_devfreq_update_avg_wmark(struct tegra_devfreq *tegra, struct tegra_devfreq_device *dev) { - unsigned long lower, upper, freq; + unsigned long avg_threshold, lower, upper; - freq = dev->avg_count / ACTMON_SAMPLING_PERIOD * KHZ; - tegra_actmon_get_lower_upper(tegra, dev, freq, &lower, &upper); + tegra_actmon_get_lower_upper(tegra, dev, dev->avg_freq, &lower, &upper); + + avg_threshold = dev->config->avg_dependency_threshold; + avg_threshold = avg_threshold * ACTMON_SAMPLING_PERIOD; /* * We want to get interrupts when MCCPU client crosses the * dependency threshold in order to take into / out of account * the CPU's freq. */ - if (lower < dev->config->avg_dependency_threshold && - upper > dev->config->avg_dependency_threshold) { - if (dev->avg_count < dev->config->avg_dependency_threshold) - upper = dev->config->avg_dependency_threshold; + if (lower < avg_threshold && upper > avg_threshold) { + if (dev->avg_freq < dev->config->avg_dependency_threshold) + upper = avg_threshold; else - lower = dev->config->avg_dependency_threshold; + lower = avg_threshold; } device_writel(dev, lower, ACTMON_DEV_AVG_LOWER_WMARK); @@ -368,8 +371,7 @@ static void tegra_devfreq_update_wmark(struct tegra_devfreq *tegra, * device. Once that mark is hit and boosting is stopped, the * interrupt is disabled by ISR. */ - freq = dev->avg_count / ACTMON_SAMPLING_PERIOD * KHZ; - tegra_actmon_get_lower_upper(tegra, dev, freq, &lower, &upper); + tegra_actmon_get_lower_upper(tegra, dev, dev->avg_freq, &lower, &upper); delta = do_percent(upper - lower, dev->config->boost_down_threshold); device_writel(dev, lower + delta, ACTMON_DEV_LOWER_WMARK); @@ -396,14 +398,16 @@ static void actmon_device_debug(struct tegra_devfreq *tegra, static void actmon_isr_device(struct tegra_devfreq *tegra, struct tegra_devfreq_device *dev) { - u32 intr_status, dev_ctrl, avg_intr_mask; + u32 intr_status, dev_ctrl, avg_intr_mask, avg_count; 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); + avg_count = device_readl(dev, ACTMON_DEV_AVG_COUNT); dev_ctrl = device_readl(dev, ACTMON_DEV_CTRL); + dev->avg_freq = avg_count / ACTMON_SAMPLING_PERIOD; + avg_intr_mask = ACTMON_DEV_INTR_AVG_BELOW_WMARK | ACTMON_DEV_INTR_AVG_ABOVE_WMARK; @@ -459,8 +463,7 @@ static unsigned long actmon_update_target(struct tegra_devfreq *tegra, { unsigned long target_freq; - target_freq = dev->avg_count / ACTMON_SAMPLING_PERIOD + dev->boost_freq; - target_freq = min(target_freq, ULONG_MAX / KHZ); + target_freq = min(dev->avg_freq + dev->boost_freq, KHZ_MAX); target_freq = tegra_actmon_account_cpu_freq(tegra, dev, target_freq); return target_freq; @@ -497,6 +500,7 @@ static int tegra_actmon_clk_notify_cb(struct notifier_block *nb, struct clk_notifier_data *data = ptr; struct tegra_devfreq_device *dev; struct tegra_devfreq *tegra; + unsigned long freq; unsigned int i; if (action != POST_RATE_CHANGE) @@ -504,6 +508,8 @@ static int tegra_actmon_clk_notify_cb(struct notifier_block *nb, tegra = container_of(nb, struct tegra_devfreq, clk_rate_change_nb); + freq = data->new_rate / KHZ; + /* * EMC rate could change due to three reasons: * @@ -525,7 +531,7 @@ static int tegra_actmon_clk_notify_cb(struct notifier_block *nb, dev = &tegra->devices[i]; tegra_devfreq_update_avg_wmark(tegra, dev); - tegra_devfreq_update_wmark(tegra, dev, data->new_rate); + tegra_devfreq_update_wmark(tegra, dev, freq); } return NOTIFY_OK; @@ -565,17 +571,17 @@ static int tegra_actmon_cpu_notify_cb(struct notifier_block *nb, static void tegra_actmon_configure_device(struct tegra_devfreq *tegra, struct tegra_devfreq_device *dev) { - u32 val = 0, target_freq; + u32 val = 0; /* 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); + dev->avg_freq = clk_get_rate(tegra->emc_clock) / KHZ; + device_writel(dev, dev->avg_freq * ACTMON_SAMPLING_PERIOD, + ACTMON_DEV_INIT_AVG); tegra_devfreq_update_avg_wmark(tegra, dev); - tegra_devfreq_update_wmark(tegra, dev, target_freq); + tegra_devfreq_update_wmark(tegra, dev, dev->avg_freq); device_writel(dev, ACTMON_COUNT_WEIGHT, ACTMON_DEV_COUNT_WEIGHT); device_writel(dev, ACTMON_INTR_STATUS_CLEAR, ACTMON_DEV_INTR_STATUS); @@ -687,7 +693,7 @@ static int tegra_devfreq_target(struct device *dev, unsigned long *freq, rate = dev_pm_opp_get_freq(opp); dev_pm_opp_put(opp); - err = clk_set_min_rate(tegra->emc_clock, rate); + err = clk_set_min_rate(tegra->emc_clock, rate * KHZ); if (err) return err; @@ -710,7 +716,7 @@ static int tegra_devfreq_get_dev_status(struct device *dev, struct tegra_devfreq_device *actmon_dev; unsigned long cur_freq; - cur_freq = clk_get_rate(tegra->emc_clock); + cur_freq = clk_get_rate(tegra->emc_clock) / KHZ; /* To be used by the tegra governor */ stat->private_data = tegra; @@ -727,7 +733,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 = cur_freq / KHZ * ACTMON_SAMPLING_PERIOD; + stat->total_time = cur_freq * ACTMON_SAMPLING_PERIOD; stat->busy_time = min(stat->busy_time, stat->total_time); @@ -773,7 +779,7 @@ static int tegra_governor_get_target(struct devfreq *devfreq, actmon_device_debug(tegra, dev, "upd"); } - *freq = target_freq * KHZ; + *freq = target_freq; return 0; } @@ -909,7 +915,7 @@ static int tegra_devfreq_probe(struct platform_device *pdev) goto remove_opps; } - err = dev_pm_opp_add(&pdev->dev, rate, 0); + err = dev_pm_opp_add(&pdev->dev, rate / KHZ, 0); if (err) { dev_err(&pdev->dev, "Failed to add OPP: %d\n", err); goto remove_opps; @@ -929,6 +935,8 @@ static int tegra_devfreq_probe(struct platform_device *pdev) } tegra_devfreq_profile.initial_freq = clk_get_rate(tegra->emc_clock); + tegra_devfreq_profile.initial_freq /= KHZ; + devfreq = devfreq_add_device(&pdev->dev, &tegra_devfreq_profile, "tegra_actmon", NULL); if (IS_ERR(tegra->devfreq)) { From patchwork Sun Jul 7 22:32: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: 11034361 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 7E5DE138D for ; Sun, 7 Jul 2019 22:36:21 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 6CE6A281DB for ; Sun, 7 Jul 2019 22:36:21 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 60CB528249; Sun, 7 Jul 2019 22:36: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 B5825281DB for ; Sun, 7 Jul 2019 22:36:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728377AbfGGWfl (ORCPT ); Sun, 7 Jul 2019 18:35:41 -0400 Received: from mail-qk1-f194.google.com ([209.85.222.194]:42217 "EHLO mail-qk1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728374AbfGGWfl (ORCPT ); Sun, 7 Jul 2019 18:35:41 -0400 Received: by mail-qk1-f194.google.com with SMTP id 201so9737030qkm.9; Sun, 07 Jul 2019 15:35: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=YAVMQAyazT5sjq1sz/tHuBdA3IDROWVFBZQlYdgWFZs=; b=q2W2biIKn1MxkNUxHJQlsp4s49RxPqY6nEmRpV34vOQUfVTA0+nZE02tXj0Tv0dVL5 zlSNI7nG44WV7YWqRoF1ar1I2+ELMHYbi6sFOaoFVyttBG2HKmXKEl/iu51rjP6r58h0 M5QRDIi7n37ZNZ7sLJHf1rfXvl19iHbiY36LSDbYtTIdbdcp9bizgFAjchA/jqkte9uH ez5CwDXYEHfquiqHDesN556njA+JhdpouXnc4PtofE/FIgxDjlBibDN8m1aUIu4yYQm8 SYGD6mmD9o+tD3Qd9RPizBwmcBnK2vtgztTJdhw0yyB/v4KGVKb5vjW2Goylw71iVhcj 0E4w== 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=YAVMQAyazT5sjq1sz/tHuBdA3IDROWVFBZQlYdgWFZs=; b=k46G7zq8FlcpYaQULPqQwzScLQNCO8CW01AmQI16NO3a87tAx3DhCqyOtNQL+kxoSa d+tp4G4QRTPUc0/Li0OtTtiwUDLQ4uBPlnP1N/rbyRCHha+ouUNucm41oLZGaF3iuivE o3uhx8p9cVJpqwyFk91qe8itTOpyMfDoX1Akzs9qrrvdeB9BrHwyvqseF3DkUmtrdaBr h/tOpiIQbqoEHFwGp/Xsd++omQuKdfzWqxPbZqGgkcb8yeuUr/RjKrtex7WnH5yILSG1 1JAj/po16RTKtaUkgzzlP7J5PGZaNV2VfdMNEidIj+1bIL950LrwTkZHFOk/M5ArLCqs NHEg== X-Gm-Message-State: APjAAAWIch36ktsW++4qMFqZbJwVtqNS8brnuK5NWJAVBiIokKrA/RRB AHZrlVthi4cKQE8sRiT6jyg= X-Google-Smtp-Source: APXvYqz1ySr/znX1MZOuxWz9yCFJm09sRfw6jQRtorB71cjUIBZrXDgjzV0Ny30NkLTzdAdXPf8E9w== X-Received: by 2002:a37:a58f:: with SMTP id o137mr10807495qke.84.1562538940032; Sun, 07 Jul 2019 15:35:40 -0700 (PDT) Received: from localhost.localdomain (ppp79-139-233-208.pppoe.spdop.ru. [79.139.233.208]) by smtp.gmail.com with ESMTPSA id p4sm6998453qkb.84.2019.07.07.15.35.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 07 Jul 2019 15:35: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 v4 17/24] PM / devfreq: tegra30: Use tracepoints for debugging Date: Mon, 8 Jul 2019 01:32:56 +0300 Message-Id: <20190707223303.6755-18-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190707223303.6755-1-digetx@gmail.com> References: <20190707223303.6755-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 Debug messages create too much CPU and memory activity by themselves, so it's difficult to debug lower rates and catch unwanted interrupts that happen rarely. Tracepoints are ideal in that regards because they do not contribute to the sampled date at all. This allowed me to catch few problems which are fixed by the followup patches, without tracepoints it would be much harder to do. Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra30-devfreq.c | 43 +++------- include/trace/events/tegra30_devfreq.h | 105 +++++++++++++++++++++++++ 2 files changed, 117 insertions(+), 31 deletions(-) create mode 100644 include/trace/events/tegra30_devfreq.h diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index 6ebf0f505767..43c9c5fbfe91 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -19,6 +19,9 @@ #include #include +#define CREATE_TRACE_POINTS +#include + #include "governor.h" #define ACTMON_GLB_STATUS 0x0 @@ -283,9 +286,6 @@ 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; - /* * Memory frequencies are guaranteed to have 1MHz granularity * and thus we need this rounding down to get a proper watermarks @@ -298,8 +298,8 @@ static void tegra_actmon_get_lower_upper(struct tegra_devfreq *tegra, *lower = tegra_actmon_lower_freq(tegra, target_freq); *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); + trace_device_lower_upper(dev->config->offset, target_freq, + *lower, *upper); /* * The upper watermark should take into account CPU's frequency @@ -377,30 +377,13 @@ static void tegra_devfreq_update_wmark(struct tegra_devfreq *tegra, device_writel(dev, lower + delta, ACTMON_DEV_LOWER_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, avg_count; - actmon_device_debug(tegra, dev, "isr+"); + trace_device_isr_enter(tegra->regs, dev->config->offset, + dev->boost_freq, cpufreq_get(0)); intr_status = device_readl(dev, ACTMON_DEV_INTR_STATUS); avg_count = device_readl(dev, ACTMON_DEV_AVG_COUNT); @@ -455,7 +438,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-"); + trace_device_isr_exit(tegra->regs, dev->config->offset, + dev->boost_freq, cpufreq_get(0)); } static unsigned long actmon_update_target(struct tegra_devfreq *tegra, @@ -749,7 +733,6 @@ 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; @@ -770,13 +753,11 @@ static int tegra_governor_get_target(struct devfreq *devfreq, dev = &tegra->devices[i]; 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"); + trace_device_target_freq(dev->config->offset, dev_target_freq); + trace_device_target_update(tegra->regs, dev->config->offset, + dev->boost_freq, cpufreq_get(0)); } *freq = target_freq; diff --git a/include/trace/events/tegra30_devfreq.h b/include/trace/events/tegra30_devfreq.h new file mode 100644 index 000000000000..8f264a489daf --- /dev/null +++ b/include/trace/events/tegra30_devfreq.h @@ -0,0 +1,105 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM tegra30_devfreq + +#if !defined(_TRACE_TEGRA30_DEVFREQ_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_TEGRA30_DEVFREQ_H + +#include +#include +#include + +DECLARE_EVENT_CLASS(device_state, + TP_PROTO(void __iomem *base, u32 offset, u32 boost, u32 cpufreq), + TP_ARGS(base, offset, boost, cpufreq), + TP_STRUCT__entry( + __field(u32, offset) + __field(u32, intr_status) + __field(u32, ctrl) + __field(u32, avg_count) + __field(u32, avg_lower) + __field(u32, avg_upper) + __field(u32, count) + __field(u32, lower) + __field(u32, upper) + __field(u32, boost_freq) + __field(u32, cpu_freq) + ), + TP_fast_assign( + __entry->offset = offset; + __entry->intr_status = readl_relaxed(base + offset + 0x24); + __entry->ctrl = readl_relaxed(base + offset + 0x0); + __entry->avg_count = readl_relaxed(base + offset + 0x20); + __entry->avg_lower = readl_relaxed(base + offset + 0x14); + __entry->avg_upper = readl_relaxed(base + offset + 0x10); + __entry->count = readl_relaxed(base + offset + 0x1c); + __entry->lower = readl_relaxed(base + offset + 0x8); + __entry->upper = readl_relaxed(base + offset + 0x4); + __entry->boost_freq = boost; + __entry->cpu_freq = cpufreq; + ), + TP_printk("%03x: intr 0x%08x ctrl 0x%08x avg %010u %010u %010u cnt %010u %010u %010u boost %010u cpu %u", + __entry->offset, + __entry->intr_status, + __entry->ctrl, + __entry->avg_count, + __entry->avg_lower, + __entry->avg_upper, + __entry->count, + __entry->lower, + __entry->upper, + __entry->boost_freq, + __entry->cpu_freq) +); + +DEFINE_EVENT(device_state, device_isr_enter, + TP_PROTO(void __iomem *base, u32 offset, u32 boost, u32 cpufreq), + TP_ARGS(base, offset, boost, cpufreq)); + +DEFINE_EVENT(device_state, device_isr_exit, + TP_PROTO(void __iomem *base, u32 offset, u32 boost, u32 cpufreq), + TP_ARGS(base, offset, boost, cpufreq)); + +DEFINE_EVENT(device_state, device_target_update, + TP_PROTO(void __iomem *base, u32 offset, u32 boost, u32 cpufreq), + TP_ARGS(base, offset, boost, cpufreq)); + +TRACE_EVENT(device_lower_upper, + TP_PROTO(u32 offset, u32 target, u32 lower, u32 upper), + TP_ARGS(offset, target, lower, upper), + TP_STRUCT__entry( + __field(u32, offset) + __field(u32, target) + __field(u32, lower) + __field(u32, upper) + ), + TP_fast_assign( + __entry->offset = offset; + __entry->target = target; + __entry->lower = lower; + __entry->upper = upper; + ), + TP_printk("%03x: freq %010u lower freq %010u upper freq %010u", + __entry->offset, + __entry->target, + __entry->lower, + __entry->upper) +); + +TRACE_EVENT(device_target_freq, + TP_PROTO(u32 offset, u32 target), + TP_ARGS(offset, target), + TP_STRUCT__entry( + __field(u32, offset) + __field(u32, target) + ), + TP_fast_assign( + __entry->offset = offset; + __entry->target = target; + ), + TP_printk("%03x: freq %010u", __entry->offset, __entry->target) +); +#endif /* _TRACE_TEGRA30_DEVFREQ_H */ + +/* This part must be outside protection */ +#include From patchwork Sun Jul 7 22:32: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: 11034357 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 4011C14C0 for ; Sun, 7 Jul 2019 22:36:14 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2F64A281DB for ; Sun, 7 Jul 2019 22:36:14 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 23B1D28249; Sun, 7 Jul 2019 22:36: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 AA225281DB for ; Sun, 7 Jul 2019 22:36:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728404AbfGGWfn (ORCPT ); Sun, 7 Jul 2019 18:35:43 -0400 Received: from mail-qk1-f196.google.com ([209.85.222.196]:39038 "EHLO mail-qk1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728394AbfGGWfn (ORCPT ); Sun, 7 Jul 2019 18:35:43 -0400 Received: by mail-qk1-f196.google.com with SMTP id i125so11861877qkd.6; Sun, 07 Jul 2019 15:35: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=gFvx8CkYt0ydsdQnkr7yH87wB5npz5lZgrQg0UbQ1HE=; b=Q4nnIVvSiuBoeWdsQQUTIVNdW3u93vplqqsH8qgbLqVJ4G+Z+AK/sJUm7XUopEwyBj 44BqnTRgYF8RZHD2GsJcCU54+hHqwvsVUaYM38bU/gs+cqPOBdSFRAxcclsFpYzpUmYy 716pf35drLvbzBM8EcS+T+fOswFxX5GflbxF2LQcqTCLfQB66r6gZig8LXcDKrpYqV1C 6nwzrQOWtUta9H5fkvlwmNvSlzq6ipMqkVlVy6Kboa9RMWMqvwejid0pj8KOXJ5jjkpu Z6TP67YrUc8NXZD2+jco3THamR+kiIofsLmwXnUN7co9HdO/cLWmrKQ0HPPl3AjB2WB+ 1wWQ== 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=gFvx8CkYt0ydsdQnkr7yH87wB5npz5lZgrQg0UbQ1HE=; b=dNwYMXQ72u6czUXdNGu3phdewWS38QVPUlQ8wwri8xpmEDCpmqgnv8BU/zCC/DFcV7 BqF9An8ftf3z3C31tR2V2DKvkis5rAP6OvKhpFR1merZugDe8s+mWGbdD8yBWxafKEZq 39AcS78qZHO9wQZOpYeUOGITJsfdUo0IN3lWjYuOCzZCJv8Jv+VEHHhZX+q91MovnFEk eIZgdg3Z6vwyXjW4yuiWzz28AKOVD6L8vkmYyaynJD6zEHTacZxFTDLX8PyKs4kWiOTw UYWZl/mhsu7taCdQ/eHhAwYYk3hWnYjZNz5Fi9X/9EwBIGjBB94fG5hrx/qosBPOH/vf JgRA== X-Gm-Message-State: APjAAAUol83KD+aF7b4979bm6NrLwdmvr8Y4v6mrWesvOM/If9CtrG2q LwvTZ3RinPZcsPQAP23i918= X-Google-Smtp-Source: APXvYqybKG7bffLAkgIjC5y3sOJ7d7cZq2hkspavk5Bh//mx/BWy7ZskvA7aPMFI/xpUO8mPg4KaIw== X-Received: by 2002:a37:5f45:: with SMTP id t66mr11847231qkb.286.1562538942186; Sun, 07 Jul 2019 15:35:42 -0700 (PDT) Received: from localhost.localdomain (ppp79-139-233-208.pppoe.spdop.ru. [79.139.233.208]) by smtp.gmail.com with ESMTPSA id p4sm6998453qkb.84.2019.07.07.15.35.40 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 07 Jul 2019 15:35: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 v4 18/24] PM / devfreq: tegra30: Optimize CPUFreq notifier Date: Mon, 8 Jul 2019 01:32:57 +0300 Message-Id: <20190707223303.6755-19-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190707223303.6755-1-digetx@gmail.com> References: <20190707223303.6755-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 When CPU's memory activity is low or memory activity is high such that CPU's frequency contribution to the boosting is not taken into account, then there is no need to schedule devfreq's update. This eliminates unnecessary CPU activity during of idling caused by the scheduled work. Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra30-devfreq.c | 73 +++++++++++++++++++++++++++---- 1 file changed, 64 insertions(+), 9 deletions(-) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index 43c9c5fbfe91..8d6bf6e9f1ae 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -216,10 +216,10 @@ static inline 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) +static unsigned long actmon_cpu_to_emc_rate(struct tegra_devfreq *tegra, + unsigned int cpu_freq) { const 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++) { @@ -239,15 +239,15 @@ tegra_actmon_account_cpu_freq(struct tegra_devfreq *tegra, struct tegra_devfreq_device *dev, unsigned long target_freq) { - unsigned long static_cpu_emc_freq; + unsigned long cpu_emc_freq = 0; - if (dev->config->avg_dependency_threshold && - dev->config->avg_dependency_threshold < dev->avg_freq) { - static_cpu_emc_freq = actmon_cpu_to_emc_rate(tegra); - target_freq = max(target_freq, static_cpu_emc_freq); - } + if (!dev->config->avg_dependency_threshold) + return target_freq; - return target_freq; + if (dev->avg_freq > dev->config->avg_dependency_threshold) + cpu_emc_freq = actmon_cpu_to_emc_rate(tegra, cpufreq_get(0)); + + return max(target_freq, cpu_emc_freq); } static unsigned long tegra_actmon_lower_freq(struct tegra_devfreq *tegra, @@ -531,16 +531,71 @@ static void tegra_actmon_delayed_update(struct work_struct *work) mutex_unlock(&tegra->devfreq->lock); } +static unsigned long +tegra_actmon_cpufreq_contribution(struct tegra_devfreq *tegra, + unsigned int cpu_freq) +{ + unsigned long freq, static_cpu_emc_freq; + + /* check whether CPU's freq is taken into account at all */ + if (tegra->devices[MCCPU].avg_freq <= + tegra->devices[MCCPU].config->avg_dependency_threshold) + return 0; + + static_cpu_emc_freq = actmon_cpu_to_emc_rate(tegra, cpu_freq); + + /* compare static CPU-EMC freq with MCALL */ + freq = tegra->devices[MCALL].avg_freq + + tegra->devices[MCALL].boost_freq; + + freq = tegra_actmon_upper_freq(tegra, freq); + + if (freq == tegra->max_freq || freq >= static_cpu_emc_freq) + return 0; + + /* compare static CPU-EMC freq with MCCPU */ + freq = tegra->devices[MCCPU].avg_freq + + tegra->devices[MCCPU].boost_freq; + + freq = tegra_actmon_upper_freq(tegra, freq); + + if (freq == tegra->max_freq || freq >= static_cpu_emc_freq) + return 0; + + return static_cpu_emc_freq; +} + static int tegra_actmon_cpu_notify_cb(struct notifier_block *nb, unsigned long action, void *ptr) { + struct cpufreq_freqs *freqs = ptr; struct tegra_devfreq *tegra; + unsigned long old, new; if (action != CPUFREQ_POSTCHANGE) return NOTIFY_OK; tegra = container_of(nb, struct tegra_devfreq, cpu_rate_change_nb); + /* + * Quickly check whether CPU frequency should be taken into account + * at all, without blocking CPUFreq's core. + */ + if (mutex_trylock(&tegra->devfreq->lock)) { + old = tegra_actmon_cpufreq_contribution(tegra, freqs->old); + new = tegra_actmon_cpufreq_contribution(tegra, freqs->new); + mutex_unlock(&tegra->devfreq->lock); + + /* + * If CPU's frequency shouldn't be taken into account at + * the moment, then there is no need to update the devfreq's + * state because ISR will re-check CPU's frequency on the + * next interrupt. + */ + if (old == new) + return NOTIFY_OK; + } + /* * CPUFreq driver should support CPUFREQ_ASYNC_NOTIFICATION in order * to allow asynchronous notifications. This means we can't block From patchwork Sun Jul 7 22:32: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: 11034359 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 A5CDD138D for ; Sun, 7 Jul 2019 22:36:19 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 96319281DB for ; Sun, 7 Jul 2019 22:36:19 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8A43928249; Sun, 7 Jul 2019 22:36: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 3B30E281DB for ; Sun, 7 Jul 2019 22:36:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727244AbfGGWgN (ORCPT ); Sun, 7 Jul 2019 18:36:13 -0400 Received: from mail-qk1-f196.google.com ([209.85.222.196]:42228 "EHLO mail-qk1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728412AbfGGWfp (ORCPT ); Sun, 7 Jul 2019 18:35:45 -0400 Received: by mail-qk1-f196.google.com with SMTP id 201so9737148qkm.9; Sun, 07 Jul 2019 15:35:44 -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=w2SkU/kiQlK9KjmJW3W/jPsk8xR5ZQI/E8W0Q3/C+/Q=; b=tm/R7LVy2UWjQUmsKzQOkeAsefDhWe13WEriO+dhNltE0hsjZfwC0q0Cr/nnF3ze6N qTaWSLB9ox9xPuFwG+6QCtIvZpegDsRY2OkcFVm0I6xZ0zyJqum72oKjKeHfyo1OTKmW TzJ/CdspGqNJ/7ZiWxA1pZ3pFvfRw6F7TtWXQxSIlJ59f7zKDi+BSLFqXJ9/6n4NGHk3 Tikhg14cwr0L53m1hbkWl+R/aidFH+XoNUVXYgXKLUbIYfIUkUNQ94Q86WfArKdQQMP8 Br2u6oEpyIMmCJmicCn/oKPE9i9uBWqVSTLYzT+rq6TAsQOJi/UYVuxcNnosFgeyW7Ew 20dw== 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=w2SkU/kiQlK9KjmJW3W/jPsk8xR5ZQI/E8W0Q3/C+/Q=; b=V03uWmPjNn/izwEw4lk9DGCCAGaqhYPX17hzPPfO+x9XPjGu0cfhUucKG3gkEIkF7U 0GURZYzFXFag5mxHXwU+B775PKw6AZjIfNoZpZc8rsjr4e355SS4WN6q0G6/b5WHW1ed D1iQGlUzOuX+CoCl0+ssymoQnfpeSkgI5bnRz/c68GdgEfgzoocNgDr0kVaRq2AirbBv hU4yjJyP6Ap6yXCvodA22dF4UvD+OKH1j7ImdieXjN1I/P6EcDxruoEyDsw8oTqRyC1n uz/yoUjn0EIXneCFqMISUnVvsoLj+YnWVxAb1ai6VTGj+tG9BjEmT53OdJ6l9+5xTEQM lJmw== X-Gm-Message-State: APjAAAU2ARCqTvYTNsn/7KGCMGdB6Jktomdy7A1yvD2Pz9PzDY0mFjY9 3G1Tp6KyBJqyQPA7JkEt1f8= X-Google-Smtp-Source: APXvYqxYNebNG6DjAMT41lHdG2cJwlHjljpvSPLiJDNrcCLKHLLeIB+yKckfxTYNJLQDdPs1wpg/lg== X-Received: by 2002:ae9:ddc3:: with SMTP id r186mr11968892qkf.497.1562538944342; Sun, 07 Jul 2019 15:35:44 -0700 (PDT) Received: from localhost.localdomain (ppp79-139-233-208.pppoe.spdop.ru. [79.139.233.208]) by smtp.gmail.com with ESMTPSA id p4sm6998453qkb.84.2019.07.07.15.35.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 07 Jul 2019 15:35: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 v4 19/24] PM / devfreq: tegra30: Optimize upper consecutive watermark selection Date: Mon, 8 Jul 2019 01:32:58 +0300 Message-Id: <20190707223303.6755-20-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190707223303.6755-1-digetx@gmail.com> References: <20190707223303.6755-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 memory activity counter may get a bit higher than a watermark which is selected based on OPP that corresponds to a highest EMC rate, in this case watermark is lower than the actual memory activity is and thus results in unwanted "upper" interrupts. Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra30-devfreq.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index 8d6bf6e9f1ae..c3cf87231d25 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -363,7 +363,18 @@ static void tegra_devfreq_update_wmark(struct tegra_devfreq *tegra, tegra_actmon_get_lower_upper(tegra, dev, freq - 1, &lower, &upper); delta = do_percent(upper - lower, dev->config->boost_up_threshold); - device_writel(dev, lower + delta, ACTMON_DEV_UPPER_WMARK); + + /* + * The memory events count could go a bit higher than the maximum + * defined by the OPPs, hence make the upper watermark infinitely + * high to avoid unnecessary upper interrupts in that case. + */ + if (freq == tegra->max_freq) + upper = ULONG_MAX; + else + upper = lower + delta; + + device_writel(dev, upper, ACTMON_DEV_UPPER_WMARK); /* * Meanwhile the lower mark is based on the average value From patchwork Sun Jul 7 22:32:59 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11034355 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 9014714C0 for ; Sun, 7 Jul 2019 22:36:13 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 812C2281DB for ; Sun, 7 Jul 2019 22:36:13 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 754C528249; Sun, 7 Jul 2019 22:36: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 141DE281DB for ; Sun, 7 Jul 2019 22:36:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728449AbfGGWfs (ORCPT ); Sun, 7 Jul 2019 18:35:48 -0400 Received: from mail-qt1-f196.google.com ([209.85.160.196]:45707 "EHLO mail-qt1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728394AbfGGWfr (ORCPT ); Sun, 7 Jul 2019 18:35:47 -0400 Received: by mail-qt1-f196.google.com with SMTP id j19so16215821qtr.12; Sun, 07 Jul 2019 15:35:46 -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=1TkF2WBU9NElZA01Xp4NJYKijXcI19FpfWCfadJruP0=; b=dAdBPg8uSV1nSvl9Ay0t7M1zJ3AS/akSVQuSlTERVy5FbM5LKCloAxaVCadl5IatuU xF4tzI/aOqVIdRXq+XsgfOecAaU28JX96vnmrtu4dvr94m9jv9P/Os9XQJ5X7nz4ahpC gh5vgwiOepjIvql9Eav8BBL9kytVdHotLD9bZjeCWsTIRi4mYkPQux0VaHAn8gU5qoq0 Jv+9xxFHU1lE7jOy4yDTLxunIFpLpjJj6ZaSLmV/sjbXRh7lqMSYUpa7lyhSIDNIKnSW GotEV0ciDVr1gzMWTPKBBDMaIiBpXL9g1jdcf3zQ+m0h8YwDcjdVMcJZElhIQlQlxjRb clIg== 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=1TkF2WBU9NElZA01Xp4NJYKijXcI19FpfWCfadJruP0=; b=s123CJGbSR53WOaOXHMv1XUbqB4cIzK2g17AH7DbJ2AYMVAn9hmuwxgjI9s/FYkWGu uZrn9g5yYuewvS88pnxjej0+z1XDtSYFMeZ51n1rTWFVCLWUZojtcn9bMsN2l3bFxJLb aec+jl6PBJYw0jxsMjXNX2aKQnzEba/7NT+5q62IApQkLwh6njawC4I5kSEW+v0l4y0z d9dHwGMmrjJPdvKv6bVGhBqClCCPlMqh/HwAA2H2cZ9YpNjUgLj1QHJtISzFHb0xDLwC L1sHA8fPrb+nPph8R2eY3pOxB9cM59IG9yk39iF+sXHZWcoWpTxoih2/YmnbHCEZfWOT PiDQ== X-Gm-Message-State: APjAAAWdXSIxBmRa345h+/uUpcOjRx/laRt4/G2A0PACjZnnuxo/X8Of phZG19ySnE18nTP/OADkf+Y= X-Google-Smtp-Source: APXvYqyEazblWH42R+qns0bFF0ma7PATFp/OANgMzFGSv3TmFVXaWRNS9OVYxu6JtR4xLJjqz66MNw== X-Received: by 2002:a0c:c3c7:: with SMTP id p7mr12151212qvi.125.1562538946496; Sun, 07 Jul 2019 15:35:46 -0700 (PDT) Received: from localhost.localdomain (ppp79-139-233-208.pppoe.spdop.ru. [79.139.233.208]) by smtp.gmail.com with ESMTPSA id p4sm6998453qkb.84.2019.07.07.15.35.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 07 Jul 2019 15:35:46 -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 v4 20/24] PM / devfreq: tegra30: Optimize upper average watermark selection Date: Mon, 8 Jul 2019 01:32:59 +0300 Message-Id: <20190707223303.6755-21-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190707223303.6755-1-digetx@gmail.com> References: <20190707223303.6755-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 noticed that CPU may be crossing the dependency threshold very frequently for some workloads and this results in a lot of interrupts which could be avoided if MCALL client is keeping actual EMC frequency at a higher rate. Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra30-devfreq.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index c3cf87231d25..4d582809acb6 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -314,7 +314,8 @@ static void tegra_actmon_get_lower_upper(struct tegra_devfreq *tegra, } static void tegra_devfreq_update_avg_wmark(struct tegra_devfreq *tegra, - struct tegra_devfreq_device *dev) + struct tegra_devfreq_device *dev, + unsigned long freq) { unsigned long avg_threshold, lower, upper; @@ -323,6 +324,15 @@ static void tegra_devfreq_update_avg_wmark(struct tegra_devfreq *tegra, avg_threshold = dev->config->avg_dependency_threshold; avg_threshold = avg_threshold * ACTMON_SAMPLING_PERIOD; + /* + * If cumulative EMC frequency selection is higher than the + * device's, then there is no need to set upper watermark to + * a lower value because it will result in unnecessary upper + * interrupts. + */ + if (freq * ACTMON_SAMPLING_PERIOD > upper) + upper = freq * ACTMON_SAMPLING_PERIOD; + /* * We want to get interrupts when MCCPU client crosses the * dependency threshold in order to take into / out of account @@ -392,6 +402,7 @@ static void actmon_isr_device(struct tegra_devfreq *tegra, struct tegra_devfreq_device *dev) { u32 intr_status, dev_ctrl, avg_intr_mask, avg_count; + unsigned long freq; trace_device_isr_enter(tegra->regs, dev->config->offset, dev->boost_freq, cpufreq_get(0)); @@ -405,8 +416,10 @@ static void actmon_isr_device(struct tegra_devfreq *tegra, 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); + if (intr_status & avg_intr_mask) { + freq = clk_get_rate(tegra->emc_clock) / KHZ; + tegra_devfreq_update_avg_wmark(tegra, dev, freq); + } if (intr_status & ACTMON_DEV_INTR_CONSECUTIVE_UPPER) { /* @@ -525,7 +538,7 @@ static int tegra_actmon_clk_notify_cb(struct notifier_block *nb, for (i = 0; i < ARRAY_SIZE(tegra->devices); i++) { dev = &tegra->devices[i]; - tegra_devfreq_update_avg_wmark(tegra, dev); + tegra_devfreq_update_avg_wmark(tegra, dev, freq); tegra_devfreq_update_wmark(tegra, dev, freq); } @@ -630,7 +643,7 @@ static void tegra_actmon_configure_device(struct tegra_devfreq *tegra, device_writel(dev, dev->avg_freq * ACTMON_SAMPLING_PERIOD, ACTMON_DEV_INIT_AVG); - tegra_devfreq_update_avg_wmark(tegra, dev); + tegra_devfreq_update_avg_wmark(tegra, dev, dev->avg_freq); tegra_devfreq_update_wmark(tegra, dev, dev->avg_freq); device_writel(dev, ACTMON_COUNT_WEIGHT, ACTMON_DEV_COUNT_WEIGHT); From patchwork Sun Jul 7 22:33:00 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11034353 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 CCB3C14DB for ; Sun, 7 Jul 2019 22:36:12 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BD7A0281DB for ; Sun, 7 Jul 2019 22:36:12 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B19A028249; Sun, 7 Jul 2019 22:36:12 +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 59AF8281DB for ; Sun, 7 Jul 2019 22:36:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728480AbfGGWfv (ORCPT ); Sun, 7 Jul 2019 18:35:51 -0400 Received: from mail-qt1-f194.google.com ([209.85.160.194]:36429 "EHLO mail-qt1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728454AbfGGWft (ORCPT ); Sun, 7 Jul 2019 18:35:49 -0400 Received: by mail-qt1-f194.google.com with SMTP id z4so12806877qtc.3; Sun, 07 Jul 2019 15:35:49 -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=p+2r/O+E4fvVLMNxUO8qZK4WdlrN268i+UKH01Ji1MI=; b=X8uspIoSYM48jLCv6CptdUc+JDEoF4OvijWUkQ9RMcZgIzZe+aeJgHcLzSzTz/8Fdf 2CcSRJA6E8DVtlvf7TdYkVlM/aaHN7y5YbfAjsDMmzq3punQ0GVA1PpzdDLNepttcjXc MBcljxrBHuI61no6qQjHRFsaaI3udS/PYU2Nuxpw3R3dpmBC4OY02Rmdg1ilHk7tT5Gq 3DpipdiiV7AC+Fqfwlg6Bgjm1/rgekeU8yedIUNM+Bxf/fUgObZx84qJ1JpTC5v715tA gOkXfgRbDXgJzV6fAKXlQ1SxKL+1d3okZBjmV0W2Er4D2S5eHqz8wfwGFzQBxPAhqMj+ GBbw== 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=p+2r/O+E4fvVLMNxUO8qZK4WdlrN268i+UKH01Ji1MI=; b=rWsukh0c18Ba6Fj95AIgkPROo+56uiuvGI28tVPRG6bilrNL6xwjRhk8se1CIWa1kW hC7gIJjP45bbJDUsIAw9BoB/vQxBJ0+oiyXoBdvm3Kmolz+Uz2DmdlBvylbVInde2A/y Al4H6kAHqFvkEzO/OWjubUegwBHu9BCUT3CcQ1MjUNXZSfka4scUER/v0PYN/ibkk7Ti Rbd59s5c2xQqxLBboZOAQe9N+GyX9bizn7FrTqbKUw0gurhtef5m7w9MxxqFlhqsOtUM EuYDm+oAar1FPInl/LtPHtkATmfaA+6k8uGno2vlTBjiHSIQNhd8en2K8vM7JymDnKii Fviw== X-Gm-Message-State: APjAAAX1P8gJ08cNhq87zFOl/zADNcKfqUZLErfscXC3C/3YXPyiiTt3 F4NTys9EZFhJHY0TlCJagwA= X-Google-Smtp-Source: APXvYqwkzBBxiZBWgjovlFz21cgelqs9FVXG4UTIF9SQUitStZ0cvbkQVcf47vrFK16eq5ZsTw/hHw== X-Received: by 2002:a05:6214:3a5:: with SMTP id m5mr12364645qvy.7.1562538948728; Sun, 07 Jul 2019 15:35:48 -0700 (PDT) Received: from localhost.localdomain (ppp79-139-233-208.pppoe.spdop.ru. [79.139.233.208]) by smtp.gmail.com with ESMTPSA id p4sm6998453qkb.84.2019.07.07.15.35.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 07 Jul 2019 15:35:48 -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 v4 21/24] PM / devfreq: tegra30: Synchronize average count on target's update Date: Mon, 8 Jul 2019 01:33:00 +0300 Message-Id: <20190707223303.6755-22-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190707223303.6755-1-digetx@gmail.com> References: <20190707223303.6755-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 average count may get out of sync if interrupt was disabled / avoided for a long time due to upper watermark optimization, hence it should be re-synced on each target's update to ensure that watermarks are set up correctly on EMC rate-change notification and that a correct frequency is selected for device. Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra30-devfreq.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index 4d582809acb6..8a674fad26be 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -466,11 +466,41 @@ static void actmon_isr_device(struct tegra_devfreq *tegra, dev->boost_freq, cpufreq_get(0)); } +static void tegra_devfreq_sync_avg_count(struct tegra_devfreq *tegra, + struct tegra_devfreq_device *dev) +{ + u32 avg_count, avg_freq, old_upper, new_upper; + + avg_count = device_readl(dev, ACTMON_DEV_AVG_COUNT); + avg_freq = avg_count / ACTMON_SAMPLING_PERIOD; + + old_upper = tegra_actmon_upper_freq(tegra, dev->avg_freq); + new_upper = tegra_actmon_upper_freq(tegra, avg_freq); + + /* similar to ISR, see comments in actmon_isr_device() */ + if (old_upper != new_upper) { + dev->avg_freq = avg_freq; + dev->boost_freq = 0; + } +} + static unsigned long actmon_update_target(struct tegra_devfreq *tegra, struct tegra_devfreq_device *dev) { unsigned long target_freq; + /* + * The avg_count / avg_freq is getting snapshoted on device's + * interrupt, but there are cases where actual value need to + * be utilized on target's update, like CPUFreq boosting and + * overriding the min freq via /sys/class/devfreq/devfreq0/min_freq + * because we're optimizing the upper watermark based on the + * actual EMC frequency. This means that interrupt may be + * inactive for a long time and thus making snapshoted value + * outdated. + */ + tegra_devfreq_sync_avg_count(tegra, dev); + target_freq = min(dev->avg_freq + dev->boost_freq, KHZ_MAX); target_freq = tegra_actmon_account_cpu_freq(tegra, dev, target_freq); From patchwork Sun Jul 7 22:33:01 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11034351 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 45624138D for ; Sun, 7 Jul 2019 22:36:12 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 35413281DB for ; Sun, 7 Jul 2019 22:36:12 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2913A28249; Sun, 7 Jul 2019 22:36:12 +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 D52872823E for ; Sun, 7 Jul 2019 22:36:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728499AbfGGWfw (ORCPT ); Sun, 7 Jul 2019 18:35:52 -0400 Received: from mail-qk1-f195.google.com ([209.85.222.195]:37791 "EHLO mail-qk1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728394AbfGGWfv (ORCPT ); Sun, 7 Jul 2019 18:35:51 -0400 Received: by mail-qk1-f195.google.com with SMTP id d15so11883578qkl.4; Sun, 07 Jul 2019 15:35:51 -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=IcyH64p85F2RB6CqpFfUFyIfEFxLjqbTFsnGfzpD/Qs=; b=GOCWtMaD7qq+v6UGSP/g/YogQEjIjd5b2vmMntigEFZ/xSwH5VGvyEEDTE/QfkGgzK H8DBJ75DA0UmNwAS9Xe2DlSezwzpe/enTrMTQWHkJbY+4vNLoplXqPHkCR+0QdfVfOaT t6D7BQP0ng0zXJIQOTrIpPfgf64WrpLdgSRAn5xyubowX9SzO3itxhk7Vq9M05K2wOps PrE/MdyClacI9IRpn817X7BkYd9Fl0gydPA7mwZcSY3a1p8p2BCdH0qmBDyZOGiUqEM3 NomSnXODpS1rlxqJwEFwCsug7bu49zEWTPw4U5mtQG2/BDr5ybxiJZo28eN/lYde+wms zAiA== 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=IcyH64p85F2RB6CqpFfUFyIfEFxLjqbTFsnGfzpD/Qs=; b=ICYvLuVcGjtoSHUyrukKRRzpoo0mPxznOUa9wEjwJ9+LBgNRXs8YaLoezV0ird/l+3 z7vL53Gb4cDDu6jnm+aEZui1dPx1oy3skk0V64isB2JAcwCVdv9zx3qmTUmeHVKSsLBC RrPOu3nk1lL3cnJn+qO7IGXQvoBOtJHMqVbaQat+LzwCFYOmVJ8abDYvQzvxdaGTUSSB 75Smx+ZIpm1ZseSPP6FeDrt5FuYdtx0h2LiRKgwWOyGUbZg67ht9wu9QPuHXAc3XiIMX 0YVqy6QDQO/BtyukPLbxk+TiLCr51i+dvcMxRHVgW/ucIxljm1K8uBqWeQ7f/gP0BBJE H+zQ== X-Gm-Message-State: APjAAAWB9y1ChQVNLhC+21zVtCLsy3u45H+uHXIKTERSKYI5DlcWw/ng cdbwKsab7ecArxlBzmcJVhc= X-Google-Smtp-Source: APXvYqzN8k+kGXKPHkGWm8M+zOu6/SDKvRi9Aj/GzDbOg6079dXA4DIW5HK/GwhCAfQ4pv32lmD1mw== X-Received: by 2002:a37:91c2:: with SMTP id t185mr11751856qkd.193.1562538951059; Sun, 07 Jul 2019 15:35:51 -0700 (PDT) Received: from localhost.localdomain (ppp79-139-233-208.pppoe.spdop.ru. [79.139.233.208]) by smtp.gmail.com with ESMTPSA id p4sm6998453qkb.84.2019.07.07.15.35.48 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 07 Jul 2019 15:35:50 -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 v4 22/24] PM / devfreq: tegra30: Include appropriate header Date: Mon, 8 Jul 2019 01:33:01 +0300 Message-Id: <20190707223303.6755-23-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190707223303.6755-1-digetx@gmail.com> References: <20190707223303.6755-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 It's not very correct to include mod_devicetable.h for the OF device drivers and of_device.h should be included instead. Signed-off-by: Dmitry Osipenko Reviewed-by: Chanwoo Choi --- drivers/devfreq/tegra30-devfreq.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index 8a674fad26be..19e872a64148 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -13,7 +13,7 @@ #include #include #include -#include +#include #include #include #include From patchwork Sun Jul 7 22:33:02 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11034349 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 942F514DB for ; Sun, 7 Jul 2019 22:36:08 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 845A9281DB for ; Sun, 7 Jul 2019 22:36:08 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7873F2823E; Sun, 7 Jul 2019 22:36: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 2D82128305 for ; Sun, 7 Jul 2019 22:36:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728522AbfGGWfy (ORCPT ); Sun, 7 Jul 2019 18:35:54 -0400 Received: from mail-qk1-f194.google.com ([209.85.222.194]:46997 "EHLO mail-qk1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727825AbfGGWfy (ORCPT ); Sun, 7 Jul 2019 18:35:54 -0400 Received: by mail-qk1-f194.google.com with SMTP id r4so11824295qkm.13; Sun, 07 Jul 2019 15:35:53 -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=zYZMMVB0p2vPiUsxM7xlHTtkTuiIoBu14nXRTurteBU=; b=Dj4CGCsLeD650+nQjlgz0ZPQ5dExQ8Y7KAzdCDqRn6gSOx13yKk38EsvVTOmSdzwf9 ADoBTzdFe5PvByqJbzwar5z/iqq+GVOdgHNzzFB484qcmzc2paK5RgxutdQwOINylWYG +1cHnYwVjE6SHvmVNccFq6D/Spsu0v5C0NsdiEA0CHKm2TonQ9tWPh1GnD40qYcpzPYO fX4qC/8a44mmutcbTp2FxFukGy9wW4leBJZyiuZHa+ToKoYfLo036xIT99c6KiiV809B ZTBPC+lVNaVi8VoRW1hmqFr6pvaO69ho18NRJswDulJ05Wdj5wf6yEMBnhB1DGImFwBx ucvA== 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=zYZMMVB0p2vPiUsxM7xlHTtkTuiIoBu14nXRTurteBU=; b=Kv2dwXCE95yFVsqXiTErkLkkKrD893J3RrxyWDZCricqer/y+nKTu4rJnGduveJP+f pS2IwK2KHuChfLX7QbaC8Uw5YfJpnrMmyshK81v68Lj27ILbNgHlMPcjyuL/dbFEeO1V UMBGPziYt5+BSR66uLOeWxYHaf0GzSAuiXyT8gRi8FtYgDIZYOhStGEoJRAhDmYtGo2a 7FAq33D4nNEtNZ1azffsOi8KCzLdDKZEE5Pan5Yi0379VbMCESuACq2F/hCuJIZ0rL2y JgXSIb/qSna+ZUN0ptvax5xZdHgv6t5DXKOztrnC47Bo7RgjD/3u0/Vm5lfs5lRs/qHp x3EA== X-Gm-Message-State: APjAAAUe2+GY2/to0NvoTkWDPpGx2ef1HlMbLyTPN/4XDMWeY/gSmU6W HLI0+27R/W7RPaz4Cc1wLCI= X-Google-Smtp-Source: APXvYqyntEvL8BaKmjjASARnHCPbkwUcYPtDsaVd6FdncEMzylJMgU9a9OfY9U2aBIv0HlJXjGx5bA== X-Received: by 2002:ae9:e64d:: with SMTP id x13mr11143733qkl.445.1562538953226; Sun, 07 Jul 2019 15:35:53 -0700 (PDT) Received: from localhost.localdomain (ppp79-139-233-208.pppoe.spdop.ru. [79.139.233.208]) by smtp.gmail.com with ESMTPSA id p4sm6998453qkb.84.2019.07.07.15.35.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 07 Jul 2019 15:35:52 -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 v4 23/24] PM / devfreq: tegra30: Increase sampling period to 16ms Date: Mon, 8 Jul 2019 01:33:02 +0300 Message-Id: <20190707223303.6755-24-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190707223303.6755-1-digetx@gmail.com> References: <20190707223303.6755-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 Increase sampling period by 4ms to get a nicer pow2 value, converting diving into shifts in the code. That's more preferable for Tegra30 that doesn't have hardware divider instructions because of older Cortex-A9 CPU. In a result boosting events are delayed by 4ms, which is not sensible in practice at all. Signed-off-by: Dmitry Osipenko Reviewed-by: Chanwoo Choi --- drivers/devfreq/tegra30-devfreq.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index 19e872a64148..bde19b758643 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -71,7 +71,7 @@ * 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_SAMPLING_PERIOD 16 /* ms */ #define KHZ 1000 From patchwork Sun Jul 7 22:33:03 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11034347 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 3AD7A138D for ; Sun, 7 Jul 2019 22:36:08 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 28928281DB for ; Sun, 7 Jul 2019 22:36:08 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1B7DE28249; Sun, 7 Jul 2019 22:36: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 E9363281DB for ; Sun, 7 Jul 2019 22:36:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728536AbfGGWf4 (ORCPT ); Sun, 7 Jul 2019 18:35:56 -0400 Received: from mail-qt1-f196.google.com ([209.85.160.196]:34238 "EHLO mail-qt1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728534AbfGGWf4 (ORCPT ); Sun, 7 Jul 2019 18:35:56 -0400 Received: by mail-qt1-f196.google.com with SMTP id k10so8629540qtq.1; Sun, 07 Jul 2019 15:35:55 -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=psggdP0XHbRkRY1WzuWDz0G+8Im8+M/iXzjUJQKn4ms=; b=GeKeMHgn+BN+bjLHk6Em6ljyQs3xE1y8peI+qMnKGh+35HCX4lnwWzRgxaStRGdwI7 FU8X9k3tTny8ZVTf7CzkU1t2zGdxOumgLB0kXFD1H/kv1yQ5jI1m1S4Oi1Nk/sWH7U6B PamCwZrWoVIzGUetOu3Q02lMhEFxxbROkESOY2SotktNXKRLATm8JCkAiUZtSXTUBVRo T7TWi/sGxMANQKh5TOz7GVnxMWwkG+fzUZ2ESVR3bv6YDJm3jgavw9KDfU4brj8dvEKX oO3fPIdiv4oAZ0cGEyIKXJGcn6rh+TZvsSdJCAAHqeLPaj+kEMcADs58RhERjfJwS3dx N5iw== 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=psggdP0XHbRkRY1WzuWDz0G+8Im8+M/iXzjUJQKn4ms=; b=s1eLI60f1onSQQsbarBRpapVTf3LrWMbbLi/AGY6LFzy8GvShwxdk5C+RGVf5nIvuk 1bFqNEw25n7ZddJ4p2+SvQ9reerXRC19zWnpUg/kyd1WCl+xBbU3W5OhfrvM/Iso2bPK 3Z9HU5z7W6ExAKxo89QupGpFIzwzfDCgxoQ+eNzLjtvZM5120Fb4B9FSSNj83Ev0iPNd wSsWY/6W19JXY8PwFucWi31BhMaSKtpXa0SDwxGqGaN49xfDjtz9lfAurfnrNAtl/TxD ELz2lQzfaGZX//m+z7kyABaP8cYZfOuyOIxd2EOCgwTdAle4CW8wsLSNBkGM76LcokEv kAdg== X-Gm-Message-State: APjAAAX5DEFADmOh5Obz/VTY0GlIKn1+/8LLzT3b7619R//Hj9S5MKyD zLyJsofTOCLh4Vou4tNOr913wXQz X-Google-Smtp-Source: APXvYqyia+mvy5wvluUBNfe0yc8nF2BZ6ACxB9rReiPkOqetTFiB3mb1yT58Ym+LlGmD3zNORGQdrQ== X-Received: by 2002:ac8:2e5d:: with SMTP id s29mr11599618qta.70.1562538955400; Sun, 07 Jul 2019 15:35:55 -0700 (PDT) Received: from localhost.localdomain (ppp79-139-233-208.pppoe.spdop.ru. [79.139.233.208]) by smtp.gmail.com with ESMTPSA id p4sm6998453qkb.84.2019.07.07.15.35.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 07 Jul 2019 15:35:55 -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 v4 24/24] PM / devfreq: tegra20/30: Add Dmitry as a maintainer Date: Mon, 8 Jul 2019 01:33:03 +0300 Message-Id: <20190707223303.6755-25-digetx@gmail.com> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190707223303.6755-1-digetx@gmail.com> References: <20190707223303.6755-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 Tegra20+ devfreq drivers recently and want to help keep them working and evolving in the future. Signed-off-by: Dmitry Osipenko Acked-by: Chanwoo Choi --- MAINTAINERS | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 95d4bd85df44..4e47ce737376 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -10356,6 +10356,15 @@ F: include/linux/memblock.h F: mm/memblock.c F: Documentation/core-api/boot-time-mm.rst +MEMORY FREQUENCY SCALING DRIVERS FOR NVIDIA TEGRA +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 +F: drivers/devfreq/tegra30-devfreq.c + MEMORY MANAGEMENT L: linux-mm@kvack.org W: http://www.linux-mm.org