diff options
author | Dave Jiang <dave.jiang@intel.com> | 2013-03-26 15:42:41 -0700 |
---|---|---|
committer | Vinod Koul <vinod.koul@intel.com> | 2013-04-15 09:51:20 +0530 |
commit | d92a8d7cbb6941d5d985ccb3453a2ac5c92f60e4 (patch) | |
tree | 37146d568d6022714cfc3a65d90f12eaf12fba13 /drivers/dma/ioat | |
parent | 0132bcef76301a8dc7794c893fd9342a04059082 (diff) | |
download | op-kernel-dev-d92a8d7cbb6941d5d985ccb3453a2ac5c92f60e4.zip op-kernel-dev-d92a8d7cbb6941d5d985ccb3453a2ac5c92f60e4.tar.gz |
ioatdma: Add 64bit chansts register read for ioat v3.3.
The channel status register for v3.3 is now 64bit. Use readq if available
on v3.3 platforms.
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')
-rw-r--r-- | drivers/dma/ioat/dma.h | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/drivers/dma/ioat/dma.h b/drivers/dma/ioat/dma.h index 95ae7b3..9285caa 100644 --- a/drivers/dma/ioat/dma.h +++ b/drivers/dma/ioat/dma.h @@ -201,7 +201,7 @@ ioat_chan_by_index(struct ioatdma_device *device, int index) return device->idx[index]; } -static inline u64 ioat_chansts(struct ioat_chan_common *chan) +static inline u64 ioat_chansts_32(struct ioat_chan_common *chan) { u8 ver = chan->device->version; u64 status; @@ -218,6 +218,26 @@ static inline u64 ioat_chansts(struct ioat_chan_common *chan) return status; } +#if BITS_PER_LONG == 64 + +static inline u64 ioat_chansts(struct ioat_chan_common *chan) +{ + u8 ver = chan->device->version; + u64 status; + + /* With IOAT v3.3 the status register is 64bit. */ + if (ver >= IOAT_VER_3_3) + status = readq(chan->reg_base + IOAT_CHANSTS_OFFSET(ver)); + else + status = ioat_chansts_32(chan); + + return status; +} + +#else +#define ioat_chansts ioat_chansts_32 +#endif + static inline void ioat_start(struct ioat_chan_common *chan) { u8 ver = chan->device->version; |