diff options
Diffstat (limited to 'drivers/dma/ioat/dma_v3.c')
-rw-r--r-- | drivers/dma/ioat/dma_v3.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/dma/ioat/dma_v3.c b/drivers/dma/ioat/dma_v3.c index 35d1e33afd5b..4f305f61f878 100644 --- a/drivers/dma/ioat/dma_v3.c +++ b/drivers/dma/ioat/dma_v3.c | |||
@@ -1117,6 +1117,7 @@ static int __devinit ioat3_dma_self_test(struct ioatdma_device *device) | |||
1117 | int __devinit ioat3_dma_probe(struct ioatdma_device *device, int dca) | 1117 | int __devinit ioat3_dma_probe(struct ioatdma_device *device, int dca) |
1118 | { | 1118 | { |
1119 | struct pci_dev *pdev = device->pdev; | 1119 | struct pci_dev *pdev = device->pdev; |
1120 | int dca_en = system_has_dca_enabled(pdev); | ||
1120 | struct dma_device *dma; | 1121 | struct dma_device *dma; |
1121 | struct dma_chan *c; | 1122 | struct dma_chan *c; |
1122 | struct ioat_chan_common *chan; | 1123 | struct ioat_chan_common *chan; |
@@ -1137,6 +1138,11 @@ int __devinit ioat3_dma_probe(struct ioatdma_device *device, int dca) | |||
1137 | dma->device_prep_dma_interrupt = ioat3_prep_interrupt_lock; | 1138 | dma->device_prep_dma_interrupt = ioat3_prep_interrupt_lock; |
1138 | 1139 | ||
1139 | cap = readl(device->reg_base + IOAT_DMA_CAP_OFFSET); | 1140 | cap = readl(device->reg_base + IOAT_DMA_CAP_OFFSET); |
1141 | |||
1142 | /* dca is incompatible with raid operations */ | ||
1143 | if (dca_en && (cap & (IOAT_CAP_XOR|IOAT_CAP_PQ))) | ||
1144 | cap &= ~(IOAT_CAP_XOR|IOAT_CAP_PQ); | ||
1145 | |||
1140 | if (cap & IOAT_CAP_XOR) { | 1146 | if (cap & IOAT_CAP_XOR) { |
1141 | is_raid_device = true; | 1147 | is_raid_device = true; |
1142 | dma->max_xor = 8; | 1148 | dma->max_xor = 8; |