From patchwork Wed May 1 23:38: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: 1093949 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="h3c3i0/P"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44vZhd0Y6Zz9s5c for ; Thu, 2 May 2019 09:43:13 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726231AbfEAXlp (ORCPT ); Wed, 1 May 2019 19:41:45 -0400 Received: from mail-it1-f196.google.com ([209.85.166.196]:54911 "EHLO mail-it1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726126AbfEAXlo (ORCPT ); Wed, 1 May 2019 19:41:44 -0400 Received: by mail-it1-f196.google.com with SMTP id a190so334774ite.4; Wed, 01 May 2019 16:41: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=7gSgxpoZvck6q57Fc1Ag09/Sll6e8T2kyeInAsQ6ito=; b=h3c3i0/PG7S5kJddW/4dh1PGYpgqEVZKJWglATzbSfonpzmU3wqRVpdyMWEZKatQex NKMLaXr5z6PpNWO0ktRb1hat8l6drP2anxDENEIpeK2QdBbmRLmWlDfCMOK1+Yxdnnap sxSlGHt0bNVct19YqoZ5J7Ha7HCo3f6eC0S0d2PpmXFn+komkoBhoPK63Q5qPQQkDYD2 JIOFlvzr75sWMV3wPYeSdgLzgO91KjSdHIMIfAtgbOv0r1WaQdw2ChJck+jsRlC2GF3Z EbRad8m7Mz9La4NEzjsajg8JTuMw/Op3wjIJ3DkZdSyoYIO7yH6tKctZzvFt7khoIq+d ZRsQ== 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=7gSgxpoZvck6q57Fc1Ag09/Sll6e8T2kyeInAsQ6ito=; b=pl5CzYr512bbNOqYT+TQ+KoyQrrPMlTy6nY6o9f0goQ7tTNxcpEToIrbiVns3V5+bR Nu/RMrBLqu3tysA8m3psOTmQvSCTbW6AhxK8FG61RQIhiaswCQKELfP//ojK5M8dH8Nr Ay5MiA3znpM8KM8tGld85qIv9VDDBHFStX18YvxkJ0f3ftEpX1638E6BYzFra3hRVGYr IP3CSCdpM0CiD0HH7ig1nUuc0Fq+22Vnf7TyFaoX9DIQ/+L7w2FsLR1zTp6jSTsPRv8o QTx/nywF1Lxgje2xI9SQV80VP07YmIyFbu6Td09zqgaq48y+NEmmogjfGC9Bkmr+WTEU qh3w== X-Gm-Message-State: APjAAAXwruNGyjUt+/MJF9LypOOPKiaxxzzUni1iee5izUNiYtYh9ujf hgeE59pSDYdgssnJZBZChVw= X-Google-Smtp-Source: APXvYqyDAnT9CTdwcQ+nAGTIowxydEVZjwNRuSPXvA0vxGl57E9m3N+Yecjqb1g6TP/WKPEC1EXDbg== X-Received: by 2002:a24:1f50:: with SMTP id d77mr207848itd.25.1556754103751; Wed, 01 May 2019 16:41: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 m3sm2392507ion.69.2019.05.01.16.41.41 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 01 May 2019 16:41:43 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 01/16] PM / devfreq: tegra: Fix kHz to Hz conversion Date: Thu, 2 May 2019 02:38:00 +0300 Message-Id: <20190501233815.32643-2-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190501233815.32643-1-digetx@gmail.com> References: <20190501233815.32643-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 Reviewed-by: Chanwoo Choi Signed-off-by: Dmitry Osipenko Acked-by: Thierry Reding --- drivers/devfreq/tegra-devfreq.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index c89ba7b834ff..43cd1233f87b 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -486,11 +486,11 @@ 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); + dev_err(dev, "Failed to find opp for %lu Hz\n", *freq); return PTR_ERR(opp); } rate = dev_pm_opp_get_freq(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 Wed May 1 23:38: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: 1093948 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="P99Zqlgb"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44vZhZ4yrsz9s5c for ; Thu, 2 May 2019 09:43:10 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726285AbfEAXlr (ORCPT ); Wed, 1 May 2019 19:41:47 -0400 Received: from mail-it1-f195.google.com ([209.85.166.195]:39662 "EHLO mail-it1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726126AbfEAXlr (ORCPT ); Wed, 1 May 2019 19:41:47 -0400 Received: by mail-it1-f195.google.com with SMTP id t200so344825itf.4; Wed, 01 May 2019 16:41: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=MfIFaN/cDvep9inRd5PqDA7WzNgKemRCq9lkW6WG194=; b=P99ZqlgboRhF5XRuOsWm7jgTy8cXOLjBRBMlWO1S2cywGUyFPKzXjMqraXVShzSn/g PzXZWH97KzfulgOF5TYJOF9akbfHDpBVbznDW5Axb/6up2Qn+4UnIu6fBfjkF/Q4Pkig 9E6NnxdF+MPJTe0dvm5LYH/aotHHgIMSLCJudM1ryUqbsYeDhpkL/hH4BZTV9XOEX95d cIT2rJFM4RAQd5Z0sD1u7UMJ7e6GtEUm8hO8tzNZUVDimQXU4o14WsKkwNw+KOWXo0/x dJ8u4vv1txC+N62qGwm8GaXq3/uaEXlLeL+u2j8vD6V+rqPAqYXJ7LP6pwhCMuDrGmC6 BzQA== 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=MfIFaN/cDvep9inRd5PqDA7WzNgKemRCq9lkW6WG194=; b=cDbiAENkIu0/60xM248auhLCrFDYRbjNP2ukzfYHtkSS8wPqe3nrUhJ6pvbOEyVjlQ piXPohxe0slYeba7YjB5WRzurzpGSldZNheEw8rJEyymQnFlC2qsQ/B9TR92050aCHsb Ea59v1T6f2kw7RA4RmvUqh91DUbEABmUdIypm74p/covZGpRxXu4OqUpFqCN8nANQzmE ykdSZ7orbr7mYPA0V97W8sBaRMaTco6AQiDT9Qdw0I9YwXF86uBeRO0tTogEULDAjSUM ItsGjjqdZXqqpxPfvB65ES1Zie1jnEykHmgjNZf4hiEz2d3XnPw0kmUMt9U9cIGnD8/q HLkQ== X-Gm-Message-State: APjAAAXKraSfVECb9pcaHv+Q18qbvPoHBNGI8ohn9v2I/rd19GXgUiU0 bCah6TTAYT4hMUEcemZcEsWOqKvA X-Google-Smtp-Source: APXvYqxcYFYw5TbEFuGDeoD1sV5z0Oapxz5H0rtjF1vS5tAEvCBZ7s2wdnRQocopsW7pV4+9+vNm6A== X-Received: by 2002:a24:694b:: with SMTP id e72mr251605itc.48.1556754106132; Wed, 01 May 2019 16:41: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 m3sm2392507ion.69.2019.05.01.16.41.43 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 01 May 2019 16:41:45 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 02/16] PM / devfreq: tegra: Replace readl-writel with relaxed versions Date: Thu, 2 May 2019 02:38:01 +0300 Message-Id: <20190501233815.32643-3-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190501233815.32643-1-digetx@gmail.com> References: <20190501233815.32643-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. Reviewed-by: Chanwoo Choi Signed-off-by: Dmitry Osipenko Acked-by: Thierry Reding --- 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 43cd1233f87b..f7378a42d184 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 Wed May 1 23:38: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: 1093947 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="nigCYDpO"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44vZhX2Ljkz9s5c for ; Thu, 2 May 2019 09:43:08 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726321AbfEAXlu (ORCPT ); Wed, 1 May 2019 19:41:50 -0400 Received: from mail-it1-f194.google.com ([209.85.166.194]:35567 "EHLO mail-it1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726296AbfEAXlt (ORCPT ); Wed, 1 May 2019 19:41:49 -0400 Received: by mail-it1-f194.google.com with SMTP id l140so376567itb.0; Wed, 01 May 2019 16:41: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=pafXGoHRoY3A9Ph0hnVkDMbF8BglHn/cfuWPvnCS8lw=; b=nigCYDpOgmLtrcVFIoZU3TIg1KrhqoK81CSwx03NR/QB85HmPYu1nasg69LZViyM1m xB9lx0wduOqLJMo8FFrGwI5XOKYaiDv3h5R8moZ8TnBRgcO1UAt9k5WG6xiif1uZnAHW erIugG5TZHXNHD/0NKwGNDOfu0tcvGfZCs5swFkOzmU+H5sR+aTUGdK+OTo2CP1fy5SN yR04Of2L6lb2vnRR/qHrhC3iGsaA9CP86pdafz3x8ws4rmZb55EYB9vRwnunqpg5uQUZ vy7r1MJrpWT8EnJ+cD2dDl10lgAr6+pKS+iuXDscow+dcH6tblvHOtJGGytRAmCuypuG 1wng== 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=pafXGoHRoY3A9Ph0hnVkDMbF8BglHn/cfuWPvnCS8lw=; b=t4gNG1eBU5wga1PUTCeLopyPpXGinWP+H4nVld7snfkLLZgeOrO5fFDf6qSN9+VhmL QChCDyqiHa4chmYnwf7/vxsqtIq9HtJp9ba5VQjxgb0FsBw1UmyItvo/iC7w+BVsGvlM dEKp67k70Acj1kWpGvi6QKMHT+45AeTT1XHxio/AiVcrOaOqZZt8xrlsZZtdlnahQ4vz GfOBpO+acABTIIwc1gDqJ2rF0l64i6i0z9qcTIHNJQBapTaidQbVvnheePntNeZCg/KT +ub6PoJ/3sZgHgbdZ300nnOsGaDXXQzKcgrZAGCN5/T2dNqv3/OeCNP/OFIf3TjsNK+i +EEg== X-Gm-Message-State: APjAAAUHN18sfiB8CgQ7fg105VCnZ6Srn2/yB065/TyY34yoJKr8OEc5 yq5iwRSjrNzozdDz2ULHJtA= X-Google-Smtp-Source: APXvYqxkgdsys1uzuzkgHVvAYID0GgD+w+bdMYzY2jbxUi+s1pjsjKgDQhpKcOKi/rNrmGUl4vje+w== X-Received: by 2002:a24:f8c7:: with SMTP id a190mr227439ith.72.1556754108465; Wed, 01 May 2019 16:41: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 m3sm2392507ion.69.2019.05.01.16.41.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 01 May 2019 16:41:48 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 03/16] PM / devfreq: tegra: Replace write memory barrier with the read barrier Date: Thu, 2 May 2019 02:38:02 +0300 Message-Id: <20190501233815.32643-4-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190501233815.32643-1-digetx@gmail.com> References: <20190501233815.32643-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. Reviewed-by: Chanwoo Choi Signed-off-by: Dmitry Osipenko Acked-by: Thierry Reding --- 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 f7378a42d184..7d7b9a5895b2 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 Wed May 1 23:38: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: 1093946 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="f21c8Kij"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44vZhV0mGbz9s5c for ; Thu, 2 May 2019 09:43:06 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726353AbfEAXlw (ORCPT ); Wed, 1 May 2019 19:41:52 -0400 Received: from mail-it1-f196.google.com ([209.85.166.196]:40143 "EHLO mail-it1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726328AbfEAXlv (ORCPT ); Wed, 1 May 2019 19:41:51 -0400 Received: by mail-it1-f196.google.com with SMTP id k64so338074itb.5; Wed, 01 May 2019 16:41: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=eBeRh1VWxUcZpZoxg+JTMh0fa13cOmkGOiGjOtDcUPc=; b=f21c8KijHLjKlb2s8KKRz4TxG0PkTUVE/rBshjDh+2GIM8E0zHvg9ZnnTUUvTOoUFZ Exm5GeLnfbRx99cZy1/DkYy243vH4NnUtae7VBhwcjKNaaU2OTfqLbkcQnZL2YCggs7X GyN/5SkOugTIgkgErO61EuqG0VTX+3zA8AJUgnoF8Je3poyixbpL3NIsUVQMQuHLULzl zdfrgyunaUjJ8aMcEkxcotqryEYG40/No4Lxjf8rHZ42HtMw/vmEyy63zo4Ryp6eFHsS 9wKQ5bz3bCGuMqmZKMAOzqTp9uuwtfkn3wB1EDwQKy1dyq8V+NsY0/p4iFd7g0R2gIDJ rD8A== 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=eBeRh1VWxUcZpZoxg+JTMh0fa13cOmkGOiGjOtDcUPc=; b=HWWHVhWvYG/WlcryhSduzJXOBr/ltF1N+Tgxahdbpxm8FofJuf65cy/moc/UX36Y+3 PV3KWOxcRbV1aG9Nil5Jm6hVSYOc6piRzMsIF6eukS8wV7l5cgvpWRdyp1EuVWdUTTLg 3F5WtqMMW3QH7Sc6Oo5DmlxRPhDCK8jmnkMftcI7GNZvbvyC3lVahaPKerQATqeQqhqD a+rtTCH7Y0lvuUoxWUoKN3lZBqIDdjS3FI9WbWy54+VOrIDNAUAiu5/JOMyJzi5RS1bc 7xrtsfHLlGEaOzvJsh+hvt2JNn6L8oXdJR7K9NLBz92aidrHNTfsqvfOwLPQwihJKlGU /FKA== X-Gm-Message-State: APjAAAWwOiIecOyppXtJlCR9xc3jT3OLKdMzkM5zSmpJsoGrmFv0rMxK p0tFEojWuYywpdCQ5LkCRUI= X-Google-Smtp-Source: APXvYqzC0r26LvRitPC2xl7GCtjwj42emsuQ6UXfRNjr/7oCRriUkKIvOcsYT+yUULu8tbSNIRO5gA== X-Received: by 2002:a24:8a83:: with SMTP id v125mr198592itd.168.1556754111087; Wed, 01 May 2019 16:41: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 m3sm2392507ion.69.2019.05.01.16.41.48 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 01 May 2019 16:41:50 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 04/16] PM / devfreq: tegra: Don't ignore clk errors Date: Thu, 2 May 2019 02:38:03 +0300 Message-Id: <20190501233815.32643-5-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190501233815.32643-1-digetx@gmail.com> References: <20190501233815.32643-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. Reviewed-by: Chanwoo Choi Signed-off-by: Dmitry Osipenko Acked-by: Thierry Reding --- drivers/devfreq/tegra-devfreq.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index 7d7b9a5895b2..c7428c5eee23 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -484,8 +484,10 @@ static int tegra_devfreq_target(struct device *dev, unsigned long *freq, u32 flags) { struct tegra_devfreq *tegra = dev_get_drvdata(dev); + struct devfreq *devfreq = tegra->devfreq; struct dev_pm_opp *opp; unsigned long rate; + int err; opp = devfreq_recommended_opp(dev, freq, flags); if (IS_ERR(opp)) { @@ -495,10 +497,20 @@ 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) + goto restore_min_rate; return 0; + +restore_min_rate: + clk_set_min_rate(tegra->emc_clock, devfreq->previous_freq); + + return err; } static int tegra_devfreq_get_dev_status(struct device *dev, From patchwork Wed May 1 23:38: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: 1093945 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="qI4SpIkw"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44vZhR48k2z9sB8 for ; Thu, 2 May 2019 09:43:03 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726377AbfEAXlz (ORCPT ); Wed, 1 May 2019 19:41:55 -0400 Received: from mail-it1-f194.google.com ([209.85.166.194]:37346 "EHLO mail-it1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726371AbfEAXly (ORCPT ); Wed, 1 May 2019 19:41:54 -0400 Received: by mail-it1-f194.google.com with SMTP id r85so360789itc.2; Wed, 01 May 2019 16:41: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=hT2F8IjKIQoszn6Buk6j3BScSUALq9H2lCvIgZ7MA44=; b=qI4SpIkw8aSy2zSnENGPxKIvXxF9LC3SnVRuQ1yCmAj2zoYH4XtNemCE4SeBfR2SwQ yKiF3+bTOOGYVjr9ddSA96gwJc+8TB/NKaGsvS7NjsYMUtlTb7QG9AXjLEI20YsKdaX/ Ju0QILLqIa5S1DIUySEe+9oqtIx5MCXwp59J1JhhgirKB2UgO4RiLxm+3YJu/hBDXqWc qD1zheW85alvSgrJ/nkkYsrzpU2El9dX8AhvDa8B29fLdf4xJe9E+f8R3SJHPXIlOgjH iHUcztEclsNEg6IePqqqYZz+P60KxIlJ8mR1/2Q/NWI6GJfu8b+uISUSrQPHo8FFe5b3 YIEQ== 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=hT2F8IjKIQoszn6Buk6j3BScSUALq9H2lCvIgZ7MA44=; b=Wmt7eLnKsN24B6EjNzb7MO6qkVtBeP05li0EfDQuv7BU4bphfgyrBQXo3Q915GkU7K NjHke7CIXTm6CPnKcs3T3PDlgUWKmAEuuNiyzRRmcU5NZ9F2K5XjmStHRk/TMD7dujaf N8qcCwTjvY5u7W7otMXrE1YzqZQiqqmRfNYzb/aFNZgPWP5g6od9nFoyVPTF7mm5vcAu ZeTLPLiG9a59OtLh2Mrd6xpIN4OFPAT4C4hjNJGr25zVvjTsCfzSEmZq/H7RvpyR049M qVQ4fQ5bESObn1pE6KNJtWA+yg+nO3pq39bsbXPJE/m/4b/KmPcMK40Yl7vZIbk9jnAV MiLw== X-Gm-Message-State: APjAAAXOGXN40LP5qXgmMt8Chr/JxhgPCKAHmkPafr+uyeftKv0XYOKi o/Qkj1Yhghk3Oo/jdsc7ptQ= X-Google-Smtp-Source: APXvYqxSdCcEzp6heDrn60nbkhWlRk5OlSZvuvVKyusrg4FcPDmWK6bXirTXL5ysNPH04/RISrpr3g== X-Received: by 2002:a02:ad07:: with SMTP id s7mr282942jan.103.1556754113467; Wed, 01 May 2019 16:41: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 m3sm2392507ion.69.2019.05.01.16.41.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 01 May 2019 16:41:53 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 05/16] PM / devfreq: tegra: Don't set EMC clock rate to maximum on probe Date: Thu, 2 May 2019 02:38:04 +0300 Message-Id: <20190501233815.32643-6-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190501233815.32643-1-digetx@gmail.com> References: <20190501233815.32643-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. Reviewed-by: Chanwoo Choi Signed-off-by: Dmitry Osipenko Acked-by: Thierry Reding --- 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 c7428c5eee23..24ec65556c39 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -653,8 +653,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 Wed May 1 23:38: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: 1093944 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="qzlGEgSB"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44vZhQ2b6jz9s6w for ; Thu, 2 May 2019 09:43:02 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726397AbfEAXl7 (ORCPT ); Wed, 1 May 2019 19:41:59 -0400 Received: from mail-it1-f194.google.com ([209.85.166.194]:54932 "EHLO mail-it1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726380AbfEAXl4 (ORCPT ); Wed, 1 May 2019 19:41:56 -0400 Received: by mail-it1-f194.google.com with SMTP id a190so335361ite.4; Wed, 01 May 2019 16:41: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=nJSuD9SpQlwu3/p0ZbmwC/KpKlX3tNAhcs99zQTbKNs=; b=qzlGEgSBoiTbzlYa04+ILv1d4tlysuLRMRuFEk94TmuctRSAPgmoE6l7iHXeUMqXr6 wHR79enASCkvuC8D6bj36asaiJq1gd5W7PFVoGGOT0kFOz2zjsVrcLchZ+gXZUG1A1BL NVZchepAd32kycLCVyT/xZorPUgVGs9VI9ltLTGOrojlappc7b70z5Bv/gIUgFXAUoHi y6dSSm3RPZ+MM3XU4tcIpIpeMIYuEBZW0kT2gvnmQqg+KCp3alwVrDhn7RjmlLYj9oT+ 1L4DHr7AK/SElPa9YKwSnu2bWH0/rUrALc5CtV2ThzHfcDPdEZuE2maS0rLnuAEwwKFy AWGA== 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=nJSuD9SpQlwu3/p0ZbmwC/KpKlX3tNAhcs99zQTbKNs=; b=J+h7hHPdsl5C+0P7ydEFmOBpQu/lwPqVO6Z+XmUIdM9V5FkBF/qA2+wiYv8yrH+hGp GhCA7Bdk0p0GrT56XFcH4vH1f+belNQH6Vn0Pvq1PnVBOH8Rg+ra7NmHnj7faQ0v3NAz FdEnVuB0JNn7G3qiiNxLz6GbNbOoZFO7VCZgHFP+NeL95/Qbu/s4PgDxFi3tMAOyl7ny q+LVbR7+GEQbvXQpr/++HEJVkiKoDfldG/V/k/g3XToTjL3Go1DPpysU7W+TlZsX5ELT YRQLW1/UaF7naE+7I7f+ZED+XC93ydSowciQx49XS5IlZavmre5rEvMConrYrz9av1F9 aqzQ== X-Gm-Message-State: APjAAAX28d/C3FrMr5Imw198UKQUPWie/y7R86sM1P0uEsi9n1bDYrNm 4bvQeZEO/su3p+4O1SLdqiI= X-Google-Smtp-Source: APXvYqwM7xUBNLg8guV1YwWwg+iUDuE4OlLzqZZ55QPxA1K6z1sM/PZZ3m7vRiclwWCiCfkqU7QwZg== X-Received: by 2002:a02:5143:: with SMTP id s64mr349332jaa.54.1556754115872; Wed, 01 May 2019 16:41: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 m3sm2392507ion.69.2019.05.01.16.41.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 01 May 2019 16:41:55 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 06/16] PM / devfreq: tegra: Drop primary interrupt handler Date: Thu, 2 May 2019 02:38:05 +0300 Message-Id: <20190501233815.32643-7-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190501233815.32643-1-digetx@gmail.com> References: <20190501233815.32643-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. Reviewed-by: Chanwoo Choi Signed-off-by: Dmitry Osipenko Acked-by: Thierry Reding --- drivers/devfreq/tegra-devfreq.c | 55 +++++++++++---------------------- 1 file changed, 18 insertions(+), 37 deletions(-) diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index 24ec65556c39..b65313fe3c2e 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,15 +324,12 @@ 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; 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_sustain_coef = 100 * 100 / dev->config->boost_up_threshold; dev->target_freq = do_percent(dev->target_freq, avg_sustain_coef); @@ -364,19 +337,31 @@ static void actmon_update_target(struct tegra_devfreq *tegra, if (dev->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 +371,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 +382,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); @@ -682,7 +664,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); } @@ -700,8 +681,8 @@ 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, + 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 Wed May 1 23:38:06 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1093934 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="Rz9S0GfF"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44vZgG2K8hz9sBb for ; Thu, 2 May 2019 09:42:02 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726401AbfEAXmA (ORCPT ); Wed, 1 May 2019 19:42:00 -0400 Received: from mail-it1-f194.google.com ([209.85.166.194]:36585 "EHLO mail-it1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726371AbfEAXl7 (ORCPT ); Wed, 1 May 2019 19:41:59 -0400 Received: by mail-it1-f194.google.com with SMTP id v143so368681itc.1; Wed, 01 May 2019 16:41:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=9QwYS9bQr6zIIDqya7O/hmsOjlwL0wV6gZaAMteb584=; b=Rz9S0GfFzc4A8XwKvKPWK6NWM+Fk4CbRC4AjmdPpebD+IyRoyUNo8UtMP3eud+Gmd+ 0LDLFW+zPi79Qhx0IsMKsm6N/r/kMUkAMWk+q9xvzb1Wk9a4oYRKQdTFSxZUxUwgZFgw A8WUnIo4QskgtncNIWH/o/ccSNsfenYWLniVnSfoyeseiBtqm0E+OME3u2fGCkfM74h6 PK43lbzQwsRXWszK0zpVQCoDHr0BgB5n1Hg5aSDJMNN42m/HCJoymqOf8AKzc696Kfcz 7iGli+QVjl1mb+HR7hE3PODcOeDlOS51YsKsw4FasBsgT3THaFPV2DoBI8ACGd6GhPRH dyCA== 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=9QwYS9bQr6zIIDqya7O/hmsOjlwL0wV6gZaAMteb584=; b=VHRydZdE9g09bewRdJN6zDt03UASCshxHCx/M3XBG2N/jzPGYfmN8xoMRGLr6Y1gQ4 7wEQSvxvbGTYrf4dBjEQfWi47cQRjrO8UoDBK7TfWfRnp1BwVCwKAGSVv9j7d8GkcvmE 1Xpxx7DdTerdxs254+zVAxu1MeNIEWvbKUz0++ZtiK6OpGA2YorJG9cjDoBEo+CSQ0Ug QPYor4xMd/bHiFPzCfWdHictgjwZwPh6qtJ7CAkKo6lueLFSB+SWflON07aaw69AHdvk axllYJRyMvhQ8rUA7QizYh708zhJEDcTHies3mIJT8hMnfg5Mf1oMEKk6n+dYMmfiS2V YJgw== X-Gm-Message-State: APjAAAUdu/1MrtMHZ0W7461pXNYwv7YWOO0yOiveGWC4yfTo0kF8Cufr D6JAqOjrTIzr7t6bRQbsDxte20fx X-Google-Smtp-Source: APXvYqzUOhe67dmWZblJCILuzz0Q+Hxn0lkadBy1Jtd2JFyAMJSq9relHK3Vbaj5fue+xqd7U1jFBw== X-Received: by 2002:a02:4482:: with SMTP id o124mr305454jaa.121.1556754118389; Wed, 01 May 2019 16:41:58 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id m3sm2392507ion.69.2019.05.01.16.41.56 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 01 May 2019 16:41:57 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 07/16] PM / devfreq: tegra: Properly disable interrupts Date: Thu, 2 May 2019 02:38:06 +0300 Message-Id: <20190501233815.32643-8-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190501233815.32643-1-digetx@gmail.com> References: <20190501233815.32643-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 with tegra_actmon_disable_interrupts(), hence it is necessary to protect DEV_CTRL register accesses and clear IRQ status with ACTMON's IRQ being disabled in the Interrupt Controller in order to ensure that device interrupt is indeed being disabled. Reviewed-by: Chanwoo Choi Signed-off-by: Dmitry Osipenko Acked-by: Thierry Reding --- drivers/devfreq/tegra-devfreq.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index b65313fe3c2e..ce1eb97a2090 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 { @@ -417,6 +419,8 @@ static void tegra_actmon_disable_interrupts(struct tegra_devfreq *tegra) u32 val; unsigned int i; + disable_irq(tegra->irq); + for (i = 0; i < ARRAY_SIZE(tegra->devices); i++) { dev = &tegra->devices[i]; @@ -427,9 +431,14 @@ static void tegra_actmon_disable_interrupts(struct tegra_devfreq *tegra) val &= ~ACTMON_DEV_CTRL_CONSECUTIVE_ABOVE_WMARK_EN; device_writel(dev, val, ACTMON_DEV_CTRL); + + device_writel(dev, ACTMON_INTR_STATUS_CLEAR, + ACTMON_DEV_INTR_STATUS); } actmon_write_barrier(tegra); + + enable_irq(tegra->irq); } static void tegra_actmon_configure_device(struct tegra_devfreq *tegra, @@ -604,7 +613,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); @@ -673,15 +681,16 @@ static int tegra_devfreq_probe(struct platform_device *pdev) dev_pm_opp_add(&pdev->dev, rate, 0); } - irq = platform_get_irq(pdev, 0); - if (irq < 0) { - dev_err(&pdev->dev, "Failed to get IRQ: %d\n", irq); - return irq; + 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; } platform_set_drvdata(pdev, tegra); - err = devm_request_threaded_irq(&pdev->dev, irq, NULL, + err = devm_request_threaded_irq(&pdev->dev, tegra->irq, NULL, actmon_thread_isr, IRQF_ONESHOT, "tegra-devfreq", tegra); if (err) { From patchwork Wed May 1 23:38:07 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1093943 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="PFs4MVzl"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44vZhP0Cczz9s5c for ; Thu, 2 May 2019 09:43:01 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726415AbfEAXmC (ORCPT ); Wed, 1 May 2019 19:42:02 -0400 Received: from mail-io1-f67.google.com ([209.85.166.67]:43406 "EHLO mail-io1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726407AbfEAXmC (ORCPT ); Wed, 1 May 2019 19:42:02 -0400 Received: by mail-io1-f67.google.com with SMTP id v9so448001iol.10; Wed, 01 May 2019 16:42:01 -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=Urbgjf6ObOt4aJ4US+ZHY6pwQYAco+BhwHPT+aOOMeQ=; b=PFs4MVzlJ7x+4UrblL5kGZ5ttLwSc2vzdb9PqajVVnp4YjfegMdz37kdn5RvmPuM8N q3rJmx4YRs4ngstuh0yuWZTMt2zHPspX8XlVSiR4Bkse9HPPFUZuaFop1GNQwELyhWcV HFtXnmuUXnHx17ln5ucuUwt1BalXvAs6bSfbpGx40a2yxNP6BU8AZNMgdbM2/n3tF+wz gKXEL31a9uVBdM+q2qwY78k+JdHiXItXRD/H++duw7leeidcBZNZJdW8+6o4aQipEtbA afndXf2+ltRTSBNC1sqJgzmcd3mlFMIR7zLEInrvxvpQHcvdksSCm51hXL8RktmwIrh5 b14A== 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=Urbgjf6ObOt4aJ4US+ZHY6pwQYAco+BhwHPT+aOOMeQ=; b=Z8eRWcECK9TR0AduNUXpQOlpoOw5G5t3VAcovy038iLscLF8T4xAztBZq+ZUTU3QK7 85BKeI6q5pctJN6NFojLImUSfLUik8VbzoK5TxVyLKKz9bpOAcoinYDQiqv/oJW8J5bc ENb/wktiNrgrbJvJS3jbfez9ombAloYwzn/QuAcl3nvOvCHB+Ilio6BfEfSn2gXDdf3B bn3qSEmpxUdiCvhtNxY84dju9vxhum/m2h/qXTJblrHM4vCAuVbnJY0HNifn9mC//G7b 6UZ6YMTIhRHVbIaEqkoWxj2XIG+XMkCpkO7VqsyOcOZFHtr2G9DzGG/pgU3AeYEEKPMJ 4DOw== X-Gm-Message-State: APjAAAUpDWC6eKneP/Il+RBCfb1Zo0pEPhAjJN5ACCENq4QtD4omhGEl w9q+toA+a/L65Ra2wJ7XK20= X-Google-Smtp-Source: APXvYqyS7u8zzMW3mEYseQbkK8L6FaqaWQ05t39Vq1OTGD5aYcFvWmMjqKBYpkD513zq7BCwvCnH+g== X-Received: by 2002:a5d:9317:: with SMTP id l23mr380129ion.261.1556754120794; Wed, 01 May 2019 16:42:00 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id m3sm2392507ion.69.2019.05.01.16.41.58 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 01 May 2019 16:42:00 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 08/16] PM / devfreq: tegra: Clean up driver's probe / remove Date: Thu, 2 May 2019 02:38:07 +0300 Message-Id: <20190501233815.32643-9-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190501233815.32643-1-digetx@gmail.com> References: <20190501233815.32643-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 handle all possible error cases correctly, maintaining the correct tear down order. Also use devm_platform_ioremap_resource() which is now available in the kernel. Reviewed-by: Chanwoo Choi Signed-off-by: Dmitry Osipenko Acked-by: Thierry Reding --- drivers/devfreq/tegra-devfreq.c | 83 +++++++++++++++++++-------------- 1 file changed, 47 insertions(+), 36 deletions(-) diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index ce1eb97a2090..ea0da05cd7f2 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -610,7 +610,6 @@ static int tegra_devfreq_probe(struct platform_device *pdev) { struct tegra_devfreq *tegra; struct tegra_devfreq_device *dev; - struct resource *res; unsigned int i; unsigned long rate; int err; @@ -619,9 +618,7 @@ static int tegra_devfreq_probe(struct platform_device *pdev) if (!tegra) return -ENOMEM; - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - - tegra->regs = devm_ioremap_resource(&pdev->dev, res); + tegra->regs = devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(tegra->regs)) return PTR_ERR(tegra->regs); @@ -643,11 +640,10 @@ 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"); + 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; } @@ -678,54 +674,69 @@ static int tegra_devfreq_probe(struct platform_device *pdev) for (rate = 0; rate <= tegra->max_freq * KHZ; rate++) { rate = clk_round_rate(tegra->emc_clock, rate); - dev_pm_opp_add(&pdev->dev, rate, 0); - } - 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; + err = dev_pm_opp_add(&pdev->dev, rate, 0); + if (err) { + dev_err(&pdev->dev, "Failed to add OPP: %d\n", err); + goto remove_opps; + } } platform_set_drvdata(pdev, tegra); + tegra->rate_change_nb.notifier_call = tegra_actmon_rate_notify_cb; + err = clk_notifier_register(tegra->emc_clock, &tegra->rate_change_nb); + if (err) { + dev_err(&pdev->dev, + "Failed to register rate change notifier\n"); + goto remove_opps; + } + + tegra_devfreq_profile.initial_freq = clk_get_rate(tegra->emc_clock); + tegra->devfreq = devfreq_add_device(&pdev->dev, + &tegra_devfreq_profile, + "tegra_actmon", + NULL); + if (IS_ERR(tegra->devfreq)) { + err = PTR_ERR(tegra->devfreq); + goto unreg_notifier; + } + 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"); - return err; + dev_err(&pdev->dev, "Interrupt request failed: %d\n", err); + goto remove_devfreq; } - 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); - return 0; + +remove_devfreq: + devfreq_remove_device(tegra->devfreq); + +unreg_notifier: + clk_notifier_unregister(tegra->emc_clock, &tegra->rate_change_nb); + +remove_opps: + dev_pm_opp_remove_all_dynamic(&pdev->dev); + + reset_control_reset(tegra->reset); + clk_disable_unprepare(tegra->clock); + + return err; } 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; - - 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); + devfreq_remove_device(tegra->devfreq); clk_notifier_unregister(tegra->emc_clock, &tegra->rate_change_nb); + dev_pm_opp_remove_all_dynamic(&pdev->dev); + reset_control_reset(tegra->reset); clk_disable_unprepare(tegra->clock); return 0; From patchwork Wed May 1 23:38:08 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1093942 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="PtzVkK4b"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44vZhC6rRvz9sB8 for ; Thu, 2 May 2019 09:42:51 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726596AbfEAXmv (ORCPT ); Wed, 1 May 2019 19:42:51 -0400 Received: from mail-it1-f194.google.com ([209.85.166.194]:50822 "EHLO mail-it1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726380AbfEAXmE (ORCPT ); Wed, 1 May 2019 19:42:04 -0400 Received: by mail-it1-f194.google.com with SMTP id q14so363161itk.0; Wed, 01 May 2019 16:42:03 -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=VRrBRm+Zojzq1Xs8C9ndqMr3g130PwILxKvLl3EyBq0=; b=PtzVkK4bXPQLQ1KxKJjRnLy9Jzk62yNT6LaV9ugG04rl3m8c+4SNYWw9jxCrfy+emv 6my1oaDPLEa4TqHkOv2ZgjI3dmlITKvT1dLQWcQ9qRxMs1I/UE5nI2aoI6ewOJwP2Rfj +FwRD7zjxU42dbvBHT4woq3VNXUvY48thJEhQvEJAvGDbjWTnRrL/cxOxU+CEdclEChl Ma5ohYxpAWZBdxeAaghiBmf63SLg445soW+ouBmIwwJ6Je3VA0IutwKvoZNvecRSnHbf rwGRkcpJ2Dkl8j6gIVSpfF8ccaavqMErUDpDqumpd9SinYUHLt3JlKai2a78VVyhtOiL uB+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=VRrBRm+Zojzq1Xs8C9ndqMr3g130PwILxKvLl3EyBq0=; b=BLLiCQ6DV1ZxP4u5bkfc7hpiTppX7VYkWWgTA3aTklGhPgqW1YHA8IIYYppbm884RR kWQSihLKL1fbH0pAak5kh+dSb/ggdSyxW6vIttnrPBxXvbUQc30idbAcVSkq4eaHdR8I QK2A1IVHy/XvSKbuvu8R/fZ4SP7mWd8Z0VLFkFL+kyx7XB1q8u3ti6Wsp7wqgkMpiYUT RFDv5UWG4qVzzk5ne4RRluKZkQQpHJr/RZl/GL91oe6fhTh5fILlQ7Mvc+xVJcGa9kub PxBIPqv2M3j7atXqfYbM35009jxAS3yO0eaBOnxYYdZ1lzkN6+vl7VfIfRZrksZK7/aT e2yw== X-Gm-Message-State: APjAAAXJ3RrUbWhTst+bfdP9RPSWM2+CWlJEIUYAm1YPIpfFVsTnDqd6 gU0TiesIZHo0jOvzOS4Grn0= X-Google-Smtp-Source: APXvYqwmIeMUoR/eZ2dqiRwYWtZe+e+IVQoxt32E9XCZdsA1OyVypjcufCzvutl6UBKmyl7kdJJoeA== X-Received: by 2002:a05:6638:209:: with SMTP id e9mr363429jaq.22.1556754123190; Wed, 01 May 2019 16:42:03 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id m3sm2392507ion.69.2019.05.01.16.42.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 01 May 2019 16:42:02 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 09/16] PM / devfreq: tegra: Avoid inconsistency of current frequency value Date: Thu, 2 May 2019 02:38:08 +0300 Message-Id: <20190501233815.32643-10-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190501233815.32643-1-digetx@gmail.com> References: <20190501233815.32643-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. Reviewed-by: Chanwoo Choi Signed-off-by: Dmitry Osipenko Acked-by: Thierry Reding --- 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 ea0da05cd7f2..5265d735419f 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -509,13 +509,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]; @@ -526,7 +528,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 Wed May 1 23:38:09 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1093941 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="BoWsJOFL"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44vZhC0MRmz9s9N for ; Thu, 2 May 2019 09:42:51 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726579AbfEAXmp (ORCPT ); Wed, 1 May 2019 19:42:45 -0400 Received: from mail-it1-f196.google.com ([209.85.166.196]:36617 "EHLO mail-it1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726438AbfEAXmG (ORCPT ); Wed, 1 May 2019 19:42:06 -0400 Received: by mail-it1-f196.google.com with SMTP id v143so369126itc.1; Wed, 01 May 2019 16:42:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=z1/0wnRgSXVSbQEBOMgThnXBDYE/41xcxe12SD/BoTE=; b=BoWsJOFLffHIXIsVblQVK7Kf7fvH0QiYKLB0RtZmrtQYpj1/rxGKUDuoHWJGzbVWwJ YAAguodthyUOeWrWfr9M1+yBFhdjmbd7AjMztC4MeBl8SBT7DURWNyvPFCoIo1BfVv4c C7AwhtZMdpjyvO8h2cXrWVBx+9b+WCeMhsMZsBz3BdayN8Dka5EsYrwywOSVeKGHi44a +IwzpBtOJZ5kIcecuN6R4qyrSK4dJDgsvHI6lfj12TM3kRdO2WYfeLKuZac/AwKhbC7g quoRl/d/brVETVoieyS6joYKt7kwYp91/HXzjXDx+fMippJ5cvPdI1UZbe1iLfNeQJdk CQKg== 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=z1/0wnRgSXVSbQEBOMgThnXBDYE/41xcxe12SD/BoTE=; b=DXz7dc5HFTET9+BMrlIqbPlS3O7bF9P2hPCn9bnQbJlGLaTpwFtL7P5RC6Iv6qrHNl QU3SL22qadS2OMkh3xuaWnCWtBcDgXBwya1lWhfSDvIkd3YxVzMEbv48MgGzRCKeQXD7 YMfbAveh0mp8JY9nsuBVDWTcWl94Gweveg0UO8dP9E3ZB0/bP8RsvZriuL0OghWc3dCl zldZe2GUKnVCvfMudaF5YHmxVVs0qPp+oaWL1Ff4gD9dKqWXw+yDf5vHbJKm6v8dbsLd IcRxU0rpm6mC0+GgzIjQ01F3o0C0ornW/f6nGv28eDZpVbbYz6Oxsa7tsWlNWeqyV27K +UPw== X-Gm-Message-State: APjAAAWsjIuagGYROhBFng8s0o4n0RqMQklBMzRjLpOOlKAdXAReURL+ UCgyuY5MMJLTpLqbbq7i488= X-Google-Smtp-Source: APXvYqyLg4mQdd07IAKZY57ly/ftKTQKgE8EwPbml4f1Ty2EgmSXyIdyMyFpD40wyPFwka0iwWbtcw== X-Received: by 2002:a24:6495:: with SMTP id t143mr206730itc.156.1556754125561; Wed, 01 May 2019 16:42:05 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id m3sm2392507ion.69.2019.05.01.16.42.03 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 01 May 2019 16:42:05 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 10/16] PM / devfreq: tegra: Mark ACTMON's governor as immutable Date: Thu, 2 May 2019 02:38:09 +0300 Message-Id: <20190501233815.32643-11-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190501233815.32643-1-digetx@gmail.com> References: <20190501233815.32643-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. Reviewed-by: Chanwoo Choi Signed-off-by: Dmitry Osipenko Acked-by: Thierry Reding --- 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 5265d735419f..65b3a7c72293 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -606,6 +606,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 Wed May 1 23:38:10 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1093935 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="XvysVq/q"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44vZgR70mxz9s9N for ; Thu, 2 May 2019 09:42:11 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726458AbfEAXmK (ORCPT ); Wed, 1 May 2019 19:42:10 -0400 Received: from mail-it1-f195.google.com ([209.85.166.195]:56027 "EHLO mail-it1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726407AbfEAXmJ (ORCPT ); Wed, 1 May 2019 19:42:09 -0400 Received: by mail-it1-f195.google.com with SMTP id i131so327437itf.5; Wed, 01 May 2019 16:42:08 -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=+Slbek9V2dfN38nP5SDKBqpG9La7gfuORa6TNt82wFs=; b=XvysVq/qhBjP1JLxnRZYh2kTSaul1A0LJPSa9iSYrZXT5RcHzETWX62zXCCem28acy Ezm7/2KN0CXSvjW5SG7bxIaArsvfBfTzMKjRj0JZloMBWzLY0LQcACw3ElAcZmm8/ksC 0wjIPMwNu4b5Uz8wnFYjVQ+vhMPLmHKH6Dd7EWnT7JZuy0VREJ4/8H1bjOaEiMN860I6 ekZJSdKSmSzb90xNqXlbqiQgovQQ7XgxDiH+Mj8rm7r9IYrrKoyZSd8veZ17gsj/QJF1 ggyT54antUwScI7zvAkQQCQnKEPl0Sy6m/NSBhkFqMqlYAmHoTYG4qsy/RqjhSSQZ/jN xxqA== 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=+Slbek9V2dfN38nP5SDKBqpG9La7gfuORa6TNt82wFs=; b=sntatvMMSq2sbuvo4fYnIwGMyJw+U8JxbSzvuOAkonm8J9LSVJvPQQaB0Jjbq5YTyG yFwOq5FJmq2Bky0yEsq6HF0XHzVaxs1+QeKsNTCpp4qeytqp45zbE5CqpTQEsGtz6cBu HzOZeuoR59UKX2TJjO/clyRB0MCCM5LPLM0j4gKDSIv5Qf/7tv6rEIe6z13UiEUsCf7b WHj3KaeNpx6yuONwia/Gly3AqICrBz4pPy19ZtMNvV7A9DhV0aodQm0sw6yMhv00nTIX wYoo9SNHiBrAX6SrYmjWRACbOSSq/c852c1rUCn8/JekNvQ+ytHqS2U3J80Y+FAf9Sb3 gwUg== X-Gm-Message-State: APjAAAUq6m1iYVR7na36msghT6OMmbxfOAQYorBWNYPLwvPInnJS1b4d wBXUl67q4rl/wSYHWrFhNcU= X-Google-Smtp-Source: APXvYqx108GRg4cFAQ0MWjE7KPNS7xiZrAC8Q2dZ685dropJiopjs9L1E52Z4deLa5CxtrqQGU+fkA== X-Received: by 2002:a05:660c:20e:: with SMTP id y14mr202652itj.17.1556754127925; Wed, 01 May 2019 16:42:07 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id m3sm2392507ion.69.2019.05.01.16.42.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 01 May 2019 16:42:07 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 11/16] PM / devfreq: tegra: Move governor registration to driver's probe Date: Thu, 2 May 2019 02:38:10 +0300 Message-Id: <20190501233815.32643-12-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190501233815.32643-1-digetx@gmail.com> References: <20190501233815.32643-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. Reviewed-by: Chanwoo Choi Signed-off-by: Dmitry Osipenko Acked-by: Thierry Reding --- drivers/devfreq/tegra-devfreq.c | 43 +++++++++------------------------ 1 file changed, 12 insertions(+), 31 deletions(-) diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index 65b3a7c72293..40ce9881f144 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -695,6 +695,12 @@ static int tegra_devfreq_probe(struct platform_device *pdev) goto remove_opps; } + err = devfreq_add_governor(&tegra_devfreq_governor); + if (err) { + dev_err(&pdev->dev, "Failed to add governor: %d\n", err); + goto unreg_notifier; + } + tegra_devfreq_profile.initial_freq = clk_get_rate(tegra->emc_clock); tegra->devfreq = devfreq_add_device(&pdev->dev, &tegra_devfreq_profile, @@ -702,7 +708,7 @@ static int tegra_devfreq_probe(struct platform_device *pdev) NULL); if (IS_ERR(tegra->devfreq)) { err = PTR_ERR(tegra->devfreq); - goto unreg_notifier; + goto remove_governor; } err = devm_request_threaded_irq(&pdev->dev, tegra->irq, NULL, @@ -718,6 +724,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); + unreg_notifier: clk_notifier_unregister(tegra->emc_clock, &tegra->rate_change_nb); @@ -735,6 +744,7 @@ static int tegra_devfreq_remove(struct platform_device *pdev) struct tegra_devfreq *tegra = platform_get_drvdata(pdev); devfreq_remove_device(tegra->devfreq); + devfreq_remove_governor(&tegra_devfreq_governor); clk_notifier_unregister(tegra->emc_clock, &tegra->rate_change_nb); dev_pm_opp_remove_all_dynamic(&pdev->dev); @@ -760,36 +770,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 Wed May 1 23:38:11 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1093940 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="de09fenY"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44vZh349KZz9sBr for ; Thu, 2 May 2019 09:42:43 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726564AbfEAXmh (ORCPT ); Wed, 1 May 2019 19:42:37 -0400 Received: from mail-io1-f68.google.com ([209.85.166.68]:39649 "EHLO mail-io1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726183AbfEAXmL (ORCPT ); Wed, 1 May 2019 19:42:11 -0400 Received: by mail-io1-f68.google.com with SMTP id c3so467449iok.6; Wed, 01 May 2019 16:42:10 -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=PTuFlSIz6bkK0a5mBGnRYSBE3s+oDC4vml4uTvDMuRg=; b=de09fenY50RKRe3K5eR55oJkX5NWKlqpOMAiQz5f2P5MEt/Z9uT2OlLpnwO8K12KaI BfrwIeVUO3xt7mGoDNN8BguVN+5KnNR5ngufVHMU9Ju1QUVulpUMBI9UZ+K3cu4tutAJ GnjRfxySy7QYwF98Tal9p5JRvK5l5a0VVjMRoU2OMsdAbSqACusjWR8BJDmQpyA0PZHm oZ2Zk8IxBg3qpNBm8d/5zV3/eND8tXtqOwI9S+GBwzm+XY+k/g9WaNFModLyMTZ7c6mP xf5TNou6TvD9IxIy9f+hjsOlzPx/Yg2tn37YXkW3Kc6XRpR9IaHGwCmT9zd1kOTenr1O 9ZuQ== 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=PTuFlSIz6bkK0a5mBGnRYSBE3s+oDC4vml4uTvDMuRg=; b=qt0EZ4JPyLl3ygtwm/qJr3aVAcIwBZmGGPmkkTl3onr1yYYWtoNhV5+utfjrgeNi9F ytXSU8UjEud20rb7lAC2pcERzrRqbhq5eQBx+iid4FTovnnMk7rQdb3t6IY4ou7Itrmi 9luX/hVGXzHeaSeUX6Emb0IHbtuLhP9kSPgxS+yh1m0pmBlPtd2+tKTksqo10nomXQ0c aZIA+YFP0p2lMuLS2vlGHfSXn2YOkFWydeczmgWW429Q2qHWOOcxYKNO9oUgqd3WLtAC ym0+fwLaELAkpmduIlaJ/Y+Y+zudfxBpNo0kw5ML18SQPkNdzNPSAv/toI0b5VDQYdL+ Lx2Q== X-Gm-Message-State: APjAAAUOq/9mypw84bRfgWqBoVlH7PxPo7ZEPBy+GAXJxVHGMlPAPcyF CyUkS1p7VOnQzvz1ol+oD00= X-Google-Smtp-Source: APXvYqzssOLA80UvqhwkcOt6vcmSQs6dewsfluik7ArjyF010JzNWY9WL6O70VvYeUKkdBk4ExShwA== X-Received: by 2002:a6b:7509:: with SMTP id l9mr394803ioh.129.1556754130333; Wed, 01 May 2019 16:42:10 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id m3sm2392507ion.69.2019.05.01.16.42.08 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 01 May 2019 16:42:09 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 12/16] PM / devfreq: tegra: Reconfigure hardware on governor's restart Date: Thu, 2 May 2019 02:38:11 +0300 Message-Id: <20190501233815.32643-13-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190501233815.32643-1-digetx@gmail.com> References: <20190501233815.32643-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. Reviewed-by: Chanwoo Choi Signed-off-by: Dmitry Osipenko Acked-by: Thierry Reding --- drivers/devfreq/tegra-devfreq.c | 98 ++++++++++++++------------------- 1 file changed, 40 insertions(+), 58 deletions(-) diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c index 40ce9881f144..2d9d53daedd8 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -392,55 +392,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; - - disable_irq(tegra->irq); - - 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); - - device_writel(dev, ACTMON_INTR_STATUS_CLEAR, - ACTMON_DEV_INTR_STATUS); - } - - actmon_write_barrier(tegra); - - enable_irq(tegra->irq); -} - static void tegra_actmon_configure_device(struct tegra_devfreq *tegra, struct tegra_devfreq_device *dev) { @@ -464,11 +415,47 @@ 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; + + disable_irq(tegra->irq); + + 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); + + enable_irq(tegra->irq); +} + +static void tegra_actmon_stop(struct tegra_devfreq *tegra) +{ + unsigned int i; + + disable_irq(tegra->irq); + + for (i = 0; i < ARRAY_SIZE(tegra->devices); i++) { + device_writel(&tegra->devices[i], 0x00000000, ACTMON_DEV_CTRL); + device_writel(&tegra->devices[i], ACTMON_INTR_STATUS_CLEAR, + ACTMON_DEV_INTR_STATUS); + } actmon_write_barrier(tegra); + + enable_irq(tegra->irq); } static int tegra_devfreq_target(struct device *dev, unsigned long *freq, @@ -580,22 +567,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; } @@ -664,15 +651,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); } for (rate = 0; rate <= tegra->max_freq * KHZ; rate++) { From patchwork Wed May 1 23:38:12 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1093936 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="vD3YaRW2"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44vZgX0S4Bz9s6w for ; Thu, 2 May 2019 09:42:16 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726480AbfEAXmO (ORCPT ); Wed, 1 May 2019 19:42:14 -0400 Received: from mail-it1-f196.google.com ([209.85.166.196]:40194 "EHLO mail-it1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726407AbfEAXmN (ORCPT ); Wed, 1 May 2019 19:42:13 -0400 Received: by mail-it1-f196.google.com with SMTP id k64so339370itb.5; Wed, 01 May 2019 16:42:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=c/LJqNqccNSr34Z2GOKtQr7/VI/W6wdUURuTwqlUb9Y=; b=vD3YaRW2AQTqnynJjlisC0Ju3qPbd1+ohMflouQrgjGDz42qbsb4++ZCuLEJbKy1RK 3y9FIWcK0UMjeXhCZi63F3lsLKQQjRtvpWNb5Bx2qaG3aS7Py8uZmJM//CeuTXVndTZ8 wfzE/nBphC31gbguUuOUHIIIfq86TLuhmDmGJ+l42bkzB0iqJOMd7dxoroga/Ws5LgSJ 0BOBuQfOBgzVlKI96WwEB0Hvgu3v46HNJbMUN5ABX4POzRRZb7K5RtyX8gwOUZWZxYqG ySwfulNmo3Qy6sBN4efTGNb0J2TkwT0VZ3AnnyMj404ZaX0n3pyMglBQ7OMscZwwBRtI zvcA== 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=c/LJqNqccNSr34Z2GOKtQr7/VI/W6wdUURuTwqlUb9Y=; b=salmjk0gcF5SREqYbZw0+AYezLetHSZkBkaZYRYnTnnyeeqyjgD5Rjb+rCNTTtv9Ml LrGbMmuMYK+f2WG8FAO/SIUkD0h2ZlNi4M1rvI1hY7bbYgHWy/k5EzrT9tX1vWj3VDTY 9lo1+Wh7+DEiRL+4dslSYZngOXvznwrcxzMF27RjLqe9smfpKHons8rqbtr4xOpMbZQK aWgiDnftYzGGDtd/2G2sCMflASJoF/fgWNqg5Flj9PLaRMvWEhfDHHZTtxzQSylyyhYt IEZwxqPSgyDoLDLSVuFmrNGGFwEQoKUjUwz9ZUyupnv8QPQ35b6zgnfPehMALWBYejpj hZEg== X-Gm-Message-State: APjAAAWmlGrEfbFQoD2IABQH1/F4fvy8WJhB1BGiX/m54JHnpe6//sn2 1xj524VgOTshNFnP/hesfos= X-Google-Smtp-Source: APXvYqxjmVGeDLJ+wSi7y4E2SRHC9/emyw7kMiz9WTmAmNeSA/Dhff+R6gSJqzVL+6IzICLrEVqrwQ== X-Received: by 2002:a24:9b8b:: with SMTP id o133mr237170itd.74.1556754132684; Wed, 01 May 2019 16:42:12 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id m3sm2392507ion.69.2019.05.01.16.42.10 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 01 May 2019 16:42:12 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 13/16] PM / devfreq: tegra: Support Tegra30 Date: Thu, 2 May 2019 02:38:12 +0300 Message-Id: <20190501233815.32643-14-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190501233815.32643-1-digetx@gmail.com> References: <20190501233815.32643-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. Reviewed-by: Chanwoo Choi Signed-off-by: Dmitry Osipenko Acked-by: Thierry Reding --- 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..56db9dc05edb 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/114/124/210 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 2d9d53daedd8..dd0fbd2c8e04 100644 --- a/drivers/devfreq/tegra-devfreq.c +++ b/drivers/devfreq/tegra-devfreq.c @@ -738,6 +738,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 Wed May 1 23:38:13 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1093937 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="vaw1xlEH"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44vZgZ210pz9s6w for ; Thu, 2 May 2019 09:42:18 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726506AbfEAXmQ (ORCPT ); Wed, 1 May 2019 19:42:16 -0400 Received: from mail-io1-f66.google.com ([209.85.166.66]:33200 "EHLO mail-io1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726497AbfEAXmQ (ORCPT ); Wed, 1 May 2019 19:42:16 -0400 Received: by mail-io1-f66.google.com with SMTP id u12so499298iop.0; Wed, 01 May 2019 16:42:15 -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=wI1Y30GzShQIq71Qmpx4lrEpWFmLVF7D2Tq0E543U/s=; b=vaw1xlEHSML4J6bW2R5FBSjkY1foolBfKx8oOvWGRONk/4mu7VVRhWodVTgQ8SIqR1 dmvmZ+4HPpsaCuMpssaMliqxsh0U/Cqt44whz0qvZATJriEKvWubhgs4p1P4Zclz66oB dB9bW9NhJGzOnNmmcN45xypFxnzgYYmNRqhHcn2Kr1L1kbyHtgm7h0AWB0MpBdPjLgYD uGnz4RL620na6aDtK9Rmu+U3oPjDkfTCKpgKgWsKIVmIbfgqZavWaNXlilC8ANMHmvx9 Ieph3PFBZf/eMhh5dq3m8LX9h6V2kLA/dixRKMwiuA/tb9s71x7Ah2N6+gixUo3XH4UJ h3sQ== 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=wI1Y30GzShQIq71Qmpx4lrEpWFmLVF7D2Tq0E543U/s=; b=s0I/ny+jDYS32dqaPH3Ag/pB/WGWKwxHltqQomHnaAmDycCORfPWGR7bzzp984h28O oYCGAom9kK93w+oymRAFqtOq3VWwggFoaZ4RU5nFS3mecGZcwJPIryIVUW2kZxfwmolN QBNmFMtiGJ9zbXoSHht0wIAKA8C9wNQxcovFgNE3YZyfLkzbZjlhzA4ieeeWzKNaU7iD uXHKVrP2SzVH3TFsgmvslSiZwLlXwrGqgj3RW3eax5hIepJ09/EDNsjxAHn4SwlwRzUj 1M7O1XJYN9nqkc6aNgHpiQqDud5/tTw9gg5bW5TOPVg1WuCrwbpXar4z/a2HtmNIIPPC idhA== X-Gm-Message-State: APjAAAVOMBjFAqB0CF8AqZBW8jeAJRCdE3a84Jv3Dt4ef7Ja/pLfAocv mSo7ndLVD096n4M0A4v/Isw= X-Google-Smtp-Source: APXvYqy4JATXCderBIJyjzPkj0k+UguEPoulWWcCcDkJgPd3ruqEtvpA1dMcKCbWEGqyCkqq7ztMqA== X-Received: by 2002:a5d:8f82:: with SMTP id l2mr437660iol.110.1556754135130; Wed, 01 May 2019 16:42:15 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id m3sm2392507ion.69.2019.05.01.16.42.12 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 01 May 2019 16:42:14 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 14/16] PM / devfreq: tegra: Enable COMPILE_TEST for the driver Date: Thu, 2 May 2019 02:38:13 +0300 Message-Id: <20190501233815.32643-15-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190501233815.32643-1-digetx@gmail.com> References: <20190501233815.32643-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. Reviewed-by: Chanwoo Choi Signed-off-by: Dmitry Osipenko Acked-by: Thierry Reding --- drivers/devfreq/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/devfreq/Kconfig b/drivers/devfreq/Kconfig index 56db9dc05edb..a6bba6e1e7d9 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/114/124/210 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 Wed May 1 23:38:14 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1093939 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="DdTC4uVb"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44vZgr1dPMz9sB8 for ; Thu, 2 May 2019 09:42:32 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726133AbfEAXmU (ORCPT ); Wed, 1 May 2019 19:42:20 -0400 Received: from mail-it1-f193.google.com ([209.85.166.193]:36636 "EHLO mail-it1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726517AbfEAXmS (ORCPT ); Wed, 1 May 2019 19:42:18 -0400 Received: by mail-it1-f193.google.com with SMTP id v143so369851itc.1; Wed, 01 May 2019 16:42:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=0aHfrpwQ9Q70XX4N4sl0yp3+boF4GIfc1x8NZ9l+9Hs=; b=DdTC4uVbQXO2s6AYmW5EJvl0nG5WVNGky0enTznS4DD7Wgj0DGrLH8grjJ1Y/9ZP5K /73izakAI3+PVvb4WjfaQ0PGsNZD5RcmPcCEjOiYluLjid1WmhWQ5zjx+hNqnZbJ06I6 7iMJo/eYEBvtzWRY7/9r7vsqUVvaQiU3XSexnCyeNp5AsFc01WsxHds//VDloGa8GFZ3 miGzticpxgryxSVoZfRl14IvbkXOpz2LaN3g4mOgH6v88aJq4ks/tQeo2fSyE2evxm5U hNVBz03QlFuM/5YlliyBdXTgIDTTFXsAo+agFtPXU+OsOWsA6NuJ10i5qAG1JhbE42+K rsAw== 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=0aHfrpwQ9Q70XX4N4sl0yp3+boF4GIfc1x8NZ9l+9Hs=; b=IQJH/P0qbQt0YjgsDMP5wNQPq1EU7sSICaVB13AOZsRqKw9zG9UEXt6Jf4Rx921poF LJ7G0YfF4JdJb8AGKwtPg1qVGhlr7qLOrUp6qLqNr9S0qQMTZsTCMWEK9mcwibMyoNZd RMgbo2LpykrRVIBZgoybnTRt3RieKYGDS2Kah2mMK+05MVR3ARJfavI5PnfAamulHL7G qlgrSKVByV7tdEe5Afjy3IhrXytCxdxdIu0eCoqiBD9+iVx6FwFrSYsDCSIlp9P6EEi6 GQKjrPFkUpKVZ0NMLJ3Kfgu31dpCvNDtqTvgxSzwxgsVxvUg6lV2rx1JbpEDDIfXkQhm Crpg== X-Gm-Message-State: APjAAAUUOJyImBHAU+DQ47nQyfqkduTlrFuPB8pHjAreGlYeaVbBuSXp EIckpm3rtvU6uJPzvMq8nm0= X-Google-Smtp-Source: APXvYqxebFoDrqoLrqIy98qDZfwEejY3kkdUphbBi1+QAatDuKsp/69H4kdkdkggH0J6t5e6S3Gavw== X-Received: by 2002:a24:32cb:: with SMTP id j194mr194380ita.168.1556754137811; Wed, 01 May 2019 16:42:17 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id m3sm2392507ion.69.2019.05.01.16.42.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 01 May 2019 16:42:17 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 15/16] PM / devfreq: tegra: Rename tegra-devfreq.c to tegra30-devfreq.c Date: Thu, 2 May 2019 02:38:14 +0300 Message-Id: <20190501233815.32643-16-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190501233815.32643-1-digetx@gmail.com> References: <20190501233815.32643-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 In order to reflect that driver serves NVIDIA Tegra30 and later SoC generations, let's rename the driver's source file to "tegra30-devfreq.c". This will make driver files to look more consistent after addition of a driver for Tegra20. Reviewed-by: Chanwoo Choi Signed-off-by: Dmitry Osipenko --- drivers/devfreq/Makefile | 2 +- drivers/devfreq/{tegra-devfreq.c => tegra30-devfreq.c} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename drivers/devfreq/{tegra-devfreq.c => tegra30-devfreq.c} (100%) diff --git a/drivers/devfreq/Makefile b/drivers/devfreq/Makefile index 32b8d4d3f12c..47e5aeeebfd1 100644 --- a/drivers/devfreq/Makefile +++ b/drivers/devfreq/Makefile @@ -10,7 +10,7 @@ obj-$(CONFIG_DEVFREQ_GOV_PASSIVE) += governor_passive.o # DEVFREQ Drivers 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_TEGRA_DEVFREQ) += tegra30-devfreq.o # DEVFREQ Event Drivers obj-$(CONFIG_PM_DEVFREQ_EVENT) += event/ diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra30-devfreq.c similarity index 100% rename from drivers/devfreq/tegra-devfreq.c rename to drivers/devfreq/tegra30-devfreq.c From patchwork Wed May 1 23:38:15 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 1093938 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="r6PUDJpR"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44vZgg1hrBz9s5c for ; Thu, 2 May 2019 09:42:23 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726534AbfEAXmV (ORCPT ); Wed, 1 May 2019 19:42:21 -0400 Received: from mail-it1-f196.google.com ([209.85.166.196]:34620 "EHLO mail-it1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726526AbfEAXmV (ORCPT ); Wed, 1 May 2019 19:42:21 -0400 Received: by mail-it1-f196.google.com with SMTP id p18so4195621itm.1; Wed, 01 May 2019 16:42:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=00VoYupkltIIZPHq0j4gOx9hJNR8372CM8lIROdA4bc=; b=r6PUDJpRjbcHYbtQbB4R82KvgyHeXkk9Wto6+ocWTHnY4RDC1sejzDiQJe+2QpGjQk O7AO0jaXsY8vmgRmYTYa0TPHG7CtnIfouikVIBHFwjSb9I0WyxpIhsyQ7W/9RmiCtcMw 85drwVMQlOD5X8N8dtgiUWmwBjedqlItWbFxAOOQvDxM5efWEVxRG8/T+/jQU1/qQZ9E 4FQVNEmZ5pA5i+mreP3BhCFSMhCZCYz5RcwYN3LK9ECpoLh0AadlXb50tXuV1ZnGdEyn ecYSK8Xc80T5Nm9y9cCtPZfPp5WjeqhFnuwfWQjLtn/zMEEfjWLk9Hd2jKekhE3FB+Ej R5nw== 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=00VoYupkltIIZPHq0j4gOx9hJNR8372CM8lIROdA4bc=; b=VyhvE/G0duZuR71VZDixTp4bNQ+lEDlKNlj95R49Nl5g7NTs+AZOdLEqfpv0JuQD1E cUhhJlkmEJyOfq+i8KEI2YwUN21F3+V3agrVndg4+koFkDuXXJqVhBdL6Wpkx9A20toG nvHpWE0ehe+doMCSm51S42b6wtC1e1JhUr0EzO15ws0zDzqalC+NhN19TOEhnxHLYgS5 fPwGkoTdl84oppHh/40PHrAPBRtc3PKBsO0dJvDgCx65IywVKS0h2tePW6YiRkExawBw ku8A6JCTroeqHFHzdOErADItGt5Ju7Sv528n91VwsGVpnCBK/bKHZfeW6p0IqhCH4i5L EHUQ== X-Gm-Message-State: APjAAAWIrM9W35yHrrzfbnR1Z3IaYmPkPD8zuxhneXe3ON0Hb1Kh0ng9 zrQb+GEGkVjXP99k3SJg/2c= X-Google-Smtp-Source: APXvYqweRxMpxvQfc4b6wx4nGXWdtHgFvNtylAAY3DqjO33nX8gm4fXZClvO1lIErhNGoKKisWGH8Q== X-Received: by 2002:a05:660c:12ce:: with SMTP id k14mr215145itd.23.1556754140432; Wed, 01 May 2019 16:42:20 -0700 (PDT) Received: from localhost.localdomain (ppp94-29-35-107.pppoe.spdop.ru. [94.29.35.107]) by smtp.gmail.com with ESMTPSA id m3sm2392507ion.69.2019.05.01.16.42.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 01 May 2019 16:42:19 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Jonathan Hunter , MyungJoo Ham , Kyungmin Park , Chanwoo Choi , Tomeu Vizoso Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 16/16] PM / devfreq: Introduce driver for NVIDIA Tegra20 Date: Thu, 2 May 2019 02:38:15 +0300 Message-Id: <20190501233815.32643-17-digetx@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190501233815.32643-1-digetx@gmail.com> References: <20190501233815.32643-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. Reviewed-by: Chanwoo Choi Signed-off-by: Dmitry Osipenko --- MAINTAINERS | 8 ++ drivers/devfreq/Kconfig | 10 ++ drivers/devfreq/Makefile | 1 + drivers/devfreq/tegra20-devfreq.c | 212 ++++++++++++++++++++++++++++++ 4 files changed, 231 insertions(+) create mode 100644 drivers/devfreq/tegra20-devfreq.c diff --git a/MAINTAINERS b/MAINTAINERS index 98edc38bfd7b..e7e434f74038 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -10098,6 +10098,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 a6bba6e1e7d9..1530dbefa31f 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 47e5aeeebfd1..338ae8440db6 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) += tegra30-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..ff82bac9ee4e --- /dev/null +++ b/drivers/devfreq/tegra20-devfreq.c @@ -0,0 +1,212 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * NVIDIA Tegra20 devfreq driver + * + * Copyright (C) 2019 GRATE-DRIVER project + */ + +#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 *emc_clock; + 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 devfreq *devfreq = tegra->devfreq; + 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->emc_clock, rate); + if (err) + return err; + + err = clk_set_rate(tegra->emc_clock, 0); + if (err) + goto restore_min_rate; + + return 0; + +restore_min_rate: + clk_set_min_rate(tegra->emc_clock, devfreq->previous_freq); + + return err; +} + +static int tegra_devfreq_get_dev_status(struct device *dev, + struct devfreq_dev_status *stat) +{ + struct tegra_devfreq *tegra = dev_get_drvdata(dev); + + /* + * EMC_COUNT returns number of memory events, that number is lower + * than the number of clocks. Conversion ratio of 1/8 results in a + * bit higher bandwidth than actually needed, it is good enough for + * the time being because drivers don't support requesting minimum + * needed memory bandwidth yet. + * + * TODO: adjust the ratio value once relevant drivers will support + * memory bandwidth management. + */ + 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->emc_clock); + + 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_devfreq_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 memory controller: %d\n", + err); + return err; + } + + tegra = devm_kzalloc(&pdev->dev, sizeof(*tegra), GFP_KERNEL); + if (!tegra) + return -ENOMEM; + + /* EMC is a system-critical clock that is always enabled */ + tegra->emc_clock = devm_clk_get(&pdev->dev, "emc"); + if (IS_ERR(tegra->emc_clock)) { + err = PTR_ERR(tegra->emc_clock); + dev_err(&pdev->dev, "failed to get emc clock: %d\n", err); + return err; + } + + tegra->regs = mc->regs; + + max_rate = clk_round_rate(tegra->emc_clock, ULONG_MAX); + + for (rate = 0; rate <= max_rate; rate++) { + rate = clk_round_rate(tegra->emc_clock, rate); + + err = dev_pm_opp_add(&pdev->dev, rate, 0); + if (err) { + dev_err(&pdev->dev, "failed to add opp: %d\n", err); + goto remove_opps; + } + } + + /* + * Reset statistic gathers state, select global bandwidth for the + * statistics collection mode and set clocks counter saturation + * limit to maximum. + */ + 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)) { + err = PTR_ERR(tegra->devfreq); + 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) +{ + 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_devfreq_driver = { + .probe = tegra_devfreq_probe, + .remove = tegra_devfreq_remove, + .driver = { + .name = "tegra20-devfreq", + }, +}; +module_platform_driver(tegra_devfreq_driver); + +MODULE_ALIAS("platform:tegra20-devfreq"); +MODULE_AUTHOR("Dmitry Osipenko "); +MODULE_DESCRIPTION("NVIDIA Tegra20 devfreq driver"); +MODULE_LICENSE("GPL v2");