Files
i2c-imc-skylake/tools
Simone 5988db06ad tools: satisfy shellcheck and drop stale references to the dropped patch
The CI shellcheck step would have failed on three unused variables. Two were
leftovers in probe-cf8-transaction.sh from before the status decoding was
simplified; the third was a loop counter in probe-imc-documented.sh that
nothing reads.

While there: probe-cf8-transaction.sh still described itself in terms of "patch
1/2 of the series", which no longer exists precisely because of what this
script measured. Reworded to say what it establishes and why it is kept.
2026-07-27 00:08:53 +02:00
..

Hardware measurements still owed to the submission

Three scripts, meant to be run by hand on an X299 (or Cascade Lake-X) system with the PCU function 8086:2085. None of them is run by CI and none is run by make test.

Output of all three belongs in the cover letter or in a reply on the list, as raw numbers. Do not paraphrase them.

Script Answers Writes to hardware
watch-engine.sh Is firmware using the engine on this system? no
dump-pcu-config.sh Which PCU registers move on their own? Is there a TSOD polling control? no
probe-cf8-write.sh Is the CF8/CFC write really dropped, and does it raise an SMI? yes, requires --i-understand

1. watch-engine.sh — foreign activity (read-only)

Samples the six per-channel registers and reports every change that this system's Linux side did not cause. Run it with the driver unloaded, so that anything observed is firmware.

sudo ./tools/watch-engine.sh --seconds 3600

What the cover letter needs: a run of at least one hour, ideally across a suspend/resume cycle, with the observed change count. A non-zero count on a system means the driver must not be loaded there, and is itself a result worth reporting.

2. dump-pcu-config.sh — register survey (read-only)

Dumps the function's 4 KB config space twice and diffs them, then prints the neighbourhood of the offsets that matter.

sudo ./tools/dump-pcu-config.sh --settle 10

This is the search for the open item F2: the Broadwell-E iMC driver stops the PCU's TSOD polling for the duration of a transfer by writing 0 to TSODCNTL at offset 0xe0 of its PCU function, waiting 10 ms for in-flight transactions to drain, and restoring the value afterwards. No equivalent register has been identified on 8086:2085. A field that changes on its own with a fixed cadence is the first candidate.

3. probe-cf8-write.sh — the dropped write (WRITES TO HARDWARE)

This is the only script that writes. It changes the register/offset field of a command register while the GO bit is clear, which does not start an SMBus transaction, then reads it back and reports whether the write stuck. It also reads MSR_SMI_COUNT (0x34) on every CPU before and after.

sudo ./tools/probe-cf8-write.sh --i-understand

Two results matter:

  • the value does not read back → the claim "CF8/CFC writes to this function do not take effect" is confirmed on the tested board;
  • the SMI delta is 0 → the behaviour is not System Management Mode, and the driver's comments and the cover letter must not say it is.

Requirements: msr-tools (rdmsr), pciutils (setpci, lspci), and the msr module (modprobe msr).