i915_gem_gtt.c 100.3 KB
Newer Older
1 2
/*
 * Copyright © 2010 Daniel Vetter
3
 * Copyright © 2011-2014 Intel Corporation
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice (including the next
 * paragraph) shall be included in all copies or substantial portions of the
 * Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 * IN THE SOFTWARE.
 *
 */

26
#include <linux/log2.h>
27
#include <linux/random.h>
28
#include <linux/seq_file.h>
29
#include <linux/stop_machine.h>
30

31 32
#include <drm/drmP.h>
#include <drm/i915_drm.h>
33

34
#include "i915_drv.h"
35
#include "i915_vgpu.h"
36 37
#include "i915_trace.h"
#include "intel_drv.h"
38
#include "intel_frontbuffer.h"
39

40 41
#define I915_GFP_DMA (GFP_KERNEL | __GFP_HIGHMEM)

42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
/**
 * DOC: Global GTT views
 *
 * Background and previous state
 *
 * Historically objects could exists (be bound) in global GTT space only as
 * singular instances with a view representing all of the object's backing pages
 * in a linear fashion. This view will be called a normal view.
 *
 * To support multiple views of the same object, where the number of mapped
 * pages is not equal to the backing store, or where the layout of the pages
 * is not linear, concept of a GGTT view was added.
 *
 * One example of an alternative view is a stereo display driven by a single
 * image. In this case we would have a framebuffer looking like this
 * (2x2 pages):
 *
 *    12
 *    34
 *
 * Above would represent a normal GGTT view as normally mapped for GPU or CPU
 * rendering. In contrast, fed to the display engine would be an alternative
 * view which could look something like this:
 *
 *   1212
 *   3434
 *
 * In this example both the size and layout of pages in the alternative view is
 * different from the normal view.
 *
 * Implementation and usage
 *
 * GGTT views are implemented using VMAs and are distinguished via enum
 * i915_ggtt_view_type and struct i915_ggtt_view.
 *
 * A new flavour of core GEM functions which work with GGTT bound objects were
78 79 80
 * added with the _ggtt_ infix, and sometimes with _view postfix to avoid
 * renaming  in large amounts of code. They take the struct i915_ggtt_view
 * parameter encapsulating all metadata required to implement a view.
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
 *
 * As a helper for callers which are only interested in the normal view,
 * globally const i915_ggtt_view_normal singleton instance exists. All old core
 * GEM API functions, the ones not taking the view parameter, are operating on,
 * or with the normal GGTT view.
 *
 * Code wanting to add or use a new GGTT view needs to:
 *
 * 1. Add a new enum with a suitable name.
 * 2. Extend the metadata in the i915_ggtt_view structure if required.
 * 3. Add support to i915_get_vma_pages().
 *
 * New views are required to build a scatter-gather table from within the
 * i915_get_vma_pages function. This table is stored in the vma.ggtt_view and
 * exists for the lifetime of an VMA.
 *
 * Core API is designed to have copy semantics which means that passed in
 * struct i915_ggtt_view does not need to be persistent (left around after
 * calling the core API functions).
 *
 */

103 104 105
static int
i915_get_ggtt_vma_pages(struct i915_vma *vma);

106 107 108
const struct i915_ggtt_view i915_ggtt_view_normal = {
	.type = I915_GGTT_VIEW_NORMAL,
};
109
const struct i915_ggtt_view i915_ggtt_view_rotated = {
110
	.type = I915_GGTT_VIEW_ROTATED,
111
};
112

113 114
int intel_sanitize_enable_ppgtt(struct drm_i915_private *dev_priv,
			       	int enable_ppgtt)
115
{
116 117
	bool has_aliasing_ppgtt;
	bool has_full_ppgtt;
118
	bool has_full_48bit_ppgtt;
119

120 121 122
	has_aliasing_ppgtt = dev_priv->info.has_aliasing_ppgtt;
	has_full_ppgtt = dev_priv->info.has_full_ppgtt;
	has_full_48bit_ppgtt = dev_priv->info.has_full_48bit_ppgtt;
123

124 125 126 127 128
	if (intel_vgpu_active(dev_priv)) {
		/* emulation is too hard */
		has_full_ppgtt = false;
		has_full_48bit_ppgtt = false;
	}
129

130 131 132
	if (!has_aliasing_ppgtt)
		return 0;

133 134 135 136
	/*
	 * We don't allow disabling PPGTT for gen9+ as it's a requirement for
	 * execlists, the sole mechanism available to submit work.
	 */
137
	if (enable_ppgtt == 0 && INTEL_GEN(dev_priv) < 9)
138 139 140 141 142
		return 0;

	if (enable_ppgtt == 1)
		return 1;

143
	if (enable_ppgtt == 2 && has_full_ppgtt)
144 145
		return 2;

146 147 148
	if (enable_ppgtt == 3 && has_full_48bit_ppgtt)
		return 3;

149 150
#ifdef CONFIG_INTEL_IOMMU
	/* Disable ppgtt on SNB if VT-d is on. */
151
	if (IS_GEN6(dev_priv) && intel_iommu_gfx_mapped) {
152
		DRM_INFO("Disabling PPGTT because VT-d is on\n");
153
		return 0;
154 155 156
	}
#endif

157
	/* Early VLV doesn't have this */
158
	if (IS_VALLEYVIEW(dev_priv) && dev_priv->drm.pdev->revision < 0xb) {
159 160 161 162
		DRM_DEBUG_DRIVER("disabling PPGTT on pre-B3 step VLV\n");
		return 0;
	}

163
	if (INTEL_GEN(dev_priv) >= 8 && i915.enable_execlists && has_full_ppgtt)
164
		return has_full_48bit_ppgtt ? 3 : 2;
165 166
	else
		return has_aliasing_ppgtt ? 1 : 0;
167 168
}

169 170 171
static int ppgtt_bind_vma(struct i915_vma *vma,
			  enum i915_cache_level cache_level,
			  u32 unused)
172 173 174
{
	u32 pte_flags = 0;

C
Chris Wilson 已提交
175
	vma->pages = vma->obj->mm.pages;
176

177 178 179 180
	/* Currently applicable only to VLV */
	if (vma->obj->gt_ro)
		pte_flags |= PTE_READ_ONLY;

181
	vma->vm->insert_entries(vma->vm, vma->pages, vma->node.start,
182
				cache_level, pte_flags);
183 184

	return 0;
185 186 187 188 189 190
}

static void ppgtt_unbind_vma(struct i915_vma *vma)
{
	vma->vm->clear_range(vma->vm,
			     vma->node.start,
191
			     vma->size);
192
}
193

194
static gen8_pte_t gen8_pte_encode(dma_addr_t addr,
195
				  enum i915_cache_level level)
B
Ben Widawsky 已提交
196
{
197
	gen8_pte_t pte = _PAGE_PRESENT | _PAGE_RW;
B
Ben Widawsky 已提交
198
	pte |= addr;
199 200 201

	switch (level) {
	case I915_CACHE_NONE:
B
Ben Widawsky 已提交
202
		pte |= PPAT_UNCACHED_INDEX;
203 204 205 206 207 208 209 210 211
		break;
	case I915_CACHE_WT:
		pte |= PPAT_DISPLAY_ELLC_INDEX;
		break;
	default:
		pte |= PPAT_CACHED_INDEX;
		break;
	}

B
Ben Widawsky 已提交
212 213 214
	return pte;
}

215 216
static gen8_pde_t gen8_pde_encode(const dma_addr_t addr,
				  const enum i915_cache_level level)
B
Ben Widawsky 已提交
217
{
218
	gen8_pde_t pde = _PAGE_PRESENT | _PAGE_RW;
B
Ben Widawsky 已提交
219 220 221 222 223 224 225 226
	pde |= addr;
	if (level != I915_CACHE_NONE)
		pde |= PPAT_CACHED_PDE_INDEX;
	else
		pde |= PPAT_UNCACHED_INDEX;
	return pde;
}

227 228 229
#define gen8_pdpe_encode gen8_pde_encode
#define gen8_pml4e_encode gen8_pde_encode

230 231
static gen6_pte_t snb_pte_encode(dma_addr_t addr,
				 enum i915_cache_level level,
232
				 u32 unused)
233
{
234
	gen6_pte_t pte = GEN6_PTE_VALID;
235
	pte |= GEN6_PTE_ADDR_ENCODE(addr);
236 237

	switch (level) {
238 239 240 241 242 243 244 245
	case I915_CACHE_L3_LLC:
	case I915_CACHE_LLC:
		pte |= GEN6_PTE_CACHE_LLC;
		break;
	case I915_CACHE_NONE:
		pte |= GEN6_PTE_UNCACHED;
		break;
	default:
246
		MISSING_CASE(level);
247 248 249 250 251
	}

	return pte;
}

252 253
static gen6_pte_t ivb_pte_encode(dma_addr_t addr,
				 enum i915_cache_level level,
254
				 u32 unused)
255
{
256
	gen6_pte_t pte = GEN6_PTE_VALID;
257 258 259 260 261
	pte |= GEN6_PTE_ADDR_ENCODE(addr);

	switch (level) {
	case I915_CACHE_L3_LLC:
		pte |= GEN7_PTE_CACHE_L3_LLC;
262 263 264 265 266
		break;
	case I915_CACHE_LLC:
		pte |= GEN6_PTE_CACHE_LLC;
		break;
	case I915_CACHE_NONE:
267
		pte |= GEN6_PTE_UNCACHED;
268 269
		break;
	default:
270
		MISSING_CASE(level);
271 272
	}

273 274 275
	return pte;
}

276 277
static gen6_pte_t byt_pte_encode(dma_addr_t addr,
				 enum i915_cache_level level,
278
				 u32 flags)
279
{
280
	gen6_pte_t pte = GEN6_PTE_VALID;
281 282
	pte |= GEN6_PTE_ADDR_ENCODE(addr);

283 284
	if (!(flags & PTE_READ_ONLY))
		pte |= BYT_PTE_WRITEABLE;
285 286 287 288 289 290 291

	if (level != I915_CACHE_NONE)
		pte |= BYT_PTE_SNOOPED_BY_CPU_CACHES;

	return pte;
}

292 293
static gen6_pte_t hsw_pte_encode(dma_addr_t addr,
				 enum i915_cache_level level,
294
				 u32 unused)
295
{
296
	gen6_pte_t pte = GEN6_PTE_VALID;
297
	pte |= HSW_PTE_ADDR_ENCODE(addr);
298 299

	if (level != I915_CACHE_NONE)
300
		pte |= HSW_WB_LLC_AGE3;
301 302 303 304

	return pte;
}

305 306
static gen6_pte_t iris_pte_encode(dma_addr_t addr,
				  enum i915_cache_level level,
307
				  u32 unused)
308
{
309
	gen6_pte_t pte = GEN6_PTE_VALID;
310 311
	pte |= HSW_PTE_ADDR_ENCODE(addr);

312 313 314 315
	switch (level) {
	case I915_CACHE_NONE:
		break;
	case I915_CACHE_WT:
316
		pte |= HSW_WT_ELLC_LLC_AGE3;
317 318
		break;
	default:
319
		pte |= HSW_WB_ELLC_LLC_AGE3;
320 321
		break;
	}
322 323 324 325

	return pte;
}

326
static int __setup_page_dma(struct drm_i915_private *dev_priv,
327
			    struct i915_page_dma *p, gfp_t flags)
