From: Brian Norris <computersforpeace@gmail.com>
To: Jeff Garzik <jgarzik@pobox.com>
Cc: linux-ide@vger.kernel.org,
Linux Kernel <linux-kernel@vger.kernel.org>,
Tejun Heo <tj@kernel.org>,
Brian Norris <computersforpeace@gmail.com>,
Lin Ming <ming.m.lin@intel.com>,
Norbert Preining <preining@logic.at>,
"Srivatsa S . Bhat" <srivatsa.bhat@linux.vnet.ibm.com>,
Valdis Kletnieks <valdis.kletnieks@vt.edu>,
"Rafael J . Wysocki" <rjw@sisk.pl>
Subject: [PATCH v2 1/3] ahci: add AHCI_HFLAG_DELAY_ENGINE host flag
Date: Tue, 21 Feb 2012 10:38:42 -0800 [thread overview]
Message-ID: <1329849524-23758-2-git-send-email-computersforpeace@gmail.com> (raw)
In-Reply-To: <1329849524-23758-1-git-send-email-computersforpeace@gmail.com>
The following commit was intended to fix problems with specific AHCI
controller(s) that would become bricks if the AHCI specification was not
followed strictly (that is, if ahci_start_engine() was called while the
controller was in the wrong state):
commit 7faa33da9b7add01db9f1ad92c6a5d9145e940a7
ahci: start engine only during soft/hard resets
However, some devices currently have issues with that fix, so we must
implement a flag that delays the ahci_start_engine() call only for specific
controllers.
This commit simply introduces the flag, without enabling it in any driver.
Note that even when AHCI_HFLAG_DELAY_ENGINE is not enabled, this patch does
not constitue a full revert to commit 7faa33da; there is still a change in
behavior to the ahci_port_suspend() failure path.
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
---
drivers/ata/ahci.h | 3 +++
drivers/ata/libahci.c | 5 +++++
2 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h
index b175000..feb127e 100644
--- a/drivers/ata/ahci.h
+++ b/drivers/ata/ahci.h
@@ -210,6 +210,9 @@ enum {
AHCI_HFLAG_NO_SNTF = (1 << 12), /* no sntf */
AHCI_HFLAG_NO_FPDMA_AA = (1 << 13), /* no FPDMA AA */
AHCI_HFLAG_YES_FBS = (1 << 14), /* force FBS cap on */
+ AHCI_HFLAG_DELAY_ENGINE = (1 << 15), /* do not start engine on
+ port start (wait until
+ error-handling stage) */
/* ap->flags bits */
diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c
index a72bfd0..f9eaa82 100644
--- a/drivers/ata/libahci.c
+++ b/drivers/ata/libahci.c
@@ -737,6 +737,7 @@ static void ahci_power_down(struct ata_port *ap)
static void ahci_start_port(struct ata_port *ap)
{
+ struct ahci_host_priv *hpriv = ap->host->private_data;
struct ahci_port_priv *pp = ap->private_data;
struct ata_link *link;
struct ahci_em_priv *emp;
@@ -746,6 +747,10 @@ static void ahci_start_port(struct ata_port *ap)
/* enable FIS reception */
ahci_start_fis_rx(ap);
+ /* enable DMA */
+ if (!(hpriv->flags & AHCI_HFLAG_DELAY_ENGINE))
+ ahci_start_engine(ap);
+
/* turn on LEDs */
if (ap->flags & ATA_FLAG_EM) {
ata_for_each_link(link, ap, EDGE) {
WARNING: multiple messages have this Message-ID (diff)
From: Brian Norris <computersforpeace@gmail.com>
To: Jeff Garzik <jgarzik@pobox.com>
Cc: <linux-ide@vger.kernel.org>,
Linux Kernel <linux-kernel@vger.kernel.org>,
Tejun Heo <tj@kernel.org>,
Brian Norris <computersforpeace@gmail.com>,
Lin Ming <ming.m.lin@intel.com>,
Norbert Preining <preining@logic.at>,
"Srivatsa S . Bhat" <srivatsa.bhat@linux.vnet.ibm.com>,
Valdis Kletnieks <valdis.kletnieks@vt.edu>,
"Rafael J . Wysocki" <rjw@sisk.pl>
Subject: [PATCH v2 1/3] ahci: add AHCI_HFLAG_DELAY_ENGINE host flag
Date: Tue, 21 Feb 2012 10:38:42 -0800 [thread overview]
Message-ID: <1329849524-23758-2-git-send-email-computersforpeace@gmail.com> (raw)
In-Reply-To: <1329849524-23758-1-git-send-email-computersforpeace@gmail.com>
The following commit was intended to fix problems with specific AHCI
controller(s) that would become bricks if the AHCI specification was not
followed strictly (that is, if ahci_start_engine() was called while the
controller was in the wrong state):
commit 7faa33da9b7add01db9f1ad92c6a5d9145e940a7
ahci: start engine only during soft/hard resets
However, some devices currently have issues with that fix, so we must
implement a flag that delays the ahci_start_engine() call only for specific
controllers.
This commit simply introduces the flag, without enabling it in any driver.
Note that even when AHCI_HFLAG_DELAY_ENGINE is not enabled, this patch does
not constitue a full revert to commit 7faa33da; there is still a change in
behavior to the ahci_port_suspend() failure path.
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
---
drivers/ata/ahci.h | 3 +++
drivers/ata/libahci.c | 5 +++++
2 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h
index b175000..feb127e 100644
--- a/drivers/ata/ahci.h
+++ b/drivers/ata/ahci.h
@@ -210,6 +210,9 @@ enum {
AHCI_HFLAG_NO_SNTF = (1 << 12), /* no sntf */
AHCI_HFLAG_NO_FPDMA_AA = (1 << 13), /* no FPDMA AA */
AHCI_HFLAG_YES_FBS = (1 << 14), /* force FBS cap on */
+ AHCI_HFLAG_DELAY_ENGINE = (1 << 15), /* do not start engine on
+ port start (wait until
+ error-handling stage) */
/* ap->flags bits */
diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c
index a72bfd0..f9eaa82 100644
--- a/drivers/ata/libahci.c
+++ b/drivers/ata/libahci.c
@@ -737,6 +737,7 @@ static void ahci_power_down(struct ata_port *ap)
static void ahci_start_port(struct ata_port *ap)
{
+ struct ahci_host_priv *hpriv = ap->host->private_data;
struct ahci_port_priv *pp = ap->private_data;
struct ata_link *link;
struct ahci_em_priv *emp;
@@ -746,6 +747,10 @@ static void ahci_start_port(struct ata_port *ap)
/* enable FIS reception */
ahci_start_fis_rx(ap);
+ /* enable DMA */
+ if (!(hpriv->flags & AHCI_HFLAG_DELAY_ENGINE))
+ ahci_start_engine(ap);
+
/* turn on LEDs */
if (ap->flags & ATA_FLAG_EM) {
ata_for_each_link(link, ap, EDGE) {
next prev parent reply other threads:[~2012-02-21 18:38 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-02-21 18:38 [PATCH v2 0/3] ahci: fix boot/resume COMRESET failures Brian Norris
2012-02-21 18:38 ` Brian Norris
2012-02-21 18:38 ` Brian Norris [this message]
2012-02-21 18:38 ` [PATCH v2 1/3] ahci: add AHCI_HFLAG_DELAY_ENGINE host flag Brian Norris
2012-03-13 20:36 ` Jeff Garzik
2012-02-21 18:38 ` [PATCH v2 2/3] ahci: move AHCI_HFLAGS() macro to ahci.h Brian Norris
2012-02-21 18:38 ` Brian Norris
2012-02-21 18:38 ` [PATCH v2 3/3] ahci_platform: add STRICT_AHCI platform type Brian Norris
2012-02-21 18:38 ` Brian Norris
2012-02-23 0:02 ` [PATCH v2 0/3] ahci: fix boot/resume COMRESET failures Norbert Preining
2012-03-06 18:24 ` Brian Norris
2012-03-02 13:16 ` cwillu
2012-03-05 0:58 ` Lin Ming
2012-03-05 5:12 ` cwillu
2012-03-07 5:28 ` Lin Ming
2012-03-09 16:07 ` cwillu
2012-03-10 0:07 ` Matt
2012-03-12 22:12 ` Tejun Heo
2012-03-13 20:37 ` Jeff Garzik
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1329849524-23758-2-git-send-email-computersforpeace@gmail.com \
--to=computersforpeace@gmail.com \
--cc=jgarzik@pobox.com \
--cc=linux-ide@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=ming.m.lin@intel.com \
--cc=preining@logic.at \
--cc=rjw@sisk.pl \
--cc=srivatsa.bhat@linux.vnet.ibm.com \
--cc=tj@kernel.org \
--cc=valdis.kletnieks@vt.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.