STRUCT TI_SCI_MSG_RESP_QUERY_FW_CAPS(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

🌸 NAME 🌸

struct ti_sci_msg_resp_query_fw_caps β€” the response struct for query firmware caps, aka the little envelope the firmware sends back when you ask "hey bestie what can u even do?" It's from the Kernel API Manual, and yes we're gonna read it together, don't worry πŸ’–


✨ SYNOPSIS ✨

struct ti_sci_msg_resp_query_fw_caps {
    struct ti_sci_msg_hdr hdr;
  #define MSG_FLAG_CAPS_GENERIC           TI_SCI_MSG_FLAG(0);
  #define MSG_FLAG_CAPS_LPM_PARTIAL_IO    TI_SCI_MSG_FLAG(4);
  #define MSG_FLAG_CAPS_LPM_DM_MANAGED    TI_SCI_MSG_FLAG(5);
  #define MSG_FLAG_CAPS_LPM_ABORT         TI_SCI_MSG_FLAG(9);
  #define MSG_FLAG_CAPS_IO_ISOLATION      TI_SCI_MSG_FLAG(7);
  #define MSG_FLAG_CAPS_LPM_BOARDCFG_MANAGED      TI_SCI_MSG_FLAG(12);
  #define MSG_FLAG_CAPS_LPM_IRQ_CONTEXT_LOST      TI_SCI_MSG_FLAG(14);
  #define MSG_FLAG_CAPS_LPM_CLK_CONTEXT_LOST      TI_SCI_MSG_FLAG(15);
  #define MSG_MASK_CAPS_LPM               GENMASK_ULL(4, 1);
    u64 fw_caps;
};

Like, look at her 🫢 all those #defines living rent-free inside the struct body. That's just how this one is written, okay, we don't question it.


πŸŽ€ MEMBERS πŸŽ€

hdr

The generic header. Every message in this family has one, it's giving "wash your hands before dinner" energy. Mandatory. Iconic. Non-negotiable.

fw_caps

Okay so this is the main character πŸ‘‘ β€” a u64 where each bit in fw_caps indicating one FW/SOC capability. Think of it like a little bingo card of what the firmware can actually do. Here's the full card, no bits skipped:

  • MSG_FLAG_CAPS_GENERIC β€” Generic capability (LPM not supported). Translation: she's basic and she knows it, no low power modes here πŸ’€
  • MSG_FLAG_CAPS_LPM_PARTIAL_IO β€” Partial IO in LPM. Yes, but only partially, we stan a flexible queen.
  • MSG_FLAG_CAPS_LPM_DM_MANAGED β€” LPM can be managed by DM. She's handing the aux cord to DM.
  • MSG_FLAG_CAPS_LPM_ABORT β€” Abort entry to LPM. Sometimes you gotta back out of the low power plan, and that's valid 😭
  • MSG_FLAG_CAPS_IO_ISOLATION β€” IO Isolation support. Boundaries! We love boundaries! πŸ¦‹
  • MSG_FLAG_CAPS_LPM_BOARDCFG_MANAGED β€” LPM config done statically for the DM via boardcfg. Set in advance, no last-minute chaos, very planner-girl of her.
  • MSG_FLAG_CAPS_LPM_IRQ_CONTEXT_LOST β€” DM is not able to restore IRQ context. Not a slay, more of a heads-up: that context is gone gone πŸ™ˆ
  • MSG_FLAG_CAPS_LPM_CLK_CONTEXT_LOST β€” DM is not able to restore Clock context. Same deal, but with the clock. She's not putting that back either ⏰

πŸ’… DESCRIPTION πŸ’…

So this struct is the Response to a generic message with message type TI_SCI_MSG_QUERY_FW_CAPS providing currently available SOC/firmware capabilities. In other words: you send the query, this is the reply, and it tells you what the silicon + firmware combo can actually pull off right now.

And the little plot twist β€” SoC that don't support low power modes return only MSG_FLAG_CAPS_GENERIC capability. So if you read the flags and it's just MSG_FLAG_CAPS_GENERIC, don't panic, that's not a bug, that's just a chip that said "low power? never met her" πŸ€·β€β™€οΈ


🌈 SEE ALSO 🌈

Bestie the reading list is LONG, hydrate first πŸ“

  • Kernel file ./drivers/firmware/ti_sci.h
  • struct ti_sci_msg_hdr(9)
  • struct ti_sci_msg_resp_version(9)
  • struct ti_sci_msg_req_reboot(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_pair(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)

fr fr, that's the whole thing β€” every flag, every field, every reference, nothing dropped πŸ’œ

okay bye ily, this page lives in ./drivers/firmware and it's dated October 2026 β€” go touch some grass and then come back and read the kernel docs again πŸŒ±πŸ’–

πŸ“¦ where this page comes from