tools: measure the ENE read-back question instead of inferring it
P2 asked whether the ENE at 0x27 has readable state. The answer had been reached twice by elimination, and the last link in that chain was a comment in a third party's patched OpenRGB detector, not a measurement of ours. probe-ene-receive-byte.sh runs the experiment the driver made possible on 2026-07-27, when PNTR_SEL (BIT(18)) gave us a bare Receive Byte: a read with no command byte on the wire cannot return a transform of a register that was never sent. It does, however, return the last command byte the chip received — 12/12 on both channels — so the value is still ours, not the device's. A Receive Byte taken from 0x31 after addressing 0x27 answers 0xff instead of the echo, which places the latch in the device and not in the iMC engine; empty addresses NACK, so the transaction is real. Everything here is read-only: Receive Byte and Read Byte Data at 0x27, SPD reads through ee1004 sysfs, and the four SPD serials compared before and after every run. Two engine behaviours the script has to work around, both measured: the first transaction on a channel answers with a stale value (hence the discarded warm-up read), and a read following a successful one usually NACKs, which one retry always clears — the P1 policy, confirmed. lore-thread-check.py is unrelated to the probe but shares the same motive: lore and patchwork now sit behind an Anubis bot check, so a shell cannot tell "not published" from "not allowed to look". The NNTP mirror can.
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
== P2 Receive Byte probe at 0x27 — 2026-08-10T18:27:12+02:00
|
||||
driver: /lib/modules/7.0.0-28-generic/updates/dkms/i2c-imc-skylake.ko.zst
|
||||
rounds per channel: 8
|
||||
|
||||
-- SPD baseline
|
||||
ch0.dimm0=50E4333A
|
||||
ch0.dimm1=1FE43236
|
||||
ch1.dimm0=50E434BA
|
||||
ch1.dimm1=1EE433B5
|
||||
|
||||
-- ch0 (i2c-1) — artefact map, read_byte_data(reg)
|
||||
reg value N>>2 N>>3 N-1 closer
|
||||
0x00 0x00 0x00 0x00 0xff NACK
|
||||
0x01 0x00 0x00 0x00 0x00 0x00
|
||||
0x02 0x00 0x00 0x00 0x01 NACK
|
||||
0x03 0x00 0x00 0x00 0x02 0x00
|
||||
0x04 0x01 0x01 0x00 0x03 NACK
|
||||
0x08 0x02 0x02 0x01 0x07 NACK
|
||||
0x0f 0x03 0x03 0x01 0x0e 0x03
|
||||
0x10 0x04 0x04 0x02 0x0f NACK
|
||||
0x11 0x04 0x04 0x02 0x10 0x04
|
||||
0x20 0x08 0x08 0x04 0x1f NACK
|
||||
0x21 0x02 0x08 0x04 0x20 NACK
|
||||
0x40 0x10 0x10 0x08 0x3f NACK
|
||||
0x41 0x10 0x10 0x08 0x40 0x10
|
||||
0x80 0x20 0x20 0x10 0x7f NACK
|
||||
0xa0 0x28 0x28 0x14 0x9f NACK
|
||||
0xa1 0x28 0x28 0x14 0xa0 0xe8
|
||||
0xaf 0xeb 0x2b 0x15 0xae 0xeb
|
||||
0xe1 0xf8 0x38 0x1c 0xe0 0xf8
|
||||
0xec 0xfb 0x3b 0x1d 0xeb NACK
|
||||
0xff 0x3f 0x3f 0x1f 0xfe 0xff
|
||||
|
||||
-- ch1 (i2c-2) — artefact map, read_byte_data(reg)
|
||||
reg value N>>2 N>>3 N-1 closer
|
||||
0x00 0x00 0x00 0x00 0xff NACK
|
||||
0x01 0x00 0x00 0x00 0x00 0x00
|
||||
0x02 0x00 0x00 0x00 0x01 NACK
|
||||
0x03 0x00 0x00 0x00 0x02 0x00
|
||||
0x04 0x01 0x01 0x00 0x03 NACK
|
||||
0x08 0x02 0x02 0x01 0x07 NACK
|
||||
0x0f 0x03 0x03 0x01 0x0e 0x03
|
||||
0x10 0x04 0x04 0x02 0x0f NACK
|
||||
0x11 0x02 0x04 0x02 0x10 NACK
|
||||
0x20 0x02 0x08 0x04 0x1f NACK
|
||||
0x21 0x08 0x08 0x04 0x20 0x08
|
||||
0x40 0x10 0x10 0x08 0x3f NACK
|
||||
0x41 0x10 0x10 0x08 0x40 0x10
|
||||
0x80 0x20 0x20 0x10 0x7f NACK
|
||||
0xa0 0x28 0x28 0x14 0x9f NACK
|
||||
0xa1 0x28 0x28 0x14 0xa0 0xe8
|
||||
0xaf 0xfa 0x2b 0x15 0xae 0xeb
|
||||
0xe1 0xf8 0x38 0x1c 0xe0 0xf8
|
||||
0xec 0xfb 0x3b 0x1d 0xeb NACK
|
||||
0xff 0x0f 0x3f 0x1f 0xfe 0xff
|
||||
|
||||
-- SPD after
|
||||
ch0.dimm0=50E4333A
|
||||
ch0.dimm1=1FE43236
|
||||
ch1.dimm0=50E434BA
|
||||
ch1.dimm1=1EE433B5
|
||||
SPD integrity: OK (4/4 serials unchanged)
|
||||
@@ -0,0 +1,38 @@
|
||||
== P2 Receive Byte probe at 0x27 — 2026-08-10T18:29:29+02:00
|
||||
driver: /lib/modules/7.0.0-28-generic/updates/dkms/i2c-imc-skylake.ko.zst
|
||||
rounds per channel: 8
|
||||
|
||||
-- SPD baseline
|
||||
ch0.dimm0=50E4333A
|
||||
ch0.dimm1=1FE43236
|
||||
ch1.dimm0=50E434BA
|
||||
ch1.dimm1=1EE433B5
|
||||
|
||||
-- ch0 (i2c-1) — receive_byte across addresses
|
||||
0x27 0xe1 0xe1 0xe1
|
||||
0x30 0xff 0xff 0xff
|
||||
0x31 0xff 0xff 0xff
|
||||
0x34 0xff 0xff 0xff
|
||||
0x35 0xff 0xff 0xff
|
||||
0x36 ERR:Error: Could not set address to 0x36: Device or resource busy ERR:Error: Could not set address to 0x36: Device or resource busy ERR:Error: Could not set address to 0x36: Device or resource busy
|
||||
0x37 ERR:Error: Could not set address to 0x37: Device or resource busy ERR:Error: Could not set address to 0x37: Device or resource busy ERR:Error: Could not set address to 0x37: Device or resource busy
|
||||
0x2a NACK NACK NACK
|
||||
0x2b NACK NACK NACK
|
||||
|
||||
-- ch1 (i2c-2) — receive_byte across addresses
|
||||
0x27 0xe1 0xe1 0xe1
|
||||
0x30 0xff 0xff 0xff
|
||||
0x31 0xff 0xff 0xff
|
||||
0x34 0xff 0xff 0xff
|
||||
0x35 0xff 0xff 0xff
|
||||
0x36 ERR:Error: Could not set address to 0x36: Device or resource busy ERR:Error: Could not set address to 0x36: Device or resource busy ERR:Error: Could not set address to 0x36: Device or resource busy
|
||||
0x37 ERR:Error: Could not set address to 0x37: Device or resource busy ERR:Error: Could not set address to 0x37: Device or resource busy ERR:Error: Could not set address to 0x37: Device or resource busy
|
||||
0x2a NACK NACK NACK
|
||||
0x2b NACK NACK NACK
|
||||
|
||||
-- SPD after
|
||||
ch0.dimm0=50E4333A
|
||||
ch0.dimm1=1FE43236
|
||||
ch1.dimm0=50E434BA
|
||||
ch1.dimm1=1EE433B5
|
||||
SPD integrity: OK (4/4 serials unchanged)
|
||||
@@ -0,0 +1,40 @@
|
||||
== P2 Receive Byte probe at 0x27 — 2026-08-10T18:30:45+02:00
|
||||
driver: /lib/modules/7.0.0-28-generic/updates/dkms/i2c-imc-skylake.ko.zst
|
||||
rounds per channel: 8
|
||||
|
||||
-- SPD baseline
|
||||
ch0.dimm0=50E4333A
|
||||
ch0.dimm1=1FE43236
|
||||
ch1.dimm0=50E434BA
|
||||
ch1.dimm1=1EE433B5
|
||||
|
||||
-- ch0 (i2c-1) — does receive_byte echo the last command byte?
|
||||
probe_reg read_byte_data receive_byte verdict
|
||||
0x33 0x0c 0x33 ECHOES the command byte
|
||||
0x55 0x15 0x55 ECHOES the command byte
|
||||
0x77 0x1d 0x77 ECHOES the command byte
|
||||
0xa5 0x29 0xa5 ECHOES the command byte
|
||||
0x0c 0xc1 0x0c ECHOES the command byte
|
||||
0x33 0x0c 0x33 ECHOES the command byte
|
||||
cross-address: command byte to 0x27, Receive Byte from 0x31
|
||||
0x27 reg 0x5a -> 0x16 then 0x31 receive_byte -> 0xff
|
||||
0x27 reg 0x3c -> 0x0f then 0x31 receive_byte -> 0xff
|
||||
|
||||
-- ch1 (i2c-2) — does receive_byte echo the last command byte?
|
||||
probe_reg read_byte_data receive_byte verdict
|
||||
0x33 0x0c 0x33 ECHOES the command byte
|
||||
0x55 0x15 0x55 ECHOES the command byte
|
||||
0x77 0x1d 0x77 ECHOES the command byte
|
||||
0xa5 0x29 0xa5 ECHOES the command byte
|
||||
0x0c 0xc3 0x0c ECHOES the command byte
|
||||
0x33 0x0c 0x33 ECHOES the command byte
|
||||
cross-address: command byte to 0x27, Receive Byte from 0x31
|
||||
0x27 reg 0x5a -> 0x16 then 0x31 receive_byte -> 0xff
|
||||
0x27 reg 0x3c -> 0x0f then 0x31 receive_byte -> 0xff
|
||||
|
||||
-- SPD after
|
||||
ch0.dimm0=50E4333A
|
||||
ch0.dimm1=1FE43236
|
||||
ch1.dimm0=50E434BA
|
||||
ch1.dimm1=1EE433B5
|
||||
SPD integrity: OK (4/4 serials unchanged)
|
||||
@@ -0,0 +1,47 @@
|
||||
== P2 Receive Byte probe at 0x27 — 2026-08-10T18:28:35+02:00
|
||||
driver: /lib/modules/7.0.0-28-generic/updates/dkms/i2c-imc-skylake.ko.zst
|
||||
rounds per channel: 12
|
||||
|
||||
-- SPD baseline
|
||||
ch0.dimm0=50E4333A
|
||||
ch0.dimm1=1FE43236
|
||||
ch1.dimm0=50E434BA
|
||||
ch1.dimm1=1EE433B5
|
||||
|
||||
-- ch0 (i2c-1)
|
||||
control read_byte_data(0x10) = 0x04 [after 1 retry] (poison-close read: NACK)
|
||||
round 1 receive_byte = 0x10 retry: - (closer: 0x10 ) spd-live: 50E4333A
|
||||
round 2 receive_byte = 0x10 retry: - (closer: 0x10 ) spd-live: 50E4333A
|
||||
round 3 receive_byte = 0x10 retry: - (closer: 0x10 ) spd-live: 50E4333A
|
||||
round 4 receive_byte = 0x10 retry: - (closer: 0x10 ) spd-live: 50E4333A
|
||||
round 5 receive_byte = 0x10 retry: - (closer: 0x10 ) spd-live: 50E4333A
|
||||
round 6 receive_byte = 0x10 retry: - (closer: 0x10 ) spd-live: 50E4333A
|
||||
round 7 receive_byte = 0x10 retry: - (closer: 0x10 ) spd-live: 50E4333A
|
||||
round 8 receive_byte = 0x10 retry: - (closer: 0x10 ) spd-live: 50E4333A
|
||||
round 9 receive_byte = 0x10 retry: - (closer: 0x10 ) spd-live: 50E4333A
|
||||
round 10 receive_byte = 0x10 retry: - (closer: 0x10 ) spd-live: 50E4333A
|
||||
round 11 receive_byte = 0x10 retry: - (closer: 0x10 ) spd-live: 50E4333A
|
||||
round 12 receive_byte = 0x10 retry: - (closer: 0x10 ) spd-live: 50E4333A
|
||||
|
||||
-- ch1 (i2c-2)
|
||||
control read_byte_data(0x10) = 0x04 [after 1 retry] (poison-close read: NACK)
|
||||
round 1 receive_byte = 0x10 retry: - (closer: 0x10 ) spd-live: 50E4333A
|
||||
round 2 receive_byte = 0x10 retry: - (closer: 0x10 ) spd-live: 50E4333A
|
||||
round 3 receive_byte = 0x10 retry: - (closer: 0x10 ) spd-live: 50E4333A
|
||||
round 4 receive_byte = 0x10 retry: - (closer: 0x10 ) spd-live: 50E4333A
|
||||
round 5 receive_byte = 0x10 retry: - (closer: 0x10 ) spd-live: 50E4333A
|
||||
round 6 receive_byte = 0x10 retry: - (closer: 0x10 ) spd-live: 50E4333A
|
||||
round 7 receive_byte = 0x10 retry: - (closer: 0x10 ) spd-live: 50E4333A
|
||||
round 8 receive_byte = 0x10 retry: - (closer: 0x10 ) spd-live: 50E4333A
|
||||
round 9 receive_byte = 0x10 retry: - (closer: 0x10 ) spd-live: 50E4333A
|
||||
round 10 receive_byte = 0x10 retry: - (closer: 0x10 ) spd-live: 50E4333A
|
||||
round 11 receive_byte = 0x10 retry: - (closer: 0x10 ) spd-live: 50E4333A
|
||||
round 12 receive_byte = 0x10 retry: - (closer: 0x10 ) spd-live: 50E4333A
|
||||
|
||||
-- SPD after
|
||||
ch0.dimm0=50E4333A
|
||||
ch0.dimm1=1FE43236
|
||||
ch1.dimm0=50E434BA
|
||||
ch1.dimm1=1EE433B5
|
||||
|
||||
SPD integrity: OK (4/4 serials unchanged)
|
||||
Reference in New Issue
Block a user