328
{
329
	struct device *kdev = &dev_priv->drm.pdev->dev;
330

331
	p->page = alloc_page(flags);
332 333
	if (!p->page)
		return -ENOMEM;
334

335
	p->daddr = dma_map_page(kdev,
336
				p->page, 0, PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
337

338
	if (dma_mapping_error(kdev, p->daddr)) {
339 340 341
		__free_page(p->page);
		return -EINVAL;
	}
342 343

	return 0;
344 345
}

346 347
static int setup_page_dma(struct drm_i915_private *dev_priv,
			  struct i915_page_dma *p)
348
{
349
	return __setup_page_dma(dev_priv, p, I915_GFP_DMA);
350 351
}

352 353
static void cleanup_page_dma(struct drm_i915_private *dev_priv,
			     struct i915_page_dma *p)
354
{
355
	struct pci_dev *pdev = dev_priv->drm.pdev;
D
David Weinehall 已提交
356

357
	if (WARN_ON(!p->page))
358
		return;
359

360
	dma_unmap_page(&pdev->dev, p->daddr, PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
361 362 363 364
	__free_page(p->page);
	memset(p, 0, sizeof(*p));
}

365
static void *kmap_page_dma(struct i915_page_dma *p)
366
{
367 368
	return kmap_atomic(p->page);
}
369

370 371 372
/* We use the flushing unmap only with ppgtt structures:
 * page directories, page tables and scratch pages.
 */
373
static void kunmap_page_dma(struct drm_i915_private *dev_priv, void *vaddr)
374
{
375 376 377
	/* There are only few exceptions for gen >=6. chv and bxt.
	 * And we are not sure about the latter so play safe for now.
	 */
378
	if (IS_CHERRYVIEW(dev_priv) || IS_GEN9_LP(dev_priv))
379 380 381 382 383
		drm_clflush_virt_range(vaddr, PAGE_SIZE);

	kunmap_atomic(vaddr);
}

384
#define kmap_px(px) kmap_page_dma(px_base(px))
385
#define kunmap_px(ppgtt, vaddr) \
386
		kunmap_page_dma((ppgtt)->base.i915, (vaddr))
387

388 389
#define setup_px(dev_priv, px) setup_page_dma((dev_priv), px_base(px))
#define cleanup_px(dev_priv, px) cleanup_page_dma((dev_priv), px_base(px))
390 391 392
#define fill_px(dev_priv, px, v) fill_page_dma((dev_priv), px_base(px), (v))
#define fill32_px(dev_priv, px, v) \
		fill_page_dma_32((dev_priv), px_base(px), (v))
393

394 395
static void fill_page_dma(struct drm_i915_private *dev_priv,
			  struct i915_page_dma *p, const uint64_t val)
396 397 398 399 400 401 402
{
	int i;
	uint64_t * const vaddr = kmap_page_dma(p);

	for (i = 0; i < 512; i++)
		vaddr[i] = val;

403
	kunmap_page_dma(dev_priv, vaddr);
404 405
}

406 407
static void fill_page_dma_32(struct drm_i915_private *dev_priv,
			     struct i915_page_dma *p, const uint32_t val32)
408 409 410 411 412
{
	uint64_t v = val32;

	v = v << 32 | val32;

413
	fill_page_dma(dev_priv, p, v);
414 415
}

416
static int
417
setup_scratch_page(struct drm_i915_private *dev_priv,
418 419
		   struct i915_page_dma *scratch,
		   gfp_t gfp)
420
{
421
	return __setup_page_dma(dev_priv, scratch, gfp | __GFP_ZERO);
422 423
}

424
static void cleanup_scratch_page(struct drm_i915_private *dev_priv,
425
				 struct i915_page_dma *scratch)
426
{
427
	cleanup_page_dma(dev_priv, scratch);
428 429
}

430
static struct i915_page_table *alloc_pt(struct drm_i915_private *dev_priv)
431
{
432
	struct i915_page_table *pt;
433
	const size_t count = INTEL_GEN(dev_priv) >= 8 ? GEN8_PTES : GEN6_PTES;
434
	int ret = -ENOMEM;
435 436 437 438 439

	pt = kzalloc(sizeof(*pt), GFP_KERNEL);
	if (!pt)
		return ERR_PTR(-ENOMEM);

440 441 442 443 444 445
	pt->used_ptes = kcalloc(BITS_TO_LONGS(count), sizeof(*pt->used_ptes),
				GFP_KERNEL);

	if (!pt->used_ptes)
		goto fail_bitmap;

446
	ret = setup_px(dev_priv, pt);
447
	if (ret)
448
		goto fail_page_m;
449 450

	return pt;
451

452
fail_page_m:
453 454 455 456 457
	kfree(pt->used_ptes);
fail_bitmap:
	kfree(pt);

	return ERR_PTR(ret);
458 459
}

460 461
static void free_pt(struct drm_i915_private *dev_priv,
		    struct i915_page_table *pt)
462
{
463
	cleanup_px(dev_priv, pt);
464 465 466 467 468 469 470 471 472
	kfree(pt->used_ptes);
	kfree(pt);
}

static void gen8_initialize_pt(struct i915_address_space *vm,
			       struct i915_page_table *pt)
{
	gen8_pte_t scratch_pte;

473
	scratch_pte = gen8_pte_encode(vm->scratch_page.daddr,
474
				      I915_CACHE_LLC);
475

476
	fill_px(vm->i915, pt, scratch_pte);
477 478 479 480 481 482 483
}

static void gen6_initialize_pt(struct i915_address_space *vm,
			       struct i915_page_table *pt)
{
	gen6_pte_t scratch_pte;

484
	WARN_ON(vm->scratch_page.daddr == 0);
485

486
	scratch_pte = vm->pte_encode(vm->scratch_page.daddr,
487
				     I915_CACHE_LLC, 0);
488

489
	fill32_px(vm->i915, pt, scratch_pte);
490 491
}

492
static struct i915_page_directory *alloc_pd(struct drm_i915_private *dev_priv)
493
{
494
	struct i915_page_directory *pd;
495
	int ret = -ENOMEM;
496 497 498 499 500

	pd = kzalloc(sizeof(*pd), GFP_KERNEL);
	if (!pd)
		return ERR_PTR(-ENOMEM);

501 502 503
	pd->used_pdes = kcalloc(BITS_TO_LONGS(I915_PDES),
				sizeof(*pd->used_pdes), GFP_KERNEL);
	if (!pd->used_pdes)
504
		goto fail_bitmap;
505

506
	ret = setup_px(dev_priv, pd);
507
	if (ret)
508
		goto fail_page_m;
509

510
	return pd;
511

512
fail_page_m:
513
	kfree(pd->used_pdes);
514
fail_bitmap:
515 516 517
	kfree(pd);

	return ERR_PTR(ret);
518 519
}

520 521
static void free_pd(struct drm_i915_private *dev_priv,
		    struct i915_page_directory *pd)
522 523
{
	if (px_page(pd)) {
524
		cleanup_px(dev_priv, pd);
525 526 527 528 529 530 531 532 533 534 535 536
		kfree(pd->used_pdes);
		kfree(pd);
	}
}

static void gen8_initialize_pd(struct i915_address_space *vm,
			       struct i915_page_directory *pd)
{
	gen8_pde_t scratch_pde;

	scratch_pde = gen8_pde_encode(px_dma(vm->scratch_pt), I915_CACHE_LLC);

537
	fill_px(vm->i915, pd, scratch_pde);
538 539
}

540
static int __pdp_init(struct drm_i915_private *dev_priv,
541 542
		      struct i915_page_directory_pointer *pdp)
{
543
	size_t pdpes = I915_PDPES_PER_PDP(dev_priv);
544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570

	pdp->used_pdpes = kcalloc(BITS_TO_LONGS(pdpes),
				  sizeof(unsigned long),
				  GFP_KERNEL);
	if (!pdp->used_pdpes)
		return -ENOMEM;

	pdp->page_directory = kcalloc(pdpes, sizeof(*pdp->page_directory),
				      GFP_KERNEL);
	if (!pdp->page_directory) {
		kfree(pdp->used_pdpes);
		/* the PDP might be the statically allocated top level. Keep it
		 * as clean as possible */
		pdp->used_pdpes = NULL;
		return -ENOMEM;
	}

	return 0;
}

static void __pdp_fini(struct i915_page_directory_pointer *pdp)
{
	kfree(pdp->used_pdpes);
	kfree(pdp->page_directory);
	pdp->page_directory = NULL;
}

571
static struct
572
i915_page_directory_pointer *alloc_pdp(struct drm_i915_private *dev_priv)
573 574 575 576
{
	struct i915_page_directory_pointer *pdp;
	int ret = -ENOMEM;

577
	WARN_ON(!USES_FULL_48BIT_PPGTT(dev_priv));
578 579 580 581 582

	pdp = kzalloc(sizeof(*pdp), GFP_KERNEL);
	if (!pdp)
		return ERR_PTR(-ENOMEM);

583
	ret = __pdp_init(dev_priv, pdp);
584 585 586
	if (ret)
		goto fail_bitmap;

587
	ret = setup_px(dev_priv, pdp);
588 589 590 591 592 593 594 595 596 597 598 599 600
	if (ret)
		goto fail_page_m;

	return pdp;

fail_page_m:
	__pdp_fini(pdp);
fail_bitmap:
	kfree(pdp);

	return ERR_PTR(ret);
}

601
static void free_pdp(struct drm_i915_private *dev_priv,
602 603 604
		     struct i915_page_directory_pointer *pdp)
{
	__pdp_fini(pdp);
605 606
	if (USES_FULL_48BIT_PPGTT(dev_priv)) {
		cleanup_px(dev_priv, pdp);
607 608 609 610
		kfree(pdp);
	}
}

611 612 613 614 615 616 617
static void gen8_initialize_pdp(struct i915_address_space *vm,
				struct i915_page_directory_pointer *pdp)
{
	gen8_ppgtt_pdpe_t scratch_pdpe;

	scratch_pdpe = gen8_pdpe_encode(px_dma(vm->scratch_pd), I915_CACHE_LLC);

618
	fill_px(vm->i915, pdp, scratch_pdpe);
619 620 621 622 623 624 625 626 627 628
}

static void gen8_initialize_pml4(struct i915_address_space *vm,
				 struct i915_pml4 *pml4)
{
	gen8_ppgtt_pml4e_t scratch_pml4e;

	scratch_pml4e = gen8_pml4e_encode(px_dma(vm->scratch_pdp),
					  I915_CACHE_LLC);

629
	fill_px(vm->i915, pml4, scratch_pml4e);
630 631
}

632
static void
633 634 635 636
gen8_setup_pdpe(struct i915_hw_ppgtt *ppgtt,
		struct i915_page_directory_pointer *pdp,
		struct i915_page_directory *pd,
		int index)
637 638 639
{
	gen8_ppgtt_pdpe_t *page_directorypo;

640
	if (!USES_FULL_48BIT_PPGTT(to_i915(ppgtt->base.dev)))
641 642 643 644 645 646 647 648
		return;

	page_directorypo = kmap_px(pdp);
	page_directorypo[index] = gen8_pdpe_encode(px_dma(pd), I915_CACHE_LLC);
	kunmap_px(ppgtt, page_directorypo);
}

static void
649 650 651 652
gen8_setup_pml4e(struct i915_hw_ppgtt *ppgtt,
		 struct i915_pml4 *pml4,
		 struct i915_page_directory_pointer *pdp,
		 int index)
653 654 655
{
	gen8_ppgtt_pml4e_t *pagemap = kmap_px(pml4);

656
	WARN_ON(!USES_FULL_48BIT_PPGTT(to_i915(ppgtt->base.dev)));
657 658
	pagemap[index] = gen8_pml4e_encode(px_dma(pdp), I915_CACHE_LLC);
	kunmap_px(ppgtt, pagemap);
659 660
}

661
/* Broadwell Page Directory Pointer Descriptors */
662
static int gen8_write_pdp(struct drm_i915_gem_request *req,
663 664
			  unsigned entry,
			  dma_addr_t addr)
665
{
666
	struct intel_ring *ring = req->ring;
667
	struct intel_engine_cs *engine = req->engine;
668 669 670 671
	int ret;

	BUG_ON(entry >= 4);

672
	ret = intel_ring_begin(req, 6);
673 674 675
	if (ret)
		return ret;

676 677 678 679 680 681 682
	intel_ring_emit(ring, MI_LOAD_REGISTER_IMM(1));
	intel_ring_emit_reg(ring, GEN8_RING_PDP_UDW(engine, entry));
	intel_ring_emit(ring, upper_32_bits(addr));
	intel_ring_emit(ring, MI_LOAD_REGISTER_IMM(1));
	intel_ring_emit_reg(ring, GEN8_RING_PDP_LDW(engine, entry));
	intel_ring_emit(ring, lower_32_bits(addr));
	intel_ring_advance(ring);
683 684 685 686

	return 0;
}

687 688
static int gen8_legacy_mm_switch(struct i915_hw_ppgtt *ppgtt,
				 struct drm_i915_gem_request *req)
689
{
690
	int i, ret;
691

692
	for (i = GEN8_LEGACY_PDPES - 1; i >= 0; i--) {
693 694
		const dma_addr_t pd_daddr = i915_page_dir_dma_addr(ppgtt, i);

695
		ret = gen8_write_pdp(req, i, pd_daddr);
696 697
		if (ret)
			return ret;
698
	}
B
Ben Widawsky 已提交
699

700
	return 0;
701 702
}

703 704 705 706 707 708
static int gen8_48b_mm_switch(struct i915_hw_ppgtt *ppgtt,
			      struct drm_i915_gem_request *req)
{
	return gen8_write_pdp(req, 0, px_dma(&ppgtt->pml4));
}

709 710 711 712 713 714 715
/* PDE TLBs are a pain to invalidate on GEN8+. When we modify
 * the page table structures, we mark them dirty so that
 * context switching/execlist queuing code takes extra steps
 * to ensure that tlbs are flushed.
 */
static void mark_tlbs_dirty(struct i915_hw_ppgtt *ppgtt)
{
716
	ppgtt->pd_dirty_rings = INTEL_INFO(ppgtt->base.i915)->ring_mask;
717 718
}

719 720 721 722
/* Removes entries from a single page table, releasing it if it's empty.
 * Caller can use the return value to update higher-level entries.
 */
static bool gen8_ppgtt_clear_pt(struct i915_address_space *vm,
723 724 725
				struct i915_page_table *pt,
				uint64_t start,
				uint64_t length)
726
{
727
	struct i915_hw_ppgtt *ppgtt = i915_vm_to_ppgtt(vm);
728
	unsigned int num_entries = gen8_pte_count(start, length);
M
Mika Kuoppala 已提交
729 730
	unsigned int pte = gen8_pte_index(start);
	unsigned int pte_end = pte + num_entries;
731
	gen8_pte_t *pt_vaddr;
732 733
	gen8_pte_t scratch_pte = gen8_pte_encode(vm->scratch_page.daddr,
						 I915_CACHE_LLC);
734

735
	if (WARN_ON(!px_page(pt)))
736
		return false;
737

M
Mika Kuoppala 已提交
738 739 740
	GEM_BUG_ON(pte_end > GEN8_PTES);

	bitmap_clear(pt->used_ptes, pte, num_entries);
741

742
	if (bitmap_empty(pt->used_ptes, GEN8_PTES))
743 744
		return true;

745 746
	pt_vaddr = kmap_px(pt);

M
Mika Kuoppala 已提交
747 748
	while (pte < pte_end)
		pt_vaddr[pte++] = scratch_pte;
749

750
	kunmap_px(ppgtt, pt_vaddr);
751 752

	return false;
753
}
754

755 756 757 758
/* Removes entries from a single page dir, releasing it if it's empty.
 * Caller can use the return value to update higher-level entries
 */
static bool gen8_ppgtt_clear_pd(struct i915_address_space *vm,
759 760 761 762
				struct i915_page_directory *pd,
				uint64_t start,
				uint64_t length)
{
763
	struct i915_hw_ppgtt *ppgtt = i915_vm_to_ppgtt(vm);
764 765
	struct i915_page_table *pt;
	uint64_t pde;
766 767 768
	gen8_pde_t *pde_vaddr;
	gen8_pde_t scratch_pde = gen8_pde_encode(px_dma(vm->scratch_pt),
						 I915_CACHE_LLC);
769 770

	gen8_for_each_pde(pt, pd, start, length, pde) {
771
		if (WARN_ON(!pd->page_table[pde]))
772
			break;
773

774 775 776 777 778
		if (gen8_ppgtt_clear_pt(vm, pt, start, length)) {
			__clear_bit(pde, pd->used_pdes);
			pde_vaddr = kmap_px(pd);
			pde_vaddr[pde] = scratch_pde;
			kunmap_px(ppgtt, pde_vaddr);
779
			free_pt(vm->i915, pt);
780 781 782
		}
	}

783
	if (bitmap_empty(pd->used_pdes, I915_PDES))
784 785 786
		return true;

	return false;
787
}
788

789 790 791 792
/* Removes entries from a single page dir pointer, releasing it if it's empty.
 * Caller can use the return value to update higher-level entries
 */
static bool gen8_ppgtt_clear_pdp(struct i915_address_space *vm,
793 794 795 796
				 struct i915_page_directory_pointer *pdp,
				 uint64_t start,
				 uint64_t length)
{
797
	struct i915_hw_ppgtt *ppgtt = i915_vm_to_ppgtt(vm);
798 799
	struct i915_page_directory *pd;
	uint64_t pdpe;
800

801 802 803
	gen8_for_each_pdpe(pd, pdp, start, length, pdpe) {
		if (WARN_ON(!pdp->page_directory[pdpe]))
			break;
804

805 806
		if (gen8_ppgtt_clear_pd(vm, pd, start, length)) {
			__clear_bit(pdpe, pdp->used_pdpes);
807
			gen8_setup_pdpe(ppgtt, pdp, vm->scratch_pd, pdpe);
808
			free_pd(vm->i915, pd);
809 810 811
		}
	}

812 813
	mark_tlbs_dirty(ppgtt);

814
	if (bitmap_empty(pdp->used_pdpes, I915_PDPES_PER_PDP(dev_priv)))
815 816 817
		return true;

	return false;
818
}
819

820 821 822 823
/* Removes entries from a single pml4.
 * This is the top-level structure in 4-level page tables used on gen8+.
 * Empty entries are always scratch pml4e.
 */
824 825 826 827 828
static void gen8_ppgtt_clear_pml4(struct i915_address_space *vm,
				  struct i915_pml4 *pml4,
				  uint64_t start,
				  uint64_t length)
{
829
	struct i915_hw_ppgtt *ppgtt = i915_vm_to_ppgtt(vm);
830 831
	struct i915_page_directory_pointer *pdp;
	uint64_t pml4e;
832

833
	GEM_BUG_ON(!USES_FULL_48BIT_PPGTT(vm->i915));
834

835 836 837
	gen8_for_each_pml4e(pdp, pml4, start, length, pml4e) {
		if (WARN_ON(!pml4->pdps[pml4e]))
			break;
838

839 840
		if (gen8_ppgtt_clear_pdp(vm, pdp, start, length)) {
			__clear_bit(pml4e, pml4->used_pml4es);
841
			gen8_setup_pml4e(ppgtt, pml4, vm->scratch_pdp, pml4e);
842
			free_pdp(vm->i915, pdp);
843
		}
844 845 846
	}
}

847
static void gen8_ppgtt_clear_range(struct i915_address_space *vm,
848
				   uint64_t start, uint64_t length)
849
{
850
	struct i915_hw_ppgtt *ppgtt = i915_vm_to_ppgtt(vm);
851

852
	if (USES_FULL_48BIT_PPGTT(vm->i915))
853 854 855
		gen8_ppgtt_clear_pml4(vm, &ppgtt->pml4, start, length);
	else
		gen8_ppgtt_clear_pdp(vm, &ppgtt->pdp, start, length);
856 857 858 859 860
}

static void
gen8_ppgtt_insert_pte_entries(struct i915_address_space *vm,
			      struct i915_page_directory_pointer *pdp,
861
			      struct sg_page_iter *sg_iter,
862 863 864
			      uint64_t start,
			      enum i915_cache_level cache_level)
{
865
	struct i915_hw_ppgtt *ppgtt = i915_vm_to_ppgtt(vm);
866
	gen8_pte_t *pt_vaddr;
867 868 869
	unsigned pdpe = gen8_pdpe_index(start);
	unsigned pde = gen8_pde_index(start);
	unsigned pte = gen8_pte_index(start);
870

871
	pt_vaddr = NULL;
872

873
	while (__sg_page_iter_next(sg_iter)) {
B
Ben Widawsky 已提交
874
		if (pt_vaddr == NULL) {
875
			struct i915_page_directory *pd = pdp->page_directory[pdpe];
876
			struct i915_page_table *pt = pd->page_table[pde];
877
			pt_vaddr = kmap_px(pt);
B
Ben Widawsky 已提交
878
		}
879

880
		pt_vaddr[pte] =
881
			gen8_pte_encode(sg_page_iter_dma_address(sg_iter),
882
					cache_level);
883
		if (++pte == GEN8_PTES) {
884
			kunmap_px(ppgtt, pt_vaddr);
885
			pt_vaddr = NULL;
886
			if (++pde == I915_PDES) {
887
				if (++pdpe == I915_PDPES_PER_PDP(vm->i915))
888
					break;
889 890 891
				pde = 0;
			}
			pte = 0;
892 893
		}
	}
894 895 896

	if (pt_vaddr)
		kunmap_px(ppgtt, pt_vaddr);
897 898
}

899 900 901 902 903 904
static void gen8_ppgtt_insert_entries(struct i915_address_space *vm,
				      struct sg_table *pages,
				      uint64_t start,
				      enum i915_cache_level cache_level,
				      u32 unused)
{
905
	struct i915_hw_ppgtt *ppgtt = i915_vm_to_ppgtt(vm);
906
	struct sg_page_iter sg_iter;
907

908
	__sg_page_iter_start(&sg_iter, pages->sgl, sg_nents(pages->sgl), 0);
909

910
	if (!USES_FULL_48BIT_PPGTT(vm->i915)) {
911 912 913 914
		gen8_ppgtt_insert_pte_entries(vm, &ppgtt->pdp, &sg_iter, start,
					      cache_level);
	} else {
		struct i915_page_directory_pointer *pdp;
915
		uint64_t pml4e;
916 917
		uint64_t length = (uint64_t)pages->orig_nents << PAGE_SHIFT;

918
		gen8_for_each_pml4e(pdp, &ppgtt->pml4, start, length, pml4e) {
919 920 921 922
			gen8_ppgtt_insert_pte_entries(vm, pdp, &sg_iter,
						      start, cache_level);
		}
	}
923 924
}

925
static void gen8_free_page_tables(struct drm_i915_private *dev_priv,
926
				  struct i915_page_directory *pd)
927 928 929
{
	int i;

930
	if (!px_page(pd))
931 932
		return;

933
	for_each_set_bit(i, pd->used_pdes, I915_PDES) {
934 935
		if (WARN_ON(!pd->page_table[i]))
			continue;
936

937
		free_pt(dev_priv, pd->page_table[i]);
938 939
		pd->page_table[i] = NULL;
	}
B
Ben Widawsky 已提交
940 941
}

942 943
static int gen8_init_scratch(struct i915_address_space *vm)
{
944
	struct drm_i915_private *dev_priv = vm->i915;
945
	int ret;
946

947
	ret = setup_scratch_page(dev_priv, &vm->scratch_page, I915_GFP_DMA);
948 949
	if (ret)
		return ret;
950

951
	vm->scratch_pt = alloc_pt(dev_priv);
952
	if (IS_ERR(vm->scratch_pt)) {
953 954
		ret = PTR_ERR(vm->scratch_pt);
		goto free_scratch_page;
955 956
	}

957
	vm->scratch_pd = alloc_pd(dev_priv);
958
	if (IS_ERR(vm->scratch_pd)) {
959 960
		ret = PTR_ERR(vm->scratch_pd);
		goto free_pt;
961 962
	}

963 964
	if (USES_FULL_48BIT_PPGTT(dev_priv)) {
		vm->scratch_pdp = alloc_pdp(dev_priv);
965
		if (IS_ERR(vm->scratch_pdp)) {
966 967
			ret = PTR_ERR(vm->scratch_pdp);
			goto free_pd;
968 969 970
		}
	}

971 972
	gen8_initialize_pt(vm, vm->scratch_pt);
	gen8_initialize_pd(vm, vm->scratch_pd);
973
	if (USES_FULL_48BIT_PPGTT(dev_priv))
974
		gen8_initialize_pdp(vm, vm->scratch_pdp);
975 976

	return 0;
977 978

free_pd:
979
	free_pd(dev_priv, vm->scratch_pd);
980
free_pt:
981
	free_pt(dev_priv, vm->scratch_pt);
982
free_scratch_page:
983
	cleanup_scratch_page(dev_priv, &vm->scratch_page);
984 985

	return ret;
986 987
}

988 989 990
static int gen8_ppgtt_notify_vgt(struct i915_hw_ppgtt *ppgtt, bool create)
{
	enum vgt_g2v_type msg;
991
	struct drm_i915_private *dev_priv = ppgtt->base.i915;
992 993
	int i;

994
	if (USES_FULL_48BIT_PPGTT(dev_priv)) {
995 996
		u64 daddr = px_dma(&ppgtt->pml4);

997 998
		I915_WRITE(vgtif_reg(pdp[0].lo), lower_32_bits(daddr));
		I915_WRITE(vgtif_reg(pdp[0].hi), upper_32_bits(daddr));
999 1000 1001 1002 1003 1004 1005

		msg = (create ? VGT_G2V_PPGTT_L4_PAGE_TABLE_CREATE :
				VGT_G2V_PPGTT_L4_PAGE_TABLE_DESTROY);
	} else {
		for (i = 0; i < GEN8_LEGACY_PDPES; i++) {
			u64 daddr = i915_page_dir_dma_addr(ppgtt, i);

1006 1007
			I915_WRITE(vgtif_reg(pdp[i].lo), lower_32_bits(daddr));
			I915_WRITE(vgtif_reg(pdp[i].hi), upper_32_bits(daddr));
1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018
		}

		msg = (create ? VGT_G2V_PPGTT_L3_PAGE_TABLE_CREATE :
				VGT_G2V_PPGTT_L3_PAGE_TABLE_DESTROY);
	}

	I915_WRITE(vgtif_reg(g2v_notify), msg);

	return 0;
}

1019 1020
static void gen8_free_scratch(struct i915_address_space *vm)
{
1021
	struct drm_i915_private *dev_priv = vm->i915;
1022

1023 1024 1025 1026 1027
	if (USES_FULL_48BIT_PPGTT(dev_priv))
		free_pdp(dev_priv, vm->scratch_pdp);
	free_pd(dev_priv, vm->scratch_pd);
	free_pt(dev_priv, vm->scratch_pt);
	cleanup_scratch_page(dev_priv, &vm->scratch_page);
1028 1029
}

1030
static void gen8_ppgtt_cleanup_3lvl(struct drm_i915_private *dev_priv,
1031
				    struct i915_page_directory_pointer *pdp)
1032 1033 1034
{
	int i;

1035
	for_each_set_bit(i, pdp->used_pdpes, I915_PDPES_PER_PDP(dev_priv)) {
1036
		if (WARN_ON(!pdp->page_directory[i]))
1037 1038
			continue;

1039 1040
		gen8_free_page_tables(dev_priv, pdp->page_directory[i]);
		free_pd(dev_priv, pdp->page_directory[i]);
1041
	}
1042

1043
	free_pdp(dev_priv, pdp);
1044 1045 1046 1047
}

static void gen8_ppgtt_cleanup_4lvl(struct i915_hw_ppgtt *ppgtt)
{
1048
	struct drm_i915_private *dev_priv = ppgtt->base.i915;
1049 1050 1051 1052 1053 1054
	int i;

	for_each_set_bit(i, ppgtt->pml4.used_pml4es, GEN8_PML4ES_PER_PML4) {
		if (WARN_ON(!ppgtt->pml4.pdps[i]))
			continue;

1055
		gen8_ppgtt_cleanup_3lvl(dev_priv, ppgtt->pml4.pdps[i]);
1056 1057
	}

1058
	cleanup_px(dev_priv, &ppgtt->pml4);
1059 1060 1061 1062
}

static void gen8_ppgtt_cleanup(struct i915_address_space *vm)
{
1063
	struct drm_i915_private *dev_priv = vm->i915;
1064
	struct i915_hw_ppgtt *ppgtt = i915_vm_to_ppgtt(vm);
1065

1066
	if (intel_vgpu_active(dev_priv))
1067 1068
		gen8_ppgtt_notify_vgt(ppgtt, false);

1069 1070
	if (!USES_FULL_48BIT_PPGTT(dev_priv))
		gen8_ppgtt_cleanup_3lvl(dev_priv, &ppgtt->pdp);
1071 1072
	else
		gen8_ppgtt_cleanup_4lvl(ppgtt);
1073

1074
	gen8_free_scratch(vm);
1075 1076
}

1077 1078
/**
 * gen8_ppgtt_alloc_pagetabs() - Allocate page tables for VA range.
1079 1080
 * @vm:	Master vm structure.
 * @pd:	Page directory for this address range.
1081
 * @start:	Starting virtual address to begin allocations.
1082
 * @length:	Size of the allocations.
1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094
 * @new_pts:	Bitmap set by function with new allocations. Likely used by the
 *		caller to free on error.
 *
 * Allocate the required number of page tables. Extremely similar to
 * gen8_ppgtt_alloc_page_directories(). The main difference is here we are limited by
 * the page directory boundary (instead of the page directory pointer). That
 * boundary is 1GB virtual. Therefore, unlike gen8_ppgtt_alloc_page_directories(), it is
 * possible, and likely that the caller will need to use multiple calls of this
 * function to achieve the appropriate allocation.
 *
 * Return: 0 if success; negative error code otherwise.
 */
1095
static int gen8_ppgtt_alloc_pagetabs(struct i915_address_space *vm,
1096
				     struct i915_page_directory *pd,
1097
				     uint64_t start,
1098 1099
				     uint64_t length,
				     unsigned long *new_pts)
1100
{
1101
	struct drm_i915_private *dev_priv = vm->i915;
1102
	struct i915_page_table *pt;
1103
	uint32_t pde;
1104

1105
	gen8_for_each_pde(pt, pd, start, length, pde) {
1106
		/* Don't reallocate page tables */
1107
		if (test_bit(pde, pd->used_pdes)) {
1108
			/* Scratch is never allocated this way */
1109
			WARN_ON(pt == vm->scratch_pt);
1110 1111 1112
			continue;
		}

1113
		pt = alloc_pt(dev_priv);
1114
		if (IS_ERR(pt))
1115 1116
			goto unwind_out;

1117
		gen8_initialize_pt(vm, pt);
1118
		pd->page_table[pde] = pt;
1119
		__set_bit(pde, new_pts);
1120
		trace_i915_page_table_entry_alloc(vm, pde, start, GEN8_PDE_SHIFT);
1121 1122
	}

1123
	return 0;
1124 1125

unwind_out:
1126
	for_each_set_bit(pde, new_pts, I915_PDES)
1127
		free_pt(dev_priv, pd->page_table[pde]);
1128

B
Ben Widawsky 已提交
1129
	return -ENOMEM;
1130 1131
}

1132 1133
/**
 * gen8_ppgtt_alloc_page_directories() - Allocate page directories for VA range.
1134
 * @vm:	Master vm structure.
1135 1136
 * @pdp:	Page directory pointer for this address range.
 * @start:	Starting virtual address to begin allocations.
1137 1138
 * @length:	Size of the allocations.
 * @new_pds:	Bitmap set by function with new allocations. Likely used by the
1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154
 *		caller to free on error.
 *
 * Allocate the required number of page directories starting at the pde index of
 * @start, and ending at the pde index @start + @length. This function will skip
 * over already allocated page directories within the range, and only allocate
 * new ones, setting the appropriate pointer within the pdp as well as the
 * correct position in the bitmap @new_pds.
 *
 * The function will only allocate the pages within the range for a give page
 * directory pointer. In other words, if @start + @length straddles a virtually
 * addressed PDP boundary (512GB for 4k pages), there will be more allocations
 * required by the caller, This is not currently possible, and the BUG in the
 * code will prevent it.
 *
 * Return: 0 if success; negative error code otherwise.
 */
1155 1156 1157 1158 1159 1160
static int
gen8_ppgtt_alloc_page_directories(struct i915_address_space *vm,
				  struct i915_page_directory_pointer *pdp,
				  uint64_t start,
				  uint64_t length,
				  unsigned long *new_pds)
1161
{
1162
	struct drm_i915_private *dev_priv = vm->i915;
1163
	struct i915_page_directory *pd;
1164
	uint32_t pdpe;
1165
	uint32_t pdpes = I915_PDPES_PER_PDP(dev_priv);
1166

1167
	WARN_ON(!bitmap_empty(new_pds, pdpes));
1168

1169
	gen8_for_each_pdpe(pd, pdp, start, length, pdpe) {
1170
		if (test_bit(pdpe, pdp->used_pdpes))
1171
			continue;
1172

1173
		pd = alloc_pd(dev_priv);
1174
		if (IS_ERR(pd))
B
Ben Widawsky 已提交
1175
			goto unwind_out;
1176

1177
		gen8_initialize_pd(vm, pd);
1178
		pdp->page_directory[pdpe] = pd;
1179
		__set_bit(pdpe, new_pds);
1180
		trace_i915_page_directory_entry_alloc(vm, pdpe, start, GEN8_PDPE_SHIFT);
B
Ben Widawsky 已提交
1181 1182
	}

1183
	return 0;
B
Ben Widawsky 已提交
1184 1185

unwind_out:
1186
	for_each_set_bit(pdpe, new_pds, pdpes)
1187
		free_pd(dev_priv, pdp->page_directory[pdpe]);
B
Ben Widawsky 已提交
1188 1189

	return -ENOMEM;
1190 1191
}

1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214
/**
 * gen8_ppgtt_alloc_page_dirpointers() - Allocate pdps for VA range.
 * @vm:	Master vm structure.
 * @pml4:	Page map level 4 for this address range.
 * @start:	Starting virtual address to begin allocations.
 * @length:	Size of the allocations.
 * @new_pdps:	Bitmap set by function with new allocations. Likely used by the
 *		caller to free on error.
 *
 * Allocate the required number of page directory pointers. Extremely similar to
 * gen8_ppgtt_alloc_page_directories() and gen8_ppgtt_alloc_pagetabs().
 * The main difference is here we are limited by the pml4 boundary (instead of
 * the page directory pointer).
 *
 * Return: 0 if success; negative error code otherwise.
 */
static int
gen8_ppgtt_alloc_page_dirpointers(struct i915_address_space *vm,
				  struct i915_pml4 *pml4,
				  uint64_t start,
				  uint64_t length,
				  unsigned long *new_pdps)
{
1215
	struct drm_i915_private *dev_priv = vm->i915;
1216 1217 1218 1219 1220
	struct i915_page_directory_pointer *pdp;
	uint32_t pml4e;

	WARN_ON(!bitmap_empty(new_pdps, GEN8_PML4ES_PER_PML4));

1221
	gen8_for_each_pml4e(pdp, pml4, start, length, pml4e) {
1222
		if (!test_bit(pml4e, pml4->used_pml4es)) {
1223
			pdp = alloc_pdp(dev_priv);
1224 1225 1226
			if (IS_ERR(pdp))
				goto unwind_out;

1227
			gen8_initialize_pdp(vm, pdp);
1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240
			pml4->pdps[pml4e] = pdp;
			__set_bit(pml4e, new_pdps);
			trace_i915_page_directory_pointer_entry_alloc(vm,
								      pml4e,
								      start,
								      GEN8_PML4E_SHIFT);
		}
	}

	return 0;

unwind_out:
	for_each_set_bit(pml4e, new_pdps, GEN8_PML4ES_PER_PML4)
1241
		free_pdp(dev_priv, pml4->pdps[pml4e]);
1242 1243 1244 1245

	return -ENOMEM;
}

1246
static void
1247
free_gen8_temp_bitmaps(unsigned long *new_pds, unsigned long *new_pts)
1248 1249 1250 1251 1252 1253 1254 1255 1256 1257
{
	kfree(new_pts);
	kfree(new_pds);
}

/* Fills in the page directory bitmap, and the array of page tables bitmap. Both
 * of these are based on the number of PDPEs in the system.
 */
static
int __must_check alloc_gen8_temp_bitmaps(unsigned long **new_pds,
1258
					 unsigned long **new_pts,
1259
					 uint32_t pdpes)
1260 1261
{
	unsigned long *pds;
1262
	unsigned long *pts;
1263

1264
	pds = kcalloc(BITS_TO_LONGS(pdpes), sizeof(unsigned long), GFP_TEMPORARY);
1265 1266 1267
	if (!pds)
		return -ENOMEM;

1268 1269 1270 1271
	pts = kcalloc(pdpes, BITS_TO_LONGS(I915_PDES) * sizeof(unsigned long),
		      GFP_TEMPORARY);
	if (!pts)
		goto err_out;
1272 1273 1274 1275 1276 1277 1278

	*new_pds = pds;
	*new_pts = pts;

	return 0;

err_out:
1279
	free_gen8_temp_bitmaps(pds, pts);
1280 1281 1282
	return -ENOMEM;
}

1283 1284 1285 1286
static int gen8_alloc_va_range_3lvl(struct i915_address_space *vm,
				    struct i915_page_directory_pointer *pdp,
				    uint64_t start,
				    uint64_t length)
1287
{
1288
	struct i915_hw_ppgtt *ppgtt = i915_vm_to_ppgtt(vm);
1289
	unsigned long *new_page_dirs, *new_page_tables;
1290
	struct drm_i915_private *dev_priv = vm->i915;
1291
	struct i915_page_directory *pd;
1292 1293
	const uint64_t orig_start = start;
	const uint64_t orig_length = length;
1294
	uint32_t pdpe;
1295
	uint32_t pdpes = I915_PDPES_PER_PDP(dev_priv);
1296 1297
	int ret;

1298
	ret = alloc_gen8_temp_bitmaps(&new_page_dirs, &new_page_tables, pdpes);
1299 1300 1301
	if (ret)
		return ret;

1302
	/* Do the allocations first so we can easily bail out */
1303 1304
	ret = gen8_ppgtt_alloc_page_directories(vm, pdp, start, length,
						new_page_dirs);
1305
	if (ret) {
1306
		free_gen8_temp_bitmaps(new_page_dirs, new_page_tables);
1307 1308 1309 1310
		return ret;
	}

	/* For every page directory referenced, allocate page tables */
1311
	gen8_for_each_pdpe(pd, pdp, start, length, pdpe) {
1312
		ret = gen8_ppgtt_alloc_pagetabs(vm, pd, start, length,
1313
						new_page_tables + pdpe * BITS_TO_LONGS(I915_PDES));
1314 1315 1316 1317
		if (ret)
			goto err_out;
	}

1318 1319 1320
	start = orig_start;
	length = orig_length;

1321 1322
	/* Allocations have completed successfully, so set the bitmaps, and do
	 * the mappings. */
1323
	gen8_for_each_pdpe(pd, pdp, start, length, pdpe) {
1324
		gen8_pde_t *const page_directory = kmap_px(pd);
1325
		struct i915_page_table *pt;
1326
		uint64_t pd_len = length;
1327 1328 1329
		uint64_t pd_start = start;
		uint32_t pde;

1330 1331 1332
		/* Every pd should be allocated, we just did that above. */
		WARN_ON(!pd);

1333
		gen8_for_each_pde(pt, pd, pd_start, pd_len, pde) {
1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344
			/* Same reasoning as pd */
			WARN_ON(!pt);
			WARN_ON(!pd_len);
			WARN_ON(!gen8_pte_count(pd_start, pd_len));

			/* Set our used ptes within the page table */
			bitmap_set(pt->used_ptes,
				   gen8_pte_index(pd_start),
				   gen8_pte_count(pd_start, pd_len));

			/* Our pde is now pointing to the pagetable, pt */
1345
			__set_bit(pde, pd->used_pdes);
1346 1347

			/* Map the PDE to the page table */
1348 1349
			page_directory[pde] = gen8_pde_encode(px_dma(pt),
							      I915_CACHE_LLC);
1350 1351 1352 1353
			trace_i915_page_table_entry_map(&ppgtt->base, pde, pt,
							gen8_pte_index(start),
							gen8_pte_count(start, length),
							GEN8_PTES);
1354 1355 1356

			/* NB: We haven't yet mapped ptes to pages. At this
			 * point we're still relying on insert_entries() */
1357
		}
1358

1359
		kunmap_px(ppgtt, page_directory);
1360
		__set_bit(pdpe, pdp->used_pdpes);
1361
		gen8_setup_pdpe(ppgtt, pdp, pd, pdpe);
1362 1363
	}

1364
	free_gen8_temp_bitmaps(new_page_dirs, new_page_tables);
1365
	mark_tlbs_dirty(ppgtt);
B
Ben Widawsky 已提交
1366
	return 0;
1367

B
Ben Widawsky 已提交
1368
err_out:
1369
	while (pdpe--) {
1370 1371
		unsigned long temp;

1372 1373
		for_each_set_bit(temp, new_page_tables + pdpe *
				BITS_TO_LONGS(I915_PDES), I915_PDES)
1374 1375
			free_pt(dev_priv,
				pdp->page_directory[pdpe]->page_table[temp]);
1376 1377
	}

1378
	for_each_set_bit(pdpe, new_page_dirs, pdpes)
1379
		free_pd(dev_priv, pdp->page_directory[pdpe]);
1380

1381
	free_gen8_temp_bitmaps(new_page_dirs, new_page_tables);
1382
	mark_tlbs_dirty(ppgtt);
1383 1384 1385
	return ret;
}

1386 1387 1388 1389 1390 1391
static int gen8_alloc_va_range_4lvl(struct i915_address_space *vm,
				    struct i915_pml4 *pml4,
				    uint64_t start,
				    uint64_t length)
{
	DECLARE_BITMAP(new_pdps, GEN8_PML4ES_PER_PML4);
1392
	struct i915_hw_ppgtt *ppgtt = i915_vm_to_ppgtt(vm);
1393
	struct i915_page_directory_pointer *pdp;
1394
	uint64_t pml4e;
1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412
	int ret = 0;

	/* Do the pml4 allocations first, so we don't need to track the newly
	 * allocated tables below the pdp */
	bitmap_zero(new_pdps, GEN8_PML4ES_PER_PML4);

	/* The pagedirectory and pagetable allocations are done in the shared 3
	 * and 4 level code. Just allocate the pdps.
	 */
	ret = gen8_ppgtt_alloc_page_dirpointers(vm, pml4, start, length,
						new_pdps);
	if (ret)
		return ret;

	WARN(bitmap_weight(new_pdps, GEN8_PML4ES_PER_PML4) > 2,
	     "The allocation has spanned more than 512GB. "
	     "It is highly likely this is incorrect.");

1413
	gen8_for_each_pml4e(pdp, pml4, start, length, pml4e) {
1414 1415 1416 1417 1418 1419
		WARN_ON(!pdp);

		ret = gen8_alloc_va_range_3lvl(vm, pdp, start, length);
		if (ret)
			goto err_out;

1420
		gen8_setup_pml4e(ppgtt, pml4, pdp, pml4e);
1421 1422 1423 1424 1425 1426 1427 1428 1429
	}

	bitmap_or(pml4->used_pml4es, new_pdps, pml4->used_pml4es,
		  GEN8_PML4ES_PER_PML4);

	return 0;

err_out:
	for_each_set_bit(pml4e, new_pdps, GEN8_PML4ES_PER_PML4)
1430
		gen8_ppgtt_cleanup_3lvl(vm->i915, pml4->pdps[pml4e]);
1431 1432 1433 1434 1435 1436 1437

	return ret;
}

static int gen8_alloc_va_range(struct i915_address_space *vm,
			       uint64_t start, uint64_t length)
{
1438
	struct i915_hw_ppgtt *ppgtt = i915_vm_to_ppgtt(vm);
1439

1440
	if (USES_FULL_48BIT_PPGTT(vm->i915))
1441 1442 1443 1444 1445
		return gen8_alloc_va_range_4lvl(vm, &ppgtt->pml4, start, length);
	else
		return gen8_alloc_va_range_3lvl(vm, &ppgtt->pdp, start, length);
}

1446 1447 1448 1449 1450 1451 1452 1453
static void gen8_dump_pdp(struct i915_page_directory_pointer *pdp,
			  uint64_t start, uint64_t length,
			  gen8_pte_t scratch_pte,
			  struct seq_file *m)
{
	struct i915_page_directory *pd;
	uint32_t pdpe;

1454
	gen8_for_each_pdpe(pd, pdp, start, length, pdpe) {
1455 1456 1457 1458 1459 1460 1461 1462 1463
		struct i915_page_table *pt;
		uint64_t pd_len = length;
		uint64_t pd_start = start;
		uint32_t pde;

		if (!test_bit(pdpe, pdp->used_pdpes))
			continue;

		seq_printf(m, "\tPDPE #%d\n", pdpe);
1464
		gen8_for_each_pde(pt, pd, pd_start, pd_len, pde) {
1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507
			uint32_t  pte;
			gen8_pte_t *pt_vaddr;

			if (!test_bit(pde, pd->used_pdes))
				continue;

			pt_vaddr = kmap_px(pt);
			for (pte = 0; pte < GEN8_PTES; pte += 4) {
				uint64_t va =
					(pdpe << GEN8_PDPE_SHIFT) |
					(pde << GEN8_PDE_SHIFT) |
					(pte << GEN8_PTE_SHIFT);
				int i;
				bool found = false;

				for (i = 0; i < 4; i++)
					if (pt_vaddr[pte + i] != scratch_pte)
						found = true;
				if (!found)
					continue;

				seq_printf(m, "\t\t0x%llx [%03d,%03d,%04d]: =", va, pdpe, pde, pte);
				for (i = 0; i < 4; i++) {
					if (pt_vaddr[pte + i] != scratch_pte)
						seq_printf(m, " %llx", pt_vaddr[pte + i]);
					else
						seq_puts(m, "  SCRATCH ");
				}
				seq_puts(m, "\n");
			}
			/* don't use kunmap_px, it could trigger
			 * an unnecessary flush.
			 */
			kunmap_atomic(pt_vaddr);
		}
	}
}

static void gen8_dump_ppgtt(struct i915_hw_ppgtt *ppgtt, struct seq_file *m)
{
	struct i915_address_space *vm = &ppgtt->base;
	uint64_t start = ppgtt->base.start;
	uint64_t length = ppgtt->base.total;
1508
	gen8_pte_t scratch_pte = gen8_pte_encode(vm->scratch_page.daddr,
1509
						 I915_CACHE_LLC);
1510

1511
	if (!USES_FULL_48BIT_PPGTT(vm->i915)) {
1512 1513
		gen8_dump_pdp(&ppgtt->pdp, start, length, scratch_pte, m);
	} else {
1514
		uint64_t pml4e;
1515 1516 1517
		struct i915_pml4 *pml4 = &ppgtt->pml4;
		struct i915_page_directory_pointer *pdp;

1518
		gen8_for_each_pml4e(pdp, pml4, start, length, pml4e) {
1519 1520 1521 1522 1523 1524 1525 1526 1527
			if (!test_bit(pml4e, pml4->used_pml4es))
				continue;

			seq_printf(m, "    PML4E #%llu\n", pml4e);
			gen8_dump_pdp(pdp, start, length, scratch_pte, m);
		}
	}
}

1528 1529
static int gen8_preallocate_top_level_pdps(struct i915_hw_ppgtt *ppgtt)
{
1530
	unsigned long *new_page_dirs, *new_page_tables;
1531
	uint32_t pdpes = I915_PDPES_PER_PDP(to_i915(ppgtt->base.dev));
1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549
	int ret;

	/* We allocate temp bitmap for page tables for no gain
	 * but as this is for init only, lets keep the things simple
	 */
	ret = alloc_gen8_temp_bitmaps(&new_page_dirs, &new_page_tables, pdpes);
	if (ret)
		return ret;

	/* Allocate for all pdps regardless of how the ppgtt
	 * was defined.
	 */
	ret = gen8_ppgtt_alloc_page_directories(&ppgtt->base, &ppgtt->pdp,
						0, 1ULL << 32,
						new_page_dirs);
	if (!ret)
		*ppgtt->pdp.used_pdpes = *new_page_dirs;

1550
	free_gen8_temp_bitmaps(new_page_dirs, new_page_tables);
1551 1552 1553 1554

	return ret;
}

1555
/*
1556 1557 1558 1559
 * GEN8 legacy ppgtt programming is accomplished through a max 4 PDP registers
 * with a net effect resembling a 2-level page table in normal x86 terms. Each
 * PDP represents 1GB of memory 4 * 512 * 512 * 4096 = 4GB legacy 32b address
 * space.
B
Ben Widawsky 已提交
1560
 *
1561
 */
1562
static int gen8_ppgtt_init(struct i915_hw_ppgtt *ppgtt)
B
Ben Widawsky 已提交
1563
{
1564
	struct drm_i915_private *dev_priv = ppgtt->base.i915;
1565
	int ret;
1566

1567 1568 1569
	ret = gen8_init_scratch(&ppgtt->base);
	if (ret)
		return ret;
1570

1571 1572
	ppgtt->base.start = 0;
	ppgtt->base.cleanup = gen8_ppgtt_cleanup;
1573
	ppgtt->base.allocate_va_range = gen8_alloc_va_range;
1574
	ppgtt->base.insert_entries = gen8_ppgtt_insert_entries;
1575
	ppgtt->base.clear_range = gen8_ppgtt_clear_range;
1576 1577
	ppgtt->base.unbind_vma = ppgtt_unbind_vma;
	ppgtt->base.bind_vma = ppgtt_bind_vma;
1578
	ppgtt->debug_dump = gen8_dump_ppgtt;
1579

1580 1581
	if (USES_FULL_48BIT_PPGTT(dev_priv)) {
		ret = setup_px(dev_priv, &ppgtt->pml4);
1582 1583
		if (ret)
			goto free_scratch;
1584

1585 1586
		gen8_initialize_pml4(&ppgtt->base, &ppgtt->pml4);

1587
		ppgtt->base.total = 1ULL << 48;
1588
		ppgtt->switch_mm = gen8_48b_mm_switch;
1589
	} else {
1590
		ret = __pdp_init(dev_priv, &ppgtt->pdp);
1591 1592 1593 1594
		if (ret)
			goto free_scratch;

		ppgtt->base.total = 1ULL << 32;
1595
		ppgtt->switch_mm = gen8_legacy_mm_switch;
1596 1597 1598
		trace_i915_page_directory_pointer_entry_alloc(&ppgtt->base,
							      0, 0,
							      GEN8_PML4E_SHIFT);
1599

1600
		if (intel_vgpu_active(dev_priv)) {
1601 1602 1603 1604
			ret = gen8_preallocate_top_level_pdps(ppgtt);
			if (ret)
				goto free_scratch;
		}
1605
	}
1606

1607
	if (intel_vgpu_active(dev_priv))
1608 1609
		gen8_ppgtt_notify_vgt(ppgtt, true);

1610
	return 0;
1611 1612 1613 1614

free_scratch:
	gen8_free_scratch(&ppgtt->base);
	return ret;
1615 1616
}

B
Ben Widawsky 已提交
1617 1618 1619
static void gen6_dump_ppgtt(struct i915_hw_ppgtt *ppgtt, struct seq_file *m)
{
	struct i915_address_space *vm = &ppgtt->base;
1620
	struct i915_page_table *unused;
1621
	gen6_pte_t scratch_pte;
B
Ben Widawsky 已提交
1622
	uint32_t pd_entry;
1623
	uint32_t  pte, pde;
1624
	uint32_t start = ppgtt->base.start, length = ppgtt->base.total;
B
Ben Widawsky 已提交
1625

1626
	scratch_pte = vm->pte_encode(vm->scratch_page.daddr,
1627
				     I915_CACHE_LLC, 0);
B
Ben Widawsky 已提交
1628

1629
	gen6_for_each_pde(unused, &ppgtt->pd, start, length, pde) {
B
Ben Widawsky 已提交
1630
		u32 expected;
1631
		gen6_pte_t *pt_vaddr;
1632
		const dma_addr_t pt_addr = px_dma(ppgtt->pd.page_table[pde]);
1633
		pd_entry = readl(ppgtt->pd_addr + pde);
B
Ben Widawsky 已提交
1634 1635 1636 1637 1638 1639 1640 1641 1642
		expected = (GEN6_PDE_ADDR_ENCODE(pt_addr) | GEN6_PDE_VALID);

		if (pd_entry != expected)
			seq_printf(m, "\tPDE #%d mismatch: Actual PDE: %x Expected PDE: %x\n",
				   pde,
				   pd_entry,
				   expected);
		seq_printf(m, "\tPDE: %x\n", pd_entry);

1643 1644
		pt_vaddr = kmap_px(ppgtt->pd.page_table[pde]);

1645
		for (pte = 0; pte < GEN6_PTES; pte+=4) {
B
Ben Widawsky 已提交
1646
			unsigned long va =
1647
				(pde * PAGE_SIZE * GEN6_PTES) +
B
Ben Widawsky 已提交
1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665
				(pte * PAGE_SIZE);
			int i;
			bool found = false;
			for (i = 0; i < 4; i++)
				if (pt_vaddr[pte + i] != scratch_pte)
					found = true;
			if (!found)
				continue;

			seq_printf(m, "\t\t0x%lx [%03d,%04d]: =", va, pde, pte);
			for (i = 0; i < 4; i++) {
				if (pt_vaddr[pte + i] != scratch_pte)
					seq_printf(m, " %08x", pt_vaddr[pte + i]);
				else
					seq_puts(m, "  SCRATCH ");
			}
			seq_puts(m, "\n");
		}
1666
		kunmap_px(ppgtt, pt_vaddr);
B
Ben Widawsky 已提交
1667 1668 1669
	}
}

1670
/* Write pde (index) from the page directory @pd to the page table @pt */
1671 1672
static void gen6_write_pde(struct i915_page_directory *pd,
			    const int pde, struct i915_page_table *pt)
B
Ben Widawsky 已提交
1673
{
1674 1675 1676 1677
	/* Caller needs to make sure the write completes if necessary */
	struct i915_hw_ppgtt *ppgtt =
		container_of(pd, struct i915_hw_ppgtt, pd);
	u32 pd_entry;
B
Ben Widawsky 已提交
1678

1679
	pd_entry = GEN6_PDE_ADDR_ENCODE(px_dma(pt));
1680
	pd_entry |= GEN6_PDE_VALID;
B
Ben Widawsky 已提交
1681

1682 1683
	writel(pd_entry, ppgtt->pd_addr + pde);
}
B
Ben Widawsky 已提交
1684

1685 1686 1687
/* Write all the page tables found in the ppgtt structure to incrementing page
 * directories. */
static void gen6_write_page_range(struct drm_i915_private *dev_priv,
1688
				  struct i915_page_directory *pd,
1689 1690
				  uint32_t start, uint32_t length)
{
1691
	struct i915_ggtt *ggtt = &dev_priv->ggtt;
1692
	struct i915_page_table *pt;
1693
	uint32_t pde;
1694

1695
	gen6_for_each_pde(pt, pd, start, length, pde)
1696 1697 1698 1699
		gen6_write_pde(pd, pde, pt);

	/* Make sure write is complete before other code can use this page
	 * table. Also require for WC mapped PTEs */
1700
	readl(ggtt->gsm);
B
Ben Widawsky 已提交
1701 1702
}

1703
static uint32_t get_pd_offset(struct i915_hw_ppgtt *ppgtt)
B
Ben Widawsky 已提交
1704
{
1705
	BUG_ON(ppgtt->pd.base.ggtt_offset & 0x3f);
1706

1707
	return (ppgtt->pd.base.ggtt_offset / 64) << 16;
1708 1709
}

1710
static int hsw_mm_switch(struct i915_hw_ppgtt *ppgtt,
1711
			 struct drm_i915_gem_request *req)
1712
{
1713
	struct intel_ring *ring = req->ring;
1714
	struct intel_engine_cs *engine = req->engine;
1715 1716 1717
	int ret;

	/* NB: TLBs must be flushed and invalidated before a switch */
1718
	ret = engine->emit_flush(req, EMIT_INVALIDATE | EMIT_FLUSH);
1719 1720 1721
	if (ret)
		return ret;

1722
	ret = intel_ring_begin(req, 6);
1723 1724 1725
	if (ret)
		return ret;

1726 1727 1728 1729 1730 1731 1732
	intel_ring_emit(ring, MI_LOAD_REGISTER_IMM(2));
	intel_ring_emit_reg(ring, RING_PP_DIR_DCLV(engine));
	intel_ring_emit(ring, PP_DIR_DCLV_2G);
	intel_ring_emit_reg(ring, RING_PP_DIR_BASE(engine));
	intel_ring_emit(ring, get_pd_offset(ppgtt));
	intel_ring_emit(ring, MI_NOOP);
	intel_ring_advance(ring);
1733 1734 1735 1736

	return 0;
}

1737
static int gen7_mm_switch(struct i915_hw_ppgtt *ppgtt,
1738
			  struct drm_i915_gem_request *req)
1739
{
1740
	struct intel_ring *ring = req->ring;
1741
	struct intel_engine_cs *engine = req->engine;
1742 1743 1744
	int ret;

	/* NB: TLBs must be flushed and invalidated before a switch */
1745
	ret = engine->emit_flush(req, EMIT_INVALIDATE | EMIT_FLUSH);
1746 1747 1748
	if (ret)
		return ret;

1749
	ret = intel_ring_begin(req, 6);
1750 1751 1752
	if (ret)
		return ret;

1753 1754 1755 1756 1757 1758 1759
	intel_ring_emit(ring, MI_LOAD_REGISTER_IMM(2));
	intel_ring_emit_reg(ring, RING_PP_DIR_DCLV(engine));
	intel_ring_emit(ring, PP_DIR_DCLV_2G);
	intel_ring_emit_reg(ring, RING_PP_DIR_BASE(engine));
	intel_ring_emit(ring, get_pd_offset(ppgtt));
	intel_ring_emit(ring, MI_NOOP);
	intel_ring_advance(ring);
1760

1761
	/* XXX: RCS is the only one to auto invalidate the TLBs? */
1762
	if (engine->id != RCS) {
1763
		ret = engine->emit_flush(req, EMIT_INVALIDATE | EMIT_FLUSH);
1764 1765 1766 1767
		if (ret)
			return ret;
	}

1768 1769 1770
	return 0;
}

1771
static int gen6_mm_switch(struct i915_hw_ppgtt *ppgtt,
1772
			  struct drm_i915_gem_request *req)
1773
{
1774
	struct intel_engine_cs *engine = req->engine;
1775
	struct drm_i915_private *dev_priv = req->i915;
1776

1777 1778
	I915_WRITE(RING_PP_DIR_DCLV(engine), PP_DIR_DCLV_2G);
	I915_WRITE(RING_PP_DIR_BASE(engine), get_pd_offset(ppgtt));
1779 1780 1781
	return 0;
}

1782
static void gen8_ppgtt_enable(struct drm_i915_private *dev_priv)
1783
{
1784
	struct intel_engine_cs *engine;
1785
	enum intel_engine_id id;
B
Ben Widawsky 已提交
1786

1787
	for_each_engine(engine, dev_priv, id) {
1788 1789
		u32 four_level = USES_FULL_48BIT_PPGTT(dev_priv) ?
				 GEN8_GFX_PPGTT_48B : 0;
1790
		I915_WRITE(RING_MODE_GEN7(engine),
1791
			   _MASKED_BIT_ENABLE(GFX_PPGTT_ENABLE | four_level));
1792 1793
	}
}
B
Ben Widawsky 已提交
1794

1795
static void gen7_ppgtt_enable(struct drm_i915_private *dev_priv)
B
Ben Widawsky 已提交
1796
{
1797
	struct intel_engine_cs *engine;
1798
	uint32_t ecochk, ecobits;
1799
	enum intel_engine_id id;
B
Ben Widawsky 已提交
1800

1801 1802
	ecobits = I915_READ(GAC_ECO_BITS);
	I915_WRITE(GAC_ECO_BITS, ecobits | ECOBITS_PPGTT_CACHE64B);
1803

1804
	ecochk = I915_READ(GAM_ECOCHK);
1805
	if (IS_HASWELL(dev_priv)) {
1806 1807 1808 1809 1810 1811
		ecochk |= ECOCHK_PPGTT_WB_HSW;
	} else {
		ecochk |= ECOCHK_PPGTT_LLC_IVB;
		ecochk &= ~ECOCHK_PPGTT_GFDT_IVB;
	}
	I915_WRITE(GAM_ECOCHK, ecochk);
1812

1813
	for_each_engine(engine, dev_priv, id) {
B
Ben Widawsky 已提交
1814
		/* GFX_MODE is per-ring on gen7+ */
1815
		I915_WRITE(RING_MODE_GEN7(engine),
1816
			   _MASKED_BIT_ENABLE(GFX_PPGTT_ENABLE));
B
Ben Widawsky 已提交
1817
	}
1818
}
B
Ben Widawsky 已提交
1819

1820
static void gen6_ppgtt_enable(struct drm_i915_private *dev_priv)
1821 1822
{
	uint32_t ecochk, gab_ctl, ecobits;
1823

1824 1825 1826
	ecobits = I915_READ(GAC_ECO_BITS);
	I915_WRITE(GAC_ECO_BITS, ecobits | ECOBITS_SNB_BIT |
		   ECOBITS_PPGTT_CACHE64B);
B
Ben Widawsky 已提交
1827

1828 1829 1830 1831 1832 1833 1834
	gab_ctl = I915_READ(GAB_CTL);
	I915_WRITE(GAB_CTL, gab_ctl | GAB_CTL_CONT_AFTER_PAGEFAULT);

	ecochk = I915_READ(GAM_ECOCHK);
	I915_WRITE(GAM_ECOCHK, ecochk | ECOCHK_SNB_BIT | ECOCHK_PPGTT_CACHE64B);

	I915_WRITE(GFX_MODE, _MASKED_BIT_ENABLE(GFX_PPGTT_ENABLE));
B
Ben Widawsky 已提交
1835 1836
}

1837
/* PPGTT support for Sandybdrige/Gen6 and later */
1838
static void gen6_ppgtt_clear_range(struct i915_address_space *vm,
1839
				   uint64_t start,
1840
				   uint64_t length)
1841
{
1842
	struct i915_hw_ppgtt *ppgtt = i915_vm_to_ppgtt(vm);
1843
	gen6_pte_t *pt_vaddr, scratch_pte;
1844 1845
	unsigned first_entry = start >> PAGE_SHIFT;
	unsigned num_entries = length >> PAGE_SHIFT;
1846 1847
	unsigned act_pt = first_entry / GEN6_PTES;
	unsigned first_pte = first_entry % GEN6_PTES;
1848
	unsigned last_pte, i;
1849

1850
	scratch_pte = vm->pte_encode(vm->scratch_page.daddr,
1851
				     I915_CACHE_LLC, 0);
1852

1853 1854
	while (num_entries) {
		last_pte = first_pte + num_entries;
1855 1856
		if (last_pte > GEN6_PTES)
			last_pte = GEN6_PTES;
1857

1858
		pt_vaddr = kmap_px(ppgtt->pd.page_table[act_pt]);
1859

1860 1861
		for (i = first_pte; i < last_pte; i++)
			pt_vaddr[i] = scratch_pte;
1862

1863
		kunmap_px(ppgtt, pt_vaddr);
1864

1865 1866
		num_entries -= last_pte - first_pte;
		first_pte = 0;
1867
		act_pt++;
1868
	}
1869 1870
}

1871
static void gen6_ppgtt_insert_entries(struct i915_address_space *vm,
D
Daniel Vetter 已提交
1872
				      struct sg_table *pages,
1873
				      uint64_t start,
1874
				      enum i915_cache_level cache_level, u32 flags)
D
Daniel Vetter 已提交
1875
{
1876
	struct i915_hw_ppgtt *ppgtt = i915_vm_to_ppgtt(vm);
1877
	unsigned first_entry = start >> PAGE_SHIFT;
1878 1879
	unsigned act_pt = first_entry / GEN6_PTES;
	unsigned act_pte = first_entry % GEN6_PTES;
1880 1881 1882
	gen6_pte_t *pt_vaddr = NULL;
	struct sgt_iter sgt_iter;
	dma_addr_t addr;
1883

1884
	for_each_sgt_dma(addr, sgt_iter, pages) {
1885
		if (pt_vaddr == NULL)
1886
			pt_vaddr = kmap_px(ppgtt->pd.page_table[act_pt]);
1887

1888
		pt_vaddr[act_pte] =
1889
			vm->pte_encode(addr, cache_level, flags);
1890

1891
		if (++act_pte == GEN6_PTES) {
1892
			kunmap_px(ppgtt, pt_vaddr);
1893
			pt_vaddr = NULL;
1894
			act_pt++;
1895
			act_pte = 0;
D
Daniel Vetter 已提交
1896 1897
		}
	}
1898

1899
	if (pt_vaddr)
1900
		kunmap_px(ppgtt, pt_vaddr);
D
Daniel Vetter 已提交
1901 1902
}

1903
static int gen6_alloc_va_range(struct i915_address_space *vm,
1904
			       uint64_t start_in, uint64_t length_in)
1905
{
1906
	DECLARE_BITMAP(new_page_tables, I915_PDES);
1907
	struct drm_i915_private *dev_priv = vm->i915;
1908
	struct i915_ggtt *ggtt = &dev_priv->ggtt;
1909
	struct i915_hw_ppgtt *ppgtt = i915_vm_to_ppgtt(vm);
1910
	struct i915_page_table *pt;
1911
	uint32_t start, length, start_save, length_save;
1912
	uint32_t pde;
1913 1914
	int ret;

1915 1916
	start = start_save = start_in;
	length = length_save = length_in;
1917 1918 1919 1920 1921 1922 1923 1924

	bitmap_zero(new_page_tables, I915_PDES);

	/* The allocation is done in two stages so that we can bail out with
	 * minimal amount of pain. The first stage finds new page tables that
	 * need allocation. The second stage marks use ptes within the page
	 * tables.
	 */
1925
	gen6_for_each_pde(pt, &ppgtt->pd, start, length, pde) {
1926
		if (pt != vm->scratch_pt) {
1927 1928 1929 1930 1931 1932 1933
			WARN_ON(bitmap_empty(pt->used_ptes, GEN6_PTES));
			continue;
		}

		/* We've already allocated a page table */
		WARN_ON(!bitmap_empty(pt->used_ptes, GEN6_PTES));

1934
		pt = alloc_pt(dev_priv);
1935 1936 1937 1938 1939 1940 1941 1942
		if (IS_ERR(pt)) {
			ret = PTR_ERR(pt);
			goto unwind_out;
		}

		gen6_initialize_pt(vm, pt);

		ppgtt->pd.page_table[pde] = pt;
1943
		__set_bit(pde, new_page_tables);
1944
		trace_i915_page_table_entry_alloc(vm, pde, start, GEN6_PDE_SHIFT);
1945 1946 1947 1948
	}

	start = start_save;
	length = length_save;
1949

1950
	gen6_for_each_pde(pt, &ppgtt->pd, start, length, pde) {
1951 1952 1953 1954 1955 1956
		DECLARE_BITMAP(tmp_bitmap, GEN6_PTES);

		bitmap_zero(tmp_bitmap, GEN6_PTES);
		bitmap_set(tmp_bitmap, gen6_pte_index(start),
			   gen6_pte_count(start, length));

1957
		if (__test_and_clear_bit(pde, new_page_tables))
1958 1959
			gen6_write_pde(&ppgtt->pd, pde, pt);

1960 1961 1962 1963
		trace_i915_page_table_entry_map(vm, pde, pt,
					 gen6_pte_index(start),
					 gen6_pte_count(start, length),
					 GEN6_PTES);
1964
		bitmap_or(pt->used_ptes, tmp_bitmap, pt->used_ptes,
1965 1966 1967
				GEN6_PTES);
	}

1968 1969 1970 1971
	WARN_ON(!bitmap_empty(new_page_tables, I915_PDES));

	/* Make sure write is complete before other code can use this page
	 * table. Also require for WC mapped PTEs */
1972
	readl(ggtt->gsm);
1973

1974
	mark_tlbs_dirty(ppgtt);
1975
	return 0;
1976 1977 1978

unwind_out:
	for_each_set_bit(pde, new_page_tables, I915_PDES) {
1979
		struct i915_page_table *pt = ppgtt->pd.page_table[pde];
1980

1981
		ppgtt->pd.page_table[pde] = vm->scratch_pt;
1982
		free_pt(dev_priv, pt);
1983 1984 1985 1986
	}

	mark_tlbs_dirty(ppgtt);
	return ret;
1987 1988
}

1989 1990
static int gen6_init_scratch(struct i915_address_space *vm)
{
1991
	struct drm_i915_private *dev_priv = vm->i915;
1992
	int ret;
1993

1994
	ret = setup_scratch_page(dev_priv, &vm->scratch_page, I915_GFP_DMA);
1995 1996
	if (ret)
		return ret;
1997

1998
	vm->scratch_pt = alloc_pt(dev_priv);
1999
	if (IS_ERR(vm->scratch_pt)) {
2000
		cleanup_scratch_page(dev_priv, &vm->scratch_page);
2001 2002 2003 2004 2005 2006 2007 2008 2009 2010
		return PTR_ERR(vm->scratch_pt);
	}

	gen6_initialize_pt(vm, vm->scratch_pt);

	return 0;
}

static void gen6_free_scratch(struct i915_address_space *vm)
{
2011
	struct drm_i915_private *dev_priv = vm->i915;
2012

2013 2014
	free_pt(dev_priv, vm->scratch_pt);
	cleanup_scratch_page(dev_priv, &vm->scratch_page);
2015 2016
}

2017
static void gen6_ppgtt_cleanup(struct i915_address_space *vm)
2018
{
2019
	struct i915_hw_ppgtt *ppgtt = i915_vm_to_ppgtt(vm);
2020
	struct i915_page_directory *pd = &ppgtt->pd;
2021
	struct drm_i915_private *dev_priv = vm->i915;
2022 2023
	struct i915_page_table *pt;
	uint32_t pde;
2024

2025 2026
	drm_mm_remove_node(&ppgtt->node);

2027
	gen6_for_all_pdes(pt, pd, pde)
2028
		if (pt != vm->scratch_pt)
2029
			free_pt(dev_priv, pt);
2030

2031
	gen6_free_scratch(vm);
2032 2033
}

2034
static int gen6_ppgtt_allocate_page_directories(struct i915_hw_ppgtt *ppgtt)
2035
{
2036
	struct i915_address_space *vm = &ppgtt->base;
2037
	struct drm_i915_private *dev_priv = ppgtt->base.i915;
2038
	struct i915_ggtt *ggtt = &dev_priv->ggtt;
2039
	int ret;
2040

B
Ben Widawsky 已提交
2041 2042 2043 2044
	/* PPGTT PDEs reside in the GGTT and consists of 512 entries. The
	 * allocator works in address space sizes, so it's multiplied by page
	 * size. We allocate at the top of the GTT to avoid fragmentation.
	 */
2045
	BUG_ON(!drm_mm_initialized(&ggtt->base.mm));
2046

2047 2048 2049
	ret = gen6_init_scratch(vm);
	if (ret)
		return ret;
2050

2051 2052 2053 2054 2055
	ret = i915_gem_gtt_insert(&ggtt->base, &ppgtt->node,
				  GEN6_PD_SIZE, GEN6_PD_ALIGN,
				  I915_COLOR_UNEVICTABLE,
				  0, ggtt->base.total,
				  PIN_HIGH);
2056
	if (ret)
2057 2058
		goto err_out;

2059
	if (ppgtt->node.start < ggtt->mappable_end)
B
Ben Widawsky 已提交
2060
		DRM_DEBUG("Forced to use aperture for PDEs\n");
2061

2062
	return 0;
2063 2064

err_out:
2065
	gen6_free_scratch(vm);
2066
	return ret;
2067 2068 2069 2070
}

static int gen6_ppgtt_alloc(struct i915_hw_ppgtt *ppgtt)
{
2071
	return gen6_ppgtt_allocate_page_directories(ppgtt);
2072
}
2073

2074 2075 2076
static void gen6_scratch_va_range(struct i915_hw_ppgtt *ppgtt,
				  uint64_t start, uint64_t length)
{
2077
	struct i915_page_table *unused;
2078
	uint32_t pde;
2079

2080
	gen6_for_each_pde(unused, &ppgtt->pd, start, length, pde)
2081
		ppgtt->pd.page_table[pde] = ppgtt->base.scratch_pt;
2082 2083
}

2084
static int gen6_ppgtt_init(struct i915_hw_ppgtt *ppgtt)
2085
{
2086
	struct drm_i915_private *dev_priv = ppgtt->base.i915;
2087
	struct i915_ggtt *ggtt = &dev_priv->ggtt;
2088 2089
	int ret;

2090
	ppgtt->base.pte_encode = ggtt->base.pte_encode;
2091
	if (intel_vgpu_active(dev_priv) || IS_GEN6(dev_priv))
2092
		ppgtt->switch_mm = gen6_mm_switch;
2093
	else if (IS_HASWELL(dev_priv))
2094
		ppgtt->switch_mm = hsw_mm_switch;
2095
	else if (IS_GEN7(dev_priv))
2096
		ppgtt->switch_mm = gen7_mm_switch;
2097
	else
2098 2099 2100 2101 2102 2103
		BUG();

	ret = gen6_ppgtt_alloc(ppgtt);
	if (ret)
		return ret;

2104
	ppgtt->base.allocate_va_range = gen6_alloc_va_range;
2105 2106
	ppgtt->base.clear_range = gen6_ppgtt_clear_range;
	ppgtt->base.insert_entries = gen6_ppgtt_insert_entries;
2107 2108
	ppgtt->base.unbind_vma = ppgtt_unbind_vma;
	ppgtt->base.bind_vma = ppgtt_bind_vma;
2109 2110
	ppgtt->base.cleanup = gen6_ppgtt_cleanup;
	ppgtt->base.start = 0;
2111
	ppgtt->base.total = I915_PDES * GEN6_PTES * PAGE_SIZE;
B
Ben Widawsky 已提交
2112
	ppgtt->debug_dump = gen6_dump_ppgtt;
2113

2114
	ppgtt->pd.base.ggtt_offset =
2115
		ppgtt->node.start / PAGE_SIZE * sizeof(gen6_pte_t);
2116

2117
	ppgtt->pd_addr = (gen6_pte_t __iomem *)ggtt->gsm +
2118
		ppgtt->pd.base.ggtt_offset / sizeof(gen6_pte_t);
2119

2120
	gen6_scratch_va_range(ppgtt, 0, ppgtt->base.total);
2121

2122 2123
	gen6_write_page_range(dev_priv, &ppgtt->pd, 0, ppgtt->base.total);

2124
	DRM_DEBUG_DRIVER("Allocated pde space (%lldM) at GTT entry: %llx\n",
2125 2126
			 ppgtt->node.size >> 20,
			 ppgtt->node.start / PAGE_SIZE);
2127

2128
	DRM_DEBUG("Adding PPGTT at offset %x\n",
2129
		  ppgtt->pd.base.ggtt_offset << 10);
2130

2131
	return 0;
2132 2133
}

2134 2135
static int __hw_ppgtt_init(struct i915_hw_ppgtt *ppgtt,
			   struct drm_i915_private *dev_priv)
2136
{
2137
	ppgtt->base.i915 = dev_priv;
2138

2139
	if (INTEL_INFO(dev_priv)->gen < 8)
2140
		return gen6_ppgtt_init(ppgtt);
B
Ben Widawsky 已提交
2141
	else
2142
		return gen8_ppgtt_init(ppgtt);
2143
}
2144

2145
static void i915_address_space_init(struct i915_address_space *vm,
C
Chris Wilson 已提交
2146 2147
				    struct drm_i915_private *dev_priv,
				    const char *name)
2148
{
C
Chris Wilson 已提交
2149
	i915_gem_timeline_init(dev_priv, &vm->timeline, name);
2150 2151 2152
	drm_mm_init(&vm->mm, vm->start, vm->total);
	INIT_LIST_HEAD(&vm->active_list);
	INIT_LIST_HEAD(&vm->inactive_list);
2153
	INIT_LIST_HEAD(&vm->unbound_list);
2154 2155 2156
	list_add_tail(&vm->global_link, &dev_priv->vm_list);
}

2157 2158 2159 2160 2161 2162 2163
static void i915_address_space_fini(struct i915_address_space *vm)
{
	i915_gem_timeline_fini(&vm->timeline);
	drm_mm_takedown(&vm->mm);
	list_del(&vm->global_link);
}

2164
static void gtt_write_workarounds(struct drm_i915_private *dev_priv)
2165 2166 2167 2168 2169 2170
{
	/* This function is for gtt related workarounds. This function is
	 * called on driver load and after a GPU reset, so you can place
	 * workarounds here even if they get overwritten by GPU reset.
	 */
	/* WaIncreaseDefaultTLBEntries:chv,bdw,skl,bxt */
2171
	if (IS_BROADWELL(dev_priv))
2172
		I915_WRITE(GEN8_L3_LRA_1_GPGPU, GEN8_L3_LRA_1_GPGPU_DEFAULT_VALUE_BDW);
2173
	else if (IS_CHERRYVIEW(dev_priv))
2174
		I915_WRITE(GEN8_L3_LRA_1_GPGPU, GEN8_L3_LRA_1_GPGPU_DEFAULT_VALUE_CHV);
2175
	else if (IS_SKYLAKE(dev_priv))
2176
		I915_WRITE(GEN8_L3_LRA_1_GPGPU, GEN9_L3_LRA_1_GPGPU_DEFAULT_VALUE_SKL);
2177
	else if (IS_BROXTON(dev_priv))
2178 2179 2180
		I915_WRITE(GEN8_L3_LRA_1_GPGPU, GEN9_L3_LRA_1_GPGPU_DEFAULT_VALUE_BXT);
}

2181 2182
static int i915_ppgtt_init(struct i915_hw_ppgtt *ppgtt,
			   struct drm_i915_private *dev_priv,
C
Chris Wilson 已提交
2183 2184
			   struct drm_i915_file_private *file_priv,
			   const char *name)
2185
{
2186
	int ret;
B
Ben Widawsky 已提交
2187

2188
	ret = __hw_ppgtt_init(ppgtt, dev_priv);
2189
	if (ret == 0) {
B
Ben Widawsky 已提交
2190
		kref_init(&ppgtt->ref);
C
Chris Wilson 已提交
2191
		i915_address_space_init(&ppgtt->base, dev_priv, name);
2192
		ppgtt->base.file = file_priv;
2193
	}
2194 2195 2196 2197

	return ret;
}

2198
int i915_ppgtt_init_hw(struct drm_i915_private *dev_priv)
2199
{
2200
	gtt_write_workarounds(dev_priv);
2201

2202 2203 2204 2205 2206 2207
	/* In the case of execlists, PPGTT is enabled by the context descriptor
	 * and the PDPs are contained within the context itself.  We don't
	 * need to do anything here. */
	if (i915.enable_execlists)
		return 0;

2208
	if (!USES_PPGTT(dev_priv))
2209 2210
		return 0;

2211
	if (IS_GEN6(dev_priv))
2212
		gen6_ppgtt_enable(dev_priv);
2213
	else if (IS_GEN7(dev_priv))
2214 2215 2216
		gen7_ppgtt_enable(dev_priv);
	else if (INTEL_GEN(dev_priv) >= 8)
		gen8_ppgtt_enable(dev_priv);
2217
	else
2218
		MISSING_CASE(INTEL_GEN(dev_priv));
2219

2220 2221
	return 0;
}
2222

2223
struct i915_hw_ppgtt *
2224
i915_ppgtt_create(struct drm_i915_private *dev_priv,
C
Chris Wilson 已提交
2225 2226
		  struct drm_i915_file_private *fpriv,
		  const char *name)
2227 2228 2229 2230 2231 2232 2233 2234
{
	struct i915_hw_ppgtt *ppgtt;
	int ret;

	ppgtt = kzalloc(sizeof(*ppgtt), GFP_KERNEL);
	if (!ppgtt)
		return ERR_PTR(-ENOMEM);

C
Chris Wilson 已提交
2235
	ret = i915_ppgtt_init(ppgtt, dev_priv, fpriv, name);
2236 2237 2238 2239 2240
	if (ret) {
		kfree(ppgtt);
		return ERR_PTR(ret);
	}

2241 2242
	trace_i915_ppgtt_create(&ppgtt->base);

2243 2244 2245
	return ppgtt;
}

2246
void i915_ppgtt_release(struct kref *kref)
2247 2248 2249 2250
{
	struct i915_hw_ppgtt *ppgtt =
		container_of(kref, struct i915_hw_ppgtt, ref);

2251 2252
	trace_i915_ppgtt_release(&ppgtt->base);

2253
	/* vmas should already be unbound and destroyed */
2254 2255
	WARN_ON(!list_empty(&ppgtt->base.active_list));
	WARN_ON(!list_empty(&ppgtt->base.inactive_list));
2256
	WARN_ON(!list_empty(&ppgtt->base.unbound_list));
2257

2258
	i915_address_space_fini(&ppgtt->base);
2259

2260 2261 2262
	ppgtt->base.cleanup(&ppgtt->base);
	kfree(ppgtt);
}
2263

2264 2265 2266
/* Certain Gen5 chipsets require require idling the GPU before
 * unmapping anything from the GTT when VT-d is enabled.
 */
2267
static bool needs_idle_maps(struct drm_i915_private *dev_priv)
2268 2269 2270 2271 2272
{
#ifdef CONFIG_INTEL_IOMMU
	/* Query intel_iommu to see if we need the workaround. Presumably that
	 * was loaded first.
	 */
2273
	if (IS_GEN5(dev_priv) && IS_MOBILE(dev_priv) && intel_iommu_gfx_mapped)
2274 2275 2276 2277 2278
		return true;
#endif
	return false;
}

2279
void i915_check_and_clear_faults(struct drm_i915_private *dev_priv)
2280
{
2281
	struct intel_engine_cs *engine;
2282
	enum intel_engine_id id;
2283

2284
	if (INTEL_INFO(dev_priv)->gen < 6)
2285 2286
		return;

2287
	for_each_engine(engine, dev_priv, id) {
2288
		u32 fault_reg;
2289
		fault_reg = I915_READ(RING_FAULT_REG(engine));
2290 2291
		if (fault_reg & RING_FAULT_VALID) {
			DRM_DEBUG_DRIVER("Unexpected fault\n"
2292
					 "\tAddr: 0x%08lx\n"
2293 2294 2295 2296 2297 2298 2299
					 "\tAddress space: %s\n"
					 "\tSource ID: %d\n"
					 "\tType: %d\n",
					 fault_reg & PAGE_MASK,
					 fault_reg & RING_FAULT_GTTSEL_MASK ? "GGTT" : "PPGTT",
					 RING_FAULT_SRCID(fault_reg),
					 RING_FAULT_FAULT_TYPE(fault_reg));
2300
			I915_WRITE(RING_FAULT_REG(engine),
2301 2302 2303
				   fault_reg & ~RING_FAULT_VALID);
		}
	}
2304 2305 2306 2307

	/* Engine specific init may not have been done till this point. */
	if (dev_priv->engine[RCS])
		POSTING_READ(RING_FAULT_REG(dev_priv->engine[RCS]));
2308 2309
}

2310 2311
static void i915_ggtt_flush(struct drm_i915_private *dev_priv)
{
2312
	if (INTEL_INFO(dev_priv)->gen < 6) {
2313 2314 2315 2316 2317 2318 2319
		intel_gtt_chipset_flush();
	} else {
		I915_WRITE(GFX_FLSH_CNTL_GEN6, GFX_FLSH_CNTL_EN);
		POSTING_READ(GFX_FLSH_CNTL_GEN6);
	}
}

2320
void i915_gem_suspend_gtt_mappings(struct drm_i915_private *dev_priv)
2321
{
2322
	struct i915_ggtt *ggtt = &dev_priv->ggtt;
2323 2324 2325 2326

	/* Don't bother messing with faults pre GEN6 as we have little
	 * documentation supporting that it's a good idea.
	 */
2327
	if (INTEL_GEN(dev_priv) < 6)
2328 2329
		return;

2330
	i915_check_and_clear_faults(dev_priv);
2331

2332
	ggtt->base.clear_range(&ggtt->base, ggtt->base.start, ggtt->base.total);
2333 2334

	i915_ggtt_flush(dev_priv);
2335 2336
}

2337 2338
int i915_gem_gtt_prepare_pages(struct drm_i915_gem_object *obj,
			       struct sg_table *pages)
2339
{
2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357
	do {
		if (dma_map_sg(&obj->base.dev->pdev->dev,
			       pages->sgl, pages->nents,
			       PCI_DMA_BIDIRECTIONAL))
			return 0;

		/* If the DMA remap fails, one cause can be that we have
		 * too many objects pinned in a small remapping table,
		 * such as swiotlb. Incrementally purge all other objects and
		 * try again - if there are no more pages to remove from
		 * the DMA remapper, i915_gem_shrink will return 0.
		 */
		GEM_BUG_ON(obj->mm.pages == pages);
	} while (i915_gem_shrink(to_i915(obj->base.dev),
				 obj->base.size >> PAGE_SHIFT,
				 I915_SHRINK_BOUND |
				 I915_SHRINK_UNBOUND |
				 I915_SHRINK_ACTIVE));
2358

2359
	return -ENOSPC;
2360 2361
}

2362
static void gen8_set_pte(void __iomem *addr, gen8_pte_t pte)
B
Ben Widawsky 已提交
2363 2364 2365 2366
{
	writeq(pte, addr);
}

2367 2368 2369 2370 2371 2372
static void gen8_ggtt_insert_page(struct i915_address_space *vm,
				  dma_addr_t addr,
				  uint64_t offset,
				  enum i915_cache_level level,
				  u32 unused)
{
2373
	struct drm_i915_private *dev_priv = vm->i915;
2374 2375 2376 2377
	gen8_pte_t __iomem *pte =
		(gen8_pte_t __iomem *)dev_priv->ggtt.gsm +
		(offset >> PAGE_SHIFT);

2378
	gen8_set_pte(pte, gen8_pte_encode(addr, level));
2379 2380 2381 2382 2383

	I915_WRITE(GFX_FLSH_CNTL_GEN6, GFX_FLSH_CNTL_EN);
	POSTING_READ(GFX_FLSH_CNTL_GEN6);
}

B
Ben Widawsky 已提交
2384 2385
static void gen8_ggtt_insert_entries(struct i915_address_space *vm,
				     struct sg_table *st,
2386
				     uint64_t start,
2387
				     enum i915_cache_level level, u32 unused)
B
Ben Widawsky 已提交
2388
{
2389
	struct drm_i915_private *dev_priv = vm->i915;
2390
	struct i915_ggtt *ggtt = i915_vm_to_ggtt(vm);
2391 2392 2393 2394 2395
	struct sgt_iter sgt_iter;
	gen8_pte_t __iomem *gtt_entries;
	gen8_pte_t gtt_entry;
	dma_addr_t addr;
	int i = 0;
2396

2397 2398 2399
	gtt_entries = (gen8_pte_t __iomem *)ggtt->gsm + (start >> PAGE_SHIFT);

	for_each_sgt_dma(addr, sgt_iter, st) {
2400
		gtt_entry = gen8_pte_encode(addr, level);
2401
		gen8_set_pte(&gtt_entries[i++], gtt_entry);
B
Ben Widawsky 已提交
2402 2403 2404 2405 2406 2407 2408 2409 2410 2411
	}

	/*
	 * XXX: This serves as a posting read to make sure that the PTE has
	 * actually been updated. There is some concern that even though
	 * registers and PTEs are within the same BAR that they are potentially
	 * of NUMA access patterns. Therefore, even with the way we assume
	 * hardware should work, we must keep this posting read for paranoia.
	 */
	if (i != 0)
2412
		WARN_ON(readq(&gtt_entries[i-1]) != gtt_entry);
B
Ben Widawsky 已提交
2413 2414 2415 2416 2417 2418 2419 2420 2421

	/* This next bit makes the above posting read even more important. We
	 * want to flush the TLBs only after we're certain all the PTE updates
	 * have finished.
	 */
	I915_WRITE(GFX_FLSH_CNTL_GEN6, GFX_FLSH_CNTL_EN);
	POSTING_READ(GFX_FLSH_CNTL_GEN6);
}

2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447
struct insert_entries {
	struct i915_address_space *vm;
	struct sg_table *st;
	uint64_t start;
	enum i915_cache_level level;
	u32 flags;
};

static int gen8_ggtt_insert_entries__cb(void *_arg)
{
	struct insert_entries *arg = _arg;
	gen8_ggtt_insert_entries(arg->vm, arg->st,
				 arg->start, arg->level, arg->flags);
	return 0;
}

static void gen8_ggtt_insert_entries__BKL(struct i915_address_space *vm,
					  struct sg_table *st,
					  uint64_t start,
					  enum i915_cache_level level,
					  u32 flags)
{
	struct insert_entries arg = { vm, st, start, level, flags };
	stop_machine(gen8_ggtt_insert_entries__cb, &arg, NULL);
}

2448 2449 2450 2451 2452 2453
static void gen6_ggtt_insert_page(struct i915_address_space *vm,
				  dma_addr_t addr,
				  uint64_t offset,
				  enum i915_cache_level level,
				  u32 flags)
{
2454
	struct drm_i915_private *dev_priv = vm->i915;
2455 2456 2457 2458
	gen6_pte_t __iomem *pte =
		(gen6_pte_t __iomem *)dev_priv->ggtt.gsm +
		(offset >> PAGE_SHIFT);

2459
	iowrite32(vm->pte_encode(addr, level, flags), pte);
2460 2461 2462 2463 2464

	I915_WRITE(GFX_FLSH_CNTL_GEN6, GFX_FLSH_CNTL_EN);
	POSTING_READ(GFX_FLSH_CNTL_GEN6);
}

2465 2466 2467 2468 2469 2470
/*
 * Binds an object into the global gtt with the specified cache level. The object
 * will be accessible to the GPU via commands whose operands reference offsets
 * within the global GTT as well as accessible by the GPU through the GMADR
 * mapped BAR (dev_priv->mm.gtt->gtt).
 */
2471
static void gen6_ggtt_insert_entries(struct i915_address_space *vm,
2472
				     struct sg_table *st,
2473
				     uint64_t start,
2474
				     enum i915_cache_level level, u32 flags)
2475
{
2476
	struct drm_i915_private *dev_priv = vm->i915;
2477
	struct i915_ggtt *ggtt = i915_vm_to_ggtt(vm);
2478 2479 2480 2481 2482
	struct sgt_iter sgt_iter;
	gen6_pte_t __iomem *gtt_entries;
	gen6_pte_t gtt_entry;
	dma_addr_t addr;
	int i = 0;
2483

2484 2485 2486
	gtt_entries = (gen6_pte_t __iomem *)ggtt->gsm + (start >> PAGE_SHIFT);

	for_each_sgt_dma(addr, sgt_iter, st) {
2487
		gtt_entry = vm->pte_encode(addr, level, flags);
2488
		iowrite32(gtt_entry, &gtt_entries[i++]);
2489 2490 2491 2492 2493 2494 2495 2496
	}

	/* XXX: This serves as a posting read to make sure that the PTE has
	 * actually been updated. There is some concern that even though
	 * registers and PTEs are within the same BAR that they are potentially
	 * of NUMA access patterns. Therefore, even with the way we assume
	 * hardware should work, we must keep this posting read for paranoia.
	 */
2497 2498
	if (i != 0)
		WARN_ON(readl(&gtt_entries[i-1]) != gtt_entry);
2499 2500 2501 2502 2503 2504 2505

	/* This next bit makes the above posting read even more important. We
	 * want to flush the TLBs only after we're certain all the PTE updates
	 * have finished.
	 */
	I915_WRITE(GFX_FLSH_CNTL_GEN6, GFX_FLSH_CNTL_EN);
	POSTING_READ(GFX_FLSH_CNTL_GEN6);
2506 2507
}

2508
static void nop_clear_range(struct i915_address_space *vm,
2509
			    uint64_t start, uint64_t length)
2510 2511 2512
{
}

B
Ben Widawsky 已提交
2513
static void gen8_ggtt_clear_range(struct i915_address_space *vm,
2514
				  uint64_t start, uint64_t length)
B
Ben Widawsky 已提交
2515
{
2516
	struct i915_ggtt *ggtt = i915_vm_to_ggtt(vm);
2517 2518
	unsigned first_entry = start >> PAGE_SHIFT;
	unsigned num_entries = length >> PAGE_SHIFT;
2519
	gen8_pte_t scratch_pte, __iomem *gtt_base =
2520 2521
		(gen8_pte_t __iomem *)ggtt->gsm + first_entry;
	const int max_entries = ggtt_total_entries(ggtt) - first_entry;
B
Ben Widawsky 已提交
2522 2523 2524 2525 2526 2527 2528
	int i;

	if (WARN(num_entries > max_entries,
		 "First entry = %d; Num entries = %d (max=%d)\n",
		 first_entry, num_entries, max_entries))
		num_entries = max_entries;

2529
	scratch_pte = gen8_pte_encode(vm->scratch_page.daddr,
2530
				      I915_CACHE_LLC);
B
Ben Widawsky 已提交
2531 2532 2533 2534 2535
	for (i = 0; i < num_entries; i++)
		gen8_set_pte(&gtt_base[i], scratch_pte);
	readl(gtt_base);
}

2536
static void gen6_ggtt_clear_range(struct i915_address_space *vm,
2537
				  uint64_t start,
2538
				  uint64_t length)
2539
{
2540
	struct i915_ggtt *ggtt = i915_vm_to_ggtt(vm);
2541 2542
	unsigned first_entry = start >> PAGE_SHIFT;
	unsigned num_entries = length >> PAGE_SHIFT;
2543
	gen6_pte_t scratch_pte, __iomem *gtt_base =
2544 2545
		(gen6_pte_t __iomem *)ggtt->gsm + first_entry;
	const int max_entries = ggtt_total_entries(ggtt) - first_entry;
2546 2547 2548 2549 2550 2551 2552
	int i;

	if (WARN(num_entries > max_entries,
		 "First entry = %d; Num entries = %d (max=%d)\n",
		 first_entry, num_entries, max_entries))
		num_entries = max_entries;

2553
	scratch_pte = vm->pte_encode(vm->scratch_page.daddr,
2554
				     I915_CACHE_LLC, 0);
2555

2556 2557 2558 2559 2560
	for (i = 0; i < num_entries; i++)
		iowrite32(scratch_pte, &gtt_base[i]);
	readl(gtt_base);
}

2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572
static void i915_ggtt_insert_page(struct i915_address_space *vm,
				  dma_addr_t addr,
				  uint64_t offset,
				  enum i915_cache_level cache_level,
				  u32 unused)
{
	unsigned int flags = (cache_level == I915_CACHE_NONE) ?
		AGP_USER_MEMORY : AGP_USER_CACHED_MEMORY;

	intel_gtt_insert_page(addr, offset >> PAGE_SHIFT, flags);
}

2573 2574 2575 2576
static void i915_ggtt_insert_entries(struct i915_address_space *vm,
				     struct sg_table *pages,
				     uint64_t start,
				     enum i915_cache_level cache_level, u32 unused)
2577 2578 2579 2580
{
	unsigned int flags = (cache_level == I915_CACHE_NONE) ?
		AGP_USER_MEMORY : AGP_USER_CACHED_MEMORY;

2581
	intel_gtt_insert_sg_entries(pages, start >> PAGE_SHIFT, flags);
2582

2583 2584
}

2585
static void i915_ggtt_clear_range(struct i915_address_space *vm,
2586
				  uint64_t start,
2587
				  uint64_t length)
2588
{
2589
	intel_gtt_clear_range(start >> PAGE_SHIFT, length >> PAGE_SHIFT);
2590 2591
}

2592 2593 2594
static int ggtt_bind_vma(struct i915_vma *vma,
			 enum i915_cache_level cache_level,
			 u32 flags)
2595
{
2596
	struct drm_i915_private *i915 = vma->vm->i915;
2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608
	struct drm_i915_gem_object *obj = vma->obj;
	u32 pte_flags = 0;
	int ret;

	ret = i915_get_ggtt_vma_pages(vma);
	if (ret)
		return ret;

	/* Currently applicable only to VLV */
	if (obj->gt_ro)
		pte_flags |= PTE_READ_ONLY;

2609
	intel_runtime_pm_get(i915);
2610
	vma->vm->insert_entries(vma->vm, vma->pages, vma->node.start,
2611
				cache_level, pte_flags);
2612
	intel_runtime_pm_put(i915);
2613 2614 2615 2616 2617 2618

	/*
	 * Without aliasing PPGTT there's no difference between
	 * GLOBAL/LOCAL_BIND, it's all the same ptes. Hence unconditionally
	 * upgrade to both bound if we bind either to avoid double-binding.
	 */
2619
	vma->flags |= I915_VMA_GLOBAL_BIND | I915_VMA_LOCAL_BIND;
2620 2621 2622 2623 2624 2625 2626

	return 0;
}

static int aliasing_gtt_bind_vma(struct i915_vma *vma,
				 enum i915_cache_level cache_level,
				 u32 flags)
2627
{
2628
	struct drm_i915_private *i915 = vma->vm->i915;
2629
	u32 pte_flags;
2630 2631 2632 2633 2634
	int ret;

	ret = i915_get_ggtt_vma_pages(vma);
	if (ret)
		return ret;
2635

2636
	/* Currently applicable only to VLV */
2637 2638
	pte_flags = 0;
	if (vma->obj->gt_ro)
2639
		pte_flags |= PTE_READ_ONLY;
2640

2641

2642
	if (flags & I915_VMA_GLOBAL_BIND) {
2643
		intel_runtime_pm_get(i915);
2644
		vma->vm->insert_entries(vma->vm,
2645
					vma->pages, vma->node.start,
2646
					cache_level, pte_flags);
2647
		intel_runtime_pm_put(i915);
2648
	}
2649

2650
	if (flags & I915_VMA_LOCAL_BIND) {
2651
		struct i915_hw_ppgtt *appgtt = i915->mm.aliasing_ppgtt;
2652
		appgtt->base.insert_entries(&appgtt->base,
2653
					    vma->pages, vma->node.start,
2654
					    cache_level, pte_flags);
2655
	}
2656 2657

	return 0;
2658 2659
}

2660
static void ggtt_unbind_vma(struct i915_vma *vma)
2661
{
2662
	struct drm_i915_private *i915 = vma->vm->i915;
2663
	struct i915_hw_ppgtt *appgtt = i915->mm.aliasing_ppgtt;
2664
	const u64 size = min(vma->size, vma->node.size);
2665

2666 2667
	if (vma->flags & I915_VMA_GLOBAL_BIND) {
		intel_runtime_pm_get(i915);
2668
		vma->vm->clear_range(vma->vm,
2669
				     vma->node.start, size);
2670 2671
		intel_runtime_pm_put(i915);
	}
2672

2673
	if (vma->flags & I915_VMA_LOCAL_BIND && appgtt)
2674
		appgtt->base.clear_range(&appgtt->base,
2675
					 vma->node.start, size);
2676 2677
}

2678 2679
void i915_gem_gtt_finish_pages(struct drm_i915_gem_object *obj,
			       struct sg_table *pages)
2680
{
D
David Weinehall 已提交
2681 2682
	struct drm_i915_private *dev_priv = to_i915(obj->base.dev);
	struct device *kdev = &dev_priv->drm.pdev->dev;
2683
	struct i915_ggtt *ggtt = &dev_priv->ggtt;
B
Ben Widawsky 已提交
2684

2685
	if (unlikely(ggtt->do_idle_maps)) {
2686
		if (i915_gem_wait_for_idle(dev_priv, I915_WAIT_LOCKED)) {
2687 2688 2689 2690 2691
			DRM_ERROR("Failed to wait for idle; VT'd may hang.\n");
			/* Wait a bit, in hopes it avoids the hang */
			udelay(10);
		}
	}
B
Ben Widawsky 已提交
2692

2693
	dma_unmap_sg(kdev, pages->sgl, pages->nents, PCI_DMA_BIDIRECTIONAL);
2694
}
2695

C
Chris Wilson 已提交
2696
static void i915_gtt_color_adjust(const struct drm_mm_node *node,
2697
				  unsigned long color,
2698 2699
				  u64 *start,
				  u64 *end)
2700 2701
{
	if (node->color != color)
2702
		*start += I915_GTT_PAGE_SIZE;
2703

2704 2705
	node = list_next_entry(node, node_list);
	if (node->allocated && node->color != color)
2706
		*end -= I915_GTT_PAGE_SIZE;
2707
}
B
Ben Widawsky 已提交
2708

2709
int i915_gem_init_ggtt(struct drm_i915_private *dev_priv)
2710
{
2711 2712 2713 2714 2715 2716 2717 2718 2719
	/* Let GEM Manage all of the aperture.
	 *
	 * However, leave one page at the end still bound to the scratch page.
	 * There are a number of places where the hardware apparently prefetches
	 * past the end of the object, and we've seen multiple hangs with the
	 * GPU head pointer stuck in a batchbuffer bound at the last page of the
	 * aperture.  One page should be enough to keep any prefetching inside
	 * of the aperture.
	 */
2720
	struct i915_ggtt *ggtt = &dev_priv->ggtt;
2721
	unsigned long hole_start, hole_end;
2722
	struct i915_hw_ppgtt *ppgtt;
2723
	struct drm_mm_node *entry;
2724
	int ret;
2725

2726 2727 2728
	ret = intel_vgt_balloon(dev_priv);
	if (ret)
		return ret;
2729

2730 2731 2732
	/* Reserve a mappable slot for our lockless error capture */
	ret = drm_mm_insert_node_in_range_generic(&ggtt->base.mm,
						  &ggtt->error_capture,
2733
						  PAGE_SIZE, 0,
2734
						  I915_COLOR_UNEVICTABLE,
2735 2736 2737 2738 2739
						  0, ggtt->mappable_end,
						  0, 0);
	if (ret)
		return ret;

2740
	/* Clear any non-preallocated blocks */
2741
	drm_mm_for_each_hole(entry, &ggtt->base.mm, hole_start, hole_end) {
2742 2743
		DRM_DEBUG_KMS("clearing unused GTT space: [%lx, %lx]\n",
			      hole_start, hole_end);
2744
		ggtt->base.clear_range(&ggtt->base, hole_start,
2745
				       hole_end - hole_start);
2746 2747 2748
	}

	/* And finally clear the reserved guard page */
2749
	ggtt->base.clear_range(&ggtt->base,
2750
			       ggtt->base.total - PAGE_SIZE, PAGE_SIZE);
2751

2752
	if (USES_PPGTT(dev_priv) && !USES_FULL_PPGTT(dev_priv)) {
2753
		ppgtt = kzalloc(sizeof(*ppgtt), GFP_KERNEL);
2754 2755 2756 2757
		if (!ppgtt) {
			ret = -ENOMEM;
			goto err;
		}
2758

2759
		ret = __hw_ppgtt_init(ppgtt, dev_priv);
2760 2761
		if (ret)
			goto err_ppgtt;
2762

2763
		if (ppgtt->base.allocate_va_range) {
2764 2765
			ret = ppgtt->base.allocate_va_range(&ppgtt->base, 0,
							    ppgtt->base.total);
2766 2767
			if (ret)
				goto err_ppgtt_cleanup;
2768
		}
2769

2770 2771
		ppgtt->base.clear_range(&ppgtt->base,
					ppgtt->base.start,
2772
					ppgtt->base.total);
2773

2774
		dev_priv->mm.aliasing_ppgtt = ppgtt;
2775 2776
		WARN_ON(ggtt->base.bind_vma != ggtt_bind_vma);
		ggtt->base.bind_vma = aliasing_gtt_bind_vma;
2777 2778
	}

2779
	return 0;
2780 2781 2782 2783 2784 2785 2786 2787

err_ppgtt_cleanup:
	ppgtt->base.cleanup(&ppgtt->base);
err_ppgtt:
	kfree(ppgtt);
err:
	drm_mm_remove_node(&ggtt->error_capture);
	return ret;
2788 2789
}

2790 2791
/**
 * i915_ggtt_cleanup_hw - Clean up GGTT hardware initialization
2792
 * @dev_priv: i915 device
2793
 */
2794
void i915_ggtt_cleanup_hw(struct drm_i915_private *dev_priv)
2795
{
2796
	struct i915_ggtt *ggtt = &dev_priv->ggtt;
2797

2798 2799 2800
	if (dev_priv->mm.aliasing_ppgtt) {
		struct i915_hw_ppgtt *ppgtt = dev_priv->mm.aliasing_ppgtt;
		ppgtt->base.cleanup(&ppgtt->base);
M
Matthew Auld 已提交
2801
		kfree(ppgtt);
2802 2803
	}

2804
	i915_gem_cleanup_stolen(&dev_priv->drm);
2805

2806 2807 2808
	if (drm_mm_node_allocated(&ggtt->error_capture))
		drm_mm_remove_node(&ggtt->error_capture);

2809
	if (drm_mm_initialized(&ggtt->base.mm)) {
2810
		intel_vgt_deballoon(dev_priv);
2811

2812 2813 2814
		mutex_lock(&dev_priv->drm.struct_mutex);
		i915_address_space_fini(&ggtt->base);
		mutex_unlock(&dev_priv->drm.struct_mutex);
2815 2816
	}

2817
	ggtt->base.cleanup(&ggtt->base);
2818 2819

	arch_phys_wc_del(ggtt->mtrr);
2820
	io_mapping_fini(&ggtt->mappable);
2821
}
2822

2823
static unsigned int gen6_get_total_gtt_size(u16 snb_gmch_ctl)
2824 2825 2826 2827 2828 2829
{
	snb_gmch_ctl >>= SNB_GMCH_GGMS_SHIFT;
	snb_gmch_ctl &= SNB_GMCH_GGMS_MASK;
	return snb_gmch_ctl << 20;
}

2830
static unsigned int gen8_get_total_gtt_size(u16 bdw_gmch_ctl)
2831 2832 2833 2834 2835
{
	bdw_gmch_ctl >>= BDW_GMCH_GGMS_SHIFT;
	bdw_gmch_ctl &= BDW_GMCH_GGMS_MASK;
	if (bdw_gmch_ctl)
		bdw_gmch_ctl = 1 << bdw_gmch_ctl;
2836 2837 2838 2839 2840 2841 2842

#ifdef CONFIG_X86_32
	/* Limit 32b platforms to a 2GB GGTT: 4 << 20 / pte size * PAGE_SIZE */
	if (bdw_gmch_ctl > 4)
		bdw_gmch_ctl = 4;
#endif

2843 2844 2845
	return bdw_gmch_ctl << 20;
}

2846
static unsigned int chv_get_total_gtt_size(u16 gmch_ctrl)
2847 2848 2849 2850 2851 2852 2853 2854 2855 2856
{
	gmch_ctrl >>= SNB_GMCH_GGMS_SHIFT;
	gmch_ctrl &= SNB_GMCH_GGMS_MASK;

	if (gmch_ctrl)
		return 1 << (20 + gmch_ctrl);

	return 0;
}

2857
static size_t gen6_get_stolen_size(u16 snb_gmch_ctl)
2858 2859 2860 2861 2862 2863
{
	snb_gmch_ctl >>= SNB_GMCH_GMS_SHIFT;
	snb_gmch_ctl &= SNB_GMCH_GMS_MASK;
	return snb_gmch_ctl << 25; /* 32 MB units */
}

2864
static size_t gen8_get_stolen_size(u16 bdw_gmch_ctl)
2865 2866 2867 2868 2869 2870
{
	bdw_gmch_ctl >>= BDW_GMCH_GMS_SHIFT;
	bdw_gmch_ctl &= BDW_GMCH_GMS_MASK;
	return bdw_gmch_ctl << 25; /* 32 MB units */
}

2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888
static size_t chv_get_stolen_size(u16 gmch_ctrl)
{
	gmch_ctrl >>= SNB_GMCH_GMS_SHIFT;
	gmch_ctrl &= SNB_GMCH_GMS_MASK;

	/*
	 * 0x0  to 0x10: 32MB increments starting at 0MB
	 * 0x11 to 0x16: 4MB increments starting at 8MB
	 * 0x17 to 0x1d: 4MB increments start at 36MB
	 */
	if (gmch_ctrl < 0x11)
		return gmch_ctrl << 25;
	else if (gmch_ctrl < 0x17)
		return (gmch_ctrl - 0x11 + 2) << 22;
	else
		return (gmch_ctrl - 0x17 + 9) << 22;
}

2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900
static size_t gen9_get_stolen_size(u16 gen9_gmch_ctl)
{
	gen9_gmch_ctl >>= BDW_GMCH_GMS_SHIFT;
	gen9_gmch_ctl &= BDW_GMCH_GMS_MASK;

	if (gen9_gmch_ctl < 0xf0)
		return gen9_gmch_ctl << 25; /* 32 MB units */
	else
		/* 4MB increments starting at 0xf0 for 4MB */
		return (gen9_gmch_ctl - 0xf0 + 1) << 22;
}

2901
static int ggtt_probe_common(struct i915_ggtt *ggtt, u64 size)
B
Ben Widawsky 已提交
2902
{
2903 2904
	struct drm_i915_private *dev_priv = ggtt->base.i915;
	struct pci_dev *pdev = dev_priv->drm.pdev;
2905
	phys_addr_t phys_addr;
2906
	int ret;
B
Ben Widawsky 已提交
2907 2908

	/* For Modern GENs the PTEs and register space are split in the BAR */
2909
	phys_addr = pci_resource_start(pdev, 0) + pci_resource_len(pdev, 0) / 2;
B
Ben Widawsky 已提交
2910

I
Imre Deak 已提交
2911 2912 2913 2914 2915 2916 2917
	/*
	 * On BXT writes larger than 64 bit to the GTT pagetable range will be
	 * dropped. For WC mappings in general we have 64 byte burst writes
	 * when the WC buffer is flushed, so we can't use it, but have to
	 * resort to an uncached mapping. The WC issue is easily caught by the
	 * readback check when writing GTT PTE entries.
	 */
2918
	if (IS_GEN9_LP(dev_priv))
2919
		ggtt->gsm = ioremap_nocache(phys_addr, size);
I
Imre Deak 已提交
2920
	else
2921
		ggtt->gsm = ioremap_wc(phys_addr, size);
2922
	if (!ggtt->gsm) {
2923
		DRM_ERROR("Failed to map the ggtt page table\n");
B
Ben Widawsky 已提交
2924 2925 2926
		return -ENOMEM;
	}

2927
	ret = setup_scratch_page(dev_priv, &ggtt->base.scratch_page, GFP_DMA32);
2928
	if (ret) {
B
Ben Widawsky 已提交
2929 2930
		DRM_ERROR("Scratch setup failed\n");
		/* iounmap will also get called at remove, but meh */
2931
		iounmap(ggtt->gsm);
2932
		return ret;
B
Ben Widawsky 已提交
2933 2934
	}

2935
	return 0;
B
Ben Widawsky 已提交
2936 2937
}

B
Ben Widawsky 已提交
2938 2939 2940
/* The GGTT and PPGTT need a private PPAT setup in order to handle cacheability
 * bits. When using advanced contexts each context stores its own PAT, but
 * writing this data shouldn't be harmful even in those cases. */
2941
static void bdw_setup_private_ppat(struct drm_i915_private *dev_priv)
B
Ben Widawsky 已提交
2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953
{
	uint64_t pat;

	pat = GEN8_PPAT(0, GEN8_PPAT_WB | GEN8_PPAT_LLC)     | /* for normal objects, no eLLC */
	      GEN8_PPAT(1, GEN8_PPAT_WC | GEN8_PPAT_LLCELLC) | /* for something pointing to ptes? */
	      GEN8_PPAT(2, GEN8_PPAT_WT | GEN8_PPAT_LLCELLC) | /* for scanout with eLLC */
	      GEN8_PPAT(3, GEN8_PPAT_UC)                     | /* Uncached objects, mostly for scanout */
	      GEN8_PPAT(4, GEN8_PPAT_WB | GEN8_PPAT_LLCELLC | GEN8_PPAT_AGE(0)) |
	      GEN8_PPAT(5, GEN8_PPAT_WB | GEN8_PPAT_LLCELLC | GEN8_PPAT_AGE(1)) |
	      GEN8_PPAT(6, GEN8_PPAT_WB | GEN8_PPAT_LLCELLC | GEN8_PPAT_AGE(2)) |
	      GEN8_PPAT(7, GEN8_PPAT_WB | GEN8_PPAT_LLCELLC | GEN8_PPAT_AGE(3));

2954
	if (!USES_PPGTT(dev_priv))
2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969
		/* Spec: "For GGTT, there is NO pat_sel[2:0] from the entry,
		 * so RTL will always use the value corresponding to
		 * pat_sel = 000".
		 * So let's disable cache for GGTT to avoid screen corruptions.
		 * MOCS still can be used though.
		 * - System agent ggtt writes (i.e. cpu gtt mmaps) already work
		 * before this patch, i.e. the same uncached + snooping access
		 * like on gen6/7 seems to be in effect.
		 * - So this just fixes blitter/render access. Again it looks
		 * like it's not just uncached access, but uncached + snooping.
		 * So we can still hold onto all our assumptions wrt cpu
		 * clflushing on LLC machines.
		 */
		pat = GEN8_PPAT(0, GEN8_PPAT_UC);

B
Ben Widawsky 已提交
2970 2971
	/* XXX: spec defines this as 2 distinct registers. It's unclear if a 64b
	 * write would work. */
2972 2973
	I915_WRITE(GEN8_PRIVATE_PAT_LO, pat);
	I915_WRITE(GEN8_PRIVATE_PAT_HI, pat >> 32);
B
Ben Widawsky 已提交
2974 2975
}

2976 2977 2978 2979 2980 2981 2982 2983 2984 2985
static void chv_setup_private_ppat(struct drm_i915_private *dev_priv)
{
	uint64_t pat;

	/*
	 * Map WB on BDW to snooped on CHV.
	 *
	 * Only the snoop bit has meaning for CHV, the rest is
	 * ignored.
	 *
2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996
	 * The hardware will never snoop for certain types of accesses:
	 * - CPU GTT (GMADR->GGTT->no snoop->memory)
	 * - PPGTT page tables
	 * - some other special cycles
	 *
	 * As with BDW, we also need to consider the following for GT accesses:
	 * "For GGTT, there is NO pat_sel[2:0] from the entry,
	 * so RTL will always use the value corresponding to
	 * pat_sel = 000".
	 * Which means we must set the snoop bit in PAT entry 0
	 * in order to keep the global status page working.
2997 2998 2999 3000 3001 3002 3003 3004 3005 3006
	 */
	pat = GEN8_PPAT(0, CHV_PPAT_SNOOP) |
	      GEN8_PPAT(1, 0) |
	      GEN8_PPAT(2, 0) |
	      GEN8_PPAT(3, 0) |
	      GEN8_PPAT(4, CHV_PPAT_SNOOP) |
	      GEN8_PPAT(5, CHV_PPAT_SNOOP) |
	      GEN8_PPAT(6, CHV_PPAT_SNOOP) |
	      GEN8_PPAT(7, CHV_PPAT_SNOOP);

3007 3008
	I915_WRITE(GEN8_PRIVATE_PAT_LO, pat);
	I915_WRITE(GEN8_PRIVATE_PAT_HI, pat >> 32);
3009 3010
}

3011 3012 3013 3014 3015
static void gen6_gmch_remove(struct i915_address_space *vm)
{
	struct i915_ggtt *ggtt = i915_vm_to_ggtt(vm);

	iounmap(ggtt->gsm);
3016
	cleanup_scratch_page(vm->i915, &vm->scratch_page);
3017 3018
}

3019
static int gen8_gmch_probe(struct i915_ggtt *ggtt)
B
Ben Widawsky 已提交
3020
{
3021
	struct drm_i915_private *dev_priv = ggtt->base.i915;
3022
	struct pci_dev *pdev = dev_priv->drm.pdev;
3023
	unsigned int size;
B
Ben Widawsky 已提交
3024 3025 3026
	u16 snb_gmch_ctl;

	/* TODO: We're not aware of mappable constraints on gen8 yet */
3027 3028
	ggtt->mappable_base = pci_resource_start(pdev, 2);
	ggtt->mappable_end = pci_resource_len(pdev, 2);
B
Ben Widawsky 已提交
3029

3030 3031
	if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(39)))
		pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(39));
