STRUCT TPMI_PER_POWER_DOMAIN_INFO(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

okay so welcome to the Kernel API Manual, bestie β€” we're doing a full deep-dive on struct tpmi_per_power_domain_info and honestly it's a lot but we're gonna slay it together πŸ’…βœ¨

✨ NAME ✨

struct tpmi_per_power_domain_info β€” the lil container that stores per power_domain SST info πŸŽ€


πŸ¦‹ SYNOPSIS πŸ¦‹

okay so here's the whole struct laid out, character for character, no cap:

struct tpmi_per_power_domain_info {
    int package_id;
    int power_domain_id;
    int max_level;
    int ratio_unit;
    int avx_levels;
    int pp_block_size;
    struct sst_header sst_header;
    struct cp_header cp_header;
    struct pp_header pp_header;
    struct perf_level *perf_levels;
    struct feature_offset feature_offsets;
    struct pp_control_offset control_offset;
    struct pp_status_offset status_offset;
    void __iomem *sst_base;
    struct auxiliary_device *auxdev;
    u64 saved_sst_cp_control;
    u64 saved_clos_configs[4];
    u64 saved_clos_assocs[4];
    u64 saved_pp_control;
    bool write_blocked;
 };

🌸 Members 🌸

okay here's the member-by-member breakdown, bestie, every single one 🫢

  • package_id β€” the package id for this here power_domain πŸ‘‘
  • power_domain_id β€” the power domain id. Real talk: each and every entry that comes off the SST-TPMI instance is a power_domain, iykyk.
  • max_level β€” the max possible PP level this power_domain can hit πŸ”₯
  • ratio_unit β€” the ratio unit, which is how you convert stuff over to MHz 🌈
  • avx_levels β€” the number of AVX levels, periodt
  • pp_block_size β€” the block size that comes from the PP header πŸŽ€
  • sst_header β€” keeps the SST header for this power_domain stored away safely
  • cp_header β€” keeps the SST-CP header for this power_domain
  • pp_header β€” keeps the SST-PP header for this power_domain
  • perf_levels β€” pointer to each perf level, so you can map a level over to its mmio offset ⭐
  • feature_offsets β€” stores the feature offsets for each PP-level
  • control_offset β€” stores the control offset for each PP-level
  • status_offset β€” stores the status offset for each PP-level
  • sst_base β€” the mapped SST base IO memory πŸ’œ
  • auxdev β€” the auxiliary device instance that enumerated this instance
  • saved_sst_cp_control β€” saves the SST-CP control configuration so it can be stored + restored across suspend/resume 😴
  • saved_clos_configs β€” saves the SST-CP CLOS configuration so it can be stored + restored across suspend/resume
  • saved_clos_assocs β€” saves the SST-CP CLOS association so it can be stored + restored across suspend/resume
  • saved_pp_control β€” saves the SST-PP control information so it can be stored + restored across suspend/resume
  • write_blocked β€” write operation is blocked, so bestie literally cannot change the SST state, don't even try πŸ’€

πŸ’– Description πŸ’–

so this structure is the one that stores the complete SST information for a power_domain. that info is what gets used for read/write requests for any SST IOCTL β€” it's giving main character energy for the whole flow ✨

and listen: each physical CPU package can have multiple power_domains. every power domain describes its own SST information, and it has its own controls. no sharing, no borrowing, everyone's got their own vibe check 🧚


🌟 SEE ALSO 🌟

Kernel file ./drivers/platform/x86/intel/speed_select_if/isst_tpmi_core.c plus these absolute icons:

  • struct sst_header(9)
  • struct cp_header(9)
  • struct pp_header(9)
  • struct feature_offset(9)
  • struct levels_offset(9)
  • struct pp_control_offset(9)
  • struct pp_status_offset(9)
  • struct perf_level(9)
  • struct tpmi_sst_struct(9)
  • struct tpmi_sst_common_struct(9)
  • map_cdies(9)
  • map_partition_power_domain_id(9)

ngl bestie, if you got all the way down here you ate that. go read the SEE ALSOs and hydrate πŸ’§

okay bye ily β€” this came from ./drivers/platform/x86/intel/s... and it's dated October 2026, and it's the struct tpmi..._domain_info(9) page signing off πŸŽ€πŸ’…πŸ¦‹

πŸ“¦ where this page comes from