diff options
-rw-r--r-- | drivers/ata/ahci.h | 3 | ||||
-rw-r--r-- | 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 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 | ||
738 | static void ahci_start_port(struct ata_port *ap) | 738 | static 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) { |