i.MX6QSD SATA suspend/resume

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

i.MX6QSD SATA suspend/resume

490 Views
mileswang
Contributor II

Hello,

I met some problem about SATA suspend/resume when i.MX6QSD enter/exit deep sleep mode. Below is the flow:

1. Send command ATA_CMD_STANDBY_IMMEDIATE (0xE0) to SSD, SSD enter standby mode.

2. SATA_P0CMD[ICC]=6. Put SATA PHY to SLUMBER mode.

3. i.MX6QSD enter deep sleep mode (DSM).

4. Wakeup by input of UART.

5. ARM Cortex A9 exit from WFI and start to run.

6. SATA_P0CMD[ICC]=1. Request a transition of the interface into the active state.

7. Delay 10ms.

8. Send command ATA_CMD_IDLE_IMMEDIATE(0xE1) to SSD.

My questions:

1. PHY from ACTIVE to SLUMBER (step 2), are SATA_P0SERR[DIAG_X] and SATA_P0IS[PCS] bits set?

2. PHY from SLUMBER to ACTIVE (step 6), are SATA_P0SERR[DIAG_X] and SATA_P0IS[PCS] bits set?

3. Do SATA registers need to be saved befroe DSM and restored after DSM?

4. Do SATA need to re-intialize after DSM? Remove SSD and then attach it again.

5. Is above flow OK?

6. Do you have any document about SATA suspend/resume?

Thanks,

Miles

Labels (1)
0 Kudos
2 Replies

338 Views
igorpadykov
NXP Employee
NXP Employee

Hi Miles

seems this is caused by erratum ERR007966 SATA:

SATA speed negotiation fails after suspend and resume

i.MX6DQ Errata   http://cache.freescale.com/files/32bit/doc/errata/IMX6DQCE.pdf

Best regards

igor

-----------------------------------------------------------------------------------------------------------------------

Note: If this post answers your question, please click the Correct Answer button. Thank you!

-----------------------------------------------------------------------------------------------------------------------

0 Kudos

338 Views
mileswang
Contributor II

Hi Igor,

About Workaround #2:

Add a SATA PHY CR-RESET in the resume through software. This will reset the

PHY and allow the link to resume.

After resume is initiated, the following steps are required:

• Wait a minimum of 100 us to allow the MPLL time to lock

• Perform the PHY CR reset

• Wait an additional 100 us to allow the RX PLL to lock (polling CR register bit

‘rx_pll_state’

How to perform the PHY CR reset? is SATA_P0PHYCR CR register?

Software workaround#2 has been implemented into Linux L3.10.17_1.0.0_GA release. Can you tell me which file is changed for workaround#2?

Thanks,

Miles

0 Kudos