B
Ben Widawsky 已提交
3032

3033
	pci_read_config_word(pdev, SNB_GMCH_CTRL, &snb_gmch_ctl);
B
Ben Widawsky 已提交
3034

3035
	if (INTEL_GEN(dev_priv) >= 9) {
3036
		ggtt->stolen_size = gen9_get_stolen_size(snb_gmch_ctl);
3037
		size = gen8_get_total_gtt_size(snb_gmch_ctl);
3038
	} else if (IS_CHERRYVIEW(dev_priv)) {
3039
		ggtt->stolen_size = chv_get_stolen_size(snb_gmch_ctl);
3040
		size = chv_get_total_gtt_size(snb_gmch_ctl);
3041
	} else {
3042
		ggtt->stolen_size = gen8_get_stolen_size(snb_gmch_ctl);
3043
		size = gen8_get_total_gtt_size(snb_gmch_ctl);
3044
	}
B
Ben Widawsky 已提交
3045

3046
	ggtt->base.total = (size / sizeof(gen8_pte_t)) << PAGE_SHIFT;
B
Ben Widawsky 已提交
3047

3048
	if (IS_CHERRYVIEW(dev_priv) || IS_GEN9_LP(dev_priv))
3049 3050 3051
		chv_setup_private_ppat(dev_priv);
	else
		bdw_setup_private_ppat(dev_priv);
