Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

usb: typec: tipd: Trace data status for CD321x correctly

Some bits inside the CD321x TPS_DATA_STATUS register have a different
function compared to the original tipd chip. Add these and introduce a
separate trace function to show them correctly.

Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Reviewed-by: Neal Gompa <neal@gompa.dev>
Signed-off-by: Sven Peter <sven@kernel.org>
Link: https://lore.kernel.org/r/20250914-apple-usb3-tipd-v1-4-4e99c8649024@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Sven Peter and committed by
Greg Kroah-Hartman
60e1ff66 ff175d85

+51 -1
+7 -1
drivers/usb/typec/tipd/core.c
··· 114 114 irq_handler_t irq_handler; 115 115 u64 irq_mask1; 116 116 int (*register_port)(struct tps6598x *tps, struct fwnode_handle *node); 117 + void (*trace_data_status)(u32 status); 117 118 void (*trace_power_status)(u16 status); 118 119 void (*trace_status)(u32 status); 119 120 int (*apply_patch)(struct tps6598x *tps); ··· 493 492 dev_err(tps->dev, "failed to read data status: %d\n", ret); 494 493 return false; 495 494 } 496 - trace_tps6598x_data_status(data_status); 495 + 496 + if (tps->data->trace_data_status) 497 + tps->data->trace_data_status(data_status); 497 498 498 499 return true; 499 500 } ··· 1522 1519 APPLE_CD_REG_INT_DATA_STATUS_UPDATE | 1523 1520 APPLE_CD_REG_INT_PLUG_EVENT, 1524 1521 .register_port = tps6598x_register_port, 1522 + .trace_data_status = trace_cd321x_data_status, 1525 1523 .trace_power_status = trace_tps6598x_power_status, 1526 1524 .trace_status = trace_tps6598x_status, 1527 1525 .init = cd321x_init, ··· 1536 1532 TPS_REG_INT_DATA_STATUS_UPDATE | 1537 1533 TPS_REG_INT_PLUG_EVENT, 1538 1534 .register_port = tps6598x_register_port, 1535 + .trace_data_status = trace_tps6598x_data_status, 1539 1536 .trace_power_status = trace_tps6598x_power_status, 1540 1537 .trace_status = trace_tps6598x_status, 1541 1538 .apply_patch = tps6598x_apply_patch, ··· 1550 1545 TPS_REG_INT_DATA_STATUS_UPDATE | 1551 1546 TPS_REG_INT_PLUG_EVENT, 1552 1547 .register_port = tps25750_register_port, 1548 + .trace_data_status = trace_tps6598x_data_status, 1553 1549 .trace_power_status = trace_tps25750_power_status, 1554 1550 .trace_status = trace_tps25750_status, 1555 1551 .apply_patch = tps25750_apply_patch,
+5
drivers/usb/typec/tipd/tps6598x.h
··· 197 197 #define TPS_DATA_STATUS_FORCE_LSX BIT(23) 198 198 #define TPS_DATA_STATUS_POWER_MISMATCH BIT(24) 199 199 200 + /* modified TPS_REG_DATA_STATUS bits for CD321x (and likely also TPS65987DDK) */ 201 + #define CD321X_DATA_STATUS_HPD_IRQ BIT(14) 202 + #define CD321X_DATA_STATUS_HPD_LEVEL BIT(15) 203 + #define CD321X_DATA_STATUS_USB4_CONNECTION BIT(23) 204 + 200 205 #define TPS_DATA_STATUS_DP_PIN_ASSIGNMENT_MASK GENMASK(11, 10) 201 206 #define TPS_DATA_STATUS_DP_PIN_ASSIGNMENT(x) \ 202 207 TPS_FIELD_GET(TPS_DATA_STATUS_DP_PIN_ASSIGNMENT_MASK, (x))
+39
drivers/usb/typec/tipd/trace.h
··· 217 217 { TPS_DATA_STATUS_FORCE_LSX, "FORCE_LSX" }, \ 218 218 { TPS_DATA_STATUS_POWER_MISMATCH, "POWER_MISMATCH" }) 219 219 220 + #define show_cd321x_data_status_flags(data_status) \ 221 + __print_flags(data_status & TPS_DATA_STATUS_FLAGS_MASK, "|", \ 222 + { TPS_DATA_STATUS_DATA_CONNECTION, "DATA_CONNECTION" }, \ 223 + { TPS_DATA_STATUS_UPSIDE_DOWN, "DATA_UPSIDE_DOWN" }, \ 224 + { TPS_DATA_STATUS_ACTIVE_CABLE, "ACTIVE_CABLE" }, \ 225 + { TPS_DATA_STATUS_USB2_CONNECTION, "USB2_CONNECTION" }, \ 226 + { TPS_DATA_STATUS_USB3_CONNECTION, "USB3_CONNECTION" }, \ 227 + { TPS_DATA_STATUS_USB3_GEN2, "USB3_GEN2" }, \ 228 + { TPS_DATA_STATUS_USB_DATA_ROLE, "USB_DATA_ROLE" }, \ 229 + { TPS_DATA_STATUS_DP_CONNECTION, "DP_CONNECTION" }, \ 230 + { TPS_DATA_STATUS_DP_SINK, "DP_SINK" }, \ 231 + { CD321X_DATA_STATUS_HPD_IRQ, "HPD_IRQ" }, \ 232 + { CD321X_DATA_STATUS_HPD_LEVEL, "HPD_LEVEL" }, \ 233 + { TPS_DATA_STATUS_TBT_CONNECTION, "TBT_CONNECTION" }, \ 234 + { TPS_DATA_STATUS_TBT_TYPE, "TBT_TYPE" }, \ 235 + { TPS_DATA_STATUS_OPTICAL_CABLE, "OPTICAL_CABLE" }, \ 236 + { TPS_DATA_STATUS_ACTIVE_LINK_TRAIN, "ACTIVE_LINK_TRAIN" }, \ 237 + { CD321X_DATA_STATUS_USB4_CONNECTION, "USB4" }, \ 238 + { TPS_DATA_STATUS_POWER_MISMATCH, "POWER_MISMATCH" }) 239 + 220 240 #define show_data_status_dp_pin_assignment(data_status) \ 221 241 __print_symbolic(TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT(data_status), \ 222 242 { TPS_DATA_STATUS_DP_SPEC_PIN_ASSIGNMENT_E, "E" }, \ ··· 406 386 __entry->data_status & TPS_DATA_STATUS_DP_CONNECTION ? ", DP pinout " : "", 407 387 maybe_show_data_status_dp_pin_assignment(__entry->data_status) 408 388 ) 389 + ); 390 + 391 + TRACE_EVENT(cd321x_data_status, 392 + TP_PROTO(u32 data_status), 393 + TP_ARGS(data_status), 394 + 395 + TP_STRUCT__entry( 396 + __field(u32, data_status) 397 + ), 398 + 399 + TP_fast_assign( 400 + __entry->data_status = data_status; 401 + ), 402 + 403 + TP_printk("%s%s%s", 404 + show_cd321x_data_status_flags(__entry->data_status), 405 + __entry->data_status & TPS_DATA_STATUS_DP_CONNECTION ? ", DP pinout " : "", 406 + maybe_show_data_status_dp_pin_assignment(__entry->data_status) 407 + ) 409 408 ); 410 409 411 410 #endif /* _TPS6598X_TRACE_H_ */