dma.c 33.1 KB
Newer Older
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 7
 * under the terms and conditions of the GNU General Public License,
 * version 2, as published by the Free Software Foundation.
8 9 10 11 12 13 14
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 * more details.
 *
 * You should have received a copy of the GNU General Public License along with
15 16 17 18 19
 * this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * The full GNU General Public License is included in this distribution in
 * the file called "COPYING".
20 21 22 23 24 25 26 27 28 29 30 31 32 33
 *
 */

/*
 * This driver supports an Intel I/OAT DMA engine, which does asynchronous
 * copy operations.
 */

#include <linux/init.h>
#include <linux/module.h>
#include <linux/pci.h>
#include <linux/interrupt.h>
#include <linux/dmaengine.h>
#include <linux/delay.h>
34
#include <linux/dma-mapping.h>
35
#include <linux/workqueue.h>
36
#include <linux/i7300_idle.h>
D
Dan Williams 已提交
37 38 39
#include "dma.h"
#include "registers.h"
#include "hw.h"
40

41
int ioat_pending_level = 4;
42 43 44 45
module_param(ioat_pending_level, int, 0644);
MODULE_PARM_DESC(ioat_pending_level,
		 "high-water mark for pushing ioat descriptors (default: 4)");

46
/* internal functions */
47 48
static void ioat1_cleanup(struct ioat_dma_chan *ioat);
static void ioat1_dma_start_null_desc(struct ioat_dma_chan *ioat);
49 50 51 52 53 54 55 56 57

/**
 * ioat_dma_do_interrupt - handler used for single vector interrupt mode
 * @irq: interrupt id
 * @data: interrupt data
 */
static irqreturn_t ioat_dma_do_interrupt(int irq, void *data)
{
	struct ioatdma_device *instance = data;
58
	struct ioat_chan_common *chan;
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
	unsigned long attnstatus;
	int bit;
	u8 intrctrl;

	intrctrl = readb(instance->reg_base + IOAT_INTRCTRL_OFFSET);

	if (!(intrctrl & IOAT_INTRCTRL_MASTER_INT_EN))
		return IRQ_NONE;

	if (!(intrctrl & IOAT_INTRCTRL_INT_STATUS)) {
		writeb(intrctrl, instance->reg_base + IOAT_INTRCTRL_OFFSET);
		return IRQ_NONE;
	}

	attnstatus = readl(instance->reg_base + IOAT_ATTNSTATUS_OFFSET);
	for_each_bit(bit, &attnstatus, BITS_PER_LONG) {
75 76
		chan = ioat_chan_by_index(instance, bit);
		tasklet_schedule(&chan->cleanup_task);
77 78 79 80 81 82 83 84 85 86 87 88 89
	}

	writeb(intrctrl, instance->reg_base + IOAT_INTRCTRL_OFFSET);
	return IRQ_HANDLED;
}

/**
 * ioat_dma_do_interrupt_msix - handler used for vector-per-channel interrupt mode
 * @irq: interrupt id
 * @data: interrupt data
 */
static irqreturn_t ioat_dma_do_interrupt_msix(int irq, void *data)
{
90
	struct ioat_chan_common *chan = data;
91

92
	tasklet_schedule(&chan->cleanup_task);
93 94 95 96

	return IRQ_HANDLED;
}

97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
static void ioat1_cleanup_tasklet(unsigned long data);

/* common channel initialization */
void ioat_init_channel(struct ioatdma_device *device,
		       struct ioat_chan_common *chan, int idx,
		       work_func_t work_fn, void (*tasklet)(unsigned long),
		       unsigned long tasklet_data)
{
	struct dma_device *dma = &device->common;

	chan->device = device;
	chan->reg_base = device->reg_base + (0x80 * (idx + 1));
	INIT_DELAYED_WORK(&chan->work, work_fn);
	spin_lock_init(&chan->cleanup_lock);
	chan->common.device = dma;
	list_add_tail(&chan->common.device_node, &dma->channels);
	device->idx[idx] = chan;
	tasklet_init(&chan->cleanup_task, tasklet, tasklet_data);
	tasklet_disable(&chan->cleanup_task);
}

static void ioat1_reset_part2(struct work_struct *work);
119 120

/**
121
 * ioat1_dma_enumerate_channels - find and initialize the device's channels
122 123
 * @device: the device to be enumerated
 */
124
static int ioat1_enumerate_channels(struct ioatdma_device *device)
125 126 127 128
{
	u8 xfercap_scale;
	u32 xfercap;
	int i;
129
	struct ioat_dma_chan *ioat;
130
	struct device *dev = &device->pdev->dev;
131
	struct dma_device *dma = &device->common;
132

133 134
	INIT_LIST_HEAD(&dma->channels);
	dma->chancnt = readb(device->reg_base + IOAT_CHANCNT_OFFSET);
135
	xfercap_scale = readb(device->reg_base + IOAT_XFERCAP_OFFSET);
136
	xfercap = (xfercap_scale == 0 ? -1 : (1UL << xfercap_scale));
D
Dan Williams 已提交
137
	dev_dbg(dev, "%s: xfercap = %d\n", __func__, xfercap);
138

139
#ifdef  CONFIG_I7300_IDLE_IOAT_CHANNEL
140 141
	if (i7300_idle_platform_probe(NULL, NULL, 1) == 0)
		dma->chancnt--;
A
Andy Henroid 已提交
142
#endif
143
	for (i = 0; i < dma->chancnt; i++) {
144
		ioat = devm_kzalloc(dev, sizeof(*ioat), GFP_KERNEL);
145
		if (!ioat)
146 147
			break;

148 149 150 151
		ioat_init_channel(device, &ioat->base, i,
				  ioat1_reset_part2,
				  ioat1_cleanup_tasklet,
				  (unsigned long) ioat);
152 153 154 155
		ioat->xfercap = xfercap;
		spin_lock_init(&ioat->desc_lock);
		INIT_LIST_HEAD(&ioat->free_desc);
		INIT_LIST_HEAD(&ioat->used_desc);
156
	}
157 158
	dma->chancnt = i;
	return i;
159 160
}

S
Shannon Nelson 已提交
161 162 163 164 165
/**
 * ioat_dma_memcpy_issue_pending - push potentially unrecognized appended
 *                                 descriptors to hw
 * @chan: DMA channel handle
 */
