diff options
author | Jens Axboe <jens.axboe@oracle.com> | 2010-02-22 07:48:51 -0500 |
---|---|---|
committer | Jens Axboe <jens.axboe@oracle.com> | 2010-02-22 07:48:51 -0500 |
commit | f11cbd74c5ff3614f6390b4de67a6ffdc614c378 (patch) | |
tree | 6a30920ade9eeaac5bf6d6263b5d09712e882eb0 /drivers/ata | |
parent | 429c42c9d246f5bda868495c09974312a0177328 (diff) | |
parent | aea187c46f7d03ce985e55eb1398d0776a15b928 (diff) |
Merge branch 'master' into for-2.6.34
Diffstat (limited to 'drivers/ata')
-rw-r--r-- | drivers/ata/ahci.c | 15 | ||||
-rw-r--r-- | drivers/ata/ata_piix.c | 2 | ||||
-rw-r--r-- | drivers/ata/libata-core.c | 38 | ||||
-rw-r--r-- | drivers/ata/libata-eh.c | 5 | ||||
-rw-r--r-- | drivers/ata/libata-scsi.c | 2 | ||||
-rw-r--r-- | drivers/ata/libata-sff.c | 3 | ||||
-rw-r--r-- | drivers/ata/sata_promise.c | 2 |
7 files changed, 55 insertions, 12 deletions
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index b8bea100a160..b34390347c16 100644 --- a/drivers/ata/ahci.c +++ b/drivers/ata/ahci.c | |||
@@ -2868,6 +2868,21 @@ static bool ahci_broken_suspend(struct pci_dev *pdev) | |||
2868 | }, | 2868 | }, |
2869 | .driver_data = "F.23", /* cutoff BIOS version */ | 2869 | .driver_data = "F.23", /* cutoff BIOS version */ |
2870 | }, | 2870 | }, |
2871 | /* | ||
2872 | * Acer eMachines G725 has the same problem. BIOS | ||
2873 | * V1.03 is known to be broken. V3.04 is known to | ||
2874 | * work. Inbetween, there are V1.06, V2.06 and V3.03 | ||
2875 | * that we don't have much idea about. For now, | ||
2876 | * blacklist anything older than V3.04. | ||
2877 | */ | ||
2878 | { | ||
2879 | .ident = "G725", | ||
2880 | .matches = { | ||
2881 | DMI_MATCH(DMI_SYS_VENDOR, "eMachines"), | ||
2882 | DMI_MATCH(DMI_PRODUCT_NAME, "eMachines G725"), | ||
2883 | }, | ||
2884 | .driver_data = "V3.04", /* cutoff BIOS version */ | ||
2885 | }, | ||
2871 | { } /* terminate list */ | 2886 | { } /* terminate list */ |
2872 | }; | 2887 | }; |
2873 | const struct dmi_system_id *dmi = dmi_first_match(sysids); | 2888 | const struct dmi_system_id *dmi = dmi_first_match(sysids); |
diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c index 19136a7e1064..6f3f2257d0f0 100644 --- a/drivers/ata/ata_piix.c +++ b/drivers/ata/ata_piix.c | |||
@@ -329,7 +329,7 @@ static struct ata_port_operations ich_pata_ops = { | |||
329 | }; | 329 | }; |
330 | 330 | ||
331 | static struct ata_port_operations piix_sata_ops = { | 331 | static struct ata_port_operations piix_sata_ops = { |
332 | .inherits = &ata_bmdma_port_ops, | 332 | .inherits = &ata_bmdma32_port_ops, |
333 | }; | 333 | }; |
334 | 334 | ||
335 | static struct ata_port_operations piix_sidpr_sata_ops = { | 335 | static struct ata_port_operations piix_sidpr_sata_ops = { |
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 22ff51bdbc8a..6728328f3bea 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c | |||
@@ -3790,21 +3790,45 @@ int sata_link_debounce(struct ata_link *link, const unsigned long *params, | |||
3790 | int sata_link_resume(struct ata_link *link, const unsigned long *params, | 3790 | int sata_link_resume(struct ata_link *link, const unsigned long *params, |
3791 | unsigned long deadline) | 3791 | unsigned long deadline) |
3792 | { | 3792 | { |
3793 | int tries = ATA_LINK_RESUME_TRIES; | ||
3793 | u32 scontrol, serror; | 3794 | u32 scontrol, serror; |
3794 | int rc; | 3795 | int rc; |
3795 | 3796 | ||
3796 | if ((rc = sata_scr_read(link, SCR_CONTROL, &scontrol))) | 3797 | if ((rc = sata_scr_read(link, SCR_CONTROL, &scontrol))) |
3797 | return rc; | 3798 | return rc; |
3798 | 3799 | ||
3799 | scontrol = (scontrol & 0x0f0) | 0x300; | 3800 | /* |
3801 | * Writes to SControl sometimes get ignored under certain | ||
3802 | * controllers (ata_piix SIDPR). Make sure DET actually is | ||
3803 | * cleared. | ||
3804 | */ | ||
3805 | do { | ||
3806 | scontrol = (scontrol & 0x0f0) | 0x300; | ||
3807 | if ((rc = sata_scr_write(link, SCR_CONTROL, scontrol))) | ||
3808 | return rc; | ||
3809 | /* | ||
3810 | * Some PHYs react badly if SStatus is pounded | ||
3811 | * immediately after resuming. Delay 200ms before | ||
3812 | * debouncing. | ||
3813 | */ | ||
3814 | msleep(200); | ||
3800 | 3815 | ||
3801 | if ((rc = sata_scr_write(link, SCR_CONTROL, scontrol))) | 3816 | /* is SControl restored correctly? */ |
3802 | return rc; | 3817 | if ((rc = sata_scr_read(link, SCR_CONTROL, &scontrol))) |
3818 | return rc; | ||
3819 | } while ((scontrol & 0xf0f) != 0x300 && --tries); | ||
3803 | 3820 | ||
3804 | /* Some PHYs react badly if SStatus is pounded immediately | 3821 | if ((scontrol & 0xf0f) != 0x300) { |
3805 | * after resuming. Delay 200ms before debouncing. | 3822 | ata_link_printk(link, KERN_ERR, |
3806 | */ | 3823 | "failed to resume link (SControl %X)\n", |
3807 | msleep(200); | 3824 | scontrol); |
3825 | return 0; | ||
3826 | } | ||
3827 | |||
3828 | if (tries < ATA_LINK_RESUME_TRIES) | ||
3829 | ata_link_printk(link, KERN_WARNING, | ||
3830 | "link resume succeeded after %d retries\n", | ||
3831 | ATA_LINK_RESUME_TRIES - tries); | ||
3808 | 3832 | ||
3809 | if ((rc = sata_link_debounce(link, params, deadline))) | 3833 | if ((rc = sata_link_debounce(link, params, deadline))) |
3810 | return rc; | 3834 | return rc; |
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c index 0ea97c942ced..9f6cfac0f2cc 100644 --- a/drivers/ata/libata-eh.c +++ b/drivers/ata/libata-eh.c | |||
@@ -2028,8 +2028,9 @@ static void ata_eh_link_autopsy(struct ata_link *link) | |||
2028 | qc->err_mask &= ~(AC_ERR_DEV | AC_ERR_OTHER); | 2028 | qc->err_mask &= ~(AC_ERR_DEV | AC_ERR_OTHER); |
2029 | 2029 | ||
2030 | /* determine whether the command is worth retrying */ | 2030 | /* determine whether the command is worth retrying */ |
2031 | if (!(qc->err_mask & AC_ERR_INVALID) && | 2031 | if (qc->flags & ATA_QCFLAG_IO || |
2032 | ((qc->flags & ATA_QCFLAG_IO) || qc->err_mask != AC_ERR_DEV)) | 2032 | (!(qc->err_mask & AC_ERR_INVALID) && |
2033 | qc->err_mask != AC_ERR_DEV)) | ||
2033 | qc->flags |= ATA_QCFLAG_RETRY; | 2034 | qc->flags |= ATA_QCFLAG_RETRY; |
2034 | 2035 | ||
2035 | /* accumulate error info */ | 2036 | /* accumulate error info */ |
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c index f4ea5a8c325b..d096fbcbc771 100644 --- a/drivers/ata/libata-scsi.c +++ b/drivers/ata/libata-scsi.c | |||
@@ -2875,7 +2875,7 @@ static unsigned int ata_scsi_pass_thru(struct ata_queued_cmd *qc) | |||
2875 | * write indication (used for PIO/DMA setup), result TF is | 2875 | * write indication (used for PIO/DMA setup), result TF is |
2876 | * copied back and we don't whine too much about its failure. | 2876 | * copied back and we don't whine too much about its failure. |
2877 | */ | 2877 | */ |
2878 | tf->flags = ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE; | 2878 | tf->flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE; |
2879 | if (scmd->sc_data_direction == DMA_TO_DEVICE) | 2879 | if (scmd->sc_data_direction == DMA_TO_DEVICE) |
2880 | tf->flags |= ATA_TFLAG_WRITE; | 2880 | tf->flags |= ATA_TFLAG_WRITE; |
2881 | 2881 | ||
diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c index 741065c9da67..730ef3c384ca 100644 --- a/drivers/ata/libata-sff.c +++ b/drivers/ata/libata-sff.c | |||
@@ -893,6 +893,9 @@ static void ata_pio_sector(struct ata_queued_cmd *qc) | |||
893 | do_write); | 893 | do_write); |
894 | } | 894 | } |
895 | 895 | ||
896 | if (!do_write) | ||
897 | flush_dcache_page(page); | ||
898 | |||
896 | qc->curbytes += qc->sect_size; | 899 | qc->curbytes += qc->sect_size; |
897 | qc->cursg_ofs += qc->sect_size; | 900 | qc->cursg_ofs += qc->sect_size; |
898 | 901 | ||
diff --git a/drivers/ata/sata_promise.c b/drivers/ata/sata_promise.c index 07d8d00b4d34..63306285c843 100644 --- a/drivers/ata/sata_promise.c +++ b/drivers/ata/sata_promise.c | |||
@@ -862,7 +862,7 @@ static void pdc_error_intr(struct ata_port *ap, struct ata_queued_cmd *qc, | |||
862 | if (port_status & PDC_DRIVE_ERR) | 862 | if (port_status & PDC_DRIVE_ERR) |
863 | ac_err_mask |= AC_ERR_DEV; | 863 | ac_err_mask |= AC_ERR_DEV; |
864 | if (port_status & (PDC_OVERRUN_ERR | PDC_UNDERRUN_ERR)) | 864 | if (port_status & (PDC_OVERRUN_ERR | PDC_UNDERRUN_ERR)) |
865 | ac_err_mask |= AC_ERR_HSM; | 865 | ac_err_mask |= AC_ERR_OTHER; |
866 | if (port_status & (PDC2_ATA_HBA_ERR | PDC2_ATA_DMA_CNT_ERR)) | 866 | if (port_status & (PDC2_ATA_HBA_ERR | PDC2_ATA_DMA_CNT_ERR)) |
867 | ac_err_mask |= AC_ERR_ATA_BUS; | 867 | ac_err_mask |= AC_ERR_ATA_BUS; |
868 | if (port_status & (PDC_PH_ERR | PDC_SH_ERR | PDC_DH_ERR | PDC2_HTO_ERR | 868 | if (port_status & (PDC_PH_ERR | PDC_SH_ERR | PDC_DH_ERR | PDC2_HTO_ERR |