AndyStubbs said:
stradivari said:
I can get the registers rewritten to put it back into SATA mode on wake, but I'm concerned that it's not done properly, that it is not being put to sleep correctly, and I worry that over time we will have corruption on any disks connected to eSATA during improper _PTS (prepare to sleep) and _WAK
That (shouldn't) be an issue though because if the drive is still active it shouldn't be sent to sleep?
Well, with that thought in mind, you're welcome to give it a try.
I've got it "apparently" working. That is, when wake from sleep, drive is still mounted, and seems to work fine, and lspci shows Jmicron as SATA. However, I have a gut feeling that something is still not right (I don't know why... it seems too easy).
Here's what I did:
Immediately before the _WAK entry in the DSDT (_WAK stands for Wake—as in, from sleep), I created a function called PINI:
Code:
Method (PINI, 0, NotSerialized)
{
Store (0xB3, \_SB.PCI0.PEX3.JMB0.M1)
Store (0xA1, \_SB.PCI0.PEX3.JMB0.M2)
Store (0xC2, \_SB.PCI0.PEX3.JMB0.M3)
}
As you can see, in this function I simply write the values to the registers at the address we created in the JMB0 entry.
Then, I call this function from within the _WAK entry:
Code:
Method (_WAK, 1, NotSerialized)
{
PINI ()
\\...........rest of _WAK entry..........\\
}
Attached is the edited DSDT.aml file (same as before with the updated JMB0 and JMB1 entries, as well as the PINI function and edited _WAK entry). Feel free to test it... it SEEMS to work, but I'm not confident it is wholly safe. For instance, after using this, sleeping and waking, I seem to get repeated, random reads from the drive, which I wouldn't usually have. No idea why. EDIT: Okay, no I don't. Hmm... I think maybe this really IS working!!
DSDT.aml
WARNING: TEST THIS ON NON-CRITICAL DATA ONLY!