Linux Audio

Check our new training course

Loading...
   1/*
   2 * Intel I/OAT DMA Linux driver
   3 * Copyright(c) 2004 - 2009 Intel Corporation.
   4 *
   5 * This program is free software; you can redistribute it and/or modify it
   6 * under the terms and conditions of the GNU General Public License,
   7 * version 2, as published by the Free Software Foundation.
   8 *
   9 * This program is distributed in the hope that it will be useful, but WITHOUT
  10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  12 * more details.
  13 *
  14 * You should have received a copy of the GNU General Public License along with
  15 * this program; if not, write to the Free Software Foundation, Inc.,
  16 * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
  17 *
  18 * The full GNU General Public License is included in this distribution in
  19 * the file called "COPYING".
  20 *
  21 */
  22
  23/*
  24 * This driver supports an Intel I/OAT DMA engine, which does asynchronous
  25 * copy operations.
  26 */
  27
  28#include <linux/init.h>
  29#include <linux/module.h>
  30#include <linux/slab.h>
  31#include <linux/pci.h>
  32#include <linux/interrupt.h>
  33#include <linux/dmaengine.h>
  34#include <linux/delay.h>
  35#include <linux/dma-mapping.h>
  36#include <linux/workqueue.h>
  37#include <linux/prefetch.h>
  38#include <linux/i7300_idle.h>
  39#include "dma.h"
  40#include "registers.h"
  41#include "hw.h"
  42
  43#include "../dmaengine.h"
  44
  45int ioat_pending_level = 4;
  46module_param(ioat_pending_level, int, 0644);
  47MODULE_PARM_DESC(ioat_pending_level,
  48		 "high-water mark for pushing ioat descriptors (default: 4)");
  49
  50/* internal functions */
  51static void ioat1_cleanup(struct ioat_dma_chan *ioat);
  52static void ioat1_dma_start_null_desc(struct ioat_dma_chan *ioat);
  53
  54/**
  55 * ioat_dma_do_interrupt - handler used for single vector interrupt mode
  56 * @irq: interrupt id
  57 * @data: interrupt data
  58 */
  59static irqreturn_t ioat_dma_do_interrupt(int irq, void *data)
  60{
  61	struct ioatdma_device *instance = data;
  62	struct ioat_chan_common *chan;
  63	unsigned long attnstatus;
  64	int bit;
  65	u8 intrctrl;
  66
  67	intrctrl = readb(instance->reg_base + IOAT_INTRCTRL_OFFSET);
  68
  69	if (!(intrctrl & IOAT_INTRCTRL_MASTER_INT_EN))
  70		return IRQ_NONE;
  71
  72	if (!(intrctrl & IOAT_INTRCTRL_INT_STATUS)) {
  73		writeb(intrctrl, instance->reg_base + IOAT_INTRCTRL_OFFSET);
  74		return IRQ_NONE;
  75	}
  76
  77	attnstatus = readl(instance->reg_base + IOAT_ATTNSTATUS_OFFSET);
  78	for_each_set_bit(bit, &attnstatus, BITS_PER_LONG) {
  79		chan = ioat_chan_by_index(instance, bit);
  80		tasklet_schedule(&chan->cleanup_task);
  81	}
  82
  83	writeb(intrctrl, instance->reg_base + IOAT_INTRCTRL_OFFSET);
  84	return IRQ_HANDLED;
  85}
  86
  87/**
  88 * ioat_dma_do_interrupt_msix - handler used for vector-per-channel interrupt mode
  89 * @irq: interrupt id
  90 * @data: interrupt data
  91 */
  92static irqreturn_t ioat_dma_do_interrupt_msix(int irq, void *data)
  93{
  94	struct ioat_chan_common *chan = data;
  95
  96	tasklet_schedule(&chan->cleanup_task);
  97
  98	return IRQ_HANDLED;
  99}
 100
 101/* common channel initialization */
 102void ioat_init_channel(struct ioatdma_device *device, struct ioat_chan_common *chan, int idx)
 103{
 104	struct dma_device *dma = &device->common;
 105	struct dma_chan *c = &chan->common;
 106	unsigned long data = (unsigned long) c;
 107
 108	chan->device = device;
 109	chan->reg_base = device->reg_base + (0x80 * (idx + 1));
 110	spin_lock_init(&chan->cleanup_lock);
 111	chan->common.device = dma;
 112	dma_cookie_init(&chan->common);
 113	list_add_tail(&chan->common.device_node, &dma->channels);
 114	device->idx[idx] = chan;
 115	init_timer(&chan->timer);
 116	chan->timer.function = device->timer_fn;
 117	chan->timer.data = data;
 118	tasklet_init(&chan->cleanup_task, device->cleanup_fn, data);
 119	tasklet_disable(&chan->cleanup_task);
 120}
 121
 122/**
 123 * ioat1_dma_enumerate_channels - find and initialize the device's channels
 124 * @device: the device to be enumerated
 125 */
 126static int ioat1_enumerate_channels(struct ioatdma_device *device)
 127{
 128	u8 xfercap_scale;
 129	u32 xfercap;
 130	int i;
 131	struct ioat_dma_chan *ioat;
 132	struct device *dev = &device->pdev->dev;
 133	struct dma_device *dma = &device->common;
 134
 135	INIT_LIST_HEAD(&dma->channels);
 136	dma->chancnt = readb(device->reg_base + IOAT_CHANCNT_OFFSET);
 137	dma->chancnt &= 0x1f; /* bits [4:0] valid */
 138	if (dma->chancnt > ARRAY_SIZE(device->idx)) {
 139		dev_warn(dev, "(%d) exceeds max supported channels (%zu)\n",
 140			 dma->chancnt, ARRAY_SIZE(device->idx));
 141		dma->chancnt = ARRAY_SIZE(device->idx);
 142	}
 143	xfercap_scale = readb(device->reg_base + IOAT_XFERCAP_OFFSET);
 144	xfercap_scale &= 0x1f; /* bits [4:0] valid */
 145	xfercap = (xfercap_scale == 0 ? -1 : (1UL << xfercap_scale));
 146	dev_dbg(dev, "%s: xfercap = %d\n", __func__, xfercap);
 147
 148#ifdef  CONFIG_I7300_IDLE_IOAT_CHANNEL
 149	if (i7300_idle_platform_probe(NULL, NULL, 1) == 0)
 150		dma->chancnt--;
 151#endif
 152	for (i = 0; i < dma->chancnt; i++) {
 153		ioat = devm_kzalloc(dev, sizeof(*ioat), GFP_KERNEL);
 154		if (!ioat)
 155			break;
 156
 157		ioat_init_channel(device, &ioat->base, i);
 158		ioat->xfercap = xfercap;
 159		spin_lock_init(&ioat->desc_lock);
 160		INIT_LIST_HEAD(&ioat->free_desc);
 161		INIT_LIST_HEAD(&ioat->used_desc);
 162	}
 163	dma->chancnt = i;
 164	return i;
 165}
 166
 167/**
 168 * ioat_dma_memcpy_issue_pending - push potentially unrecognized appended
 169 *                                 descriptors to hw
 170 * @chan: DMA channel handle
 171 */
 172static inline void
 173__ioat1_dma_memcpy_issue_pending(struct ioat_dma_chan *ioat)
 174{
 175	void __iomem *reg_base = ioat->base.reg_base;
 176
 177	dev_dbg(to_dev(&ioat->base), "%s: pending: %d\n",
 178		__func__, ioat->pending);
 179	ioat->pending = 0;
 180	writeb(IOAT_CHANCMD_APPEND, reg_base + IOAT1_CHANCMD_OFFSET);
 181}
 182
 183static void ioat1_dma_memcpy_issue_pending(struct dma_chan *chan)
 184{
 185	struct ioat_dma_chan *ioat = to_ioat_chan(chan);
 186
 187	if (ioat->pending > 0) {
 188		spin_lock_bh(&ioat->desc_lock);
 189		__ioat1_dma_memcpy_issue_pending(ioat);
 190		spin_unlock_bh(&ioat->desc_lock);
 191	}
 192}
 193
 194/**
 195 * ioat1_reset_channel - restart a channel
 196 * @ioat: IOAT DMA channel handle
 197 */
 198static void ioat1_reset_channel(struct ioat_dma_chan *ioat)
 199{
 200	struct ioat_chan_common *chan = &ioat->base;
 201	void __iomem *reg_base = chan->reg_base;
 202	u32 chansts, chanerr;
 203
 204	dev_warn(to_dev(chan), "reset\n");
 205	chanerr = readl(reg_base + IOAT_CHANERR_OFFSET);
 206	chansts = *chan->completion & IOAT_CHANSTS_STATUS;
 207	if (chanerr) {
 208		dev_err(to_dev(chan),
 209			"chan%d, CHANSTS = 0x%08x CHANERR = 0x%04x, clearing\n",
 210			chan_num(chan), chansts, chanerr);
 211		writel(chanerr, reg_base + IOAT_CHANERR_OFFSET);
 212	}
 213
 214	/*
 215	 * whack it upside the head with a reset
 216	 * and wait for things to settle out.
 217	 * force the pending count to a really big negative
 218	 * to make sure no one forces an issue_pending
 219	 * while we're waiting.
 220	 */
 221
 222	ioat->pending = INT_MIN;
 223	writeb(IOAT_CHANCMD_RESET,
 224	       reg_base + IOAT_CHANCMD_OFFSET(chan->device->version));
 225	set_bit(IOAT_RESET_PENDING, &chan->state);
 226	mod_timer(&chan->timer, jiffies + RESET_DELAY);
 227}
 228
 229static dma_cookie_t ioat1_tx_submit(struct dma_async_tx_descriptor *tx)
 230{
 231	struct dma_chan *c = tx->chan;
 232	struct ioat_dma_chan *ioat = to_ioat_chan(c);
 233	struct ioat_desc_sw *desc = tx_to_ioat_desc(tx);
 234	struct ioat_chan_common *chan = &ioat->base;
 235	struct ioat_desc_sw *first;
 236	struct ioat_desc_sw *chain_tail;
 237	dma_cookie_t cookie;
 238
 239	spin_lock_bh(&ioat->desc_lock);
 240	/* cookie incr and addition to used_list must be atomic */
 241	cookie = dma_cookie_assign(tx);
 242	dev_dbg(to_dev(&ioat->base), "%s: cookie: %d\n", __func__, cookie);
 243
 244	/* write address into NextDescriptor field of last desc in chain */
 245	first = to_ioat_desc(desc->tx_list.next);
 246	chain_tail = to_ioat_desc(ioat->used_desc.prev);
 247	/* make descriptor updates globally visible before chaining */
 248	wmb();
 249	chain_tail->hw->next = first->txd.phys;
 250	list_splice_tail_init(&desc->tx_list, &ioat->used_desc);
 251	dump_desc_dbg(ioat, chain_tail);
 252	dump_desc_dbg(ioat, first);
 253
 254	if (!test_and_set_bit(IOAT_COMPLETION_PENDING, &chan->state))
 255		mod_timer(&chan->timer, jiffies + COMPLETION_TIMEOUT);
 256
 257	ioat->active += desc->hw->tx_cnt;
 258	ioat->pending += desc->hw->tx_cnt;
 259	if (ioat->pending >= ioat_pending_level)
 260		__ioat1_dma_memcpy_issue_pending(ioat);
 261	spin_unlock_bh(&ioat->desc_lock);
 262
 263	return cookie;
 264}
 265
 266/**
 267 * ioat_dma_alloc_descriptor - allocate and return a sw and hw descriptor pair
 268 * @ioat: the channel supplying the memory pool for the descriptors
 269 * @flags: allocation flags
 270 */
 271static struct ioat_desc_sw *
 272ioat_dma_alloc_descriptor(struct ioat_dma_chan *ioat, gfp_t flags)
 273{
 274	struct ioat_dma_descriptor *desc;
 275	struct ioat_desc_sw *desc_sw;
 276	struct ioatdma_device *ioatdma_device;
 277	dma_addr_t phys;
 278
 279	ioatdma_device = ioat->base.device;
 280	desc = pci_pool_alloc(ioatdma_device->dma_pool, flags, &phys);
 281	if (unlikely(!desc))
 282		return NULL;
 283
 284	desc_sw = kzalloc(sizeof(*desc_sw), flags);
 285	if (unlikely(!desc_sw)) {
 286		pci_pool_free(ioatdma_device->dma_pool, desc, phys);
 287		return NULL;
 288	}
 289
 290	memset(desc, 0, sizeof(*desc));
 291
 292	INIT_LIST_HEAD(&desc_sw->tx_list);
 293	dma_async_tx_descriptor_init(&desc_sw->txd, &ioat->base.common);
 294	desc_sw->txd.tx_submit = ioat1_tx_submit;
 295	desc_sw->hw = desc;
 296	desc_sw->txd.phys = phys;
 297	set_desc_id(desc_sw, -1);
 298
 299	return desc_sw;
 300}
 301
 302static int ioat_initial_desc_count = 256;
 303module_param(ioat_initial_desc_count, int, 0644);
 304MODULE_PARM_DESC(ioat_initial_desc_count,
 305		 "ioat1: initial descriptors per channel (default: 256)");
 306/**
 307 * ioat1_dma_alloc_chan_resources - returns the number of allocated descriptors
 308 * @chan: the channel to be filled out
 309 */
 310static int ioat1_dma_alloc_chan_resources(struct dma_chan *c)
 311{
 312	struct ioat_dma_chan *ioat = to_ioat_chan(c);
 313	struct ioat_chan_common *chan = &ioat->base;
 314	struct ioat_desc_sw *desc;
 315	u32 chanerr;
 316	int i;
 317	LIST_HEAD(tmp_list);
 318
 319	/* have we already been set up? */
 320	if (!list_empty(&ioat->free_desc))
 321		return ioat->desccount;
 322
 323	/* Setup register to interrupt and write completion status on error */
 324	writew(IOAT_CHANCTRL_RUN, chan->reg_base + IOAT_CHANCTRL_OFFSET);
 325
 326	chanerr = readl(chan->reg_base + IOAT_CHANERR_OFFSET);
 327	if (chanerr) {
 328		dev_err(to_dev(chan), "CHANERR = %x, clearing\n", chanerr);
 329		writel(chanerr, chan->reg_base + IOAT_CHANERR_OFFSET);
 330	}
 331
 332	/* Allocate descriptors */
 333	for (i = 0; i < ioat_initial_desc_count; i++) {
 334		desc = ioat_dma_alloc_descriptor(ioat, GFP_KERNEL);
 335		if (!desc) {
 336			dev_err(to_dev(chan), "Only %d initial descriptors\n", i);
 337			break;
 338		}
 339		set_desc_id(desc, i);
 340		list_add_tail(&desc->node, &tmp_list);
 341	}
 342	spin_lock_bh(&ioat->desc_lock);
 343	ioat->desccount = i;
 344	list_splice(&tmp_list, &ioat->free_desc);
 345	spin_unlock_bh(&ioat->desc_lock);
 346
 347	/* allocate a completion writeback area */
 348	/* doing 2 32bit writes to mmio since 1 64b write doesn't work */
 349	chan->completion = pci_pool_alloc(chan->device->completion_pool,
 350					  GFP_KERNEL, &chan->completion_dma);
 351	memset(chan->completion, 0, sizeof(*chan->completion));
 352	writel(((u64) chan->completion_dma) & 0x00000000FFFFFFFF,
 353	       chan->reg_base + IOAT_CHANCMP_OFFSET_LOW);
 354	writel(((u64) chan->completion_dma) >> 32,
 355	       chan->reg_base + IOAT_CHANCMP_OFFSET_HIGH);
 356
 357	tasklet_enable(&chan->cleanup_task);
 358	ioat1_dma_start_null_desc(ioat);  /* give chain to dma device */
 359	dev_dbg(to_dev(chan), "%s: allocated %d descriptors\n",
 360		__func__, ioat->desccount);
 361	return ioat->desccount;
 362}
 363
 364/**
 365 * ioat1_dma_free_chan_resources - release all the descriptors
 366 * @chan: the channel to be cleaned
 367 */
 368static void ioat1_dma_free_chan_resources(struct dma_chan *c)
 369{
 370	struct ioat_dma_chan *ioat = to_ioat_chan(c);
 371	struct ioat_chan_common *chan = &ioat->base;
 372	struct ioatdma_device *ioatdma_device = chan->device;
 373	struct ioat_desc_sw *desc, *_desc;
 374	int in_use_descs = 0;
 375
 376	/* Before freeing channel resources first check
 377	 * if they have been previously allocated for this channel.
 378	 */
 379	if (ioat->desccount == 0)
 380		return;
 381
 382	tasklet_disable(&chan->cleanup_task);
 383	del_timer_sync(&chan->timer);
 384	ioat1_cleanup(ioat);
 385
 386	/* Delay 100ms after reset to allow internal DMA logic to quiesce
 387	 * before removing DMA descriptor resources.
 388	 */
 389	writeb(IOAT_CHANCMD_RESET,
 390	       chan->reg_base + IOAT_CHANCMD_OFFSET(chan->device->version));
 391	mdelay(100);
 392
 393	spin_lock_bh(&ioat->desc_lock);
 394	list_for_each_entry_safe(desc, _desc, &ioat->used_desc, node) {
 395		dev_dbg(to_dev(chan), "%s: freeing %d from used list\n",
 396			__func__, desc_id(desc));
 397		dump_desc_dbg(ioat, desc);
 398		in_use_descs++;
 399		list_del(&desc->node);
 400		pci_pool_free(ioatdma_device->dma_pool, desc->hw,
 401			      desc->txd.phys);
 402		kfree(desc);
 403	}
 404	list_for_each_entry_safe(desc, _desc,
 405				 &ioat->free_desc, node) {
 406		list_del(&desc->node);
 407		pci_pool_free(ioatdma_device->dma_pool, desc->hw,
 408			      desc->txd.phys);
 409		kfree(desc);
 410	}
 411	spin_unlock_bh(&ioat->desc_lock);
 412
 413	pci_pool_free(ioatdma_device->completion_pool,
 414		      chan->completion,
 415		      chan->completion_dma);
 416
 417	/* one is ok since we left it on there on purpose */
 418	if (in_use_descs > 1)
 419		dev_err(to_dev(chan), "Freeing %d in use descriptors!\n",
 420			in_use_descs - 1);
 421
 422	chan->last_completion = 0;
 423	chan->completion_dma = 0;
 424	ioat->pending = 0;
 425	ioat->desccount = 0;
 426}
 427
 428/**
 429 * ioat1_dma_get_next_descriptor - return the next available descriptor
 430 * @ioat: IOAT DMA channel handle
 431 *
 432 * Gets the next descriptor from the chain, and must be called with the
 433 * channel's desc_lock held.  Allocates more descriptors if the channel
 434 * has run out.
 435 */
 436static struct ioat_desc_sw *
 437ioat1_dma_get_next_descriptor(struct ioat_dma_chan *ioat)
 438{
 439	struct ioat_desc_sw *new;
 440
 441	if (!list_empty(&ioat->free_desc)) {
 442		new = to_ioat_desc(ioat->free_desc.next);
 443		list_del(&new->node);
 444	} else {
 445		/* try to get another desc */
 446		new = ioat_dma_alloc_descriptor(ioat, GFP_ATOMIC);
 447		if (!new) {
 448			dev_err(to_dev(&ioat->base), "alloc failed\n");
 449			return NULL;
 450		}
 451	}
 452	dev_dbg(to_dev(&ioat->base), "%s: allocated: %d\n",
 453		__func__, desc_id(new));
 454	prefetch(new->hw);
 455	return new;
 456}
 457
 458static struct dma_async_tx_descriptor *
 459ioat1_dma_prep_memcpy(struct dma_chan *c, dma_addr_t dma_dest,
 460		      dma_addr_t dma_src, size_t len, unsigned long flags)
 461{
 462	struct ioat_dma_chan *ioat = to_ioat_chan(c);
 463	struct ioat_desc_sw *desc;
 464	size_t copy;
 465	LIST_HEAD(chain);
 466	dma_addr_t src = dma_src;
 467	dma_addr_t dest = dma_dest;
 468	size_t total_len = len;
 469	struct ioat_dma_descriptor *hw = NULL;
 470	int tx_cnt = 0;
 471
 472	spin_lock_bh(&ioat->desc_lock);
 473	desc = ioat1_dma_get_next_descriptor(ioat);
 474	do {
 475		if (!desc)
 476			break;
 477
 478		tx_cnt++;
 479		copy = min_t(size_t, len, ioat->xfercap);
 480
 481		hw = desc->hw;
 482		hw->size = copy;
 483		hw->ctl = 0;
 484		hw->src_addr = src;
 485		hw->dst_addr = dest;
 486
 487		list_add_tail(&desc->node, &chain);
 488
 489		len -= copy;
 490		dest += copy;
 491		src += copy;
 492		if (len) {
 493			struct ioat_desc_sw *next;
 494
 495			async_tx_ack(&desc->txd);
 496			next = ioat1_dma_get_next_descriptor(ioat);
 497			hw->next = next ? next->txd.phys : 0;
 498			dump_desc_dbg(ioat, desc);
 499			desc = next;
 500		} else
 501			hw->next = 0;
 502	} while (len);
 503
 504	if (!desc) {
 505		struct ioat_chan_common *chan = &ioat->base;
 506
 507		dev_err(to_dev(chan),
 508			"chan%d - get_next_desc failed\n", chan_num(chan));
 509		list_splice(&chain, &ioat->free_desc);
 510		spin_unlock_bh(&ioat->desc_lock);
 511		return NULL;
 512	}
 513	spin_unlock_bh(&ioat->desc_lock);
 514
 515	desc->txd.flags = flags;
 516	desc->len = total_len;
 517	list_splice(&chain, &desc->tx_list);
 518	hw->ctl_f.int_en = !!(flags & DMA_PREP_INTERRUPT);
 519	hw->ctl_f.compl_write = 1;
 520	hw->tx_cnt = tx_cnt;
 521	dump_desc_dbg(ioat, desc);
 522
 523	return &desc->txd;
 524}
 525
 526static void ioat1_cleanup_event(unsigned long data)
 527{
 528	struct ioat_dma_chan *ioat = to_ioat_chan((void *) data);
 529
 530	ioat1_cleanup(ioat);
 531	writew(IOAT_CHANCTRL_RUN, ioat->base.reg_base + IOAT_CHANCTRL_OFFSET);
 532}
 533
 534void ioat_dma_unmap(struct ioat_chan_common *chan, enum dma_ctrl_flags flags,
 535		    size_t len, struct ioat_dma_descriptor *hw)
 536{
 537	struct pci_dev *pdev = chan->device->pdev;
 538	size_t offset = len - hw->size;
 539
 540	if (!(flags & DMA_COMPL_SKIP_DEST_UNMAP))
 541		ioat_unmap(pdev, hw->dst_addr - offset, len,
 542			   PCI_DMA_FROMDEVICE, flags, 1);
 543
 544	if (!(flags & DMA_COMPL_SKIP_SRC_UNMAP))
 545		ioat_unmap(pdev, hw->src_addr - offset, len,
 546			   PCI_DMA_TODEVICE, flags, 0);
 547}
 548
 549dma_addr_t ioat_get_current_completion(struct ioat_chan_common *chan)
 550{
 551	dma_addr_t phys_complete;
 552	u64 completion;
 553
 554	completion = *chan->completion;
 555	phys_complete = ioat_chansts_to_addr(completion);
 556
 557	dev_dbg(to_dev(chan), "%s: phys_complete: %#llx\n", __func__,
 558		(unsigned long long) phys_complete);
 559
 560	if (is_ioat_halted(completion)) {
 561		u32 chanerr = readl(chan->reg_base + IOAT_CHANERR_OFFSET);
 562		dev_err(to_dev(chan), "Channel halted, chanerr = %x\n",
 563			chanerr);
 564
 565		/* TODO do something to salvage the situation */
 566	}
 567
 568	return phys_complete;
 569}
 570
 571bool ioat_cleanup_preamble(struct ioat_chan_common *chan,
 572			   dma_addr_t *phys_complete)
 573{
 574	*phys_complete = ioat_get_current_completion(chan);
 575	if (*phys_complete == chan->last_completion)
 576		return false;
 577	clear_bit(IOAT_COMPLETION_ACK, &chan->state);
 578	mod_timer(&chan->timer, jiffies + COMPLETION_TIMEOUT);
 579
 580	return true;
 581}
 582
 583static void __cleanup(struct ioat_dma_chan *ioat, dma_addr_t phys_complete)
 584{
 585	struct ioat_chan_common *chan = &ioat->base;
 586	struct list_head *_desc, *n;
 587	struct dma_async_tx_descriptor *tx;
 588
 589	dev_dbg(to_dev(chan), "%s: phys_complete: %llx\n",
 590		 __func__, (unsigned long long) phys_complete);
 591	list_for_each_safe(_desc, n, &ioat->used_desc) {
 592		struct ioat_desc_sw *desc;
 593
 594		prefetch(n);
 595		desc = list_entry(_desc, typeof(*desc), node);
 596		tx = &desc->txd;
 597		/*
 598		 * Incoming DMA requests may use multiple descriptors,
 599		 * due to exceeding xfercap, perhaps. If so, only the
 600		 * last one will have a cookie, and require unmapping.
 601		 */
 602		dump_desc_dbg(ioat, desc);
 603		if (tx->cookie) {
 604			dma_cookie_complete(tx);
 605			ioat_dma_unmap(chan, tx->flags, desc->len, desc->hw);
 606			ioat->active -= desc->hw->tx_cnt;
 607			if (tx->callback) {
 608				tx->callback(tx->callback_param);
 609				tx->callback = NULL;
 610			}
 611		}
 612
 613		if (tx->phys != phys_complete) {
 614			/*
 615			 * a completed entry, but not the last, so clean
 616			 * up if the client is done with the descriptor
 617			 */
 618			if (async_tx_test_ack(tx))
 619				list_move_tail(&desc->node, &ioat->free_desc);
 620		} else {
 621			/*
 622			 * last used desc. Do not remove, so we can
 623			 * append from it.
 624			 */
 625
 626			/* if nothing else is pending, cancel the
 627			 * completion timeout
 628			 */
 629			if (n == &ioat->used_desc) {
 630				dev_dbg(to_dev(chan),
 631					"%s cancel completion timeout\n",
 632					__func__);
 633				clear_bit(IOAT_COMPLETION_PENDING, &chan->state);
 634			}
 635
 636			/* TODO check status bits? */
 637			break;
 638		}
 639	}
 640
 641	chan->last_completion = phys_complete;
 642}
 643
 644/**
 645 * ioat1_cleanup - cleanup up finished descriptors
 646 * @chan: ioat channel to be cleaned up
 647 *
 648 * To prevent lock contention we defer cleanup when the locks are
 649 * contended with a terminal timeout that forces cleanup and catches
 650 * completion notification errors.
 651 */
 652static void ioat1_cleanup(struct ioat_dma_chan *ioat)
 653{
 654	struct ioat_chan_common *chan = &ioat->base;
 655	dma_addr_t phys_complete;
 656
 657	prefetch(chan->completion);
 658
 659	if (!spin_trylock_bh(&chan->cleanup_lock))
 660		return;
 661
 662	if (!ioat_cleanup_preamble(chan, &phys_complete)) {
 663		spin_unlock_bh(&chan->cleanup_lock);
 664		return;
 665	}
 666
 667	if (!spin_trylock_bh(&ioat->desc_lock)) {
 668		spin_unlock_bh(&chan->cleanup_lock);
 669		return;
 670	}
 671
 672	__cleanup(ioat, phys_complete);
 673
 674	spin_unlock_bh(&ioat->desc_lock);
 675	spin_unlock_bh(&chan->cleanup_lock);
 676}
 677
 678static void ioat1_timer_event(unsigned long data)
 679{
 680	struct ioat_dma_chan *ioat = to_ioat_chan((void *) data);
 681	struct ioat_chan_common *chan = &ioat->base;
 682
 683	dev_dbg(to_dev(chan), "%s: state: %lx\n", __func__, chan->state);
 684
 685	spin_lock_bh(&chan->cleanup_lock);
 686	if (test_and_clear_bit(IOAT_RESET_PENDING, &chan->state)) {
 687		struct ioat_desc_sw *desc;
 688
 689		spin_lock_bh(&ioat->desc_lock);
 690
 691		/* restart active descriptors */
 692		desc = to_ioat_desc(ioat->used_desc.prev);
 693		ioat_set_chainaddr(ioat, desc->txd.phys);
 694		ioat_start(chan);
 695
 696		ioat->pending = 0;
 697		set_bit(IOAT_COMPLETION_PENDING, &chan->state);
 698		mod_timer(&chan->timer, jiffies + COMPLETION_TIMEOUT);
 699		spin_unlock_bh(&ioat->desc_lock);
 700	} else if (test_bit(IOAT_COMPLETION_PENDING, &chan->state)) {
 701		dma_addr_t phys_complete;
 702
 703		spin_lock_bh(&ioat->desc_lock);
 704		/* if we haven't made progress and we have already
 705		 * acknowledged a pending completion once, then be more
 706		 * forceful with a restart
 707		 */
 708		if (ioat_cleanup_preamble(chan, &phys_complete))
 709			__cleanup(ioat, phys_complete);
 710		else if (test_bit(IOAT_COMPLETION_ACK, &chan->state))
 711			ioat1_reset_channel(ioat);
 712		else {
 713			u64 status = ioat_chansts(chan);
 714
 715			/* manually update the last completion address */
 716			if (ioat_chansts_to_addr(status) != 0)
 717				*chan->completion = status;
 718
 719			set_bit(IOAT_COMPLETION_ACK, &chan->state);
 720			mod_timer(&chan->timer, jiffies + COMPLETION_TIMEOUT);
 721		}
 722		spin_unlock_bh(&ioat->desc_lock);
 723	}
 724	spin_unlock_bh(&chan->cleanup_lock);
 725}
 726
 727enum dma_status
 728ioat_dma_tx_status(struct dma_chan *c, dma_cookie_t cookie,
 729		   struct dma_tx_state *txstate)
 730{
 731	struct ioat_chan_common *chan = to_chan_common(c);
 732	struct ioatdma_device *device = chan->device;
 733	enum dma_status ret;
 734
 735	ret = dma_cookie_status(c, cookie, txstate);
 736	if (ret == DMA_SUCCESS)
 737		return ret;
 738
 739	device->cleanup_fn((unsigned long) c);
 740
 741	return dma_cookie_status(c, cookie, txstate);
 742}
 743
 744static void ioat1_dma_start_null_desc(struct ioat_dma_chan *ioat)
 745{
 746	struct ioat_chan_common *chan = &ioat->base;
 747	struct ioat_desc_sw *desc;
 748	struct ioat_dma_descriptor *hw;
 749
 750	spin_lock_bh(&ioat->desc_lock);
 751
 752	desc = ioat1_dma_get_next_descriptor(ioat);
 753
 754	if (!desc) {
 755		dev_err(to_dev(chan),
 756			"Unable to start null desc - get next desc failed\n");
 757		spin_unlock_bh(&ioat->desc_lock);
 758		return;
 759	}
 760
 761	hw = desc->hw;
 762	hw->ctl = 0;
 763	hw->ctl_f.null = 1;
 764	hw->ctl_f.int_en = 1;
 765	hw->ctl_f.compl_write = 1;
 766	/* set size to non-zero value (channel returns error when size is 0) */
 767	hw->size = NULL_DESC_BUFFER_SIZE;
 768	hw->src_addr = 0;
 769	hw->dst_addr = 0;
 770	async_tx_ack(&desc->txd);
 771	hw->next = 0;
 772	list_add_tail(&desc->node, &ioat->used_desc);
 773	dump_desc_dbg(ioat, desc);
 774
 775	ioat_set_chainaddr(ioat, desc->txd.phys);
 776	ioat_start(chan);
 777	spin_unlock_bh(&ioat->desc_lock);
 778}
 779
 780/*
 781 * Perform a IOAT transaction to verify the HW works.
 782 */
 783#define IOAT_TEST_SIZE 2000
 784
 785static void __devinit ioat_dma_test_callback(void *dma_async_param)
 786{
 787	struct completion *cmp = dma_async_param;
 788
 789	complete(cmp);
 790}
 791
 792/**
 793 * ioat_dma_self_test - Perform a IOAT transaction to verify the HW works.
 794 * @device: device to be tested
 795 */
 796int __devinit ioat_dma_self_test(struct ioatdma_device *device)
 797{
 798	int i;
 799	u8 *src;
 800	u8 *dest;
 801	struct dma_device *dma = &device->common;
 802	struct device *dev = &device->pdev->dev;
 803	struct dma_chan *dma_chan;
 804	struct dma_async_tx_descriptor *tx;
 805	dma_addr_t dma_dest, dma_src;
 806	dma_cookie_t cookie;
 807	int err = 0;
 808	struct completion cmp;
 809	unsigned long tmo;
 810	unsigned long flags;
 811
 812	src = kzalloc(sizeof(u8) * IOAT_TEST_SIZE, GFP_KERNEL);
 813	if (!src)
 814		return -ENOMEM;
 815	dest = kzalloc(sizeof(u8) * IOAT_TEST_SIZE, GFP_KERNEL);
 816	if (!dest) {
 817		kfree(src);
 818		return -ENOMEM;
 819	}
 820
 821	/* Fill in src buffer */
 822	for (i = 0; i < IOAT_TEST_SIZE; i++)
 823		src[i] = (u8)i;
 824
 825	/* Start copy, using first DMA channel */
 826	dma_chan = container_of(dma->channels.next, struct dma_chan,
 827				device_node);
 828	if (dma->device_alloc_chan_resources(dma_chan) < 1) {
 829		dev_err(dev, "selftest cannot allocate chan resource\n");
 830		err = -ENODEV;
 831		goto out;
 832	}
 833
 834	dma_src = dma_map_single(dev, src, IOAT_TEST_SIZE, DMA_TO_DEVICE);
 835	dma_dest = dma_map_single(dev, dest, IOAT_TEST_SIZE, DMA_FROM_DEVICE);
 836	flags = DMA_COMPL_SRC_UNMAP_SINGLE | DMA_COMPL_DEST_UNMAP_SINGLE |
 837		DMA_PREP_INTERRUPT;
 838	tx = device->common.device_prep_dma_memcpy(dma_chan, dma_dest, dma_src,
 839						   IOAT_TEST_SIZE, flags);
 840	if (!tx) {
 841		dev_err(dev, "Self-test prep failed, disabling\n");
 842		err = -ENODEV;
 843		goto free_resources;
 844	}
 845
 846	async_tx_ack(tx);
 847	init_completion(&cmp);
 848	tx->callback = ioat_dma_test_callback;
 849	tx->callback_param = &cmp;
 850	cookie = tx->tx_submit(tx);
 851	if (cookie < 0) {
 852		dev_err(dev, "Self-test setup failed, disabling\n");
 853		err = -ENODEV;
 854		goto free_resources;
 855	}
 856	dma->device_issue_pending(dma_chan);
 857
 858	tmo = wait_for_completion_timeout(&cmp, msecs_to_jiffies(3000));
 859
 860	if (tmo == 0 ||
 861	    dma->device_tx_status(dma_chan, cookie, NULL)
 862					!= DMA_SUCCESS) {
 863		dev_err(dev, "Self-test copy timed out, disabling\n");
 864		err = -ENODEV;
 865		goto free_resources;
 866	}
 867	if (memcmp(src, dest, IOAT_TEST_SIZE)) {
 868		dev_err(dev, "Self-test copy failed compare, disabling\n");
 869		err = -ENODEV;
 870		goto free_resources;
 871	}
 872
 873free_resources:
 874	dma->device_free_chan_resources(dma_chan);
 875out:
 876	kfree(src);
 877	kfree(dest);
 878	return err;
 879}
 880
 881static char ioat_interrupt_style[32] = "msix";
 882module_param_string(ioat_interrupt_style, ioat_interrupt_style,
 883		    sizeof(ioat_interrupt_style), 0644);
 884MODULE_PARM_DESC(ioat_interrupt_style,
 885		 "set ioat interrupt style: msix (default), "
 886		 "msix-single-vector, msi, intx)");
 887
 888/**
 889 * ioat_dma_setup_interrupts - setup interrupt handler
 890 * @device: ioat device
 891 */
 892static int ioat_dma_setup_interrupts(struct ioatdma_device *device)
 893{
 894	struct ioat_chan_common *chan;
 895	struct pci_dev *pdev = device->pdev;
 896	struct device *dev = &pdev->dev;
 897	struct msix_entry *msix;
 898	int i, j, msixcnt;
 899	int err = -EINVAL;
 900	u8 intrctrl = 0;
 901
 902	if (!strcmp(ioat_interrupt_style, "msix"))
 903		goto msix;
 904	if (!strcmp(ioat_interrupt_style, "msix-single-vector"))
 905		goto msix_single_vector;
 906	if (!strcmp(ioat_interrupt_style, "msi"))
 907		goto msi;
 908	if (!strcmp(ioat_interrupt_style, "intx"))
 909		goto intx;
 910	dev_err(dev, "invalid ioat_interrupt_style %s\n", ioat_interrupt_style);
 911	goto err_no_irq;
 912
 913msix:
 914	/* The number of MSI-X vectors should equal the number of channels */
 915	msixcnt = device->common.chancnt;
 916	for (i = 0; i < msixcnt; i++)
 917		device->msix_entries[i].entry = i;
 918
 919	err = pci_enable_msix(pdev, device->msix_entries, msixcnt);
 920	if (err < 0)
 921		goto msi;
 922	if (err > 0)
 923		goto msix_single_vector;
 924
 925	for (i = 0; i < msixcnt; i++) {
 926		msix = &device->msix_entries[i];
 927		chan = ioat_chan_by_index(device, i);
 928		err = devm_request_irq(dev, msix->vector,
 929				       ioat_dma_do_interrupt_msix, 0,
 930				       "ioat-msix", chan);
 931		if (err) {
 932			for (j = 0; j < i; j++) {
 933				msix = &device->msix_entries[j];
 934				chan = ioat_chan_by_index(device, j);
 935				devm_free_irq(dev, msix->vector, chan);
 936			}
 937			goto msix_single_vector;
 938		}
 939	}
 940	intrctrl |= IOAT_INTRCTRL_MSIX_VECTOR_CONTROL;
 941	goto done;
 942
 943msix_single_vector:
 944	msix = &device->msix_entries[0];
 945	msix->entry = 0;
 946	err = pci_enable_msix(pdev, device->msix_entries, 1);
 947	if (err)
 948		goto msi;
 949
 950	err = devm_request_irq(dev, msix->vector, ioat_dma_do_interrupt, 0,
 951			       "ioat-msix", device);
 952	if (err) {
 953		pci_disable_msix(pdev);
 954		goto msi;
 955	}
 956	goto done;
 957
 958msi:
 959	err = pci_enable_msi(pdev);
 960	if (err)
 961		goto intx;
 962
 963	err = devm_request_irq(dev, pdev->irq, ioat_dma_do_interrupt, 0,
 964			       "ioat-msi", device);
 965	if (err) {
 966		pci_disable_msi(pdev);
 967		goto intx;
 968	}
 969	goto done;
 970
 971intx:
 972	err = devm_request_irq(dev, pdev->irq, ioat_dma_do_interrupt,
 973			       IRQF_SHARED, "ioat-intx", device);
 974	if (err)
 975		goto err_no_irq;
 976
 977done:
 978	if (device->intr_quirk)
 979		device->intr_quirk(device);
 980	intrctrl |= IOAT_INTRCTRL_MASTER_INT_EN;
 981	writeb(intrctrl, device->reg_base + IOAT_INTRCTRL_OFFSET);
 982	return 0;
 983
 984err_no_irq:
 985	/* Disable all interrupt generation */
 986	writeb(0, device->reg_base + IOAT_INTRCTRL_OFFSET);
 987	dev_err(dev, "no usable interrupts\n");
 988	return err;
 989}
 990
 991static void ioat_disable_interrupts(struct ioatdma_device *device)
 992{
 993	/* Disable all interrupt generation */
 994	writeb(0, device->reg_base + IOAT_INTRCTRL_OFFSET);
 995}
 996
 997int __devinit ioat_probe(struct ioatdma_device *device)
 998{
 999	int err = -ENODEV;
1000	struct dma_device *dma = &device->common;
1001	struct pci_dev *pdev = device->pdev;
1002	struct device *dev = &pdev->dev;
1003
1004	/* DMA coherent memory pool for DMA descriptor allocations */
1005	device->dma_pool = pci_pool_create("dma_desc_pool", pdev,
1006					   sizeof(struct ioat_dma_descriptor),
1007					   64, 0);
1008	if (!device->dma_pool) {
1009		err = -ENOMEM;
1010		goto err_dma_pool;
1011	}
1012
1013	device->completion_pool = pci_pool_create("completion_pool", pdev,
1014						  sizeof(u64), SMP_CACHE_BYTES,
1015						  SMP_CACHE_BYTES);
1016
1017	if (!device->completion_pool) {
1018		err = -ENOMEM;
1019		goto err_completion_pool;
1020	}
1021
1022	device->enumerate_channels(device);
1023
1024	dma_cap_set(DMA_MEMCPY, dma->cap_mask);
1025	dma->dev = &pdev->dev;
1026
1027	if (!dma->chancnt) {
1028		dev_err(dev, "channel enumeration error\n");
1029		goto err_setup_interrupts;
1030	}
1031
1032	err = ioat_dma_setup_interrupts(device);
1033	if (err)
1034		goto err_setup_interrupts;
1035
1036	err = device->self_test(device);
1037	if (err)
1038		goto err_self_test;
1039
1040	return 0;
1041
1042err_self_test:
1043	ioat_disable_interrupts(device);
1044err_setup_interrupts:
1045	pci_pool_destroy(device->completion_pool);
1046err_completion_pool:
1047	pci_pool_destroy(device->dma_pool);
1048err_dma_pool:
1049	return err;
1050}
1051
1052int __devinit ioat_register(struct ioatdma_device *device)
1053{
1054	int err = dma_async_device_register(&device->common);
1055
1056	if (err) {
1057		ioat_disable_interrupts(device);
1058		pci_pool_destroy(device->completion_pool);
1059		pci_pool_destroy(device->dma_pool);
1060	}
1061
1062	return err;
1063}
1064
1065/* ioat1_intr_quirk - fix up dma ctrl register to enable / disable msi */
1066static void ioat1_intr_quirk(struct ioatdma_device *device)
1067{
1068	struct pci_dev *pdev = device->pdev;
1069	u32 dmactrl;
1070
1071	pci_read_config_dword(pdev, IOAT_PCI_DMACTRL_OFFSET, &dmactrl);
1072	if (pdev->msi_enabled)
1073		dmactrl |= IOAT_PCI_DMACTRL_MSI_EN;
1074	else
1075		dmactrl &= ~IOAT_PCI_DMACTRL_MSI_EN;
1076	pci_write_config_dword(pdev, IOAT_PCI_DMACTRL_OFFSET, dmactrl);
1077}
1078
1079static ssize_t ring_size_show(struct dma_chan *c, char *page)
1080{
1081	struct ioat_dma_chan *ioat = to_ioat_chan(c);
1082
1083	return sprintf(page, "%d\n", ioat->desccount);
1084}
1085static struct ioat_sysfs_entry ring_size_attr = __ATTR_RO(ring_size);
1086
1087static ssize_t ring_active_show(struct dma_chan *c, char *page)
1088{
1089	struct ioat_dma_chan *ioat = to_ioat_chan(c);
1090
1091	return sprintf(page, "%d\n", ioat->active);
1092}
1093static struct ioat_sysfs_entry ring_active_attr = __ATTR_RO(ring_active);
1094
1095static ssize_t cap_show(struct dma_chan *c, char *page)
1096{
1097	struct dma_device *dma = c->device;
1098
1099	return sprintf(page, "copy%s%s%s%s%s%s\n",
1100		       dma_has_cap(DMA_PQ, dma->cap_mask) ? " pq" : "",
1101		       dma_has_cap(DMA_PQ_VAL, dma->cap_mask) ? " pq_val" : "",
1102		       dma_has_cap(DMA_XOR, dma->cap_mask) ? " xor" : "",
1103		       dma_has_cap(DMA_XOR_VAL, dma->cap_mask) ? " xor_val" : "",
1104		       dma_has_cap(DMA_MEMSET, dma->cap_mask)  ? " fill" : "",
1105		       dma_has_cap(DMA_INTERRUPT, dma->cap_mask) ? " intr" : "");
1106
1107}
1108struct ioat_sysfs_entry ioat_cap_attr = __ATTR_RO(cap);
1109
1110static ssize_t version_show(struct dma_chan *c, char *page)
1111{
1112	struct dma_device *dma = c->device;
1113	struct ioatdma_device *device = to_ioatdma_device(dma);
1114
1115	return sprintf(page, "%d.%d\n",
1116		       device->version >> 4, device->version & 0xf);
1117}
1118struct ioat_sysfs_entry ioat_version_attr = __ATTR_RO(version);
1119
1120static struct attribute *ioat1_attrs[] = {
1121	&ring_size_attr.attr,
1122	&ring_active_attr.attr,
1123	&ioat_cap_attr.attr,
1124	&ioat_version_attr.attr,
1125	NULL,
1126};
1127
1128static ssize_t
1129ioat_attr_show(struct kobject *kobj, struct attribute *attr, char *page)
1130{
1131	struct ioat_sysfs_entry *entry;
1132	struct ioat_chan_common *chan;
1133
1134	entry = container_of(attr, struct ioat_sysfs_entry, attr);
1135	chan = container_of(kobj, struct ioat_chan_common, kobj);
1136
1137	if (!entry->show)
1138		return -EIO;
1139	return entry->show(&chan->common, page);
1140}
1141
1142const struct sysfs_ops ioat_sysfs_ops = {
1143	.show	= ioat_attr_show,
1144};
1145
1146static struct kobj_type ioat1_ktype = {
1147	.sysfs_ops = &ioat_sysfs_ops,
1148	.default_attrs = ioat1_attrs,
1149};
1150
1151void ioat_kobject_add(struct ioatdma_device *device, struct kobj_type *type)
1152{
1153	struct dma_device *dma = &device->common;
1154	struct dma_chan *c;
1155
1156	list_for_each_entry(c, &dma->channels, device_node) {
1157		struct ioat_chan_common *chan = to_chan_common(c);
1158		struct kobject *parent = &c->dev->device.kobj;
1159		int err;
1160
1161		err = kobject_init_and_add(&chan->kobj, type, parent, "quickdata");
1162		if (err) {
1163			dev_warn(to_dev(chan),
1164				 "sysfs init error (%d), continuing...\n", err);
1165			kobject_put(&chan->kobj);
1166			set_bit(IOAT_KOBJ_INIT_FAIL, &chan->state);
1167		}
1168	}
1169}
1170
1171void ioat_kobject_del(struct ioatdma_device *device)
1172{
1173	struct dma_device *dma = &device->common;
1174	struct dma_chan *c;
1175
1176	list_for_each_entry(c, &dma->channels, device_node) {
1177		struct ioat_chan_common *chan = to_chan_common(c);
1178
1179		if (!test_bit(IOAT_KOBJ_INIT_FAIL, &chan->state)) {
1180			kobject_del(&chan->kobj);
1181			kobject_put(&chan->kobj);
1182		}
1183	}
1184}
1185
1186int __devinit ioat1_dma_probe(struct ioatdma_device *device, int dca)
1187{
1188	struct pci_dev *pdev = device->pdev;
1189	struct dma_device *dma;
1190	int err;
1191
1192	device->intr_quirk = ioat1_intr_quirk;
1193	device->enumerate_channels = ioat1_enumerate_channels;
1194	device->self_test = ioat_dma_self_test;
1195	device->timer_fn = ioat1_timer_event;
1196	device->cleanup_fn = ioat1_cleanup_event;
1197	dma = &device->common;
1198	dma->device_prep_dma_memcpy = ioat1_dma_prep_memcpy;
1199	dma->device_issue_pending = ioat1_dma_memcpy_issue_pending;
1200	dma->device_alloc_chan_resources = ioat1_dma_alloc_chan_resources;
1201	dma->device_free_chan_resources = ioat1_dma_free_chan_resources;
1202	dma->device_tx_status = ioat_dma_tx_status;
1203
1204	err = ioat_probe(device);
1205	if (err)
1206		return err;
1207	ioat_set_tcp_copy_break(4096);
1208	err = ioat_register(device);
1209	if (err)
1210		return err;
1211	ioat_kobject_add(device, &ioat1_ktype);
1212
1213	if (dca)
1214		device->dca = ioat_dca_init(pdev, device->reg_base);
1215
1216	return err;
1217}
1218
1219void __devexit ioat_dma_remove(struct ioatdma_device *device)
1220{
1221	struct dma_device *dma = &device->common;
1222
1223	ioat_disable_interrupts(device);
1224
1225	ioat_kobject_del(device);
1226
1227	dma_async_device_unregister(dma);
1228
1229	pci_pool_destroy(device->dma_pool);
1230	pci_pool_destroy(device->completion_pool);
1231
1232	INIT_LIST_HEAD(&dma->channels);
1233}