[PATCH 2/2] ahci: imx: software workaround for phy reset issue in resume

Fabio Estevam festevam at gmail.com
Mon Apr 14 20:19:38 PDT 2014


On Mon, Apr 14, 2014 at 11:41 PM, Shawn Guo <shawn.guo at freescale.com> wrote:
> When suspending imx6q systems which have rootfs on SATA, the following
> error will likely be seen in resume.  The SATA link will fail to come
> up, and it results in an unusable system across the suspend/resume
> cycle.
>
> $ echo mem > /sys/power/state
> PM: Syncing filesystems ... done.
> PM: Preparing system for mem sleep
> Freezing user space processes ... (elapsed 0.002 seconds) done.
> Freezing remaining freezable tasks ... (elapsed 0.002 seconds) done.
> PM: Entering mem sleep
> sd 0:0:0:0: [sda] Synchronizing SCSI cache
> sd 0:0:0:0: [sda] Stopping disk
> PM: suspend of devices complete after 61.914 msecs
> PM: suspend devices took 0.070 seconds
> PM: late suspend of devices complete after 4.906 msecs
> PM: noirq suspend of devices complete after 4.521 msecs
> Disabling non-boot CPUs ...
> CPU1: shutdown
> CPU2: shutdown
> CPU3: shutdown
> Enabling non-boot CPUs ...
> CPU1: Booted secondary processor
> CPU1 is up
> CPU2: Booted secondary processor
> CPU2 is up
> CPU3: Booted secondary processor
> CPU3 is up
> PM: noirq resume of devices complete after 10.486 msecs
> PM: early resume of devices complete after 4.679 msecs
> sd 0:0:0:0: [sda] Starting disk
> PM: resume of devices complete after 22.674 msecs
> PM: resume devices took 0.030 seconds
> PM: Finishing wakeup.
> Restarting tasks ... done.
> $ ata1: SATA link down (SStatus 1 SControl 300)
> ata1: SATA link down (SStatus 1 SControl 300)
> ata1: limiting SATA link speed to 1.5 Gbps
> ata1: SATA link down (SStatus 1 SControl 310)
> ata1.00: disabled
> ata1: exception Emask 0x10 SAct 0x0 SErr 0x4040000 action 0xe frozen t4
> ata1: irq_stat 0x00000040, connection status changed
> ata1: SError: { CommWake DevExch }
> ata1: hard resetting link
> sd 0:0:0:0: rejecting I/O to offline device
> sd 0:0:0:0: killing request
> sd 0:0:0:0: rejecting I/O to offline device
> Aborting journal on device sda2-8.
> sd 0:0:0:0: rejecting I/O to offline device
> EXT4-fs warning (device sda2): ext4_end_bio:317: I/O error writing to inode 132577 (offset 0 size 0 starting block 26235)
> Buffer I/O error on device sda2, logical block 10169
> ...
>
> It's caused by a silicon issue that SATA phy does not get reset by
> controller when coming back from LPM.  The patch adds a software
> workaround for this issue.  It enforces a software reset on SATA phy
> in imx_sata_enable() function, so that we can ensure SATA link will
> come up properly in both power-on and resume.
>
> The software reset is implemented by writing phy reset register through
> the phy control register bus interface.  Functions
> imx_phy_reg_[addressing|write|read]() implement this bus interface, while
> imx_sata_phy_reset() performs the actually reset operation.
>
> Signed-off-by: Richard Zhu <r65037 at freescale.com>
> Signed-off-by: Shawn Guo <shawn.guo at freescale.com>


Tested-by: Fabio Estevam <fabio.estevam at freescale.com>

This fixes the warning I reported at:
http://www.spinics.net/lists/arm-kernel/msg318745.html

Thanks,

Fabio Estevam



More information about the linux-arm-kernel mailing list