[PATCH 2/4] libata sata_qstor nuke idle state

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



sata_qstor nuke idle state.

We're really only ever in one of two hardware states:  packet, or mmio.
Get rid of unnecessary "qs_state_idle" state.

This belongs in 2.6.24.

Signed-off-by:  Mark Lord <mlord@xxxxxxxxx>
---

--- old/drivers/ata/sata_qstor.c	2007-11-07 07:41:28.000000000 -0500
+++ linux/drivers/ata/sata_qstor.c	2007-11-07 08:06:29.000000000 -0500
@@ -103,7 +103,7 @@
	QS_DMA_BOUNDARY		= ~0UL
};

-typedef enum { qs_state_idle, qs_state_pkt, qs_state_mmio } qs_state_t;
+typedef enum { qs_state_mmio, qs_state_pkt } qs_state_t;

struct qs_port_priv {
	u8			*pkt;
@@ -222,7 +222,9 @@
static inline void qs_enter_reg_mode(struct ata_port *ap)
{
	u8 __iomem *chan = qs_mmio_base(ap->host) + (ap->port_no * 0x4000);
+	struct qs_port_priv *pp = ap->private_data;

+	pp->state = qs_state_mmio;
	writeb(QS_CTR0_REG, chan + QS_CCT_CTR0);
	readb(chan + QS_CCT_CTR0);        /* flush */
}
@@ -238,19 +240,12 @@

static void qs_phy_reset(struct ata_port *ap)
{
-	struct qs_port_priv *pp = ap->private_data;
-
-	pp->state = qs_state_idle;
	qs_reset_channel_logic(ap);
	sata_phy_reset(ap);
}

static void qs_eng_timeout(struct ata_port *ap)
{
-	struct qs_port_priv *pp = ap->private_data;
-
-	if (pp->state != qs_state_idle) /* healthy paranoia */
-		pp->state = qs_state_mmio;
	qs_reset_channel_logic(ap);
	ata_eng_timeout(ap);
}
@@ -409,7 +404,6 @@
					switch (sHST) {
					case 0: /* successful CPB */
					case 3: /* device error */
-						pp->state = qs_state_idle;
						qs_enter_reg_mode(qc->ap);
						qc->err_mask |= ac_err_mask(sDST);
						ata_qc_complete(qc);
@@ -448,7 +442,6 @@
					ap->print_id, qc->tf.protocol, status);

				/* complete taskfile transaction */
-				pp->state = qs_state_idle;
				qc->err_mask |= ac_err_mask(status);
				ata_qc_complete(qc);
				handled = 1;
@@ -504,7 +497,6 @@
	rc = ata_port_start(ap);
	if (rc)
		return rc;
-	qs_enter_reg_mode(ap);
	pp = devm_kzalloc(dev, sizeof(*pp), GFP_KERNEL);
	if (!pp)
		return -ENOMEM;
@@ -515,6 +507,7 @@
	memset(pp->pkt, 0, QS_PKT_BYTES);
	ap->private_data = pp;

+	qs_enter_reg_mode(ap);
	addr = (u64)pp->pkt_dma;
	writel((u32) addr,        chan + QS_CCF_CPBA);
	writel((u32)(addr >> 32), chan + QS_CCF_CPBA + 4);
-
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Filesystems]     [Linux SCSI]     [Linux RAID]     [Git]     [Kernel Newbies]     [Linux Newbie]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Samba]     [Device Mapper]

  Powered by Linux