B
Ben Widawsky 已提交
3052

3053
	ggtt->base.cleanup = gen6_gmch_remove;
3054 3055
	ggtt->base.bind_vma = ggtt_bind_vma;
	ggtt->base.unbind_vma = ggtt_unbind_vma;
3056
	ggtt->base.insert_page = gen8_ggtt_insert_page;
3057
	ggtt->base.clear_range = nop_clear_range;
3058
	if (!USES_FULL_PPGTT(dev_priv) || intel_scanout_needs_vtd_wa(dev_priv))
3059 3060 3061 3062 3063 3064
		ggtt->base.clear_range = gen8_ggtt_clear_range;

	ggtt->base.insert_entries = gen8_ggtt_insert_entries;
	if (IS_CHERRYVIEW(dev_priv))
		ggtt->base.insert_entries = gen8_ggtt_insert_entries__BKL;

3065
	return ggtt_probe_common(ggtt, size);
B
Ben Widawsky 已提交
3066 3067
}

3068
static int gen6_gmch_probe(struct i915_ggtt *ggtt)
3069
{
3070
	struct drm_i915_private *dev_priv = ggtt->base.i915;
3071
	struct pci_dev *pdev = dev_priv->drm.pdev;
3072
	unsigned int size;
3073 3074
	u16 snb_gmch_ctl;

3075 3076
	ggtt->mappable_base = pci_resource_start(pdev, 2);
	ggtt->mappable_end = pci_resource_len(pdev, 2);
3077

3078 3079
	/* 64/512MB is the current min/max we actually know of, but this is just
	 * a coarse sanity check.
3080
	 */
3081
	if (ggtt->mappable_end < (64<<20) || ggtt->mappable_end > (512<<20)) {
3082
		DRM_ERROR("Unknown GMADR size (%llx)\n", ggtt->mappable_end);
3083
		return -ENXIO;
3084 3085
	}

3086 3087 3088
	if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(40)))
		pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(40));
	pci_read_config_word(pdev, SNB_GMCH_CTRL, &snb_gmch_ctl);