166
static inline void
167
__ioat1_dma_memcpy_issue_pending(struct ioat_dma_chan *ioat)
S
Shannon Nelson 已提交
168
{
169 170
	void __iomem *reg_base = ioat->base.reg_base;

D
Dan Williams 已提交
171 172
	dev_dbg(to_dev(&ioat->base), "%s: pending: %d\n",
		__func__, ioat->pending);
173 174
	ioat->pending = 0;
	writeb(IOAT_CHANCMD_APPEND, reg_base + IOAT1_CHANCMD_OFFSET);
S
Shannon Nelson 已提交
175 176 177 178
}

static void ioat1_dma_memcpy_issue_pending(struct dma_chan *chan)
{
179
	struct ioat_dma_chan *ioat = to_ioat_chan(chan);
S
Shannon Nelson 已提交
180

181 182 183 184
	if (ioat->pending > 0) {
		spin_lock_bh(&ioat->desc_lock);
		__ioat1_dma_memcpy_issue_pending(ioat);
		spin_unlock_bh(&ioat->desc_lock);
S
Shannon Nelson 已提交
185 186 187
	}
}

188
/**
189
 * ioat1_reset_part2 - reinit the channel after a reset
190
 */
191
static void ioat1_reset_part2(struct work_struct *work)
192
{
193 194
	struct ioat_chan_common *chan;
	struct ioat_dma_chan *ioat;
195
	struct ioat_desc_sw *desc;
196 197
	int dmacount;
	bool start_null = false;
198

199 200 201 202
	chan = container_of(work, struct ioat_chan_common, work.work);
	ioat = container_of(chan, struct ioat_dma_chan, base);
	spin_lock_bh(&chan->cleanup_lock);
	spin_lock_bh(&ioat->desc_lock);
203

204 205 206
	chan->completion_virt->low = 0;
	chan->completion_virt->high = 0;
	ioat->pending = 0;
207

208 209
	/* count the descriptors waiting */
	dmacount = 0;
210 211
	if (ioat->used_desc.prev) {
		desc = to_ioat_desc(ioat->used_desc.prev);
212
		do {
213
			dmacount++;
214
			desc = to_ioat_desc(desc->node.next);
215
		} while (&desc->node != ioat->used_desc.next);
216 217
	}

218 219 220 221 222 223
	if (dmacount) {
		/*
		 * write the new starting descriptor address
		 * this puts channel engine into ARMED state
		 */
		desc = to_ioat_desc(ioat->used_desc.prev);
224
		writel(((u64) desc->txd.phys) & 0x00000000FFFFFFFF,
225
		       chan->reg_base + IOAT1_CHAINADDR_OFFSET_LOW);
226
		writel(((u64) desc->txd.phys) >> 32,
227
		       chan->reg_base + IOAT1_CHAINADDR_OFFSET_HIGH);
228

229 230
		writeb(IOAT_CHANCMD_START, chan->reg_base
			+ IOAT_CHANCMD_OFFSET(chan->device->version));
231 232 233 234
	} else
		start_null = true;
	spin_unlock_bh(&ioat->desc_lock);
	spin_unlock_bh(&chan->cleanup_lock);
235

236
	dev_err(to_dev(chan),
237
		"chan%d reset - %d descs waiting, %d total desc\n",
238
		chan_num(chan), dmacount, ioat->desccount);
239

240 241
	if (start_null)
		ioat1_dma_start_null_desc(ioat);
242 243 244
}

/**
245
 * ioat1_reset_channel - restart a channel
246
 * @ioat: IOAT DMA channel handle
247
 */
248
static void ioat1_reset_channel(struct ioat_dma_chan *ioat)
249
{
250 251
	struct ioat_chan_common *chan = &ioat->base;
	void __iomem *reg_base = chan->reg_base;
252 253
	u32 chansts, chanerr;

254
	if (!ioat->used_desc.prev)
255 256
		return;

D
Dan Williams 已提交
257
	dev_dbg(to_dev(chan), "%s\n", __func__);
258 259
	chanerr = readl(reg_base + IOAT_CHANERR_OFFSET);
	chansts = (chan->completion_virt->low
260 261
					& IOAT_CHANSTS_DMA_TRANSFER_STATUS);
	if (chanerr) {
262
		dev_err(to_dev(chan),
263
			"chan%d, CHANSTS = 0x%08x CHANERR = 0x%04x, clearing\n",
264 265
			chan_num(chan), chansts, chanerr);
		writel(chanerr, reg_base + IOAT_CHANERR_OFFSET);
266 267 268 269 270 271 272 273 274 275
	}

	/*
	 * whack it upside the head with a reset
	 * and wait for things to settle out.
	 * force the pending count to a really big negative
	 * to make sure no one forces an issue_pending
	 * while we're waiting.
	 */

276 277
	spin_lock_bh(&ioat->desc_lock);
	ioat->pending = INT_MIN;
278
	writeb(IOAT_CHANCMD_RESET,
279 280
	       reg_base + IOAT_CHANCMD_OFFSET(chan->device->version));
	spin_unlock_bh(&ioat->desc_lock);
281 282

	/* schedule the 2nd half instead of sleeping a long time */
283
	schedule_delayed_work(&chan->work, RESET_DELAY);
284 285 286
}

/**
287
 * ioat1_chan_watchdog - watch for stuck channels
288
 */
