Skip to content

Phoenix PM table 0x4C0007: per-core CPU temperature offset — floats [529..536] #410

Description

@WRCX

While reverse-engineering the Phoenix APU PM table, I mapped the per-core CPU temperatures on PM-table version 0x4C0007 (Ryzen 7 7840HS, "Phoenix", Zen 4 mobile). They don't seem to be mapped here (there's no 0x4C0007 pm_table_* function) nor in RyzenAdj, so sharing in case it's useful.

Finding

Per-core CPU temperatures = 8 consecutive float32 at indices [529..536] — i.e. physical core N → float [529 + N].

Verified three independent ways on a 7840HS (8 physical cores)

  1. Load correlation. The 8 values are °C-plausible, rise together under sustained all-core load (~45 → ~67 °C) and the hottest converges with the package Tctl (SMN 0x00059800).
  2. Affinity causality. Pinning a stress load to a single physical core moves only its float:
    • physical core 0 → only [529] rose (+9.4 °C; others within ±2 °C)
    • physical core 4 → only [533] rose (+7.2 °C; others within ±2.6 °C)
  3. Cross-check vs HWiNFO. In stable conditions, HWiNFO's Core0..Core7 match [529..536] to within 0.4–0.5 °C, core-for-core, in the same order.

For context, the rest of 0x4C0007 (classic APU header, matches RyzenAdj)

field float index notes
fast PPT [2] limit / [3] value W (value == socket power)
VDD TDC [8] limit / [9] value A
THM limit [16] 100 °C
per-core temp [529..536] °C, this issue

Only verified on 0x4C0007 (Phoenix); the sibling versions 0x4C0006/0x4C0008/0x4C0009 (Hawk Point etc.) may place it differently, so I wouldn't assume it there without a dump.

Method: read the full table via read_pm_table, sample under variable / single-core-affinity load, diff idle vs hot. Happy to share raw dumps if helpful.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions