197fb5e8dSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 27ff5ab47Ssubhashj@codeaurora.org /* 37ff5ab47Ssubhashj@codeaurora.org * Copyright (c) 2013-2014, The Linux Foundation. All rights reserved. 47ff5ab47Ssubhashj@codeaurora.org */ 57ff5ab47Ssubhashj@codeaurora.org 67ff5ab47Ssubhashj@codeaurora.org #undef TRACE_SYSTEM 77ff5ab47Ssubhashj@codeaurora.org #define TRACE_SYSTEM ufs 87ff5ab47Ssubhashj@codeaurora.org 97ff5ab47Ssubhashj@codeaurora.org #if !defined(_TRACE_UFS_H) || defined(TRACE_HEADER_MULTI_READ) 107ff5ab47Ssubhashj@codeaurora.org #define _TRACE_UFS_H 117ff5ab47Ssubhashj@codeaurora.org 127ff5ab47Ssubhashj@codeaurora.org #include <linux/tracepoint.h> 137ff5ab47Ssubhashj@codeaurora.org 1469a314d6SJaegeuk Kim #define str_opcode(opcode) \ 1569a314d6SJaegeuk Kim __print_symbolic(opcode, \ 1669a314d6SJaegeuk Kim { WRITE_16, "WRITE_16" }, \ 1769a314d6SJaegeuk Kim { WRITE_10, "WRITE_10" }, \ 1869a314d6SJaegeuk Kim { READ_16, "READ_16" }, \ 1969a314d6SJaegeuk Kim { READ_10, "READ_10" }, \ 2069a314d6SJaegeuk Kim { SYNCHRONIZE_CACHE, "SYNC" }, \ 2169a314d6SJaegeuk Kim { UNMAP, "UNMAP" }) 2269a314d6SJaegeuk Kim 237ff5ab47Ssubhashj@codeaurora.org #define UFS_LINK_STATES \ 24c7c730acSBean Huo EM(UIC_LINK_OFF_STATE, "UIC_LINK_OFF_STATE") \ 25c7c730acSBean Huo EM(UIC_LINK_ACTIVE_STATE, "UIC_LINK_ACTIVE_STATE") \ 26c7c730acSBean Huo EMe(UIC_LINK_HIBERN8_STATE, "UIC_LINK_HIBERN8_STATE") 277ff5ab47Ssubhashj@codeaurora.org 287ff5ab47Ssubhashj@codeaurora.org #define UFS_PWR_MODES \ 29c7c730acSBean Huo EM(UFS_ACTIVE_PWR_MODE, "UFS_ACTIVE_PWR_MODE") \ 30c7c730acSBean Huo EM(UFS_SLEEP_PWR_MODE, "UFS_SLEEP_PWR_MODE") \ 31c7c730acSBean Huo EM(UFS_POWERDOWN_PWR_MODE, "UFS_POWERDOWN_PWR_MODE") \ 32c7c730acSBean Huo EMe(UFS_DEEPSLEEP_PWR_MODE, "UFS_DEEPSLEEP_PWR_MODE") 337ff5ab47Ssubhashj@codeaurora.org 347ff5ab47Ssubhashj@codeaurora.org #define UFSCHD_CLK_GATING_STATES \ 35c7c730acSBean Huo EM(CLKS_OFF, "CLKS_OFF") \ 36c7c730acSBean Huo EM(CLKS_ON, "CLKS_ON") \ 37c7c730acSBean Huo EM(REQ_CLKS_OFF, "REQ_CLKS_OFF") \ 38c7c730acSBean Huo EMe(REQ_CLKS_ON, "REQ_CLKS_ON") 397ff5ab47Ssubhashj@codeaurora.org 4028fa68fcSBean Huo #define UFS_CMD_TRACE_STRINGS \ 4128fa68fcSBean Huo EM(UFS_CMD_SEND, "send_req") \ 4228fa68fcSBean Huo EM(UFS_CMD_COMP, "complete_rsp") \ 4328fa68fcSBean Huo EM(UFS_DEV_COMP, "dev_complete") \ 4428fa68fcSBean Huo EM(UFS_QUERY_SEND, "query_send") \ 4528fa68fcSBean Huo EM(UFS_QUERY_COMP, "query_complete") \ 4628fa68fcSBean Huo EM(UFS_QUERY_ERR, "query_complete_err") \ 4728fa68fcSBean Huo EM(UFS_TM_SEND, "tm_send") \ 4828fa68fcSBean Huo EM(UFS_TM_COMP, "tm_complete") \ 4928fa68fcSBean Huo EMe(UFS_TM_ERR, "tm_complete_err") 5028fa68fcSBean Huo 51867fdc2dSBean Huo #define UFS_CMD_TRACE_TSF_TYPES \ 52867fdc2dSBean Huo EM(UFS_TSF_CDB, "CDB") \ 53867fdc2dSBean Huo EM(UFS_TSF_OSF, "OSF") \ 54867fdc2dSBean Huo EM(UFS_TSF_TM_INPUT, "TM_INPUT") \ 55867fdc2dSBean Huo EMe(UFS_TSF_TM_OUTPUT, "TM_OUTPUT") 56867fdc2dSBean Huo 577ff5ab47Ssubhashj@codeaurora.org /* Enums require being exported to userspace, for user tool parsing */ 587ff5ab47Ssubhashj@codeaurora.org #undef EM 597ff5ab47Ssubhashj@codeaurora.org #undef EMe 60c7c730acSBean Huo #define EM(a, b) TRACE_DEFINE_ENUM(a); 61c7c730acSBean Huo #define EMe(a, b) TRACE_DEFINE_ENUM(a); 627ff5ab47Ssubhashj@codeaurora.org 637ff5ab47Ssubhashj@codeaurora.org UFS_LINK_STATES; 647ff5ab47Ssubhashj@codeaurora.org UFS_PWR_MODES; 657ff5ab47Ssubhashj@codeaurora.org UFSCHD_CLK_GATING_STATES; 6628fa68fcSBean Huo UFS_CMD_TRACE_STRINGS 67867fdc2dSBean Huo UFS_CMD_TRACE_TSF_TYPES 687ff5ab47Ssubhashj@codeaurora.org 697ff5ab47Ssubhashj@codeaurora.org /* 707ff5ab47Ssubhashj@codeaurora.org * Now redefine the EM() and EMe() macros to map the enums to the strings 717ff5ab47Ssubhashj@codeaurora.org * that will be printed in the output. 727ff5ab47Ssubhashj@codeaurora.org */ 737ff5ab47Ssubhashj@codeaurora.org #undef EM 747ff5ab47Ssubhashj@codeaurora.org #undef EMe 75c7c730acSBean Huo #define EM(a, b) {a, b}, 76c7c730acSBean Huo #define EMe(a, b) {a, b} 777ff5ab47Ssubhashj@codeaurora.org 7828fa68fcSBean Huo #define show_ufs_cmd_trace_str(str_t) \ 7928fa68fcSBean Huo __print_symbolic(str_t, UFS_CMD_TRACE_STRINGS) 80867fdc2dSBean Huo #define show_ufs_cmd_trace_tsf(tsf) \ 81867fdc2dSBean Huo __print_symbolic(tsf, UFS_CMD_TRACE_TSF_TYPES) 8228fa68fcSBean Huo 837ff5ab47Ssubhashj@codeaurora.org TRACE_EVENT(ufshcd_clk_gating, 847ff5ab47Ssubhashj@codeaurora.org 857ff5ab47Ssubhashj@codeaurora.org TP_PROTO(const char *dev_name, int state), 867ff5ab47Ssubhashj@codeaurora.org 877ff5ab47Ssubhashj@codeaurora.org TP_ARGS(dev_name, state), 887ff5ab47Ssubhashj@codeaurora.org 897ff5ab47Ssubhashj@codeaurora.org TP_STRUCT__entry( 907ff5ab47Ssubhashj@codeaurora.org __string(dev_name, dev_name) 917ff5ab47Ssubhashj@codeaurora.org __field(int, state) 927ff5ab47Ssubhashj@codeaurora.org ), 937ff5ab47Ssubhashj@codeaurora.org 947ff5ab47Ssubhashj@codeaurora.org TP_fast_assign( 957ff5ab47Ssubhashj@codeaurora.org __assign_str(dev_name, dev_name); 967ff5ab47Ssubhashj@codeaurora.org __entry->state = state; 977ff5ab47Ssubhashj@codeaurora.org ), 987ff5ab47Ssubhashj@codeaurora.org 997ff5ab47Ssubhashj@codeaurora.org TP_printk("%s: gating state changed to %s", 1007ff5ab47Ssubhashj@codeaurora.org __get_str(dev_name), 1017ff5ab47Ssubhashj@codeaurora.org __print_symbolic(__entry->state, UFSCHD_CLK_GATING_STATES)) 1027ff5ab47Ssubhashj@codeaurora.org ); 1037ff5ab47Ssubhashj@codeaurora.org 1047ff5ab47Ssubhashj@codeaurora.org TRACE_EVENT(ufshcd_clk_scaling, 1057ff5ab47Ssubhashj@codeaurora.org 1067ff5ab47Ssubhashj@codeaurora.org TP_PROTO(const char *dev_name, const char *state, const char *clk, 1077ff5ab47Ssubhashj@codeaurora.org u32 prev_state, u32 curr_state), 1087ff5ab47Ssubhashj@codeaurora.org 1097ff5ab47Ssubhashj@codeaurora.org TP_ARGS(dev_name, state, clk, prev_state, curr_state), 1107ff5ab47Ssubhashj@codeaurora.org 1117ff5ab47Ssubhashj@codeaurora.org TP_STRUCT__entry( 1127ff5ab47Ssubhashj@codeaurora.org __string(dev_name, dev_name) 1137ff5ab47Ssubhashj@codeaurora.org __string(state, state) 1147ff5ab47Ssubhashj@codeaurora.org __string(clk, clk) 1157ff5ab47Ssubhashj@codeaurora.org __field(u32, prev_state) 1167ff5ab47Ssubhashj@codeaurora.org __field(u32, curr_state) 1177ff5ab47Ssubhashj@codeaurora.org ), 1187ff5ab47Ssubhashj@codeaurora.org 1197ff5ab47Ssubhashj@codeaurora.org TP_fast_assign( 1207ff5ab47Ssubhashj@codeaurora.org __assign_str(dev_name, dev_name); 1217ff5ab47Ssubhashj@codeaurora.org __assign_str(state, state); 1227ff5ab47Ssubhashj@codeaurora.org __assign_str(clk, clk); 1237ff5ab47Ssubhashj@codeaurora.org __entry->prev_state = prev_state; 1247ff5ab47Ssubhashj@codeaurora.org __entry->curr_state = curr_state; 1257ff5ab47Ssubhashj@codeaurora.org ), 1267ff5ab47Ssubhashj@codeaurora.org 1277ff5ab47Ssubhashj@codeaurora.org TP_printk("%s: %s %s from %u to %u Hz", 1287ff5ab47Ssubhashj@codeaurora.org __get_str(dev_name), __get_str(state), __get_str(clk), 1297ff5ab47Ssubhashj@codeaurora.org __entry->prev_state, __entry->curr_state) 1307ff5ab47Ssubhashj@codeaurora.org ); 1317ff5ab47Ssubhashj@codeaurora.org 1327ff5ab47Ssubhashj@codeaurora.org TRACE_EVENT(ufshcd_auto_bkops_state, 1337ff5ab47Ssubhashj@codeaurora.org 1347ff5ab47Ssubhashj@codeaurora.org TP_PROTO(const char *dev_name, const char *state), 1357ff5ab47Ssubhashj@codeaurora.org 1367ff5ab47Ssubhashj@codeaurora.org TP_ARGS(dev_name, state), 1377ff5ab47Ssubhashj@codeaurora.org 1387ff5ab47Ssubhashj@codeaurora.org TP_STRUCT__entry( 1397ff5ab47Ssubhashj@codeaurora.org __string(dev_name, dev_name) 1407ff5ab47Ssubhashj@codeaurora.org __string(state, state) 1417ff5ab47Ssubhashj@codeaurora.org ), 1427ff5ab47Ssubhashj@codeaurora.org 1437ff5ab47Ssubhashj@codeaurora.org TP_fast_assign( 1447ff5ab47Ssubhashj@codeaurora.org __assign_str(dev_name, dev_name); 1457ff5ab47Ssubhashj@codeaurora.org __assign_str(state, state); 1467ff5ab47Ssubhashj@codeaurora.org ), 1477ff5ab47Ssubhashj@codeaurora.org 1487ff5ab47Ssubhashj@codeaurora.org TP_printk("%s: auto bkops - %s", 1497ff5ab47Ssubhashj@codeaurora.org __get_str(dev_name), __get_str(state)) 1507ff5ab47Ssubhashj@codeaurora.org ); 1517ff5ab47Ssubhashj@codeaurora.org 152911a0771Ssubhashj@codeaurora.org DECLARE_EVENT_CLASS(ufshcd_profiling_template, 153911a0771Ssubhashj@codeaurora.org TP_PROTO(const char *dev_name, const char *profile_info, s64 time_us, 154911a0771Ssubhashj@codeaurora.org int err), 155911a0771Ssubhashj@codeaurora.org 156911a0771Ssubhashj@codeaurora.org TP_ARGS(dev_name, profile_info, time_us, err), 157911a0771Ssubhashj@codeaurora.org 158911a0771Ssubhashj@codeaurora.org TP_STRUCT__entry( 159911a0771Ssubhashj@codeaurora.org __string(dev_name, dev_name) 160911a0771Ssubhashj@codeaurora.org __string(profile_info, profile_info) 161911a0771Ssubhashj@codeaurora.org __field(s64, time_us) 162911a0771Ssubhashj@codeaurora.org __field(int, err) 163911a0771Ssubhashj@codeaurora.org ), 164911a0771Ssubhashj@codeaurora.org 165911a0771Ssubhashj@codeaurora.org TP_fast_assign( 166911a0771Ssubhashj@codeaurora.org __assign_str(dev_name, dev_name); 167911a0771Ssubhashj@codeaurora.org __assign_str(profile_info, profile_info); 168911a0771Ssubhashj@codeaurora.org __entry->time_us = time_us; 169911a0771Ssubhashj@codeaurora.org __entry->err = err; 170911a0771Ssubhashj@codeaurora.org ), 171911a0771Ssubhashj@codeaurora.org 172911a0771Ssubhashj@codeaurora.org TP_printk("%s: %s: took %lld usecs, err %d", 173911a0771Ssubhashj@codeaurora.org __get_str(dev_name), __get_str(profile_info), 174911a0771Ssubhashj@codeaurora.org __entry->time_us, __entry->err) 175911a0771Ssubhashj@codeaurora.org ); 176911a0771Ssubhashj@codeaurora.org 177911a0771Ssubhashj@codeaurora.org DEFINE_EVENT(ufshcd_profiling_template, ufshcd_profile_hibern8, 178911a0771Ssubhashj@codeaurora.org TP_PROTO(const char *dev_name, const char *profile_info, s64 time_us, 179911a0771Ssubhashj@codeaurora.org int err), 180911a0771Ssubhashj@codeaurora.org TP_ARGS(dev_name, profile_info, time_us, err)); 181911a0771Ssubhashj@codeaurora.org 182911a0771Ssubhashj@codeaurora.org DEFINE_EVENT(ufshcd_profiling_template, ufshcd_profile_clk_gating, 183911a0771Ssubhashj@codeaurora.org TP_PROTO(const char *dev_name, const char *profile_info, s64 time_us, 184911a0771Ssubhashj@codeaurora.org int err), 185911a0771Ssubhashj@codeaurora.org TP_ARGS(dev_name, profile_info, time_us, err)); 186911a0771Ssubhashj@codeaurora.org 187911a0771Ssubhashj@codeaurora.org DEFINE_EVENT(ufshcd_profiling_template, ufshcd_profile_clk_scaling, 188911a0771Ssubhashj@codeaurora.org TP_PROTO(const char *dev_name, const char *profile_info, s64 time_us, 189911a0771Ssubhashj@codeaurora.org int err), 190911a0771Ssubhashj@codeaurora.org TP_ARGS(dev_name, profile_info, time_us, err)); 191911a0771Ssubhashj@codeaurora.org 1927ff5ab47Ssubhashj@codeaurora.org DECLARE_EVENT_CLASS(ufshcd_template, 1937ff5ab47Ssubhashj@codeaurora.org TP_PROTO(const char *dev_name, int err, s64 usecs, 1947ff5ab47Ssubhashj@codeaurora.org int dev_state, int link_state), 1957ff5ab47Ssubhashj@codeaurora.org 1967ff5ab47Ssubhashj@codeaurora.org TP_ARGS(dev_name, err, usecs, dev_state, link_state), 1977ff5ab47Ssubhashj@codeaurora.org 1987ff5ab47Ssubhashj@codeaurora.org TP_STRUCT__entry( 1997ff5ab47Ssubhashj@codeaurora.org __field(s64, usecs) 2007ff5ab47Ssubhashj@codeaurora.org __field(int, err) 2017ff5ab47Ssubhashj@codeaurora.org __string(dev_name, dev_name) 2027ff5ab47Ssubhashj@codeaurora.org __field(int, dev_state) 2037ff5ab47Ssubhashj@codeaurora.org __field(int, link_state) 2047ff5ab47Ssubhashj@codeaurora.org ), 2057ff5ab47Ssubhashj@codeaurora.org 2067ff5ab47Ssubhashj@codeaurora.org TP_fast_assign( 2077ff5ab47Ssubhashj@codeaurora.org __entry->usecs = usecs; 2087ff5ab47Ssubhashj@codeaurora.org __entry->err = err; 2097ff5ab47Ssubhashj@codeaurora.org __assign_str(dev_name, dev_name); 2107ff5ab47Ssubhashj@codeaurora.org __entry->dev_state = dev_state; 2117ff5ab47Ssubhashj@codeaurora.org __entry->link_state = link_state; 2127ff5ab47Ssubhashj@codeaurora.org ), 2137ff5ab47Ssubhashj@codeaurora.org 2147ff5ab47Ssubhashj@codeaurora.org TP_printk( 2157ff5ab47Ssubhashj@codeaurora.org "%s: took %lld usecs, dev_state: %s, link_state: %s, err %d", 2167ff5ab47Ssubhashj@codeaurora.org __get_str(dev_name), 2177ff5ab47Ssubhashj@codeaurora.org __entry->usecs, 2187ff5ab47Ssubhashj@codeaurora.org __print_symbolic(__entry->dev_state, UFS_PWR_MODES), 2197ff5ab47Ssubhashj@codeaurora.org __print_symbolic(__entry->link_state, UFS_LINK_STATES), 2207ff5ab47Ssubhashj@codeaurora.org __entry->err 2217ff5ab47Ssubhashj@codeaurora.org ) 2227ff5ab47Ssubhashj@codeaurora.org ); 2237ff5ab47Ssubhashj@codeaurora.org 2247ff5ab47Ssubhashj@codeaurora.org DEFINE_EVENT(ufshcd_template, ufshcd_system_suspend, 2257ff5ab47Ssubhashj@codeaurora.org TP_PROTO(const char *dev_name, int err, s64 usecs, 2267ff5ab47Ssubhashj@codeaurora.org int dev_state, int link_state), 2277ff5ab47Ssubhashj@codeaurora.org TP_ARGS(dev_name, err, usecs, dev_state, link_state)); 2287ff5ab47Ssubhashj@codeaurora.org 2297ff5ab47Ssubhashj@codeaurora.org DEFINE_EVENT(ufshcd_template, ufshcd_system_resume, 2307ff5ab47Ssubhashj@codeaurora.org TP_PROTO(const char *dev_name, int err, s64 usecs, 2317ff5ab47Ssubhashj@codeaurora.org int dev_state, int link_state), 2327ff5ab47Ssubhashj@codeaurora.org TP_ARGS(dev_name, err, usecs, dev_state, link_state)); 2337ff5ab47Ssubhashj@codeaurora.org 2347ff5ab47Ssubhashj@codeaurora.org DEFINE_EVENT(ufshcd_template, ufshcd_runtime_suspend, 2357ff5ab47Ssubhashj@codeaurora.org TP_PROTO(const char *dev_name, int err, s64 usecs, 2367ff5ab47Ssubhashj@codeaurora.org int dev_state, int link_state), 2377ff5ab47Ssubhashj@codeaurora.org TP_ARGS(dev_name, err, usecs, dev_state, link_state)); 2387ff5ab47Ssubhashj@codeaurora.org 2397ff5ab47Ssubhashj@codeaurora.org DEFINE_EVENT(ufshcd_template, ufshcd_runtime_resume, 2407ff5ab47Ssubhashj@codeaurora.org TP_PROTO(const char *dev_name, int err, s64 usecs, 2417ff5ab47Ssubhashj@codeaurora.org int dev_state, int link_state), 2427ff5ab47Ssubhashj@codeaurora.org TP_ARGS(dev_name, err, usecs, dev_state, link_state)); 2437ff5ab47Ssubhashj@codeaurora.org 2447ff5ab47Ssubhashj@codeaurora.org DEFINE_EVENT(ufshcd_template, ufshcd_init, 2457ff5ab47Ssubhashj@codeaurora.org TP_PROTO(const char *dev_name, int err, s64 usecs, 2467ff5ab47Ssubhashj@codeaurora.org int dev_state, int link_state), 2477ff5ab47Ssubhashj@codeaurora.org TP_ARGS(dev_name, err, usecs, dev_state, link_state)); 2481a07f2d9SLee Susman 249*b294ff3eSAsutosh Das DEFINE_EVENT(ufshcd_template, ufshcd_wl_suspend, 250*b294ff3eSAsutosh Das TP_PROTO(const char *dev_name, int err, s64 usecs, 251*b294ff3eSAsutosh Das int dev_state, int link_state), 252*b294ff3eSAsutosh Das TP_ARGS(dev_name, err, usecs, dev_state, link_state)); 253*b294ff3eSAsutosh Das 254*b294ff3eSAsutosh Das DEFINE_EVENT(ufshcd_template, ufshcd_wl_resume, 255*b294ff3eSAsutosh Das TP_PROTO(const char *dev_name, int err, s64 usecs, 256*b294ff3eSAsutosh Das int dev_state, int link_state), 257*b294ff3eSAsutosh Das TP_ARGS(dev_name, err, usecs, dev_state, link_state)); 258*b294ff3eSAsutosh Das 259*b294ff3eSAsutosh Das DEFINE_EVENT(ufshcd_template, ufshcd_wl_runtime_suspend, 260*b294ff3eSAsutosh Das TP_PROTO(const char *dev_name, int err, s64 usecs, 261*b294ff3eSAsutosh Das int dev_state, int link_state), 262*b294ff3eSAsutosh Das TP_ARGS(dev_name, err, usecs, dev_state, link_state)); 263*b294ff3eSAsutosh Das 264*b294ff3eSAsutosh Das DEFINE_EVENT(ufshcd_template, ufshcd_wl_runtime_resume, 265*b294ff3eSAsutosh Das TP_PROTO(const char *dev_name, int err, s64 usecs, 266*b294ff3eSAsutosh Das int dev_state, int link_state), 267*b294ff3eSAsutosh Das TP_ARGS(dev_name, err, usecs, dev_state, link_state)); 268*b294ff3eSAsutosh Das 2691a07f2d9SLee Susman TRACE_EVENT(ufshcd_command, 27028fa68fcSBean Huo TP_PROTO(const char *dev_name, enum ufs_trace_str_t str_t, 27128fa68fcSBean Huo unsigned int tag, u32 doorbell, u32 hwq_id, int transfer_len, 27228fa68fcSBean Huo u32 intr, u64 lba, u8 opcode, u8 group_id), 2731a07f2d9SLee Susman 27428fa68fcSBean Huo TP_ARGS(dev_name, str_t, tag, doorbell, hwq_id, transfer_len, 27569a314d6SJaegeuk Kim intr, lba, opcode, group_id), 2761a07f2d9SLee Susman 2771a07f2d9SLee Susman TP_STRUCT__entry( 2781a07f2d9SLee Susman __string(dev_name, dev_name) 27928fa68fcSBean Huo __field(enum ufs_trace_str_t, str_t) 2801a07f2d9SLee Susman __field(unsigned int, tag) 2811a07f2d9SLee Susman __field(u32, doorbell) 2821a07f2d9SLee Susman __field(u32, hwq_id) 2831a07f2d9SLee Susman __field(u32, intr) 2841a07f2d9SLee Susman __field(u64, lba) 2851a07f2d9SLee Susman __field(int, transfer_len) 28669a314d6SJaegeuk Kim __field(u8, opcode) 2871a07f2d9SLee Susman __field(u8, group_id) 2881a07f2d9SLee Susman ), 2891a07f2d9SLee Susman 2901a07f2d9SLee Susman TP_fast_assign( 29128fa68fcSBean Huo __assign_str(dev_name, dev_name); 2921a07f2d9SLee Susman __entry->str_t = str_t; 2931a07f2d9SLee Susman __entry->tag = tag; 2941a07f2d9SLee Susman __entry->doorbell = doorbell; 2951a07f2d9SLee Susman __entry->hwq_id = hwq_id; 2961a07f2d9SLee Susman __entry->intr = intr; 2971a07f2d9SLee Susman __entry->lba = lba; 29869a314d6SJaegeuk Kim __entry->transfer_len = transfer_len; 2991a07f2d9SLee Susman __entry->opcode = opcode; 3001a07f2d9SLee Susman __entry->group_id = group_id; 3011a07f2d9SLee Susman ), 30269a314d6SJaegeuk Kim 30328fa68fcSBean Huo TP_printk( 30428fa68fcSBean Huo "%s: %s: tag: %u, DB: 0x%x, size: %d, IS: %u, LBA: %llu, opcode: 0x%x (%s), group_id: 0x%x, hwq_id: %d", 30569a314d6SJaegeuk Kim show_ufs_cmd_trace_str(__entry->str_t), __get_str(dev_name), 30669a314d6SJaegeuk Kim __entry->tag, __entry->doorbell, __entry->transfer_len, __entry->intr, 3071a07f2d9SLee Susman __entry->lba, (u32)__entry->opcode, str_opcode(__entry->opcode), 3081a07f2d9SLee Susman (u32)__entry->group_id, __entry->hwq_id 3091a07f2d9SLee Susman ) 310aa5c6979SStanley Chu ); 31128fa68fcSBean Huo 312aa5c6979SStanley Chu TRACE_EVENT(ufshcd_uic_command, 313aa5c6979SStanley Chu TP_PROTO(const char *dev_name, enum ufs_trace_str_t str_t, u32 cmd, 31428fa68fcSBean Huo u32 arg1, u32 arg2, u32 arg3), 315aa5c6979SStanley Chu 316aa5c6979SStanley Chu TP_ARGS(dev_name, str_t, cmd, arg1, arg2, arg3), 317aa5c6979SStanley Chu 31828fa68fcSBean Huo TP_STRUCT__entry( 319aa5c6979SStanley Chu __string(dev_name, dev_name) 320aa5c6979SStanley Chu __field(enum ufs_trace_str_t, str_t) 321aa5c6979SStanley Chu __field(u32, cmd) 322aa5c6979SStanley Chu __field(u32, arg1) 323aa5c6979SStanley Chu __field(u32, arg2) 324aa5c6979SStanley Chu __field(u32, arg3) 325aa5c6979SStanley Chu ), 326aa5c6979SStanley Chu 32728fa68fcSBean Huo TP_fast_assign( 328aa5c6979SStanley Chu __assign_str(dev_name, dev_name); 329aa5c6979SStanley Chu __entry->str_t = str_t; 330aa5c6979SStanley Chu __entry->cmd = cmd; 331aa5c6979SStanley Chu __entry->arg1 = arg1; 332aa5c6979SStanley Chu __entry->arg2 = arg2; 333aa5c6979SStanley Chu __entry->arg3 = arg3; 334aa5c6979SStanley Chu ), 335aa5c6979SStanley Chu 33628fa68fcSBean Huo TP_printk( 33728fa68fcSBean Huo "%s: %s: cmd: 0x%x, arg1: 0x%x, arg2: 0x%x, arg3: 0x%x", 338aa5c6979SStanley Chu show_ufs_cmd_trace_str(__entry->str_t), __get_str(dev_name), 339aa5c6979SStanley Chu __entry->cmd, __entry->arg1, __entry->arg2, __entry->arg3 340aa5c6979SStanley Chu ) 3416667e6d9SOhad Sharabi ); 34228fa68fcSBean Huo 343867fdc2dSBean Huo TRACE_EVENT(ufshcd_upiu, 3446667e6d9SOhad Sharabi TP_PROTO(const char *dev_name, enum ufs_trace_str_t str_t, void *hdr, 345867fdc2dSBean Huo void *tsf, enum ufs_trace_tsf_t tsf_t), 3466667e6d9SOhad Sharabi 3476667e6d9SOhad Sharabi TP_ARGS(dev_name, str_t, hdr, tsf, tsf_t), 3486667e6d9SOhad Sharabi 34928fa68fcSBean Huo TP_STRUCT__entry( 3506667e6d9SOhad Sharabi __string(dev_name, dev_name) 3516667e6d9SOhad Sharabi __field(enum ufs_trace_str_t, str_t) 352867fdc2dSBean Huo __array(unsigned char, hdr, 12) 3536667e6d9SOhad Sharabi __array(unsigned char, tsf, 16) 3546667e6d9SOhad Sharabi __field(enum ufs_trace_tsf_t, tsf_t) 3556667e6d9SOhad Sharabi ), 3566667e6d9SOhad Sharabi 35728fa68fcSBean Huo TP_fast_assign( 3586667e6d9SOhad Sharabi __assign_str(dev_name, dev_name); 3596667e6d9SOhad Sharabi __entry->str_t = str_t; 360867fdc2dSBean Huo memcpy(__entry->hdr, hdr, sizeof(__entry->hdr)); 3616667e6d9SOhad Sharabi memcpy(__entry->tsf, tsf, sizeof(__entry->tsf)); 3626667e6d9SOhad Sharabi __entry->tsf_t = tsf_t; 3636667e6d9SOhad Sharabi ), 364867fdc2dSBean Huo 36528fa68fcSBean Huo TP_printk( 3666667e6d9SOhad Sharabi "%s: %s: HDR:%s, %s:%s", 367867fdc2dSBean Huo show_ufs_cmd_trace_str(__entry->str_t), __get_str(dev_name), 3686667e6d9SOhad Sharabi __print_hex(__entry->hdr, sizeof(__entry->hdr)), 3696667e6d9SOhad Sharabi show_ufs_cmd_trace_tsf(__entry->tsf_t), 3706667e6d9SOhad Sharabi __print_hex(__entry->tsf, sizeof(__entry->tsf)) 3716667e6d9SOhad Sharabi ) 372f7733625SAdrian Hunter ); 373f7733625SAdrian Hunter 374f7733625SAdrian Hunter TRACE_EVENT(ufshcd_exception_event, 375f7733625SAdrian Hunter 376f7733625SAdrian Hunter TP_PROTO(const char *dev_name, u16 status), 377f7733625SAdrian Hunter 378f7733625SAdrian Hunter TP_ARGS(dev_name, status), 379f7733625SAdrian Hunter 380f7733625SAdrian Hunter TP_STRUCT__entry( 381f7733625SAdrian Hunter __string(dev_name, dev_name) 382f7733625SAdrian Hunter __field(u16, status) 383f7733625SAdrian Hunter ), 384f7733625SAdrian Hunter 385f7733625SAdrian Hunter TP_fast_assign( 386f7733625SAdrian Hunter __assign_str(dev_name, dev_name); 387f7733625SAdrian Hunter __entry->status = status; 388f7733625SAdrian Hunter ), 389f7733625SAdrian Hunter 390f7733625SAdrian Hunter TP_printk("%s: status 0x%x", 391f7733625SAdrian Hunter __get_str(dev_name), __entry->status 392f7733625SAdrian Hunter ) 3937ff5ab47Ssubhashj@codeaurora.org ); 3947ff5ab47Ssubhashj@codeaurora.org 3957ff5ab47Ssubhashj@codeaurora.org #endif /* if !defined(_TRACE_UFS_H) || defined(TRACE_HEADER_MULTI_READ) */ 3967ff5ab47Ssubhashj@codeaurora.org 397 /* This part must be outside protection */ 398 #include <trace/define_trace.h> 399