pm: trace pm_device_enable/disable

Trace both pm_device_enable and pm_device_disable.

Signed-off-by: Anas Nashif <anas.nashif@intel.com>
This commit is contained in:
Anas Nashif 2021-05-13 11:26:37 -04:00
commit 3b82c388f6
5 changed files with 28 additions and 2 deletions

View file

@ -135,7 +135,6 @@ static int pm_device_request(const struct device *dev,
/* Return in case of Async request */
if (pm_flags & PM_DEVICE_ASYNC) {
SYS_PORT_TRACING_FUNC_EXIT(pm, device_request, dev, 0);
ret = 0;
goto out;
}
@ -182,11 +181,13 @@ void pm_device_enable(const struct device *dev)
{
k_spinlock_key_t key;
SYS_PORT_TRACING_FUNC_ENTER(pm, device_enable, dev);
if (k_is_pre_kernel()) {
dev->pm->dev = dev;
dev->pm->enable = true;
atomic_set(&dev->pm->state, PM_DEVICE_STATE_SUSPEND);
k_work_init_delayable(&dev->pm->work, pm_work_handler);
SYS_PORT_TRACING_FUNC_EXIT(pm, device_enable, dev);
return;
}
@ -205,12 +206,14 @@ void pm_device_enable(const struct device *dev)
k_work_schedule(&dev->pm->work, K_NO_WAIT);
}
k_spin_unlock(&dev->pm->lock, key);
SYS_PORT_TRACING_FUNC_EXIT(pm, device_enable, dev);
}
void pm_device_disable(const struct device *dev)
{
k_spinlock_key_t key;
SYS_PORT_TRACING_FUNC_ENTER(pm, device_disable, dev);
__ASSERT(k_is_pre_kernel() == false, "Device should not be disabled "
"before kernel is initialized");
@ -219,4 +222,5 @@ void pm_device_disable(const struct device *dev)
/* Bring up the device before disabling the Idle PM */
k_work_schedule(&dev->pm->work, K_NO_WAIT);
k_spin_unlock(&dev->pm->lock, key);
SYS_PORT_TRACING_FUNC_EXIT(pm, device_disable, dev);
}

View file

@ -320,6 +320,11 @@ extern "C" {
#define sys_port_trace_pm_device_request_enter(dev, target_state)
#define sys_port_trace_pm_device_request_exit(dev, ret)
#define sys_port_trace_pm_device_enable_enter(dev)
#define sys_port_trace_pm_device_enable_exit(dev)
#define sys_port_trace_pm_device_disable_enter(dev)
#define sys_port_trace_pm_device_disable_exit(dev)
void sys_trace_syscall_enter(void);
void sys_trace_syscall_exit(void);
void sys_trace_idle(void);

View file

@ -165,3 +165,5 @@ TaskState 0xBF 1=dummy, 2=Waiting, 4=New, 8=Terminated, 16=Suspended, 32=Termina
156 pm_system_suspend ticks=%u | Returns %PowerState
157 pm_device_request dev=%I target_state=%DevicePowerState | Returns %u
158 pm_device_enable dev=%I
159 pm_device_disable dev=%I

View file

@ -152,7 +152,9 @@ extern "C" {
#define TID_PM_SUSPEND (124u + TID_OFFSET)
#define TID_PM_DEVICE_REQUEST (125u + TID_OFFSET)
/* latest ID is 125 */
#define TID_PM_DEVICE_ENABLE (126u + TID_OFFSET)
#define TID_PM_DEVICE_DISABLE (127u + TID_OFFSET)
/* latest ID is 127 */
void sys_trace_thread_info(struct k_thread *thread);
@ -756,6 +758,15 @@ void sys_trace_k_thread_info(struct k_thread *thread);
#define sys_port_trace_pm_device_request_exit(dev, ret) \
SEGGER_SYSVIEW_RecordEndCallU32(TID_PM_DEVICE_REQUEST, (uint32_t)ret)
#define sys_port_trace_pm_device_enable_enter(dev) \
SEGGER_SYSVIEW_RecordU32(TID_PM_DEVICE_ENABLE, (uint32_t)(uintptr_t)dev)
#define sys_port_trace_pm_device_enable_exit(dev) \
SEGGER_SYSVIEW_RecordEndCall(TID_PM_DEVICE_ENABLE)
#define sys_port_trace_pm_device_disable_enter(dev) \
SEGGER_SYSVIEW_RecordU32(TID_PM_DEVICE_DISABLE, (uint32_t)(uintptr_t)dev)
#define sys_port_trace_pm_device_disable_exit(dev) \
SEGGER_SYSVIEW_RecordEndCall(TID_PM_DEVICE_DISABLE)
#ifdef __cplusplus

View file

@ -422,6 +422,10 @@
#define sys_port_trace_pm_device_request_enter(dev, target_state)
#define sys_port_trace_pm_device_request_exit(dev, ret)
#define sys_port_trace_pm_device_enable_enter(dev)
#define sys_port_trace_pm_device_enable_exit(dev)
#define sys_port_trace_pm_device_disable_enter(dev)
#define sys_port_trace_pm_device_disable_exit(dev)
void sys_trace_syscall_enter(void);
void sys_trace_syscall_exit(void);