STRUCT TI_SCI_MSG_PSIL_PAIR(9)
π 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 index0x8000. the request is NACK'd if the destination thread is not greater than or equal to0x8000. so if you send a dst_thread smaller than0x8000, 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_IDregister programmed with the destination thread β if the pairing is successful β¨ - UDMAP receive channels mapped to destination threads will have their
RCHAN_THRD_IDregister 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
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms