All right,
this looks like a pretty broad agreement on this issue.
Jeff, would you please apply this patch?
Regards,
Martin
------------------------------------------------------------------------
Patch: fix wrong HD activity control by ahci driver
Signed-off-by: Martin.Wilck@xxxxxxxxxxxxxxxxxxx
The ahci driver 1.0 sets the SActive bit on every transaction,
causing the LED to light up. The SActive bit is used only for
native command queuing (NCQ) which the current driver version doesn't implement. Resetting the SActive bit is the device's responsibility (by sending a "Set Device Bits FIS" to the
host adapter) but this is not required in response to non-NCQ commands, and (most) devices don't. Thus the LED stays always on. This patch fixes the LED behavior.
Spec references:
http://www.intel.com/technology/serialata/pdf/rev1_1.pdf, sec. 3.3.13, 5.5.1
http://www.serialata.org/docs/serialata10a.pdf
http://www.intel.com/design/storage/papers/25266401.pdf
--- linux-2.6.13-rc5/drivers/scsi/ahci.c.orig 2005-08-04 08:14:44.000000000 +0200
+++ linux-2.6.13-rc5/drivers/scsi/ahci.c 2005-08-04 08:19:06.000000000 +0200
@@ -696,9 +696,6 @@ static int ahci_qc_issue(struct ata_queu
struct ata_port *ap = qc->ap;
void *port_mmio = (void *) ap->ioaddr.cmd_addr;
- writel(1, port_mmio + PORT_SCR_ACT);
- readl(port_mmio + PORT_SCR_ACT); /* flush */
-
writel(1, port_mmio + PORT_CMD_ISSUE);
readl(port_mmio + PORT_CMD_ISSUE); /* flush */