diff options
Diffstat (limited to 'drivers/ata/sata_mv.c')
-rw-r--r-- | drivers/ata/sata_mv.c | 40 |
1 files changed, 14 insertions, 26 deletions
diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c index ad169ffbc4cb..c815f8ecf6e6 100644 --- a/drivers/ata/sata_mv.c +++ b/drivers/ata/sata_mv.c | |||
@@ -667,7 +667,8 @@ static const struct pci_device_id mv_pci_tbl[] = { | |||
667 | { PCI_VDEVICE(MARVELL, 0x5041), chip_504x }, | 667 | { PCI_VDEVICE(MARVELL, 0x5041), chip_504x }, |
668 | { PCI_VDEVICE(MARVELL, 0x5080), chip_5080 }, | 668 | { PCI_VDEVICE(MARVELL, 0x5080), chip_5080 }, |
669 | { PCI_VDEVICE(MARVELL, 0x5081), chip_508x }, | 669 | { PCI_VDEVICE(MARVELL, 0x5081), chip_508x }, |
670 | /* RocketRAID 1740/174x have different identifiers */ | 670 | /* RocketRAID 1720/174x have different identifiers */ |
671 | { PCI_VDEVICE(TTI, 0x1720), chip_6042 }, | ||
671 | { PCI_VDEVICE(TTI, 0x1740), chip_508x }, | 672 | { PCI_VDEVICE(TTI, 0x1740), chip_508x }, |
672 | { PCI_VDEVICE(TTI, 0x1742), chip_508x }, | 673 | { PCI_VDEVICE(TTI, 0x1742), chip_508x }, |
673 | 674 | ||
@@ -1134,30 +1135,16 @@ static int mv_qc_defer(struct ata_queued_cmd *qc) | |||
1134 | if (ap->nr_active_links == 0) | 1135 | if (ap->nr_active_links == 0) |
1135 | return 0; | 1136 | return 0; |
1136 | 1137 | ||
1137 | if (pp->pp_flags & MV_PP_FLAG_EDMA_EN) { | 1138 | /* |
1138 | /* | 1139 | * The port is operating in host queuing mode (EDMA) with NCQ |
1139 | * The port is operating in host queuing mode (EDMA). | 1140 | * enabled, allow multiple NCQ commands. EDMA also allows |
1140 | * It can accomodate a new qc if the qc protocol | 1141 | * queueing multiple DMA commands but libata core currently |
1141 | * is compatible with the current host queue mode. | 1142 | * doesn't allow it. |
1142 | */ | 1143 | */ |
1143 | if (pp->pp_flags & MV_PP_FLAG_NCQ_EN) { | 1144 | if ((pp->pp_flags & MV_PP_FLAG_EDMA_EN) && |
1144 | /* | 1145 | (pp->pp_flags & MV_PP_FLAG_NCQ_EN) && ata_is_ncq(qc->tf.protocol)) |
1145 | * The host queue (EDMA) is in NCQ mode. | 1146 | return 0; |
1146 | * If the new qc is also an NCQ command, | 1147 | |
1147 | * then allow the new qc. | ||
1148 | */ | ||
1149 | if (qc->tf.protocol == ATA_PROT_NCQ) | ||
1150 | return 0; | ||
1151 | } else { | ||
1152 | /* | ||
1153 | * The host queue (EDMA) is in non-NCQ, DMA mode. | ||
1154 | * If the new qc is also a non-NCQ, DMA command, | ||
1155 | * then allow the new qc. | ||
1156 | */ | ||
1157 | if (qc->tf.protocol == ATA_PROT_DMA) | ||
1158 | return 0; | ||
1159 | } | ||
1160 | } | ||
1161 | return ATA_DEFER_PORT; | 1148 | return ATA_DEFER_PORT; |
1162 | } | 1149 | } |
1163 | 1150 | ||
@@ -3036,7 +3023,8 @@ static int mv_chip_id(struct ata_host *host, unsigned int board_idx) | |||
3036 | break; | 3023 | break; |
3037 | case chip_soc: | 3024 | case chip_soc: |
3038 | hpriv->ops = &mv_soc_ops; | 3025 | hpriv->ops = &mv_soc_ops; |
3039 | hp_flags |= MV_HP_FLAG_SOC | MV_HP_ERRATA_60X1C0; | 3026 | hp_flags |= MV_HP_FLAG_SOC | MV_HP_GEN_IIE | |
3027 | MV_HP_ERRATA_60X1C0; | ||
3040 | break; | 3028 | break; |
3041 | 3029 | ||
3042 | default: | 3030 | default: |