3089

3090
	ggtt->stolen_size = gen6_get_stolen_size(snb_gmch_ctl);
3091

3092 3093
	size = gen6_get_total_gtt_size(snb_gmch_ctl);
	ggtt->base.total = (size / sizeof(gen6_pte_t)) << PAGE_SHIFT;
3094

3095
	ggtt->base.clear_range = gen6_ggtt_clear_range;
3096
	ggtt->base.insert_page = gen6_ggtt_insert_page;
3097 3098 3099
	ggtt->base.insert_entries = gen6_ggtt_insert_entries;
	ggtt->base.bind_vma = ggtt_bind_vma;
	ggtt->base.unbind_vma = ggtt_unbind_vma;
3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111
	ggtt->base.cleanup = gen6_gmch_remove;

	if (HAS_EDRAM(dev_priv))
		ggtt->base.pte_encode = iris_pte_encode;
	else if (IS_HASWELL(dev_priv))
		ggtt->base.pte_encode = hsw_pte_encode;
	else if (IS_VALLEYVIEW(dev_priv))
		ggtt->base.pte_encode = byt_pte_encode;
	else if (INTEL_GEN(dev_priv) >= 7)
		ggtt->base.pte_encode = ivb_pte_encode;
	else
		ggtt->base.pte_encode = snb_pte_encode;