289
static void ioat1_chan_watchdog(struct work_struct *work)
290 291 292
{
	struct ioatdma_device *device =
		container_of(work, struct ioatdma_device, work.work);
293 294
	struct ioat_dma_chan *ioat;
	struct ioat_chan_common *chan;
295 296 297 298 299 300 301 302 303 304 305 306
	int i;

	union {
		u64 full;
		struct {
			u32 low;
			u32 high;
		};
	} completion_hw;
	unsigned long compl_desc_addr_hw;

	for (i = 0; i < device->common.chancnt; i++) {
307 308
		chan = ioat_chan_by_index(device, i);
		ioat = container_of(chan, struct ioat_dma_chan, base);
309

310 311 312
		if (/* have we started processing anything yet */
		    chan->last_completion
		    /* have we completed any since last watchdog cycle? */
313
		    && (chan->last_completion == chan->watchdog_completion)
314
		    /* has TCP stuck on one cookie since last watchdog? */
315 316
		    && (chan->watchdog_tcp_cookie == chan->watchdog_last_tcp_cookie)
		    && (chan->watchdog_tcp_cookie != chan->completed_cookie)
317 318
		    /* is there something in the chain to be processed? */
		    /* CB1 chain always has at least the last one processed */
319 320
		    && (ioat->used_desc.prev != ioat->used_desc.next)
		    && ioat->pending == 0) {
321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336

			/*
			 * check CHANSTS register for completed
			 * descriptor address.
			 * if it is different than completion writeback,
			 * it is not zero
			 * and it has changed since the last watchdog
			 *     we can assume that channel
			 *     is still working correctly
			 *     and the problem is in completion writeback.
			 *     update completion writeback
			 *     with actual CHANSTS value
			 * else
			 *     try resetting the channel
			 */

337 338 339 340
			completion_hw.low = readl(chan->reg_base +
				IOAT_CHANSTS_OFFSET_LOW(chan->device->version));
			completion_hw.high = readl(chan->reg_base +
				IOAT_CHANSTS_OFFSET_HIGH(chan->device->version));
341 342 343 344 345 346 347 348 349 350
#if (BITS_PER_LONG == 64)
			compl_desc_addr_hw =
				completion_hw.full
				& IOAT_CHANSTS_COMPLETED_DESCRIPTOR_ADDR;
#else
			compl_desc_addr_hw =
				completion_hw.low & IOAT_LOW_COMPLETION_MASK;
#endif

			if ((compl_desc_addr_hw != 0)
351 352 353 354 355
			   && (compl_desc_addr_hw != chan->watchdog_completion)
			   && (compl_desc_addr_hw != chan->last_compl_desc_addr_hw)) {
				chan->last_compl_desc_addr_hw = compl_desc_addr_hw;
				chan->completion_virt->low = completion_hw.low;
				chan->completion_virt->high = completion_hw.high;
356
			} else {
357
				ioat1_reset_channel(ioat);
358 359
				chan->watchdog_completion = 0;
				chan->last_compl_desc_addr_hw = 0;
360 361
			}
		} else {
362 363
			chan->last_compl_desc_addr_hw = 0;
			chan->watchdog_completion = chan->last_completion;
364
		}
365

366
		chan->watchdog_last_tcp_cookie = chan->watchdog_tcp_cookie;
367 368 369 370 371
	}

	schedule_delayed_work(&device->work, WATCHDOG_DELAY);
}

372
static dma_cookie_t ioat1_tx_submit(struct dma_async_tx_descriptor *tx)
373
{
374 375
	struct dma_chan *c = tx->chan;
	struct ioat_dma_chan *ioat = to_ioat_chan(c);
376 377 378
	struct ioat_desc_sw *desc = tx_to_ioat_desc(tx);
	struct ioat_desc_sw *first;
	struct ioat_desc_sw *chain_tail;
379 380
	dma_cookie_t cookie;

381
	spin_lock_bh(&ioat->desc_lock);
382
	/* cookie incr and addition to used_list must be atomic */
383
	cookie = c->cookie;
384 385 386
	cookie++;
	if (cookie < 0)
		cookie = 1;
387 388
	c->cookie = cookie;
	tx->cookie = cookie;
D
Dan Williams 已提交
389
	dev_dbg(to_dev(&ioat->base), "%s: cookie: %d\n", __func__, cookie);
390 391

	/* write address into NextDescriptor field of last desc in chain */
392
	first = to_ioat_desc(tx->tx_list.next);
393
	chain_tail = to_ioat_desc(ioat->used_desc.prev);
394 395 396
	/* make descriptor updates globally visible before chaining */
	wmb();
	chain_tail->hw->next = first->txd.phys;
397
	list_splice_tail_init(&tx->tx_list, &ioat->used_desc);
D
Dan Williams 已提交
398 399
	dump_desc_dbg(ioat, chain_tail);
	dump_desc_dbg(ioat, first);
400

401 402 403 404
	ioat->pending += desc->tx_cnt;
	if (ioat->pending >= ioat_pending_level)
		__ioat1_dma_memcpy_issue_pending(ioat);
	spin_unlock_bh(&ioat->desc_lock);
405

406 407 408 409 410
	return cookie;
}

/**
 * ioat_dma_alloc_descriptor - allocate and return a sw and hw descriptor pair
411
 * @ioat: the channel supplying the memory pool for the descriptors
412 413
 * @flags: allocation flags
 */
414
static struct ioat_desc_sw *
415
ioat_dma_alloc_descriptor(struct ioat_dma_chan *ioat, gfp_t flags)
416 417 418
{
	struct ioat_dma_descriptor *desc;
	struct ioat_desc_sw *desc_sw;
419
	struct ioatdma_device *ioatdma_device;
420 421
	dma_addr_t phys;

422
	ioatdma_device = ioat->base.device;
423
	desc = pci_pool_alloc(ioatdma_device->dma_pool, flags, &phys);
424 425 426 427 428
	if (unlikely(!desc))
		return NULL;

	desc_sw = kzalloc(sizeof(*desc_sw), flags);
	if (unlikely(!desc_sw)) {
429
		pci_pool_free(ioatdma_device->dma_pool, desc, phys);
430 431 432 433
		return NULL;
	}

	memset(desc, 0, sizeof(*desc));
434

435 436
	dma_async_tx_descriptor_init(&desc_sw->txd, &ioat->base.common);
	desc_sw->txd.tx_submit = ioat1_tx_submit;
437
	desc_sw->hw = desc;
438
	desc_sw->txd.phys = phys;
D
Dan Williams 已提交
439
	set_desc_id(desc_sw, -1);
440 441 442 443

	return desc_sw;
}

444 445 446
static int ioat_initial_desc_count = 256;
module_param(ioat_initial_desc_count, int, 0644);
MODULE_PARM_DESC(ioat_initial_desc_count,
447
		 "ioat1: initial descriptors per channel (default: 256)");
448
/**
449
 * ioat1_dma_alloc_chan_resources - returns the number of allocated descriptors
450 451
 * @chan: the channel to be filled out
 */
