mmc: core: Log MMC clock frequency transitions
Use kernel's ftrace support to capture MMC clock frequency transitions which can be useful for debugging issues related to power consumption. Usage: mount -t debugfs none /sys/kernel/debug echo 1 > /sys/kernel/debug/tracing/events/mmc/mmc_clk/enable cat /sys/kernel/debug/tracing/trace_pipe Change-Id: I25c4ee39dcbe30e7665902a9f723a5a421b55ca3 Signed-off-by: Sujit Reddy Thumma <sthumma@codeaurora.org>
This commit is contained in:
parent
51361f9fd5
commit
2b899baf24
|
@ -1492,6 +1492,19 @@ void mmc_set_ios(struct mmc_host *host)
|
|||
if (ios->clock > 0)
|
||||
mmc_set_ungated(host);
|
||||
host->ops->set_ios(host, ios);
|
||||
if (ios->old_rate != ios->clock) {
|
||||
if (likely(ios->clk_ts)) {
|
||||
char trace_info[80];
|
||||
snprintf(trace_info, 80,
|
||||
"%s: freq_KHz %d --> %d | t = %d",
|
||||
mmc_hostname(host), ios->old_rate / 1000,
|
||||
ios->clock / 1000, jiffies_to_msecs(
|
||||
(long)jiffies - (long)ios->clk_ts));
|
||||
trace_mmc_clk(trace_info);
|
||||
}
|
||||
ios->old_rate = ios->clock;
|
||||
ios->clk_ts = jiffies;
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(mmc_set_ios);
|
||||
|
||||
|
|
|
@ -22,6 +22,8 @@
|
|||
|
||||
struct mmc_ios {
|
||||
unsigned int clock; /* clock rate */
|
||||
unsigned int old_rate; /* saved clock rate */
|
||||
unsigned long clk_ts; /* time stamp of last updated clock */
|
||||
unsigned short vdd;
|
||||
|
||||
/* vdd stores the bit number of the selected voltage range from below. */
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
/*
|
||||
* Copyright (C) 2013 Google, Inc.
|
||||
* Copyright (c) 2013, The Linux Foundation. All rights reserved.
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
|
@ -85,7 +86,26 @@ DEFINE_EVENT_CONDITION(mmc_blk_rw_class, mmc_blk_rw_end,
|
|||
TP_CONDITION(((cmd == MMC_READ_MULTIPLE_BLOCK) ||
|
||||
(cmd == MMC_WRITE_MULTIPLE_BLOCK)) &&
|
||||
data));
|
||||
#endif /* _TRACE_MMC_H */
|
||||
|
||||
TRACE_EVENT(mmc_clk,
|
||||
TP_PROTO(char *print_info),
|
||||
|
||||
TP_ARGS(print_info),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__string(print_info, print_info)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__assign_str(print_info, print_info);
|
||||
),
|
||||
|
||||
TP_printk("%s",
|
||||
__get_str(print_info)
|
||||
)
|
||||
);
|
||||
|
||||
#endif /* if !defined(_TRACE_MMC_H) || defined(TRACE_HEADER_MULTI_READ) */
|
||||
|
||||
/* This part must be outside protection */
|
||||
#include <trace/define_trace.h>
|
||||
|
|
Loading…
Reference in New Issue