linux/include/trace/events/ufs.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-only */
   2/*
   3 * Copyright (c) 2013-2014, The Linux Foundation. All rights reserved.
   4 */
   5
   6#undef TRACE_SYSTEM
   7#define TRACE_SYSTEM ufs
   8
   9#if !defined(_TRACE_UFS_H) || defined(TRACE_HEADER_MULTI_READ)
  10#define _TRACE_UFS_H
  11
  12#include <linux/tracepoint.h>
  13
  14#define UFS_LINK_STATES                 \
  15        EM(UIC_LINK_OFF_STATE)          \
  16        EM(UIC_LINK_ACTIVE_STATE)       \
  17        EMe(UIC_LINK_HIBERN8_STATE)
  18
  19#define UFS_PWR_MODES                   \
  20        EM(UFS_ACTIVE_PWR_MODE)         \
  21        EM(UFS_SLEEP_PWR_MODE)          \
  22        EMe(UFS_POWERDOWN_PWR_MODE)
  23
  24#define UFSCHD_CLK_GATING_STATES        \
  25        EM(CLKS_OFF)                    \
  26        EM(CLKS_ON)                     \
  27        EM(REQ_CLKS_OFF)                \
  28        EMe(REQ_CLKS_ON)
  29
  30/* Enums require being exported to userspace, for user tool parsing */
  31#undef EM
  32#undef EMe
  33#define EM(a)   TRACE_DEFINE_ENUM(a);
  34#define EMe(a)  TRACE_DEFINE_ENUM(a);
  35
  36UFS_LINK_STATES;
  37UFS_PWR_MODES;
  38UFSCHD_CLK_GATING_STATES;
  39
  40/*
  41 * Now redefine the EM() and EMe() macros to map the enums to the strings
  42 * that will be printed in the output.
  43 */
  44#undef EM
  45#undef EMe
  46#define EM(a)   { a, #a },
  47#define EMe(a)  { a, #a }
  48
  49TRACE_EVENT(ufshcd_clk_gating,
  50
  51        TP_PROTO(const char *dev_name, int state),
  52
  53        TP_ARGS(dev_name, state),
  54
  55        TP_STRUCT__entry(
  56                __string(dev_name, dev_name)
  57                __field(int, state)
  58        ),
  59
  60        TP_fast_assign(
  61                __assign_str(dev_name, dev_name);
  62                __entry->state = state;
  63        ),
  64
  65        TP_printk("%s: gating state changed to %s",
  66                __get_str(dev_name),
  67                __print_symbolic(__entry->state, UFSCHD_CLK_GATING_STATES))
  68);
  69
  70TRACE_EVENT(ufshcd_clk_scaling,
  71
  72        TP_PROTO(const char *dev_name, const char *state, const char *clk,
  73                u32 prev_state, u32 curr_state),
  74
  75        TP_ARGS(dev_name, state, clk, prev_state, curr_state),
  76
  77        TP_STRUCT__entry(
  78                __string(dev_name, dev_name)
  79                __string(state, state)
  80                __string(clk, clk)
  81                __field(u32, prev_state)
  82                __field(u32, curr_state)
  83        ),
  84
  85        TP_fast_assign(
  86                __assign_str(dev_name, dev_name);
  87                __assign_str(state, state);
  88                __assign_str(clk, clk);
  89                __entry->prev_state = prev_state;
  90                __entry->curr_state = curr_state;
  91        ),
  92
  93        TP_printk("%s: %s %s from %u to %u Hz",
  94                __get_str(dev_name), __get_str(state), __get_str(clk),
  95                __entry->prev_state, __entry->curr_state)
  96);
  97
  98TRACE_EVENT(ufshcd_auto_bkops_state,
  99
 100        TP_PROTO(const char *dev_name, const char *state),
 101
 102        TP_ARGS(dev_name, state),
 103
 104        TP_STRUCT__entry(
 105                __string(dev_name, dev_name)
 106                __string(state, state)
 107        ),
 108
 109        TP_fast_assign(
 110                __assign_str(dev_name, dev_name);
 111                __assign_str(state, state);
 112        ),
 113
 114        TP_printk("%s: auto bkops - %s",
 115                __get_str(dev_name), __get_str(state))
 116);
 117
 118DECLARE_EVENT_CLASS(ufshcd_profiling_template,
 119        TP_PROTO(const char *dev_name, const char *profile_info, s64 time_us,
 120                 int err),
 121
 122        TP_ARGS(dev_name, profile_info, time_us, err),
 123
 124        TP_STRUCT__entry(
 125                __string(dev_name, dev_name)
 126                __string(profile_info, profile_info)
 127                __field(s64, time_us)
 128                __field(int, err)
 129        ),
 130
 131        TP_fast_assign(
 132                __assign_str(dev_name, dev_name);
 133                __assign_str(profile_info, profile_info);
 134                __entry->time_us = time_us;
 135                __entry->err = err;
 136        ),
 137
 138        TP_printk("%s: %s: took %lld usecs, err %d",
 139                __get_str(dev_name), __get_str(profile_info),
 140                __entry->time_us, __entry->err)
 141);
 142
 143DEFINE_EVENT(ufshcd_profiling_template, ufshcd_profile_hibern8,
 144        TP_PROTO(const char *dev_name, const char *profile_info, s64 time_us,
 145                 int err),
 146        TP_ARGS(dev_name, profile_info, time_us, err));
 147
 148DEFINE_EVENT(ufshcd_profiling_template, ufshcd_profile_clk_gating,
 149        TP_PROTO(const char *dev_name, const char *profile_info, s64 time_us,
 150                 int err),
 151        TP_ARGS(dev_name, profile_info, time_us, err));
 152
 153DEFINE_EVENT(ufshcd_profiling_template, ufshcd_profile_clk_scaling,
 154        TP_PROTO(const char *dev_name, const char *profile_info, s64 time_us,
 155                 int err),
 156        TP_ARGS(dev_name, profile_info, time_us, err));
 157
 158DECLARE_EVENT_CLASS(ufshcd_template,
 159        TP_PROTO(const char *dev_name, int err, s64 usecs,
 160                 int dev_state, int link_state),
 161
 162        TP_ARGS(dev_name, err, usecs, dev_state, link_state),
 163
 164        TP_STRUCT__entry(
 165                __field(s64, usecs)
 166                __field(int, err)
 167                __string(dev_name, dev_name)
 168                __field(int, dev_state)
 169                __field(int, link_state)
 170        ),
 171
 172        TP_fast_assign(
 173                __entry->usecs = usecs;
 174                __entry->err = err;
 175                __assign_str(dev_name, dev_name);
 176                __entry->dev_state = dev_state;
 177                __entry->link_state = link_state;
 178        ),
 179
 180        TP_printk(
 181                "%s: took %lld usecs, dev_state: %s, link_state: %s, err %d",
 182                __get_str(dev_name),
 183                __entry->usecs,
 184                __print_symbolic(__entry->dev_state, UFS_PWR_MODES),
 185                __print_symbolic(__entry->link_state, UFS_LINK_STATES),
 186                __entry->err
 187        )
 188);
 189
 190DEFINE_EVENT(ufshcd_template, ufshcd_system_suspend,
 191             TP_PROTO(const char *dev_name, int err, s64 usecs,
 192                      int dev_state, int link_state),
 193             TP_ARGS(dev_name, err, usecs, dev_state, link_state));
 194
 195DEFINE_EVENT(ufshcd_template, ufshcd_system_resume,
 196             TP_PROTO(const char *dev_name, int err, s64 usecs,
 197                      int dev_state, int link_state),
 198             TP_ARGS(dev_name, err, usecs, dev_state, link_state));
 199
 200DEFINE_EVENT(ufshcd_template, ufshcd_runtime_suspend,
 201             TP_PROTO(const char *dev_name, int err, s64 usecs,
 202                      int dev_state, int link_state),
 203             TP_ARGS(dev_name, err, usecs, dev_state, link_state));
 204
 205DEFINE_EVENT(ufshcd_template, ufshcd_runtime_resume,
 206             TP_PROTO(const char *dev_name, int err, s64 usecs,
 207                      int dev_state, int link_state),
 208             TP_ARGS(dev_name, err, usecs, dev_state, link_state));
 209
 210DEFINE_EVENT(ufshcd_template, ufshcd_init,
 211             TP_PROTO(const char *dev_name, int err, s64 usecs,
 212                      int dev_state, int link_state),
 213             TP_ARGS(dev_name, err, usecs, dev_state, link_state));
 214
 215TRACE_EVENT(ufshcd_command,
 216        TP_PROTO(const char *dev_name, const char *str, unsigned int tag,
 217                        u32 doorbell, int transfer_len, u32 intr, u64 lba,
 218                        u8 opcode),
 219
 220        TP_ARGS(dev_name, str, tag, doorbell, transfer_len, intr, lba, opcode),
 221
 222        TP_STRUCT__entry(
 223                __string(dev_name, dev_name)
 224                __string(str, str)
 225                __field(unsigned int, tag)
 226                __field(u32, doorbell)
 227                __field(int, transfer_len)
 228                __field(u32, intr)
 229                __field(u64, lba)
 230                __field(u8, opcode)
 231        ),
 232
 233        TP_fast_assign(
 234                __assign_str(dev_name, dev_name);
 235                __assign_str(str, str);
 236                __entry->tag = tag;
 237                __entry->doorbell = doorbell;
 238                __entry->transfer_len = transfer_len;
 239                __entry->intr = intr;
 240                __entry->lba = lba;
 241                __entry->opcode = opcode;
 242        ),
 243
 244        TP_printk(
 245                "%s: %s: tag: %u, DB: 0x%x, size: %d, IS: %u, LBA: %llu, opcode: 0x%x",
 246                __get_str(str), __get_str(dev_name), __entry->tag,
 247                __entry->doorbell, __entry->transfer_len,
 248                __entry->intr, __entry->lba, (u32)__entry->opcode
 249        )
 250);
 251
 252TRACE_EVENT(ufshcd_upiu,
 253        TP_PROTO(const char *dev_name, const char *str, void *hdr, void *tsf),
 254
 255        TP_ARGS(dev_name, str, hdr, tsf),
 256
 257        TP_STRUCT__entry(
 258                __string(dev_name, dev_name)
 259                __string(str, str)
 260                __array(unsigned char, hdr, 12)
 261                __array(unsigned char, tsf, 16)
 262        ),
 263
 264        TP_fast_assign(
 265                __assign_str(dev_name, dev_name);
 266                __assign_str(str, str);
 267                memcpy(__entry->hdr, hdr, sizeof(__entry->hdr));
 268                memcpy(__entry->tsf, tsf, sizeof(__entry->tsf));
 269        ),
 270
 271        TP_printk(
 272                "%s: %s: HDR:%s, CDB:%s",
 273                __get_str(str), __get_str(dev_name),
 274                __print_hex(__entry->hdr, sizeof(__entry->hdr)),
 275                __print_hex(__entry->tsf, sizeof(__entry->tsf))
 276        )
 277);
 278
 279#endif /* if !defined(_TRACE_UFS_H) || defined(TRACE_HEADER_MULTI_READ) */
 280
 281/* This part must be outside protection */
 282#include <trace/define_trace.h>
 283