From patchwork Mon Apr 15 14:54:47 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1085704 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="iFB/D+48"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44jWpF2YYCz9s4V for ; Tue, 16 Apr 2019 00:58:13 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727760AbfDOO6G (ORCPT ); Mon, 15 Apr 2019 10:58:06 -0400 Received: from mail-lj1-f194.google.com ([209.85.208.194]:34895 "EHLO mail-lj1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727447AbfDOOzh (ORCPT ); Mon, 15 Apr 2019 10:55:37 -0400 Received: by mail-lj1-f194.google.com with SMTP id t4so7445480ljc.2; Mon, 15 Apr 2019 07:55:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=YyEWyd/0/FOQqZopdUl0UO49wVaBKveFMv7rmBv9s6k=; b=iFB/D+48kanPXUd9c+KTDTPEaK2DGIPtI/y1W+50te+5dWUK8c80SnQWmjgu530V6C neE+v4gjVqDulAvJsAm2FMeAQ7dIU84nAq38pGbtgSgHOMnxeNWKuWeViO4iuFC1//+6 Ue6uwZiT+mxf/njtGDYaK7dWt4amiqLeFqHQY4BRTxX05wON+At/QDQUXoBRrgFWysrH rf31ZzZjr/5odEaZrSg+lI0S6w0fEkMDj3JuFrE2ndY7XD0rDdxwjrPXx8zg/OU5LJy9 ubPRwudVSXOkH4KWMXNu11H/EaYMQdms54xTu+sQpIMP7ne/ub44+6wgii1w5mW15HF8 6fsQ== 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=YyEWyd/0/FOQqZopdUl0UO49wVaBKveFMv7rmBv9s6k=; b=F7BDc8BnwT7iH5ARLgfeAmws2Dj+qw/PZiUQpPEYZuu5k1ViCRF9AH8ZQx5nUsjar8 XbBnneNYt/IKLjiU1p187YLB5ZJyHyrZKM/QhcflpO7qfMM/o1k6ySS9RYZ5qZq/wFBJ Ypfc97UCzv5t1dJ15/fglyiWUGuzfTJ8sqatT8DDMlopN5SvkJddhjjWn9mtFU5zSKZ5 kvqE/AzWFrx3gfRvxHgnfRWs0h7unsfqFc8YpyiipTiJtNH8SxRDvOBXtSrarX8rF+8p p/a/l5TAB8V7qDChLzzm8wtHdkMeFdRberhhkxjW4IdmKJlwQ28AQ8eNvnVU9Igr2r4r MmQw== X-Gm-Message-State: APjAAAUCLRD4+/SjXrGfrSyQDRE4gRHXVLIyVelHEICu1e20E3vek/N6 xBWsWQHupgCqyG9r3tog8pO1pwiL X-Google-Smtp-Source: APXvYqxlHCj1h3ecJd5aGgmuZF3aw5DUepJt++1LHniEfWi7S0ndLg/AgcFkrd7YywmPYqQiPihItQ== X-Received: by 2002:a2e:960b:: with SMTP id v11mr27575063ljh.135.1555340135615; Mon, 15 Apr 2019 07:55:35 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l12sm9989932lfc.61.2019.04.15.07.55.34 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 15 Apr 2019 07:55:34 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v2 01/19] PM / devfreq: tegra: Fix kHz to Hz conversion Date: Mon, 15 Apr 2019 17:54:47 +0300 Message-Id: <20190415145505.18397-2-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190415145505.18397-1-digetx@gmail.com> References: <20190415145505.18397-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org The kHz to Hz is incorrectly converted in a few places in the code, this results in a wrong frequency being calculated because devfreq core uses OPP frequencies that are given in Hz to clamp the rate, while tegra-devfreq gives to the core value in kHz and then it also expects to receive value in kHz from the core. In a result memory freq is always set to a value which is close to ULONG_MAX because of the bug. Hence the EMC frequency is always capped to the maximum and the driver doesn't do anything useful. This patch was tested on Tegra30 and Tegra124 SoC's, EMC frequency scaling works properly now. Cc: # 4.14+ Tested-by: Steev Klimaszewski Signed-off-by: Dmitry Osipenko Reviewed-by: Chanwoo Choi --- drivers/devfreq/tegra-devfreq.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index c89ba7b834ff..02905978abe1 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -486,9 +486,9 @@ static int tegra_devfreq_target(struct device *dev, unsigned long *freq, { struct tegra_devfreq *tegra = dev_get_drvdata(dev); struct dev_pm_opp *opp; - unsigned long rate = *freq * KHZ; + unsigned long rate; - opp = devfreq_recommended_opp(dev, &rate, flags); + opp = devfreq_recommended_opp(dev, freq, flags); if (IS_ERR(opp)) { dev_err(dev, "Failed to find opp for %lu KHz\n", *freq); return PTR_ERR(opp); @@ -499,8 +499,6 @@ static int tegra_devfreq_target(struct device *dev, unsigned long *freq, clk_set_min_rate(tegra->emc_clock, rate); clk_set_rate(tegra->emc_clock, 0); - *freq = rate; - return 0; } @@ -510,7 +508,7 @@ static int tegra_devfreq_get_dev_status(struct device *dev, struct tegra_devfreq *tegra = dev_get_drvdata(dev); struct tegra_devfreq_device *actmon_dev; - stat->current_frequency = tegra->cur_freq; + stat->current_frequency = tegra->cur_freq * KHZ; /* To be used by the tegra governor */ stat->private_data = tegra; @@ -565,7 +563,7 @@ static int tegra_governor_get_target(struct devfreq *devfreq, target_freq = max(target_freq, dev->target_freq); } - *freq = target_freq; + *freq = target_freq * KHZ; return 0; } From patchwork Mon Apr 15 14:54:48 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1085702 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="Rn7ta0qn"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44jWp05MqMz9s4V for ; Tue, 16 Apr 2019 00:58:00 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727643AbfDOOzk (ORCPT ); Mon, 15 Apr 2019 10:55:40 -0400 Received: from mail-lj1-f194.google.com ([209.85.208.194]:34465 "EHLO mail-lj1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727564AbfDOOzj (ORCPT ); Mon, 15 Apr 2019 10:55:39 -0400 Received: by mail-lj1-f194.google.com with SMTP id j89so15964494ljb.1; Mon, 15 Apr 2019 07:55:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=cBA/ZMY4L1vdrvxaRh3YG36Kn12w5WQabTbSgaahxao=; b=Rn7ta0qn5pQd5j80L2NNfiOt+0m6Zj80jOQHk5lwAxmAav+AbUH2/UzHPCzB01h0Iv GGJTr2SDrGqvs5cql3+Rb987+6/0xRTkTVulsPCScXC5DCSGpmEAi1CUTS1ZFCD6ia9Z GVux8cGlVapwr4dg+aoIV9i6WGwta0KQRWaGiej3FJBCMwpICJN4k/8vYpiNewZ59f1f HonkkUFlXKszkxaiXsaJ/USOin/zPzO6tCMZbun0HQSjpS0mvykZx3Hx+Cx6QA2Rbvbx 6wV2Sglltm6ouWZs88AhMjmuzumUBGrUq7JJk0S2hX9YjOFLfy7OnlK+qdVh/5i5P1D7 yzAA== 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=cBA/ZMY4L1vdrvxaRh3YG36Kn12w5WQabTbSgaahxao=; b=EF8W1vrjXQoXB6+cVtOXI0HpkMfC7OIlPuhBGzE3pIkGuWMw7nlEm23Q8piEBc9HN2 /JQ2EDjRgv3eyhAQ+ycYXNKsJsFfPVw3ysSl+bGHN8m95yPBrcKDAcFA6upt+jcLxVSg +pc5Dm2DYHWALfeR35dyUXWZm5ccgHmrmIdhmTOZ4U21Pe6ZBEHbXDJc9oHNZSXSuWcl IqRsSCOu61EjxaZVxVepLFK0z7O3Kthsi/Mq6JyNxz5+EJxpEow0RP2SYg5eRYry9noE OAQtOW5s2YXvJYhmOmyKhtwyGJaJLqlZrnDxWML3BFx5wd19WlyB9shGi3LSx9PQopyQ AYQw== X-Gm-Message-State: APjAAAUB99MbS86K4fGmKOiwapKf5MyP2vOIoedrfNt3OA0iLAL+VNZo x+ScJZq6T+GOh8gLp9hNl6U= X-Google-Smtp-Source: APXvYqywHld9ZlUmtrLWMCsLR4OVnsMP0M+g0xZ84w60ykIGleHwsIIMBhB0hubRrF5IDOBbCPCECQ== X-Received: by 2002:a2e:2d02:: with SMTP id t2mr20937235ljt.148.1555340136896; Mon, 15 Apr 2019 07:55:36 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l12sm9989932lfc.61.2019.04.15.07.55.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 15 Apr 2019 07:55:36 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v2 02/19] PM / devfreq: tegra: Replace readl-writel with relaxed versions Date: Mon, 15 Apr 2019 17:54:48 +0300 Message-Id: <20190415145505.18397-3-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190415145505.18397-1-digetx@gmail.com> References: <20190415145505.18397-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org There is no need to insert memory barrier on each readl/writel invocation, hence use the relaxed versions. Signed-off-by: Dmitry Osipenko Reviewed-by: Chanwoo Choi --- drivers/devfreq/tegra-devfreq.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index 02905978abe1..0c0909fba545 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -191,23 +191,23 @@ static struct tegra_actmon_emc_ratio actmon_emc_ratios[] = { static u32 actmon_readl(struct tegra_devfreq *tegra, u32 offset) { - return readl(tegra->regs + offset); + return readl_relaxed(tegra->regs + offset); } static void actmon_writel(struct tegra_devfreq *tegra, u32 val, u32 offset) { - writel(val, tegra->regs + offset); + writel_relaxed(val, tegra->regs + offset); } static u32 device_readl(struct tegra_devfreq_device *dev, u32 offset) { - return readl(dev->regs + offset); + return readl_relaxed(dev->regs + offset); } static void device_writel(struct tegra_devfreq_device *dev, u32 val, u32 offset) { - writel(val, dev->regs + offset); + writel_relaxed(val, dev->regs + offset); } static unsigned long do_percent(unsigned long val, unsigned int pct) From patchwork Mon Apr 15 14:54:49 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1085703 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="SOVlKkZ6"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44jWp722h1z9s4V for ; Tue, 16 Apr 2019 00:58:07 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727611AbfDOO6B (ORCPT ); Mon, 15 Apr 2019 10:58:01 -0400 Received: from mail-lj1-f196.google.com ([209.85.208.196]:46557 "EHLO mail-lj1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726102AbfDOOzk (ORCPT ); Mon, 15 Apr 2019 10:55:40 -0400 Received: by mail-lj1-f196.google.com with SMTP id h21so15917751ljk.13; Mon, 15 Apr 2019 07:55:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=NN0Iq3Exkoe+g1IIlpsrZ/u3RxUCLf9jrmAQR40qhw0=; b=SOVlKkZ6C1fg13f+L3rNssmXT2jRFGN4OOi5XnNzT8xgr+ySe2A+hPsxKQuOGybJkY 6bSVuPlwIZgmodrBQOKpYX7gjxQfLK4YrKOVk1gICVDWTQfsHVEdF5ot/KxKJI7fueDn aP9Mk1sNWOTwj/xNHYPqzE3sBICVZXFwnsZ6zb8BiKs6dTFZdwL1bE3UZFHZTWniCQs8 6wGBC8k/qtQSOlCCMPjD3Mg8+Cwhul20QD+RZDcGD3MpRc6tnfs+1rqYdooaMMZ100/T Vyet6ANuzl2Id5B2McdcZKLNwTsKlEjIh63Amgj43pDdy3M9XPN0e0wD9nufwkf9+sVn PKyw== 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=NN0Iq3Exkoe+g1IIlpsrZ/u3RxUCLf9jrmAQR40qhw0=; b=P115ENPZowvSqdGhMrRdM+T87HH+Z0KtNI77k2lBVa07LaSw93PM4+elGmy2durERf xtHHNWcT1EbiHXYiMplZTiCNxmXHurO8o52H/jBrilbdNY6HT1HqhucKRShwanocgwYd NjrR0A9zhkCMbXQoSyiOnivPSIQQ+kd9RCqZ3CCsbT24/tYiYvvk0X2im3zHYkl7D0FE 71uSkiSwMKT7pBO21M52Tp/796/00D6kHPiaHM8sB0ecULvUMuDqxY0Uzlpn5Zxs0wSD 7xCyc+ObTfJ5XqtHK1JVbKCsMrAS49f8QYN4sLCYF1p9bsmsLnPny8y6t/xJG9hSYdIz wDqQ== X-Gm-Message-State: APjAAAVhX2164/v9wVjSqcy75p8T0Ow0q/7ekCQzb6lhhPdK+qwbWshg TNA+RMdrRO9CvFYEViGaQs8= X-Google-Smtp-Source: APXvYqw20O0sIuZ5Rwb0n+gJumFLmZUNIC+os7tFM+w/O6oSB+iXnigvBFmHezrd52qDcT6viY4lfw== X-Received: by 2002:a2e:884a:: with SMTP id z10mr17316128ljj.21.1555340138094; Mon, 15 Apr 2019 07:55:38 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l12sm9989932lfc.61.2019.04.15.07.55.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 15 Apr 2019 07:55:37 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v2 03/19] PM / devfreq: tegra: Don't ignore clk errors Date: Mon, 15 Apr 2019 17:54:49 +0300 Message-Id: <20190415145505.18397-4-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190415145505.18397-1-digetx@gmail.com> References: <20190415145505.18397-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org The clk_set_min_rate() could fail and in this case clk_set_rate() sets rate to 0, which may drop EMC rate to minimum and make machine very difficult to use. Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra-devfreq.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index 0c0909fba545..69581c9082d4 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -487,6 +487,7 @@ static int tegra_devfreq_target(struct device *dev, unsigned long *freq, struct tegra_devfreq *tegra = dev_get_drvdata(dev); struct dev_pm_opp *opp; unsigned long rate; + int err; opp = devfreq_recommended_opp(dev, freq, flags); if (IS_ERR(opp)) { @@ -496,8 +497,13 @@ static int tegra_devfreq_target(struct device *dev, unsigned long *freq, rate = dev_pm_opp_get_freq(opp); dev_pm_opp_put(opp); - clk_set_min_rate(tegra->emc_clock, rate); - clk_set_rate(tegra->emc_clock, 0); + err = clk_set_min_rate(tegra->emc_clock, rate); + if (err) + return err; + + err = clk_set_rate(tegra->emc_clock, 0); + if (err) + return err; return 0; } From patchwork Mon Apr 15 14:54:50 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1085672 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="czVmYOou"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44jWlN4WkQz9s8m for ; Tue, 16 Apr 2019 00:55:44 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727662AbfDOOzm (ORCPT ); Mon, 15 Apr 2019 10:55:42 -0400 Received: from mail-lf1-f67.google.com ([209.85.167.67]:46920 "EHLO mail-lf1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727638AbfDOOzl (ORCPT ); Mon, 15 Apr 2019 10:55:41 -0400 Received: by mail-lf1-f67.google.com with SMTP id k18so4406030lfj.13; Mon, 15 Apr 2019 07:55:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=vb5aKDrshoN/AsERjs9oArk+gZDepbjo8hgOV69FmyQ=; b=czVmYOouenoz7kyLQ/xzLM2TMkDlbUR2oSjA8nTbIpQkSys6vvoo2ka0tq8AcMcHuW c75nDGcefIXDbb83LX1WHdJAKxFZpmiEyUbUUbthBINCzndWfyUfJm6jHPXSvdV1U3bp Ra4mNXHOO0N+JF323Km1/raFzlNTT4BPtyEpmze+clulOgB7WIr9+8NWGzsAH+44pgEj LM2ol2e/+zGbGoFaqvgmVv98cChmiXTWBM4r9ibEHaPg/I1ob69g4MDdkrbBADrVLnAh PH9CLpDmZ7D9YpDFWNHkiF4asMMUr0Lo1oMbfdmImMPd5fcElGAVAwBJZR5K7ueMcop+ BuhQ== 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=vb5aKDrshoN/AsERjs9oArk+gZDepbjo8hgOV69FmyQ=; b=pALHjBMQ5ycv9ZoLQn1QnGr0Tepp0LCdSZCM+r983edKH+xAaNYDhe4rgv843V+yao f1rx2fhlx7bH1+p5fE9hP7V2XXgDTL4HHNgtkvECR0+CiTFPR8WH+ShbK49YwkMKmdik 2kfNeh6Jwa2vvsbG47P4iPc75wpW36j+TPwnqHMEebBex9mjZ7USXMpyfqNlXp05IwEJ 72YgUsBLHi0pI+INQIZmYcyjgcgDvg3DqfnJwmteQumpeaxvLdnNUZRZJLFEg5NqrmhB G9kr1hvIeVahevf5+Zt1iz7konLEXLE337pdZfkrMjWh67TR/smHYfeQT0eDvqPm0WML PRWA== X-Gm-Message-State: APjAAAVb+nmLicctm46AvBcKTs/NHSiYv3u/YYqofHKrBChxXtE9RRtC 66knmv6rOqnKE/F24HGwm14= X-Google-Smtp-Source: APXvYqycYgYjwaH8ozMlI+luULH0EHgG6Yavyf6/wvkvChmg2K17n1kaItbgXkjllJDtadhy6/qMvg== X-Received: by 2002:ac2:558d:: with SMTP id v13mr2960397lfg.76.1555340139178; Mon, 15 Apr 2019 07:55:39 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l12sm9989932lfc.61.2019.04.15.07.55.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 15 Apr 2019 07:55:38 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v2 04/19] PM / devfreq: tegra: Don't set EMC clock rate to maximum on probe Date: Mon, 15 Apr 2019 17:54:50 +0300 Message-Id: <20190415145505.18397-5-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190415145505.18397-1-digetx@gmail.com> References: <20190415145505.18397-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org There is no real benefit from doing so, hence let's drop that rate setting for consistency. Signed-off-by: Dmitry Osipenko Reviewed-by: Chanwoo Choi --- drivers/devfreq/tegra-devfreq.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index 69581c9082d4..d62fb1b0d9bb 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -648,8 +648,6 @@ static int tegra_devfreq_probe(struct platform_device *pdev) return PTR_ERR(tegra->emc_clock); } - clk_set_rate(tegra->emc_clock, ULONG_MAX); - tegra->rate_change_nb.notifier_call = tegra_actmon_rate_notify_cb; err = clk_notifier_register(tegra->emc_clock, &tegra->rate_change_nb); if (err) { From patchwork Mon Apr 15 14:54:51 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1085701 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="Ebq4sbxC"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44jWnz004Mz9s4V for ; Tue, 16 Apr 2019 00:57:58 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727718AbfDOO5w (ORCPT ); Mon, 15 Apr 2019 10:57:52 -0400 Received: from mail-lj1-f196.google.com ([209.85.208.196]:44258 "EHLO mail-lj1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727647AbfDOOzm (ORCPT ); Mon, 15 Apr 2019 10:55:42 -0400 Received: by mail-lj1-f196.google.com with SMTP id h16so15931178ljg.11; Mon, 15 Apr 2019 07:55:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=i6Xn9R9brWUT4b6RnyZ3sxN9szgqfnxfRVF7qHAQNak=; b=Ebq4sbxCdwRWFLTiMoDLZq7P/iZ5W97pwxcwiITZKZfWPmzEeT5B1C3Fpr07aXO3ns Tp5ibxnl2tFwuZDceYGWA3sq0Q744cbN4wW4xlXaTyLRCxfDEJW29SFEPSSQmkhbV3yU UJjpcVEbwbtsoziOkvVPb9FnOyPAQH2oBSJj0MXttp9K2OwRjE5pbpeTSjIm4rnC7aOR OnLw2F0RhR5Q39o3M5NVjYVdP5zH5uNSGNwsMmB74BpEytq8AGH23J8RpevqDxwJ8QI+ YC/IkpHbogtw2ljJFQd1XEjBtCE7qah01DQkTyTPm71HMsVT+oNgGLRTdLmSmSgmHovp y42w== 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=i6Xn9R9brWUT4b6RnyZ3sxN9szgqfnxfRVF7qHAQNak=; b=UoTuO3CeSAogtoVkjHHn7W7sOEHVZOMv46jh7lxfAX2MZJlyeFVTL+L7x0XOLFX5tY KKnjqdX17OGYka5kQ8ulLZoq3d7+R9a4Wai9J36ecjg8zu8LYn4XileiKoFxly9AtEou LSV6tGdYtTfp1Lp7E/OkWDHm8q57e+JHzqhkYupWq0mYILBknlQLX944ogalKYQqpqJ1 LNyen9Np2jVl1xWy3va7uDcCAAD4qZxiB7QFnaHxQQ5Y2Xyymcye754MMkyLVMtawf+i 5TBmdhhZULv2Hcwxc/q9Z5TKNltYMyRlh1maaMJCfQWUtBbfu4SH+9hAyyor5hIHDM2n w4RA== X-Gm-Message-State: APjAAAUdjEiyIWauiyRwbhsUOWaF3wwa7xiwW2JBHkk2G+m9hxOVcGcl sJwWB5CHfFlgxOsrYREiNyY= X-Google-Smtp-Source: APXvYqxQau+WvyLk8STbVoFeKqGPr/V7AzFSo6YVuvzNfeYFaaRkVH4j+GCgdELhqBNGspq42LgQGA== X-Received: by 2002:a2e:9597:: with SMTP id w23mr33961266ljh.111.1555340140224; Mon, 15 Apr 2019 07:55:40 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l12sm9989932lfc.61.2019.04.15.07.55.39 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 15 Apr 2019 07:55:39 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v2 05/19] PM / devfreq: tegra: Replace write memory barrier with the read barrier Date: Mon, 15 Apr 2019 17:54:51 +0300 Message-Id: <20190415145505.18397-6-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190415145505.18397-1-digetx@gmail.com> References: <20190415145505.18397-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org The write memory barrier isn't needed because the BUS buffer is flushed by read after write that happens after the removed wmb(), we will also use readl() instead of the relaxed version to ensure that read is indeed completed. Signed-off-by: Dmitry Osipenko Reviewed-by: Chanwoo Choi --- drivers/devfreq/tegra-devfreq.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index d62fb1b0d9bb..f0f0d78f6cbf 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -243,8 +243,7 @@ static void tegra_devfreq_update_wmark(struct tegra_devfreq *tegra, static void actmon_write_barrier(struct tegra_devfreq *tegra) { /* ensure the update has reached the ACTMON */ - wmb(); - actmon_readl(tegra, ACTMON_GLB_STATUS); + readl(tegra->regs + ACTMON_GLB_STATUS); } static void actmon_isr_device(struct tegra_devfreq *tegra, From patchwork Mon Apr 15 14:54:52 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1085700 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="ZRYl5FA1"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44jWnq2Sxkz9s4V for ; Tue, 16 Apr 2019 00:57:51 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727672AbfDOOzo (ORCPT ); Mon, 15 Apr 2019 10:55:44 -0400 Received: from mail-lj1-f193.google.com ([209.85.208.193]:43835 "EHLO mail-lj1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727564AbfDOOzo (ORCPT ); Mon, 15 Apr 2019 10:55:44 -0400 Received: by mail-lj1-f193.google.com with SMTP id f18so15946861lja.10; Mon, 15 Apr 2019 07:55:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=8HWSyi3PygSX+JPDCLdXZ2LpUmvO6eJiuWIhGQlNkaw=; b=ZRYl5FA1pSu4iIsJ5SzUWdQ8Ynz5lQuFwx0ZfeKpfXlDJg1Vgnv1eVLmy/gf7iS8L+ IhHCBkKjoGwS0kgxc3xAgcj+8kQpiE5a70ne4WZmGF9ZzHSethWa7X9agVmVMkXm6VS1 WzSDOfiyEfjJr8tiX70I+fFSuWD5XsKXAXVpDbbdXIDXHUBPkY4/ldDeeB379SXYf7vr xhDPc5nhtdAQf2CyaS14Rq3LFPyIRwvpwlL2a4O3aGrTjc68SH7FWRqFZefKN1BBHTmn QI7xcE4WRMEugjtG2Gtu2Ax8n4y0Wr1ciuuWX0tt78fTZxZ3cqO4YCzFQWAA5Vqt47Oq Ms2Q== 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=8HWSyi3PygSX+JPDCLdXZ2LpUmvO6eJiuWIhGQlNkaw=; b=WrV3hezmpqMDoYmy/9xBI9SxnFmgUrmTBNHeHsLtGhWb4Dh7c2EapuPmYDKvviG5mB kZdeepYAdwxw9GoiTtPaTEz3Rtr/CnJKaGTnoBfgUtQ8i6j6mA+gK2tW/nVFIB2EobQe ll8OjjolyUrLYRNARIgKPqB7UNyDk01CaNpakOPA1vRqLXcbKshv8UBgb2gs7yoMvKKT MDTlf7dGJ5Y8oyiT2dnqqX/EqPWFosOCF9bmN+dbKbvZJ99loQ9bBJZ4nqXLNEmnio9l 55nSRs4dKt23sCwwzK7FF6AIuLnbIqysGmx6UDAcSmLlBKVnbl2IpXClTPiGL9pV4TBo C24w== X-Gm-Message-State: APjAAAVeWC89S9qG2sGyVz3AZ0S1Cjnn3juaiLcVZEyijbgjQr9xybxc mrzGuDzFMx2aZwvD94ZXHsuZIzRE X-Google-Smtp-Source: APXvYqyXTWmS6raMlWH3PGMIX7x+F2XzxCBYLhFTJOSUHiShFgAWdeTZFVSUNxx+L7tIUxVxnX/4vw== X-Received: by 2002:a2e:9842:: with SMTP id e2mr40133233ljj.142.1555340141485; Mon, 15 Apr 2019 07:55:41 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l12sm9989932lfc.61.2019.04.15.07.55.40 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 15 Apr 2019 07:55:40 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v2 06/19] PM / devfreq: tegra: Fix missed error checking on devfreq initialization failure Date: Mon, 15 Apr 2019 17:54:52 +0300 Message-Id: <20190415145505.18397-7-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190415145505.18397-1-digetx@gmail.com> References: <20190415145505.18397-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org The code doesn't check for devfreq initialization failure, fix it. Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra-devfreq.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index f0f0d78f6cbf..aa0478464b35 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -707,6 +707,10 @@ static int tegra_devfreq_probe(struct platform_device *pdev) &tegra_devfreq_profile, "tegra_actmon", NULL); + if (IS_ERR(tegra->devfreq)) { + err = PTR_ERR(tegra->devfreq); + return err; + } return 0; } From patchwork Mon Apr 15 14:54:53 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1085699 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="Iikz0tPM"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44jWnp0J10z9s4V for ; Tue, 16 Apr 2019 00:57:50 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726298AbfDOO5n (ORCPT ); Mon, 15 Apr 2019 10:57:43 -0400 Received: from mail-lf1-f65.google.com ([209.85.167.65]:39260 "EHLO mail-lf1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727665AbfDOOzp (ORCPT ); Mon, 15 Apr 2019 10:55:45 -0400 Received: by mail-lf1-f65.google.com with SMTP id z9so13310047lfh.6; Mon, 15 Apr 2019 07:55:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=7D/dM4fBipnsxvEmjwhEN3m1qZVftiiLl0htXbGoqfk=; b=Iikz0tPMSJHo/9b4xUuPm1im8HadYaPqh9vcZPmXfTqQZF/t4h05StVCLF/4NTrpJj yyQ2i6Jp8cEAIrOYfhXumCM8t52K35kto+ikNmNtPkfkayLdpks7b4rmaV57jlhqxItP xrrQbJaFk37lYOic8Xbb9DQdhhntERlEVJilNvfBxgpA49/svNhSPvqXiukIUyBe8PgE nxC/lPlk2ncCaCQuggJAdKMP25/9d9yO4Y1YGHFEgUy5tebiuOSJdZIvgPz0RnS1WkCG qZ5lwAnepwTY8UUmdDAwmWfsZUu7oGBotbJ2HgUC+dWjXLFVq8JsVpgMPNk+w4SMp2NZ wQBg== 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=7D/dM4fBipnsxvEmjwhEN3m1qZVftiiLl0htXbGoqfk=; b=qYx+cj9lKhM4ue89LE7A5kFNf7hwcn1tojpT99LGoHPTn+4hgOJLv3O1StaHJcoLi3 LgrdpEN3yt6u/y1hcslvfFBaTOlAU/cqb3csjl/+4u3MsO0MZWcPIomWf/SE571piysC ZeFWjQ6pb3dEFNF2RRLhKcw1z5Zk+alF9x1ozP40FTyQnV+D/YLuhIPdMRWzm8BXfa+P flDjGUNz6xm4LNoMG17wT2HfyMLZuDli1dSUKyb/HRB3ekDMa5bqY94Thy4x8iRuxVir OZBoX4ZhkJn50kR/6RmHRpFj6f3IEjSiVgncI7bnRFxjIzeEQlJAlC7AhtQjDyUDz+js Za3g== X-Gm-Message-State: APjAAAV4VEvZ42rMvYo74YNDwQnJb+wFwklQdeSQgQCHv5BId7s1ujr3 +Dis8US60+FnfO0GONseq0I= X-Google-Smtp-Source: APXvYqy1bMLic7CfWsqtXpzVp1bacFt6Mzr6xcju2cRaYJXXHDIdXlquzv+f1H75V6XYOfX06v8JXA== X-Received: by 2002:ac2:4355:: with SMTP id o21mr40392111lfl.123.1555340142627; Mon, 15 Apr 2019 07:55:42 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l12sm9989932lfc.61.2019.04.15.07.55.41 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 15 Apr 2019 07:55:42 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v2 07/19] PM / devfreq: tegra: Register clk notifier in the end of driver's probe Date: Mon, 15 Apr 2019 17:54:53 +0300 Message-Id: <20190415145505.18397-8-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190415145505.18397-1-digetx@gmail.com> References: <20190415145505.18397-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org The notifier isn't unregistered if something fails after the registration, move it to the end of probe to fix the potential use-after-free problem. Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra-devfreq.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index aa0478464b35..c248c18431d9 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -647,14 +647,6 @@ static int tegra_devfreq_probe(struct platform_device *pdev) return PTR_ERR(tegra->emc_clock); } - tegra->rate_change_nb.notifier_call = tegra_actmon_rate_notify_cb; - err = clk_notifier_register(tegra->emc_clock, &tegra->rate_change_nb); - if (err) { - dev_err(&pdev->dev, - "Failed to register rate change notifier\n"); - return err; - } - reset_control_assert(tegra->reset); err = clk_prepare_enable(tegra->clock); @@ -712,6 +704,14 @@ static int tegra_devfreq_probe(struct platform_device *pdev) return err; } + tegra->rate_change_nb.notifier_call = tegra_actmon_rate_notify_cb; + err = clk_notifier_register(tegra->emc_clock, &tegra->rate_change_nb); + if (err) { + dev_err(&pdev->dev, + "Failed to register rate change notifier\n"); + return err; + } + return 0; } From patchwork Mon Apr 15 14:54:54 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1085698 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="ldAhs1+h"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44jWnd1Mqyz9s4V for ; Tue, 16 Apr 2019 00:57:41 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727564AbfDOOzq (ORCPT ); Mon, 15 Apr 2019 10:55:46 -0400 Received: from mail-lj1-f194.google.com ([209.85.208.194]:43839 "EHLO mail-lj1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727669AbfDOOzq (ORCPT ); Mon, 15 Apr 2019 10:55:46 -0400 Received: by mail-lj1-f194.google.com with SMTP id f18so15947003lja.10; Mon, 15 Apr 2019 07:55:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=HonNGQBQPPume3xb4u4R8OF7EASjclWY4XMwkylki7I=; b=ldAhs1+hpdO8nwPNvvWeyMTgcPjA89xuvb40QAioKEVRX930OdsuI6ZykJo7jdy7HH xE2Fr15hi7sJzlnz2Erxp0yALw7jCP2EyQDVW+mCpsH/jIwaHgxPUM3w77SXHQl5llD4 uma1prQWds1nxeSLino11KEanYnvHMmBCee6B5wYgrqHmDp80Ti+Ec8bqfXRVJ/Si1Sx UsBfSzVGeTWHAK4SuiEVPbd3n3kXbSaCrh+riJXVyhUAxMvyZAq9/5WlwF5Mzo0lpkGZ R1RJVfp3hlhcPMJLyDgJnlQhFQgu0ruoVg+7ddR0ELgw04TFmIhu3vpWXJ3cgfE8CkF0 CTwA== 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=HonNGQBQPPume3xb4u4R8OF7EASjclWY4XMwkylki7I=; b=GF9oh9a7WFrqatwsSWD+1tJUHdx7PoMPAJH1RPr7PpgmxW4Qys8iafMGT+p9+9Zi46 c27efmCbd6feAUsoJEa3lyfhiH8njprMJtd5d9WA0tD5u41uQaQ9JbRHfmr4Rk/+qQ1L HQlXa84C/slmGC93ArypGqVt8WsNVf6TWIQuK2yPqcO2Nx+dvypFdWlDyDhK7hDD5JIZ tqw+2xpD06R6D/wgrO6/qTPXKOvRFX/+GfXh5fkgf4HvjvhG1EYxufm91CcYO4g0vFjg oCqbcJNg5JFPZHCFPeDd392b+yPF9ldTMi9srrd56IDY9IPPDhDRm5C9bQG0Ronfmdcx XPxw== X-Gm-Message-State: APjAAAXhAJxfY94qEGMsblrJf4NlyCzrxTHVu9lQrfFcqkqZeAszbqyP F2K29DlQmEwbCX9SXcUHjjY= X-Google-Smtp-Source: APXvYqz+CyArdDxY+ldT9BHf8tMnctrHeI9UAh8q9Zj7yMnXdh6hGJTqo73JB7maB91/gUhmXUdTWw== X-Received: by 2002:a2e:b01a:: with SMTP id y26mr23079457ljk.38.1555340143822; Mon, 15 Apr 2019 07:55:43 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l12sm9989932lfc.61.2019.04.15.07.55.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 15 Apr 2019 07:55:43 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v2 08/19] PM / devfreq: tegra: Remove OPP entries on driver removal Date: Mon, 15 Apr 2019 17:54:54 +0300 Message-Id: <20190415145505.18397-9-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190415145505.18397-1-digetx@gmail.com> References: <20190415145505.18397-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org This fixes "_opp_is_duplicate" warning messages on driver's module reload. Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra-devfreq.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index c248c18431d9..98ba27b1e2c4 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -701,7 +701,7 @@ static int tegra_devfreq_probe(struct platform_device *pdev) NULL); if (IS_ERR(tegra->devfreq)) { err = PTR_ERR(tegra->devfreq); - return err; + goto remove_opps; } tegra->rate_change_nb.notifier_call = tegra_actmon_rate_notify_cb; @@ -709,10 +709,15 @@ static int tegra_devfreq_probe(struct platform_device *pdev) if (err) { dev_err(&pdev->dev, "Failed to register rate change notifier\n"); - return err; + goto remove_opps; } return 0; + +remove_opps: + dev_pm_opp_remove_all_dynamic(&pdev->dev); + + return err; } static int tegra_devfreq_remove(struct platform_device *pdev) @@ -722,6 +727,9 @@ static int tegra_devfreq_remove(struct platform_device *pdev) u32 val; unsigned int i; + devm_devfreq_remove_device(&pdev->dev, tegra->devfreq); + dev_pm_opp_remove_all_dynamic(&pdev->dev); + for (i = 0; i < ARRAY_SIZE(actmon_device_configs); i++) { val = device_readl(&tegra->devices[i], ACTMON_DEV_CTRL); val &= ~ACTMON_DEV_CTRL_ENB; From patchwork Mon Apr 15 14:54:55 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1085697 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="aUW0GXnj"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44jWnb33h3z9s4V for ; Tue, 16 Apr 2019 00:57:39 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727744AbfDOO5d (ORCPT ); Mon, 15 Apr 2019 10:57:33 -0400 Received: from mail-lf1-f68.google.com ([209.85.167.68]:44560 "EHLO mail-lf1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727691AbfDOOzr (ORCPT ); Mon, 15 Apr 2019 10:55:47 -0400 Received: by mail-lf1-f68.google.com with SMTP id h18so13308888lfj.11; Mon, 15 Apr 2019 07:55:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=gNaJ9hj6M7iqP6WyQLdsWMm4ZczqztWmMwaK15IRnNA=; b=aUW0GXnj7HeNFEGsBRqtx0kL/kSSdDftx86JC3HEvoyYEg1M+kfxpW5FFmsRDdmQyw 0KNbzyH32j410QsOt9JGsddNDpUfO7SDTBmOX+pdSUomafytryJOsJV/G4jQ5cjS4/Qi QSdthJ4y6OMlExlX+Qn8/vIqVmy8epbpHgKJbnLOQg+F49SFaLnLizmSZ9uZFv1Y4bA0 Wh+bzgRXPgdIFxhA+g2ewmeSxf/Z0V4KEC7zLVOzd6ik1Gl1HrqJEPASWzwQEnOK1xDj 1cA1Mbct1JBvXOjKM8wncXWvCAZvJ/Wm2rROPjetGqjID/r07byMDWg0ABYpjUTJQU1H GN7w== 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=gNaJ9hj6M7iqP6WyQLdsWMm4ZczqztWmMwaK15IRnNA=; b=N3uvI1oqUGH4/E4GLOcbMbnwYBRr7ppwvY6XjwONpJNKaxZLPeg+ARgzhg/6n7zDW6 42pk0irP11olmpD72pFPRFTvcKwcLJ14aeOuwMrKqN8Z7VpqJoWBeFzxyvdHQHjqnyVg kTTW5ms4gKRGUjkwfzlj+5tzwTdvdoKpLLpqnRgfSDhgNAc5ZZYhfB8YlBRNWYaLt/VU xyTSHiQM6F9CpNEIhCzigOjf9FY8jg7KCQUsdxGyMLQW0lf5BlKPpp1HIwwHA+ezV0us P1XOjGm+aWqEeYfnN6Q6KGrbrQNCsvfp+ugJeFbTr/VB3Vi7GCMQhZGx4KniNyyE+soV Vigg== X-Gm-Message-State: APjAAAXlrE79pH3rhffQDUnhVm4V5OxAKASgcnyryxqd1LFq5r8pHO0g hx9vKrfxIdDZIL30Z1ENOy4= X-Google-Smtp-Source: APXvYqyJ+kMwwmrHOUvzAntTQUwoUr3z/0RjrvGMaTxXT5zjaAxzlf82SrBcLB5RfqgmGtrN4Ov4GA== X-Received: by 2002:ac2:4ad1:: with SMTP id m17mr7115049lfp.86.1555340145025; Mon, 15 Apr 2019 07:55:45 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l12sm9989932lfc.61.2019.04.15.07.55.43 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 15 Apr 2019 07:55:44 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v2 09/19] PM / devfreq: tegra: Change interrupt request order Date: Mon, 15 Apr 2019 17:54:55 +0300 Message-Id: <20190415145505.18397-10-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190415145505.18397-1-digetx@gmail.com> References: <20190415145505.18397-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org The interrupt should be requested after devfreq initialization because interrupt handler uses the devfreq, otherwise interrupt handler will crash if interrupt fires before the initialization. This shouldn't happen in practice, but it's more correct to have interrupt available after all of interrupt prerequisites are ready. Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra-devfreq.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index 98ba27b1e2c4..2a1464098200 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -686,14 +686,6 @@ static int tegra_devfreq_probe(struct platform_device *pdev) platform_set_drvdata(pdev, tegra); - err = devm_request_threaded_irq(&pdev->dev, irq, actmon_isr, - actmon_thread_isr, IRQF_SHARED, - "tegra-devfreq", tegra); - if (err) { - dev_err(&pdev->dev, "Interrupt request failed\n"); - return err; - } - tegra_devfreq_profile.initial_freq = clk_get_rate(tegra->emc_clock); tegra->devfreq = devm_devfreq_add_device(&pdev->dev, &tegra_devfreq_profile, @@ -701,6 +693,14 @@ static int tegra_devfreq_probe(struct platform_device *pdev) NULL); if (IS_ERR(tegra->devfreq)) { err = PTR_ERR(tegra->devfreq); + return err; + } + + err = devm_request_threaded_irq(&pdev->dev, irq, actmon_isr, + actmon_thread_isr, IRQF_SHARED, + "tegra-devfreq", tegra); + if (err) { + dev_err(&pdev->dev, "Interrupt request failed\n"); goto remove_opps; } From patchwork Mon Apr 15 14:54:56 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1085696 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="eXtCDKVf"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44jWnT25Nyz9s8m for ; Tue, 16 Apr 2019 00:57:33 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727711AbfDOOzt (ORCPT ); Mon, 15 Apr 2019 10:55:49 -0400 Received: from mail-lj1-f193.google.com ([209.85.208.193]:34912 "EHLO mail-lj1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727696AbfDOOzt (ORCPT ); Mon, 15 Apr 2019 10:55:49 -0400 Received: by mail-lj1-f193.google.com with SMTP id t4so7446049ljc.2; Mon, 15 Apr 2019 07:55:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=hxFXcnZ0+kTwKn7yZtNdaeYIBolFlxe3a8rBh8lAM/Q=; b=eXtCDKVf6nAyyLh0sq7KGY+Ll04nN2O252ndlmQYempdbdaSqB1IItDZWFqtrrnONr z6vVYoywUJZ1YZIDNk6JBY+UUqX47LEkPiAXxbz20v726ovK9x+YFX0CPaRrwdrkFiO4 xrQ2DO2jvCB2mhcxxwuLorYDrAkmJCqmdymYfzsSl2M7TiL/TiuQUcJt2JPfzQTaBbhx 07KwwqoFReOa+rc6TcQvzDBz2nfrv8Y9Q1RFRQsgZVD3kFvwQ5BQhSKcaqie1oTHPtrh piNCYnLA+/ecjFZHXrbMARWAexzKKeu1Wbh/R58kINTIleosUp37RpghcDtxSvJpluGZ ukqQ== 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=hxFXcnZ0+kTwKn7yZtNdaeYIBolFlxe3a8rBh8lAM/Q=; b=ajIpuwHFPMmXIm8cEmgSOpuSOg1RIefVhcAQBIaqdhMsQ0LZIrE5l16ic9jFSe1UkR hL2bV64Ka2s0SwSVfP6KsEx2aupvjrQTkx+wOL2Bja6qRWwuNqhd0cncl1Ygpycjbsln 6aLaOZGwpvK1Ull0Lr201Lglu1xutt6KLfMK0FZPzLfIorkRdO3IAdY1ypbB1T3aFFTn mAUegl9y9NfnqdpCFSGDBUuu3OMAT5JUkMDn1OtyTY3fdR1h6y4vkjLwpStmgjHVT1a4 fjGRGWE3MJWn0SA79AMx92KLw4bnfZGVfA4B8NFfTQf8zPxguAojS8dBRSVHlAXg4myK HfcQ== X-Gm-Message-State: APjAAAWu5u1l1GSYVIL1uIfnU0v21By6IkP24coBEvC5+UxqjcjTG8ww abu9IPFH2DrKcZxoCUpmKRaWKXGm X-Google-Smtp-Source: APXvYqxLiSuG3c38oCHCQXCoarUgZ8Cc5n+iWYgvYKnRltOWSIQti2P8fyCaHg5KtpkMJx+UUAZuyg== X-Received: by 2002:a2e:3c0a:: with SMTP id j10mr39395786lja.164.1555340146091; Mon, 15 Apr 2019 07:55:46 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l12sm9989932lfc.61.2019.04.15.07.55.45 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 15 Apr 2019 07:55:45 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v2 10/19] PM / devfreq: tegra: Drop primary interrupt handler Date: Mon, 15 Apr 2019 17:54:56 +0300 Message-Id: <20190415145505.18397-11-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190415145505.18397-1-digetx@gmail.com> References: <20190415145505.18397-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org There is no real need in the primary interrupt handler, hence move everything to the secondary (threaded) handler. In a result locking is consistent now and there are no potential races with the interrupt handler because it is protected with the devfreq's mutex. Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra-devfreq.c | 61 ++++++++++++--------------------- 1 file changed, 22 insertions(+), 39 deletions(-) diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index 2a1464098200..69b557df5084 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -144,7 +144,6 @@ static struct tegra_devfreq_device_config actmon_device_configs[] = { struct tegra_devfreq_device { const struct tegra_devfreq_device_config *config; void __iomem *regs; - spinlock_t lock; /* Average event count sampled in the last interrupt */ u32 avg_count; @@ -249,11 +248,8 @@ static void actmon_write_barrier(struct tegra_devfreq *tegra) static void actmon_isr_device(struct tegra_devfreq *tegra, struct tegra_devfreq_device *dev) { - unsigned long flags; u32 intr_status, dev_ctrl; - spin_lock_irqsave(&dev->lock, flags); - dev->avg_count = device_readl(dev, ACTMON_DEV_AVG_COUNT); tegra_devfreq_update_avg_wmark(tegra, dev); @@ -302,26 +298,6 @@ static void actmon_isr_device(struct tegra_devfreq *tegra, device_writel(dev, ACTMON_INTR_STATUS_CLEAR, ACTMON_DEV_INTR_STATUS); actmon_write_barrier(tegra); - - spin_unlock_irqrestore(&dev->lock, flags); -} - -static irqreturn_t actmon_isr(int irq, void *data) -{ - struct tegra_devfreq *tegra = data; - bool handled = false; - unsigned int i; - u32 val; - - val = actmon_readl(tegra, ACTMON_GLB_STATUS); - for (i = 0; i < ARRAY_SIZE(tegra->devices); i++) { - if (val & tegra->devices[i].config->irq_mask) { - actmon_isr_device(tegra, tegra->devices + i); - handled = true; - } - } - - return handled ? IRQ_WAKE_THREAD : IRQ_NONE; } static unsigned long actmon_cpu_to_emc_rate(struct tegra_devfreq *tegra, @@ -348,35 +324,46 @@ static void actmon_update_target(struct tegra_devfreq *tegra, unsigned long cpu_freq = 0; unsigned long static_cpu_emc_freq = 0; unsigned int avg_sustain_coef; - unsigned long flags; + u32 avg_count; if (dev->config->avg_dependency_threshold) { cpu_freq = cpufreq_get(0); static_cpu_emc_freq = actmon_cpu_to_emc_rate(tegra, cpu_freq); } - spin_lock_irqsave(&dev->lock, flags); - - dev->target_freq = dev->avg_count / ACTMON_SAMPLING_PERIOD; + avg_count = dev->avg_count; + dev->target_freq = avg_count / ACTMON_SAMPLING_PERIOD; avg_sustain_coef = 100 * 100 / dev->config->boost_up_threshold; dev->target_freq = do_percent(dev->target_freq, avg_sustain_coef); dev->target_freq += dev->boost_freq; - if (dev->avg_count >= dev->config->avg_dependency_threshold) + if (avg_count >= dev->config->avg_dependency_threshold) dev->target_freq = max(dev->target_freq, static_cpu_emc_freq); - - spin_unlock_irqrestore(&dev->lock, flags); } static irqreturn_t actmon_thread_isr(int irq, void *data) { struct tegra_devfreq *tegra = data; + bool handled = false; + unsigned int i; + u32 val; mutex_lock(&tegra->devfreq->lock); - update_devfreq(tegra->devfreq); + + val = actmon_readl(tegra, ACTMON_GLB_STATUS); + for (i = 0; i < ARRAY_SIZE(tegra->devices); i++) { + if (val & tegra->devices[i].config->irq_mask) { + actmon_isr_device(tegra, tegra->devices + i); + handled = true; + } + } + + if (handled) + update_devfreq(tegra->devfreq); + mutex_unlock(&tegra->devfreq->lock); - return IRQ_HANDLED; + return handled ? IRQ_HANDLED : IRQ_NONE; } static int tegra_actmon_rate_notify_cb(struct notifier_block *nb, @@ -386,7 +373,6 @@ static int tegra_actmon_rate_notify_cb(struct notifier_block *nb, struct tegra_devfreq *tegra; struct tegra_devfreq_device *dev; unsigned int i; - unsigned long flags; if (action != POST_RATE_CHANGE) return NOTIFY_OK; @@ -398,9 +384,7 @@ static int tegra_actmon_rate_notify_cb(struct notifier_block *nb, for (i = 0; i < ARRAY_SIZE(tegra->devices); i++) { dev = &tegra->devices[i]; - spin_lock_irqsave(&dev->lock, flags); tegra_devfreq_update_wmark(tegra, dev); - spin_unlock_irqrestore(&dev->lock, flags); } actmon_write_barrier(tegra); @@ -668,7 +652,6 @@ static int tegra_devfreq_probe(struct platform_device *pdev) dev = tegra->devices + i; dev->config = actmon_device_configs + i; dev->regs = tegra->regs + dev->config->offset; - spin_lock_init(&dev->lock); tegra_actmon_configure_device(tegra, dev); } @@ -696,8 +679,8 @@ static int tegra_devfreq_probe(struct platform_device *pdev) return err; } - err = devm_request_threaded_irq(&pdev->dev, irq, actmon_isr, - actmon_thread_isr, IRQF_SHARED, + err = devm_request_threaded_irq(&pdev->dev, irq, NULL, + actmon_thread_isr, IRQF_ONESHOT, "tegra-devfreq", tegra); if (err) { dev_err(&pdev->dev, "Interrupt request failed\n"); From patchwork Mon Apr 15 14:54:57 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1085695 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="X+gfS5WE"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44jWnS3PYvz9s4V for ; Tue, 16 Apr 2019 00:57:32 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727575AbfDOO5Z (ORCPT ); Mon, 15 Apr 2019 10:57:25 -0400 Received: from mail-lj1-f194.google.com ([209.85.208.194]:44266 "EHLO mail-lj1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727706AbfDOOzt (ORCPT ); Mon, 15 Apr 2019 10:55:49 -0400 Received: by mail-lj1-f194.google.com with SMTP id h16so15931552ljg.11; Mon, 15 Apr 2019 07:55:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=9wB9FAexEGLwnJBnw1ywqk+Ov7BUvvvxBDjWenbpsA4=; b=X+gfS5WEeVdxhn5Oso+e7HYsuk13vNT00h0e3BaO+AkzncvfcszMPJ9mpdrCgtu/Iv Iw2ma67fhHipDOKLP2mWXrXkol73/NKNJNedBgndIu16mLVNTTjJZqNJd/wBYniHa5D4 Ov9K3cXJTQZhowq0+ASa47R7NOvZ6g1xeUhZieCzgFC2FC6cJ0g5QJxX3dfhMUfNsUti 9gSIuq17KKA9c3AhoUHVrzKzWE1feI/ENarkbVkeQKAzZcqH/rivqQ4+npy40dAeldBM fiJh8Msldbnk5V1A9jCQwSIqQUEBpDWUrAHw9D807/rsr/D3oNUk/Vc2NpM6BQSrmNuP 3NoA== 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=9wB9FAexEGLwnJBnw1ywqk+Ov7BUvvvxBDjWenbpsA4=; b=S67NoUriVvH9W23GWPayM+7/0Q8cGkVl/iq3i4KHs2vtVkI1zn6Ph7F0BnynGGIgQZ SY3IlVaJqtDbARR9oxGVj0qGLhePVIKHL1EG8+P+Mn1jlkFXOn3U7+8UhjnjxgnLbNDK 2vQX/1bchjIY+MhMTQgTNT8eCAzyObwCvXK3IVlcI/YNLfiAmoz7nm15exN5YvENB/JX 197n4xI/7rduCHx+T9923N2ya1q6GrpHDzSCxzUnUKGc8b5Sz6zykyVCChgW2Msi8+RE fTcx6SQjlBChUUJLRzTmLnIGij6pm/m76q1t9XW/ahJ74eC6x0meCeTgE5gQoBziyCV4 g/ag== X-Gm-Message-State: APjAAAWbfjcLypbG4q6WGBfFQM4y+FnXxrmRgV72uh7rzC0noatzzO5j BQED7tC4Tx/ydAKpGNsL+ws= X-Google-Smtp-Source: APXvYqzTDB4fiI6qEbkssAst66En8rkkxwv/jehbiDOYC6ljmr7cgd7HhrH+QOuEunKgL1tO82ZLLQ== X-Received: by 2002:a2e:9211:: with SMTP id k17mr39395691ljg.46.1555340147289; Mon, 15 Apr 2019 07:55:47 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l12sm9989932lfc.61.2019.04.15.07.55.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 15 Apr 2019 07:55:46 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v2 11/19] PM / devfreq: tegra: De-initialize properly on driver's probe error Date: Mon, 15 Apr 2019 17:54:57 +0300 Message-Id: <20190415145505.18397-12-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190415145505.18397-1-digetx@gmail.com> References: <20190415145505.18397-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org Reset hardware, disable ACTMON clock, release OPP's and free IRQ before removing devfreq device since there is no guarantee that interrupt handling won't run after masking interrupt in hardware. Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra-devfreq.c | 53 ++++++++++++++++----------------- 1 file changed, 26 insertions(+), 27 deletions(-) diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index 69b557df5084..a668e4fbc874 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -663,28 +663,28 @@ static int tegra_devfreq_probe(struct platform_device *pdev) irq = platform_get_irq(pdev, 0); if (irq < 0) { - dev_err(&pdev->dev, "Failed to get IRQ: %d\n", irq); - return irq; + err = irq; + dev_err(&pdev->dev, "Failed to get IRQ: %d\n", err); + goto remove_opps; } platform_set_drvdata(pdev, tegra); tegra_devfreq_profile.initial_freq = clk_get_rate(tegra->emc_clock); - tegra->devfreq = devm_devfreq_add_device(&pdev->dev, - &tegra_devfreq_profile, - "tegra_actmon", - NULL); + tegra->devfreq = devfreq_add_device(&pdev->dev, + &tegra_devfreq_profile, + "tegra_actmon", + NULL); if (IS_ERR(tegra->devfreq)) { err = PTR_ERR(tegra->devfreq); - return err; + goto remove_opps; } - err = devm_request_threaded_irq(&pdev->dev, irq, NULL, - actmon_thread_isr, IRQF_ONESHOT, - "tegra-devfreq", tegra); + err = request_threaded_irq(irq, NULL, actmon_thread_isr, IRQF_ONESHOT, + "tegra-devfreq", tegra); if (err) { dev_err(&pdev->dev, "Interrupt request failed\n"); - goto remove_opps; + goto remove_devfreq; } tegra->rate_change_nb.notifier_call = tegra_actmon_rate_notify_cb; @@ -692,14 +692,23 @@ static int tegra_devfreq_probe(struct platform_device *pdev) if (err) { dev_err(&pdev->dev, "Failed to register rate change notifier\n"); - goto remove_opps; + goto disable_interrupt; } return 0; +disable_interrupt: + free_irq(irq, tegra); + +remove_devfreq: + devfreq_remove_device(tegra->devfreq); + remove_opps: dev_pm_opp_remove_all_dynamic(&pdev->dev); + reset_control_reset(tegra->reset); + clk_disable_unprepare(tegra->clock); + return err; } @@ -707,24 +716,14 @@ static int tegra_devfreq_remove(struct platform_device *pdev) { struct tegra_devfreq *tegra = platform_get_drvdata(pdev); int irq = platform_get_irq(pdev, 0); - u32 val; - unsigned int i; - - devm_devfreq_remove_device(&pdev->dev, tegra->devfreq); - dev_pm_opp_remove_all_dynamic(&pdev->dev); - - for (i = 0; i < ARRAY_SIZE(actmon_device_configs); i++) { - val = device_readl(&tegra->devices[i], ACTMON_DEV_CTRL); - val &= ~ACTMON_DEV_CTRL_ENB; - device_writel(&tegra->devices[i], val, ACTMON_DEV_CTRL); - } - - actmon_write_barrier(tegra); - - devm_free_irq(&pdev->dev, irq, tegra); clk_notifier_unregister(tegra->emc_clock, &tegra->rate_change_nb); + free_irq(irq, tegra); + + devfreq_remove_device(tegra->devfreq); + dev_pm_opp_remove_all_dynamic(&pdev->dev); + reset_control_reset(tegra->reset); clk_disable_unprepare(tegra->clock); return 0; From patchwork Mon Apr 15 14:54:58 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1085692 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="F2VUKGeQ"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44jWnB06hbz9ryj for ; Tue, 16 Apr 2019 00:57:18 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727731AbfDOOzy (ORCPT ); Mon, 15 Apr 2019 10:55:54 -0400 Received: from mail-lj1-f196.google.com ([209.85.208.196]:32974 "EHLO mail-lj1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727669AbfDOOzu (ORCPT ); Mon, 15 Apr 2019 10:55:50 -0400 Received: by mail-lj1-f196.google.com with SMTP id f23so15990390ljc.0; Mon, 15 Apr 2019 07:55:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=0m53QvjknqRp3ie0vm6CpfbAyiM0FVU3b4et23ofcuA=; b=F2VUKGeQdqeNwP0nOteb8rfuOpQaIP/fnuUKyn2O6Et18CEeZZbN9q3hj9obLt7Ip7 sjTdcdMe0UNSZ/xP3SSbOG/Fr3Mb6X8VRaiVwA9ANypifyHL3reKiZmUwEtlE55sshhe uDvfyoxBm7Q1Ye991Zdu5HeyIphGUUw5xPx9B0nDTqQWpSsKl2KEQcz4pYHlMvy4yEDZ MCo8FHdDFpCK/Uomh7Ry+e+0ggO2tB0kVrOARVQVET1ZL6kDp76atbAdBpD9YbKddfF8 02CV8kmhny1lUXNrqv3kXSLB8iCKXZIiWM2eDvI4NDccXvP6QlvQNRW6pDOSNlEj2I7x bZHA== 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=0m53QvjknqRp3ie0vm6CpfbAyiM0FVU3b4et23ofcuA=; b=ER5xjhVBpn4sHS+r1qB5Yb+h7AR0CF6Ep7ULFR59rHyvNf2gHhGPwZ2yWfsUefsI9C FrcMQlrVQPyqKRcMay75VKleJn8Feupu1fUo4u3WmNx1thp1R8Lt9QPbK5vdjhLzO1kI mJLMx5/7xI8WAS7efTH9Jv2qyr4d/HYm2S8OARuVi1abMN38CJaFg5BHyK/xKes1q6I3 LuHhMvEYIpiA5tsXIefxa6jxjWasuJoIAXhuC/0XSV8vHBjmDd1m0YhcngAn2yiedwWc ATEXDMBGTHu9m4/RsXSU2VAhzxChluBTohUprNb2C0Bpb/vcQmRts8yGy1xnOXUDsraT Cwtg== X-Gm-Message-State: APjAAAVpBB9Vhx6yRnMyGuYpXRi/5qRJ8HneWv4JpWWiA1mKYp7YAiJ/ xPTnag4pReVUJqksc4Ad7uI= X-Google-Smtp-Source: APXvYqzpTGE5/TikmNNDpIoscTEm2A9ggE6XFk7D7Ol09PySJOwV+H2gq5rqP1/BbtgyOUZ3DcXWdg== X-Received: by 2002:a2e:7d19:: with SMTP id y25mr18247204ljc.126.1555340148490; Mon, 15 Apr 2019 07:55:48 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l12sm9989932lfc.61.2019.04.15.07.55.47 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 15 Apr 2019 07:55:47 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v2 12/19] PM / devfreq: tegra: Avoid inconsistency of current frequency value Date: Mon, 15 Apr 2019 17:54:58 +0300 Message-Id: <20190415145505.18397-13-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190415145505.18397-1-digetx@gmail.com> References: <20190415145505.18397-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org The frequency value potentially could change in-between. It doesn't cause any real problem at all right now, but that could change in the future. Hence let's avoid the inconsistency. Signed-off-by: Dmitry Osipenko Reviewed-by: Chanwoo Choi --- drivers/devfreq/tegra-devfreq.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index a668e4fbc874..f1a6f951813a 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -496,13 +496,15 @@ static int tegra_devfreq_get_dev_status(struct device *dev, { struct tegra_devfreq *tegra = dev_get_drvdata(dev); struct tegra_devfreq_device *actmon_dev; + unsigned long cur_freq; - stat->current_frequency = tegra->cur_freq * KHZ; + cur_freq = READ_ONCE(tegra->cur_freq); /* To be used by the tegra governor */ stat->private_data = tegra; /* The below are to be used by the other governors */ + stat->current_frequency = cur_freq * KHZ; actmon_dev = &tegra->devices[MCALL]; @@ -513,7 +515,7 @@ static int tegra_devfreq_get_dev_status(struct device *dev, stat->busy_time *= 100 / BUS_SATURATION_RATIO; /* Number of cycles in a sampling period */ - stat->total_time = ACTMON_SAMPLING_PERIOD * tegra->cur_freq; + stat->total_time = ACTMON_SAMPLING_PERIOD * cur_freq; stat->busy_time = min(stat->busy_time, stat->total_time); From patchwork Mon Apr 15 14:54:59 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1085693 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="J4Uloyev"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44jWnB4LP1z9s4V for ; Tue, 16 Apr 2019 00:57:18 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727728AbfDOOzx (ORCPT ); Mon, 15 Apr 2019 10:55:53 -0400 Received: from mail-lf1-f65.google.com ([209.85.167.65]:33414 "EHLO mail-lf1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727718AbfDOOzw (ORCPT ); Mon, 15 Apr 2019 10:55:52 -0400 Received: by mail-lf1-f65.google.com with SMTP id j11so13356661lfm.0; Mon, 15 Apr 2019 07:55:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=WGyPSf1K0bwZ7WuY0uWEI/50dRfbYW5Q/niDp699c2A=; b=J4UloyevIRDg2O1zufZ1NDyjqymXpw16FBIWr+1GvAp5gXwV/bhnYWE4oUxqj9LDgu qTWwsWOFoJGbEdpA6ScJsO+kQ+xGU4erPS0JdDJ0KfejkmMXmh9+4q3wbZ8dhmFinNq0 M6Y5B/+NZd8mbTNgflUPIe9nPlgkUZDx0XiZVJpC/xite+3WQvdsJZ/O0qdeZLx1hEit BE7Opuj3lCXn4xL2Bo9vCElUyO3lItndAFw0gIGexnaYiitlIqNNmOKrYycVgkYhkkKZ oMgSr+6PfWIrv0HghOlWP9evCjs01QkKa6mIvWk+efuWzMhL2Ej7TqOssBY7xqLAxrQh d3aw== 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=WGyPSf1K0bwZ7WuY0uWEI/50dRfbYW5Q/niDp699c2A=; b=noOD/8DchxPHQUvBX3IJxx0yR3+9st3w0imh6ZLm1qSQgKXXoY69jqeKQETdL/Juto rx4Y4c0cKzaehqarOSUdXF1WVp0qRav8l38eBLRigvv0JdhU4GgGIK7dg88NhFbTK2iF GTJ2AF2sx4pHIgIRirkxthMH6m+vz9I12sqA7cmqAXG4bdGrxsM9jXVfbyCaduQZxgQV akWK1b1sDAUGT4UBsK00/S2dRrWQ9PE00SCasSsDitEoF68DK0FFq5VZpCu+K/B93wlC 4iuw4IDSbymcTH+dV5ZA/CQ/p51i8rW58rSruZp4cUkeKuVK53eEw1JGr1+4c0CULkvp TUow== X-Gm-Message-State: APjAAAW6QR6CL4mcNUJk1JwNekEbEUrZv3K9mFIlnCHv4wLtfZ74vQwr W8BkUmDeRta6gW5y5lqnn64= X-Google-Smtp-Source: APXvYqzhvHZzlPFFCmkuJuL4+pFjlzsCPWSxZybBRKdXMEBSiaUBDlk0d8kp1dOU/zOBJ7Ro2qWAWA== X-Received: by 2002:ac2:51da:: with SMTP id u26mr5780373lfm.32.1555340149641; Mon, 15 Apr 2019 07:55:49 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l12sm9989932lfc.61.2019.04.15.07.55.48 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 15 Apr 2019 07:55:49 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v2 13/19] PM / devfreq: tegra: Mark ACTMON's governor as immutable Date: Mon, 15 Apr 2019 17:54:59 +0300 Message-Id: <20190415145505.18397-14-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190415145505.18397-1-digetx@gmail.com> References: <20190415145505.18397-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org The ACTMON's governor supports only the Tegra's devfreq device and there is no need to use any other governor, hence let's mark Tegra governor as immutable to permanently stick it with Tegra's devfreq device. Signed-off-by: Dmitry Osipenko Reviewed-by: Chanwoo Choi --- drivers/devfreq/Kconfig | 1 - drivers/devfreq/tegra-devfreq.c | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/devfreq/Kconfig b/drivers/devfreq/Kconfig index 6a172d338f6d..a78dffe603c1 100644 --- a/drivers/devfreq/Kconfig +++ b/drivers/devfreq/Kconfig @@ -94,7 +94,6 @@ config ARM_EXYNOS_BUS_DEVFREQ config ARM_TEGRA_DEVFREQ tristate "Tegra DEVFREQ Driver" depends on ARCH_TEGRA_124_SOC - select DEVFREQ_GOV_SIMPLE_ONDEMAND select PM_OPP help This adds the DEVFREQ driver for the Tegra family of SoCs. diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index f1a6f951813a..832e4f5aa11b 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -593,6 +593,7 @@ static struct devfreq_governor tegra_devfreq_governor = { .name = "tegra_actmon", .get_target_freq = tegra_governor_get_target, .event_handler = tegra_governor_event_handler, + .immutable = true, }; static int tegra_devfreq_probe(struct platform_device *pdev) From patchwork Mon Apr 15 14:55:00 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1085694 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="uRIJJWq2"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44jWnK1ZbNz9s4V for ; Tue, 16 Apr 2019 00:57:25 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727240AbfDOO5S (ORCPT ); Mon, 15 Apr 2019 10:57:18 -0400 Received: from mail-lf1-f68.google.com ([209.85.167.68]:35494 "EHLO mail-lf1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727724AbfDOOzx (ORCPT ); Mon, 15 Apr 2019 10:55:53 -0400 Received: by mail-lf1-f68.google.com with SMTP id j20so463578lfh.2; Mon, 15 Apr 2019 07:55:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=2a8fC0nP20eaK/s3RenDJHXOepQxRNKrtNn7R1x2Vjo=; b=uRIJJWq2YA3kWKYjwX06jPxaMSyogcJu01QNlmhKgqMbyMQOguY8YSS/WCc+rddofI CSgi0WYajepCTMXpsWdyJEfUJvKOmRE7jXv5mXcHuc+95BkNFKRgq1Izepzh0iOs+5+X 4wBi3pBoGegzdi2ofyf1iP1jjVbKunepe+48KMso6sI87CsK5FhmVQBl57wbT4KxEiTy BXvbjIRATXm5goLzRiC/CkHYMRBQIUdPSbHhDeDJuDBPOKScccIfrtUjvhPDJCQNbvMi 0WQ9u5VdIEsWpMUD2F9/FSX0oryu3BCoNnayZrxQ/4UmZVdH0Z7jC+dMyWJnVNwPQu+e BISQ== 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=2a8fC0nP20eaK/s3RenDJHXOepQxRNKrtNn7R1x2Vjo=; b=hc4vVyySQZZtt7xCaxlUDIMZPbBDWlcFZ17Snu6rqSi9MsX1i3x3wp7rmb0P6Ls8/o 7OGbjdFA47TpaEw+WHRL17a+iUVpAjVbwJsQw+J5wlzI1/rDGxfttZEtmQU7LSq5BI7T MvAR3zIU02QYodeRPA+kky6r+P5K5c5E1R7e4FFKi7f2xAZefi5vBfYl03aZ8KHlvKdw oQ3Dv2wjbA04nfjnBBBBXmEbRKCK1F7taEBY9gun1Gn7f2uhumLeL7IphKd+ZF5/YKy5 Q8MU3uyFy1lDql3zPpuB1Nn7EG/9nTrJsLKEu2sxrWm6Z/bxK8RzqjjiMp2DrXfGnFm8 Aeqw== X-Gm-Message-State: APjAAAWKX0/8PdW6ePoloBS7yBioxsm/zPPZN8+YCuxpXvTSKWBZ4Og1 nlzYnsGcUAq0Z8yF8jedwlY= X-Google-Smtp-Source: APXvYqyZSWBC4cOgGPTu1zJCyzOgYxzDijCZ86WHxy8xW5eOOBvAov2/xdjbaKUli3hJBmlaWCeaOw== X-Received: by 2002:a19:e30a:: with SMTP id a10mr22844700lfh.58.1555340150792; Mon, 15 Apr 2019 07:55:50 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l12sm9989932lfc.61.2019.04.15.07.55.49 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 15 Apr 2019 07:55:50 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v2 14/19] PM / devfreq: tegra: Move governor registration to driver's probe Date: Mon, 15 Apr 2019 17:55:00 +0300 Message-Id: <20190415145505.18397-15-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190415145505.18397-1-digetx@gmail.com> References: <20190415145505.18397-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org There is no need to register the ACTMON's governor separately from the driver, hence let's move the registration into the driver's probe function for consistency and to make code cleaner a tad. Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra-devfreq.c | 44 +++++++++------------------------ 1 file changed, 12 insertions(+), 32 deletions(-) diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index 832e4f5aa11b..46c61af8ca33 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -673,6 +673,12 @@ static int tegra_devfreq_probe(struct platform_device *pdev) platform_set_drvdata(pdev, tegra); + err = devfreq_add_governor(&tegra_devfreq_governor); + if (err) { + dev_err(&pdev->dev, "Failed to add governor: %d\n", err); + goto remove_opps; + } + tegra_devfreq_profile.initial_freq = clk_get_rate(tegra->emc_clock); tegra->devfreq = devfreq_add_device(&pdev->dev, &tegra_devfreq_profile, @@ -680,7 +686,7 @@ static int tegra_devfreq_probe(struct platform_device *pdev) NULL); if (IS_ERR(tegra->devfreq)) { err = PTR_ERR(tegra->devfreq); - goto remove_opps; + goto remove_governor; } err = request_threaded_irq(irq, NULL, actmon_thread_isr, IRQF_ONESHOT, @@ -706,6 +712,9 @@ static int tegra_devfreq_probe(struct platform_device *pdev) remove_devfreq: devfreq_remove_device(tegra->devfreq); +remove_governor: + devfreq_remove_governor(&tegra_devfreq_governor); + remove_opps: dev_pm_opp_remove_all_dynamic(&pdev->dev); @@ -729,7 +738,7 @@ static int tegra_devfreq_remove(struct platform_device *pdev) reset_control_reset(tegra->reset); clk_disable_unprepare(tegra->clock); - return 0; + return devfreq_remove_governor(&tegra_devfreq_governor); } static const struct of_device_id tegra_devfreq_of_match[] = { @@ -747,36 +756,7 @@ static struct platform_driver tegra_devfreq_driver = { .of_match_table = tegra_devfreq_of_match, }, }; - -static int __init tegra_devfreq_init(void) -{ - int ret = 0; - - ret = devfreq_add_governor(&tegra_devfreq_governor); - if (ret) { - pr_err("%s: failed to add governor: %d\n", __func__, ret); - return ret; - } - - ret = platform_driver_register(&tegra_devfreq_driver); - if (ret) - devfreq_remove_governor(&tegra_devfreq_governor); - - return ret; -} -module_init(tegra_devfreq_init) - -static void __exit tegra_devfreq_exit(void) -{ - int ret = 0; - - platform_driver_unregister(&tegra_devfreq_driver); - - ret = devfreq_remove_governor(&tegra_devfreq_governor); - if (ret) - pr_err("%s: failed to remove governor: %d\n", __func__, ret); -} -module_exit(tegra_devfreq_exit) +module_platform_driver(tegra_devfreq_driver); MODULE_LICENSE("GPL v2"); MODULE_DESCRIPTION("Tegra devfreq driver"); From patchwork Mon Apr 15 14:55:01 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1085690 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="U8yy6Myc"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44jWmy5RRXz9ryj for ; Tue, 16 Apr 2019 00:57:06 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727718AbfDOOz4 (ORCPT ); Mon, 15 Apr 2019 10:55:56 -0400 Received: from mail-lj1-f193.google.com ([209.85.208.193]:37127 "EHLO mail-lj1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727727AbfDOOzy (ORCPT ); Mon, 15 Apr 2019 10:55:54 -0400 Received: by mail-lj1-f193.google.com with SMTP id v13so15968957ljk.4; Mon, 15 Apr 2019 07:55:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=rz6qwN3l7n5yC/HLWphu9AhhGsr+yXkjeWRq/trB/HY=; b=U8yy6MycGS/Hz77dF9jeE9cEQBG2ZT5X2wiPW4Kl/dsm3bIphuDke2S0B5dXcB7z18 6gQIWU7LRieqXXsnZ1zdf0O9L9pGN8gLA0wWK7tdW61H+8oIIXxlNXXOvvIkf6TNfoCO Ozc41yIubuwFn8n76mh5MQIc3xKtXg1tNWbBhqKwENBEYBXYcB7P017Klq3q2RutDxXM qG1URiM8Q8AGyWS2kdts3qM5m5Iz9Gnuv95v0CIA53Jfj5JGJM4XDPS6i/zf25TeP05j 9GPhr7ENlOgPLG257FCbtVN7M/vQnjzSSdNU1/+9+CGOo8h9ldlAV1PL0ZgQGRYsRD+H XgmA== 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=rz6qwN3l7n5yC/HLWphu9AhhGsr+yXkjeWRq/trB/HY=; b=YWi7tn8IifX6pnAGe6xT4Rh0Um3eVi/fXa3+v5oPOVD2TQsBepzxTjfQeGK20a6SEg 2KweKI/U/eZ44bDnft3tAUbRJ6MRBh0wq34/DV/U4Vh6BkgKoxodMBWoT0/x+u/1iU0T bdyX5Ga/Gcws5kcFpVv1lOgGtW1CG5SfiqDAU0du9ygMH4M9Bn1kzgCrcbXZRStWwYPW Ey6CwTQdEJqRGXOBWF7VuAyzqAqLfcToaONY5Z1UCJkFeZNhVu4FnVlCInGVvFyL1LBH RC7YCNILDss7rPR0eW8+2A2/MXGBbasuU0dx3EtWz0nKghXGHk46zMCaQrxxcN1rGyVf gz8Q== X-Gm-Message-State: APjAAAWZfHupaJtCXkIH3nPC3hZt04YFZ7mzcV2bXTJ8lLpHV6aKi3I3 Ng3rjQj8xsXudaA7zEf871c= X-Google-Smtp-Source: APXvYqxri/AbVKMu1CBHp33I6bfobhOz191RQ5TvkQz504bC0xXgcmi28CxVXWUA/FrSs0wTfFb9ZQ== X-Received: by 2002:a2e:420c:: with SMTP id p12mr40666011lja.1.1555340151996; Mon, 15 Apr 2019 07:55:51 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l12sm9989932lfc.61.2019.04.15.07.55.50 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 15 Apr 2019 07:55:51 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v2 15/19] PM / devfreq: tegra: Synchronize IRQ after masking it in hardware Date: Mon, 15 Apr 2019 17:55:01 +0300 Message-Id: <20190415145505.18397-16-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190415145505.18397-1-digetx@gmail.com> References: <20190415145505.18397-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org There is no guarantee that interrupt handling isn't running in parallel, hence it is necessary to synchronize IRQ in order to ensure that interrupt is indeed disabled. Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra-devfreq.c | 33 ++++++++++++++++----------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index 46c61af8ca33..cfbfbe28e7bf 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -171,6 +171,8 @@ struct tegra_devfreq { struct notifier_block rate_change_nb; struct tegra_devfreq_device devices[ARRAY_SIZE(actmon_device_configs)]; + + int irq; }; struct tegra_actmon_emc_ratio { @@ -432,6 +434,8 @@ static void tegra_actmon_disable_interrupts(struct tegra_devfreq *tegra) } actmon_write_barrier(tegra); + + synchronize_irq(tegra->irq); } static void tegra_actmon_configure_device(struct tegra_devfreq *tegra, @@ -603,7 +607,6 @@ static int tegra_devfreq_probe(struct platform_device *pdev) struct resource *res; unsigned int i; unsigned long rate; - int irq; int err; tegra = devm_kzalloc(&pdev->dev, sizeof(*tegra), GFP_KERNEL); @@ -659,18 +662,18 @@ static int tegra_devfreq_probe(struct platform_device *pdev) tegra_actmon_configure_device(tegra, dev); } + tegra->irq = platform_get_irq(pdev, 0); + if (tegra->irq < 0) { + err = tegra->irq; + dev_err(&pdev->dev, "Failed to get IRQ: %d\n", err); + return err; + } + for (rate = 0; rate <= tegra->max_freq * KHZ; rate++) { rate = clk_round_rate(tegra->emc_clock, rate); dev_pm_opp_add(&pdev->dev, rate, 0); } - irq = platform_get_irq(pdev, 0); - if (irq < 0) { - err = irq; - dev_err(&pdev->dev, "Failed to get IRQ: %d\n", err); - goto remove_opps; - } - platform_set_drvdata(pdev, tegra); err = devfreq_add_governor(&tegra_devfreq_governor); @@ -689,10 +692,11 @@ static int tegra_devfreq_probe(struct platform_device *pdev) goto remove_governor; } - err = request_threaded_irq(irq, NULL, actmon_thread_isr, IRQF_ONESHOT, - "tegra-devfreq", tegra); + err = devm_request_threaded_irq(&pdev->dev, tegra->irq, NULL, + actmon_thread_isr, IRQF_ONESHOT, + "tegra-devfreq", tegra); if (err) { - dev_err(&pdev->dev, "Interrupt request failed\n"); + dev_err(&pdev->dev, "Interrupt request failed: %d\n", err); goto remove_devfreq; } @@ -701,14 +705,11 @@ static int tegra_devfreq_probe(struct platform_device *pdev) if (err) { dev_err(&pdev->dev, "Failed to register rate change notifier\n"); - goto disable_interrupt; + goto remove_devfreq; } return 0; -disable_interrupt: - free_irq(irq, tegra); - remove_devfreq: devfreq_remove_device(tegra->devfreq); @@ -727,10 +728,8 @@ static int tegra_devfreq_probe(struct platform_device *pdev) static int tegra_devfreq_remove(struct platform_device *pdev) { struct tegra_devfreq *tegra = platform_get_drvdata(pdev); - int irq = platform_get_irq(pdev, 0); clk_notifier_unregister(tegra->emc_clock, &tegra->rate_change_nb); - free_irq(irq, tegra); devfreq_remove_device(tegra->devfreq); dev_pm_opp_remove_all_dynamic(&pdev->dev); From patchwork Mon Apr 15 14:55:02 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1085691 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="r3RwG5xO"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44jWmz4VJRz9s4V for ; Tue, 16 Apr 2019 00:57:07 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727611AbfDOO5G (ORCPT ); Mon, 15 Apr 2019 10:57:06 -0400 Received: from mail-lj1-f193.google.com ([209.85.208.193]:40772 "EHLO mail-lj1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727612AbfDOOz4 (ORCPT ); Mon, 15 Apr 2019 10:55:56 -0400 Received: by mail-lj1-f193.google.com with SMTP id q66so862968ljq.7; Mon, 15 Apr 2019 07:55:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=dnaqtyRtTlaHL2UEB1k08xrsRa/S/S1jgRZuYKlkVb4=; b=r3RwG5xOZrYWr5Vu768+o9qsYi9mVE+j8SHbjuZH64VXwezByoejTXsU8+ft5FGk1G ePnl7QPD/Ewltk/nOq3FlvRf76ymZS4UUEfJypzh//0aGf3Obs0wwJ/r72yTjnTJ+I5Z E+pxf7/Qm/cOy0T//NmfDaJLTAsRB1Fd5Ekq1y0DyPHOl85KV4gmUSYtg0E79/3Lyp5p 6Yiu2FNBE7IbjY761jPFq/BP7vBLkl0mUjByMO1qksY8dYHcq7aTYWt+Vyj13RTQYPlO /7mMWeLlyNpTfymaqw0MSbNpAuR2U+aIzTIfdZlEg83OSTQiOL0qcDzteupz1XdiHtlD kn1Q== 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=dnaqtyRtTlaHL2UEB1k08xrsRa/S/S1jgRZuYKlkVb4=; b=A+su8J295wdxDMLVRceAjUiP7A6DBv3g1HMn84/iAglne9EFd3kFOrlD6vF5A/oiSW NZTzhnacWbR0MMY+UR57jTHilt4Xx+Cii4VfxtQp0XlyViCk6VaLFMHsrtg3i4nlEs75 6e9KHJIpCQ269D/Ry1s9fzR9xXUdxkK609FqnGItUhzLxgLjQ3zSO5Sxeea2uHmGfz4o rh1H9KnfUGykT3R/N1Wk7aNIDJDEbWxVEAMxuLYljEti6aVVsM/h6G9eRgpKoGTF5TNE OuaUqWNYsg2VtU7bME0+iOsebmXuPqRNIX8r5MiqIzumYs6jK1jPoyOkUUovqFJRw+3W /l5w== X-Gm-Message-State: APjAAAXqyYqEBrKzCEt10ekMdqQMMdSn1HIEDpjbgJpkUGLjzdBT06aO e5pPuOn2rns3m3pBuhebdTs= X-Google-Smtp-Source: APXvYqxPpUBRM55MstIKfsBLSYuOcuoZD3Yi84OCCf/eJHpfnPixrk2uKZvL1Ab+Gv77VS29jqly2w== X-Received: by 2002:a2e:8507:: with SMTP id j7mr24530275lji.85.1555340153143; Mon, 15 Apr 2019 07:55:53 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l12sm9989932lfc.61.2019.04.15.07.55.52 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 15 Apr 2019 07:55:52 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v2 16/19] PM / devfreq: tegra: Reconfigure hardware on governor's restart Date: Mon, 15 Apr 2019 17:55:02 +0300 Message-Id: <20190415145505.18397-17-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190415145505.18397-1-digetx@gmail.com> References: <20190415145505.18397-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org Move hardware configuration to governor's start/resume methods. This allows to re-initialize hardware counters and reconfigure cleanly if governor was stopped/paused. That is needed because we are not aware of all hardware changes that happened while governor was stopped and the paused state may get out of sync with reality, hence it's better to start with a clean slate after the pause. In a result there is no memory bandwidth starvation after resume from suspend-to-ram that results in display controller underflowing that happens on resume because of improper decision made by devfreq about the required memory frequency. This change also cleans up code a tad by moving hardware-configuration code into a single location. Signed-off-by: Dmitry Osipenko --- drivers/devfreq/tegra-devfreq.c | 84 ++++++++++++--------------------- 1 file changed, 31 insertions(+), 53 deletions(-) diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index cfbfbe28e7bf..f0711d5ad27d 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -394,50 +394,6 @@ static int tegra_actmon_rate_notify_cb(struct notifier_block *nb, return NOTIFY_OK; } -static void tegra_actmon_enable_interrupts(struct tegra_devfreq *tegra) -{ - struct tegra_devfreq_device *dev; - u32 val; - unsigned int i; - - for (i = 0; i < ARRAY_SIZE(tegra->devices); i++) { - dev = &tegra->devices[i]; - - val = device_readl(dev, ACTMON_DEV_CTRL); - val |= ACTMON_DEV_CTRL_AVG_ABOVE_WMARK_EN; - val |= ACTMON_DEV_CTRL_AVG_BELOW_WMARK_EN; - val |= ACTMON_DEV_CTRL_CONSECUTIVE_BELOW_WMARK_EN; - val |= ACTMON_DEV_CTRL_CONSECUTIVE_ABOVE_WMARK_EN; - - device_writel(dev, val, ACTMON_DEV_CTRL); - } - - actmon_write_barrier(tegra); -} - -static void tegra_actmon_disable_interrupts(struct tegra_devfreq *tegra) -{ - struct tegra_devfreq_device *dev; - u32 val; - unsigned int i; - - for (i = 0; i < ARRAY_SIZE(tegra->devices); i++) { - dev = &tegra->devices[i]; - - val = device_readl(dev, ACTMON_DEV_CTRL); - val &= ~ACTMON_DEV_CTRL_AVG_ABOVE_WMARK_EN; - val &= ~ACTMON_DEV_CTRL_AVG_BELOW_WMARK_EN; - val &= ~ACTMON_DEV_CTRL_CONSECUTIVE_BELOW_WMARK_EN; - val &= ~ACTMON_DEV_CTRL_CONSECUTIVE_ABOVE_WMARK_EN; - - device_writel(dev, val, ACTMON_DEV_CTRL); - } - - actmon_write_barrier(tegra); - - synchronize_irq(tegra->irq); -} - static void tegra_actmon_configure_device(struct tegra_devfreq *tegra, struct tegra_devfreq_device *dev) { @@ -461,13 +417,40 @@ static void tegra_actmon_configure_device(struct tegra_devfreq *tegra, << ACTMON_DEV_CTRL_CONSECUTIVE_BELOW_WMARK_NUM_SHIFT; val |= (ACTMON_ABOVE_WMARK_WINDOW - 1) << ACTMON_DEV_CTRL_CONSECUTIVE_ABOVE_WMARK_NUM_SHIFT; + val |= ACTMON_DEV_CTRL_AVG_ABOVE_WMARK_EN; + val |= ACTMON_DEV_CTRL_AVG_BELOW_WMARK_EN; + val |= ACTMON_DEV_CTRL_CONSECUTIVE_BELOW_WMARK_EN; + val |= ACTMON_DEV_CTRL_CONSECUTIVE_ABOVE_WMARK_EN; val |= ACTMON_DEV_CTRL_ENB; device_writel(dev, val, ACTMON_DEV_CTRL); +} + +static void tegra_actmon_start(struct tegra_devfreq *tegra) +{ + unsigned int i; + + actmon_writel(tegra, ACTMON_SAMPLING_PERIOD - 1, + ACTMON_GLB_PERIOD_CTRL); + + for (i = 0; i < ARRAY_SIZE(tegra->devices); i++) + tegra_actmon_configure_device(tegra, &tegra->devices[i]); actmon_write_barrier(tegra); } +static void tegra_actmon_stop(struct tegra_devfreq *tegra) +{ + unsigned int i; + + for (i = 0; i < ARRAY_SIZE(tegra->devices); i++) + device_writel(&tegra->devices[i], 0x00000000, ACTMON_DEV_CTRL); + + actmon_write_barrier(tegra); + + synchronize_irq(tegra->irq); +} + static int tegra_devfreq_target(struct device *dev, unsigned long *freq, u32 flags) { @@ -571,22 +554,22 @@ static int tegra_governor_event_handler(struct devfreq *devfreq, switch (event) { case DEVFREQ_GOV_START: devfreq_monitor_start(devfreq); - tegra_actmon_enable_interrupts(tegra); + tegra_actmon_start(tegra); break; case DEVFREQ_GOV_STOP: - tegra_actmon_disable_interrupts(tegra); + tegra_actmon_stop(tegra); devfreq_monitor_stop(devfreq); break; case DEVFREQ_GOV_SUSPEND: - tegra_actmon_disable_interrupts(tegra); + tegra_actmon_stop(tegra); devfreq_monitor_suspend(devfreq); break; case DEVFREQ_GOV_RESUME: devfreq_monitor_resume(devfreq); - tegra_actmon_enable_interrupts(tegra); + tegra_actmon_start(tegra); break; } @@ -651,15 +634,10 @@ static int tegra_devfreq_probe(struct platform_device *pdev) tegra->max_freq = clk_round_rate(tegra->emc_clock, ULONG_MAX) / KHZ; tegra->cur_freq = clk_get_rate(tegra->emc_clock) / KHZ; - actmon_writel(tegra, ACTMON_SAMPLING_PERIOD - 1, - ACTMON_GLB_PERIOD_CTRL); - for (i = 0; i < ARRAY_SIZE(actmon_device_configs); i++) { dev = tegra->devices + i; dev->config = actmon_device_configs + i; dev->regs = tegra->regs + dev->config->offset; - - tegra_actmon_configure_device(tegra, dev); } tegra->irq = platform_get_irq(pdev, 0); From patchwork Mon Apr 15 14:55:03 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1085689 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="u07hBvEI"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44jWmv5WtTz9ryj for ; Tue, 16 Apr 2019 00:57:03 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726298AbfDOO4O (ORCPT ); Mon, 15 Apr 2019 10:56:14 -0400 Received: from mail-lf1-f67.google.com ([209.85.167.67]:45675 "EHLO mail-lf1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727608AbfDOOz5 (ORCPT ); Mon, 15 Apr 2019 10:55:57 -0400 Received: by mail-lf1-f67.google.com with SMTP id t11so8834640lfl.12; Mon, 15 Apr 2019 07:55:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=g0f7ZY8i9j16DUYrPZZdyFK1eNQfLvrcOqHQkH44N70=; b=u07hBvEI/ohUU5TejR5qm25pW8QnVlYDQzsx/uHzvV0zD/MHA0KopG1c0MZPoFlaf9 NV1lfx5uby7efXJZ7nYx4pZzO5KFMkBNuh+nF+wIIY1hfSKqne9z4unZziVLAp/rBGa/ DYKZBgCX1rZqYyHdANUiChrCrqOuxGHzmysLE+rNH75xUdiwI5HwtkMpY9btb6aKjsYg WopzmSYAcLvIim2WJXCyv5R/vP5GHGZAKKH7Y48EkewW7u5J/w5Ih5ryR7reQt1FDLEb HDZd4oga8Q+Z+PAdS3mCKkMvulItml079qFbnvEnhHeBdGSOLJax3eHQTDAVeNhB0BFI Rnjg== 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=g0f7ZY8i9j16DUYrPZZdyFK1eNQfLvrcOqHQkH44N70=; b=GgGM0isGy17hgZoIsKGju5nHpATzr3XjVcs5NnAPj+OkAG6wunwl5mN/1FpC0Zm/Fz SbTmHN3Y8c7rXiK19Sb4i+kO+j5WxILuFW5QN+SGIYrg8GdNYfL606EU2aSnp/4q47Ms 9q1O+rmXT38cy7uiKM0wdr1ViMT+zTg6/plsfF3JZ5kpq2AoiSStv4xZ2BRCG0HtKNWw fe1Kjj1Ysl7nkIshcd+sxIsQhGZFNkAzC3EcuRNxS+OaHry3a880I1syLBIu0XBJD3no mdNlPV2LCLZQZPXU8rHCOnaGVAWilFLopwEqrIkW3al54SiBzyuXF8UdftEuFayWnm6j cU5g== X-Gm-Message-State: APjAAAVHnD/4YwcURASkOzCO8Vo/KXKl1Y4al74G6pNgjZDBxdDJS2YS P4EgdOlN8DxlolMx50WCmso= X-Google-Smtp-Source: APXvYqySM9jFFINKlp3uqbBSNF+ZqMSqTASBVLo7t+umXcB1LyInE1iBBqHUnSBWMyFajAlHRmIXlw== X-Received: by 2002:ac2:5495:: with SMTP id t21mr3442247lfk.3.1555340154409; Mon, 15 Apr 2019 07:55:54 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l12sm9989932lfc.61.2019.04.15.07.55.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 15 Apr 2019 07:55:53 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v2 17/19] PM / devfreq: tegra: Support Tegra30 Date: Mon, 15 Apr 2019 17:55:03 +0300 Message-Id: <20190415145505.18397-18-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190415145505.18397-1-digetx@gmail.com> References: <20190415145505.18397-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org The devfreq driver can be used on Tegra30 without any code change and it works perfectly fine, the default Tegra124 parameters are good enough for Tegra30. Signed-off-by: Dmitry Osipenko Reviewed-by: Chanwoo Choi --- drivers/devfreq/Kconfig | 4 ++-- drivers/devfreq/tegra-devfreq.c | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/devfreq/Kconfig b/drivers/devfreq/Kconfig index a78dffe603c1..78c33ddd4eea 100644 --- a/drivers/devfreq/Kconfig +++ b/drivers/devfreq/Kconfig @@ -92,8 +92,8 @@ config ARM_EXYNOS_BUS_DEVFREQ This does not yet operate with optimal voltages. config ARM_TEGRA_DEVFREQ - tristate "Tegra DEVFREQ Driver" - depends on ARCH_TEGRA_124_SOC + tristate "NVIDIA Tegra30+ DEVFREQ Driver" + depends on ARCH_TEGRA select PM_OPP help This adds the DEVFREQ driver for the Tegra family of SoCs. diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index f0711d5ad27d..0a2465a58cf5 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -719,6 +719,7 @@ static int tegra_devfreq_remove(struct platform_device *pdev) } static const struct of_device_id tegra_devfreq_of_match[] = { + { .compatible = "nvidia,tegra30-actmon" }, { .compatible = "nvidia,tegra124-actmon" }, { }, }; From patchwork Mon Apr 15 14:55:04 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1085674 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="nQR8yVRu"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44jWlw47Q6z9s9T for ; Tue, 16 Apr 2019 00:56:12 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727769AbfDOOz7 (ORCPT ); Mon, 15 Apr 2019 10:55:59 -0400 Received: from mail-lf1-f67.google.com ([209.85.167.67]:41478 "EHLO mail-lf1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727745AbfDOOz5 (ORCPT ); Mon, 15 Apr 2019 10:55:57 -0400 Received: by mail-lf1-f67.google.com with SMTP id t30so13320321lfd.8; Mon, 15 Apr 2019 07:55:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=rx+zmmGbIXgJpBnbNkGTY/ON6s4vt2Iv8cMQUjYpFd4=; b=nQR8yVRuiCUtMHfnGH2RLrGTZEtNHyclqLTlR36QiiWfzKqYxyD7xiFEYwwdXpz6O+ rHg4T3yP3JZaVHyfIBoo1w9RDZagSEQqoYMbbvaK0m2vIn84v9Zoof6fROK43LXaHQdq l/CPEF4zt9ep/r9JFqexuZfFm9p3n6ojjfdCs1d6OeSOkrinRUKV5TmrZN8qJva79AvP NQUSKeO54LSUkGcdwplfHRCKf8qT4Nts0CPdxmTaAVqnewfDEemU1kzUAIs/KmbIl/B5 ZReXk15YR9JrvxDSj81dEQ1jwWFpyX55LVMnC4zJejsgx+TC1zvw6/ZukQTvzPp3VTam KGdw== 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=rx+zmmGbIXgJpBnbNkGTY/ON6s4vt2Iv8cMQUjYpFd4=; b=MSai3Gdea+NboC3dLBb250b6Qm/LII3s6F1VWN+tnMXK0yoToQvq/BS0vIuqsh4DAC 6GxTUeORHSzGobQz1Li+oJPFoqDEqhd2Gk5OtkTi/VEiPVVQyIEOhUCFT8ZNpFuLYQZH MS4g+Pn6y1LMkBpNngv2vIW+3u5+w/vJvL9S9MSyw4Ak1eVaOBjNQL4nuiVF215Sp9T1 fhC3+SqaCLlvD1w9zQ5swmrdPrDVfGiMjvhdHMxzlpYDjaJsbVK7kXj2Aq8RLPKXGJYP L+Mt1Q3bQ8lYUe8INVju6G6w0EA7OVdISDLdOzNIxMpB+eCxT0sdq/oc73CijwKMBSU5 9M0Q== X-Gm-Message-State: APjAAAUUV2sfOulpMvcbjayXP5qfR/IFPN5ZG49rYmpdxJJpBqBfvOHj DFfRW54uS9+XqkNZRJ/G0Vk= X-Google-Smtp-Source: APXvYqy7Q/jQlcTJpZnScZQKbX71sMfRoDXTLbCJaw+eaKnwB+o5Bwjbw57xoLOYwyKkfHDI1oFQPA== X-Received: by 2002:a19:3845:: with SMTP id d5mr6307275lfj.77.1555340155535; Mon, 15 Apr 2019 07:55:55 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l12sm9989932lfc.61.2019.04.15.07.55.54 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 15 Apr 2019 07:55:54 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v2 18/19] PM / devfreq: tegra: Enable COMPILE_TEST for the driver Date: Mon, 15 Apr 2019 17:55:04 +0300 Message-Id: <20190415145505.18397-19-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190415145505.18397-1-digetx@gmail.com> References: <20190415145505.18397-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org The driver's compilation doesn't have any specific dependencies, hence the COMPILE_TEST option can be supported in Kconfig. Signed-off-by: Dmitry Osipenko Reviewed-by: Chanwoo Choi --- drivers/devfreq/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/devfreq/Kconfig b/drivers/devfreq/Kconfig index 78c33ddd4eea..bd6652863e7d 100644 --- a/drivers/devfreq/Kconfig +++ b/drivers/devfreq/Kconfig @@ -93,7 +93,7 @@ config ARM_EXYNOS_BUS_DEVFREQ config ARM_TEGRA_DEVFREQ tristate "NVIDIA Tegra30+ DEVFREQ Driver" - depends on ARCH_TEGRA + depends on ARCH_TEGRA || COMPILE_TEST select PM_OPP help This adds the DEVFREQ driver for the Tegra family of SoCs. From patchwork Mon Apr 15 14:55:05 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1085673 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-tegra-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="vCBRBhTs"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44jWlv11Qcz9s9N for ; Tue, 16 Apr 2019 00:56:11 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727779AbfDOO4B (ORCPT ); Mon, 15 Apr 2019 10:56:01 -0400 Received: from mail-lj1-f195.google.com ([209.85.208.195]:44279 "EHLO mail-lj1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727757AbfDOO4A (ORCPT ); Mon, 15 Apr 2019 10:56:00 -0400 Received: by mail-lj1-f195.google.com with SMTP id h16so15932060ljg.11; Mon, 15 Apr 2019 07:55:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=S/Fc3ROZ/PWH4lyCTQWOLY46sQqmcgsrPkiBS97bt6Y=; b=vCBRBhTszZS3ophJbUPT6E9brEx3UhfcNsJS7LKUZTAfET6d6ItMHek2kpKjJGs+Az t9rq16/2kKKwSI2CXdAAeHdvC/FosGCnUgCxJ21UhlWtebWDRsCborhMwzswC8LuBWIb TdqDEJfBY6Kt3HUldyXPAQsIQOPR7r850X7hwx34CUmW9BGKdEMM1QTnRYWoHafGhiCi pl0T4+fYnoJUIKhBQpRgWOrFp+tLfz+eeAdFg4yCH64H3ANcyLOVCRjUgEA9V/VUiafm ivs29KaJVkIUDNmdcH28nHYiwpJUtgNHjQQik2LPwQfQfp0gU+sgDTR5PLrvF1Y9qLL9 4JEQ== 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=S/Fc3ROZ/PWH4lyCTQWOLY46sQqmcgsrPkiBS97bt6Y=; b=kTaOd2+b7BWihq+ZU0FR2KVzOiTI/Lc48toc/0G8Ukchnu3u7j4Wzuh+YMb33O058j W/xjOHifigZvTCHkJmlUL8Nzyc4jgYArkyDKvHmEyEbpVEmLD4mg1YN8dKBCxme5elkM oe9Pm2NcYpFRZSAzM7KmFUWTy9v1DK4rGic+wYJdw8nXNe3XqRGUfw6B5xbRgPHi0YRg KsT6RoMIIA4kSj6DUU6GWQU7PBwpRtKGMZJyxmx6Zb9q6YYJ60ozxBKXwE0rLEMgCima DLqnfb6Ojd5Vl5/F1e/uDWDk1YQKgoXe0fhkrr8DcgzCGVcaaQep7bCNOjC0uf96D9RK Nycg== X-Gm-Message-State: APjAAAUT8OuIma9Pwqyw4Ah0ga1c9L9KFH96I8VfP8GQHywdgOJIRy9B nQEJMI7M4jx0q7JPsCvPn+s= X-Google-Smtp-Source: APXvYqxOkPxvV+61tbDyU/Hk+k8aRkf20Uib653naob+dv+gSLDWe7FdPbBteK+McUG0S73y3C9dZw== X-Received: by 2002:a2e:9915:: with SMTP id v21mr8898469lji.154.1555340156620; Mon, 15 Apr 2019 07:55:56 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id l12sm9989932lfc.61.2019.04.15.07.55.55 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 15 Apr 2019 07:55:56 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [PATCH v2 19/19] PM / devfreq: Introduce driver for NVIDIA Tegra20 Date: Mon, 15 Apr 2019 17:55:05 +0300 Message-Id: <20190415145505.18397-20-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190415145505.18397-1-digetx@gmail.com> References: <20190415145505.18397-1-digetx@gmail.com> MIME-Version: 1.0 Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org Add devfreq driver for NVIDIA Tegra20 SoC's. The driver periodically reads out Memory Controller counters and adjusts memory frequency based on the memory clients activity. Signed-off-by: Dmitry Osipenko --- MAINTAINERS | 8 ++ drivers/devfreq/Kconfig | 10 ++ drivers/devfreq/Makefile | 1 + drivers/devfreq/tegra20-devfreq.c | 177 ++++++++++++++++++++++++++++++ 4 files changed, 196 insertions(+) create mode 100644 drivers/devfreq/tegra20-devfreq.c diff --git a/MAINTAINERS b/MAINTAINERS index 80b59db1b6e4..91f475ec4545 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -10056,6 +10056,14 @@ F: include/linux/memblock.h F: mm/memblock.c F: Documentation/core-api/boot-time-mm.rst +MEMORY FREQUENCY SCALING DRIVER FOR NVIDIA TEGRA20 +M: Dmitry Osipenko +L: linux-pm@vger.kernel.org +L: linux-tegra@vger.kernel.org +T: git git://git.kernel.org/pub/scm/linux/kernel/git/mzx/devfreq.git +S: Maintained +F: drivers/devfreq/tegra20-devfreq.c + MEMORY MANAGEMENT L: linux-mm@kvack.org W: http://www.linux-mm.org diff --git a/drivers/devfreq/Kconfig b/drivers/devfreq/Kconfig index bd6652863e7d..af4c86c4e0f6 100644 --- a/drivers/devfreq/Kconfig +++ b/drivers/devfreq/Kconfig @@ -100,6 +100,16 @@ config ARM_TEGRA_DEVFREQ It reads ACTMON counters of memory controllers and adjusts the operating frequencies and voltages with OPP support. +config ARM_TEGRA20_DEVFREQ + tristate "NVIDIA Tegra20 DEVFREQ Driver" + depends on (TEGRA_MC && TEGRA20_EMC) || COMPILE_TEST + select DEVFREQ_GOV_SIMPLE_ONDEMAND + select PM_OPP + help + This adds the DEVFREQ driver for the Tegra20 family of SoCs. + It reads Memory Controller counters and adjusts the operating + frequencies and voltages with OPP support. + config ARM_RK3399_DMC_DEVFREQ tristate "ARM RK3399 DMC DEVFREQ Driver" depends on ARCH_ROCKCHIP diff --git a/drivers/devfreq/Makefile b/drivers/devfreq/Makefile index 32b8d4d3f12c..6fcc5596b8b7 100644 --- a/drivers/devfreq/Makefile +++ b/drivers/devfreq/Makefile @@ -11,6 +11,7 @@ obj-$(CONFIG_DEVFREQ_GOV_PASSIVE) += governor_passive.o obj-$(CONFIG_ARM_EXYNOS_BUS_DEVFREQ) += exynos-bus.o obj-$(CONFIG_ARM_RK3399_DMC_DEVFREQ) += rk3399_dmc.o obj-$(CONFIG_ARM_TEGRA_DEVFREQ) += tegra-devfreq.o +obj-$(CONFIG_ARM_TEGRA20_DEVFREQ) += tegra20-devfreq.o # DEVFREQ Event Drivers obj-$(CONFIG_PM_DEVFREQ_EVENT) += event/ diff --git a/drivers/devfreq/tegra20-devfreq.c b/drivers/devfreq/tegra20-devfreq.c new file mode 100644 index 000000000000..18c9aad7a9d7 --- /dev/null +++ b/drivers/devfreq/tegra20-devfreq.c @@ -0,0 +1,177 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * NVIDIA Tegra20 devfreq driver + * + * Author: Dmitry Osipenko + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "governor.h" + +#define MC_STAT_CONTROL 0x90 +#define MC_STAT_EMC_CLOCK_LIMIT 0xa0 +#define MC_STAT_EMC_CLOCKS 0xa4 +#define MC_STAT_EMC_CONTROL 0xa8 +#define MC_STAT_EMC_COUNT 0xb8 + +#define EMC_GATHER_CLEAR (1 << 8) +#define EMC_GATHER_ENABLE (3 << 8) + +struct tegra_devfreq { + struct devfreq *devfreq; + struct clk *clk; + void __iomem *regs; +}; + +static int tegra_devfreq_target(struct device *dev, unsigned long *freq, + u32 flags) +{ + struct tegra_devfreq *tegra = dev_get_drvdata(dev); + struct dev_pm_opp *opp; + unsigned long rate; + int err; + + opp = devfreq_recommended_opp(dev, freq, flags); + if (IS_ERR(opp)) + return PTR_ERR(opp); + + rate = dev_pm_opp_get_freq(opp); + dev_pm_opp_put(opp); + + err = clk_set_min_rate(tegra->clk, rate); + if (err) + return err; + + err = clk_set_rate(tegra->clk, 0); + if (err) + return err; + + return 0; +} + +static int tegra_devfreq_get_dev_status(struct device *dev, + struct devfreq_dev_status *stat) +{ + struct tegra_devfreq *tegra = dev_get_drvdata(dev); + + stat->busy_time = readl_relaxed(tegra->regs + MC_STAT_EMC_COUNT); + stat->total_time = readl_relaxed(tegra->regs + MC_STAT_EMC_CLOCKS) / 8; + stat->current_frequency = clk_get_rate(tegra->clk); + + writel_relaxed(EMC_GATHER_CLEAR, tegra->regs + MC_STAT_CONTROL); + writel_relaxed(EMC_GATHER_ENABLE, tegra->regs + MC_STAT_CONTROL); + + return 0; +} + +static struct devfreq_dev_profile tegra_devfreq_profile = { + .polling_ms = 500, + .target = tegra_devfreq_target, + .get_dev_status = tegra_devfreq_get_dev_status, +}; + +static struct tegra_mc *tegra_get_memory_controller(void) +{ + struct platform_device *pdev; + struct device_node *np; + struct tegra_mc *mc; + + np = of_find_compatible_node(NULL, NULL, "nvidia,tegra20-mc-gart"); + if (!np) + return ERR_PTR(-ENOENT); + + pdev = of_find_device_by_node(np); + of_node_put(np); + if (!pdev) + return ERR_PTR(-ENODEV); + + mc = platform_get_drvdata(pdev); + if (!mc) + return ERR_PTR(-EPROBE_DEFER); + + return mc; +} + +static int tegra_devfeq_probe(struct platform_device *pdev) +{ + struct tegra_devfreq *tegra; + struct tegra_mc *mc; + unsigned long max_rate; + unsigned long rate; + int err; + + mc = tegra_get_memory_controller(); + if (IS_ERR(mc)) { + err = PTR_ERR(mc); + dev_err(&pdev->dev, "failed to get mc: %d\n", err); + return err; + } + + tegra = devm_kzalloc(&pdev->dev, sizeof(*tegra), GFP_KERNEL); + if (!tegra) + return -ENOMEM; + + tegra->clk = devm_clk_get(&pdev->dev, "emc"); + if (IS_ERR(tegra->clk)) { + err = PTR_ERR(tegra->clk); + dev_err(&pdev->dev, "failed to get emc clock: %d\n", err); + return err; + } + + tegra->regs = mc->regs; + + max_rate = clk_round_rate(tegra->clk, ULONG_MAX); + + for (rate = 0; rate <= max_rate; rate++) { + rate = clk_round_rate(tegra->clk, rate); + dev_pm_opp_add(&pdev->dev, rate, 0); + } + + writel_relaxed(0x00000000, tegra->regs + MC_STAT_CONTROL); + writel_relaxed(0x00000000, tegra->regs + MC_STAT_EMC_CONTROL); + writel_relaxed(0xffffffff, tegra->regs + MC_STAT_EMC_CLOCK_LIMIT); + + platform_set_drvdata(pdev, tegra); + + tegra->devfreq = devfreq_add_device(&pdev->dev, &tegra_devfreq_profile, + DEVFREQ_GOV_SIMPLE_ONDEMAND, NULL); + if (IS_ERR(tegra->devfreq)) + return PTR_ERR(tegra->devfreq); + + return 0; +} + +static int tegra_devfreq_remove(struct platform_device *pdev) +{ + struct tegra_devfreq *tegra = platform_get_drvdata(pdev); + + devfreq_remove_device(tegra->devfreq); + dev_pm_opp_remove_all_dynamic(&pdev->dev); + + return 0; +} + +static struct platform_driver tegra_devfeq_driver = { + .probe = tegra_devfeq_probe, + .remove = tegra_devfreq_remove, + .driver = { + .name = "tegra20-devfreq", + }, +}; +module_platform_driver(tegra_devfeq_driver); + +MODULE_ALIAS("platform:tegra20-devfreq"); +MODULE_AUTHOR("Dmitry Osipenko "); +MODULE_DESCRIPTION("NVIDIA Tegra20 devfreq driver"); +MODULE_LICENSE("GPL v2");