0001
0002
0003
0004
0005
0006
0007
0008
0009 #undef TRACE_SYSTEM
0010 #define TRACE_SYSTEM tps6598x
0011
0012 #if !defined(_TPS6598X_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
0013 #define _TPS6598X_TRACE_H_
0014
0015 #include "tps6598x.h"
0016
0017 #include <linux/stringify.h>
0018 #include <linux/types.h>
0019 #include <linux/tracepoint.h>
0020
0021 #define show_irq_flags(flags) \
0022 __print_flags_u64(flags, "|", \
0023 { TPS_REG_INT_PD_SOFT_RESET, "PD_SOFT_RESET" }, \
0024 { TPS_REG_INT_HARD_RESET, "HARD_RESET" }, \
0025 { TPS_REG_INT_PLUG_EVENT, "PLUG_EVENT" }, \
0026 { TPS_REG_INT_PR_SWAP_COMPLETE, "PR_SWAP_COMPLETE" }, \
0027 { TPS_REG_INT_DR_SWAP_COMPLETE, "DR_SWAP_COMPLETE" }, \
0028 { TPS_REG_INT_RDO_RECEIVED_FROM_SINK, "RDO_RECEIVED_FROM_SINK" }, \
0029 { TPS_REG_INT_BIST, "BIST" }, \
0030 { TPS_REG_INT_OVERCURRENT, "OVERCURRENT" }, \
0031 { TPS_REG_INT_ATTENTION_RECEIVED, "ATTENTION_RECEIVED" }, \
0032 { TPS_REG_INT_VDM_RECEIVED, "VDM_RECEIVED" }, \
0033 { TPS_REG_INT_NEW_CONTRACT_AS_CONSUMER, "NEW_CONTRACT_AS_CONSUMER" }, \
0034 { TPS_REG_INT_NEW_CONTRACT_AS_PROVIDER, "NEW_CONTRACT_AS_PROVIDER" }, \
0035 { TPS_REG_INT_SOURCE_CAP_MESSAGE_READY, "SOURCE_CAP_MESSAGE_READY" }, \
0036 { TPS_REG_INT_SINK_CAP_MESSAGE_READY, "SINK_CAP_MESSAGE_READY" }, \
0037 { TPS_REG_INT_PR_SWAP_REQUESTED, "PR_SWAP_REQUESTED" }, \
0038 { TPS_REG_INT_GOTO_MIN_RECEIVED, "GOTO_MIN_RECEIVED" }, \
0039 { TPS_REG_INT_USB_HOST_PRESENT, "USB_HOST_PRESENT" }, \
0040 { TPS_REG_INT_USB_HOST_PRESENT_NO_LONGER, "USB_HOST_PRESENT_NO_LONGER" }, \
0041 { TPS_REG_INT_HIGH_VOLTAGE_WARNING, "HIGH_VOLTAGE_WARNING" }, \
0042 { TPS_REG_INT_PP_SWITCH_CHANGED, "PP_SWITCH_CHANGED" }, \
0043 { TPS_REG_INT_POWER_STATUS_UPDATE, "POWER_STATUS_UPDATE" }, \
0044 { TPS_REG_INT_DATA_STATUS_UPDATE, "DATA_STATUS_UPDATE" }, \
0045 { TPS_REG_INT_STATUS_UPDATE, "STATUS_UPDATE" }, \
0046 { TPS_REG_INT_PD_STATUS_UPDATE, "PD_STATUS_UPDATE" }, \
0047 { TPS_REG_INT_ADC_LOW_THRESHOLD, "ADC_LOW_THRESHOLD" }, \
0048 { TPS_REG_INT_ADC_HIGH_THRESHOLD, "ADC_HIGH_THRESHOLD" }, \
0049 { TPS_REG_INT_CMD1_COMPLETE, "CMD1_COMPLETE" }, \
0050 { TPS_REG_INT_CMD2_COMPLETE, "CMD2_COMPLETE" }, \
0051 { TPS_REG_INT_ERROR_DEVICE_INCOMPATIBLE, "ERROR_DEVICE_INCOMPATIBLE" }, \
0052 { TPS_REG_INT_ERROR_CANNOT_PROVIDE_PWR, "ERROR_CANNOT_PROVIDE_PWR" }, \
0053 { TPS_REG_INT_ERROR_CAN_PROVIDE_PWR_LATER, "ERROR_CAN_PROVIDE_PWR_LATER" }, \
0054 { TPS_REG_INT_ERROR_POWER_EVENT_OCCURRED, "ERROR_POWER_EVENT_OCCURRED" }, \
0055 { TPS_REG_INT_ERROR_MISSING_GET_CAP_MESSAGE, "ERROR_MISSING_GET_CAP_MESSAGE" }, \
0056 { TPS_REG_INT_ERROR_PROTOCOL_ERROR, "ERROR_PROTOCOL_ERROR" }, \
0057 { TPS_REG_INT_ERROR_MESSAGE_DATA, "ERROR_MESSAGE_DATA" }, \
0058 { TPS_REG_INT_ERROR_DISCHARGE_FAILED, "ERROR_DISCHARGE_FAILED" }, \
0059 { TPS_REG_INT_SRC_TRANSITION, "SRC_TRANSITION" }, \
0060 { TPS_REG_INT_ERROR_UNABLE_TO_SOURCE, "ERROR_UNABLE_TO_SOURCE" }, \
0061 { TPS_REG_INT_VDM_ENTERED_MODE, "VDM_ENTERED_MODE" }, \
0062 { TPS_REG_INT_VDM_MSG_SENT, "VDM_MSG_SENT" }, \
0063 { TPS_REG_INT_DISCOVER_MODES_COMPLETE, "DISCOVER_MODES_COMPLETE" }, \
0064 { TPS_REG_INT_EXIT_MODES_COMPLETE, "EXIT_MODES_COMPLETE" }, \
0065 { TPS_REG_INT_USER_VID_ALT_MODE_ENTERED, "USER_VID_ALT_MODE_ENTERED" }, \
0066 { TPS_REG_INT_USER_VID_ALT_MODE_EXIT, "USER_VID_ALT_MODE_EXIT" }, \
0067 { TPS_REG_INT_USER_VID_ALT_MODE_ATTN_VDM, "USER_VID_ALT_MODE_ATTN_VDM" }, \
0068 { TPS_REG_INT_USER_VID_ALT_MODE_OTHER_VDM, "USER_VID_ALT_MODE_OTHER_VDM" })
0069
0070 #define show_cd321x_irq_flags(flags) \
0071 __print_flags_u64(flags, "|", \
0072 { APPLE_CD_REG_INT_PLUG_EVENT, "PLUG_EVENT" }, \
0073 { APPLE_CD_REG_INT_POWER_STATUS_UPDATE, "POWER_STATUS_UPDATE" }, \
0074 { APPLE_CD_REG_INT_DATA_STATUS_UPDATE, "DATA_STATUS_UPDATE" }, \
0075 { APPLE_CD_REG_INT_STATUS_UPDATE, "STATUS_UPDATE" })
0076
0077 #define TPS6598X_STATUS_FLAGS_MASK (GENMASK(31, 0) ^ (TPS_STATUS_CONN_STATE_MASK | \
0078 TPS_STATUS_PP_5V0_SWITCH_MASK | \
0079 TPS_STATUS_PP_HV_SWITCH_MASK | \
0080 TPS_STATUS_PP_EXT_SWITCH_MASK | \
0081 TPS_STATUS_PP_CABLE_SWITCH_MASK | \
0082 TPS_STATUS_POWER_SOURCE_MASK | \
0083 TPS_STATUS_VBUS_STATUS_MASK | \
0084 TPS_STATUS_USB_HOST_PRESENT_MASK | \
0085 TPS_STATUS_LEGACY_MASK))
0086
0087 #define show_status_conn_state(status) \
0088 __print_symbolic(TPS_STATUS_CONN_STATE((status)), \
0089 { TPS_STATUS_CONN_STATE_CONN_WITH_R_A, "conn-Ra" }, \
0090 { TPS_STATUS_CONN_STATE_CONN_NO_R_A, "conn-no-Ra" }, \
0091 { TPS_STATUS_CONN_STATE_NO_CONN_R_A, "no-conn-Ra" }, \
0092 { TPS_STATUS_CONN_STATE_DEBUG_CONN, "debug" }, \
0093 { TPS_STATUS_CONN_STATE_AUDIO_CONN, "audio" }, \
0094 { TPS_STATUS_CONN_STATE_DISABLED, "disabled" }, \
0095 { TPS_STATUS_CONN_STATE_NO_CONN, "no-conn" })
0096
0097 #define show_status_pp_switch_state(status) \
0098 __print_symbolic(status, \
0099 { TPS_STATUS_PP_SWITCH_STATE_IN, "in" }, \
0100 { TPS_STATUS_PP_SWITCH_STATE_OUT, "out" }, \
0101 { TPS_STATUS_PP_SWITCH_STATE_FAULT, "fault" }, \
0102 { TPS_STATUS_PP_SWITCH_STATE_DISABLED, "off" })
0103
0104 #define show_status_power_sources(status) \
0105 __print_symbolic(TPS_STATUS_POWER_SOURCE(status), \
0106 { TPS_STATUS_POWER_SOURCE_VBUS, "vbus" }, \
0107 { TPS_STATUS_POWER_SOURCE_VIN_3P3, "vin-3p3" }, \
0108 { TPS_STATUS_POWER_SOURCE_DEAD_BAT, "dead-battery" }, \
0109 { TPS_STATUS_POWER_SOURCE_UNKNOWN, "unknown" })
0110
0111 #define show_status_vbus_status(status) \
0112 __print_symbolic(TPS_STATUS_VBUS_STATUS(status), \
0113 { TPS_STATUS_VBUS_STATUS_VSAFE0V, "vSafe0V" }, \
0114 { TPS_STATUS_VBUS_STATUS_VSAFE5V, "vSafe5V" }, \
0115 { TPS_STATUS_VBUS_STATUS_PD, "pd" }, \
0116 { TPS_STATUS_VBUS_STATUS_FAULT, "fault" })
0117
0118 #define show_status_usb_host_present(status) \
0119 __print_symbolic(TPS_STATUS_USB_HOST_PRESENT(status), \
0120 { TPS_STATUS_USB_HOST_PRESENT_PD_USB, "pd-usb" }, \
0121 { TPS_STATUS_USB_HOST_PRESENT_NO_PD, "no-pd" }, \
0122 { TPS_STATUS_USB_HOST_PRESENT_PD_NO_USB, "pd-no-usb" }, \
0123 { TPS_STATUS_USB_HOST_PRESENT_NO, "no" })
0124
0125 #define show_status_legacy(status) \
0126 __print_symbolic(TPS_STATUS_LEGACY(status), \
0127 { TPS_STATUS_LEGACY_SOURCE, "source" }, \
0128 { TPS_STATUS_LEGACY_SINK, "sink" }, \
0129 { TPS_STATUS_LEGACY_NO, "no" })
0130
0131 #define show_status_flags(flags) \
0132 __print_flags((flags & TPS6598X_STATUS_FLAGS_MASK), "|", \
0133 { TPS_STATUS_PLUG_PRESENT, "PLUG_PRESENT" }, \
0134 { TPS_STATUS_PLUG_UPSIDE_DOWN, "UPSIDE_DOWN" }, \
0135 { TPS_STATUS_PORTROLE, "PORTROLE" }, \
0136 { TPS_STATUS_DATAROLE, "DATAROLE" }, \
0137 { TPS_STATUS_VCONN, "VCONN" }, \
0138 { TPS_STATUS_OVERCURRENT, "OVERCURRENT" }, \
0139 { TPS_STATUS_GOTO_MIN_ACTIVE, "GOTO_MIN_ACTIVE" }, \
0140 { TPS_STATUS_BIST, "BIST" }, \
0141 { TPS_STATUS_HIGH_VOLAGE_WARNING, "HIGH_VOLAGE_WARNING" }, \
0142 { TPS_STATUS_HIGH_LOW_VOLTAGE_WARNING, "HIGH_LOW_VOLTAGE_WARNING" })
0143
0144 #define show_power_status_source_sink(power_status) \
0145 __print_symbolic(TPS_POWER_STATUS_SOURCESINK(power_status), \
0146 { 1, "sink" }, \
0147 { 0, "source" })
0148
0149 #define show_power_status_typec_status(power_status) \
0150 __print_symbolic(TPS_POWER_STATUS_PWROPMODE(power_status), \
0151 { TPS_POWER_STATUS_TYPEC_CURRENT_PD, "pd" }, \
0152 { TPS_POWER_STATUS_TYPEC_CURRENT_3A0, "3.0A" }, \
0153 { TPS_POWER_STATUS_TYPEC_CURRENT_1A5, "1.5A" }, \
0154 { TPS_POWER_STATUS_TYPEC_CURRENT_USB, "usb" })
0155
0156 #define show_power_status_bc12_status(power_status) \
0157 __print_symbolic(TPS_POWER_STATUS_BC12_STATUS(power_status), \
0158 { TPS_POWER_STATUS_BC12_STATUS_DCP, "dcp" }, \
0159 { TPS_POWER_STATUS_BC12_STATUS_CDP, "cdp" }, \
0160 { TPS_POWER_STATUS_BC12_STATUS_SDP, "sdp" })
0161
0162 #define TPS_DATA_STATUS_FLAGS_MASK (GENMASK(31, 0) ^ (TPS_DATA_STATUS_DP_PIN_ASSIGNMENT_MASK | \
0163 TPS_DATA_STATUS_TBT_CABLE_SPEED_MASK | \
0164 TPS_DATA_STATUS_TBT_CABLE_GEN_MASK))
0165
0166 #define show_data_status_flags(data_status) \
0167 __print_flags(data_status & TPS_DATA_STATUS_FLAGS_MASK, "|", \
0168 { TPS_DATA_STATUS_DATA_CONNECTION, "DATA_CONNECTION" }, \
0169 { TPS_DATA_STATUS_UPSIDE_DOWN, "DATA_UPSIDE_DOWN" }, \
0170 { TPS_DATA_STATUS_ACTIVE_CABLE, "ACTIVE_CABLE" }, \
0171 { TPS_DATA_STATUS_USB2_CONNECTION, "USB2_CONNECTION" }, \
0172 { TPS_DATA_STATUS_USB3_CONNECTION, "USB3_CONNECTION" }, \
0173 { TPS_DATA_STATUS_USB3_GEN2, "USB3_GEN2" }, \
0174 { TPS_DATA_STATUS_USB_DATA_ROLE, "USB_DATA_ROLE" }, \
0175 { TPS_DATA_STATUS_DP_CONNECTION, "DP_CONNECTION" }, \
0176 { TPS_DATA_STATUS_DP_SINK, "DP_SINK" }, \
0177 { TPS_DATA_STATUS_TBT_CONNECTION, "TBT_CONNECTION" }, \
0178 { TPS_DATA_STATUS_TBT_TYPE, "TBT_TYPE" }, \
0179 { TPS_DATA_STATUS_OPTICAL_CABLE, "OPTICAL_CABLE" }, \
0180 { TPS_DATA_STATUS_ACTIVE_LINK_TRAIN, "ACTIVE_LINK_TRAIN" }, \
0181 { TPS_DATA_STATUS_FORCE_LSX, "FORCE_LSX" }, \
0182 { TPS_DATA_STATUS_POWER_MISMATCH, "POWER_MISMATCH" })
0183
0184 #define show_data_status_dp_pin_assignment(data_status) \
0185 __print_symbolic(TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT(data_status), \
0186 { TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT_E, "E" }, \
0187 { TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT_F, "F" }, \
0188 { TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT_C, "C" }, \
0189 { TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT_D, "D" }, \
0190 { TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT_A, "A" }, \
0191 { TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT_B, "B" })
0192
0193 #define maybe_show_data_status_dp_pin_assignment(data_status) \
0194 (data_status & TPS_DATA_STATUS_DP_CONNECTION ? \
0195 show_data_status_dp_pin_assignment(data_status) : "")
0196
0197 TRACE_EVENT(tps6598x_irq,
0198 TP_PROTO(u64 event1,
0199 u64 event2),
0200 TP_ARGS(event1, event2),
0201
0202 TP_STRUCT__entry(
0203 __field(u64, event1)
0204 __field(u64, event2)
0205 ),
0206
0207 TP_fast_assign(
0208 __entry->event1 = event1;
0209 __entry->event2 = event2;
0210 ),
0211
0212 TP_printk("event1=%s, event2=%s",
0213 show_irq_flags(__entry->event1),
0214 show_irq_flags(__entry->event2))
0215 );
0216
0217 TRACE_EVENT(cd321x_irq,
0218 TP_PROTO(u64 event),
0219 TP_ARGS(event),
0220
0221 TP_STRUCT__entry(
0222 __field(u64, event)
0223 ),
0224
0225 TP_fast_assign(
0226 __entry->event = event;
0227 ),
0228
0229 TP_printk("event=%s",
0230 show_cd321x_irq_flags(__entry->event))
0231 );
0232
0233 TRACE_EVENT(tps6598x_status,
0234 TP_PROTO(u32 status),
0235 TP_ARGS(status),
0236
0237 TP_STRUCT__entry(
0238 __field(u32, status)
0239 ),
0240
0241 TP_fast_assign(
0242 __entry->status = status;
0243 ),
0244
0245 TP_printk("conn: %s, pp_5v0: %s, pp_hv: %s, pp_ext: %s, pp_cable: %s, "
0246 "pwr-src: %s, vbus: %s, usb-host: %s, legacy: %s, flags: %s",
0247 show_status_conn_state(__entry->status),
0248 show_status_pp_switch_state(TPS_STATUS_PP_5V0_SWITCH(__entry->status)),
0249 show_status_pp_switch_state(TPS_STATUS_PP_HV_SWITCH(__entry->status)),
0250 show_status_pp_switch_state(TPS_STATUS_PP_EXT_SWITCH(__entry->status)),
0251 show_status_pp_switch_state(TPS_STATUS_PP_CABLE_SWITCH(__entry->status)),
0252 show_status_power_sources(__entry->status),
0253 show_status_vbus_status(__entry->status),
0254 show_status_usb_host_present(__entry->status),
0255 show_status_legacy(__entry->status),
0256 show_status_flags(__entry->status)
0257 )
0258 );
0259
0260 TRACE_EVENT(tps6598x_power_status,
0261 TP_PROTO(u16 power_status),
0262 TP_ARGS(power_status),
0263
0264 TP_STRUCT__entry(
0265 __field(u16, power_status)
0266 ),
0267
0268 TP_fast_assign(
0269 __entry->power_status = power_status;
0270 ),
0271
0272 TP_printk("conn: %d, pwr-role: %s, typec: %s, bc: %s",
0273 !!TPS_POWER_STATUS_CONNECTION(__entry->power_status),
0274 show_power_status_source_sink(__entry->power_status),
0275 show_power_status_typec_status(__entry->power_status),
0276 show_power_status_bc12_status(__entry->power_status)
0277 )
0278 );
0279
0280 TRACE_EVENT(tps6598x_data_status,
0281 TP_PROTO(u32 data_status),
0282 TP_ARGS(data_status),
0283
0284 TP_STRUCT__entry(
0285 __field(u32, data_status)
0286 ),
0287
0288 TP_fast_assign(
0289 __entry->data_status = data_status;
0290 ),
0291
0292 TP_printk("%s%s%s",
0293 show_data_status_flags(__entry->data_status),
0294 __entry->data_status & TPS_DATA_STATUS_DP_CONNECTION ? ", DP pinout " : "",
0295 maybe_show_data_status_dp_pin_assignment(__entry->data_status)
0296 )
0297 );
0298
0299 #endif
0300
0301
0302 #undef TRACE_INCLUDE_FILE
0303 #define TRACE_INCLUDE_FILE trace
0304 #undef TRACE_INCLUDE_PATH
0305 #define TRACE_INCLUDE_PATH .
0306 #include <trace/define_trace.h>