aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/ata/ahci.h3
-rw-r--r--drivers/ata/libahci.c5
2 files changed, 8 insertions, 0 deletions
diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h
index b1750007c8dc..feb127ef4e4e 100644
--- a/drivers/ata/ahci.h
+++ b/drivers/ata/ahci.h
@@ -210,6 +210,9 @@ enum {
210 AHCI_HFLAG_NO_SNTF = (1 << 12), /* no sntf */ 210 AHCI_HFLAG_NO_SNTF = (1 << 12), /* no sntf */
211 AHCI_HFLAG_NO_FPDMA_AA = (1 << 13), /* no FPDMA AA */ 211 AHCI_HFLAG_NO_FPDMA_AA = (1 << 13), /* no FPDMA AA */
212 AHCI_HFLAG_YES_FBS = (1 << 14), /* force FBS cap on */ 212 AHCI_HFLAG_YES_FBS = (1 << 14), /* force FBS cap on */
213 AHCI_HFLAG_DELAY_ENGINE = (1 << 15), /* do not start engine on
214 port start (wait until
215 error-handling stage) */
213 216
214 /* ap->flags bits */ 217 /* ap->flags bits */
215 218
diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c
index a72bfd0ecfee..f9eaa82311a9 100644
--- a/drivers/ata/libahci.c
+++ b/drivers/ata/libahci.c
@@ -737,6 +737,7 @@ static void ahci_power_down(struct ata_port *ap)
737 737
738static void ahci_start_port(struct ata_port *ap) 738static void ahci_start_port(struct ata_port *ap)
739{ 739{
740 struct ahci_host_priv *hpriv = ap->host->private_data;
740 struct ahci_port_priv *pp = ap->private_data; 741 struct ahci_port_priv *pp = ap->private_data;
741 struct ata_link *link; 742 struct ata_link *link;
742 struct ahci_em_priv *emp; 743 struct ahci_em_priv *emp;
@@ -746,6 +747,10 @@ static void ahci_start_port(struct ata_port *ap)
746 /* enable FIS reception */ 747 /* enable FIS reception */
747 ahci_start_fis_rx(ap); 748 ahci_start_fis_rx(ap);
748 749
750 /* enable DMA */
751 if (!(hpriv->flags & AHCI_HFLAG_DELAY_ENGINE))
752 ahci_start_engine(ap);
753
749 /* turn on LEDs */ 754 /* turn on LEDs */
750 if (ap->flags & ATA_FLAG_EM) { 755 if (ap->flags & ATA_FLAG_EM) {
751 ata_for_each_link(link, ap, EDGE) { 756 ata_for_each_link(link, ap, EDGE) {