Anyone managed to permanently disable Advanced Power Management in WD10JPVX?

Thanks, that’s very interesting. I wonder how much those SATA analysers cost. :slight_smile:

ISTM that there are four VSCs. Here is my guess as to what they mean …

57 00 1a 00… — Read timer value in milliseconds (4 bytes)
57 00 1b 00… — Write timer value in milliseconds (4 bytes)

2a 00 01 00 02 00 0d 00 16 00 01 00… — Read 1 byte at offset 0x16 from section 0D of MOD 02
2a 00 02 00 02 00 0d 00 16 00 01 00… — Write 1 byte at offset 0x16 to section 0D of MOD 02

It seems that the values at offset 0x16 may not be consistent across all models and firmware. For example, I notice that when wdidle3 disables the idle3 timer (in the trace), it sets a value of 0xFC for offset 0x16 rather than 0. The idle3ctl documentation also points out the differences.

The “57” VSC appears to read (1A) and write (1B) a timer value in milliseconds, but I don’t know where this number might be stored. You may need to read all the modules, not just MOD 02, to find out. That said, idle3ctl ( http://idle3-tools.sourceforge.net)) appears to use only the second pair of VSCs.

Here is what I’ve summarised from the WDIDLE3 trace at the following URL:

https://github.com/Distrotech/hdparm/blob/master/contrib/wdidle3_trace.txt

report state of the idle3 timer:

data_out: 57 00 1a 00..
data_in: 40 1f 00 00.. ---> 0x1F40 = 8000 milliseconds
data_out: 2a 00 01 00 02 00 0d 00 16 00 01 00..
data_in: 50 00.. ---> 0x50 = 80 = 8.0 seconds

completely disable the idle3 timer:

data_out: 57 00 1b 00..
data_out: 00 00 00 00 ---> writes a value of 0 milliseconds
data_out: 57 00 1a 00..
data_in: 01 00.. ---> reads back a value of 1 millisecond ???
data_out: 2a 00 02 00 02 00 0d 00 16 00 01 00..
data_out: fc 
data_out: 2a 00 01 00 02 00 0d 00 16 00 01 00..
data_in: fc 00.. ---> 0xFC = 252


set idle3 timeout to 300 seconds:

data_out: 57 00 1b 00..
data_out: e0 93 04 00 ---> 0x493E0 = 300,000 milliseconds
data_out: 57 00 1a 00..
data_in: e0 93 04 00.. 
data_out: 2a 00 02 00 02 00 0d 00 16 00 01 00..
data: 8a 
data_out: 2a 00 01 00 02 00 0d 00 16 00 01 00
data_in: 8a 00.. ---> 0x8A = 138 = 128 + 10 --> 10 x 30 = 300 seconds


change idle3 timeout to 30.5(?) seconds:

data_out: 57 00 1b 00..
data_out: 24 77 00 00 ---> 0x7724 = 30,500 milliseconds
data_out: 57 00 1a 00..
data_in: 24 77 00..
data_out: 2A 00 02 00 02 00 0D 00 16 00 01 00..
data_out: 81 
data_out: 2a 00 01 00 02 00 0d 00 16 00 01 00..
data_in: 81 00.. ---> 0x81 = 129 = 128 + 1 --> 1 x 30 = 30 seconds
1 Like