diff options
Diffstat (limited to 'drivers/ata/libata-eh.c')
-rw-r--r-- | drivers/ata/libata-eh.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c index 1d4a6f1e88cd..78d25f6ab6c0 100644 --- a/drivers/ata/libata-eh.c +++ b/drivers/ata/libata-eh.c @@ -548,6 +548,10 @@ void ata_scsi_error(struct Scsi_Host *host) /* finish or retry handled scmd's and clean up */ WARN_ON(!list_empty(&eh_work_q)); +#ifdef CONFIG_AHCI_IMX_PMP + ap->flags &= ~(0x7 << 29); +#endif + DPRINTK("EXIT\n"); } @@ -1933,6 +1937,10 @@ static void ata_eh_link_autopsy(struct ata_link *link) if (ehc->i.flags & ATA_EHI_NO_AUTOPSY) return; +#ifdef CONFIG_AHCI_IMX_PMP + ata_msleep(ap, 20); +#endif + /* obtain and analyze SError */ rc = sata_scr_read(link, SCR_ERROR, &serror); if (rc == 0) { @@ -3553,6 +3561,11 @@ int ata_eh_recover(struct ata_port *ap, ata_prereset_fn_t prereset, DPRINTK("ENTER\n"); +#ifdef CONFIG_AHCI_IMX_PMP + if (ap->flags & (1 << 31)) + ap->flags |= (1 << 29); +#endif + /* prep for recovery */ ata_for_each_link(link, ap, EDGE) { struct ata_eh_context *ehc = &link->eh_context; |