diff options
author | Dave Jiang <dave.jiang@intel.com> | 2013-03-26 18:42:47 -0400 |
---|---|---|
committer | Vinod Koul <vinod.koul@intel.com> | 2013-04-15 00:21:20 -0400 |
commit | 8a52b9ff1154a68b6a2a8da9a31a87e52f5f6418 (patch) | |
tree | 54fcb19bbcd64cf50a86efe4feeac899b32fd40b /drivers/dma/ioat/dma.h | |
parent | d92a8d7cbb6941d5d985ccb3453a2ac5c92f60e4 (diff) |
ioatdma: channel reset scheme fixup on Intel Atom S1200 platforms
The Intel Atom S1200 family ioatdma changed the channel reset behavior.
It does a reset similar to PCI FLR by resetting all the MSIX
registers. We have to re-init msix interrupts because of this. This
workaround is only specific to this platform and is not expected to carry
over to the later generations.
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
Acked-by: Dan Williams <djbw@fb.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Diffstat (limited to 'drivers/dma/ioat/dma.h')
-rw-r--r-- | drivers/dma/ioat/dma.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/dma/ioat/dma.h b/drivers/dma/ioat/dma.h index 9285caadf825..b16902cd2684 100644 --- a/drivers/dma/ioat/dma.h +++ b/drivers/dma/ioat/dma.h | |||
@@ -48,6 +48,14 @@ | |||
48 | */ | 48 | */ |
49 | #define NULL_DESC_BUFFER_SIZE 1 | 49 | #define NULL_DESC_BUFFER_SIZE 1 |
50 | 50 | ||
51 | enum ioat_irq_mode { | ||
52 | IOAT_NOIRQ = 0, | ||
53 | IOAT_MSIX, | ||
54 | IOAT_MSIX_SINGLE, | ||
55 | IOAT_MSI, | ||
56 | IOAT_INTX | ||
57 | }; | ||
58 | |||
51 | /** | 59 | /** |
52 | * struct ioatdma_device - internal representation of a IOAT device | 60 | * struct ioatdma_device - internal representation of a IOAT device |
53 | * @pdev: PCI-Express device | 61 | * @pdev: PCI-Express device |
@@ -77,6 +85,7 @@ struct ioatdma_device { | |||
77 | struct msix_entry msix_entries[4]; | 85 | struct msix_entry msix_entries[4]; |
78 | struct ioat_chan_common *idx[4]; | 86 | struct ioat_chan_common *idx[4]; |
79 | struct dca_provider *dca; | 87 | struct dca_provider *dca; |
88 | enum ioat_irq_mode irq_mode; | ||
80 | void (*intr_quirk)(struct ioatdma_device *device); | 89 | void (*intr_quirk)(struct ioatdma_device *device); |
81 | int (*enumerate_channels)(struct ioatdma_device *device); | 90 | int (*enumerate_channels)(struct ioatdma_device *device); |
82 | int (*reset_hw)(struct ioat_chan_common *chan); | 91 | int (*reset_hw)(struct ioat_chan_common *chan); |
@@ -341,6 +350,7 @@ bool ioat_cleanup_preamble(struct ioat_chan_common *chan, | |||
341 | dma_addr_t *phys_complete); | 350 | dma_addr_t *phys_complete); |
342 | void ioat_kobject_add(struct ioatdma_device *device, struct kobj_type *type); | 351 | void ioat_kobject_add(struct ioatdma_device *device, struct kobj_type *type); |
343 | void ioat_kobject_del(struct ioatdma_device *device); | 352 | void ioat_kobject_del(struct ioatdma_device *device); |
353 | int ioat_dma_setup_interrupts(struct ioatdma_device *device); | ||
344 | extern const struct sysfs_ops ioat_sysfs_ops; | 354 | extern const struct sysfs_ops ioat_sysfs_ops; |
345 | extern struct ioat_sysfs_entry ioat_version_attr; | 355 | extern struct ioat_sysfs_entry ioat_version_attr; |
346 | extern struct ioat_sysfs_entry ioat_cap_attr; | 356 | extern struct ioat_sysfs_entry ioat_cap_attr; |