452
static int ioat1_dma_alloc_chan_resources(struct dma_chan *c)
453
{
454 455
	struct ioat_dma_chan *ioat = to_ioat_chan(c);
	struct ioat_chan_common *chan = &ioat->base;
S
Shannon Nelson 已提交
456
	struct ioat_desc_sw *desc;
457 458 459 460 461
	u16 chanctrl;
	u32 chanerr;
	int i;
	LIST_HEAD(tmp_list);

462
	/* have we already been set up? */
463 464
	if (!list_empty(&ioat->free_desc))
		return ioat->desccount;
465

466
	/* Setup register to interrupt and write completion status on error */
467
	chanctrl = IOAT_CHANCTRL_ERR_INT_EN |
468 469
		IOAT_CHANCTRL_ANY_ERR_ABORT_EN |
		IOAT_CHANCTRL_ERR_COMPLETION_EN;
470
	writew(chanctrl, chan->reg_base + IOAT_CHANCTRL_OFFSET);
471

472
	chanerr = readl(chan->reg_base + IOAT_CHANERR_OFFSET);
473
	if (chanerr) {
474 475
		dev_err(to_dev(chan), "CHANERR = %x, clearing\n", chanerr);
		writel(chanerr, chan->reg_base + IOAT_CHANERR_OFFSET);
476 477 478
	}

	/* Allocate descriptors */
479
	for (i = 0; i < ioat_initial_desc_count; i++) {
480
		desc = ioat_dma_alloc_descriptor(ioat, GFP_KERNEL);
481
		if (!desc) {
482
			dev_err(to_dev(chan), "Only %d initial descriptors\n", i);
483 484
			break;
		}
D
Dan Williams 已提交
485
		set_desc_id(desc, i);
486 487
		list_add_tail(&desc->node, &tmp_list);
	}
488 489 490 491
	spin_lock_bh(&ioat->desc_lock);
	ioat->desccount = i;
	list_splice(&tmp_list, &ioat->free_desc);
	spin_unlock_bh(&ioat->desc_lock);
492 493 494

	/* allocate a completion writeback area */
	/* doing 2 32bit writes to mmio since 1 64b write doesn't work */
495 496 497 498 499 500 501 502 503 504 505
	chan->completion_virt = pci_pool_alloc(chan->device->completion_pool,
					       GFP_KERNEL,
					       &chan->completion_addr);
	memset(chan->completion_virt, 0,
	       sizeof(*chan->completion_virt));
	writel(((u64) chan->completion_addr) & 0x00000000FFFFFFFF,
	       chan->reg_base + IOAT_CHANCMP_OFFSET_LOW);
	writel(((u64) chan->completion_addr) >> 32,
	       chan->reg_base + IOAT_CHANCMP_OFFSET_HIGH);

	tasklet_enable(&chan->cleanup_task);
506
	ioat1_dma_start_null_desc(ioat);  /* give chain to dma device */
D
Dan Williams 已提交
507 508
	dev_dbg(to_dev(chan), "%s: allocated %d descriptors\n",
		__func__, ioat->desccount);
509
	return ioat->desccount;
510 511
}

512
/**
513
 * ioat1_dma_free_chan_resources - release all the descriptors
514 515
 * @chan: the channel to be cleaned
 */
516
static void ioat1_dma_free_chan_resources(struct dma_chan *c)
517
{
518 519 520
	struct ioat_dma_chan *ioat = to_ioat_chan(c);
	struct ioat_chan_common *chan = &ioat->base;
	struct ioatdma_device *ioatdma_device = chan->device;
521 522 523
	struct ioat_desc_sw *desc, *_desc;
	int in_use_descs = 0;

524 525 526
	/* Before freeing channel resources first check
	 * if they have been previously allocated for this channel.
	 */
527
	if (ioat->desccount == 0)
528 529
		return;

530
	tasklet_disable(&chan->cleanup_task);
531
	ioat1_cleanup(ioat);
532

533 534 535
	/* Delay 100ms after reset to allow internal DMA logic to quiesce
	 * before removing DMA descriptor resources.
	 */
536
	writeb(IOAT_CHANCMD_RESET,
537
	       chan->reg_base + IOAT_CHANCMD_OFFSET(chan->device->version));
538
	mdelay(100);
539

540
	spin_lock_bh(&ioat->desc_lock);
D
Dan Williams 已提交
541 542 543 544
	list_for_each_entry_safe(desc, _desc, &ioat->used_desc, node) {
		dev_dbg(to_dev(chan), "%s: freeing %d from used list\n",
			__func__, desc_id(desc));
		dump_desc_dbg(ioat, desc);
545 546 547 548 549 550 551 552 553
		in_use_descs++;
		list_del(&desc->node);
		pci_pool_free(ioatdma_device->dma_pool, desc->hw,
			      desc->txd.phys);
		kfree(desc);
	}
	list_for_each_entry_safe(desc, _desc,
				 &ioat->free_desc, node) {
		list_del(&desc->node);
554
		pci_pool_free(ioatdma_device->dma_pool, desc->hw,
555
			      desc->txd.phys);
556 557
		kfree(desc);
	}
558
	spin_unlock_bh(&ioat->desc_lock);
559

560
	pci_pool_free(ioatdma_device->completion_pool,
561 562
		      chan->completion_virt,
		      chan->completion_addr);
563 564 565

	/* one is ok since we left it on there on purpose */
	if (in_use_descs > 1)
566
		dev_err(to_dev(chan), "Freeing %d in use descriptors!\n",
567 568
			in_use_descs - 1);

569 570 571 572 573 574
	chan->last_completion = chan->completion_addr = 0;
	chan->watchdog_completion = 0;
	chan->last_compl_desc_addr_hw = 0;
	chan->watchdog_tcp_cookie = chan->watchdog_last_tcp_cookie = 0;
	ioat->pending = 0;
	ioat->desccount = 0;
575
}
576

577
/**
578 579
 * ioat1_dma_get_next_descriptor - return the next available descriptor
 * @ioat: IOAT DMA channel handle
580 581 582 583 584
 *
 * Gets the next descriptor from the chain, and must be called with the
 * channel's desc_lock held.  Allocates more descriptors if the channel
 * has run out.
 */
585
static struct ioat_desc_sw *
586
ioat1_dma_get_next_descriptor(struct ioat_dma_chan *ioat)
587
{
S
Shannon Nelson 已提交
588
	struct ioat_desc_sw *new;
589

590 591
	if (!list_empty(&ioat->free_desc)) {
		new = to_ioat_desc(ioat->free_desc.next);
592 593 594
		list_del(&new->node);
	} else {
		/* try to get another desc */
595
		new = ioat_dma_alloc_descriptor(ioat, GFP_ATOMIC);
S
Shannon Nelson 已提交
596
		if (!new) {
597
			dev_err(to_dev(&ioat->base), "alloc failed\n");
S
Shannon Nelson 已提交
598 599
			return NULL;
		}
600
	}
D
Dan Williams 已提交
601 602
	dev_dbg(to_dev(&ioat->base), "%s: allocated: %d\n",
		__func__, desc_id(new));
603 604
	prefetch(new->hw);
	return new;
605 606
}

