From patchwork Mon Nov 4 21:55: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: 11226663 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6597013BD for ; Mon, 4 Nov 2019 22:19:44 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 43BC520650 for ; Mon, 4 Nov 2019 22:19:44 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="WlvVqbk/" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389524AbfKDWTi (ORCPT ); Mon, 4 Nov 2019 17:19:38 -0500 Received: from mail-lj1-f196.google.com ([209.85.208.196]:34811 "EHLO mail-lj1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388612AbfKDWBC (ORCPT ); Mon, 4 Nov 2019 17:01:02 -0500 Received: by mail-lj1-f196.google.com with SMTP id 139so19446965ljf.1; Mon, 04 Nov 2019 14:01:00 -0800 (PST) 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=ppdzoc/V97ChcXO7v2Rn6eiJN21LngJ2PFR09uQ6kL0=; b=WlvVqbk/liqG+K0UazXBD82hDz7hN4WqmsdFdZrNXEqvEEqYJQBRhIPdnXeBM1bgas kGInSmGqK/nzGxfsyHmJ1SE0m5t+xOCcaORqijgtWAVPx9f9AqLqoXY5K0rqPN/QrS69 ScLGhO9Xs6XMldR0q9HYnUnIjQQYNWSyt+qfWC33su0WeNtcW9SXx03TdgPEoQhKSTa5 AmTqTcLdP+hphVixw3WcX+XAqBqBbYUuao3Jc+sBPvGBudULEdcVlAdERoybkGmlhl4F SmVBMjP5cvoc6io0dLsEmXRNYmdEW9sQLUsr46CkHAmLT3sLDr4kLEwU9yXIrM9r7AUo mGQg== 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=ppdzoc/V97ChcXO7v2Rn6eiJN21LngJ2PFR09uQ6kL0=; b=lvWASNYL9iM59Ce9LFBF768udf0g8x5g5VLMQMdcdQleBsNTSSlllj0Hc/hedu5jVd 9cRcSQvstjasDwM7zzc+/xe5vWGc1FZGbd0EHyCr552dQ+KJqhQO7fFDFHGSZMtEqbOX akAKFou/5KeJ3Pd41YQo22RQnsc3EvenDfbdHlpWpwQJg0kDXHRz0EdPL8UtKnZ52tCP 3WCdVOPLcqt0TwdBsfYmg5xM9xHikQL0Wj8GPtDVIGGIYAxkSyPjQUizwcytRdKomJ2V DL01cV2Ki0sm9mNj6hnVfK1ToatiGwFr8fwB35UC9pvIKAx2Cj+dFMdwVszRPuB/5dYX BAlQ== X-Gm-Message-State: APjAAAVlVU4pSM8JdDMLTdNHf3S3REvXlcIwj+f3CEpinrnTw/qLkv6f gWT1+Gj3yrALR4NPc2F5X9g= X-Google-Smtp-Source: APXvYqw2UgPu4ftgWC6oZd3FfT5EoMsGb1gPhZoPlY9vWUQao96k5UnzkdIvGn459OLOyUQ5LxBgmw== X-Received: by 2002:a2e:85c3:: with SMTP id h3mr7393258ljj.122.1572904860068; Mon, 04 Nov 2019 14:01:00 -0800 (PST) Received: from localhost.localdomain (94-29-10-250.dynamic.spd-mgts.ru. [94.29.10.250]) by smtp.gmail.com with ESMTPSA id g3sm7454669ljj.59.2019.11.04.14.00.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Nov 2019 14:00:59 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Jonathan Hunter , Tomeu Vizoso , Peter Geis , =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v9 01/19] PM / devfreq: tegra30: Change irq type to unsigned int Date: Tue, 5 Nov 2019 00:55:59 +0300 Message-Id: <20191104215617.25544-2-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191104215617.25544-1-digetx@gmail.com> References: <20191104215617.25544-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 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 Reviewed-by: Chanwoo Choi Tested-by: Peter Geis Signed-off-by: Dmitry Osipenko --- 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 Mon Nov 4 21:56: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: 11226661 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5656215AB for ; Mon, 4 Nov 2019 22:19:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 2A5F720650 for ; Mon, 4 Nov 2019 22:19:38 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="hUvXLO2e" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388528AbfKDWT2 (ORCPT ); Mon, 4 Nov 2019 17:19:28 -0500 Received: from mail-lf1-f66.google.com ([209.85.167.66]:42076 "EHLO mail-lf1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388940AbfKDWBD (ORCPT ); Mon, 4 Nov 2019 17:01:03 -0500 Received: by mail-lf1-f66.google.com with SMTP id z12so13447331lfj.9; Mon, 04 Nov 2019 14:01:01 -0800 (PST) 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=1E19zvKxqtuRF5nZpIuuGaKt1sQQwAAlPwmfDp5qZb0=; b=hUvXLO2en2ir1OJvEzvTaj11+D9mFnkU+iL1cyFm9s/5Mf7pKmALKVeZLbJL6k9ks0 9FvwYFTOtJi64qbJCGt49QLaTDUAqnrTs41lfTX8XaCWVVOoDaiti6awh7Ku4GF3VhFc IImnYIQwbcU+dlox+9zulkKOy9dXulv2RoK6NUUqlmUKXj0OLFRMd52GM1cxxTQTXb5E 3DDc0O0zfaOyMeY0MhyNeJ5xlfrJvKT/9IxrXqg74PFKXxbkKU2m1ZjiYmZxMfNBPXw4 JGjje8RpqZnhLuvwpk8NOPUqSBTceh/afDJze738AIzR0NXW0laZQmX0fsytncxPanaB PNBw== 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=1E19zvKxqtuRF5nZpIuuGaKt1sQQwAAlPwmfDp5qZb0=; b=EH3XBFg1lfy//4VISm1VE0n98FCtoxTeG81V0K14Mot2P+lYA9fLTt3iSzOimEl+YC CONsaORHGmKFQrsngrtAi8MvofLSFBfnL/xvW2Duk8UFDd48LoLgz3bpqjaXBKFjjG1U ScjxbQH1j7KJzahbes3UIuzUeoEFJ+LSl3VvnT0/Fo4wANqnFuSgjtUvUrzG+Y2hWvdW sXSxrdiVxMtD2E1WxRFou5FyoT5alNRXIgVjHViwZQO/rs2pvyeLDcWUy9r5BHZG+mI+ 8oyhkMWXpBQZiKzuXOH+djVC9IzwtSJPkYIWoV5/wlLwb45NL+s75Wa2q7oZ8iAlGSMx Z21w== X-Gm-Message-State: APjAAAXQiKZKlvZVeC07106z9mPH6jxht4ckmIjL0oNYPT8zPOPhJVoJ +w5Vk1qZhC0e5Kpkhp3kRnw= X-Google-Smtp-Source: APXvYqwCbJB4zr4XOec3vtnnq33ivcluW8B/Mejq2uuMJszRbNpWFQAsnfhlCDn2J0RB2IL1R4zpZQ== X-Received: by 2002:ac2:48b5:: with SMTP id u21mr18489251lfg.75.1572904861102; Mon, 04 Nov 2019 14:01:01 -0800 (PST) Received: from localhost.localdomain (94-29-10-250.dynamic.spd-mgts.ru. [94.29.10.250]) by smtp.gmail.com with ESMTPSA id g3sm7454669ljj.59.2019.11.04.14.01.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Nov 2019 14:01:00 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Jonathan Hunter , Tomeu Vizoso , Peter Geis , =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v9 02/19] PM / devfreq: tegra30: Keep interrupt disabled while governor is stopped Date: Tue, 5 Nov 2019 00:56:00 +0300 Message-Id: <20191104215617.25544-3-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191104215617.25544-1-digetx@gmail.com> References: <20191104215617.25544-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 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 Reviewed-by: Chanwoo Choi Tested-by: Peter Geis Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra30-devfreq.c | 47 ++++++++++++++++--------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index a27300f40b0b..a0a5f3f7b789 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 devfreq-device with the governor early because 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); - if (IS_ERR(tegra->devfreq)) { - err = PTR_ERR(tegra->devfreq); + devfreq = devfreq_add_device(&pdev->dev, &tegra_devfreq_profile, + "tegra_actmon", NULL); + if (IS_ERR(devfreq)) { + err = PTR_ERR(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 Mon Nov 4 21:56: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: 11226659 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 40316112B for ; Mon, 4 Nov 2019 22:19:37 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 1E564204EC for ; Mon, 4 Nov 2019 22:19:37 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="rITuHkgN" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389401AbfKDWT3 (ORCPT ); Mon, 4 Nov 2019 17:19:29 -0500 Received: from mail-lj1-f193.google.com ([209.85.208.193]:41687 "EHLO mail-lj1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388944AbfKDWBE (ORCPT ); Mon, 4 Nov 2019 17:01:04 -0500 Received: by mail-lj1-f193.google.com with SMTP id m9so19369751ljh.8; Mon, 04 Nov 2019 14:01:02 -0800 (PST) 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=QriNmcLUT52c0PWl9XCAOvuUeyuuGYT8NGYlPG2RmN8=; b=rITuHkgNdE2RiaxYQ+jQXE8w17351TUMhfAxjgzUZqoXp4Gdt5wjTJswkHxZIhCXpD STBIuyOLgM8fN3WDmRVA1dX2G6Hb/Rqky3yakDuijpSB2tEcJTwEtKo2S3BYC0E+7jRf i9Ygkd6aLquOlCDLomoXNinc2qon8Keq7GDAd4bdAYZc7cMUayGJhMMLsBhzZitSqduq m2PdYrH+JG75MyntjtbzweBfg0sfkEdNmrKwvkbAnfeG2I4r4gb0ktzufeUfMDDEbOT5 7xmGjDjLRBLXOJi1mAYMVZCpRLtdZ+ZrnS4oDNqGZl7TFw2zLsXKu6aBKZdTRl2tQj5S Yvqw== 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=QriNmcLUT52c0PWl9XCAOvuUeyuuGYT8NGYlPG2RmN8=; b=Q97i7jalF5U2DgrIi0ChwaMDu4ApLHma0uIU3ylrBMqnxuWUiUnZ+Tln1KBjyR1lOA YIGRneFJnA+HOPcO1ptrQ47Vtz2B3ONME9llFZSeFqaKAGy9eGsXCJnnNnscHWFfbmaj F5DpUiJT8Z4l27BlhrsCd3tt5BJz/bv39ZjhRguSeFK58KiiApXvDK/qsXN/QkUU6d68 H7x/C95ffwRdqpnVsT/yylaUPMsymamfID6RJQKz/0yiD5udlgnaMuAIusBf+p9kqqc1 V09Wqb5nLsmXiBNydIU1tHBJguy+LDlQn2CK/MEtr1BRI2dfG8wDDGrkGs0GBPc+CbAZ vmdA== X-Gm-Message-State: APjAAAUU7DPa4bPQ1mEnOEb9t5B5OX+M037zDmsp+dKDPLkjbDrnFbsT c/JETqfr5+r4ZtV4uLDj9K1GJRPg X-Google-Smtp-Source: APXvYqxwvIhW+sU2X4l+7sS8n0nLJFbt9HYUO4fqO6OhXtRzNow5UqpvUg/hgz6lepiRR3vG44BToQ== X-Received: by 2002:a2e:874a:: with SMTP id q10mr20878013ljj.14.1572904862038; Mon, 04 Nov 2019 14:01:02 -0800 (PST) Received: from localhost.localdomain (94-29-10-250.dynamic.spd-mgts.ru. [94.29.10.250]) by smtp.gmail.com with ESMTPSA id g3sm7454669ljj.59.2019.11.04.14.01.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Nov 2019 14:01:01 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Jonathan Hunter , Tomeu Vizoso , Peter Geis , =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v9 03/19] PM / devfreq: tegra30: Handle possible round-rate error Date: Tue, 5 Nov 2019 00:56:01 +0300 Message-Id: <20191104215617.25544-4-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191104215617.25544-1-digetx@gmail.com> References: <20191104215617.25544-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 The EMC clock rate rounding technically could fail, hence let's handle the error cases properly. Reviewed-by: Chanwoo Choi Tested-by: Peter Geis 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 a0a5f3f7b789..66dfa98d8c6b 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 Mon Nov 4 21:56: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: 11226579 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C015D16B1 for ; Mon, 4 Nov 2019 22:01:07 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 9F48421929 for ; Mon, 4 Nov 2019 22:01:07 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Lk22YzHx" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388957AbfKDWBG (ORCPT ); Mon, 4 Nov 2019 17:01:06 -0500 Received: from mail-lj1-f195.google.com ([209.85.208.195]:42651 "EHLO mail-lj1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388949AbfKDWBF (ORCPT ); Mon, 4 Nov 2019 17:01:05 -0500 Received: by mail-lj1-f195.google.com with SMTP id n5so8386053ljc.9; Mon, 04 Nov 2019 14:01:03 -0800 (PST) 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=6TJlQkVC15YK1Mmhxs/rkGDrxgdE3q8G1rLTH1Ltzd0=; b=Lk22YzHxOA6nZMYEhNYYDGLVMMEMhzir8xS5idni7f5IYzZjCZaj9Q+YYENzfL3p8u /2x4vO7g6qfU9AKhXo3a6xsK4ILwpqI8ZNXpQqbhMHDMxOJBkO8QA3FKfY6EkFFKXaUa 9jY1Pccw7Lt/+YlxE1jxTXtSkQv8IrFX4g7UJUnBX0iD8NfdRfTWHkMJg30WjyohxBhA 5Wvam17LnlDk9ofTk3gN/hh1HBQeBMXksrzqUqF8uaycRGuplTTvh+MQhl41hYjMtXAV mkj1pcUwWHqiS/I72/mpSuZXeAT2lowh/fmrr4PLF9bp1TofO8MPBc9Cj3A7XV7Fnwah Cewg== 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=6TJlQkVC15YK1Mmhxs/rkGDrxgdE3q8G1rLTH1Ltzd0=; b=HJgRhDN3ORM1ermy/0i78s2G9gHqNREXsqnICV7tK7Ps1Dk1RSmNheF2Y2XbTVzLpU D1JF+UUu97EE/HKvdojshQ1NaUiTrKGcVU8mhD+6s7aN+iGAZE1l0UY+i6RELEl3gliD tCa9gANANnxSZN8mnc6YgVsLYCd0M8UldYVPyW/V6IU4utBxLGfyzlkvLm2eNy2Mti/7 cA/PAtbt0lERZKDjiTAIKnargO1b5pVBXzGi6GcQulAKNAMgoutVIIAm9OvbPAnENog/ T/hwd6es1PbHSci46Lb7ARW/9J/4KJh3uMVf7UXuvD9c9FuIArumYUBSqaFp8X3UKXpd OzNA== X-Gm-Message-State: APjAAAX97n8rdl3ITVLtfCWgKpxMUhDoK9TP0uJw+SjTZNGyM1DT/u/m TotowGEQLjQ+8B1LyY/En9M= X-Google-Smtp-Source: APXvYqznNX5QtPgSIWUNQdtXRtK+09ntEdga9YULTtdrABGJbd7AMffoE6v9Xpm/JZ5MjpMFW7hlOA== X-Received: by 2002:a05:651c:313:: with SMTP id a19mr20494836ljp.199.1572904862997; Mon, 04 Nov 2019 14:01:02 -0800 (PST) Received: from localhost.localdomain (94-29-10-250.dynamic.spd-mgts.ru. [94.29.10.250]) by smtp.gmail.com with ESMTPSA id g3sm7454669ljj.59.2019.11.04.14.01.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Nov 2019 14:01:02 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Jonathan Hunter , Tomeu Vizoso , Peter Geis , =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v9 04/19] PM / devfreq: tegra30: Drop write-barrier Date: Tue, 5 Nov 2019 00:56:02 +0300 Message-Id: <20191104215617.25544-5-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191104215617.25544-1-digetx@gmail.com> References: <20191104215617.25544-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 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. Reviewed-by: Chanwoo Choi Tested-by: Peter Geis Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra30-devfreq.c | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index 66dfa98d8c6b..b50bd1615010 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 Mon Nov 4 21:56: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: 11226655 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A3A1C112B for ; Mon, 4 Nov 2019 22:19:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 818CA214D8 for ; Mon, 4 Nov 2019 22:19:27 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="tT6Ua0eI" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388966AbfKDWBI (ORCPT ); Mon, 4 Nov 2019 17:01:08 -0500 Received: from mail-lf1-f66.google.com ([209.85.167.66]:44658 "EHLO mail-lf1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388621AbfKDWBG (ORCPT ); Mon, 4 Nov 2019 17:01:06 -0500 Received: by mail-lf1-f66.google.com with SMTP id v4so13446560lfd.11; Mon, 04 Nov 2019 14:01:04 -0800 (PST) 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=4GPUilwynfX5AA3QRvL7JTfGxSIPwXWj2mMjnwonars=; b=tT6Ua0eIe1YeVJOuEJnrdE//COac9LadoKtkDAcrDAelaC2i+NC4Iu43R3yY4aGq8e bDhSQzgSuc/164sHiOlovDwb8GYJcFcxV3qRcEYUH7sfDgpYLb6NNkGszmr+7l97eurv oTU8Yx0HVMrFJwFG4KUPJu+5J2tmbJpORQ/MZUQYTxubEucN6cGB3kYFGLMIsAxCGhE7 XIkhWg4C650pI+KmULnwdINJUcOSBohBxtYdFhEmbzeP58ltOY8WQckaVCCGp4kFdlw+ ErBkLz2aFBRfmgg3rhKYcyMwTgPisl84jceZKyGZ87xaR6EWptuZuomClMhiK7yO76c7 gJyg== 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=4GPUilwynfX5AA3QRvL7JTfGxSIPwXWj2mMjnwonars=; b=EmsvJFJUjsD6R4/5ayvSMqzDzJaWdFPoxUvuZAtGzoqXp3EDXK7t2nAnBW2FrsIqns idDaZypou+8s78xm9ITkEzp1WPi9Nl6hADwLc7uiajTapYkOLIa0Bg05LFVXC0lva4I3 DFqeIFmsaJ2btRX3P8GaLCg6Haeepv4iCrIek5Loh1AdHiT4KDmhhRd8/86eyjL52hXV YXonPk93bXItD2RsIpbPseJDLQSmRe/o/okwAvUqseC4Sm6jV1qcitgPHFOewZNzb7GP ENBEWEPxtXYURy1skJsVhNx6uq3IVESgy/CyWZLSOSiT7z1nAfLS3zXm8dzv5O9EKDU8 bISw== X-Gm-Message-State: APjAAAUXVoEmvSc81meu3MHuRruIPwkx227EmqGSTGW4f4iucvX+ya2H Tx7GiM/GjMofrL6HK19fiyTOoDs0 X-Google-Smtp-Source: APXvYqyn0V/Lm0MW8Mou20GI1j4QbBM3/gGmxDrN+tKzQNWBp8wrBL5TINcz53WLuhWYtMqU+VvtMg== X-Received: by 2002:ac2:5bca:: with SMTP id u10mr18358816lfn.134.1572904864000; Mon, 04 Nov 2019 14:01:04 -0800 (PST) Received: from localhost.localdomain (94-29-10-250.dynamic.spd-mgts.ru. [94.29.10.250]) by smtp.gmail.com with ESMTPSA id g3sm7454669ljj.59.2019.11.04.14.01.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Nov 2019 14:01:03 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Jonathan Hunter , Tomeu Vizoso , Peter Geis , =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v9 05/19] PM / devfreq: tegra30: Fix integer overflow on CPU's freq max out Date: Tue, 5 Nov 2019 00:56:03 +0300 Message-Id: <20191104215617.25544-6-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191104215617.25544-1-digetx@gmail.com> References: <20191104215617.25544-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 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. Reviewed-by: Chanwoo Choi Tested-by: Peter Geis Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra30-devfreq.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index b50bd1615010..7d7b7eecc19c 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -69,6 +69,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 @@ -170,7 +172,7 @@ struct tegra_actmon_emc_ratio { }; static struct tegra_actmon_emc_ratio actmon_emc_ratios[] = { - { 1400000, ULONG_MAX }, + { 1400000, KHZ_MAX }, { 1200000, 750000 }, { 1100000, 600000 }, { 1000000, 500000 }, From patchwork Mon Nov 4 21:56:04 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11226657 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 101FE13BD for ; Mon, 4 Nov 2019 22:19:28 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E2A1E21D7D for ; Mon, 4 Nov 2019 22:19:27 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ppDmwC5X" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388961AbfKDWBH (ORCPT ); Mon, 4 Nov 2019 17:01:07 -0500 Received: from mail-lj1-f195.google.com ([209.85.208.195]:39558 "EHLO mail-lj1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388954AbfKDWBH (ORCPT ); Mon, 4 Nov 2019 17:01:07 -0500 Received: by mail-lj1-f195.google.com with SMTP id y3so19415367ljj.6; Mon, 04 Nov 2019 14:01:05 -0800 (PST) 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=T6ehYayj/CsEjREzCecGwtuH1vTkkw6hdLvoIOrkLyE=; b=ppDmwC5Xh+v6xV0lSe3C5w7u7se3COpxCCvOTKHZeLdftrQUB7xAkU5gQ/9Ts6JXn/ WkCYpfUHyaeR0NpQ+q7Ekb2BBLF9FKNLY1yC2g9tcL4gJwihv3uRUEdItTZXzc0rixHB 5blDcQsLQvnD0bD0VSd8aiJ1oXfAKjQjU0r45SyOPaFRJgZ1O6xr1OScbvsMNBrBEISF +CNhmql/yqDD6rjGmthSDNoBaE4weuBTWIkQPbeCQ08bLHQ99cAq5qwBJiBLlNW674Kc l1483nQ9IasMUps6mwuwRslbh6RhfNXhlmXo/L1xH1QIAvF9FOkTeRHFZgH2pqEs4kHY en5A== 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=T6ehYayj/CsEjREzCecGwtuH1vTkkw6hdLvoIOrkLyE=; b=FDlOtejpNI8cslEQw7p0pEZfBFmsikiMAxZ/S07XMDsQ6SCDWqnKki3rK/evDgiekl Z25IZSVA8acAt0Z02ULwXwOhEYQJBSWEaKcidtvBMHvu1y9YQKjm456T/icwy+ovmIQX yy/qf74mOQieEJwj43oFs7aYHApqyIRr9Axy0q/20nA4nCy4SQZEs3JYKwpR6u9Ys9Xy g6f3iQHMIBa42w08X0Kdbj0uzwrEtBUDrZt3P8OOEbxewLLADHVQoXWlCaOGmqKQGjbH rQYpsSLonsSRQuQHdRfH+WK5bEeQeIkoq+lXX862tcbAGlVqvrkHyAUZRIbxRtqO8EcZ rIRQ== X-Gm-Message-State: APjAAAXraQeXwANxD1uL51eRTgbcuvVQs1LM+wQslxxYXINPxblc1wMH KktbYdRL3sGeiIuGty3bjaA= X-Google-Smtp-Source: APXvYqxA7PwqHWRG0FVsAvqXyx5yQtN5BTKOLrgcrY2Rar5bVjT3XnXYr5FdQdUKncowxUtB6XcjgQ== X-Received: by 2002:a2e:c51:: with SMTP id o17mr745640ljd.202.1572904865065; Mon, 04 Nov 2019 14:01:05 -0800 (PST) Received: from localhost.localdomain (94-29-10-250.dynamic.spd-mgts.ru. [94.29.10.250]) by smtp.gmail.com with ESMTPSA id g3sm7454669ljj.59.2019.11.04.14.01.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Nov 2019 14:01:04 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Jonathan Hunter , Tomeu Vizoso , Peter Geis , =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v9 06/19] PM / devfreq: tegra30: Use kHz units uniformly in the code Date: Tue, 5 Nov 2019 00:56:04 +0300 Message-Id: <20191104215617.25544-7-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191104215617.25544-1-digetx@gmail.com> References: <20191104215617.25544-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 Part of the code uses Hz units and the other kHz, let's switch to kHz everywhere for consistency. A small benefit from this change (besides code's cleanup) is that now powertop utility correctly displays devfreq's stats, for some reason it expects them to be in kHz. Tested-by: Peter Geis Reviewed-by: Chanwoo Choi Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra30-devfreq.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index 7d7b7eecc19c..9ccde64be0a0 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -448,7 +448,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; @@ -477,7 +477,7 @@ static int tegra_devfreq_get_dev_status(struct device *dev, 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]; @@ -527,7 +527,7 @@ static int tegra_governor_get_target(struct devfreq *devfreq, target_freq = max(target_freq, dev->target_freq); } - *freq = target_freq * KHZ; + *freq = target_freq; return 0; } @@ -663,7 +663,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; @@ -686,7 +686,8 @@ static int tegra_devfreq_probe(struct platform_device *pdev) goto unreg_notifier; } - tegra_devfreq_profile.initial_freq = clk_get_rate(tegra->emc_clock); + tegra_devfreq_profile.initial_freq = tegra->cur_freq; + devfreq = devfreq_add_device(&pdev->dev, &tegra_devfreq_profile, "tegra_actmon", NULL); if (IS_ERR(devfreq)) { From patchwork Mon Nov 4 21:56:05 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11226581 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id AB47115AB for ; Mon, 4 Nov 2019 22:01:11 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 7F1572084D for ; Mon, 4 Nov 2019 22:01:11 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="QbdJAVhX" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388502AbfKDWBK (ORCPT ); Mon, 4 Nov 2019 17:01:10 -0500 Received: from mail-lf1-f65.google.com ([209.85.167.65]:39040 "EHLO mail-lf1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388187AbfKDWBK (ORCPT ); Mon, 4 Nov 2019 17:01:10 -0500 Received: by mail-lf1-f65.google.com with SMTP id 195so13431602lfj.6; Mon, 04 Nov 2019 14:01:06 -0800 (PST) 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=zTSoWegEEojY/0rzNbV3L5iathds+zVoar3/WKcCtmk=; b=QbdJAVhX7nZh3/EK5AdgeT89M2Fcgot2EArIUhRFqleku19Ewn5ZNoYZT2OC9fqy/K fz+hmHjK/xClFzLUXPJo5li83f2YB9xMJMOgqp5QvbWk0lolHXzaVuYp2I9MQlaV1+j9 s0zOLBBcnBft1emukkCUV3UKf+qt/hn17MU2LlyQsuX+DU25A/CJwWvcnK6OCpzjNCur SDAnSAUFrcXqmdK+giQQDaKaoTjSU21rAbBUNf48FdxIJ245Jb1z/twhXocUiyWq5MFq /jz5pQ+PfjzMMcmfN9KD7dpcInax7qbh7I9gZTD+Y2kHLf9d3DUq/7AIWNE6VUVciLzm jx/w== 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=zTSoWegEEojY/0rzNbV3L5iathds+zVoar3/WKcCtmk=; b=NOVB04avUO6HJRoxXoNUuPIg+3GGJpLbVj1IuubzjtZvBwDQhMqc4WjhnEVUqCRiKt qEWMY9nVmuopyNnXnfW3R0lhio8pTXd8qfDwoNyvs04aeT5iymSEwR2iqk6mK5JYCo/X bIxcIpw6FWTKzd+fmMxLqZnlOu1xgQs813u+TMhtXjyzdYMX6p7q22emh7OEKe5Izn3J U0lJIBJthc5RLlQZjQ3qsP6l8Mto7PO1gz+XOxDfFFUzDtfokSPanuHidAcUTMm2gZgQ cvzbuFakbjD8RszqjOLBPZ7aUMIkkeQ2mK9JHLFFD7OOlZPbbmWMOBLJaLAZrQKGDYVl n+BA== X-Gm-Message-State: APjAAAVrS0MxFeCxyBwa3V+rl0bpf98wAUnpnSYBDSZRsbEmC7KpTen2 A6P06wVglVogUTMypNGR4IU= X-Google-Smtp-Source: APXvYqzwNM2fcLYNL+RvNGwhxMCtGYZy/dKmH9Rn7ZGGpP5XWqeX49Rq0Nkvb/aspWr5ndJa+Oe5vg== X-Received: by 2002:ac2:5dc1:: with SMTP id x1mr17745656lfq.177.1572904866101; Mon, 04 Nov 2019 14:01:06 -0800 (PST) Received: from localhost.localdomain (94-29-10-250.dynamic.spd-mgts.ru. [94.29.10.250]) by smtp.gmail.com with ESMTPSA id g3sm7454669ljj.59.2019.11.04.14.01.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Nov 2019 14:01:05 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Jonathan Hunter , Tomeu Vizoso , Peter Geis , =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v9 07/19] PM / devfreq: tegra30: Use CPUFreq notifier Date: Tue, 5 Nov 2019 00:56:05 +0300 Message-Id: <20191104215617.25544-8-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191104215617.25544-1-digetx@gmail.com> References: <20191104215617.25544-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 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. Reviewed-by: Chanwoo Choi Tested-by: Peter Geis Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra30-devfreq.c | 180 +++++++++++++++++++++++++----- 1 file changed, 155 insertions(+), 25 deletions(-) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index 9ccde64be0a0..2d720e7e2236 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -17,6 +17,7 @@ #include #include #include +#include #include "governor.h" @@ -34,6 +35,8 @@ #define ACTMON_DEV_CTRL_CONSECUTIVE_ABOVE_WMARK_EN BIT(30) #define ACTMON_DEV_CTRL_ENB BIT(31) +#define ACTMON_DEV_CTRL_STOP 0x00000000 + #define ACTMON_DEV_UPPER_WMARK 0x4 #define ACTMON_DEV_LOWER_WMARK 0x8 #define ACTMON_DEV_INIT_AVG 0xc @@ -159,7 +162,10 @@ struct tegra_devfreq { struct clk *emc_clock; unsigned long max_freq; unsigned long cur_freq; - struct notifier_block rate_change_nb; + struct notifier_block clk_rate_change_nb; + + struct delayed_work cpufreq_update_work; + struct notifier_block cpu_rate_change_nb; struct tegra_devfreq_device devices[ARRAY_SIZE(actmon_device_configs)]; @@ -303,22 +309,32 @@ static unsigned long actmon_cpu_to_emc_rate(struct tegra_devfreq *tegra, return 0; } +static unsigned long actmon_device_target_freq(struct tegra_devfreq *tegra, + struct tegra_devfreq_device *dev) +{ + unsigned int avg_sustain_coef; + unsigned long target_freq; + + target_freq = dev->avg_count / ACTMON_SAMPLING_PERIOD; + avg_sustain_coef = 100 * 100 / dev->config->boost_up_threshold; + target_freq = do_percent(target_freq, avg_sustain_coef); + target_freq += dev->boost_freq; + + return target_freq; +} + static void 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); + cpu_freq = cpufreq_quick_get(0); static_cpu_emc_freq = actmon_cpu_to_emc_rate(tegra, cpu_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; + dev->target_freq = actmon_device_target_freq(tegra, dev); if (dev->avg_count >= dev->config->avg_dependency_threshold) dev->target_freq = max(dev->target_freq, static_cpu_emc_freq); @@ -349,8 +365,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 *tegra; @@ -360,7 +376,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); tegra->cur_freq = data->new_rate / KHZ; @@ -373,6 +389,79 @@ 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, + cpufreq_update_work.work); + + mutex_lock(&tegra->devfreq->lock); + update_devfreq(tegra->devfreq); + mutex_unlock(&tegra->devfreq->lock); +} + +static unsigned long +tegra_actmon_cpufreq_contribution(struct tegra_devfreq *tegra, + unsigned int cpu_freq) +{ + unsigned long static_cpu_emc_freq, dev_freq; + + /* check whether CPU's freq is taken into account at all */ + if (tegra->devices[MCCPU].avg_count < + tegra->devices[MCCPU].config->avg_dependency_threshold) + return 0; + + static_cpu_emc_freq = actmon_cpu_to_emc_rate(tegra, cpu_freq); + dev_freq = actmon_device_target_freq(tegra, &tegra->devices[MCCPU]); + + if (dev_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, delay; + + 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 + * here for too long, otherwise CPUFreq's core will complain with a + * warning splat. + */ + delay = msecs_to_jiffies(ACTMON_SAMPLING_PERIOD); + schedule_delayed_work(&tegra->cpufreq_update_work, delay); + + return NOTIFY_OK; +} + static void tegra_actmon_configure_device(struct tegra_devfreq *tegra, struct tegra_devfreq_device *dev) { @@ -405,9 +494,22 @@ 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_devices(struct tegra_devfreq *tegra) +{ + struct tegra_devfreq_device *dev = tegra->devices; + unsigned int i; + + for (i = 0; i < ARRAY_SIZE(tegra->devices); i++, dev++) { + device_writel(dev, ACTMON_DEV_CTRL_STOP, 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); @@ -415,20 +517,41 @@ 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: + tegra_actmon_stop_devices(tegra); + + return err; } static void tegra_actmon_stop(struct tegra_devfreq *tegra) { - unsigned int i; - disable_irq(tegra->irq); - for (i = 0; i < ARRAY_SIZE(tegra->devices); i++) { - device_writel(&tegra->devices[i], 0x00000000, ACTMON_DEV_CTRL); - device_writel(&tegra->devices[i], ACTMON_INTR_STATUS_CLEAR, - ACTMON_DEV_INTR_STATUS); - } + cpufreq_unregister_notifier(&tegra->cpu_rate_change_nb, + CPUFREQ_TRANSITION_NOTIFIER); + + cancel_delayed_work_sync(&tegra->cpufreq_update_work); + + tegra_actmon_stop_devices(tegra); } static int tegra_devfreq_target(struct device *dev, unsigned long *freq, @@ -536,6 +659,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 devfreq-device with the governor early because it is @@ -546,7 +670,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: @@ -561,11 +685,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 = { @@ -672,8 +796,14 @@ 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); + tegra->cpu_rate_change_nb.notifier_call = tegra_actmon_cpu_notify_cb; + + INIT_DELAYED_WORK(&tegra->cpufreq_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"); @@ -701,7 +831,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); @@ -719,7 +849,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 Mon Nov 4 21:56:06 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11226653 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 0B27313BD for ; Mon, 4 Nov 2019 22:19:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id D3340214D8 for ; Mon, 4 Nov 2019 22:19:26 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="lzdhgMls" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388463AbfKDWTW (ORCPT ); Mon, 4 Nov 2019 17:19:22 -0500 Received: from mail-lj1-f196.google.com ([209.85.208.196]:39562 "EHLO mail-lj1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388964AbfKDWBK (ORCPT ); Mon, 4 Nov 2019 17:01:10 -0500 Received: by mail-lj1-f196.google.com with SMTP id y3so19415472ljj.6; Mon, 04 Nov 2019 14:01:07 -0800 (PST) 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=z9+CHMZoGGQ0kyLUVsXDA/Tuh9oFzpRRT79bF9HX1WM=; b=lzdhgMlslFq88r285yeohrSBNwz0mZz4md7IYZEAyWOfJc+0BOETETJaNikVjB8roy IMOPf+0ygt/ubO3DjmC+apNhJMrpi5kXCbJ56BNAdSvKD3UWkx2Bvql/58JjEgvudsBY wQ1lUQlrPXMlS21gcygP1DDkIk6ZL/n3jT8Q/ZHCQ9WKJDCRyj5RG0MnAvv+yram/SNi QhY4xhwjl/7ebsXnAOC9QLlgKyaNXuqh2c/fsZzvQ8ifWjjiY1MIVymSBeWdQ98rJXmr spIJTz82MyD9ce+ntGG5cOyuwQPnv5/27LRuZ/YcZNOkgUy4fNffgD6eLdB5c2JERwQW 5G+g== 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=z9+CHMZoGGQ0kyLUVsXDA/Tuh9oFzpRRT79bF9HX1WM=; b=GLXOHh9K9O1Ff5Htp3954efiaslMnJehTrGL2nkucm0tqPl9GXoSP5sxJ193giucAF 8rzgS2zraEbn0t5JRjChZvMIc+m8pfmaJKR6aAtL3ve+418gUuT9Ac+nMVSr9Wg4ftcn mbxtepWEScBg0h6IzBK68KcJYjeQhu+DiyJ3FVGqHK+t14aiAGZQk65U0FDxLZUlJiO7 yeMCmFEm79lWQ227eqe8newJAo7pmcmqe+/MwfjKGnsG4Tl9osjRya2ewwPW7MuaO7L5 OgOZOQ1RsTApjlCCS80yoDP4pEw4q08b4QqoclctEf8VfmRlbJ7R7ulHfEJnQUk7Gjch +pUA== X-Gm-Message-State: APjAAAVNXInm7bGs6ii+1QWrZ94ksM2r41gRBWQ4ILsy3wrgJb3mFLxp k+mAc4IcETDft1kAYN+hyYc= X-Google-Smtp-Source: APXvYqzY6mre08rYa4mbbMCq9jRRTThhJNVYu3dpnIW9ndgbbH9qrwSEqU3nSH70Yx3Ge3a2W+RIVw== X-Received: by 2002:a05:651c:87:: with SMTP id 7mr192095ljq.20.1572904867264; Mon, 04 Nov 2019 14:01:07 -0800 (PST) Received: from localhost.localdomain (94-29-10-250.dynamic.spd-mgts.ru. [94.29.10.250]) by smtp.gmail.com with ESMTPSA id g3sm7454669ljj.59.2019.11.04.14.01.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Nov 2019 14:01:06 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Jonathan Hunter , Tomeu Vizoso , Peter Geis , =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v9 08/19] PM / devfreq: tegra30: Move clk-notifier's registration to governor's start Date: Tue, 5 Nov 2019 00:56:06 +0300 Message-Id: <20191104215617.25544-9-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191104215617.25544-1-digetx@gmail.com> References: <20191104215617.25544-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 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. Reviewed-by: Chanwoo Choi Tested-by: Peter Geis Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra30-devfreq.c | 39 ++++++++++++++++++------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index 2d720e7e2236..6960d8ba0577 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -514,6 +514,21 @@ 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; + } + + tegra->cur_freq = clk_get_rate(tegra->emc_clock) / KHZ; + for (i = 0; i < ARRAY_SIZE(tegra->devices); i++) tegra_actmon_configure_device(tegra, &tegra->devices[i]); @@ -539,6 +554,8 @@ static int tegra_actmon_start(struct tegra_devfreq *tegra) err_stop: tegra_actmon_stop_devices(tegra); + clk_notifier_unregister(tegra->emc_clock, &tegra->clk_rate_change_nb); + return err; } @@ -552,6 +569,8 @@ static void tegra_actmon_stop(struct tegra_devfreq *tegra) cancel_delayed_work_sync(&tegra->cpufreq_update_work); tegra_actmon_stop_devices(tegra); + + clk_notifier_unregister(tegra->emc_clock, &tegra->clk_rate_change_nb); } static int tegra_devfreq_target(struct device *dev, unsigned long *freq, @@ -768,7 +787,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++) { @@ -796,27 +814,20 @@ 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_DELAYED_WORK(&tegra->cpufreq_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 = tegra->cur_freq; + 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); @@ -830,9 +841,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); @@ -849,7 +857,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 Mon Nov 4 21:56:07 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11226647 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 40040112B for ; Mon, 4 Nov 2019 22:19:12 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 1F0A0214E0 for ; Mon, 4 Nov 2019 22:19:12 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="sNRGPYTh" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388984AbfKDWBM (ORCPT ); Mon, 4 Nov 2019 17:01:12 -0500 Received: from mail-lf1-f68.google.com ([209.85.167.68]:45403 "EHLO mail-lf1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388969AbfKDWBK (ORCPT ); Mon, 4 Nov 2019 17:01:10 -0500 Received: by mail-lf1-f68.google.com with SMTP id v8so13411162lfa.12; Mon, 04 Nov 2019 14:01:08 -0800 (PST) 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=rEzUAio8OEZBvo9nZSIV3+A/WsfLupbu1br1SQPd2S0=; b=sNRGPYThLEo6m9M+I5V9UFFOPfVuWsHtnKW7NvWNdf1d6mRVhLECezllEPq0z+73/k uydbKS4hz84tlGFc9GMOGbgh8RYikQYO4D+XinQHsoXrQkcSXIh6E8ToEli1XTibdsdG U3uUKNWXGhrAMKKb5188kU4aB4W9nl0K029R89i/kFxy5NWigTGcqyshYkwo9B1Oy/iq W81a4cwhk86LG4n3bktfJV0nGDSZbjFQ/pgvAp/lMP1QKN5toZvRK/8ZqzztBMlN0Gpf YSD5TIOooqrhPvTLBZzkYGOBZsqdd1mjtcgcuPGZyxzKGNHlrCXSaXouWvWE8EFlGTBL xnvw== 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=rEzUAio8OEZBvo9nZSIV3+A/WsfLupbu1br1SQPd2S0=; b=nPD3SCw86wsTPnaxZp2mEcXet7CsHZS34Qe+2GW7B2zcZOv+ye/KucYvoqFAxQvws3 SKE5tP2SzPlq9lmzoiOkpPat2u+AbU2bCZioUzT0aEHzBV3UeRQ5lDNJAYnGmm9Z7UZv 8lcMD9WmLKAYINqIUXkjT6/7V6cBo6tzMBtaIqw6iha7m+eNALapeRUZYryAs2nIQgrc jFu77IkWEWj+TjpnWDWogwWceVLM12XtCe2wfukJfxvARu3QCOixFA8P/7a4K9eZPQSz IP/IBkowpkpim81vOkoDBNPr9zu0pgwO3Csy1fh+VyRdSNFJ1ESycmSxKi8975T6hXaK mdrg== X-Gm-Message-State: APjAAAWdTZ5yOZgLGPea8kEom2hIJpXUGc3NQhSjyme5E8eUfC0iv044 mdk7Ec/WrgnVn815lmNWVxI= X-Google-Smtp-Source: APXvYqw8G9Mz+XCHuG/7zu1n4bkCyBbNZkVBePFL2zHn8RRF5tzOgQxKS7KsB0OGvci61Sr/Mhpw1g== X-Received: by 2002:a19:750:: with SMTP id 77mr17992493lfh.81.1572904868172; Mon, 04 Nov 2019 14:01:08 -0800 (PST) Received: from localhost.localdomain (94-29-10-250.dynamic.spd-mgts.ru. [94.29.10.250]) by smtp.gmail.com with ESMTPSA id g3sm7454669ljj.59.2019.11.04.14.01.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Nov 2019 14:01:07 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Jonathan Hunter , Tomeu Vizoso , Peter Geis , =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v9 09/19] PM / devfreq: tegra30: Reset boosting on startup Date: Tue, 5 Nov 2019 00:56:07 +0300 Message-Id: <20191104215617.25544-10-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191104215617.25544-1-digetx@gmail.com> References: <20191104215617.25544-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 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. Reviewed-by: Chanwoo Choi Tested-by: Peter Geis Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra30-devfreq.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index 6960d8ba0577..9cb2d6468175 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -467,6 +467,9 @@ static void tegra_actmon_configure_device(struct tegra_devfreq *tegra, { u32 val = 0; + /* reset boosting on governor's restart */ + dev->boost_freq = 0; + dev->target_freq = tegra->cur_freq; dev->avg_count = tegra->cur_freq * ACTMON_SAMPLING_PERIOD; From patchwork Mon Nov 4 21:56:08 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11226583 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A964C15AB for ; Mon, 4 Nov 2019 22:01:13 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 7DF502084D for ; Mon, 4 Nov 2019 22:01:13 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="kF91mmE5" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388986AbfKDWBM (ORCPT ); Mon, 4 Nov 2019 17:01:12 -0500 Received: from mail-lf1-f66.google.com ([209.85.167.66]:40497 "EHLO mail-lf1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388971AbfKDWBL (ORCPT ); Mon, 4 Nov 2019 17:01:11 -0500 Received: by mail-lf1-f66.google.com with SMTP id f4so13449229lfk.7; Mon, 04 Nov 2019 14:01:09 -0800 (PST) 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=g9RKaIiF4lILXf0g5OU6lPR/hR2F0oEkesL+dfO7WO0=; b=kF91mmE5TuLuwd7+S7smRA9aWsyfAuon99V7V0nSBZXIr2Cv4ZwPTgi+3dhkQ/lJEH DJWhdFN4m0liQDYEhzPLLIIHJ42afCEd2M1YAr71X9mdv7zGlyJbnLnjBXySTx8lO3LV 7wvZG5d7GReX2dv4KDCBSStkmro7YgYUYWqdvTVpGF4Mof4B9lxp+7exlkx4G37Ufplm 7X7ey8oEyNjujp0eDQrROQNCWLUoSYTKHpkTlfdavllTbQK19GfkywaGj0J3df2bHt0y 2S6wUsQ9rHgLDhZyjd91ds5tFzAphGv76yI6ZqBqwR7nm8d1TN05eIEwaiDUYN+5NFKr 2TPw== 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=g9RKaIiF4lILXf0g5OU6lPR/hR2F0oEkesL+dfO7WO0=; b=bcc0M+jNZh57n11HvjPZ1ZZk21Am7Km0jemGijI6TEO7Qs9GS3AkoJYAFQG3di51P+ ZxMXFzJYxlSI2Xhq2xkjFBmjy5yxTvicmWUV6RxGXlUScheC6BOLrTIk1wNS3EJ+cm5P Pum6FIONjzfQj29mk9tLV8e1UmXXQa8PLPVhyz+i52o0ZUDAYOeGkLIILmsMMNXi4P7u Ufw5wsZHepi+MkusDboZHKgexstTpQCskap77313eyGNeT+oBa8Wll4EsOk4ecs2hLH+ BTtjaMxRmc695eq/uS3fOvVTLTL6RboN4bT1ZOnWpHP1Z0sPt21RqbFXNtanLlAkwP7Z df7Q== X-Gm-Message-State: APjAAAUIcwHUBOLuoeAfTsomOrwr61jn1hcrzCFPtn7ndENN+yZtdW3y F8YuQbWTRa4KNxqR4vPnYFY= X-Google-Smtp-Source: APXvYqxfGdHoTMAi8ly9Z3bdC4cKcK5I4Mau7VYctsO6RcexwC8hSJXox0rdAwLH02Aj50U5aL7udg== X-Received: by 2002:a19:7511:: with SMTP id y17mr18721120lfe.19.1572904869080; Mon, 04 Nov 2019 14:01:09 -0800 (PST) Received: from localhost.localdomain (94-29-10-250.dynamic.spd-mgts.ru. [94.29.10.250]) by smtp.gmail.com with ESMTPSA id g3sm7454669ljj.59.2019.11.04.14.01.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Nov 2019 14:01:08 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Jonathan Hunter , Tomeu Vizoso , Peter Geis , =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v9 10/19] PM / devfreq: tegra30: Don't enable consecutive-down interrupt on startup Date: Tue, 5 Nov 2019 00:56:08 +0300 Message-Id: <20191104215617.25544-11-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191104215617.25544-1-digetx@gmail.com> References: <20191104215617.25544-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 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. Reviewed-by: Chanwoo Choi Tested-by: Peter Geis 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 9cb2d6468175..bc46af155b99 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -490,7 +490,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 Mon Nov 4 21:56:09 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11226649 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 83FC6112B for ; Mon, 4 Nov 2019 22:19:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 627AB217F5 for ; Mon, 4 Nov 2019 22:19:15 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="hxiuORP6" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389422AbfKDWTL (ORCPT ); Mon, 4 Nov 2019 17:19:11 -0500 Received: from mail-lf1-f65.google.com ([209.85.167.65]:41491 "EHLO mail-lf1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388974AbfKDWBM (ORCPT ); Mon, 4 Nov 2019 17:01:12 -0500 Received: by mail-lf1-f65.google.com with SMTP id j14so13448551lfb.8; Mon, 04 Nov 2019 14:01:10 -0800 (PST) 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=DjmXiphEj07PA2UBQ1Hu0F6jo40/2DwonMVrwbYxHC4=; b=hxiuORP6XfkMPL7hYETvI1R7UGZJg1RRsvu6RE+K+jruMTpnzXRtQGBL3yz97KYT/7 vxDqVcdchqidjMkOMoL8IST46v2Y+LrfLbYWP3jL0FpynbbG9Uz1vD54M6l1mBF6rwdQ /xg02E/v+yYy0nKSqLBgLxz9IDsikOVwgcxTdNdKTZxr/VPXRmZga0T/AW68AlGK42c1 VcmQJLL3S7YIU7bXLdQpHm+2r4plW7ARxwoASQZRTDOz31Uz6yyQtyq4OpLPMjX03ZDK hRhmel73Btv/f19/6e58WzD+J2hfiCuu8yWAG4OJNJpV9dyA7Iqfs+uCPtqTdM7Y0Ge8 zaoQ== 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=DjmXiphEj07PA2UBQ1Hu0F6jo40/2DwonMVrwbYxHC4=; b=FdWQFdx7WqvuSn5zMrHFBWm88VrD+H7Lv8d+hAtALcjxVnA7100jXmRNwrZHfSCzJW z9G+aidz7ZnxprtUTq7silh3RRo54Uttt9ctkv8JwJydFJZ8HPhQphH0uEArqD0d++yG x9uv3r2qodCtUkHPYDDWeJeWZ3LV65FjKVqt+xt9sR34ZB/FYxBfqSqJ7w7/Q+LLZgkG HkZouSMcYLIUmLUw0tCzlYZYA3EFJGKOsvNjBPy0iA7+4u8PhXneISVyvTyeCYoPUTLH UuPnBBfpIA5YdNhqEtzII+ayqHf2/TRBlbBhRzoEV0mK6yYhuw/3eex8RULJhP+RWH34 B0Rg== X-Gm-Message-State: APjAAAVnL7oZ2uTnvlnbUewzQa1W7jUGN753tQeYEQXoLktqZp3pexLH NKqqzUTiGbhXLem4gpBeF6w= X-Google-Smtp-Source: APXvYqwPUNwk60VBN+9D8hxM0iRLNxIuCjMxQD2kbfuS7YKAm4CWDBCRFT0IVamMwv0K0yvJXu/Sjg== X-Received: by 2002:ac2:5b42:: with SMTP id i2mr18356665lfp.164.1572904870097; Mon, 04 Nov 2019 14:01:10 -0800 (PST) Received: from localhost.localdomain (94-29-10-250.dynamic.spd-mgts.ru. [94.29.10.250]) by smtp.gmail.com with ESMTPSA id g3sm7454669ljj.59.2019.11.04.14.01.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Nov 2019 14:01:09 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Jonathan Hunter , Tomeu Vizoso , Peter Geis , =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v9 11/19] PM / devfreq: tegra30: Constify structs Date: Tue, 5 Nov 2019 00:56:09 +0300 Message-Id: <20191104215617.25544-12-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191104215617.25544-1-digetx@gmail.com> References: <20191104215617.25544-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 Constify unmodifiable structs, for consistency. Reviewed-by: Chanwoo Choi Tested-by: Peter Geis Signed-off-by: Dmitry Osipenko --- 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 bc46af155b99..9bd4dd982927 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -108,7 +108,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, @@ -177,7 +177,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, KHZ_MAX }, { 1200000, 750000 }, { 1100000, 600000 }, @@ -295,7 +295,7 @@ 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; + const 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) { From patchwork Mon Nov 4 21:56:10 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11226645 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1E04315AB for ; Mon, 4 Nov 2019 22:19:11 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id F13CA21D7F for ; Mon, 4 Nov 2019 22:19:10 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="jnd4hIvx" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388989AbfKDWBN (ORCPT ); Mon, 4 Nov 2019 17:01:13 -0500 Received: from mail-lj1-f196.google.com ([209.85.208.196]:40808 "EHLO mail-lj1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388979AbfKDWBN (ORCPT ); Mon, 4 Nov 2019 17:01:13 -0500 Received: by mail-lj1-f196.google.com with SMTP id q2so12847107ljg.7; Mon, 04 Nov 2019 14:01:11 -0800 (PST) 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=poTJBSF/GUDkNTSs4u0rRqSIrUnXV6hdBnQ1YS7E5D8=; b=jnd4hIvxBfGM3BwmmoAgZifQmAV1bkMm/UctTvqlbRpUbU8MxGIKVLlooMYyjNju/5 umBHr+YS5YZec95U7fShlVigQnntezfk1GYJ2651gyIu2GQAkPAFOceNra8DXxXP6E3Z vMsPtOOpyvm1q/dtkcVc37aHIsidMH3tC60i97NR+qQQMcPb18FYlzK92CmMjBIfY95g wIBdAIWsEUP/BZH/JMFFIt8UnQRWbaEI/RPBlBup6AyUMBR588LDPP80DkTikjPoE377 xbV7wIywbBX1KjYv6Xv00QnKMMyfKI4xlGt6xsN4tLyOQLmAklzY/BP6TBXP6zdrTD5+ Fgdg== 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=poTJBSF/GUDkNTSs4u0rRqSIrUnXV6hdBnQ1YS7E5D8=; b=OVm8imJX/G1h+RCxPHhnO3S/fGnMIXPcyLNroxhES2kwFCxcxk+S5/oUslKNHfzdrv p8hMtF7nyFZO3MYztVEhJFUtD7kY5aLZF3R2bdfgXFXO0GDeKWkfXDolxvhLvc74Klvl n1r127Yi/bHXXKxqofP9NoqbwA2Tw0wufEuygNbzZJSJLKTpKOwXUQSxx0tVlaLwie4T GWgsqYJuLUN0GPain/ElOXiNkNahRD+YTkUZRIohguguThoJecmkR2E6VdzsD7oifj0t aupsTmFAhpaVOvPCA1kwifFERz+qxpiOzF/m6Chh5Cot8gEDpO2i0a4fPQ08zLTn6p08 7K2w== X-Gm-Message-State: APjAAAVMC72mSyT7hn5WG/vhEKxPeP1mMYWOQGyLrCUjes+D8CRP7Z5L otL2+qcfV98eiI58fFsNsAo= X-Google-Smtp-Source: APXvYqy7ugXp6y2JKp7I43IqVyG5wWQmxrO2L4CODFzHF2NcCLMRQ+fBBc5rH/3tVmnrxZcP6Xdk2w== X-Received: by 2002:a05:651c:10e:: with SMTP id a14mr19835328ljb.177.1572904871025; Mon, 04 Nov 2019 14:01:11 -0800 (PST) Received: from localhost.localdomain (94-29-10-250.dynamic.spd-mgts.ru. [94.29.10.250]) by smtp.gmail.com with ESMTPSA id g3sm7454669ljj.59.2019.11.04.14.01.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Nov 2019 14:01:10 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Jonathan Hunter , Tomeu Vizoso , Peter Geis , =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v9 12/19] PM / devfreq: tegra30: Include appropriate header Date: Tue, 5 Nov 2019 00:56:10 +0300 Message-Id: <20191104215617.25544-13-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191104215617.25544-1-digetx@gmail.com> References: <20191104215617.25544-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 It's not very correct to include mod_devicetable.h for the OF device drivers and of_device.h should be included instead. Reviewed-by: Chanwoo Choi Tested-by: Peter Geis Signed-off-by: Dmitry Osipenko --- 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 9bd4dd982927..7c8126e74750 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 Mon Nov 4 21:56:11 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11226643 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id CAA9413BD for ; Mon, 4 Nov 2019 22:19:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id A9CC3217F5 for ; Mon, 4 Nov 2019 22:19:10 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="AdCjSD8T" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390237AbfKDWTG (ORCPT ); Mon, 4 Nov 2019 17:19:06 -0500 Received: from mail-lj1-f196.google.com ([209.85.208.196]:33804 "EHLO mail-lj1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388427AbfKDWBO (ORCPT ); Mon, 4 Nov 2019 17:01:14 -0500 Received: by mail-lj1-f196.google.com with SMTP id 139so19447487ljf.1; Mon, 04 Nov 2019 14:01:12 -0800 (PST) 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=1R8aUcZkIlTPITklCBswnMHd9GSu3KTIu0/oTyANNB4=; b=AdCjSD8TnsTPwI4dFdR0KQGG86VvivC4CHxoQEHZFgXtYxIe04LMlVEyzMMVo+k35I r5xzm06wZt/7uwOCNPpnvyeYCxEX8xU6mq3qB3emhUUfD3rll39D2PXzd5CRYNRdYDuG q99yY6GWGcIlUeCGAizEeyjhpFLGfFifdVRFwPtZdpY27kIRbPxWGMg1my64B4HBre8u jMCVZM17pJLLlWrmxD1hOMVQwvziKJDVqoiBU14PoeM+nhdasvkwzTNuBPjqEv6KQ/c7 q8CpVCuhoOmzQ6tf/MyPQt2DbZ49L+PWc6gRvbE1/MWrexx1rPUT5d8kRLh15Esz0mbD cIYw== 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=1R8aUcZkIlTPITklCBswnMHd9GSu3KTIu0/oTyANNB4=; b=V95CFftRt0Pu84xDAEpgGqzUwbnzqcVRihqIMH8XFH0txANl166q3e80o2JgAjupdc D13OjoJoSxnaffE/KwnapsHviFjpKSVsSqQH2o9MWhwe4sQhU6LpFM5UaCc8+20p2zf2 F7D5u1XesIu1JbcKMaTO0WneHi6lp4UMPKVHmUYKFelzxmCNGafiTM8emICMJIDFwbD+ +DQtQZNpcbZInrvheYsj5JA55Ry+8JkY3cmpxCqrSLlmeF926O5fLi3EsqejUwDLemde VJd4YrLvSkQfKn6T15uRcQRax2xUuErQw4CsQR9EORwbINwEKp8wDmdkPjCv4A1BkgRq QLvA== X-Gm-Message-State: APjAAAU4N0KkpYRNF5EhDqih77CzWG1P1sOoCNsjPVfC4yFGXolnIl7H sOZ6BOOTq1qLuRTeb1m7TLM= X-Google-Smtp-Source: APXvYqwoC5tiuhzzXdz5nXIupEbKytBtgYU2M8i1VDswQwmIJLCpT4jGS7xdYXsy77a+5/0pthzofg== X-Received: by 2002:a2e:b5c4:: with SMTP id g4mr20568516ljn.169.1572904872002; Mon, 04 Nov 2019 14:01:12 -0800 (PST) Received: from localhost.localdomain (94-29-10-250.dynamic.spd-mgts.ru. [94.29.10.250]) by smtp.gmail.com with ESMTPSA id g3sm7454669ljj.59.2019.11.04.14.01.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Nov 2019 14:01:11 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Jonathan Hunter , Tomeu Vizoso , Peter Geis , =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v9 13/19] PM / devfreq: tegra30: Don't enable already enabled consecutive interrupts Date: Tue, 5 Nov 2019 00:56:11 +0300 Message-Id: <20191104215617.25544-14-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191104215617.25544-1-digetx@gmail.com> References: <20191104215617.25544-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 Consecutive up/down interrupt-bit is set in the interrupt status register only if that interrupt was previously enabled. Thus enabling the already enabled interrupt doesn't do much for us. Reviewed-by: Chanwoo Choi Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra30-devfreq.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index 7c8126e74750..4a5d513904a2 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -261,8 +261,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 @@ -275,8 +273,6 @@ static void actmon_isr_device(struct tegra_devfreq *tegra, 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) { From patchwork Mon Nov 4 21:56:12 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11226641 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 06BEF112B for ; Mon, 4 Nov 2019 22:19:07 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id D8672214D9 for ; Mon, 4 Nov 2019 22:19:06 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="YDYzQa8F" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389839AbfKDWTB (ORCPT ); Mon, 4 Nov 2019 17:19:01 -0500 Received: from mail-lf1-f66.google.com ([209.85.167.66]:35906 "EHLO mail-lf1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388992AbfKDWBP (ORCPT ); Mon, 4 Nov 2019 17:01:15 -0500 Received: by mail-lf1-f66.google.com with SMTP id a6so10055788lfo.3; Mon, 04 Nov 2019 14:01:13 -0800 (PST) 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=vussPT96FtSPVjSwb6+813KWc5582WBbmxbN3o4f6zQ=; b=YDYzQa8Fq+Cprh60WDBen1OPYtQavoJAh2WTKty0HKuU+Ya/dVRr1LhNdALp/lNEtp IvnLJvDnFeUYwEteM2JNxtogCvz8YfbW6I1oys7heTjlvG2SBcnC0ndVH3uF1B2bXw6s VZk5qpWkTTHzSKMdU4ONGbK/s+OxOh0JaUvnDtcutpmpABKeJQlg/6ybYeRWsdEiLxxJ C3iQLrq4cBZBqxm54Q/D7NltmXQITGUSSp550MSjTdqwfwdf59j7jRIWiqkCNjVJVakK +YaJpae6QZ6FzDBcH2DlvyCvtMwIv4ulHCVCKF3bWcl3/VFmvcJ64741t0cWKi9nFE+r hxvQ== 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=vussPT96FtSPVjSwb6+813KWc5582WBbmxbN3o4f6zQ=; b=ADXW5UBgLArlXPVmjsUKXcUdX3i+c+zIIOMppJ625z4fQcrPlghm3RvgMHvoha4awQ 53ep+XzIa6YiWQRPl0VDUAe5i7aBekEg6ua45H2+DH787f87dr9CcW6H2xm03Zle2iQQ 5fpiW3UnyZvTVl46vyzbmiOR7aMdfB67cCcfhig3baGzZzYbFajAh5Ul67HXvHHEp0kI oNSSxgxdtrvh8JSV9NUQ/F7xSq7GdCyPfne+7PIqLrVQxMJjFAXmqxXvE1BKHGG0ZBmu ydN/ZEwaNdBuosrg89tJ5Z8b2mLiEP0luRaUto86B0JnVpEDtx3/Rh6FUpD1Bm4nRnR1 1whg== X-Gm-Message-State: APjAAAWr4AGNUtFXlrMItXQj/ixWKHhxmg3dSYveVlNdZlBHmZHuEVHi Z1ddNQxrYgBJm3Hq1+975tE= X-Google-Smtp-Source: APXvYqzszaal34wn8DMXeS1z/UAh6z+OO3f2A2KgXGOoTN1Lezkr4LrIPvW4BdwQzPzUoLshT4Qurw== X-Received: by 2002:ac2:4357:: with SMTP id o23mr5831872lfl.51.1572904872931; Mon, 04 Nov 2019 14:01:12 -0800 (PST) Received: from localhost.localdomain (94-29-10-250.dynamic.spd-mgts.ru. [94.29.10.250]) by smtp.gmail.com with ESMTPSA id g3sm7454669ljj.59.2019.11.04.14.01.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Nov 2019 14:01:12 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Jonathan Hunter , Tomeu Vizoso , Peter Geis , =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v9 14/19] PM / devfreq: tegra30: Disable consecutive interrupts when appropriate Date: Tue, 5 Nov 2019 00:56:12 +0300 Message-Id: <20191104215617.25544-15-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191104215617.25544-1-digetx@gmail.com> References: <20191104215617.25544-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 Consecutive interrupts should be disabled when boosting is completed. Currently the disabling of "lower" interrupt happens only for MCCPU monitor that uses dependency threshold, but even in a case of MCCPU the interrupt isn't getting disabled if CPU's activity is above the threshold. This results in a lot of dummy interrupt requests. The boosting feature is used by both MCCPU and MCALL, boosting should be stopped once it reaches 0 for both of the monitors and regardless of the activity level. The boosting stops to grow once the maximum limit is hit and thus the "upper" interrupt needs to be disabled when the limit is reached. Reviewed-by: Chanwoo Choi Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra30-devfreq.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index 4a5d513904a2..852bde6249c7 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -259,8 +259,10 @@ static void actmon_isr_device(struct tegra_devfreq *tegra, dev_ctrl |= ACTMON_DEV_CTRL_CONSECUTIVE_BELOW_WMARK_EN; - if (dev->boost_freq >= tegra->max_freq) + if (dev->boost_freq >= tegra->max_freq) { + dev_ctrl &= ~ACTMON_DEV_CTRL_CONSECUTIVE_ABOVE_WMARK_EN; dev->boost_freq = tegra->max_freq; + } } else if (intr_status & ACTMON_DEV_INTR_CONSECUTIVE_LOWER) { /* * new_boost = old_boost * down_coef @@ -271,15 +273,10 @@ static void actmon_isr_device(struct tegra_devfreq *tegra, dev_ctrl |= ACTMON_DEV_CTRL_CONSECUTIVE_ABOVE_WMARK_EN; - if (dev->boost_freq < (ACTMON_BOOST_FREQ_STEP >> 1)) - dev->boost_freq = 0; - } - - 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) + if (dev->boost_freq < (ACTMON_BOOST_FREQ_STEP >> 1)) { dev_ctrl &= ~ACTMON_DEV_CTRL_CONSECUTIVE_BELOW_WMARK_EN; + dev->boost_freq = 0; + } } device_writel(dev, dev_ctrl, ACTMON_DEV_CTRL); From patchwork Mon Nov 4 21:56:13 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11226639 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id AC2BD15AB for ; Mon, 4 Nov 2019 22:19:00 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 8AA4A22459 for ; Mon, 4 Nov 2019 22:19:00 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="upNJ9E2j" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389008AbfKDWBR (ORCPT ); Mon, 4 Nov 2019 17:01:17 -0500 Received: from mail-lf1-f65.google.com ([209.85.167.65]:37767 "EHLO mail-lf1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388640AbfKDWBQ (ORCPT ); Mon, 4 Nov 2019 17:01:16 -0500 Received: by mail-lf1-f65.google.com with SMTP id b20so13460581lfp.4; Mon, 04 Nov 2019 14:01:14 -0800 (PST) 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=0ir9eKbXc6Lss3IzWfP9NOi9af5oEA76jnD0uxcVIaA=; b=upNJ9E2jKEUAAb3pTAh964SRIQ//jhLdM2MAyOGmORh7sLTiMZmBSNBk/sIZ+8f2yQ W8vwBRe7jIFoG7FRGzZStkDFoojr3rpirz+FlYDXGKlNR4YX54FEQ/gZC0Hmy8sFaTOR 7HsQNXMHExEnImP+RAjlJbbxZa3sG5i+57U+dDqvYWEhVnkPgsVgNRfYklrx4jx9k/Zh dRLpx6kFq/DowueKVfcqZ6WyozjFkehC9g5pvF7yJ2VqlQuEK/dMSBnNfBM1oUNOqotz 9OwjYsfnydBS5pGCJp5y8dDDqToZZqTWRf4/fwRySumcUOhv8+IMDTIF/OW9aV7yfqbG LsTQ== 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=0ir9eKbXc6Lss3IzWfP9NOi9af5oEA76jnD0uxcVIaA=; b=nFd6C8eOjGR7rdCsCIB1O8YMxk+IkXzVj6OAOjkXFVJJQwmv5Im16kRFovbLndpYvx tG9ZjOwWg0Y1hTY1FO4527O0TcpMFvqUgb2cpMfrnmkUikDWA0huqiQCVs5WwVBQe+48 tOvgoxoLS2gcmSSW/KrSIOuyI/zsIlFVUPL5BwXkwdKqsTGQ99S/XVdmIi85VWQbhZlV zOnliemiHUZacuIWoCBsA0/DE2yx4OkKkebxX6kPXxxofbQJFgm9yGdSTgY+rEcWS8Ox nb4mM5vWrzFf+Fb+t3pBqilSM8fKW2D5VPU/6bmdz0ElN0LORqjw/OYWsdPXr2fzI5EQ pBIg== X-Gm-Message-State: APjAAAXcQnZ1PB8mReYKcYe7pstog15JylC+hJ4qwGoXjYG/fzf/UmS1 mqAC+h/WgqY3XT9/QsvsXl0= X-Google-Smtp-Source: APXvYqyi2f0gTy3fSarJeQdztzRxkcb9mXJ3w4lR7MaZJKVMcWZQ9I7l3ogdw8WyZtfaIGANdfz3QA== X-Received: by 2002:a19:7515:: with SMTP id y21mr17999797lfe.96.1572904873837; Mon, 04 Nov 2019 14:01:13 -0800 (PST) Received: from localhost.localdomain (94-29-10-250.dynamic.spd-mgts.ru. [94.29.10.250]) by smtp.gmail.com with ESMTPSA id g3sm7454669ljj.59.2019.11.04.14.01.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Nov 2019 14:01:13 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Jonathan Hunter , Tomeu Vizoso , Peter Geis , =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v9 15/19] PM / devfreq: tegra30: Use kHz units for dependency threshold Date: Tue, 5 Nov 2019 00:56:13 +0300 Message-Id: <20191104215617.25544-16-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191104215617.25544-1-digetx@gmail.com> References: <20191104215617.25544-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 The dependency threshold designates a memory activity level below which CPU's frequency isn't accounted. Currently the threshold is given in "memory cycle" units and that value depends on the polling interval which is fixed to 12ms in the driver. Later on we'd want to add support for a variable polling interval and thus the threshold value either needs to be scaled in accordance to the polling interval or it needs to be represented in a units that do not depend on the polling interval. It is nicer to have threshold value being defined independently of the polling interval, thus this patch converts the dependency threshold units from "cycle" to "kHz". Having this change as a separate-preparatory patch will make easier to follow further patches. Signed-off-by: Dmitry Osipenko Reviewed-by: Chanwoo Choi --- drivers/devfreq/tegra30-devfreq.c | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index 852bde6249c7..3bd920829bfd 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -96,9 +96,10 @@ struct tegra_devfreq_device_config { unsigned int boost_down_threshold; /* - * Threshold of activity (cycles) below which the CPU frequency isn't - * to be taken into account. This is to avoid increasing the EMC - * frequency when the CPU is very busy but not accessing the bus often. + * Threshold of activity (cycles translated to kHz) below which the + * CPU frequency isn't to be taken into account. This is to avoid + * increasing the EMC frequency when the CPU is very busy but not + * accessing the bus often. */ u32 avg_dependency_threshold; }; @@ -126,7 +127,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 = 16000, /* 16MHz in kHz units */ }, }; @@ -311,7 +312,6 @@ static unsigned long actmon_device_target_freq(struct tegra_devfreq *tegra, target_freq = dev->avg_count / ACTMON_SAMPLING_PERIOD; avg_sustain_coef = 100 * 100 / dev->config->boost_up_threshold; target_freq = do_percent(target_freq, avg_sustain_coef); - target_freq += dev->boost_freq; return target_freq; } @@ -322,15 +322,18 @@ static void actmon_update_target(struct tegra_devfreq *tegra, unsigned long cpu_freq = 0; unsigned long static_cpu_emc_freq = 0; - if (dev->config->avg_dependency_threshold) { + dev->target_freq = actmon_device_target_freq(tegra, dev); + + if (dev->config->avg_dependency_threshold && + dev->config->avg_dependency_threshold <= dev->target_freq) { cpu_freq = cpufreq_quick_get(0); static_cpu_emc_freq = actmon_cpu_to_emc_rate(tegra, cpu_freq); - } - dev->target_freq = actmon_device_target_freq(tegra, dev); - - if (dev->avg_count >= dev->config->avg_dependency_threshold) + dev->target_freq += dev->boost_freq; dev->target_freq = max(dev->target_freq, static_cpu_emc_freq); + } else { + dev->target_freq += dev->boost_freq; + } } static irqreturn_t actmon_thread_isr(int irq, void *data) @@ -396,15 +399,16 @@ static unsigned long tegra_actmon_cpufreq_contribution(struct tegra_devfreq *tegra, unsigned int cpu_freq) { + struct tegra_devfreq_device *actmon_dev = &tegra->devices[MCCPU]; unsigned long static_cpu_emc_freq, dev_freq; + dev_freq = actmon_device_target_freq(tegra, actmon_dev); + /* check whether CPU's freq is taken into account at all */ - if (tegra->devices[MCCPU].avg_count < - tegra->devices[MCCPU].config->avg_dependency_threshold) + if (dev_freq < actmon_dev->config->avg_dependency_threshold) return 0; static_cpu_emc_freq = actmon_cpu_to_emc_rate(tegra, cpu_freq); - dev_freq = actmon_device_target_freq(tegra, &tegra->devices[MCCPU]); if (dev_freq >= static_cpu_emc_freq) return 0; From patchwork Mon Nov 4 21:56:14 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11226637 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 8137913BD for ; Mon, 4 Nov 2019 22:19:00 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 53FDA217F5 for ; Mon, 4 Nov 2019 22:19:00 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="koN7DB+Z" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389011AbfKDWBR (ORCPT ); Mon, 4 Nov 2019 17:01:17 -0500 Received: from mail-lj1-f195.google.com ([209.85.208.195]:37438 "EHLO mail-lj1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388999AbfKDWBR (ORCPT ); Mon, 4 Nov 2019 17:01:17 -0500 Received: by mail-lj1-f195.google.com with SMTP id l20so732198lje.4; Mon, 04 Nov 2019 14:01:15 -0800 (PST) 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=bKkhPNpVCeAxCnkh4nfALfAwjSjtpvS+Vk+nADvtRH0=; b=koN7DB+ZefwCQMKp/nxsHUfDct6cxXA5tbzeGSH0sZe0C9rluLztAwaykp2gdWcuww idUskPNVZEZ9uI+DkP2qW/sKLimLG36AX4UUbkx4nTtoz280R2qFcix6k18Tl7MYn7Jk h7orxd2srF2Pm/GTsJwj1zffFUMiCFbPgH2IXPaUGInodYBRIgAhzp1xODedTtY7N5fb KIdyNHSR4fJBlf8rtvpY+LRbCwsxeykamJ1BHRB6K1qSM0HKYhMrA1AsCaOjBDQuwNZU 2WT+EqoeNt6j+RujVrXMWkxbGPviyaZhgUmiqcL0jpX/Wul4sJ7+Lo9RpbDcKz5WZou2 EE/w== 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=bKkhPNpVCeAxCnkh4nfALfAwjSjtpvS+Vk+nADvtRH0=; b=RlsSNex7+php9Dz6366k7f8IstzUnh9ZSpaMth0r9D6zV57ugIXs1prjwhXS3uiFiq bHofm9yHms6LzGZniSOmOUTk45J3/TQNGGg0l/AaQm2W1NTjBTqMEwKrEwuBRDjL1O5L ngeVOpmRdCOjk3+mnZ8bgnofxvABWhtBe9nofdf/RQhWuv5XEsjyqVeG27nxQYOozhiR ezsuBL0vNtNLkEZZhOwjhqlvGyElMUT4MS8zkXkLs42YUnxGlmRpcRQn9JRaj+Aoxa72 RqFnlJXgJW4S1Ooajm/MozXiGhPxWAVQDrI+3HuSFlAq2zThKfmm+yp8SrC0BEViCQYj d6SA== X-Gm-Message-State: APjAAAVY85e6G80Hlzhk4yvGN3199AtgTkuNr280zwV0Fo/iP49UpwFP BpW2OmpX+oo4EPYeFGcEJT8= X-Google-Smtp-Source: APXvYqwYiPr+gYGHNCklPmFijFb1E/THpBVHFVr4bLo9PkUH8EIm9ISa8vfr6rqayJ2Ph37eSnD3nw== X-Received: by 2002:a2e:970e:: with SMTP id r14mr4447739lji.57.1572904874763; Mon, 04 Nov 2019 14:01:14 -0800 (PST) Received: from localhost.localdomain (94-29-10-250.dynamic.spd-mgts.ru. [94.29.10.250]) by smtp.gmail.com with ESMTPSA id g3sm7454669ljj.59.2019.11.04.14.01.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Nov 2019 14:01:14 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Jonathan Hunter , Tomeu Vizoso , Peter Geis , =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v9 16/19] PM / devfreq: Add new interrupt_driven flag for governors Date: Tue, 5 Nov 2019 00:56:14 +0300 Message-Id: <20191104215617.25544-17-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191104215617.25544-1-digetx@gmail.com> References: <20191104215617.25544-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 Currently interrupt-driven governors (like NVIDIA Tegra30 ACTMON governor) are used to set polling_ms=0 in order to avoid periodic polling of device status by devfreq core. This means that polling interval can't be changed by userspace for such governors. The new governor flag allows interrupt-driven governors to convey that devfreq core shouldn't perform polling of device status and thus generic devfreq polling interval could be supported by these governors now. Signed-off-by: Dmitry Osipenko Reviewed-by: Chanwoo Choi --- drivers/devfreq/devfreq.c | 17 +++++++++++++++++ drivers/devfreq/governor.h | 3 +++ 2 files changed, 20 insertions(+) diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c index b905963cea7d..4eff37e8bb07 100644 --- a/drivers/devfreq/devfreq.c +++ b/drivers/devfreq/devfreq.c @@ -409,6 +409,9 @@ static void devfreq_monitor(struct work_struct *work) */ void devfreq_monitor_start(struct devfreq *devfreq) { + if (devfreq->governor->interrupt_driven) + return; + INIT_DEFERRABLE_WORK(&devfreq->work, devfreq_monitor); if (devfreq->profile->polling_ms) queue_delayed_work(devfreq_wq, &devfreq->work, @@ -426,6 +429,9 @@ EXPORT_SYMBOL(devfreq_monitor_start); */ void devfreq_monitor_stop(struct devfreq *devfreq) { + if (devfreq->governor->interrupt_driven) + return; + cancel_delayed_work_sync(&devfreq->work); } EXPORT_SYMBOL(devfreq_monitor_stop); @@ -453,6 +459,10 @@ void devfreq_monitor_suspend(struct devfreq *devfreq) devfreq_update_status(devfreq, devfreq->previous_freq); devfreq->stop_polling = true; mutex_unlock(&devfreq->lock); + + if (devfreq->governor->interrupt_driven) + return; + cancel_delayed_work_sync(&devfreq->work); } EXPORT_SYMBOL(devfreq_monitor_suspend); @@ -473,11 +483,15 @@ void devfreq_monitor_resume(struct devfreq *devfreq) if (!devfreq->stop_polling) goto out; + if (devfreq->governor->interrupt_driven) + goto out_update; + if (!delayed_work_pending(&devfreq->work) && devfreq->profile->polling_ms) queue_delayed_work(devfreq_wq, &devfreq->work, msecs_to_jiffies(devfreq->profile->polling_ms)); +out_update: devfreq->last_stat_updated = jiffies; devfreq->stop_polling = false; @@ -509,6 +523,9 @@ void devfreq_interval_update(struct devfreq *devfreq, unsigned int *delay) if (devfreq->stop_polling) goto out; + if (devfreq->governor->interrupt_driven) + goto out; + /* if new delay is zero, stop polling */ if (!new_delay) { mutex_unlock(&devfreq->lock); diff --git a/drivers/devfreq/governor.h b/drivers/devfreq/governor.h index bbe5ff9fcecf..dc7533ccc3db 100644 --- a/drivers/devfreq/governor.h +++ b/drivers/devfreq/governor.h @@ -31,6 +31,8 @@ * @name: Governor's name * @immutable: Immutable flag for governor. If the value is 1, * this govenror is never changeable to other governor. + * @interrupt_driven: Devfreq core won't schedule polling work for this + * governor if value is set to 1. * @get_target_freq: Returns desired operating frequency for the device. * Basically, get_target_freq will run * devfreq_dev_profile.get_dev_status() to get the @@ -49,6 +51,7 @@ struct devfreq_governor { const char name[DEVFREQ_NAME_LEN]; const unsigned int immutable; + const unsigned int interrupt_driven; int (*get_target_freq)(struct devfreq *this, unsigned long *freq); int (*event_handler)(struct devfreq *devfreq, unsigned int event, void *data); From patchwork Mon Nov 4 21:56:15 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11226633 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 0283B13BD for ; Mon, 4 Nov 2019 22:18:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id C8760217F5 for ; Mon, 4 Nov 2019 22:18:49 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="nIngTQUl" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388930AbfKDWBT (ORCPT ); Mon, 4 Nov 2019 17:01:19 -0500 Received: from mail-lj1-f193.google.com ([209.85.208.193]:44166 "EHLO mail-lj1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388932AbfKDWBT (ORCPT ); Mon, 4 Nov 2019 17:01:19 -0500 Received: by mail-lj1-f193.google.com with SMTP id g3so13275877ljl.11; Mon, 04 Nov 2019 14:01:16 -0800 (PST) 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=RVyypLWArLwRMapvcjjP++4okNfEsrnb9+mcTr4Flpc=; b=nIngTQUlQTRyU7ARgBuzQfHFolIxtzhXr0aLpOY4V7VOempJFhPd1fPk3ZnKlnEBWM 9/juwJqdqdJOpWW6q7b/nlRyIEVStBUmsLbFl/C1QojE8z1NUYIJw1yjG8+9MEUxa1pd db3Sz4cSEi7LjO/ZL99/lwE9RThbvwo6/4w92uR5NjFd6Y0SHCMt7akWQTb0yd3s1bMt wfMcRT8Qw2jj6SPs70s/ptnXMxGAKJHTaXaQtethoFyEl0S9BRe9FsTNZNOTWv3sT739 DnAC1VctXSN6Neg8wMJtW+7Vt0UBqQ2c1tpN8BhBDQRklpvxr7xb9JOOLRfuLZ343L7r c1hw== 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=RVyypLWArLwRMapvcjjP++4okNfEsrnb9+mcTr4Flpc=; b=hsOnYuBKDS4l/jX2wQUOGwC7RMHfRp8aaNtNXlLeZH5tWVran4rkYp4cf6VlDqTDU6 3Ba2qLypmC9oLz5VkiC5158eIcsUPh6tmp/npg13hVSZ1Jm0zjIB61vCvpiIywR+/tyE LjwI+eajllHKOrg7Rw6tNjr+Qu2B2bU5gSSAGY6NnMUPmU9d5wh+8JJ05e8cL3HQ3nid z7u5zoWCmiBUf4E1Crxw03WnM+e4WaMLtCqQrk6/BEcRXuLJ1lGl8V0lDDvG7U6BMpxg jbH+MjqE+48neWpCKp/QBVe5WXJ0QB9SIc8Gj3pv5YqtYw4VZpUAI1MogHEHRsR81FUY jNbg== X-Gm-Message-State: APjAAAVeZM++R7D3PykoHQDsSRIyESf4sIm9r5F9DgltA/wMZKaBtBnZ McAO7HO35Of8obb8hWzHfO4= X-Google-Smtp-Source: APXvYqzS+RU1VFsp3K24na/Ur5f7fxpvKpLm/W/sjywk+cCqIvKy+rPUIRp/8bXx6WiTCnfFAJwZsQ== X-Received: by 2002:a2e:7c16:: with SMTP id x22mr21064365ljc.94.1572904875747; Mon, 04 Nov 2019 14:01:15 -0800 (PST) Received: from localhost.localdomain (94-29-10-250.dynamic.spd-mgts.ru. [94.29.10.250]) by smtp.gmail.com with ESMTPSA id g3sm7454669ljj.59.2019.11.04.14.01.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Nov 2019 14:01:15 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Jonathan Hunter , Tomeu Vizoso , Peter Geis , =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v9 17/19] PM / devfreq: tegra30: Support variable polling interval Date: Tue, 5 Nov 2019 00:56:15 +0300 Message-Id: <20191104215617.25544-18-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191104215617.25544-1-digetx@gmail.com> References: <20191104215617.25544-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 The ACTMON governor is interrupt-driven and currently hardware's polling interval is fixed to 16ms in the driver. Devfreq supports variable polling interval by the generic governors, let's re-use the generic interface for changing of the polling interval. Now the polling interval can be changed dynamically via /sys/class/devfreq/devfreq0/polling_interval. Signed-off-by: Dmitry Osipenko Reviewed-by: Chanwoo Choi --- drivers/devfreq/tegra30-devfreq.c | 78 ++++++++++++++++++++++++++----- 1 file changed, 66 insertions(+), 12 deletions(-) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index 3bd920829bfd..e44f1a48f838 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -171,6 +171,8 @@ struct tegra_devfreq { struct tegra_devfreq_device devices[ARRAY_SIZE(actmon_device_configs)]; unsigned int irq; + + bool started; }; struct tegra_actmon_emc_ratio { @@ -209,18 +211,26 @@ static void device_writel(struct tegra_devfreq_device *dev, u32 val, writel_relaxed(val, dev->regs + offset); } -static unsigned long do_percent(unsigned long val, unsigned int pct) +static unsigned long do_percent(unsigned long long val, unsigned int pct) { - return val * pct / 100; + val = val * pct; + do_div(val, 100); + + /* + * High freq + high boosting percent + large polling interval are + * resulting in integer overflow when watermarks are calculated. + */ + return min_t(u64, val, U32_MAX); } 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; + u32 band = avg_band_freq * tegra->devfreq->profile->polling_ms; + u32 avg; + avg = min(dev->avg_count, U32_MAX - band); device_writel(dev, avg + band, ACTMON_DEV_AVG_UPPER_WMARK); avg = max(dev->avg_count, band); @@ -230,7 +240,7 @@ static void tegra_devfreq_update_avg_wmark(struct tegra_devfreq *tegra, static void tegra_devfreq_update_wmark(struct tegra_devfreq *tegra, struct tegra_devfreq_device *dev) { - u32 val = tegra->cur_freq * ACTMON_SAMPLING_PERIOD; + u32 val = tegra->cur_freq * tegra->devfreq->profile->polling_ms; device_writel(dev, do_percent(val, dev->config->boost_up_threshold), ACTMON_DEV_UPPER_WMARK); @@ -309,7 +319,7 @@ static unsigned long actmon_device_target_freq(struct tegra_devfreq *tegra, unsigned int avg_sustain_coef; unsigned long target_freq; - target_freq = dev->avg_count / ACTMON_SAMPLING_PERIOD; + target_freq = dev->avg_count / tegra->devfreq->profile->polling_ms; avg_sustain_coef = 100 * 100 / dev->config->boost_up_threshold; target_freq = do_percent(target_freq, avg_sustain_coef); @@ -469,7 +479,7 @@ static void tegra_actmon_configure_device(struct tegra_devfreq *tegra, dev->target_freq = tegra->cur_freq; - dev->avg_count = tegra->cur_freq * ACTMON_SAMPLING_PERIOD; + dev->avg_count = tegra->cur_freq * tegra->devfreq->profile->polling_ms; device_writel(dev, dev->avg_count, ACTMON_DEV_INIT_AVG); tegra_devfreq_update_avg_wmark(tegra, dev); @@ -505,12 +515,15 @@ static void tegra_actmon_stop_devices(struct tegra_devfreq *tegra) } } -static int tegra_actmon_start(struct tegra_devfreq *tegra) +static int tegra_actmon_resume(struct tegra_devfreq *tegra) { unsigned int i; int err; - actmon_writel(tegra, ACTMON_SAMPLING_PERIOD - 1, + if (!tegra->devfreq->profile->polling_ms || !tegra->started) + return 0; + + actmon_writel(tegra, tegra->devfreq->profile->polling_ms - 1, ACTMON_GLB_PERIOD_CTRL); /* @@ -558,8 +571,26 @@ static int tegra_actmon_start(struct tegra_devfreq *tegra) return err; } -static void tegra_actmon_stop(struct tegra_devfreq *tegra) +static int tegra_actmon_start(struct tegra_devfreq *tegra) { + int ret = 0; + + if (!tegra->started) { + tegra->started = true; + + ret = tegra_actmon_resume(tegra); + if (ret) + tegra->started = false; + } + + return ret; +} + +static void tegra_actmon_pause(struct tegra_devfreq *tegra) +{ + if (!tegra->devfreq->profile->polling_ms || !tegra->started) + return; + disable_irq(tegra->irq); cpufreq_unregister_notifier(&tegra->cpu_rate_change_nb, @@ -572,6 +603,12 @@ static void tegra_actmon_stop(struct tegra_devfreq *tegra) clk_notifier_unregister(tegra->emc_clock, &tegra->clk_rate_change_nb); } +static void tegra_actmon_stop(struct tegra_devfreq *tegra) +{ + tegra_actmon_pause(tegra); + tegra->started = false; +} + static int tegra_devfreq_target(struct device *dev, unsigned long *freq, u32 flags) { @@ -629,7 +666,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 = tegra->devfreq->profile->polling_ms * cur_freq; stat->busy_time = min(stat->busy_time, stat->total_time); @@ -637,7 +674,7 @@ static int tegra_devfreq_get_dev_status(struct device *dev, } static struct devfreq_dev_profile tegra_devfreq_profile = { - .polling_ms = 0, + .polling_ms = ACTMON_SAMPLING_PERIOD, .target = tegra_devfreq_target, .get_dev_status = tegra_devfreq_get_dev_status, }; @@ -677,6 +714,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); + unsigned int *new_delay = data; int ret = 0; /* @@ -696,6 +734,21 @@ static int tegra_governor_event_handler(struct devfreq *devfreq, devfreq_monitor_stop(devfreq); break; + case DEVFREQ_GOV_INTERVAL: + /* + * ACTMON hardware supports up to 256 milliseconds for the + * sampling period. + */ + if (*new_delay > 256) { + ret = -EINVAL; + break; + } + + tegra_actmon_pause(tegra); + devfreq_interval_update(devfreq, new_delay); + ret = tegra_actmon_resume(tegra); + break; + case DEVFREQ_GOV_SUSPEND: tegra_actmon_stop(tegra); devfreq_monitor_suspend(devfreq); @@ -715,6 +768,7 @@ static struct devfreq_governor tegra_devfreq_governor = { .get_target_freq = tegra_governor_get_target, .event_handler = tegra_governor_event_handler, .immutable = true, + .interrupt_driven = true, }; static int tegra_devfreq_probe(struct platform_device *pdev) From patchwork Mon Nov 4 21:56:16 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11226585 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6564215AB for ; Mon, 4 Nov 2019 22:01:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 4403A21E6F for ; Mon, 4 Nov 2019 22:01:21 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="tPmK3Wwd" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389023AbfKDWBU (ORCPT ); Mon, 4 Nov 2019 17:01:20 -0500 Received: from mail-lj1-f195.google.com ([209.85.208.195]:44170 "EHLO mail-lj1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389013AbfKDWBT (ORCPT ); Mon, 4 Nov 2019 17:01:19 -0500 Received: by mail-lj1-f195.google.com with SMTP id g3so13275924ljl.11; Mon, 04 Nov 2019 14:01:17 -0800 (PST) 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=mEkd1uvkkWbvfMLb/tdCjEiVi+fwjLHzsak9MQmCC0U=; b=tPmK3WwdAIzZseaX/DBHUkRlYdAmHh1JRCDYGXZNGDn4wBYutuDkWNRBUS9BhKkN7n MnNfGlxJnLxYZsKsAok/igXZC6NuVTQIQBXGTrSSWPbkwnTtO0Su9bTVpJlKHOXlt1l1 30xjp4ZWV4Dhb5UicCjknuJHch1Ym9E6PtchvS7rRmRAp8B9+UGk3wVuK/0QA/4pB+f5 4+mXWav6FRCwjliXuTPIFfmEoxD1gJoPvY9uLI1LFxPlP4cTkf30C6ma7LIFMzOEsugq 2QGzfcF4i+zg8ktcU/rxrhp3lLswrj0nDOOuojuuUVIb2JlfxevHfugA+H3LfgR/w5nD 3QXA== 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=mEkd1uvkkWbvfMLb/tdCjEiVi+fwjLHzsak9MQmCC0U=; b=cSXQWn+EV5bngPAJa2RVa8eOukg8BEnfEEmrhM6pth3IZ5VCpALlsy2l15UTJEeZQg 5iYOojCTtns2UcYbb+AnosviaVXz/gyd24ZaGyW1iweB/mzx3fGvrs1C/4y7mIDq9gTL ulJpfxCcuxzNTVVUGXZMSwCyMvuxTPJo8B9x4FrLLdzw/JbBagQGNR6OXmYl/Q0Aocgs yayBuYHQB251VUYGtuYK6XSFiQtYIp0YnlC/HP5ZhoaW5RQnNe3O3hSddffk3hadDzpt Wx9n07hx+PD7eqxLY4J9eDk7nt5I6L2pnmaPLVj3D2MQAWUnSDPy0ch9ubN5z3UmdsLU peDA== X-Gm-Message-State: APjAAAUDGAZHVaB32/J4QJzlBfIQD3AFinPdVVkENIQ1gTGjXDKt0N88 TcVEACpoiokys1QXOTmm9xo= X-Google-Smtp-Source: APXvYqyxCGCqD24misPX/q6DQpFN9t3rDI+tPGV7qA2M4uDJW9MLxVgQo5Iv87hvkxmR/KaoGV2DSg== X-Received: by 2002:a2e:7310:: with SMTP id o16mr18017588ljc.210.1572904876742; Mon, 04 Nov 2019 14:01:16 -0800 (PST) Received: from localhost.localdomain (94-29-10-250.dynamic.spd-mgts.ru. [94.29.10.250]) by smtp.gmail.com with ESMTPSA id g3sm7454669ljj.59.2019.11.04.14.01.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Nov 2019 14:01:16 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Jonathan Hunter , Tomeu Vizoso , Peter Geis , =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v9 18/19] PM / devfreq: tegra30: Tune up MCCPU boost-down coefficient Date: Tue, 5 Nov 2019 00:56:16 +0300 Message-Id: <20191104215617.25544-19-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191104215617.25544-1-digetx@gmail.com> References: <20191104215617.25544-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 MCCPU boosts up very aggressively by 800% and boosts down very mildly by 10%. This doesn't work well when system is idling because the very slow de-boosting results in lots of consecutive-down interrupts, in result memory stays clocked high and CPU doesn't enter deepest idling state instead of keeping memory at lowest freq and having CPU cluster turned off. A more faster de-boosting fixes the case of idling system and doesn't affect the case of an active system. Reviewed-by: Chanwoo Choi Signed-off-by: Dmitry Osipenko --- 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 e44f1a48f838..0b65f89d74d5 100644 --- a/drivers/devfreq/tegra30-devfreq.c +++ b/drivers/devfreq/tegra30-devfreq.c @@ -124,7 +124,7 @@ static const struct tegra_devfreq_device_config actmon_device_configs[] = { .offset = 0x200, .irq_mask = 1 << 25, .boost_up_coeff = 800, - .boost_down_coeff = 90, + .boost_down_coeff = 40, .boost_up_threshold = 27, .boost_down_threshold = 10, .avg_dependency_threshold = 16000, /* 16MHz in kHz units */ From patchwork Mon Nov 4 21:56:17 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11226635 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 3E24B112B for ; Mon, 4 Nov 2019 22:18:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 1AC50222C1 for ; Mon, 4 Nov 2019 22:18:50 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="bmQHksK9" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388646AbfKDWSt (ORCPT ); Mon, 4 Nov 2019 17:18:49 -0500 Received: from mail-lj1-f193.google.com ([209.85.208.193]:41710 "EHLO mail-lj1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388656AbfKDWBT (ORCPT ); Mon, 4 Nov 2019 17:01:19 -0500 Received: by mail-lj1-f193.google.com with SMTP id m9so19370475ljh.8; Mon, 04 Nov 2019 14:01:18 -0800 (PST) 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=dCIWMfP1VPP4Mlo+oAntsMXZNvH354k2VUOlKxxlyNs=; b=bmQHksK9yY/V7YYJfquoSqTBqSgpAi//o6+WDsa3ucjYlxs+iNJWJ7OHB0XXaR0cEa dhXpt53x/EYthqGDGcO3lR2zGgETSrXqagLvoaIhT0rYSVO258GU1iax/zlXdOqQtySP yhJ+AA8NOD35r/1pb718wVQFHiZZd2fkmzuO9WPC5KE92kDdeFJ8EWSC48mLCncLHfXr gQ4b4UPO2zlWujKmHtSv/gZW86CNGBGSRsVBHtmwDq4/8QXhVeM4e/4dx7pOwOvVdK0D 7L1bD0W0beAiufHgC7bmg+2WXhBe9Hw8mEcIX0KjSHx2C+QT/cDb0letMEDREZ/hxecJ Du/g== 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=dCIWMfP1VPP4Mlo+oAntsMXZNvH354k2VUOlKxxlyNs=; b=BYoTb3ampLmdy8Hg/O27KEm0jCjT0qpW0wPDB+Pg0GHZLTYJ63vR4e9vUGsHnufeCv frHKn9ib6XcoeYTLz6oYtgjOz5Dka9064opb/7OiSLaK3re/yY6PmC69GgZ/o68XQNS4 a7gnYjEDAJWHr6861J/HmutnSRGxUivF1azffFBcvHPze/GbhUaD1JMndZ9TFXJHrQuk YusylAAACRxJLzzt/tVPpfg5tEqnsUKgpulvSmNDUvJnaxAdfhkPHX0Pygf74HENDwxv ux/0FNauKy3zkVa3D0/IDryX1skdp3x0es4F/cV0jCMtPyRcRib3Ogith5JoYBjSjwDk 6a6g== X-Gm-Message-State: APjAAAUjvocm2zm5kf6tdeETNLdDVp/TcpQs2PHV2g6l9lrQTFRLCipQ stOti6zvSctAjOe33HyrhHwts6J6 X-Google-Smtp-Source: APXvYqxU61urBbJtIU7aswhY0D++VEJxl14uOim843ou0VrRJtc9pL22FdchXaHRBq4EWetYaQqeFw== X-Received: by 2002:a2e:6a10:: with SMTP id f16mr302864ljc.100.1572904877652; Mon, 04 Nov 2019 14:01:17 -0800 (PST) Received: from localhost.localdomain (94-29-10-250.dynamic.spd-mgts.ru. [94.29.10.250]) by smtp.gmail.com with ESMTPSA id g3sm7454669ljj.59.2019.11.04.14.01.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Nov 2019 14:01:17 -0800 (PST) From: Dmitry Osipenko To: Thierry Reding , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Jonathan Hunter , Tomeu Vizoso , Peter Geis , =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v9 19/19] PM / devfreq: tegra20/30: Add Dmitry as a maintainer Date: Tue, 5 Nov 2019 00:56:17 +0300 Message-Id: <20191104215617.25544-20-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191104215617.25544-1-digetx@gmail.com> References: <20191104215617.25544-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 I was contributing to the NVIDIA Tegra20+ devfreq drivers recently and want to help keep them working and evolving in the future. Acked-by: Chanwoo Choi Signed-off-by: Dmitry Osipenko Acked-by: Chanwoo Choi --- MAINTAINERS | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 9f69d01da3a6..4b9679988514 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -10632,6 +10632,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