STRUCT TI_SCI_MSG_PSIL_PAIR(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– struct ti_sci_msg_psil_pair(9) πŸ’–

okay so bestie, this is the struct ti_sci_msg_psil_pair page from the Kernel API Manual β€” yes, the kernel API manual, we're literally reading kernel docs rn and honestly? iconic. buckle up πŸŽ€


✨ NAME ✨

struct ti_sci_msg_psil_pair β€” pairs a PSI-L source thread to a destination thread πŸ’…

like. it's a matchmaker. for threads. no cap.


🌸 SYNOPSIS 🌸

struct ti_sci_msg_psil_pair {
    struct ti_sci_msg_hdr hdr;
    u32 nav_id;
    u32 src_thread;
    u32 dst_thread;
 };

that's the whole struct, she's small but she's doing a lot 🫢


πŸ¦‹ Members πŸ¦‹

  • hdr β€” the generic header. yep. every one of these structs starts with the generic header, it's giving "hello my name is" ✨
  • nav_id β€” the SoC Navigator Subsystem device ID whose PSI-L config proxy is used to pair the source and destination threads. so like, this is the subsystem that actually does the pairing. the wingman's wingman 😭
  • src_thread β€” the PSI-L source thread ID within the PSI-L System thread map 🌈
  • dst_thread β€” the PSI-L destination thread ID within the PSI-L System thread map. and here's the tea: PSI-L destination threads start at index 0x8000. the request is NACK'd if the destination thread is not greater than or equal to 0x8000. so if you send a dst_thread smaller than 0x8000, it's a no from the firmware, bestie πŸ’€

πŸ‘‘ Description πŸ‘‘

so what actually happens when this works? okay so:

  • UDMAP transmit channels mapped to source threads will have their TCHAN_THRD_ID register programmed with the destination thread β€” if the pairing is successful ✨
  • UDMAP receive channels mapped to destination threads will have their RCHAN_THRD_ID register programmed with the source thread β€” again, if the pairing is successful πŸ’œ

it's mutual. both sides get each other's thread ID written into their regs. that's the whole vibe check and they both passed 🫢

ngl the "if the pairing is successful" is doing a lot of heavy lifting in those two sentences. if it's not successful, nothing gets programmed. that's it. that's the caveat πŸ™ˆ

Request type is TI_SCI_MSG_RM_PSIL_PAIR, response is a generic ACK or NACK message. so you send the request, you get back a yes or a no, and that's your answer periodt πŸ”₯


πŸ’« SEE ALSO πŸ’«

Kernel file ./drivers/firmware/ti_sci.h β€” and honestly the whole friend group, because this struct does not hang out alone:

  • struct ti_sci_msg_hdr(9)
  • struct ti_sci_msg_resp_version(9)
  • struct ti_sci_msg_req_reboot(9)
  • struct ti_sci_msg_resp_query_fw_caps(9)
  • struct ti_sci_msg_req_set_device_state(9)
  • struct ti_sci_msg_req_get_device_state(9)
  • struct ti_sci_msg_resp_get_device_state(9)
  • struct ti_sci_msg_req_set_device_resets(9)
  • struct ti_sci_msg_req_set_clock_state(9)
  • struct ti_sci_msg_req_get_clock_state(9)
  • struct ti_sci_msg_resp_get_clock_state(9)
  • struct ti_sci_msg_req_set_clock_parent(9)
  • struct ti_sci_msg_req_get_clock_parent(9)
  • struct ti_sci_msg_resp_get_clock_parent(9)
  • struct ti_sci_msg_req_get_clock_num_parents(9)
  • struct ti_sci_msg_resp_get_clock_num_parents(9)
  • struct ti_sci_msg_req_query_clock_freq(9)
  • struct ti_sci_msg_resp_query_clock_freq(9)
  • struct ti_sci_msg_req_set_clock_freq(9)
  • struct ti_sci_msg_req_get_clock_freq(9)
  • struct ti_sci_msg_resp_get_clock_freq(9)
  • struct ti_sci_msg_req_prepare_sleep(9)
  • struct ti_sci_msg_req_set_io_isolation(9)
  • struct ti_sci_msg_resp_lpm_wake_reason(9)
  • struct ti_sci_msg_req_lpm_set_device_constraint(9)
  • struct ti_sci_msg_req_lpm_set_latency_constraint(9)
  • struct ti_sci_msg_req_get_resource_range(9)
  • struct ti_sci_msg_resp_get_resource_range(9)
  • struct ti_sci_msg_req_manage_irq(9)
  • struct ti_sci_msg_rm_ring_cfg_req(9)
  • struct ti_sci_msg_psil_unpair(9)
  • struct ti_sci_msg_udmap_rx_flow_cfg(9)
  • struct rm_ti_sci_msg_udmap_rx_flow_opt_cfg(9)
  • struct ti_sci_msg_rm_udmap_tx_ch_cfg_req(9)
  • struct ti_sci_msg_rm_udmap_rx_ch_cfg_req(9)
  • struct ti_sci_msg_rm_udmap_flow_cfg_req(9)
  • struct ti_sci_msg_req_proc_request(9)
  • struct ti_sci_msg_req_proc_release(9)
  • struct ti_sci_msg_req_proc_handover(9)
  • struct ti_sci_msg_req_set_config(9)
  • struct ti_sci_msg_req_set_ctrl(9)
  • struct ti_sci_msg_req_get_status(9)
  • struct ti_sci_msg_resp_get_status(9)

and yes, ti_sci_msg_psil_unpair(9) is right there in the list. the breakup function. she exists. we love a full lifecycle 🌸


✨ ok that's the page!! ✨ this one lives in ./drivers/firmware, and the docs are dated October 2026 β€” so like, future vibes fr fr. go pair some threads bestie, and remember: dst_thread β‰₯ 0x8000 or it's a NACK πŸ’–πŸŽ€πŸ¦‹

πŸ“¦ where this page comes from