607
static struct dma_async_tx_descriptor *
608
ioat1_dma_prep_memcpy(struct dma_chan *c, dma_addr_t dma_dest,
609
		      dma_addr_t dma_src, size_t len, unsigned long flags)
610
{
611
	struct ioat_dma_chan *ioat = to_ioat_chan(c);
612 613 614 615 616 617 618 619
	struct ioat_desc_sw *desc;
	size_t copy;
	LIST_HEAD(chain);
	dma_addr_t src = dma_src;
	dma_addr_t dest = dma_dest;
	size_t total_len = len;
	struct ioat_dma_descriptor *hw = NULL;
	int tx_cnt = 0;
620

621
	spin_lock_bh(&ioat->desc_lock);
622
	desc = ioat1_dma_get_next_descriptor(ioat);
623 624 625
	do {
		if (!desc)
			break;
626

627
		tx_cnt++;
628
		copy = min_t(size_t, len, ioat->xfercap);
629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644

		hw = desc->hw;
		hw->size = copy;
		hw->ctl = 0;
		hw->src_addr = src;
		hw->dst_addr = dest;

		list_add_tail(&desc->node, &chain);

		len -= copy;
		dest += copy;
		src += copy;
		if (len) {
			struct ioat_desc_sw *next;

			async_tx_ack(&desc->txd);
645
			next = ioat1_dma_get_next_descriptor(ioat);
646
			hw->next = next ? next->txd.phys : 0;
D
Dan Williams 已提交
647
			dump_desc_dbg(ioat, desc);
648 649 650 651 652 653
			desc = next;
		} else
			hw->next = 0;
	} while (len);

	if (!desc) {
654 655 656
		struct ioat_chan_common *chan = &ioat->base;

		dev_err(to_dev(chan),
657
			"chan%d - get_next_desc failed\n", chan_num(chan));
658 659
		list_splice(&chain, &ioat->free_desc);
		spin_unlock_bh(&ioat->desc_lock);
S
Shannon Nelson 已提交
660
		return NULL;
661
	}
662
	spin_unlock_bh(&ioat->desc_lock);
663 664 665 666 667 668 669

	desc->txd.flags = flags;
	desc->tx_cnt = tx_cnt;
	desc->len = total_len;
	list_splice(&chain, &desc->txd.tx_list);
	hw->ctl_f.int_en = !!(flags & DMA_PREP_INTERRUPT);
	hw->ctl_f.compl_write = 1;
D
Dan Williams 已提交
670
	dump_desc_dbg(ioat, desc);
671 672

	return &desc->txd;
673 674
}

675
static void ioat1_cleanup_tasklet(unsigned long data)
676 677
{
	struct ioat_dma_chan *chan = (void *)data;
678
	ioat1_cleanup(chan);
679
	writew(IOAT_CHANCTRL_INT_DISABLE,
680
	       chan->base.reg_base + IOAT_CHANCTRL_OFFSET);
681 682
}

683 684
static void ioat_unmap(struct pci_dev *pdev, dma_addr_t addr, size_t len,
		       int direction, enum dma_ctrl_flags flags, bool dst)
685
{
686 687 688 689 690
	if ((dst && (flags & DMA_COMPL_DEST_UNMAP_SINGLE)) ||
	    (!dst && (flags & DMA_COMPL_SRC_UNMAP_SINGLE)))
		pci_unmap_single(pdev, addr, len, direction);
	else
		pci_unmap_page(pdev, addr, len, direction);
691 692
}

693 694 695

void ioat_dma_unmap(struct ioat_chan_common *chan, enum dma_ctrl_flags flags,
		    size_t len, struct ioat_dma_descriptor *hw)
696
{
697 698
	struct pci_dev *pdev = chan->device->pdev;
	size_t offset = len - hw->size;
699

700 701 702
	if (!(flags & DMA_COMPL_SKIP_DEST_UNMAP))
		ioat_unmap(pdev, hw->dst_addr - offset, len,
			   PCI_DMA_FROMDEVICE, flags, 1);
703

704 705 706 707 708 709 710 711
	if (!(flags & DMA_COMPL_SKIP_SRC_UNMAP))
		ioat_unmap(pdev, hw->src_addr - offset, len,
			   PCI_DMA_TODEVICE, flags, 0);
}

unsigned long ioat_get_current_completion(struct ioat_chan_common *chan)
{
	unsigned long phys_complete;
712 713 714 715 716 717 718 719

	/* The completion writeback can happen at any time,
	   so reads by the driver need to be atomic operations
	   The descriptor physical addresses are limited to 32-bits
	   when the CPU can only do a 32-bit mov */

#if (BITS_PER_LONG == 64)
	phys_complete =
720
		chan->completion_virt->full
721
		& IOAT_CHANSTS_COMPLETED_DESCRIPTOR_ADDR;
722
#else
723
	phys_complete = chan->completion_virt->low & IOAT_LOW_COMPLETION_MASK;
724 725
#endif

D
Dan Williams 已提交
726 727 728
	dev_dbg(to_dev(chan), "%s: phys_complete: %#llx\n", __func__,
		(unsigned long long) phys_complete);

729
	if ((chan->completion_virt->full
730
		& IOAT_CHANSTS_DMA_TRANSFER_STATUS) ==
731
				IOAT_CHANSTS_DMA_TRANSFER_STATUS_HALTED) {
732 733
		dev_err(to_dev(chan), "Channel halted, chanerr = %x\n",
			readl(chan->reg_base + IOAT_CHANERR_OFFSET));
734 735 736 737

		/* TODO do something to salvage the situation */
	}

738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758
	return phys_complete;
}

/**
 * ioat1_cleanup - cleanup up finished descriptors
 * @chan: ioat channel to be cleaned up
 */