3112

3113
	return ggtt_probe_common(ggtt, size);
3114 3115
}

3116
static void i915_gmch_remove(struct i915_address_space *vm)
3117
{
3118
	intel_gmch_remove();
3119
}
3120

3121
static int i915_gmch_probe(struct i915_ggtt *ggtt)
3122
{
3123
	struct drm_i915_private *dev_priv = ggtt->base.i915;
3124 3125
	int ret;

3126
	ret = intel_gmch_probe(dev_priv->bridge_dev, dev_priv->drm.pdev, NULL);
3127 3128 3129 3130 3131
	if (!ret) {
		DRM_ERROR("failed to set up gmch\n");
		return -EIO;
	}

3132 3133 3134 3135
	intel_gtt_get(&ggtt->base.total,
		      &ggtt->stolen_size,
		      &ggtt->mappable_base,
		      &ggtt->mappable_end);
3136

3137
	ggtt->do_idle_maps = needs_idle_maps(dev_priv);
3138
	ggtt->base.insert_page = i915_ggtt_insert_page;
3139 3140 3141 3142
	ggtt->base.insert_entries = i915_ggtt_insert_entries;
	ggtt->base.clear_range = i915_ggtt_clear_range;
	ggtt->base.bind_vma = ggtt_bind_vma;
	ggtt->base.unbind_vma = ggtt_unbind_vma;
3143
	ggtt->base.cleanup = i915_gmch_remove;
3144

3145
	if (unlikely(ggtt->do_idle_maps))
3146 3147
		DRM_INFO("applying Ironlake quirks for intel_iommu\n");

3148 3149 3150
	return 0;
}

