Linux-PM Archive on lore.kernel.org
 help / color / Atom feed
From: Chanwoo Choi <cw00.choi@samsung.com>
To: Dmitry Osipenko <digetx@gmail.com>,
	Thierry Reding <thierry.reding@gmail.com>,
	MyungJoo Ham <myungjoo.ham@samsung.com>,
	Kyungmin Park <kyungmin.park@samsung.com>,
	Jonathan Hunter <jonathanh@nvidia.com>,
	Tomeu Vizoso <tomeu.vizoso@collabora.com>
Cc: linux-pm@vger.kernel.org, linux-tegra@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v4 11/24] PM / devfreq: tegra30: Add debug messages
Date: Tue, 16 Jul 2019 21:23:57 +0900
Message-ID: <c883bdbe-427f-35a1-9e63-5e4953a84286@samsung.com> (raw)
In-Reply-To: <20190707223303.6755-12-digetx@gmail.com>

Hi Dmitry,

Usually, the kernel log print for all users
such as changing the frequency, fail or success.

But, if the log just show the register dump,
it is not useful for all users. It is just used
for only specific developer.

I recommend that you better to add more exception handling
code on many points instead of just showing the register dump.

On 19. 7. 8. 오전 7:32, Dmitry Osipenko wrote:
> Add debug messages to know about what's happening in hardware and how
> driver reacts.
> 
> Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
> ---
>  drivers/devfreq/tegra30-devfreq.c | 35 +++++++++++++++++++++++++++++++
>  1 file changed, 35 insertions(+)
> 
> diff --git a/drivers/devfreq/tegra30-devfreq.c b/drivers/devfreq/tegra30-devfreq.c
> index 878c9396bb8c..c6c4a07d3e07 100644
> --- a/drivers/devfreq/tegra30-devfreq.c
> +++ b/drivers/devfreq/tegra30-devfreq.c
> @@ -41,6 +41,7 @@
>  #define ACTMON_DEV_AVG_UPPER_WMARK				0x10
>  #define ACTMON_DEV_AVG_LOWER_WMARK				0x14
>  #define ACTMON_DEV_COUNT_WEIGHT					0x18
> +#define ACTMON_DEV_COUNT					0x1c
>  #define ACTMON_DEV_AVG_COUNT					0x20
>  #define ACTMON_DEV_INTR_STATUS					0x24
>  
> @@ -276,6 +277,9 @@ static void tegra_actmon_get_lower_upper(struct tegra_devfreq *tegra,
>  					 unsigned long *lower,
>  					 unsigned long *upper)
>  {
> +	struct device *ddev = tegra->devfreq->dev.parent;
> +	u32 offset = dev->config->offset;
> +
>  	/*
>  	 * Memory frequencies are guaranteed to have 1MHz granularity
>  	 * and thus we need this rounding down to get a proper watermarks
> @@ -288,6 +292,9 @@ static void tegra_actmon_get_lower_upper(struct tegra_devfreq *tegra,
>  	*lower = tegra_actmon_lower_freq(tegra, target_freq);
>  	*upper = tegra_actmon_upper_freq(tegra, target_freq);
>  
> +	dev_dbg(ddev, "%03x: target_freq %lu lower freq %lu upper freq %lu\n",
> +		offset, target_freq, *lower, *upper);
> +
>  	*lower /= KHZ;
>  	*upper /= KHZ;
>  
> @@ -367,11 +374,31 @@ static void tegra_devfreq_update_wmark(struct tegra_devfreq *tegra,
>  	device_writel(dev, lower + delta, ACTMON_DEV_LOWER_WMARK);
>  }
>  
> +static void actmon_device_debug(struct tegra_devfreq *tegra,
> +				struct tegra_devfreq_device *dev,
> +				const char *prefix)
> +{
> +	dev_dbg(tegra->devfreq->dev.parent,
> +		"%03x: %s: 0x%08x 0x%08x a %u %u %u c %u %u %u b %lu cpu %u\n",
> +		dev->config->offset, prefix,
> +		device_readl(dev, ACTMON_DEV_INTR_STATUS),
> +		device_readl(dev, ACTMON_DEV_CTRL),
> +		device_readl(dev, ACTMON_DEV_AVG_COUNT),
> +		device_readl(dev, ACTMON_DEV_AVG_LOWER_WMARK),
> +		device_readl(dev, ACTMON_DEV_AVG_UPPER_WMARK),
> +		device_readl(dev, ACTMON_DEV_COUNT),
> +		device_readl(dev, ACTMON_DEV_LOWER_WMARK),
> +		device_readl(dev, ACTMON_DEV_UPPER_WMARK),
> +		dev->boost_freq, cpufreq_get(0));
> +}
> +
>  static void actmon_isr_device(struct tegra_devfreq *tegra,
>  			      struct tegra_devfreq_device *dev)
>  {
>  	u32 intr_status, dev_ctrl, avg_intr_mask;
>  
> +	actmon_device_debug(tegra, dev, "isr+");
> +
>  	dev->avg_count = device_readl(dev, ACTMON_DEV_AVG_COUNT);
>  	intr_status = device_readl(dev, ACTMON_DEV_INTR_STATUS);
>  	dev_ctrl = device_readl(dev, ACTMON_DEV_CTRL);
> @@ -422,6 +449,8 @@ static void actmon_isr_device(struct tegra_devfreq *tegra,
>  
>  	device_writel(dev, dev_ctrl, ACTMON_DEV_CTRL);
>  	device_writel(dev, ACTMON_INTR_STATUS_CLEAR, ACTMON_DEV_INTR_STATUS);
> +
> +	actmon_device_debug(tegra, dev, "isr-");
>  }
>  
>  static unsigned long actmon_update_target(struct tegra_devfreq *tegra,
> @@ -712,6 +741,7 @@ static struct devfreq_dev_profile tegra_devfreq_profile = {
>  static int tegra_governor_get_target(struct devfreq *devfreq,
>  				     unsigned long *freq)
>  {
> +	struct device *ddev = devfreq->dev.parent;
>  	struct devfreq_dev_status *stat;
>  	struct tegra_devfreq *tegra;
>  	struct tegra_devfreq_device *dev;
> @@ -734,6 +764,11 @@ static int tegra_governor_get_target(struct devfreq *devfreq,
>  		dev_target_freq = actmon_update_target(tegra, dev);
>  
>  		target_freq = max(target_freq, dev_target_freq);
> +
> +		dev_dbg(ddev, "%03x: upd: dev_target_freq %lu\n",
> +			dev->config->offset, dev_target_freq);
> +
> +		actmon_device_debug(tegra, dev, "upd");
>  	}
>  
>  	*freq = target_freq * KHZ;
> 

-- 
Best Regards,
Chanwoo Choi
Samsung Electronics

  reply index

Thread overview: 94+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-07-07 22:32 [PATCH v4 00/24] More improvements for Tegra30 devfreq driver Dmitry Osipenko
2019-07-07 22:32 ` [PATCH v4 01/24] PM / devfreq: tegra30: Change irq type to unsigned int Dmitry Osipenko
2019-07-16 11:35   ` Chanwoo Choi
2019-07-07 22:32 ` [PATCH v4 02/24] PM / devfreq: tegra30: Keep interrupt disabled while governor is stopped Dmitry Osipenko
2019-07-16 11:47   ` Chanwoo Choi
2019-07-16 13:03     ` Dmitry Osipenko
2019-07-17  6:37       ` Chanwoo Choi
2019-07-17 16:44         ` Dmitry Osipenko
2019-07-07 22:32 ` [PATCH v4 03/24] PM / devfreq: tegra30: Handle possible round-rate error Dmitry Osipenko
2019-07-16 11:50   ` Chanwoo Choi
2019-07-16 13:09     ` Dmitry Osipenko
2019-07-17  6:38       ` Chanwoo Choi
2019-07-07 22:32 ` [PATCH v4 04/24] PM / devfreq: tegra30: Drop write-barrier Dmitry Osipenko
2019-07-16 11:51   ` Chanwoo Choi
2019-07-07 22:32 ` [PATCH v4 05/24] PM / devfreq: tegra30: Set up watermarks properly Dmitry Osipenko
2019-07-18 10:17   ` Chanwoo Choi
2019-07-19  0:00     ` Dmitry Osipenko
2019-07-19  1:31       ` Chanwoo Choi
2019-07-07 22:32 ` [PATCH v4 06/24] PM / devfreq: tegra30: Tune up boosting thresholds Dmitry Osipenko
2019-07-16 11:55   ` Chanwoo Choi
2019-07-07 22:32 ` [PATCH v4 07/24] PM / devfreq: tegra30: Use CPUFreq notifier Dmitry Osipenko
2019-07-16 12:08   ` Chanwoo Choi
2019-07-16 13:18     ` Dmitry Osipenko
2019-07-07 22:32 ` [PATCH v4 08/24] PM / devfreq: tegra30: Move clk-notifier's registration to governor's start Dmitry Osipenko
2019-07-16 12:11   ` Chanwoo Choi
2019-07-07 22:32 ` [PATCH v4 09/24] PM / devfreq: tegra30: Reset boosting on startup Dmitry Osipenko
2019-07-16 12:13   ` Chanwoo Choi
2019-07-16 13:19     ` Dmitry Osipenko
2019-07-07 22:32 ` [PATCH v4 10/24] PM / devfreq: tegra30: Don't enable consecutive-down interrupt " Dmitry Osipenko
2019-07-16 12:17   ` Chanwoo Choi
2019-07-16 15:17     ` Dmitry Osipenko
2019-07-07 22:32 ` [PATCH v4 11/24] PM / devfreq: tegra30: Add debug messages Dmitry Osipenko
2019-07-16 12:23   ` Chanwoo Choi [this message]
2019-07-16 13:26     ` Dmitry Osipenko
2019-07-17  6:45       ` Chanwoo Choi
2019-07-17 15:46         ` Dmitry Osipenko
2019-07-18  9:07           ` Chanwoo Choi
2019-07-19  1:13             ` Dmitry Osipenko
2019-07-19  1:22               ` Chanwoo Choi
2019-07-19 17:10                 ` Dmitry Osipenko
2019-07-07 22:32 ` [PATCH v4 12/24] PM / devfreq: tegra30: Inline all one-line functions Dmitry Osipenko
2019-07-16 12:26   ` Chanwoo Choi
2019-07-16 13:35     ` Dmitry Osipenko
2019-07-18  9:09       ` Chanwoo Choi
2019-07-19  1:22         ` Dmitry Osipenko
2019-07-19  1:24           ` Chanwoo Choi
2019-07-19  1:27             ` Chanwoo Choi
2019-07-19  2:14               ` Dmitry Osipenko
2019-07-19  6:01                 ` Chanwoo Choi
2019-07-19 16:52                   ` Dmitry Osipenko
2019-07-07 22:32 ` [PATCH v4 13/24] PM / devfreq: tegra30: Constify structs Dmitry Osipenko
2019-07-16 12:26   ` Chanwoo Choi
2019-07-07 22:32 ` [PATCH v4 14/24] PM / devfreq: tegra30: Ensure that target freq won't overflow Dmitry Osipenko
2019-07-16 12:30   ` Chanwoo Choi
2019-07-16 13:59     ` Dmitry Osipenko
2019-07-07 22:32 ` [PATCH v4 15/24] PM / devfreq: tegra30: Fix integer overflow on CPU's freq max out Dmitry Osipenko
2019-07-16 12:32   ` Chanwoo Choi
2019-07-07 22:32 ` [PATCH v4 16/24] PM / devfreq: tegra30: Use kHz units uniformly in the code Dmitry Osipenko
2019-07-07 22:32 ` [PATCH v4 17/24] PM / devfreq: tegra30: Use tracepoints for debugging Dmitry Osipenko
2019-07-18  9:47   ` Chanwoo Choi
2019-07-19  0:49     ` Dmitry Osipenko
2019-07-19  1:01       ` Chanwoo Choi
2019-07-19  1:50         ` Dmitry Osipenko
2019-07-07 22:32 ` [PATCH v4 18/24] PM / devfreq: tegra30: Optimize CPUFreq notifier Dmitry Osipenko
2019-07-18  9:48   ` Chanwoo Choi
2019-07-19  0:42     ` Dmitry Osipenko
2019-07-19  1:09       ` Chanwoo Choi
2019-07-07 22:32 ` [PATCH v4 19/24] PM / devfreq: tegra30: Optimize upper consecutive watermark selection Dmitry Osipenko
2019-07-18  9:51   ` Chanwoo Choi
2019-07-19  0:40     ` Dmitry Osipenko
2019-07-19  1:15       ` Chanwoo Choi
2019-07-19  1:17         ` Chanwoo Choi
2019-07-07 22:32 ` [PATCH v4 20/24] PM / devfreq: tegra30: Optimize upper average " Dmitry Osipenko
2019-07-19  1:36   ` Chanwoo Choi
2019-07-19  1:59     ` Dmitry Osipenko
2019-07-19  2:06       ` Chanwoo Choi
2019-07-19  2:21         ` Dmitry Osipenko
2019-07-19  6:09           ` Chanwoo Choi
2019-07-19  6:11             ` Chanwoo Choi
2019-07-19 17:52               ` Dmitry Osipenko
2019-07-24 11:17                 ` Chanwoo Choi
2019-07-24 11:19                   ` Chanwoo Choi
2019-07-07 22:33 ` [PATCH v4 21/24] PM / devfreq: tegra30: Synchronize average count on target's update Dmitry Osipenko
2019-07-18 10:15   ` Chanwoo Choi
2019-07-19  0:31     ` Dmitry Osipenko
2019-07-19  1:40       ` Chanwoo Choi
2019-07-19 16:46         ` Dmitry Osipenko
2019-07-07 22:33 ` [PATCH v4 22/24] PM / devfreq: tegra30: Include appropriate header Dmitry Osipenko
2019-07-18  9:58   ` Chanwoo Choi
2019-07-19  0:34     ` Dmitry Osipenko
2019-07-07 22:33 ` [PATCH v4 23/24] PM / devfreq: tegra30: Increase sampling period to 16ms Dmitry Osipenko
2019-07-18 10:00   ` Chanwoo Choi
2019-07-07 22:33 ` [PATCH v4 24/24] PM / devfreq: tegra20/30: Add Dmitry as a maintainer Dmitry Osipenko
2019-07-18  9:56   ` Chanwoo Choi

Reply instructions:

You may reply publically to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=c883bdbe-427f-35a1-9e63-5e4953a84286@samsung.com \
    --to=cw00.choi@samsung.com \
    --cc=digetx@gmail.com \
    --cc=jonathanh@nvidia.com \
    --cc=kyungmin.park@samsung.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=linux-tegra@vger.kernel.org \
    --cc=myungjoo.ham@samsung.com \
    --cc=thierry.reding@gmail.com \
    --cc=tomeu.vizoso@collabora.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Linux-PM Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/linux-pm/0 linux-pm/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 linux-pm linux-pm/ https://lore.kernel.org/linux-pm \
		linux-pm@vger.kernel.org
	public-inbox-index linux-pm

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-pm


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git