Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

[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
Loading
Loading
Loading
Loading
+21 −11
Original line number Diff line number Diff line
@@ -2277,6 +2277,24 @@ void ata_bus_reset(struct ata_port *ap)
	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
 *	@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)
{
	u32 sstatus, serror;
	unsigned long timeout = jiffies + (HZ * 5);
	u32 serror;

	DPRINTK("ENTER\n");

@@ -2371,15 +2388,8 @@ int sata_std_hardreset(struct ata_port *ap, int verbose, unsigned int *class)
	 */
	msleep(1);

	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)
			break;
	} while (time_before(jiffies, timeout));
	/* Bring phy back */
	sata_phy_resume(ap);

	/* Clear SError */
	serror = scr_read(ap, SCR_ERROR);