Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d7c118e1 authored by Konstantin Dorfman's avatar Konstantin Dorfman Committed by Matt Wagantall
Browse files

mmc: sdhci-msm: Add tracepoints to enhance pm debugging



Instrument the sdhci-msm platform driver with tracepoints to aid in
debugging issues and identifying latencies in the following
paths:
* System suspend/resume
* Runtime suspend/resume

Change-Id: I4fed1c2ccba7d5d7f978f161e7985c98e869d1d8
Signed-off-by: default avatarKonstantin Dorfman <kdorfman@codeaurora.org>
parent 66d5686f
Loading
Loading
Loading
Loading
+17 −3
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@
#include <linux/pinctrl/consumer.h>
#include <linux/msm-bus.h>
#include <linux/pm_runtime.h>
#include <trace/events/mmc.h>

#include "sdhci-pltfm.h"

@@ -3319,6 +3320,7 @@ static int sdhci_msm_runtime_suspend(struct device *dev)
	struct sdhci_host *host = dev_get_drvdata(dev);
	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
	struct sdhci_msm_host *msm_host = pltfm_host->priv;
	ktime_t start = ktime_get();

	disable_irq(host->irq);
	disable_irq(msm_host->pwr_irq);
@@ -3332,6 +3334,8 @@ static int sdhci_msm_runtime_suspend(struct device *dev)
		if (msm_host->msm_bus_vote.client_handle)
			sdhci_msm_bus_cancel_work_and_set_vote(host, 0);
	}
	trace_sdhci_msm_runtime_suspend(mmc_hostname(host->mmc), 0,
			ktime_to_us(ktime_sub(ktime_get(), start)));

	return 0;
}
@@ -3341,10 +3345,13 @@ static int sdhci_msm_runtime_resume(struct device *dev)
	struct sdhci_host *host = dev_get_drvdata(dev);
	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
	struct sdhci_msm_host *msm_host = pltfm_host->priv;
	ktime_t start = ktime_get();

	enable_irq(msm_host->pwr_irq);
	enable_irq(host->irq);

	trace_sdhci_msm_runtime_resume(mmc_hostname(host->mmc), 0,
			ktime_to_us(ktime_sub(ktime_get(), start)));
	return 0;
}

@@ -3353,6 +3360,8 @@ static int sdhci_msm_suspend(struct device *dev)
	struct sdhci_host *host = dev_get_drvdata(dev);
	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
	struct sdhci_msm_host *msm_host = pltfm_host->priv;
	int ret = 0;
	ktime_t start = ktime_get();

	if (gpio_is_valid(msm_host->pdata->status_gpio))
		mmc_gpio_free_cd(msm_host->mmc);
@@ -3362,9 +3371,11 @@ static int sdhci_msm_suspend(struct device *dev)
		mmc_hostname(host->mmc), __func__);
		goto out;
	}
	return sdhci_msm_runtime_suspend(dev);
	ret = sdhci_msm_runtime_suspend(dev);
out:
	return 0;
	trace_sdhci_msm_suspend(mmc_hostname(host->mmc), ret,
			ktime_to_us(ktime_sub(ktime_get(), start)));
	return ret;
}

static int sdhci_msm_resume(struct device *dev)
@@ -3373,6 +3384,7 @@ static int sdhci_msm_resume(struct device *dev)
	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
	struct sdhci_msm_host *msm_host = pltfm_host->priv;
	int ret = 0;
	ktime_t start = ktime_get();

	if (gpio_is_valid(msm_host->pdata->status_gpio)) {
		ret = mmc_gpio_request_cd(msm_host->mmc,
@@ -3387,8 +3399,10 @@ static int sdhci_msm_resume(struct device *dev)
		goto out;
	}

	return sdhci_msm_runtime_resume(dev);
	ret = sdhci_msm_runtime_resume(dev);
out:
	trace_sdhci_msm_resume(mmc_hostname(host->mmc), ret,
			ktime_to_us(ktime_sub(ktime_get(), start)));
	return ret;
}

+15 −0
Original line number Diff line number Diff line
@@ -217,6 +217,21 @@ DEFINE_EVENT(mmc_pm_template, mmc_resume,
	     TP_PROTO(const char *dev_name, int err, s64 usecs),
	     TP_ARGS(dev_name, err, usecs));

DEFINE_EVENT(mmc_pm_template, sdhci_msm_suspend,
	     TP_PROTO(const char *dev_name, int err, s64 usecs),
	     TP_ARGS(dev_name, err, usecs));

DEFINE_EVENT(mmc_pm_template, sdhci_msm_resume,
	     TP_PROTO(const char *dev_name, int err, s64 usecs),
	     TP_ARGS(dev_name, err, usecs));

DEFINE_EVENT(mmc_pm_template, sdhci_msm_runtime_suspend,
	     TP_PROTO(const char *dev_name, int err, s64 usecs),
	     TP_ARGS(dev_name, err, usecs));

DEFINE_EVENT(mmc_pm_template, sdhci_msm_runtime_resume,
	     TP_PROTO(const char *dev_name, int err, s64 usecs),
	     TP_ARGS(dev_name, err, usecs));
#endif /* if !defined(_TRACE_MMC_H) || defined(TRACE_HEADER_MULTI_READ) */

/* This part must be outside protection */