|  |  | 
|  | Subsystem Trace Points: power | 
|  |  | 
|  | The power tracing system captures events related to power transitions | 
|  | within the kernel. Broadly speaking there are three major subheadings: | 
|  |  | 
|  | o Power state switch which reports events related to suspend (S-states), | 
|  | cpuidle (C-states) and cpufreq (P-states) | 
|  | o System clock related changes | 
|  | o Power domains related changes and transitions | 
|  |  | 
|  | This document describes what each of the tracepoints is and why they | 
|  | might be useful. | 
|  |  | 
|  | Cf. include/trace/events/power.h for the events definitions. | 
|  |  | 
|  | 1. Power state switch events | 
|  | ============================ | 
|  |  | 
|  | 1.1 New trace API | 
|  | ----------------- | 
|  |  | 
|  | A 'cpu' event class gathers the CPU-related events: cpuidle and | 
|  | cpufreq. | 
|  |  | 
|  | cpu_idle		"state=%lu cpu_id=%lu" | 
|  | cpu_frequency		"state=%lu cpu_id=%lu" | 
|  |  | 
|  | A suspend event is used to indicate the system going in and out of the | 
|  | suspend mode: | 
|  |  | 
|  | machine_suspend		"state=%lu" | 
|  |  | 
|  |  | 
|  | Note: the value of '-1' or '4294967295' for state means an exit from the current state, | 
|  | i.e. trace_cpu_idle(4, smp_processor_id()) means that the system | 
|  | enters the idle state 4, while trace_cpu_idle(PWR_EVENT_EXIT, smp_processor_id()) | 
|  | means that the system exits the previous idle state. | 
|  |  | 
|  | The event which has 'state=4294967295' in the trace is very important to the user | 
|  | space tools which are using it to detect the end of the current state, and so to | 
|  | correctly draw the states diagrams and to calculate accurate statistics etc. | 
|  |  | 
|  | 1.2 DEPRECATED trace API | 
|  | ------------------------ | 
|  |  | 
|  | A new Kconfig option CONFIG_EVENT_POWER_TRACING_DEPRECATED with the default value of | 
|  | 'y' has been created. This allows the legacy trace power API to be used conjointly | 
|  | with the new trace API. | 
|  | The Kconfig option, the old trace API (in include/trace/events/power.h) and the | 
|  | old trace points will disappear in a future release (namely 2.6.41). | 
|  |  | 
|  | power_start		"type=%lu state=%lu cpu_id=%lu" | 
|  | power_frequency		"type=%lu state=%lu cpu_id=%lu" | 
|  | power_end		"cpu_id=%lu" | 
|  |  | 
|  | The 'type' parameter takes one of those macros: | 
|  | . POWER_NONE	= 0, | 
|  | . POWER_CSTATE	= 1,	/* C-State */ | 
|  | . POWER_PSTATE	= 2,	/* Fequency change or DVFS */ | 
|  |  | 
|  | The 'state' parameter is set depending on the type: | 
|  | . Target C-state for type=POWER_CSTATE, | 
|  | . Target frequency for type=POWER_PSTATE, | 
|  |  | 
|  | power_end is used to indicate the exit of a state, corresponding to the latest | 
|  | power_start event. | 
|  |  | 
|  | 2. Clocks events | 
|  | ================ | 
|  | The clock events are used for clock enable/disable and for | 
|  | clock rate change. | 
|  |  | 
|  | clock_enable		"%s state=%lu cpu_id=%lu" | 
|  | clock_disable		"%s state=%lu cpu_id=%lu" | 
|  | clock_set_rate		"%s state=%lu cpu_id=%lu" | 
|  |  | 
|  | The first parameter gives the clock name (e.g. "gpio1_iclk"). | 
|  | The second parameter is '1' for enable, '0' for disable, the target | 
|  | clock rate for set_rate. | 
|  |  | 
|  | 3. Power domains events | 
|  | ======================= | 
|  | The power domain events are used for power domains transitions | 
|  |  | 
|  | power_domain_target	"%s state=%lu cpu_id=%lu" | 
|  |  | 
|  | The first parameter gives the power domain name (e.g. "mpu_pwrdm"). | 
|  | The second parameter is the power domain target state. | 
|  |  |