3151
/**
3152
 * i915_ggtt_probe_hw - Probe GGTT hardware location
3153
 * @dev_priv: i915 device
3154
 */
3155
int i915_ggtt_probe_hw(struct drm_i915_private *dev_priv)
3156
{
3157
	struct i915_ggtt *ggtt = &dev_priv->ggtt;
3158 3159
	int ret;

3160
	ggtt->base.i915 = dev_priv;
3161

3162 3163 3164 3165 3166 3167
	if (INTEL_GEN(dev_priv) <= 5)
		ret = i915_gmch_probe(ggtt);
	else if (INTEL_GEN(dev_priv) < 8)
		ret = gen6_gmch_probe(ggtt);
	else
		ret = gen8_gmch_probe(ggtt);
3168
	if (ret)
3169 3170
		return ret;

3171 3172 3173 3174 3175 3176 3177 3178 3179 3180
	/* Trim the GGTT to fit the GuC mappable upper range (when enabled).
	 * This is easier than doing range restriction on the fly, as we
	 * currently don't have any bits spare to pass in this upper
	 * restriction!
	 */
	if (HAS_GUC(dev_priv) && i915.enable_guc_loading) {
		ggtt->base.total = min_t(u64, ggtt->base.total, GUC_GGTT_TOP);
		ggtt->mappable_end = min(ggtt->mappable_end, ggtt->base.total);
	}

3181 3182
	if ((ggtt->base.total - 1) >> 32) {
		DRM_ERROR("We never expected a Global GTT with more than 32bits"
3183
			  " of address space! Found %lldM!\n",
3184 3185 3186 3187 3188
			  ggtt->base.total >> 20);
		ggtt->base.total = 1ULL << 32;
		ggtt->mappable_end = min(ggtt->mappable_end, ggtt->base.total);
	}

3189 3190 3191 3192 3193 3194 3195
	if (ggtt->mappable_end > ggtt->base.total) {
		DRM_ERROR("mappable aperture extends past end of GGTT,"
			  " aperture=%llx, total=%llx\n",
			  ggtt->mappable_end, ggtt->base.total);
		ggtt->mappable_end = ggtt->base.total;
	}

3196
	/* GMADR is the PCI mmio aperture into the global GTT. */
3197
	DRM_INFO("Memory usable by graphics device = %lluM\n",
3198 3199
		 ggtt->base.total >> 20);
	DRM_DEBUG_DRIVER("GMADR size = %lldM\n", ggtt->mappable_end >> 20);
3200
	DRM_DEBUG_DRIVER("GTT stolen size = %uM\n", ggtt->stolen_size >> 20);
3201 3202 3203 3204
#ifdef CONFIG_INTEL_IOMMU
	if (intel_iommu_gfx_mapped)
		DRM_INFO("VT-d active for gfx access\n");
#endif
3205 3206

	return 0;
3207 3208 3209 3210
}

/**
 * i915_ggtt_init_hw - Initialize GGTT hardware
3211
 * @dev_priv: i915 device
3212
 */
3213
int i915_ggtt_init_hw(struct drm_i915_private *dev_priv)
3214 3215 3216 3217
{
	struct i915_ggtt *ggtt = &dev_priv->ggtt;
	int ret;

3218 3219 3220 3221 3222
	INIT_LIST_HEAD(&dev_priv->vm_list);

	/* Subtract the guard page before address space initialization to
	 * shrink the range used by drm_mm.
	 */
C
Chris Wilson 已提交
3223
	mutex_lock(&dev_priv->drm.struct_mutex);
3224
	ggtt->base.total -= PAGE_SIZE;
C
Chris Wilson 已提交
3225
	i915_address_space_init(&ggtt->base, dev_priv, "[global]");
3226 3227 3228
	ggtt->base.total += PAGE_SIZE;
	if (!HAS_LLC(dev_priv))
		ggtt->base.mm.color_adjust = i915_gtt_color_adjust;
C
Chris Wilson 已提交
3229
	mutex_unlock(&dev_priv->drm.struct_mutex);
3230

3231 3232 3233
	if (!io_mapping_init_wc(&dev_priv->ggtt.mappable,
				dev_priv->ggtt.mappable_base,
				dev_priv->ggtt.mappable_end)) {
3234 3235 3236 3237 3238 3239
		ret = -EIO;
		goto out_gtt_cleanup;
	}

	ggtt->mtrr = arch_phys_wc_add(ggtt->mappable_base, ggtt->mappable_end);

3240 3241 3242 3243
	/*
	 * Initialise stolen early so that we may reserve preallocated
	 * objects for the BIOS to KMS transition.
	 */
3244
	ret = i915_gem_init_stolen(dev_priv);
3245 3246 3247 3248
	if (ret)
		goto out_gtt_cleanup;

	return 0;
3249 3250

out_gtt_cleanup:
3251
	ggtt->base.cleanup(&ggtt->base);
3252
	return ret;
3253
}
3254

3255
int i915_ggtt_enable_hw(struct drm_i915_private *dev_priv)
3256
{
3257
	if (INTEL_GEN(dev_priv) < 6 && !intel_enable_gtt())
3258 3259 3260 3261 3262
		return -EIO;

	return 0;
}

3263
void i915_gem_restore_gtt_mappings(struct drm_i915_private *dev_priv)
3264
{
3265
	struct i915_ggtt *ggtt = &dev_priv->ggtt;
3266
	struct drm_i915_gem_object *obj, *on;
3267

3268
	i915_check_and_clear_faults(dev_priv);
3269 3270

	/* First fill our portion of the GTT with scratch pages */
3271
	ggtt->base.clear_range(&ggtt->base, ggtt->base.start, ggtt->base.total);
3272

3273 3274 3275 3276
	ggtt->base.closed = true; /* skip rewriting PTE on VMA unbind */

	/* clflush objects bound into the GGTT and rebind them. */
	list_for_each_entry_safe(obj, on,
3277
				 &dev_priv->mm.bound_list, global_link) {
3278 3279 3280
		bool ggtt_bound = false;
		struct i915_vma *vma;

3281
		list_for_each_entry(vma, &obj->vma_list, obj_link) {
3282
			if (vma->vm != &ggtt->base)
3283
				continue;
3284

3285 3286 3287
			if (!i915_vma_unbind(vma))
				continue;

3288 3289
			WARN_ON(i915_vma_bind(vma, obj->cache_level,
					      PIN_UPDATE));
3290
			ggtt_bound = true;
3291 3292
		}

3293
		if (ggtt_bound)
3294
			WARN_ON(i915_gem_object_set_to_gtt_domain(obj, false));
3295
	}
3296

3297 3298
	ggtt->base.closed = false;

3299
	if (INTEL_GEN(dev_priv) >= 8) {
3300
		if (IS_CHERRYVIEW(dev_priv) || IS_GEN9_LP(dev_priv))
3301 3302 3303 3304 3305 3306 3307
			chv_setup_private_ppat(dev_priv);
		else
			bdw_setup_private_ppat(dev_priv);

		return;
	}

3308
	if (USES_PPGTT(dev_priv)) {
3309 3310
		struct i915_address_space *vm;

3311 3312 3313
		list_for_each_entry(vm, &dev_priv->vm_list, global_link) {
			/* TODO: Perhaps it shouldn't be gen6 specific */

3314
			struct i915_hw_ppgtt *ppgtt;
3315

3316
			if (i915_is_ggtt(vm))
3317
				ppgtt = dev_priv->mm.aliasing_ppgtt;
3318 3319
			else
				ppgtt = i915_vm_to_ppgtt(vm);
3320 3321 3322 3323 3324 3325 3326 3327 3328

			gen6_write_page_range(dev_priv, &ppgtt->pd,
					      0, ppgtt->base.total);
		}
	}

	i915_ggtt_flush(dev_priv);
}

3329
struct i915_vma *
C
Chris Wilson 已提交
3330 3331 3332
i915_gem_obj_to_vma(struct drm_i915_gem_object *obj,
		    struct i915_address_space *vm,
		    const struct i915_ggtt_view *view)
3333
{
3334
	struct rb_node *rb;
3335

3336 3337 3338 3339 3340
	rb = obj->vma_tree.rb_node;
	while (rb) {
		struct i915_vma *vma = rb_entry(rb, struct i915_vma, obj_node);
		long cmp;

J
Joonas Lahtinen 已提交
3341
		cmp = i915_vma_compare(vma, vm, view);
3342
		if (cmp == 0)
C
Chris Wilson 已提交
3343
			return vma;
3344

3345 3346 3347 3348 3349 3350
		if (cmp < 0)
			rb = rb->rb_right;
		else
			rb = rb->rb_left;
	}

C
Chris Wilson 已提交
3351
	return NULL;
3352 3353 3354
}

struct i915_vma *
C
Chris Wilson 已提交
3355 3356 3357
i915_gem_obj_lookup_or_create_vma(struct drm_i915_gem_object *obj,
				  struct i915_address_space *vm,
				  const struct i915_ggtt_view *view)
3358
{
C
Chris Wilson 已提交
3359
	struct i915_vma *vma;
3360

3361
	lockdep_assert_held(&obj->base.dev->struct_mutex);
C
Chris Wilson 已提交
3362
	GEM_BUG_ON(view && !i915_is_ggtt(vm));
3363

C
Chris Wilson 已提交
3364
	vma = i915_gem_obj_to_vma(obj, vm, view);
3365
	if (!vma) {
J
Joonas Lahtinen 已提交
3366
		vma = i915_vma_create(obj, vm, view);
3367 3368
		GEM_BUG_ON(vma != i915_gem_obj_to_vma(obj, vm, view));
	}
3369

3370
	GEM_BUG_ON(i915_vma_is_closed(vma));
3371 3372
	return vma;
}
3373

3374
static struct scatterlist *
3375
rotate_pages(const dma_addr_t *in, unsigned int offset,
3376
	     unsigned int width, unsigned int height,
3377
	     unsigned int stride,
3378
	     struct sg_table *st, struct scatterlist *sg)
3379 3380 3381 3382 3383
{
	unsigned int column, row;
	unsigned int src_idx;

	for (column = 0; column < width; column++) {
3384
		src_idx = stride * (height - 1) + column;
3385 3386 3387 3388 3389 3390 3391
		for (row = 0; row < height; row++) {
			st->nents++;
			/* We don't need the pages, but need to initialize
			 * the entries so the sg list can be happily traversed.
			 * The only thing we need are DMA addresses.
			 */
			sg_set_page(sg, NULL, PAGE_SIZE, 0);
3392
			sg_dma_address(sg) = in[offset + src_idx];
3393 3394
			sg_dma_len(sg) = PAGE_SIZE;
			sg = sg_next(sg);
3395
			src_idx -= stride;
3396 3397
		}
	}
3398 3399

	return sg;
3400 3401 3402
}

static struct sg_table *
3403
intel_rotate_fb_obj_pages(const struct intel_rotation_info *rot_info,
3404 3405
			  struct drm_i915_gem_object *obj)
{
3406
	const size_t n_pages = obj->base.size / PAGE_SIZE;
3407
	unsigned int size = intel_rotation_info_size(rot_info);
3408 3409
	struct sgt_iter sgt_iter;
	dma_addr_t dma_addr;
3410 3411 3412
	unsigned long i;
	dma_addr_t *page_addr_list;
	struct sg_table *st;
3413
	struct scatterlist *sg;
3414
	int ret = -ENOMEM;
3415 3416

	/* Allocate a temporary list of source pages for random access. */
3417
	page_addr_list = drm_malloc_gfp(n_pages,
3418 3419
					sizeof(dma_addr_t),
					GFP_TEMPORARY);
3420 3421 3422 3423 3424 3425 3426 3427
	if (!page_addr_list)
		return ERR_PTR(ret);

	/* Allocate target SG list. */
	st = kmalloc(sizeof(*st), GFP_KERNEL);
	if (!st)
		goto err_st_alloc;

3428
	ret = sg_alloc_table(st, size, GFP_KERNEL);
3429 3430 3431 3432 3433
	if (ret)
		goto err_sg_alloc;

	/* Populate source page list from the object. */
	i = 0;
C
Chris Wilson 已提交
3434
	for_each_sgt_dma(dma_addr, sgt_iter, obj->mm.pages)
3435
		page_addr_list[i++] = dma_addr;
3436

3437
	GEM_BUG_ON(i != n_pages);
3438 3439 3440
	st->nents = 0;
	sg = st->sgl;

3441 3442 3443 3444
	for (i = 0 ; i < ARRAY_SIZE(rot_info->plane); i++) {
		sg = rotate_pages(page_addr_list, rot_info->plane[i].offset,
				  rot_info->plane[i].width, rot_info->plane[i].height,
				  rot_info->plane[i].stride, st, sg);
3445 3446
	}

3447 3448
	DRM_DEBUG_KMS("Created rotated page mapping for object size %zu (%ux%u tiles, %u pages)\n",
		      obj->base.size, rot_info->plane[0].width, rot_info->plane[0].height, size);
3449 3450 3451 3452 3453 3454 3455 3456 3457 3458

	drm_free_large(page_addr_list);

	return st;

err_sg_alloc:
	kfree(st);
err_st_alloc:
	drm_free_large(page_addr_list);

3459 3460 3461
	DRM_DEBUG_KMS("Failed to create rotated mapping for object size %zu! (%ux%u tiles, %u pages)\n",
		      obj->base.size, rot_info->plane[0].width, rot_info->plane[0].height, size);

3462 3463
	return ERR_PTR(ret);
}
3464

3465 3466 3467 3468 3469
static struct sg_table *
intel_partial_pages(const struct i915_ggtt_view *view,
		    struct drm_i915_gem_object *obj)
{
	struct sg_table *st;
3470 3471 3472
	struct scatterlist *sg, *iter;
	unsigned int count = view->params.partial.size;
	unsigned int offset;
3473 3474 3475 3476 3477 3478
	int ret = -ENOMEM;

	st = kmalloc(sizeof(*st), GFP_KERNEL);
	if (!st)
		goto err_st_alloc;

3479
	ret = sg_alloc_table(st, count, GFP_KERNEL);
3480 3481 3482
	if (ret)
		goto err_sg_alloc;

3483 3484 3485 3486 3487
	iter = i915_gem_object_get_sg(obj,
				      view->params.partial.offset,
				      &offset);
	GEM_BUG_ON(!iter);

3488 3489
	sg = st->sgl;
	st->nents = 0;
3490 3491
	do {
		unsigned int len;
3492

3493 3494 3495 3496 3497 3498
		len = min(iter->length - (offset << PAGE_SHIFT),
			  count << PAGE_SHIFT);
		sg_set_page(sg, NULL, len, 0);
		sg_dma_address(sg) =
			sg_dma_address(iter) + (offset << PAGE_SHIFT);
		sg_dma_len(sg) = len;
3499 3500

		st->nents++;
3501 3502 3503 3504 3505
		count -= len >> PAGE_SHIFT;
		if (count == 0) {
			sg_mark_end(sg);
			return st;
		}
3506

3507 3508 3509 3510
		sg = __sg_next(sg);
		iter = __sg_next(iter);
		offset = 0;
	} while (1);
3511 3512 3513 3514 3515 3516 3517

err_sg_alloc:
	kfree(st);
err_st_alloc:
	return ERR_PTR(ret);
}

3518
static int
3519
i915_get_ggtt_vma_pages(struct i915_vma *vma)
3520
{
3521 3522
	int ret = 0;

3523 3524 3525 3526 3527 3528 3529
	/* The vma->pages are only valid within the lifespan of the borrowed
	 * obj->mm.pages. When the obj->mm.pages sg_table is regenerated, so
	 * must be the vma->pages. A simple rule is that vma->pages must only
	 * be accessed when the obj->mm.pages are pinned.
	 */
	GEM_BUG_ON(!i915_gem_object_has_pinned_pages(vma->obj));

3530
	if (vma->pages)
3531 3532 3533
		return 0;

	if (vma->ggtt_view.type == I915_GGTT_VIEW_NORMAL)
C
Chris Wilson 已提交
3534
		vma->pages = vma->obj->mm.pages;
3535
	else if (vma->ggtt_view.type == I915_GGTT_VIEW_ROTATED)
3536
		vma->pages =
3537
			intel_rotate_fb_obj_pages(&vma->ggtt_view.params.rotated, vma->obj);
3538
	else if (vma->ggtt_view.type == I915_GGTT_VIEW_PARTIAL)
3539
		vma->pages = intel_partial_pages(&vma->ggtt_view, vma->obj);
3540 3541 3542 3543
	else
		WARN_ONCE(1, "GGTT view %u not implemented!\n",
			  vma->ggtt_view.type);

3544
	if (!vma->pages) {
3545
		DRM_ERROR("Failed to get pages for GGTT view type %u!\n",
3546
			  vma->ggtt_view.type);
3547
		ret = -EINVAL;
3548 3549 3550
	} else if (IS_ERR(vma->pages)) {
		ret = PTR_ERR(vma->pages);
		vma->pages = NULL;
3551 3552
		DRM_ERROR("Failed to get pages for VMA view type %u (%d)!\n",
			  vma->ggtt_view.type, ret);
3553 3554
	}

3555
	return ret;
3556 3557
}

3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609
/**
 * i915_gem_gtt_reserve - reserve a node in an address_space (GTT)
 * @vm - the &struct i915_address_space
 * @node - the &struct drm_mm_node (typically i915_vma.mode)
 * @size - how much space to allocate inside the GTT,
 *         must be #I915_GTT_PAGE_SIZE aligned
 * @offset - where to insert inside the GTT,
 *           must be #I915_GTT_MIN_ALIGNMENT aligned, and the node
 *           (@offset + @size) must fit within the address space
 * @color - color to apply to node, if this node is not from a VMA,
 *          color must be #I915_COLOR_UNEVICTABLE
 * @flags - control search and eviction behaviour
 *
 * i915_gem_gtt_reserve() tries to insert the @node at the exact @offset inside
 * the address space (using @size and @color). If the @node does not fit, it
 * tries to evict any overlapping nodes from the GTT, including any
 * neighbouring nodes if the colors do not match (to ensure guard pages between
 * differing domains). See i915_gem_evict_for_node() for the gory details
 * on the eviction algorithm. #PIN_NONBLOCK may used to prevent waiting on
 * evicting active overlapping objects, and any overlapping node that is pinned
 * or marked as unevictable will also result in failure.
 *
 * Returns: 0 on success, -ENOSPC if no suitable hole is found, -EINTR if
 * asked to wait for eviction and interrupted.
 */
int i915_gem_gtt_reserve(struct i915_address_space *vm,
			 struct drm_mm_node *node,
			 u64 size, u64 offset, unsigned long color,
			 unsigned int flags)
{
	int err;

	GEM_BUG_ON(!size);
	GEM_BUG_ON(!IS_ALIGNED(size, I915_GTT_PAGE_SIZE));
	GEM_BUG_ON(!IS_ALIGNED(offset, I915_GTT_MIN_ALIGNMENT));
	GEM_BUG_ON(range_overflows(offset, size, vm->total));

	node->size = size;
	node->start = offset;
	node->color = color;

	err = drm_mm_reserve_node(&vm->mm, node);
	if (err != -ENOSPC)
		return err;

	err = i915_gem_evict_for_node(vm, node, flags);
	if (err == 0)
		err = drm_mm_reserve_node(&vm->mm, node);

	return err;
}

3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634
static u64 random_offset(u64 start, u64 end, u64 len, u64 align)
{
	u64 range, addr;

	GEM_BUG_ON(range_overflows(start, len, end));
	GEM_BUG_ON(round_up(start, align) > round_down(end - len, align));

	range = round_down(end - len, align) - round_up(start, align);
	if (range) {
		if (sizeof(unsigned long) == sizeof(u64)) {
			addr = get_random_long();
		} else {
			addr = get_random_int();
			if (range > U32_MAX) {
				addr <<= 32;
				addr |= get_random_int();
			}
		}
		div64_u64_rem(addr, range, &addr);
		start += addr;
	}

	return round_up(start, align);
}

3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655
/**
 * i915_gem_gtt_insert - insert a node into an address_space (GTT)
 * @vm - the &struct i915_address_space
 * @node - the &struct drm_mm_node (typically i915_vma.node)
 * @size - how much space to allocate inside the GTT,
 *         must be #I915_GTT_PAGE_SIZE aligned
 * @alignment - required alignment of starting offset, may be 0 but
 *              if specified, this must be a power-of-two and at least
 *              #I915_GTT_MIN_ALIGNMENT
 * @color - color to apply to node
 * @start - start of any range restriction inside GTT (0 for all),
 *          must be #I915_GTT_PAGE_SIZE aligned
 * @end - end of any range restriction inside GTT (U64_MAX for all),
 *        must be #I915_GTT_PAGE_SIZE aligned if not U64_MAX
 * @flags - control search and eviction behaviour
 *
 * i915_gem_gtt_insert() first searches for an available hole into which
 * is can insert the node. The hole address is aligned to @alignment and
 * its @size must then fit entirely within the [@start, @end] bounds. The
 * nodes on either side of the hole must match @color, or else a guard page
 * will be inserted between the two nodes (or the node evicted). If no
3656 3657
 * suitable hole is found, first a victim is randomly selected and tested
 * for eviction, otherwise then the LRU list of objects within the GTT
3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674
 * is scanned to find the first set of replacement nodes to create the hole.
 * Those old overlapping nodes are evicted from the GTT (and so must be
 * rebound before any future use). Any node that is currently pinned cannot
 * be evicted (see i915_vma_pin()). Similar if the node's VMA is currently
 * active and #PIN_NONBLOCK is specified, that node is also skipped when
 * searching for an eviction candidate. See i915_gem_evict_something() for
 * the gory details on the eviction algorithm.
 *
 * Returns: 0 on success, -ENOSPC if no suitable hole is found, -EINTR if
 * asked to wait for eviction and interrupted.
 */
int i915_gem_gtt_insert(struct i915_address_space *vm,
			struct drm_mm_node *node,
			u64 size, u64 alignment, unsigned long color,
			u64 start, u64 end, unsigned int flags)
{
	u32 search_flag, alloc_flag;
3675
	u64 offset;
3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717
	int err;

	lockdep_assert_held(&vm->i915->drm.struct_mutex);
	GEM_BUG_ON(!size);
	GEM_BUG_ON(!IS_ALIGNED(size, I915_GTT_PAGE_SIZE));
	GEM_BUG_ON(alignment && !is_power_of_2(alignment));
	GEM_BUG_ON(alignment && !IS_ALIGNED(alignment, I915_GTT_MIN_ALIGNMENT));
	GEM_BUG_ON(start >= end);
	GEM_BUG_ON(start > 0  && !IS_ALIGNED(start, I915_GTT_PAGE_SIZE));
	GEM_BUG_ON(end < U64_MAX && !IS_ALIGNED(end, I915_GTT_PAGE_SIZE));

	if (unlikely(range_overflows(start, size, end)))
		return -ENOSPC;

	if (unlikely(round_up(start, alignment) > round_down(end - size, alignment)))
		return -ENOSPC;

	if (flags & PIN_HIGH) {
		search_flag = DRM_MM_SEARCH_BELOW;
		alloc_flag = DRM_MM_CREATE_TOP;
	} else {
		search_flag = DRM_MM_SEARCH_DEFAULT;
		alloc_flag = DRM_MM_CREATE_DEFAULT;
	}

	/* We only allocate in PAGE_SIZE/GTT_PAGE_SIZE (4096) chunks,
	 * so we know that we always have a minimum alignment of 4096.
	 * The drm_mm range manager is optimised to return results
	 * with zero alignment, so where possible use the optimal
	 * path.
	 */
	BUILD_BUG_ON(I915_GTT_MIN_ALIGNMENT > I915_GTT_PAGE_SIZE);
	if (alignment <= I915_GTT_MIN_ALIGNMENT)
		alignment = 0;

	err = drm_mm_insert_node_in_range_generic(&vm->mm, node,
						  size, alignment, color,
						  start, end,
						  search_flag, alloc_flag);
	if (err != -ENOSPC)
		return err;

3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746
	/* No free space, pick a slot at random.
	 *
	 * There is a pathological case here using a GTT shared between
	 * mmap and GPU (i.e. ggtt/aliasing_ppgtt but not full-ppgtt):
	 *
	 *    |<-- 256 MiB aperture -->||<-- 1792 MiB unmappable -->|
	 *         (64k objects)             (448k objects)
	 *
	 * Now imagine that the eviction LRU is ordered top-down (just because
	 * pathology meets real life), and that we need to evict an object to
	 * make room inside the aperture. The eviction scan then has to walk
	 * the 448k list before it finds one within range. And now imagine that
	 * it has to search for a new hole between every byte inside the memcpy,
	 * for several simultaneous clients.
	 *
	 * On a full-ppgtt system, if we have run out of available space, there
	 * will be lots and lots of objects in the eviction list! Again,
	 * searching that LRU list may be slow if we are also applying any
	 * range restrictions (e.g. restriction to low 4GiB) and so, for
	 * simplicity and similarilty between different GTT, try the single
	 * random replacement first.
	 */
	offset = random_offset(start, end,
			       size, alignment ?: I915_GTT_MIN_ALIGNMENT);
	err = i915_gem_gtt_reserve(vm, node, size, offset, color, flags);
	if (err != -ENOSPC)
		return err;

	/* Randomly selected placement is pinned, do a search */
3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757
	err = i915_gem_evict_something(vm, size, alignment, color,
				       start, end, flags);
	if (err)
		return err;

	search_flag = DRM_MM_SEARCH_DEFAULT;
	return drm_mm_insert_node_in_range_generic(&vm->mm, node,
						   size, alignment, color,
						   start, end,
						   search_flag, alloc_flag);
}