static void ioat1_cleanup(struct ioat_dma_chan *ioat)
{
	struct ioat_chan_common *chan = &ioat->base;
	unsigned long phys_complete;
	struct ioat_desc_sw *desc, *_desc;
	dma_cookie_t cookie = 0;
	struct dma_async_tx_descriptor *tx;

	prefetch(chan->completion_virt);

	if (!spin_trylock_bh(&chan->cleanup_lock))
		return;

	phys_complete = ioat_get_current_completion(chan);
759 760
	if (phys_complete == chan->last_completion) {
		spin_unlock_bh(&chan->cleanup_lock);
761 762 763 764
		/*
		 * perhaps we're stuck so hard that the watchdog can't go off?
		 * try to catch it after 2 seconds
		 */
765 766 767 768
		if (time_after(jiffies,
			       chan->last_completion_time + HZ*WATCHDOG_DELAY)) {
			ioat1_chan_watchdog(&(chan->device->work.work));
			chan->last_completion_time = jiffies;
769
		}
770 771
		return;
	}
772
	chan->last_completion_time = jiffies;
773

774
	cookie = 0;
775 776
	if (!spin_trylock_bh(&ioat->desc_lock)) {
		spin_unlock_bh(&chan->cleanup_lock);
777 778 779
		return;
	}

D
Dan Williams 已提交
780 781
	dev_dbg(to_dev(chan), "%s: phys_complete: %lx\n",
		 __func__, phys_complete);
782 783 784 785 786 787 788
	list_for_each_entry_safe(desc, _desc, &ioat->used_desc, node) {
		tx = &desc->txd;
		/*
		 * Incoming DMA requests may use multiple descriptors,
		 * due to exceeding xfercap, perhaps. If so, only the
		 * last one will have a cookie, and require unmapping.
		 */
D
Dan Williams 已提交
789
		dump_desc_dbg(ioat, desc);
790 791 792 793 794 795
		if (tx->cookie) {
			cookie = tx->cookie;
			ioat_dma_unmap(chan, tx->flags, desc->len, desc->hw);
			if (tx->callback) {
				tx->callback(tx->callback_param);
				tx->callback = NULL;
796
			}
797
		}
798

799 800 801 802 803 804 805 806
		if (tx->phys != phys_complete) {
			/*
			 * a completed entry, but not the last, so clean
			 * up if the client is done with the descriptor
			 */
			if (async_tx_test_ack(tx))
				list_move_tail(&desc->node, &ioat->free_desc);
			else
807
				tx->cookie = 0;
808 809 810 811 812 813 814
		} else {
			/*
			 * last used desc. Do not remove, so we can
			 * append from it, but don't look at it next
			 * time, either
			 */
			tx->cookie = 0;
815

816
			/* TODO check status bits? */
817 818 819 820
			break;
		}
	}

821
	spin_unlock_bh(&ioat->desc_lock);
822

823
	chan->last_completion = phys_complete;
824
	if (cookie != 0)
825
		chan->completed_cookie = cookie;
826

827
	spin_unlock_bh(&chan->cleanup_lock);
828 829
}

830
static enum dma_status
831 832
ioat1_dma_is_complete(struct dma_chan *c, dma_cookie_t cookie,
		      dma_cookie_t *done, dma_cookie_t *used)
833
{
834
	struct ioat_dma_chan *ioat = to_ioat_chan(c);
835

836 837
	if (ioat_is_complete(c, cookie, done, used) == DMA_SUCCESS)
		return DMA_SUCCESS;
838

839
	ioat1_cleanup(ioat);
840

841
	return ioat_is_complete(c, cookie, done, used);
842 843
}

844
static void ioat1_dma_start_null_desc(struct ioat_dma_chan *ioat)
845
{
846
	struct ioat_chan_common *chan = &ioat->base;
847
	struct ioat_desc_sw *desc;
848
	struct ioat_dma_descriptor *hw;
849

850
	spin_lock_bh(&ioat->desc_lock);
851

852
	desc = ioat1_dma_get_next_descriptor(ioat);
853 854

	if (!desc) {
855
		dev_err(to_dev(chan),
856
			"Unable to start null desc - get next desc failed\n");
857
		spin_unlock_bh(&ioat->desc_lock);
858 859 860
		return;
	}

861 862 863 864 865
	hw = desc->hw;
	hw->ctl = 0;
	hw->ctl_f.null = 1;
	hw->ctl_f.int_en = 1;
	hw->ctl_f.compl_write = 1;
866
	/* set size to non-zero value (channel returns error when size is 0) */
867 868 869
	hw->size = NULL_DESC_BUFFER_SIZE;
	hw->src_addr = 0;
	hw->dst_addr = 0;
870
	async_tx_ack(&desc->txd);
871 872
	hw->next = 0;
	list_add_tail(&desc->node, &ioat->used_desc);
D
Dan Williams 已提交
873
	dump_desc_dbg(ioat, desc);
874

875 876 877 878
	writel(((u64) desc->txd.phys) & 0x00000000FFFFFFFF,
	       chan->reg_base + IOAT1_CHAINADDR_OFFSET_LOW);
	writel(((u64) desc->txd.phys) >> 32,
	       chan->reg_base + IOAT1_CHAINADDR_OFFSET_HIGH);
879

880 881
	writeb(IOAT_CHANCMD_START, chan->reg_base
		+ IOAT_CHANCMD_OFFSET(chan->device->version));
882
	spin_unlock_bh(&ioat->desc_lock);
883 884 885 886 887 888 889
}

/*
 * Perform a IOAT transaction to verify the HW works.
 */
#define IOAT_TEST_SIZE 2000

890 891
static void ioat_dma_test_callback(void *dma_async_param)
{
892 893 894
	struct completion *cmp = dma_async_param;

	complete(cmp);
895 896
}

897 898 899 900 901
/**
 * ioat_dma_self_test - Perform a IOAT transaction to verify the HW works.
 * @device: device to be tested
 */
