Anyone managed to permanently disable Advanced Power Management in WD10JPVX?

Nice work!

The 4 bytes at offsets 0x0C - 0x0F constitute a 32-bit little endian checksum. These bytes are chosen so that the sum of all the 32-bit little endian double-words is 0.

Offset 0x40F appears to hold the idle3 timer value. The units appear to correspond to 0.1 second increments. For example, a value of 0x50 (= 80 decimal) corresponds to 8.0 seconds.

0x00 Disable IDLE3
0x50 Enable IDLE3 at 8 seconds
0x5A Enable IDLE3 at 9 seconds

The first 0x30 bytes of MOD 02 constitute the module’s header.

Offset 0x30 is the beginning of a table containing 0x002F sections.

The first section begins at offset 0x00EE and has a size of 0x0019 bytes. The next section begins at 0x0107 and has a size of 0x0018 bytes, and so on.

Offset 0x62 points to the section that contains our idle3 timer byte. This section begins at 0x03F9 and has a size of 0x0067 bytes. The idle3 timer is located at offset 0x16 within this section.

00 01 98 3A 0F 0F 01
00000400 02 02 0A 01 01 0A 02 02 04 0A 00 FF FF 02 03 5A
00000410 01 1E 0A 60 08 04 40 0B 02 00 00 00 00 00 FF FF
00000420 10 00 00 00 00 03 0A 40 42 0F 00 E0 C8 10 00 C8
00000430 00 00 00 05 0A A0 0F A0 05 46 3C 02 00 05 05 B0
00000440 D0 10 00 00 00 C8 00 00 00 D0 07 00 00 0A 00 00
00000450 00 01 01 1E 64 00 10 00 00 60 27 3C 00 00 00 08




00000000 52 4F 59 4C 01 00 30 00 02 00 05 00 66 65 2B 5F
00000010 30 30 30 38 30 30 30 30 07 07 07 00 00 00 00 00
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000030 2F 00 EE 00 19 00 07 01 18 00 1F 01 83 00 A2 01
00000040 45 00 FB 02 17 00 12 03 13 00 38 03 07 00 3F 03
00000050 11 00 50 03 4F 00 9F 03 17 00 B6 03 31 00 E7 03
00000060 12 00 F9 03 67 00 60 04 3B 00 9B 04 13 00 AE 04

Here is a full set of resources for another WD10JPVT drive:

http://files.hddguru.com/download/PC-3000-UDMA%20Support/WDC%20Marvell%20family%20utility/Firebird/WDC%20WD10JPVT-75A1YT0-01-01A01-WXG1C12X6631.rar

If you extract the 02.rpm module, you will find the following:

Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000 52 4F 59 4C 01 00 30 00 02 00 05 00 40 27 85 4D ROYL
00000010 30 30 30 38 30 30 30 30 07 07 07 00 00 00 00 00 00080000........
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000030 29 00 D6 00 19 00 EF 00 18 00 07 01 6E 00 75 01
00000040 43 00 C4 02 14 00 D8 02 12 00 FC 02 06 00 02 03
00000050 11 00 13 03 2D 00 40 03 12 00 52 03 30 00 82 03
00000060 12 00 94 03 51 00 E5 03 3B 00 20 04 11 00 31 04




Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000390 00 01 98 3A 0F 0F 01 02 02 0A 01 01
000003A0 0A 02 02 04 01 00 FF FF 02 03 50 01 1E 0A 80 08
000003B0 04 40 0B 02 00 00 00 00 00 FF FF 10 00 00 00 00
000003C0 01 0A 40 42 0F 00 E0 C8 10 00 00 00 00 00 05 0A
000003D0 A0 0F 05 05 B0 D0 10 00 90 01 00 00 D0 07 00 00
000003E0 00 00 00 00 02

In this case offset 0x62 is pointing to location 0x0394, and the size of the section is 0x0051 bytes. Offset 0x16 within this section has a value of 0x50. This corresponds to 8 seconds, ie the default.

Therefore ISTM that a similar procedure might apply to other ROYL models. To this end, you could examine the resources for other drives at the HDD Guru file area:

http://files.hddguru.com/download/PC-3000-UDMA%20Support/

As for the APM setting in HDAT2, I expect that this setting would be written to the drive’s RAM and would therefore be volatile. The firmware modules (MOD 02 and others) are written to the System Area on the platters, although some are stored in flash memory on the PCB.

1 Like