Commit 7a7921e8 authored by Tejun Heo's avatar Tejun Heo Committed by Jeff Garzik

[PATCH] libata: separate out sata_phy_resume() from sata_std_hardreset()

This patch separates out sata_phy_resume() from sata_std_hardreset().
The function will later be used by probeinit callback.
Signed-off-by: default avatarTejun Heo <htejun@gmail.com>
Signed-off-by: default avatarJeff Garzik <jgarzik@pobox.com>
parent b911fc3a
...@@ -2277,6 +2277,24 @@ void ata_bus_reset(struct ata_port *ap) ...@@ -2277,6 +2277,24 @@ void ata_bus_reset(struct ata_port *ap)
DPRINTK("EXIT\n"); DPRINTK("EXIT\n");
} }
static int sata_phy_resume(struct ata_port *ap)
{
unsigned long timeout = jiffies + (HZ * 5);
u32 sstatus;
scr_write_flush(ap, SCR_CONTROL, 0x300);
/* Wait for phy to become ready, if necessary. */
do {
msleep(200);
sstatus = scr_read(ap, SCR_STATUS);
if ((sstatus & 0xf) != 1)
return 0;
} while (time_before(jiffies, timeout));
return -1;
}
/** /**
* ata_std_softreset - reset host port via ATA SRST * ata_std_softreset - reset host port via ATA SRST
* @ap: port to reset * @ap: port to reset
...@@ -2357,8 +2375,7 @@ int ata_std_softreset(struct ata_port *ap, int verbose, unsigned int *classes) ...@@ -2357,8 +2375,7 @@ int ata_std_softreset(struct ata_port *ap, int verbose, unsigned int *classes)
*/ */
int sata_std_hardreset(struct ata_port *ap, int verbose, unsigned int *class) int sata_std_hardreset(struct ata_port *ap, int verbose, unsigned int *class)
{ {
u32 sstatus, serror; u32 serror;
unsigned long timeout = jiffies + (HZ * 5);
DPRINTK("ENTER\n"); DPRINTK("ENTER\n");
...@@ -2371,15 +2388,8 @@ int sata_std_hardreset(struct ata_port *ap, int verbose, unsigned int *class) ...@@ -2371,15 +2388,8 @@ int sata_std_hardreset(struct ata_port *ap, int verbose, unsigned int *class)
*/ */
msleep(1); msleep(1);
scr_write_flush(ap, SCR_CONTROL, 0x300); /* Bring phy back */
sata_phy_resume(ap);
/* Wait for phy to become ready, if necessary. */
do {
msleep(200);
sstatus = scr_read(ap, SCR_STATUS);
if ((sstatus & 0xf) != 1)
break;
} while (time_before(jiffies, timeout));
/* Clear SError */ /* Clear SError */
serror = scr_read(ap, SCR_ERROR); serror = scr_read(ap, SCR_ERROR);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment