mirror of https://gitee.com/openkylin/linux.git
[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: Tejun Heo <htejun@gmail.com> Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
This commit is contained in:
parent
b911fc3ae0
commit
7a7921e866
|
@ -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)
|
||||||
*/
|
*/
|
||||||
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)
|
||||||
*/
|
*/
|
||||||
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);
|
||||||
|
|
Loading…
Reference in New Issue