static int ioat_dma_self_test(struct ioatdma_device *device)
902 903 904 905
{
	int i;
	u8 *src;
	u8 *dest;
906 907
	struct dma_device *dma = &device->common;
	struct device *dev = &device->pdev->dev;
908
	struct dma_chan *dma_chan;
S
Shannon Nelson 已提交
909
	struct dma_async_tx_descriptor *tx;
910
	dma_addr_t dma_dest, dma_src;
911 912
	dma_cookie_t cookie;
	int err = 0;
913
	struct completion cmp;
914
	unsigned long tmo;
915
	unsigned long flags;
916

917
	src = kzalloc(sizeof(u8) * IOAT_TEST_SIZE, GFP_KERNEL);
918 919
	if (!src)
		return -ENOMEM;
920
	dest = kzalloc(sizeof(u8) * IOAT_TEST_SIZE, GFP_KERNEL);
921 922 923 924 925 926 927 928 929 930
	if (!dest) {
		kfree(src);
		return -ENOMEM;
	}

	/* Fill in src buffer */
	for (i = 0; i < IOAT_TEST_SIZE; i++)
		src[i] = (u8)i;

	/* Start copy, using first DMA channel */
931
	dma_chan = container_of(dma->channels.next, struct dma_chan,
932
				device_node);
933 934
	if (dma->device_alloc_chan_resources(dma_chan) < 1) {
		dev_err(dev, "selftest cannot allocate chan resource\n");
935 936 937 938
		err = -ENODEV;
		goto out;
	}

939 940
	dma_src = dma_map_single(dev, src, IOAT_TEST_SIZE, DMA_TO_DEVICE);
	dma_dest = dma_map_single(dev, dest, IOAT_TEST_SIZE, DMA_FROM_DEVICE);
D
Dan Williams 已提交
941 942
	flags = DMA_COMPL_SRC_UNMAP_SINGLE | DMA_COMPL_DEST_UNMAP_SINGLE |
		DMA_PREP_INTERRUPT;
943
	tx = device->common.device_prep_dma_memcpy(dma_chan, dma_dest, dma_src,
944
						   IOAT_TEST_SIZE, flags);
945
	if (!tx) {
946
		dev_err(dev, "Self-test prep failed, disabling\n");
947 948 949 950
		err = -ENODEV;
		goto free_resources;
	}

951
	async_tx_ack(tx);
952
	init_completion(&cmp);
953
	tx->callback = ioat_dma_test_callback;
954
	tx->callback_param = &cmp;
955
	cookie = tx->tx_submit(tx);
956
	if (cookie < 0) {
957
		dev_err(dev, "Self-test setup failed, disabling\n");
958 959 960
		err = -ENODEV;
		goto free_resources;
	}
961
	dma->device_issue_pending(dma_chan);
D
Dan Williams 已提交
962

963
	tmo = wait_for_completion_timeout(&cmp, msecs_to_jiffies(3000));
964

965
	if (tmo == 0 ||
966
	    dma->device_is_tx_complete(dma_chan, cookie, NULL, NULL)
967
					!= DMA_SUCCESS) {
968
		dev_err(dev, "Self-test copy timed out, disabling\n");
969 970 971 972
		err = -ENODEV;
		goto free_resources;
	}
	if (memcmp(src, dest, IOAT_TEST_SIZE)) {
973
		dev_err(dev, "Self-test copy failed compare, disabling\n");
974 975 976 977 978
		err = -ENODEV;
		goto free_resources;
	}

free_resources:
979
	dma->device_free_chan_resources(dma_chan);
980 981 982 983 984 985
out:
	kfree(src);
	kfree(dest);
	return err;
}

986 987 988 989 990 991 992 993 994 995 996 997 998
static char ioat_interrupt_style[32] = "msix";
module_param_string(ioat_interrupt_style, ioat_interrupt_style,
		    sizeof(ioat_interrupt_style), 0644);
MODULE_PARM_DESC(ioat_interrupt_style,
		 "set ioat interrupt style: msix (default), "
		 "msix-single-vector, msi, intx)");

/**
 * ioat_dma_setup_interrupts - setup interrupt handler
 * @device: ioat device
 */
static int ioat_dma_setup_interrupts(struct ioatdma_device *device)
{
999
	struct ioat_chan_common *chan;
1000 1001 1002 1003 1004
	struct pci_dev *pdev = device->pdev;
	struct device *dev = &pdev->dev;
	struct msix_entry *msix;
	int i, j, msixcnt;
	int err = -EINVAL;
1005 1006 1007 1008 1009 1010 1011 1012 1013 1014
	u8 intrctrl = 0;

	if (!strcmp(ioat_interrupt_style, "msix"))
		goto msix;
	if (!strcmp(ioat_interrupt_style, "msix-single-vector"))
		goto msix_single_vector;
	if (!strcmp(ioat_interrupt_style, "msi"))
		goto msi;
	if (!strcmp(ioat_interrupt_style, "intx"))
		goto intx;
1015
	dev_err(dev, "invalid ioat_interrupt_style %s\n", ioat_interrupt_style);
1016
	goto err_no_irq;
1017 1018 1019 1020 1021 1022 1023

msix:
	/* The number of MSI-X vectors should equal the number of channels */
	msixcnt = device->common.chancnt;
	for (i = 0; i < msixcnt; i++)
		device->msix_entries[i].entry = i;

1024
	err = pci_enable_msix(pdev, device->msix_entries, msixcnt);
1025 1026 1027 1028 1029 1030
	if (err < 0)
		goto msi;
	if (err > 0)
		goto msix_single_vector;

	for (i = 0; i < msixcnt; i++) {
1031
		msix = &device->msix_entries[i];
1032
		chan = ioat_chan_by_index(device, i);
1033 1034
		err = devm_request_irq(dev, msix->vector,
				       ioat_dma_do_interrupt_msix, 0,
1035
				       "ioat-msix", chan);
1036 1037
		if (err) {
			for (j = 0; j < i; j++) {
1038
				msix = &device->msix_entries[j];
1039 1040
				chan = ioat_chan_by_index(device, j);
				devm_free_irq(dev, msix->vector, chan);
1041 1042 1043 1044 1045 1046 1047 1048
			}
			goto msix_single_vector;
		}
	}
	intrctrl |= IOAT_INTRCTRL_MSIX_VECTOR_CONTROL;
	goto done;

msix_single_vector:
1049 1050 1051
	msix = &device->msix_entries[0];
	msix->entry = 0;
	err = pci_enable_msix(pdev, device->msix_entries, 1);
1052 1053 1054
	if (err)
		goto msi;

1055 1056
	err = devm_request_irq(dev, msix->vector, ioat_dma_do_interrupt, 0,
			       "ioat-msix", device);
1057
	if (err) {
1058
		pci_disable_msix(pdev);
1059 1060 1061 1062 1063
		goto msi;
	}
	goto done;

msi:
1064
	err = pci_enable_msi(pdev);
1065 1066 1067
	if (err)
		goto intx;

1068 1069
	err = devm_request_irq(dev, pdev->irq, ioat_dma_do_interrupt, 0,
			       "ioat-msi", device);
1070
	if (err) {
1071
		pci_disable_msi(pdev);
1072 1073 1074 1075 1076
		goto intx;
	}
	goto done;

intx:
1077 1078
	err = devm_request_irq(dev, pdev->irq, ioat_dma_do_interrupt,
			       IRQF_SHARED, "ioat-intx", device);
1079 1080 1081 1082
	if (err)
		goto err_no_irq;

done:
1083 1084
	if (device->intr_quirk)
		device->intr_quirk(device);
1085 1086 1087 1088 1089 1090 1091
	intrctrl |= IOAT_INTRCTRL_MASTER_INT_EN;
	writeb(intrctrl, device->reg_base + IOAT_INTRCTRL_OFFSET);
	return 0;

err_no_irq:
	/* Disable all interrupt generation */
	writeb(0, device->reg_base + IOAT_INTRCTRL_OFFSET);
1092 1093
	dev_err(dev, "no usable interrupts\n");
	return err;
1094 1095
}

