From patchwork Sun Nov 3 20:41: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: 11224413 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 B6F87139A for ; Sun, 3 Nov 2019 20:42:06 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 82EAA21D56 for ; Sun, 3 Nov 2019 20:42:06 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="sA8KNKsl" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727588AbfKCUmG (ORCPT ); Sun, 3 Nov 2019 15:42:06 -0500 Received: from mail-lj1-f194.google.com ([209.85.208.194]:46217 "EHLO mail-lj1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727380AbfKCUmF (ORCPT ); Sun, 3 Nov 2019 15:42:05 -0500 Received: by mail-lj1-f194.google.com with SMTP id e9so2072141ljp.13; Sun, 03 Nov 2019 12:42: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=ppdzoc/V97ChcXO7v2Rn6eiJN21LngJ2PFR09uQ6kL0=; b=sA8KNKslQTu1fx9Hz2fbizBl3BgADQEJQ/twcTW6XrldX5d2D0pKA7E2P5heHDDM7b 3ILsSBEvYvqKEb7ziEm8BRaPMUyYxbLT83+hcofjRGccsG9eNti8swPW2LtgMD1qxCqy sn0himHN/mWBVAEs+Z90pyRRoLzCEIgzir0G+nM4zssLUWzVe8RTp8B0HqXtD5hv+5Yo lqqthKze4yEqzskH+NlP/w1tQ373kWBRV1t3fLYRN+OqmyeERoaLybyy+fQPss09afP8 c50hmBwzPu1J9jOaAxe/P4AeDhjszouAS/n99Kk8WZcEHO0DKlDBELC/AV7alF/RqVLj MxmA== 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=NN1tR60J/llwfcbCGJ1UwcHie+zxgnDRjyP8lg66hBMSjmjvADfkxlMD78udi4psbN bikQ930SqIBG0EKAnmdI4X56bmNwWUXdMsGOTdR0ZSIbQMia2XBAnEXnTmK/I3AArFnL eLK9ttAxN3BYwna1MX5FC3kxRMI40Sip+gVdr5QdI8IsVkr0htj7qnN/m1RSSYMFYFOg cUlUoyRgI5psa2xfvFWZi2o1hIIGsn0Y8ngJIzrvu6j/sAorERGXaIaZ/MvebYS6ICqp dH5xW7IAzjb+geAC6Z7DSOBCPFVdOENEAWSm/zhBZVkbjoDUUFw68BTngIRWboFPR8FY FVFw== X-Gm-Message-State: APjAAAWp9lwET6JR8JuscbOvWF3MWMdb2BFr/s2ev2h7YdpxB1g/qNvL nsu7d6T2WnYpTNtMvBtuAV99RHTm X-Google-Smtp-Source: APXvYqw4+G9IDQ4vnBSolbpPMmiz7JH+55Y/+11xHwJDYjXvbs23dzrbkHtOQj0Ha1cdpi/nGI+gTg== X-Received: by 2002:a2e:3a1a:: with SMTP id h26mr16288308lja.25.1572813723354; Sun, 03 Nov 2019 12:42:03 -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 e22sm7099853ljg.73.2019.11.03.12.42.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 03 Nov 2019 12:42: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 v8 01/18] PM / devfreq: tegra30: Change irq type to unsigned int Date: Sun, 3 Nov 2019 23:41:13 +0300 Message-Id: <20191103204130.2172-2-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191103204130.2172-1-digetx@gmail.com> References: <20191103204130.2172-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 Sun Nov 3 20:41: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: 11224447 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 7E9A41709 for ; Sun, 3 Nov 2019 20:43:16 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 5CCE021D7D for ; Sun, 3 Nov 2019 20:43:16 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="pvVlhT4E" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727268AbfKCUmH (ORCPT ); Sun, 3 Nov 2019 15:42:07 -0500 Received: from mail-lj1-f196.google.com ([209.85.208.196]:32960 "EHLO mail-lj1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727501AbfKCUmH (ORCPT ); Sun, 3 Nov 2019 15:42:07 -0500 Received: by mail-lj1-f196.google.com with SMTP id t5so15413672ljk.0; Sun, 03 Nov 2019 12:42: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=1E19zvKxqtuRF5nZpIuuGaKt1sQQwAAlPwmfDp5qZb0=; b=pvVlhT4ETISoKg+fMU9LQYGOZmFDbpM3envTWc0EoWKlEhMawcmThX+ot9jCZx6Fdg 9zcjkQYjEsdeffkXRoT12ArKGs7E+kT31edq2x8RfQiAnQXUl8ykgSQzvK9yWEgcX8OR ojOIeiHyZm+D+X62qxTtEjOynoArfMK9ZWCOpD9403ueKPi4xOlHLn6xFvYfLvy4zfGu dc+qCpUtFFiUckSIEJUWUXlSNx/FVy58dRP3g0khLk1XjtxAEcYB9NqV/nphDuh0ZYAP aXNxONYFzMj//PDCbkNGcBO6PcEDfIxZogle1hPiz0LFJLI+MU6avyMNU6oM3PZkq+GT r7JA== 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=IPNLP/fVa1aqYQOedRbQuJQEvxH/U8yhWLWqiquIgEN0ZeOka+PVymQ8QiK6bDTFRu 2NwfkG9MR0MtyRhCpE/L1akwbrRBTdM1nlb0Ufxj47IwJStJesy0g6R6T8LfaZoNhmok lElXUJskaz6+TVR4xgQIEEYhf77oldgPMMNLw8yOJgjEE2OGcuPSBAzEEgO4E+sI/Ux/ LefHMyTa/71EzAserz2jay/cKni5leLdPPfoY1KiJmvNCDgRj7r2xsI03ZeybaroXYca im8xDbcAXMNxjlfbgp71xwOzZ8HuO0RSd6wM630yTRoK1El0Omte4v4dgYtzNUSX/wT1 f/EA== X-Gm-Message-State: APjAAAUVmntRef8WG7kaTVzh2Jmg9beRoem75Jg2Z3fnDWBHRepd0T+V GkmM4Ol9W0UtVHvB1U5CzZU= X-Google-Smtp-Source: APXvYqwv+T87YncukajttXX36/m5LJoRVcWATkx6Ei4V0cMfbx2erNdTUNK2AnZ6fZuYCG6PNbIGSg== X-Received: by 2002:a2e:9985:: with SMTP id w5mr9735477lji.162.1572813724334; Sun, 03 Nov 2019 12:42: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 e22sm7099853ljg.73.2019.11.03.12.42.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 03 Nov 2019 12:42: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 v8 02/18] PM / devfreq: tegra30: Keep interrupt disabled while governor is stopped Date: Sun, 3 Nov 2019 23:41:14 +0300 Message-Id: <20191103204130.2172-3-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191103204130.2172-1-digetx@gmail.com> References: <20191103204130.2172-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 Sun Nov 3 20:41: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: 11224445 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 11CFF139A for ; Sun, 3 Nov 2019 20:43:16 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E445821D7D for ; Sun, 3 Nov 2019 20:43:15 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="kCDk9f7x" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728198AbfKCUmH (ORCPT ); Sun, 3 Nov 2019 15:42:07 -0500 Received: from mail-lj1-f194.google.com ([209.85.208.194]:42817 "EHLO mail-lj1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727551AbfKCUmH (ORCPT ); Sun, 3 Nov 2019 15:42:07 -0500 Received: by mail-lj1-f194.google.com with SMTP id n5so4359308ljc.9; Sun, 03 Nov 2019 12:42: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=QriNmcLUT52c0PWl9XCAOvuUeyuuGYT8NGYlPG2RmN8=; b=kCDk9f7xEip6MeGHEgLyD8cQViJUFB/SVw4Rubeavm1a02dJGNqT/tZMot1gOaLTr6 lharTHfNWNwLVLbexwJWGdhBcQzXJTLQK/nH41A3XeIrMGdMrkjRWKfFExJcHPIe97+g UiJ+VCEoQ+0VSm1iT0Ioh1dLXhC2VroFkbpOA9JtFsfnwLTPuOyr6hAutIO3FOH3b7AP wM+yyCfWJ4vEv22R76exGgbbMl4aLnX3lebT0NDdGqjGIQYDPBnEpxObRcfCxe6DIBl1 J9yFxTVRL7yfBrreGCld5xTUZCNldWf1bFarHjBc+NuB7ohpbOYUHguf6fo4HwLCAywI D60w== 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=sHhJKrroQRqqbyW3et9UOyiC7x3EUFZZPd2VsUIZhIhxoOsKRtmD8Za9cXo+Owzdxs 78lzBT0b+Kh++TYCI5zDsAf7+bBvVCy+svvLOaU1KqLWNqID8/n+GByVW3lq/L6pyejm avhNJ0vrhtalJ8eLN7GypBardI4dLgAlFK2+11eGZxdGvFAGmZ6el+3S7c0FAQsMi78p cXxgk3mwfvDTFRJ1VFR3diXphqQFMhuG7BNvplwAT9yU1XjFHae4NhysUNpwOrWGSD8k 2btX1qvpTNrEFyuS9qa1w8E7RoYmtHiyVB9NgDgQZ6Dwhk5Os7RCwtuDHrgabGromSOT O+9A== X-Gm-Message-State: APjAAAWOsfOjGX19R5wk3TtMKB9d57dmvDMXVF3mL+mne1r345Nqn2Gu SC0NOq0L7U+xapqbfUHcm2I= X-Google-Smtp-Source: APXvYqzxA2LguehKpphJlozORkBCFa9kiG3ef0U95Nzq2/UE2nIP7Ug+YNuBKiSc/3Sew45phR6rdg== X-Received: by 2002:a05:651c:28a:: with SMTP id b10mr15511570ljo.124.1572813725246; Sun, 03 Nov 2019 12:42: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 e22sm7099853ljg.73.2019.11.03.12.42.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 03 Nov 2019 12:42: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 v8 03/18] PM / devfreq: tegra30: Handle possible round-rate error Date: Sun, 3 Nov 2019 23:41:15 +0300 Message-Id: <20191103204130.2172-4-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191103204130.2172-1-digetx@gmail.com> References: <20191103204130.2172-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 Sun Nov 3 20:41: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: 11224443 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 5D3E5139A for ; Sun, 3 Nov 2019 20:43:12 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 3B4E421A4A for ; Sun, 3 Nov 2019 20:43:12 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="TwWa4wMn" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728599AbfKCUnI (ORCPT ); Sun, 3 Nov 2019 15:43:08 -0500 Received: from mail-lj1-f194.google.com ([209.85.208.194]:32961 "EHLO mail-lj1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728181AbfKCUmJ (ORCPT ); Sun, 3 Nov 2019 15:42:09 -0500 Received: by mail-lj1-f194.google.com with SMTP id t5so15413718ljk.0; Sun, 03 Nov 2019 12:42: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=6TJlQkVC15YK1Mmhxs/rkGDrxgdE3q8G1rLTH1Ltzd0=; b=TwWa4wMnI3xZVNYvMO2/XPDoCdALbFiFHZpjPFX/nvKf3i+DtFUXsOXyHt64D+w7E0 zL+EMdy7SKm3TGv8WnzT3lkJVQqIdbQL6sR8YmbuWBZdWrV6Jxyu6eHjrUNpBokjDvto hPG2gj724tiCX8XzCzMuFeEhu1QAlyZTZtURLWD3hB2eeDTfrY1Wc3+8hX0i7VqPNnjU okh1FVxnSReQAW/sTDB6FnfddQg7zSk6bhbqpwYiuvibLhxyj9NoEo4/JZSRvplx9vYi tVtzwQcJfJ2/42/qVobJINcep55gqyU2O42YonPOkG/c4UAr8x+oVZGTH+aYePzse5/+ EIZg== 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=o7ENDz181H87aV6lkYjYEYODzVm+1hTy+f1la8l1HKBxkWuWRvoySpnWz2V4sBRU4i o18o7Q0/z8WX2P2NZ0T7zPMgvVHD/Og+c0Bk4anhtTDZONmPD0qV+vbTvQ3TI+ES8A4F wnagxjS6L4nhcWbIeFPJFVgOw2Ty/iOHlAvdSMozL8xhVYUIAGPS1V6vnE/p3bnJwrYX e2zhA4Tw+OSbtmaO02bLw74c3kcjfuyV8nM38JOkgDnUqOJqsZdHBPYeZxrPzlQDu3Fa BzkOzsDNqCZMlgH4LkKFl548/l22LOzspJKD/NboeOnkL4JYUmNMqauUxLPirsyaJA5u JThw== X-Gm-Message-State: APjAAAX62J5lKKoaDQa/qWPRSmnVUvxPm4jTeW5XqfYzsWiLxPPYTGxw YjVPS8++lN4bfVn8QnM06nE= X-Google-Smtp-Source: APXvYqyeUh0mG8EweUNk1W/dHbMzUHqX5gD/XSFr+xyWpWq9bAmZsfgW7Al7ktR7PhQ384gMSqvRig== X-Received: by 2002:a2e:96c3:: with SMTP id d3mr2313536ljj.248.1572813726175; Sun, 03 Nov 2019 12:42: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 e22sm7099853ljg.73.2019.11.03.12.42.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 03 Nov 2019 12:42: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 v8 04/18] PM / devfreq: tegra30: Drop write-barrier Date: Sun, 3 Nov 2019 23:41:16 +0300 Message-Id: <20191103204130.2172-5-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191103204130.2172-1-digetx@gmail.com> References: <20191103204130.2172-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 Sun Nov 3 20:41: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: 11224435 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 C5D45139A for ; Sun, 3 Nov 2019 20:42:59 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id A562421D56 for ; Sun, 3 Nov 2019 20:42:59 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="KrGTh6/g" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728310AbfKCUmN (ORCPT ); Sun, 3 Nov 2019 15:42:13 -0500 Received: from mail-lj1-f195.google.com ([209.85.208.195]:32962 "EHLO mail-lj1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728255AbfKCUmK (ORCPT ); Sun, 3 Nov 2019 15:42:10 -0500 Received: by mail-lj1-f195.google.com with SMTP id t5so15413726ljk.0; Sun, 03 Nov 2019 12:42: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=4GPUilwynfX5AA3QRvL7JTfGxSIPwXWj2mMjnwonars=; b=KrGTh6/gtRVTUbbrEXGx4wgcWZUbPGxZniOY/WX+FAFKSS2WgnlT/0Ip7mJE54hak9 5x/CFLc4s/pFax3AhU8UBPMC6pR8UgcBhcwVicn002xNHDSdcNx56HQ2rSbsgoCEa6Im M2kkWw139V5XW6NddO7D/QBsDmSxROYh9XjXyxh+Fa8v4AO2mTb0dgTwhqhz43z1tKCW Gn5N/Yyl1XCmqT7I0V0+EBalMvYCuFpR0f2MhGnxj60IYzX/ouGCD3N2t2MC+mE5YHxD gDuEJp+sBB8QWJge3fv9i2YaqCslWPEI7uXe242FpT7VeXZyMrQQZZXYYab4bQGgVK3m ztkw== 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=Q2F6L0is+qUf4YjME6YIGp5IQKmyu1bMv1V0FPFxbczPlZukXdvK3DDuDUK/mZyc2F vkF+i+e5scnrqJ1o8oZZIvj+8gxV5TO+auaP+nFSueRZLSkd9nmMdCazptNgmYvRCSwD ScvX6y5Qn3bFBklxr+Sc8jz6h6IQ6t6K4h4GMpGWcQLA46fcwAotRU/Ko3J5Jf4W2BaD LYEUpTEhfoWi4gwGnRxnhCrP+y4EQxeqDPctlRTfZzT6q2oIPazsbjjP+tfPNXbAnpDf NsOzTOj7rbuPqaU8DskTj75kT5rs2/3sKpsN8l7gKn9OSEx/+bZP0OKZgaPrMNbuDuc+ SLhQ== X-Gm-Message-State: APjAAAVbIIvU57In9bgrViPuyWcQ5lZq7nNIepe8VU7BNrklb7335xDe WPwphTXzk+RRc+lpa952B/w= X-Google-Smtp-Source: APXvYqzxuTd/J9gHEsZg9uzrfONxIJALHRuhetMKrpBzyK7NlYPh9ld5nmUqKbBl2rqxaoMGY/ab2Q== X-Received: by 2002:a2e:9a41:: with SMTP id k1mr2158401ljj.11.1572813727107; Sun, 03 Nov 2019 12:42: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 e22sm7099853ljg.73.2019.11.03.12.42.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 03 Nov 2019 12:42: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 v8 05/18] PM / devfreq: tegra30: Fix integer overflow on CPU's freq max out Date: Sun, 3 Nov 2019 23:41:17 +0300 Message-Id: <20191103204130.2172-6-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191103204130.2172-1-digetx@gmail.com> References: <20191103204130.2172-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 Sun Nov 3 20:41:18 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11224441 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 C4D7316B1 for ; Sun, 3 Nov 2019 20:43:08 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id A481621D7C for ; Sun, 3 Nov 2019 20:43:08 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Ptgdzv41" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728268AbfKCUmL (ORCPT ); Sun, 3 Nov 2019 15:42:11 -0500 Received: from mail-lj1-f195.google.com ([209.85.208.195]:38339 "EHLO mail-lj1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728229AbfKCUmK (ORCPT ); Sun, 3 Nov 2019 15:42:10 -0500 Received: by mail-lj1-f195.google.com with SMTP id y23so14975145ljc.5; Sun, 03 Nov 2019 12:42: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=T6ehYayj/CsEjREzCecGwtuH1vTkkw6hdLvoIOrkLyE=; b=Ptgdzv4188nCij+3Y1+uj2V7WEUNb4/7dxYNQWUfW5/EdACAxMbj3dyNfyJZ1tspwk 4rVRzkSy3P9BqCgtlyU2PF+hoCX06hKqVrz6ii1iyrsoZA2nHnSFoF2Ol10rhQmRCIQG SoDiwrEo2nshbpVPwB66QuzA2el9Bl7W5tAU7rtgJ+LjR3NVT5N0PZGIIijARIpm6VXF BCz6Bhr+nsWraaLqXeMr6dsDHkNsK3P66yPnSx1g+TniQsdDvVZpX6GrGyq1Wf2WoYLs vQlEjkkmcSNgFX4qZZmhgX3i+zlBKqWkj1LkqKbCmUHNvUPy9pYE2cIZIpWVlXTUXPmX z3ag== 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=SJB+Lahn5HLD+BjI9l5essrxzNfoi8hU2sn+UPvmI86E9CFtt5Rv+clhlfqg7HkEOo JARrKRg0cdtyqzVbfzNyOSollxCIt/D0V5WSWNmiZwtTxZMOmPf3JE/Me8YGkv3etzWC FQoiM7nwBUrfp7wgbP7WydmBO1+I48x9og+I33ez19MKgdLvTYL9vuFHDlz5fAahbz14 d1Klw5Mcq1gHgEN95LBrH/pr+ZT+rsp/sFlS8DnjFCfmXxuwuQqocf7wfc1e8ywkmOCe D/xn/K0s/fieem8oJ47hg8vBO76xK3WfOETP1ykhk03ltRLHLbekCxpXLITuNyTrQabk BsvQ== X-Gm-Message-State: APjAAAVn/P4JRTVWiMirKOTiC8q8mpxqkgsLOTY7cLJeAe2rf00LO60p FEhLChQKYQ+LcGNreJcHr9M= X-Google-Smtp-Source: APXvYqzv42KLMu8jlJL0jhswKJbINknrWxI1NCCkixsiBipoWEE1FReIAwTejtTyjUDIWZYq5MS9nQ== X-Received: by 2002:a2e:9a95:: with SMTP id p21mr12344939lji.175.1572813728080; Sun, 03 Nov 2019 12:42: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 e22sm7099853ljg.73.2019.11.03.12.42.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 03 Nov 2019 12:42: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 v8 06/18] PM / devfreq: tegra30: Use kHz units uniformly in the code Date: Sun, 3 Nov 2019 23:41:18 +0300 Message-Id: <20191103204130.2172-7-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191103204130.2172-1-digetx@gmail.com> References: <20191103204130.2172-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 Sun Nov 3 20:41:19 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11224437 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 BA105139A for ; Sun, 3 Nov 2019 20:43:00 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 7B94321D7C for ; Sun, 3 Nov 2019 20:43:00 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Yb4uKDjC" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728554AbfKCUm7 (ORCPT ); Sun, 3 Nov 2019 15:42:59 -0500 Received: from mail-lf1-f68.google.com ([209.85.167.68]:43383 "EHLO mail-lf1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728272AbfKCUmM (ORCPT ); Sun, 3 Nov 2019 15:42:12 -0500 Received: by mail-lf1-f68.google.com with SMTP id j5so10684923lfh.10; Sun, 03 Nov 2019 12:42: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=zTSoWegEEojY/0rzNbV3L5iathds+zVoar3/WKcCtmk=; b=Yb4uKDjCiFVat9F/w9t/TpTNLrP8++aetoySvrjQ3XtdR03mGF0pfay3M3KrpbaHD3 5flHD7maosBvWqf/wvH/Wfr1c0B5omleuNxlDZUAWMPW4Ll6MDzMK1B0cYHQgkpdo8sU QSLu5NrN+rD9kzFi1fW8nfOZ2vV2mj3nyIKLqDhBskXREFwK7cvA8qZUVuwxUpWieDVM sI6CC2F67m3dcu0Spffsi5WfQSJMTcGSnkGzE5D2BFE4+WoU/cfwQdy/8+0LPLh5qSsG MIYoHZ+CtEYocFWsdOntFx6pJXpRlV/ab5EVe1ZVoX9oX3ZJ32fj4dQsBWRRJ+Eg9k/9 NQxg== 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=O/k/gALkZwO1NLdIs91kXfmFEFc7xlCYL7u/BYZID+llFWycW2FEPAsceTXoIPycg7 nN/9sMQx5LViFyb0/td+J/3rFJL4v0Mm6Xf8gtbql3s8vM/5Fxn8Ycw9waSUZON2hZPE OIjwCjVsM+iYMRTY2ssp7o8aZqfwb7MYnHz/0GouDMzWE25xVQ24UdjlO0caAGSJ2xx8 jekSfcjAchvY9SJ7EkbRwQhAFOaMTFUrbt/dT9DrXeEAPyItVM2SoIOUFKeJCUjrQlq3 FWJoAu74ic65gIAZ2Zu8gP51mLLjNhqzVXDzCY2Klowxr1Dr92hEbPj052gjLWaBBaKm 5rDA== X-Gm-Message-State: APjAAAVlkVh/+mh3NZM+wubGxvUJ75CCyxGOU3URXYCaN2VlAUJq+VVs y+5k5aSJ5PUDe3hngva1YGU= X-Google-Smtp-Source: APXvYqyGVcdFLT79npGQ7fVGjgLMlfkVn7ZeLeJijQf/Iq01hEwn8QVlKTNuU/tNA0kmsYV7AXMVEw== X-Received: by 2002:a05:6512:21e:: with SMTP id a30mr14079274lfo.175.1572813729137; Sun, 03 Nov 2019 12:42: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 e22sm7099853ljg.73.2019.11.03.12.42.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 03 Nov 2019 12:42: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 v8 07/18] PM / devfreq: tegra30: Use CPUFreq notifier Date: Sun, 3 Nov 2019 23:41:19 +0300 Message-Id: <20191103204130.2172-8-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191103204130.2172-1-digetx@gmail.com> References: <20191103204130.2172-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 Sun Nov 3 20:41:20 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11224439 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 201F516B1 for ; Sun, 3 Nov 2019 20:43:07 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E878421A4A for ; Sun, 3 Nov 2019 20:43:06 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="TUqLQDiq" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728558AbfKCUnA (ORCPT ); Sun, 3 Nov 2019 15:43:00 -0500 Received: from mail-lj1-f196.google.com ([209.85.208.196]:40765 "EHLO mail-lj1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727490AbfKCUmM (ORCPT ); Sun, 3 Nov 2019 15:42:12 -0500 Received: by mail-lj1-f196.google.com with SMTP id q2so8825923ljg.7; Sun, 03 Nov 2019 12:42: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=z9+CHMZoGGQ0kyLUVsXDA/Tuh9oFzpRRT79bF9HX1WM=; b=TUqLQDiqv3xLDWlA1iKqmrWtizpsM0hTiM2kEHMtOkSgXplN8gDdNICP2vgGqK6PWx EWakDXBQ6W1DTYySfNp0ftYUn8EplzJS2owRJvis9dwPH+nk7zoIGpgHkWXEmTGGIE/n +6cntfMUOLLV5+gz8LvRjCsD090WfmUhwgEPC+olGa52x2PMdOJD6ihzSyS2LbFpna7J 8pBT8R7NJTwOmYIoEVpyRiLCFLg+BxWFgw9BA+FAujcNrJbQs12fXBPyG/6zFh/FvutW LE3i3tR9RltCxCPpJqZ3kIQiMVU1lw0f7HhsOOv43Lkw8Z8jE3TkOqRBgOQi1FPZAf0u 4sAg== 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=hMNSy3eXxhffLULo029e8czzJQiewai3+pOibtaY5s0JWkKHLqQphYLuDTC5u7uDuX jvcyAnwXWIdP7n1Zi24A7sE2LLBt3bfXoxDVp36HAUF/sBlpKkh+BLWzs/unq826AlMn 8tpkZ4uHE+k+QqCcaqkaGFo6g8U+UVfplrqbaelXNVOHT4/hxvoi1zS8K5NdQrDGsjcu Mm5MEO2hqKZhhMyoVRTsJFuTT/W5iHNCPEJGiIO5mqzuGeKTy3IBvWkoU5SnTRwJcLeN ebftyZICRMOuwL6WuEm30EbupedJb/CNH2saf3gRswwBzZsfeip8LX2ypCDQyitwaDrS bUSA== X-Gm-Message-State: APjAAAUo3/Ke4nG9PUnNAt0zWRTDGdA68Z2eNNV8m/50CYKpAn24U3Ci qMpjSDwccIZtMWD7CAN1IjY= X-Google-Smtp-Source: APXvYqySs8z1GndldbAF6dJuniLNMKNLeR1pFr8/RYSTNzBtsN54Q6N4DkDftUWSLVckSuuXFlFd6A== X-Received: by 2002:a2e:b0f3:: with SMTP id h19mr9203237ljl.153.1572813730098; Sun, 03 Nov 2019 12:42: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 e22sm7099853ljg.73.2019.11.03.12.42.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 03 Nov 2019 12:42: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 v8 08/18] PM / devfreq: tegra30: Move clk-notifier's registration to governor's start Date: Sun, 3 Nov 2019 23:41:20 +0300 Message-Id: <20191103204130.2172-9-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191103204130.2172-1-digetx@gmail.com> References: <20191103204130.2172-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 Sun Nov 3 20:41:21 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11224415 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 379C7139A for ; Sun, 3 Nov 2019 20:42:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 16DBD21D7D for ; Sun, 3 Nov 2019 20:42:15 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="V0Y4zKe3" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728322AbfKCUmO (ORCPT ); Sun, 3 Nov 2019 15:42:14 -0500 Received: from mail-lj1-f196.google.com ([209.85.208.196]:43501 "EHLO mail-lj1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728275AbfKCUmN (ORCPT ); Sun, 3 Nov 2019 15:42:13 -0500 Received: by mail-lj1-f196.google.com with SMTP id y23so4472683ljh.10; Sun, 03 Nov 2019 12:42: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=rEzUAio8OEZBvo9nZSIV3+A/WsfLupbu1br1SQPd2S0=; b=V0Y4zKe3cJ5aqqlAyJ/2n4Q8Xsod3rooSbqnKlLtllfpHh4sYgPoyTKBTvrXX+uueq N/WfNjCntRoONQMQ1SWljrt6p3Vwcev3DLj1+pyACQ1dqgcTXo8MsbcAYRZO+nNxxLWb HamfgbuyaIGTJ8OEq5Ctp+q2octVwrjLhajYpBxh6pIaEN4ROp/e0eexPOam3Kre5Yt+ OGzMDFBwg4ru1q8g4Z1pquiNh7yTUnZ6LzxUH1GJkjYSruVcDaPjSk+0YeMozAUjS/cr 9I02DX3bjsUfZQUrSJM/koA1DLRdo5yO0mMAbYpWnobvp+6kjKYlraftgR7tOFjrLp9d 6Unw== 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=tQd6cLRc0Sje4GnNrzMaNjhP4fAegZDoc4vdw3/DN+6KMTYPBQWpOVGh1hqgmZ34o1 NDGREwrnzahT/41jE38MCY7tVoleZ4SBWTVlzWi1wZfjgxeDBW6Bt6wvqegvyyKnIF7F KIT9TEJygzwNtAdBpC4g8U8/GqJd5b+Twoxk+VNol14n/rMQNWAw+/x06rEYGlGPWQIo BY5WpUNze1bxpDdJpvqirrjhFEQbhYIxZZTwJdK+cxCAlntW3FvDjwuRiiGF5psAXs7j fa3arPgyri2+bDbHo5nbhWWQVx3a78ypfTEPp0aciv9c2ojFSfSWsQ8Cp4U/PYEJPyej 2gCg== X-Gm-Message-State: APjAAAXeCz4/HVib2LQHjS7EqS9mI/Yen7FWdEbk6pKZDAlYClh4ao5C yjaoKYfvTNrUQJXcRbo9Phw= X-Google-Smtp-Source: APXvYqzljk9T0yM4tZ3tTOYQSINQJBsH9gACwBTV/uA335JGfkBjAvsn56sN8Tjom5PVOPVSEqLxZw== X-Received: by 2002:a2e:9546:: with SMTP id t6mr16188651ljh.219.1572813731007; Sun, 03 Nov 2019 12:42: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 e22sm7099853ljg.73.2019.11.03.12.42.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 03 Nov 2019 12:42: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 v8 09/18] PM / devfreq: tegra30: Reset boosting on startup Date: Sun, 3 Nov 2019 23:41:21 +0300 Message-Id: <20191103204130.2172-10-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191103204130.2172-1-digetx@gmail.com> References: <20191103204130.2172-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 Sun Nov 3 20:41:22 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11224433 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 E0B1A1709 for ; Sun, 3 Nov 2019 20:42:58 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id BE7B221D7D for ; Sun, 3 Nov 2019 20:42:58 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="bIr2c2XL" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728336AbfKCUmP (ORCPT ); Sun, 3 Nov 2019 15:42:15 -0500 Received: from mail-lf1-f65.google.com ([209.85.167.65]:42090 "EHLO mail-lf1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728303AbfKCUmO (ORCPT ); Sun, 3 Nov 2019 15:42:14 -0500 Received: by mail-lf1-f65.google.com with SMTP id z12so10696926lfj.9; Sun, 03 Nov 2019 12:42: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=g9RKaIiF4lILXf0g5OU6lPR/hR2F0oEkesL+dfO7WO0=; b=bIr2c2XLqMWyWx8Q+YXSYy/FSwr24LNauoauFUdjS9vxY6/g53rWhD6J25UIkWcj3q hiOsrTQvx6rmN/tHzv3znYROLoxXbYj7LnSlFlRx4KwH04jAjIRKi7OVMuKzR0/hbmZT LMFHFKZzsTemkMGHWHlu1k1sJDbBjOlcbMkcTXqihi9/3wOvoVExEoO7/spwvJkVrWkv U07HoRB6pwV/tkzdk4+BfVFQgX24Azcn513umw/e1GmCLyZfaGWLVbe770g8EG1gzfKE Lnd1BGOlprA8JQZ2eeE0YcINAOLrr3F2ur689h+5ek8kle26WWN2WmO9Uly38D1JrAr3 7zTw== 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=bd0g9S1wfpPPOJmGx6+hFVVKbOE5ArH0Pnx5xkAzXSKX5QxGz0DHj9HwlPhDOTXFBy lxJPDcwTtIg7A//9e6EtLRWt4QpqhkBkpgTcpd+uYfQxKMBI7dj8JL3yv2R+oblUr9IK 632Hqrpd7LRu+1/Z4eShJ9LOjonJuuTTQsRvzg+djegqlKTBkr1VokJ2LwRr36m5dyU3 YBUCsNHmtyXWTxUFAijBJ74hqnYvCf4Phmbm5W2+zYoUxqF10Co4ybzGxTzM124r6927 gVZLorwqKqGCIvEpUyJ8Su/nqEI5x5j8KJ49ElVfMvqL6rxQghGwGpbTPBppeq4sYAQK FUNQ== X-Gm-Message-State: APjAAAV0JVgDWDF7GRrRV19oQZ6UPFThfB7NAQ6vPobDghsVOWdgfhdA 31b7dtvS/+mPBxKkNWXRoKg= X-Google-Smtp-Source: APXvYqwfyA5T0mNQ52g3uoETq3AQ2tim5RXnKNMu+dKN65N13dy2INlDVctzYl2KocIIlDNMzWHPdg== X-Received: by 2002:ac2:4c1b:: with SMTP id t27mr14008746lfq.55.1572813732257; Sun, 03 Nov 2019 12:42: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 e22sm7099853ljg.73.2019.11.03.12.42.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 03 Nov 2019 12:42: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 v8 10/18] PM / devfreq: tegra30: Don't enable consecutive-down interrupt on startup Date: Sun, 3 Nov 2019 23:41:22 +0300 Message-Id: <20191103204130.2172-11-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191103204130.2172-1-digetx@gmail.com> References: <20191103204130.2172-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 Sun Nov 3 20:41:23 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11224417 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 CA278139A for ; Sun, 3 Nov 2019 20:42:17 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id A8257222C6 for ; Sun, 3 Nov 2019 20:42:17 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Q6Wu65Ky" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728343AbfKCUmQ (ORCPT ); Sun, 3 Nov 2019 15:42:16 -0500 Received: from mail-lf1-f67.google.com ([209.85.167.67]:35830 "EHLO mail-lf1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728321AbfKCUmP (ORCPT ); Sun, 3 Nov 2019 15:42:15 -0500 Received: by mail-lf1-f67.google.com with SMTP id y6so10710742lfj.2; Sun, 03 Nov 2019 12:42: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=DjmXiphEj07PA2UBQ1Hu0F6jo40/2DwonMVrwbYxHC4=; b=Q6Wu65KyBARXDH06LeLB6WrGcxY4/mrTQgOg9L0n0YC18vyXyYb3ucw9D3PPkUg/2G MwPgH95nNTjmnLnFWyQe0O/2cv27PVRbj9XQdNRSIrCF6W80dYMXoUMkn5qdAyVdTQDF pxAzm4tYXu5h0JVl9F6tDSLQFFu8b2vdOuNePdzovxV5iX2X/21cvJ5h1V92atH3vI7n YRfNQXATU7Iopsl+hnDIpQQFHphOgDDrualKgYgSvs9SwSMzOSM+skXZG6rSfQys1eQU vQETpi5l72NICXgwJerkoD8vkIOv8RdEMZ2epVl+Wjc8wPOdOEGJaUWOC2kt0/PXnKqu RvcQ== 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=dTLF7QZ9CvSOY2tM+eWloasdXoVVwJPOUl5I+QLIG5dLbAiF9ANh8FttaFSmO84j87 fh55CWUTF6p+C7uLrNKJeq79uLeUI7fXmzvcIFnnpX70UlKG79hNedKZorL1FQDYG4+P IoFaE/OOasfqnbMv+WKnmTyh4TyEryqnViG6eTtdqMdcFCMDPkVBpIU5ebfMCLfo2+aB BGCvdU3ThuK0P8sFpJQ/yu9jvtywavPXvPHHWQJKSPLabWNuo2gzAj1ROQWGa4eK9/fj Mx5PMlRol6Ba7hWNKfpRAfBv9PpJP8fcVfJaOsE02XZxx4GFR33EHHs570l/TM1NzHk6 i5KA== X-Gm-Message-State: APjAAAW39mr89M9GYJucFXsB3S7ya/fyOqNgH4HVAZibjA2nUvJ1D3tO hoCKIvL9oS2hYNsRUeuOXN4= X-Google-Smtp-Source: APXvYqyF0fSar+FgM18QXcoBsZNv5ru4RdvlerDHPIp2TDKA0lQbqw8J3J4zZGvpbQBDmYG+IhKZww== X-Received: by 2002:ac2:4ac1:: with SMTP id m1mr9732752lfp.182.1572813733191; Sun, 03 Nov 2019 12:42: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 e22sm7099853ljg.73.2019.11.03.12.42.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 03 Nov 2019 12:42: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 v8 11/18] PM / devfreq: tegra30: Constify structs Date: Sun, 3 Nov 2019 23:41:23 +0300 Message-Id: <20191103204130.2172-12-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191103204130.2172-1-digetx@gmail.com> References: <20191103204130.2172-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 Sun Nov 3 20:41:24 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11224431 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 72C45139A for ; Sun, 3 Nov 2019 20:42:58 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 50ABF21D7C for ; Sun, 3 Nov 2019 20:42:58 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="CrYesmnM" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728531AbfKCUmy (ORCPT ); Sun, 3 Nov 2019 15:42:54 -0500 Received: from mail-lf1-f66.google.com ([209.85.167.66]:37114 "EHLO mail-lf1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728346AbfKCUmR (ORCPT ); Sun, 3 Nov 2019 15:42:17 -0500 Received: by mail-lf1-f66.google.com with SMTP id b20so10705389lfp.4; Sun, 03 Nov 2019 12:42: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=poTJBSF/GUDkNTSs4u0rRqSIrUnXV6hdBnQ1YS7E5D8=; b=CrYesmnMQhvk0umjmtCTG82uNk3Dix1/K+lmPams9YJXe54JTBVu1ABd/8k7217EnC Tepw95yzds93p8tG1RBo8OPPfq+rzqyiW3HSnRBq1adT3+YnFz7snvaVxk00NYivraZD CmL3nfDgtIofEyzhxzFbIRv/ebLIAKCVGqpyW3pqBJd+jJOUvrDurswwjlWTLlGEHXK2 GHIjh3UhJJS2q9hS78y1WKWBUQCi28DHGbbkbxxurEXII3/VxLG9SQj6PpJhG/i0F6ed 3RKX1sK34tCVxM5KolpgEh8ZHP36BS2EM5axGOGDKZQ0SGREPJjvtgpnumUqxp/QVKCG ZG/Q== 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=VsI9L8bueCk1Mpe+jB+yQ3QzGuLQY4qpOA0tlh+JHkmDRDxIhYkg7s4L5G+DX0HiHG 0DQb1YQ5X0mU2baIflYYRul39bHVPmTCp6gGfwqJ93BHjsKgv2chFYY3dBI9XsagnEBV 1WP6jGn12cn2MqWdu3LH/SrVD5UXXcCtxVZbm46Zuo9EZ/kSZlETOz+A1dMIXZ+p5KER Ks1fWwueRD0yJrjq4BXcSWEeOwMWV7YFK9tUTqZ2CUBy094iba7WIZit/+YjhPyAxFZG J5XhITjCqqpAcRwNEhcSmClcn7xItR4kALtd9EYol9CjWk+nGsuOct41Sfs1g+d1/iH/ shtw== X-Gm-Message-State: APjAAAVa+rFfdkmf/KJy24UzLcjeBXaxPgK1CIyxTTRA2s5AYVISyt5m rOeG0FcdeN9nQT/oZQ5qXX8= X-Google-Smtp-Source: APXvYqzpni6/vRVYtW3lz4rQ1qW3auNWX1/SA7pJv0EyZlWnssY/fM1Qw2mt35Mc+CsFrKFC4dJLXg== X-Received: by 2002:a19:41d7:: with SMTP id o206mr13382036lfa.188.1572813734104; Sun, 03 Nov 2019 12:42: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 e22sm7099853ljg.73.2019.11.03.12.42.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 03 Nov 2019 12:42: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 v8 12/18] PM / devfreq: tegra30: Include appropriate header Date: Sun, 3 Nov 2019 23:41:24 +0300 Message-Id: <20191103204130.2172-13-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191103204130.2172-1-digetx@gmail.com> References: <20191103204130.2172-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 Sun Nov 3 20:41:25 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11224425 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 2B9371709 for ; Sun, 3 Nov 2019 20:42:44 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 0957F21A4A for ; Sun, 3 Nov 2019 20:42:44 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="tyHT74I0" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728376AbfKCUmT (ORCPT ); Sun, 3 Nov 2019 15:42:19 -0500 Received: from mail-lj1-f195.google.com ([209.85.208.195]:35619 "EHLO mail-lj1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728355AbfKCUmS (ORCPT ); Sun, 3 Nov 2019 15:42:18 -0500 Received: by mail-lj1-f195.google.com with SMTP id r7so6698866ljg.2; Sun, 03 Nov 2019 12:42: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=1R8aUcZkIlTPITklCBswnMHd9GSu3KTIu0/oTyANNB4=; b=tyHT74I0qqP4BwK4y53uUcNEFhqPMhLoCqa13AUlJT7dRyyHotgHnEN+ActR/Bho+0 um4QRxG7C8+Q9V8rVa9q4II8DMZOT0FhLuczmigj038OSIdkbZHMO3TBPgj7T9k9f1jr lk/QUMCW6TD4qDZxg3UuIthIiAVlXk2bCAxojsbuNiXE6WiqAGYOypQLQ42cmVbq+X9V O6J3NZ5ObveWNqQP64il/axxgZHuj1giZ/bOBNr0BA9FEXNSaHWGoA7pwYCKPKRRpv+z K2m471i+bSNvERDzow5COmmVJ19f+LF+ddwqxBJRpZ6E5llD9uCqUcDg6XEnhbzlYoen 3hEw== 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=PYU1GKO7qW5DPp2SFuFM/GLPU1HK2jTwa9vViCuesz7dmureQmN+EcDanW2+JVvSsL 4K0jzvimqoo3EvC1PywJbGXn94qn6IX8D1wkPKzEolZY4+bH9IC7Zq28+sWJ1XB+0kp+ kl2MjtPgsNeoH1x6zaGy6freS4Qnj+4uJNlmvLN46LJ35AgVWuUlCQwwTjfqBlmoxduK 5QZgX32g7pCIG6kmKHPe6goNfjd8FIvEHsQlPtYEjDtPySnxtZblu97skUw6nDVIhRSX 6CsMglkwUAXxOhlzndbqdSfrjYX4I1HpFE8+QyVWBomse8nWE8HXDd9lavhosm5SMIOf 8wxw== X-Gm-Message-State: APjAAAWejuUfRjZ6y4wGqxeietdazaLMBxeo102jEp2+CjRmq95POSS+ 06Iz0lluouvBYqi3WYO7KcTYpDzA X-Google-Smtp-Source: APXvYqy8dKjwqpq8cW2Xiq/f626EVsnBl0Ei94GtbUr8hK2HPh1b5iQE9LjCeHKuoFoc9NoWqK3a2Q== X-Received: by 2002:a2e:b5d0:: with SMTP id g16mr16366102ljn.88.1572813735048; Sun, 03 Nov 2019 12:42: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 e22sm7099853ljg.73.2019.11.03.12.42.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 03 Nov 2019 12:42: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 v8 13/18] PM / devfreq: tegra30: Don't enable already enabled consecutive interrupts Date: Sun, 3 Nov 2019 23:41:25 +0300 Message-Id: <20191103204130.2172-14-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191103204130.2172-1-digetx@gmail.com> References: <20191103204130.2172-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 Sun Nov 3 20:41:26 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11224427 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 96AA3139A for ; Sun, 3 Nov 2019 20:42:45 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 751CB21D56 for ; Sun, 3 Nov 2019 20:42:45 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="qi5NWGwp" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728496AbfKCUmo (ORCPT ); Sun, 3 Nov 2019 15:42:44 -0500 Received: from mail-lf1-f68.google.com ([209.85.167.68]:38871 "EHLO mail-lf1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728351AbfKCUmS (ORCPT ); Sun, 3 Nov 2019 15:42:18 -0500 Received: by mail-lf1-f68.google.com with SMTP id q28so10720138lfa.5; Sun, 03 Nov 2019 12:42: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=vussPT96FtSPVjSwb6+813KWc5582WBbmxbN3o4f6zQ=; b=qi5NWGwpRx8CC3WhyqXde/QVyE216CXq7ThoLSEtQpHnKO9skfsgD74sc+ixnuvO9f d5iHPqFHqw8uWLaTFp62ivzZZEPNHPfBduQK/+ex6x7oANlAVgm35tCDdI048VBULW/3 zdAhWL3c7VmJG83CjSMIIAMSRP9b5tGWAipMo0h0PliG3kntEnb2ZnHBdEM8TvvZsVJ5 0KlvM0e3ZdLyB2yrcR6pF2waPKJVAVFlOgXSQmprlwXtxzwmcT1U87RrUqZpCKFxZRSr RRAiNC3IATBKhbQ6D1rv/mOq5l6AAS5f51yA5syaInZPBSZ+MLFxKfeU6A1zgCHPonGc vipQ== 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=FkCJ/BMCPeAgcp0oDUgsfhY/LZy+5znPA4ggkGoJkiMa15jTYCM8tEsWOgP0OtsB3q qd2vJJG0jox60KQFCHI6HfkKpjoWZjKaDTszmgCK+xiErIxK/sCVgpSVf52+UNevjcyI 4SGp5yde1qm8OVk4yA/577GlrjoCQ8uGDUAxGsBmBsvjdCFCNGGqEDopFfbt9hcDxeFq LQYJ6utZ5M5r4kJHkkLztlY+m3yMiHqRc45tnqxHFSB9a947ikC9Qb0yuJG9htXXvEFZ UKBJ96m0OZkNOLvc5MJ+z4EDt6/VgXKpZINhdS4DcjVHa/2LGjaFt1phmxieXvOiouaM XfAQ== X-Gm-Message-State: APjAAAXy9MCF4gHmn2j90O1PXYQnEk2SeE7KvgpovU9NcAjUgRIKJ2QF aYRwodeEHWdEyfmAEmcm9o0= X-Google-Smtp-Source: APXvYqyGOZrKkCxmNJyvg9JaKS1KwK5/fHPFkJK5mY5hP7Kj5hHpEb0FQQTskP50q9BLe1elDZeLBg== X-Received: by 2002:a05:6512:1cc:: with SMTP id f12mr14780530lfp.183.1572813736002; Sun, 03 Nov 2019 12:42: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 e22sm7099853ljg.73.2019.11.03.12.42.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 03 Nov 2019 12:42: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 v8 14/18] PM / devfreq: tegra30: Disable consecutive interrupts when appropriate Date: Sun, 3 Nov 2019 23:41:26 +0300 Message-Id: <20191103204130.2172-15-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191103204130.2172-1-digetx@gmail.com> References: <20191103204130.2172-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 Sun Nov 3 20:41:27 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11224429 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 43374139A for ; Sun, 3 Nov 2019 20:42:54 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 2227221D7D for ; Sun, 3 Nov 2019 20:42:54 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="k3EyGu8F" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728368AbfKCUmo (ORCPT ); Sun, 3 Nov 2019 15:42:44 -0500 Received: from mail-lf1-f65.google.com ([209.85.167.65]:44720 "EHLO mail-lf1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728360AbfKCUmT (ORCPT ); Sun, 3 Nov 2019 15:42:19 -0500 Received: by mail-lf1-f65.google.com with SMTP id v4so10692261lfd.11; Sun, 03 Nov 2019 12:42: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=8UXqS4ThUjHuxqqTSzYOn6v7GnY2Pzlt7kScAbd0iac=; b=k3EyGu8F9E3nTMASVj00fxk+7PiRZyDLQcqC85dCcwP3fifgYwxUKzFSxvMpno0/R8 auEYcVsF7rg1KWvotY4n5X6Oh22dctfhBjJI0Sbpw2m3WhJCJ317/GC4sjSC1TxePr5W l3Lzb10KQ17k2u8GyVmdvFdrKrWupT1k/IdcSdVXzDyPw/yRnsYp6ZRjo6KltrEW8zI+ eb+vWA88ePXjF0OKp6tWcrN9TUpEzT16Y4vEwLJChiSXBJ22be4+bTO1os84yQzFJ6iB WB/s9lpg0YJmxrMQkd1eiQ/ERQKGcGuquSHzcdkG2VQc0+LK8uJn3/UcoZeyJ72/BLtX lmnw== 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=8UXqS4ThUjHuxqqTSzYOn6v7GnY2Pzlt7kScAbd0iac=; b=in3SMoo5Tu8iTLzvCIlimY7iKP1bntiz8X1qDh/P2XRG5x9gn2DYQxoLmuJ+AKE6C1 NjMRV4yKxQxu4DA3OsFw8w4FYeI/i18ryJV6JkWLjsPLf5z2waAeL1Gx+xt0eEMWrbzp HQJFC3/l/cpwYW11rLyZgsOzCOrV0v7xXYw+7bwB459mX73pUX7W7ey/J3o0vpi2Z3/G ik3jBEr09IDxo3c/c79SVWZQX0H/EHVUmBTObxB7IIitUhFqfV3HHY4B5IlCayC1AOj5 MOQ7N1weQsNjGT6yPxQ8hY8Tu8m9fXF50Q/TH8IzMdpo8Ad13R5jFQtEmuNkjeTDaLvP cFxA== X-Gm-Message-State: APjAAAWBPDEJseTwnaB8ZARz3En5l0QevxkqPy+/oG3LkGUePHb/Ga1N CnaiESL06Tt1wU/Z9PVTLt4= X-Google-Smtp-Source: APXvYqztuWCPmC764oQvwL21tQhnltoMdp/pbeDoeWa+YTmemszjJJy4Qu8kIelZcZ04zJ8CNnKX5A== X-Received: by 2002:ac2:5967:: with SMTP id h7mr13823850lfp.119.1572813736906; Sun, 03 Nov 2019 12:42: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 e22sm7099853ljg.73.2019.11.03.12.42.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 03 Nov 2019 12:42: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 v8 15/18] PM / devfreq: Add new interrupt_driven flag for governors Date: Sun, 3 Nov 2019 23:41:27 +0300 Message-Id: <20191103204130.2172-16-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191103204130.2172-1-digetx@gmail.com> References: <20191103204130.2172-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 | 9 +++++++-- drivers/devfreq/governor.h | 3 +++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c index b905963cea7d..a711a76d386e 100644 --- a/drivers/devfreq/devfreq.c +++ b/drivers/devfreq/devfreq.c @@ -410,7 +410,8 @@ static void devfreq_monitor(struct work_struct *work) void devfreq_monitor_start(struct devfreq *devfreq) { INIT_DEFERRABLE_WORK(&devfreq->work, devfreq_monitor); - if (devfreq->profile->polling_ms) + if (devfreq->profile->polling_ms && + !devfreq->governor->interrupt_driven) queue_delayed_work(devfreq_wq, &devfreq->work, msecs_to_jiffies(devfreq->profile->polling_ms)); } @@ -474,7 +475,8 @@ void devfreq_monitor_resume(struct devfreq *devfreq) goto out; if (!delayed_work_pending(&devfreq->work) && - devfreq->profile->polling_ms) + devfreq->profile->polling_ms && + !devfreq->governor->interrupt_driven) queue_delayed_work(devfreq_wq, &devfreq->work, msecs_to_jiffies(devfreq->profile->polling_ms)); @@ -509,6 +511,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 Sun Nov 3 20:41:28 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11224423 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 791E7139A for ; Sun, 3 Nov 2019 20:42:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 44191222CD for ; Sun, 3 Nov 2019 20:42:43 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ORk+5q+K" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728472AbfKCUmi (ORCPT ); Sun, 3 Nov 2019 15:42:38 -0500 Received: from mail-lf1-f68.google.com ([209.85.167.68]:37119 "EHLO mail-lf1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728368AbfKCUmU (ORCPT ); Sun, 3 Nov 2019 15:42:20 -0500 Received: by mail-lf1-f68.google.com with SMTP id b20so10705449lfp.4; Sun, 03 Nov 2019 12:42: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=18S1MVXqny9x+sCJNqOJnxi2tr2EoDCFRpoSlwu8aY0=; b=ORk+5q+K9+p2eI7EFPqQi1rfxdvpYqV2Ql77LLJIoYaJgQProqKO38e0hMrGy0nnN5 RfBujqkDudwFMMO3k2JkFOeXwzi1YVivk584Rwwdaiy0/bY3kxlqHT5s8su6gnwARRTM tNiXdeoLDimAQzKfv2a7qF/rBuN/X4jD9ww5SO/pOWMOQX+NJ/LCQS/Oa4BKBknAi6cf YlQn0s+gw3QY9sht9rO+on80cL9lWh6ICwAotAOq/ZB+be9j9V2i2kDMXkKgpCuZqbh/ OXejBnMi8ipyqSksdobEGCgGnBWpeO5+Tva3jzTBegL2GL8dKu5OqzceMRmvXQyuGpeJ Zmgg== 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=18S1MVXqny9x+sCJNqOJnxi2tr2EoDCFRpoSlwu8aY0=; b=eKKPlLuMbVn9CIEMTKjeQxPBc8WPHrYyijIuSiDNfNWXRdWaTXdBUqWB7d/AC2uBg5 WijeOxZeG1PCJGAQw52GWiwgCBVRr7QbDh2VOC733uTkPmNnVevqoC3Xsuw/qrl1TE9K R2z9NtvypqT6BdB3ezHUTBnO03SaFoCtH2e6EChAXsW4GcDTIvw/L9ale2ohAsXeq8A+ Vzaq0vLickdw/SGi3xgvzMiOJH8R5HakEgH7f1AbG7OfkQ74TauFZBKgUvyS6u6Piw2d uHf6d51P/lF/7OK4qmcHKHzYwVxzLDMe+LJRgq1CfnFi9TJRGRvPopjnpVIWK2Vyof1T 0fng== X-Gm-Message-State: APjAAAXOwiuRMctT6dq/e7MQnqo1dREDO8RWVQ7zVgaZHXiyHmwZ9c26 Od6VnYtm+0Uyg3DfU7hdnKs= X-Google-Smtp-Source: APXvYqzPYt3BB/dSb8hMBNlUovU7+aunT5IMuHxsZKrZDYw52V6tptyh4iK9E2TRqQg+fYKzjiZEug== X-Received: by 2002:ac2:5b47:: with SMTP id i7mr14133366lfp.82.1572813737838; Sun, 03 Nov 2019 12:42: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 e22sm7099853ljg.73.2019.11.03.12.42.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 03 Nov 2019 12:42: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 v8 16/18] PM / devfreq: tegra30: Support variable polling interval Date: Sun, 3 Nov 2019 23:41:28 +0300 Message-Id: <20191103204130.2172-17-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191103204130.2172-1-digetx@gmail.com> References: <20191103204130.2172-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 --- drivers/devfreq/tegra30-devfreq.c | 83 +++++++++++++++++++++++-------- 1 file changed, 61 insertions(+), 22 deletions(-) diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c index 852bde6249c7..9c645e83ef8b 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 = 5 * KHZ, }, }; @@ -208,9 +209,16 @@ 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, @@ -218,8 +226,9 @@ static void tegra_devfreq_update_avg_wmark(struct tegra_devfreq *tegra, { 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; + avg = min(dev->avg_count, U32_MAX - band); device_writel(dev, avg + band, ACTMON_DEV_AVG_UPPER_WMARK); avg = max(dev->avg_count, band); @@ -229,7 +238,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); @@ -308,10 +317,9 @@ 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); - target_freq += dev->boost_freq; return target_freq; } @@ -322,15 +330,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 +407,16 @@ static unsigned long tegra_actmon_cpufreq_contribution(struct tegra_devfreq *tegra, unsigned int cpu_freq) { + struct tegra_devfreq_device *dev = &tegra->devices[MCCPU]; unsigned long static_cpu_emc_freq, dev_freq; + dev_freq = actmon_device_target_freq(tegra, 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 < 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; @@ -465,7 +477,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); @@ -506,7 +518,10 @@ static int tegra_actmon_start(struct tegra_devfreq *tegra) unsigned int i; int err; - actmon_writel(tegra, ACTMON_SAMPLING_PERIOD - 1, + if (!tegra->devfreq->profile->polling_ms || tegra->cur_freq) + return 0; + + actmon_writel(tegra, tegra->devfreq->profile->polling_ms - 1, ACTMON_GLB_PERIOD_CTRL); /* @@ -551,11 +566,16 @@ static int tegra_actmon_start(struct tegra_devfreq *tegra) clk_notifier_unregister(tegra->emc_clock, &tegra->clk_rate_change_nb); + tegra->cur_freq = 0; + return err; } static void tegra_actmon_stop(struct tegra_devfreq *tegra) { + if (!tegra->devfreq->profile->polling_ms || !tegra->cur_freq) + return; + disable_irq(tegra->irq); cpufreq_unregister_notifier(&tegra->cpu_rate_change_nb, @@ -566,6 +586,8 @@ static void tegra_actmon_stop(struct tegra_devfreq *tegra) tegra_actmon_stop_devices(tegra); clk_notifier_unregister(tegra->emc_clock, &tegra->clk_rate_change_nb); + + tegra->cur_freq = 0; } static int tegra_devfreq_target(struct device *dev, unsigned long *freq, @@ -625,7 +647,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); @@ -633,7 +655,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, }; @@ -673,6 +695,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; /* @@ -692,6 +715,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_stop(tegra); + devfreq_interval_update(devfreq, new_delay); + ret = tegra_actmon_start(tegra); + break; + case DEVFREQ_GOV_SUSPEND: tegra_actmon_stop(tegra); devfreq_monitor_suspend(devfreq); @@ -711,6 +749,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 Sun Nov 3 20:41:29 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11224419 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 38E2116B1 for ; Sun, 3 Nov 2019 20:42:23 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 169F421929 for ; Sun, 3 Nov 2019 20:42:23 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="WXznQXsT" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728397AbfKCUmV (ORCPT ); Sun, 3 Nov 2019 15:42:21 -0500 Received: from mail-lj1-f193.google.com ([209.85.208.193]:45398 "EHLO mail-lj1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728379AbfKCUmV (ORCPT ); Sun, 3 Nov 2019 15:42:21 -0500 Received: by mail-lj1-f193.google.com with SMTP id n21so1748950ljg.12; Sun, 03 Nov 2019 12:42:19 -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=4x/QuAqBCJ/LT9bCDEwLgUjzwR3ulsMuNaXUn+CnmQ0=; b=WXznQXsTUZ5JDt6RkYbOmWVkyREz5cQyxsA1Bp4XsC/73Txbj2xa+GbKYobwSJIFpa ssU6b+JN5B+/932RtngKjvTsHlqsSm7b9nuHu7tp/U0E5tgyoDoiC3YP5F78Hu9wGAgy 6LUbeYKXdW0mwA3wCrygderyqXxfQzFmxD+EWkv997GTf2y75KH0RVvAYJ6ACFSPhKR0 nqB7Ga9AZgWeGKxz/MsUC8kbg8RKb4HCOIvdFdLOppnevCaWYpMOZqrxmPPsLVi/KqQA 4pYWTVxufKl6pg/9uBz9SjmZ5b4MfNttpny84a/VZn2ROapwKqVtnyNfUuzIQG+xwhhj YaGA== 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=4x/QuAqBCJ/LT9bCDEwLgUjzwR3ulsMuNaXUn+CnmQ0=; b=FiBWYGvXdPW0C5vnR/TI730T01DGD0nvAmzR5ki/GvZuVRI0AxWTLMCbnUy/pMrX2y xR2zbfQC79ED5IznhC+Pjc/qFjBMaqOi5EX0/k4g0oOaICFSvG157l+df21biNg8OSdR SCL2pR8c+fzqZeEv8Odhyggb3Mrive1sGkTGaoQ3ONeSS5BE3KR5ySnpLg/3/7P9OU6K XRXvKw52H90HrM/keeY9UwbkSq+uk65Mz2zzt5YxeZpSfaKzRp2TPGAXNcISESFQMX7U 2GnYQCb4pVADISfHbpzrICkSEVdCouOwvIh/Rw1hsXAmx1gg+FCb1dUkmm9RUIFDghHQ 3tUg== X-Gm-Message-State: APjAAAU9kl2WinwSI8FPBDpPBcx21bVKCXeCN5cUG1NKaTQjZ7MrX22W 6Qfbvd0InSF4P81/984I9XXIcPjy X-Google-Smtp-Source: APXvYqxeuIn2rXVwQPy09d4By0+x6mqGttl/UmFBS51Buvy+5kT6+ZSKYyVQWHSph5BN/JkgDsHQsg== X-Received: by 2002:a2e:481:: with SMTP id a1mr16382138ljf.209.1572813738828; Sun, 03 Nov 2019 12:42:18 -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 e22sm7099853ljg.73.2019.11.03.12.42.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 03 Nov 2019 12:42:18 -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 v8 17/18] PM / devfreq: tegra30: Tune up MCCPU boost-down coefficient Date: Sun, 3 Nov 2019 23:41:29 +0300 Message-Id: <20191103204130.2172-18-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191103204130.2172-1-digetx@gmail.com> References: <20191103204130.2172-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 9c645e83ef8b..732cacb54c3b 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 = 5 * KHZ, From patchwork Sun Nov 3 20:41:30 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11224421 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 3A63C16B1 for ; Sun, 3 Nov 2019 20:42:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 1A38B222CD for ; Sun, 3 Nov 2019 20:42:38 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="SHgenitc" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728407AbfKCUmX (ORCPT ); Sun, 3 Nov 2019 15:42:23 -0500 Received: from mail-lf1-f67.google.com ([209.85.167.67]:34434 "EHLO mail-lf1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728391AbfKCUmV (ORCPT ); Sun, 3 Nov 2019 15:42:21 -0500 Received: by mail-lf1-f67.google.com with SMTP id f5so10709757lfp.1; Sun, 03 Nov 2019 12:42:20 -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=SHgenitc+d9TdYTmb88OgDRLuQtlqrC6wH3ynKx7AeKywzEdeWR4I+PGGvgj8+dTU7 tXuRUkvN1ISdlKCNpj/wTID2PztAUvezADwqts9qFNlZR5KczHzCso/NYvKK9Zv+17Yq FjQVvyxt8Ru41OLgDzvi9SjhKAkq4HO2JHsNPaCnfZ2xTJLq2z74BK91hmsIEQ2uzHN7 F9zCGQRfgaTyBakFIPzBEZpOVQfxOKfJ06qineOL7yHFwCV/c0ArsF5sXxkWg0JfB598 pWRaSan57e5veSuBMDpO2jO5puvxcV2ltCoHGdMacbQPTQsmyuQDSYOCzWzpZTCmj2Dp z5CA== 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=C/1+NA3B5tTn3RTCUjkXQLX12HnJneS5SeSGotmjAXaqeFa/BVqe2ahBNQoPKnBIWT ICAya9YL6AimFvvgnbHSMaMB7OfZUVx9+WwzghQUtFc4T8ejF/b28jmxEfYOQgmSbpP8 XjBVpAWytdWSPCXb+hI8ydOS7mK+SKgfW8KzR37B4O2WNZLpxMU79WWDt1Xq8Gf0oLFv 5d4twEKjL7EARhQbfbjv26cdgN7i7BT3nefhiUVR8fhzx/e3E3mbGzzYSj3jRmdb998B ksWY5rAn531Re894Fwc0k34tgcriUmKkKOgSlwkEPMjMio9R2bykURJSP7hSXLfXbObg AACg== X-Gm-Message-State: APjAAAXnhD9h3k9Vrw6WcsI9EYJaJF3WcDGTb+qDrnr6RfDYYdKG0fwE 9tjSJZyuDoXvpG7y38kKCfs= X-Google-Smtp-Source: APXvYqzB8P/6NLtNYQ+iWrNg9Oh+f76HhBrbbedQnN9RqSpF7XVcRjpTWtO5x2d737RhkKXvQbbKkA== X-Received: by 2002:ac2:5295:: with SMTP id q21mr13904642lfm.93.1572813739765; Sun, 03 Nov 2019 12:42:19 -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 e22sm7099853ljg.73.2019.11.03.12.42.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 03 Nov 2019 12:42:19 -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 v8 18/18] PM / devfreq: tegra20/30: Add Dmitry as a maintainer Date: Sun, 3 Nov 2019 23:41:30 +0300 Message-Id: <20191103204130.2172-19-digetx@gmail.com> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191103204130.2172-1-digetx@gmail.com> References: <20191103204130.2172-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 --- 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