From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeff Garzik Subject: Re: [PATCH] Fix HD activity LED with ahci Date: Mon, 22 Aug 2005 00:35:08 -0400 Message-ID: <430955FC.9080106@pobox.com> References: <42EF93F8.8050601@fujitsu-siemens.com> <20050802163519.GB3710@suse.de> <42F05359.7030006@fujitsu-siemens.com> <1123092761.3982.20.camel@lynx.auton.cs.cmu.edu> <42F1BE18.9000105@fujitsu-siemens.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <42F1BE18.9000105@fujitsu-siemens.com> Sender: linux-kernel-owner@vger.kernel.org To: Martin Wilck , Jens Axboe Cc: Adam Goode , linux-kernel@vger.kernel.org, linux-ide@vger.kernel.org, "Wichert, Gerhard" List-Id: linux-ide@vger.kernel.org Martin Wilck wrote: > 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@fujitsu-siemens.com > > 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 */ To answer the question everybody was asking, this line was in the code because it was in the patch that got AHCI working. I'm inclined to apply the above patch, but I'll wait until 2.6.13, so that we can get some decent testing. Jeff