1096
static void ioat_disable_interrupts(struct ioatdma_device *device)
1097 1098 1099 1100 1101
{
	/* Disable all interrupt generation */
	writeb(0, device->reg_base + IOAT_INTRCTRL_OFFSET);
}

1102
int ioat_probe(struct ioatdma_device *device)
1103
{
1104 1105 1106
	int err = -ENODEV;
	struct dma_device *dma = &device->common;
	struct pci_dev *pdev = device->pdev;
1107
	struct device *dev = &pdev->dev;
1108 1109 1110

	/* DMA coherent memory pool for DMA descriptor allocations */
	device->dma_pool = pci_pool_create("dma_desc_pool", pdev,
1111 1112
					   sizeof(struct ioat_dma_descriptor),
					   64, 0);
1113 1114 1115 1116 1117
	if (!device->dma_pool) {
		err = -ENOMEM;
		goto err_dma_pool;
	}

1118 1119 1120
	device->completion_pool = pci_pool_create("completion_pool", pdev,
						  sizeof(u64), SMP_CACHE_BYTES,
						  SMP_CACHE_BYTES);
1121

1122 1123 1124 1125 1126
	if (!device->completion_pool) {
		err = -ENOMEM;
		goto err_completion_pool;
	}

1127
	device->enumerate_channels(device);
1128

1129 1130
	dma_cap_set(DMA_MEMCPY, dma->cap_mask);
	dma->dev = &pdev->dev;
1131

1132
	dev_err(dev, "Intel(R) I/OAT DMA Engine found,"
1133
		" %d channels, device version 0x%02x, driver version %s\n",
1134
		dma->chancnt, device->version, IOAT_DMA_VERSION);
1135

1136
	if (!dma->chancnt) {
1137
		dev_err(dev, "Intel(R) I/OAT DMA Engine problem found: "
1138 1139 1140 1141
			"zero channels detected\n");
		goto err_setup_interrupts;
	}

1142
	err = ioat_dma_setup_interrupts(device);
1143
	if (err)
1144
		goto err_setup_interrupts;
1145

1146
	err = ioat_dma_self_test(device);
1147 1148 1149
	if (err)
		goto err_self_test;

1150
	return 0;
1151 1152

err_self_test:
1153
	ioat_disable_interrupts(device);
1154
err_setup_interrupts:
1155 1156 1157 1158
	pci_pool_destroy(device->completion_pool);
err_completion_pool:
	pci_pool_destroy(device->dma_pool);
err_dma_pool:
1159 1160 1161
	return err;
}

1162
int ioat_register(struct ioatdma_device *device)
1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195
{
	int err = dma_async_device_register(&device->common);

	if (err) {
		ioat_disable_interrupts(device);
		pci_pool_destroy(device->completion_pool);
		pci_pool_destroy(device->dma_pool);
	}

	return err;
}

/* ioat1_intr_quirk - fix up dma ctrl register to enable / disable msi */
static void ioat1_intr_quirk(struct ioatdma_device *device)
{
	struct pci_dev *pdev = device->pdev;
	u32 dmactrl;

	pci_read_config_dword(pdev, IOAT_PCI_DMACTRL_OFFSET, &dmactrl);
	if (pdev->msi_enabled)
		dmactrl |= IOAT_PCI_DMACTRL_MSI_EN;
	else
		dmactrl &= ~IOAT_PCI_DMACTRL_MSI_EN;
	pci_write_config_dword(pdev, IOAT_PCI_DMACTRL_OFFSET, dmactrl);
}

int ioat1_dma_probe(struct ioatdma_device *device, int dca)
{
	struct pci_dev *pdev = device->pdev;
	struct dma_device *dma;
	int err;

	device->intr_quirk = ioat1_intr_quirk;
1196
	device->enumerate_channels = ioat1_enumerate_channels;
1197 1198 1199
	dma = &device->common;
	dma->device_prep_dma_memcpy = ioat1_dma_prep_memcpy;
	dma->device_issue_pending = ioat1_dma_memcpy_issue_pending;
1200 1201 1202
	dma->device_alloc_chan_resources = ioat1_dma_alloc_chan_resources;
	dma->device_free_chan_resources = ioat1_dma_free_chan_resources;
	dma->device_is_tx_complete = ioat1_dma_is_complete;
1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213

	err = ioat_probe(device);
	if (err)
		return err;
	ioat_set_tcp_copy_break(4096);
	err = ioat_register(device);
	if (err)
		return err;
	if (dca)
		device->dca = ioat_dca_init(pdev, device->reg_base);

1214
	INIT_DELAYED_WORK(&device->work, ioat1_chan_watchdog);
1215 1216 1217 1218 1219
	schedule_delayed_work(&device->work, WATCHDOG_DELAY);

	return err;
}

1220
void ioat_dma_remove(struct ioatdma_device *device)
1221
{
1222
	struct dma_device *dma = &device->common;
1223

1224 1225 1226
	if (device->version != IOAT_VER_3_0)
		cancel_delayed_work(&device->work);

1227
	ioat_disable_interrupts(device);
1228

1229
	dma_async_device_unregister(dma);
1230

1231 1232
	pci_pool_destroy(device->dma_pool);
	pci_pool_destroy(device->completion_pool);
1233

1234
	INIT_LIST_HEAD(&dma->channels);
1235
}