1 /* 2 * Copyright © 2010 Daniel Vetter 3 * Copyright © 2011-2014 Intel Corporation 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining a 6 * copy of this software and associated documentation files (the "Software"), 7 * to deal in the Software without restriction, including without limitation 8 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 * and/or sell copies of the Software, and to permit persons to whom the 10 * Software is furnished to do so, subject to the following conditions: 11 * 12 * The above copyright notice and this permission notice (including the next 13 * paragraph) shall be included in all copies or substantial portions of the 14 * Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 22 * IN THE SOFTWARE. 23 * 24 */ 25 26 #include <linux/slab.h> /* fault-inject.h is not standalone! */ 27 28 #include <linux/fault-inject.h> 29 #include <linux/log2.h> 30 #include <linux/random.h> 31 #include <linux/seq_file.h> 32 #include <linux/stop_machine.h> 33 34 #include <asm/set_memory.h> 35 36 #include <drm/i915_drm.h> 37 38 #include "i915_drv.h" 39 #include "i915_vgpu.h" 40 #include "i915_trace.h" 41 #include "intel_drv.h" 42 #include "intel_frontbuffer.h" 43 44 #define I915_GFP_ALLOW_FAIL (GFP_KERNEL | __GFP_RETRY_MAYFAIL | __GFP_NOWARN) 45 46 /** 47 * DOC: Global GTT views 48 * 49 * Background and previous state 50 * 51 * Historically objects could exists (be bound) in global GTT space only as 52 * singular instances with a view representing all of the object's backing pages 53 * in a linear fashion. This view will be called a normal view. 54 * 55 * To support multiple views of the same object, where the number of mapped 56 * pages is not equal to the backing store, or where the layout of the pages 57 * is not linear, concept of a GGTT view was added. 58 * 59 * One example of an alternative view is a stereo display driven by a single 60 * image. In this case we would have a framebuffer looking like this 61 * (2x2 pages): 62 * 63 * 12 64 * 34 65 * 66 * Above would represent a normal GGTT view as normally mapped for GPU or CPU 67 * rendering. In contrast, fed to the display engine would be an alternative 68 * view which could look something like this: 69 * 70 * 1212 71 * 3434 72 * 73 * In this example both the size and layout of pages in the alternative view is 74 * different from the normal view. 75 * 76 * Implementation and usage 77 * 78 * GGTT views are implemented using VMAs and are distinguished via enum 79 * i915_ggtt_view_type and struct i915_ggtt_view. 80 * 81 * A new flavour of core GEM functions which work with GGTT bound objects were 82 * added with the _ggtt_ infix, and sometimes with _view postfix to avoid 83 * renaming in large amounts of code. They take the struct i915_ggtt_view 84 * parameter encapsulating all metadata required to implement a view. 85 * 86 * As a helper for callers which are only interested in the normal view, 87 * globally const i915_ggtt_view_normal singleton instance exists. All old core 88 * GEM API functions, the ones not taking the view parameter, are operating on, 89 * or with the normal GGTT view. 90 * 91 * Code wanting to add or use a new GGTT view needs to: 92 * 93 * 1. Add a new enum with a suitable name. 94 * 2. Extend the metadata in the i915_ggtt_view structure if required. 95 * 3. Add support to i915_get_vma_pages(). 96 * 97 * New views are required to build a scatter-gather table from within the 98 * i915_get_vma_pages function. This table is stored in the vma.ggtt_view and 99 * exists for the lifetime of an VMA. 100 * 101 * Core API is designed to have copy semantics which means that passed in 102 * struct i915_ggtt_view does not need to be persistent (left around after 103 * calling the core API functions). 104 * 105 */ 106 107 static int 108 i915_get_ggtt_vma_pages(struct i915_vma *vma); 109 110 static void gen6_ggtt_invalidate(struct drm_i915_private *dev_priv) 111 { 112 /* 113 * Note that as an uncached mmio write, this will flush the 114 * WCB of the writes into the GGTT before it triggers the invalidate. 115 */ 116 I915_WRITE(GFX_FLSH_CNTL_GEN6, GFX_FLSH_CNTL_EN); 117 } 118 119 static void guc_ggtt_invalidate(struct drm_i915_private *dev_priv) 120 { 121 gen6_ggtt_invalidate(dev_priv); 122 I915_WRITE(GEN8_GTCR, GEN8_GTCR_INVALIDATE); 123 } 124 125 static void gmch_ggtt_invalidate(struct drm_i915_private *dev_priv) 126 { 127 intel_gtt_chipset_flush(); 128 } 129 130 static inline void i915_ggtt_invalidate(struct drm_i915_private *i915) 131 { 132 i915->ggtt.invalidate(i915); 133 } 134 135 static int ppgtt_bind_vma(struct i915_vma *vma, 136 enum i915_cache_level cache_level, 137 u32 unused) 138 { 139 u32 pte_flags; 140 int err; 141 142 if (!(vma->flags & I915_VMA_LOCAL_BIND)) { 143 err = vma->vm->allocate_va_range(vma->vm, 144 vma->node.start, vma->size); 145 if (err) 146 return err; 147 } 148 149 /* Applicable to VLV, and gen8+ */ 150 pte_flags = 0; 151 if (i915_gem_object_is_readonly(vma->obj)) 152 pte_flags |= PTE_READ_ONLY; 153 154 vma->vm->insert_entries(vma->vm, vma, cache_level, pte_flags); 155 156 return 0; 157 } 158 159 static void ppgtt_unbind_vma(struct i915_vma *vma) 160 { 161 vma->vm->clear_range(vma->vm, vma->node.start, vma->size); 162 } 163 164 static int ppgtt_set_pages(struct i915_vma *vma) 165 { 166 GEM_BUG_ON(vma->pages); 167 168 vma->pages = vma->obj->mm.pages; 169 170 vma->page_sizes = vma->obj->mm.page_sizes; 171 172 return 0; 173 } 174 175 static void clear_pages(struct i915_vma *vma) 176 { 177 GEM_BUG_ON(!vma->pages); 178 179 if (vma->pages != vma->obj->mm.pages) { 180 sg_free_table(vma->pages); 181 kfree(vma->pages); 182 } 183 vma->pages = NULL; 184 185 memset(&vma->page_sizes, 0, sizeof(vma->page_sizes)); 186 } 187 188 static u64 gen8_pte_encode(dma_addr_t addr, 189 enum i915_cache_level level, 190 u32 flags) 191 { 192 gen8_pte_t pte = addr | _PAGE_PRESENT | _PAGE_RW; 193 194 if (unlikely(flags & PTE_READ_ONLY)) 195 pte &= ~_PAGE_RW; 196 197 switch (level) { 198 case I915_CACHE_NONE: 199 pte |= PPAT_UNCACHED; 200 break; 201 case I915_CACHE_WT: 202 pte |= PPAT_DISPLAY_ELLC; 203 break; 204 default: 205 pte |= PPAT_CACHED; 206 break; 207 } 208 209 return pte; 210 } 211 212 static gen8_pde_t gen8_pde_encode(const dma_addr_t addr, 213 const enum i915_cache_level level) 214 { 215 gen8_pde_t pde = _PAGE_PRESENT | _PAGE_RW; 216 pde |= addr; 217 if (level != I915_CACHE_NONE) 218 pde |= PPAT_CACHED_PDE; 219 else 220 pde |= PPAT_UNCACHED; 221 return pde; 222 } 223 224 #define gen8_pdpe_encode gen8_pde_encode 225 #define gen8_pml4e_encode gen8_pde_encode 226 227 static u64 snb_pte_encode(dma_addr_t addr, 228 enum i915_cache_level level, 229 u32 flags) 230 { 231 gen6_pte_t pte = GEN6_PTE_VALID; 232 pte |= GEN6_PTE_ADDR_ENCODE(addr); 233 234 switch (level) { 235 case I915_CACHE_L3_LLC: 236 case I915_CACHE_LLC: 237 pte |= GEN6_PTE_CACHE_LLC; 238 break; 239 case I915_CACHE_NONE: 240 pte |= GEN6_PTE_UNCACHED; 241 break; 242 default: 243 MISSING_CASE(level); 244 } 245 246 return pte; 247 } 248 249 static u64 ivb_pte_encode(dma_addr_t addr, 250 enum i915_cache_level level, 251 u32 flags) 252 { 253 gen6_pte_t pte = GEN6_PTE_VALID; 254 pte |= GEN6_PTE_ADDR_ENCODE(addr); 255 256 switch (level) { 257 case I915_CACHE_L3_LLC: 258 pte |= GEN7_PTE_CACHE_L3_LLC; 259 break; 260 case I915_CACHE_LLC: 261 pte |= GEN6_PTE_CACHE_LLC; 262 break; 263 case I915_CACHE_NONE: 264 pte |= GEN6_PTE_UNCACHED; 265 break; 266 default: 267 MISSING_CASE(level); 268 } 269 270 return pte; 271 } 272 273 static u64 byt_pte_encode(dma_addr_t addr, 274 enum i915_cache_level level, 275 u32 flags) 276 { 277 gen6_pte_t pte = GEN6_PTE_VALID; 278 pte |= GEN6_PTE_ADDR_ENCODE(addr); 279 280 if (!(flags & PTE_READ_ONLY)) 281 pte |= BYT_PTE_WRITEABLE; 282 283 if (level != I915_CACHE_NONE) 284 pte |= BYT_PTE_SNOOPED_BY_CPU_CACHES; 285 286 return pte; 287 } 288 289 static u64 hsw_pte_encode(dma_addr_t addr, 290 enum i915_cache_level level, 291 u32 flags) 292 { 293 gen6_pte_t pte = GEN6_PTE_VALID; 294 pte |= HSW_PTE_ADDR_ENCODE(addr); 295 296 if (level != I915_CACHE_NONE) 297 pte |= HSW_WB_LLC_AGE3; 298 299 return pte; 300 } 301 302 static u64 iris_pte_encode(dma_addr_t addr, 303 enum i915_cache_level level, 304 u32 flags) 305 { 306 gen6_pte_t pte = GEN6_PTE_VALID; 307 pte |= HSW_PTE_ADDR_ENCODE(addr); 308 309 switch (level) { 310 case I915_CACHE_NONE: 311 break; 312 case I915_CACHE_WT: 313 pte |= HSW_WT_ELLC_LLC_AGE3; 314 break; 315 default: 316 pte |= HSW_WB_ELLC_LLC_AGE3; 317 break; 318 } 319 320 return pte; 321 } 322 323 static void stash_init(struct pagestash *stash) 324 { 325 pagevec_init(&stash->pvec); 326 spin_lock_init(&stash->lock); 327 } 328 329 static struct page *stash_pop_page(struct pagestash *stash) 330 { 331 struct page *page = NULL; 332 333 spin_lock(&stash->lock); 334 if (likely(stash->pvec.nr)) 335 page = stash->pvec.pages[--stash->pvec.nr]; 336 spin_unlock(&stash->lock); 337 338 return page; 339 } 340 341 static void stash_push_pagevec(struct pagestash *stash, struct pagevec *pvec) 342 { 343 int nr; 344 345 spin_lock_nested(&stash->lock, SINGLE_DEPTH_NESTING); 346 347 nr = min_t(int, pvec->nr, pagevec_space(&stash->pvec)); 348 memcpy(stash->pvec.pages + stash->pvec.nr, 349 pvec->pages + pvec->nr - nr, 350 sizeof(pvec->pages[0]) * nr); 351 stash->pvec.nr += nr; 352 353 spin_unlock(&stash->lock); 354 355 pvec->nr -= nr; 356 } 357 358 static struct page *vm_alloc_page(struct i915_address_space *vm, gfp_t gfp) 359 { 360 struct pagevec stack; 361 struct page *page; 362 363 if (I915_SELFTEST_ONLY(should_fail(&vm->fault_attr, 1))) 364 i915_gem_shrink_all(vm->i915); 365 366 page = stash_pop_page(&vm->free_pages); 367 if (page) 368 return page; 369 370 if (!vm->pt_kmap_wc) 371 return alloc_page(gfp); 372 373 /* Look in our global stash of WC pages... */ 374 page = stash_pop_page(&vm->i915->mm.wc_stash); 375 if (page) 376 return page; 377 378 /* 379 * Otherwise batch allocate pages to amortize cost of set_pages_wc. 380 * 381 * We have to be careful as page allocation may trigger the shrinker 382 * (via direct reclaim) which will fill up the WC stash underneath us. 383 * So we add our WB pages into a temporary pvec on the stack and merge 384 * them into the WC stash after all the allocations are complete. 385 */ 386 pagevec_init(&stack); 387 do { 388 struct page *page; 389 390 page = alloc_page(gfp); 391 if (unlikely(!page)) 392 break; 393 394 stack.pages[stack.nr++] = page; 395 } while (pagevec_space(&stack)); 396 397 if (stack.nr && !set_pages_array_wc(stack.pages, stack.nr)) { 398 page = stack.pages[--stack.nr]; 399 400 /* Merge spare WC pages to the global stash */ 401 stash_push_pagevec(&vm->i915->mm.wc_stash, &stack); 402 403 /* Push any surplus WC pages onto the local VM stash */ 404 if (stack.nr) 405 stash_push_pagevec(&vm->free_pages, &stack); 406 } 407 408 /* Return unwanted leftovers */ 409 if (unlikely(stack.nr)) { 410 WARN_ON_ONCE(set_pages_array_wb(stack.pages, stack.nr)); 411 __pagevec_release(&stack); 412 } 413 414 return page; 415 } 416 417 static void vm_free_pages_release(struct i915_address_space *vm, 418 bool immediate) 419 { 420 struct pagevec *pvec = &vm->free_pages.pvec; 421 struct pagevec stack; 422 423 lockdep_assert_held(&vm->free_pages.lock); 424 GEM_BUG_ON(!pagevec_count(pvec)); 425 426 if (vm->pt_kmap_wc) { 427 /* 428 * When we use WC, first fill up the global stash and then 429 * only if full immediately free the overflow. 430 */ 431 stash_push_pagevec(&vm->i915->mm.wc_stash, pvec); 432 433 /* 434 * As we have made some room in the VM's free_pages, 435 * we can wait for it to fill again. Unless we are 436 * inside i915_address_space_fini() and must 437 * immediately release the pages! 438 */ 439 if (pvec->nr <= (immediate ? 0 : PAGEVEC_SIZE - 1)) 440 return; 441 442 /* 443 * We have to drop the lock to allow ourselves to sleep, 444 * so take a copy of the pvec and clear the stash for 445 * others to use it as we sleep. 446 */ 447 stack = *pvec; 448 pagevec_reinit(pvec); 449 spin_unlock(&vm->free_pages.lock); 450 451 pvec = &stack; 452 set_pages_array_wb(pvec->pages, pvec->nr); 453 454 spin_lock(&vm->free_pages.lock); 455 } 456 457 __pagevec_release(pvec); 458 } 459 460 static void vm_free_page(struct i915_address_space *vm, struct page *page) 461 { 462 /* 463 * On !llc, we need to change the pages back to WB. We only do so 464 * in bulk, so we rarely need to change the page attributes here, 465 * but doing so requires a stop_machine() from deep inside arch/x86/mm. 466 * To make detection of the possible sleep more likely, use an 467 * unconditional might_sleep() for everybody. 468 */ 469 might_sleep(); 470 spin_lock(&vm->free_pages.lock); 471 if (!pagevec_add(&vm->free_pages.pvec, page)) 472 vm_free_pages_release(vm, false); 473 spin_unlock(&vm->free_pages.lock); 474 } 475 476 static void i915_address_space_init(struct i915_address_space *vm, int subclass) 477 { 478 /* 479 * The vm->mutex must be reclaim safe (for use in the shrinker). 480 * Do a dummy acquire now under fs_reclaim so that any allocation 481 * attempt holding the lock is immediately reported by lockdep. 482 */ 483 mutex_init(&vm->mutex); 484 lockdep_set_subclass(&vm->mutex, subclass); 485 i915_gem_shrinker_taints_mutex(vm->i915, &vm->mutex); 486 487 GEM_BUG_ON(!vm->total); 488 drm_mm_init(&vm->mm, 0, vm->total); 489 vm->mm.head_node.color = I915_COLOR_UNEVICTABLE; 490 491 stash_init(&vm->free_pages); 492 493 INIT_LIST_HEAD(&vm->unbound_list); 494 INIT_LIST_HEAD(&vm->bound_list); 495 } 496 497 static void i915_address_space_fini(struct i915_address_space *vm) 498 { 499 spin_lock(&vm->free_pages.lock); 500 if (pagevec_count(&vm->free_pages.pvec)) 501 vm_free_pages_release(vm, true); 502 GEM_BUG_ON(pagevec_count(&vm->free_pages.pvec)); 503 spin_unlock(&vm->free_pages.lock); 504 505 drm_mm_takedown(&vm->mm); 506 507 mutex_destroy(&vm->mutex); 508 } 509 510 static int __setup_page_dma(struct i915_address_space *vm, 511 struct i915_page_dma *p, 512 gfp_t gfp) 513 { 514 p->page = vm_alloc_page(vm, gfp | I915_GFP_ALLOW_FAIL); 515 if (unlikely(!p->page)) 516 return -ENOMEM; 517 518 p->daddr = dma_map_page_attrs(vm->dma, 519 p->page, 0, PAGE_SIZE, 520 PCI_DMA_BIDIRECTIONAL, 521 DMA_ATTR_SKIP_CPU_SYNC | 522 DMA_ATTR_NO_WARN); 523 if (unlikely(dma_mapping_error(vm->dma, p->daddr))) { 524 vm_free_page(vm, p->page); 525 return -ENOMEM; 526 } 527 528 return 0; 529 } 530 531 static int setup_page_dma(struct i915_address_space *vm, 532 struct i915_page_dma *p) 533 { 534 return __setup_page_dma(vm, p, __GFP_HIGHMEM); 535 } 536 537 static void cleanup_page_dma(struct i915_address_space *vm, 538 struct i915_page_dma *p) 539 { 540 dma_unmap_page(vm->dma, p->daddr, PAGE_SIZE, PCI_DMA_BIDIRECTIONAL); 541 vm_free_page(vm, p->page); 542 } 543 544 #define kmap_atomic_px(px) kmap_atomic(px_base(px)->page) 545 546 #define setup_px(vm, px) setup_page_dma((vm), px_base(px)) 547 #define cleanup_px(vm, px) cleanup_page_dma((vm), px_base(px)) 548 #define fill_px(vm, px, v) fill_page_dma((vm), px_base(px), (v)) 549 #define fill32_px(vm, px, v) fill_page_dma_32((vm), px_base(px), (v)) 550 551 static void fill_page_dma(struct i915_address_space *vm, 552 struct i915_page_dma *p, 553 const u64 val) 554 { 555 u64 * const vaddr = kmap_atomic(p->page); 556 557 memset64(vaddr, val, PAGE_SIZE / sizeof(val)); 558 559 kunmap_atomic(vaddr); 560 } 561 562 static void fill_page_dma_32(struct i915_address_space *vm, 563 struct i915_page_dma *p, 564 const u32 v) 565 { 566 fill_page_dma(vm, p, (u64)v << 32 | v); 567 } 568 569 static int 570 setup_scratch_page(struct i915_address_space *vm, gfp_t gfp) 571 { 572 unsigned long size; 573 574 /* 575 * In order to utilize 64K pages for an object with a size < 2M, we will 576 * need to support a 64K scratch page, given that every 16th entry for a 577 * page-table operating in 64K mode must point to a properly aligned 64K 578 * region, including any PTEs which happen to point to scratch. 579 * 580 * This is only relevant for the 48b PPGTT where we support 581 * huge-gtt-pages, see also i915_vma_insert(). However, as we share the 582 * scratch (read-only) between all vm, we create one 64k scratch page 583 * for all. 584 */ 585 size = I915_GTT_PAGE_SIZE_4K; 586 if (i915_vm_is_4lvl(vm) && 587 HAS_PAGE_SIZES(vm->i915, I915_GTT_PAGE_SIZE_64K)) { 588 size = I915_GTT_PAGE_SIZE_64K; 589 gfp |= __GFP_NOWARN; 590 } 591 gfp |= __GFP_ZERO | __GFP_RETRY_MAYFAIL; 592 593 do { 594 int order = get_order(size); 595 struct page *page; 596 dma_addr_t addr; 597 598 page = alloc_pages(gfp, order); 599 if (unlikely(!page)) 600 goto skip; 601 602 addr = dma_map_page_attrs(vm->dma, 603 page, 0, size, 604 PCI_DMA_BIDIRECTIONAL, 605 DMA_ATTR_SKIP_CPU_SYNC | 606 DMA_ATTR_NO_WARN); 607 if (unlikely(dma_mapping_error(vm->dma, addr))) 608 goto free_page; 609 610 if (unlikely(!IS_ALIGNED(addr, size))) 611 goto unmap_page; 612 613 vm->scratch_page.page = page; 614 vm->scratch_page.daddr = addr; 615 vm->scratch_order = order; 616 return 0; 617 618 unmap_page: 619 dma_unmap_page(vm->dma, addr, size, PCI_DMA_BIDIRECTIONAL); 620 free_page: 621 __free_pages(page, order); 622 skip: 623 if (size == I915_GTT_PAGE_SIZE_4K) 624 return -ENOMEM; 625 626 size = I915_GTT_PAGE_SIZE_4K; 627 gfp &= ~__GFP_NOWARN; 628 } while (1); 629 } 630 631 static void cleanup_scratch_page(struct i915_address_space *vm) 632 { 633 struct i915_page_dma *p = &vm->scratch_page; 634 int order = vm->scratch_order; 635 636 dma_unmap_page(vm->dma, p->daddr, BIT(order) << PAGE_SHIFT, 637 PCI_DMA_BIDIRECTIONAL); 638 __free_pages(p->page, order); 639 } 640 641 static struct i915_page_table *alloc_pt(struct i915_address_space *vm) 642 { 643 struct i915_page_table *pt; 644 645 pt = kmalloc(sizeof(*pt), I915_GFP_ALLOW_FAIL); 646 if (unlikely(!pt)) 647 return ERR_PTR(-ENOMEM); 648 649 if (unlikely(setup_px(vm, pt))) { 650 kfree(pt); 651 return ERR_PTR(-ENOMEM); 652 } 653 654 pt->used_ptes = 0; 655 return pt; 656 } 657 658 static void free_pt(struct i915_address_space *vm, struct i915_page_table *pt) 659 { 660 cleanup_px(vm, pt); 661 kfree(pt); 662 } 663 664 static void gen8_initialize_pt(struct i915_address_space *vm, 665 struct i915_page_table *pt) 666 { 667 fill_px(vm, pt, vm->scratch_pte); 668 } 669 670 static void gen6_initialize_pt(struct i915_address_space *vm, 671 struct i915_page_table *pt) 672 { 673 fill32_px(vm, pt, vm->scratch_pte); 674 } 675 676 static struct i915_page_directory *alloc_pd(struct i915_address_space *vm) 677 { 678 struct i915_page_directory *pd; 679 680 pd = kzalloc(sizeof(*pd), I915_GFP_ALLOW_FAIL); 681 if (unlikely(!pd)) 682 return ERR_PTR(-ENOMEM); 683 684 if (unlikely(setup_px(vm, pd))) { 685 kfree(pd); 686 return ERR_PTR(-ENOMEM); 687 } 688 689 pd->used_pdes = 0; 690 return pd; 691 } 692 693 static void free_pd(struct i915_address_space *vm, 694 struct i915_page_directory *pd) 695 { 696 cleanup_px(vm, pd); 697 kfree(pd); 698 } 699 700 static void gen8_initialize_pd(struct i915_address_space *vm, 701 struct i915_page_directory *pd) 702 { 703 fill_px(vm, pd, 704 gen8_pde_encode(px_dma(vm->scratch_pt), I915_CACHE_LLC)); 705 memset_p((void **)pd->page_table, vm->scratch_pt, I915_PDES); 706 } 707 708 static int __pdp_init(struct i915_address_space *vm, 709 struct i915_page_directory_pointer *pdp) 710 { 711 const unsigned int pdpes = i915_pdpes_per_pdp(vm); 712 713 pdp->page_directory = kmalloc_array(pdpes, sizeof(*pdp->page_directory), 714 I915_GFP_ALLOW_FAIL); 715 if (unlikely(!pdp->page_directory)) 716 return -ENOMEM; 717 718 memset_p((void **)pdp->page_directory, vm->scratch_pd, pdpes); 719 720 return 0; 721 } 722 723 static void __pdp_fini(struct i915_page_directory_pointer *pdp) 724 { 725 kfree(pdp->page_directory); 726 pdp->page_directory = NULL; 727 } 728 729 static struct i915_page_directory_pointer * 730 alloc_pdp(struct i915_address_space *vm) 731 { 732 struct i915_page_directory_pointer *pdp; 733 int ret = -ENOMEM; 734 735 GEM_BUG_ON(!i915_vm_is_4lvl(vm)); 736 737 pdp = kzalloc(sizeof(*pdp), GFP_KERNEL); 738 if (!pdp) 739 return ERR_PTR(-ENOMEM); 740 741 ret = __pdp_init(vm, pdp); 742 if (ret) 743 goto fail_bitmap; 744 745 ret = setup_px(vm, pdp); 746 if (ret) 747 goto fail_page_m; 748 749 return pdp; 750 751 fail_page_m: 752 __pdp_fini(pdp); 753 fail_bitmap: 754 kfree(pdp); 755 756 return ERR_PTR(ret); 757 } 758 759 static void free_pdp(struct i915_address_space *vm, 760 struct i915_page_directory_pointer *pdp) 761 { 762 __pdp_fini(pdp); 763 764 if (!i915_vm_is_4lvl(vm)) 765 return; 766 767 cleanup_px(vm, pdp); 768 kfree(pdp); 769 } 770 771 static void gen8_initialize_pdp(struct i915_address_space *vm, 772 struct i915_page_directory_pointer *pdp) 773 { 774 gen8_ppgtt_pdpe_t scratch_pdpe; 775 776 scratch_pdpe = gen8_pdpe_encode(px_dma(vm->scratch_pd), I915_CACHE_LLC); 777 778 fill_px(vm, pdp, scratch_pdpe); 779 } 780 781 static void gen8_initialize_pml4(struct i915_address_space *vm, 782 struct i915_pml4 *pml4) 783 { 784 fill_px(vm, pml4, 785 gen8_pml4e_encode(px_dma(vm->scratch_pdp), I915_CACHE_LLC)); 786 memset_p((void **)pml4->pdps, vm->scratch_pdp, GEN8_PML4ES_PER_PML4); 787 } 788 789 /* 790 * PDE TLBs are a pain to invalidate on GEN8+. When we modify 791 * the page table structures, we mark them dirty so that 792 * context switching/execlist queuing code takes extra steps 793 * to ensure that tlbs are flushed. 794 */ 795 static void mark_tlbs_dirty(struct i915_hw_ppgtt *ppgtt) 796 { 797 ppgtt->pd_dirty_engines = ALL_ENGINES; 798 } 799 800 /* Removes entries from a single page table, releasing it if it's empty. 801 * Caller can use the return value to update higher-level entries. 802 */ 803 static bool gen8_ppgtt_clear_pt(const struct i915_address_space *vm, 804 struct i915_page_table *pt, 805 u64 start, u64 length) 806 { 807 unsigned int num_entries = gen8_pte_count(start, length); 808 gen8_pte_t *vaddr; 809 810 GEM_BUG_ON(num_entries > pt->used_ptes); 811 812 pt->used_ptes -= num_entries; 813 if (!pt->used_ptes) 814 return true; 815 816 vaddr = kmap_atomic_px(pt); 817 memset64(vaddr + gen8_pte_index(start), vm->scratch_pte, num_entries); 818 kunmap_atomic(vaddr); 819 820 return false; 821 } 822 823 static void gen8_ppgtt_set_pde(struct i915_address_space *vm, 824 struct i915_page_directory *pd, 825 struct i915_page_table *pt, 826 unsigned int pde) 827 { 828 gen8_pde_t *vaddr; 829 830 pd->page_table[pde] = pt; 831 832 vaddr = kmap_atomic_px(pd); 833 vaddr[pde] = gen8_pde_encode(px_dma(pt), I915_CACHE_LLC); 834 kunmap_atomic(vaddr); 835 } 836 837 static bool gen8_ppgtt_clear_pd(struct i915_address_space *vm, 838 struct i915_page_directory *pd, 839 u64 start, u64 length) 840 { 841 struct i915_page_table *pt; 842 u32 pde; 843 844 gen8_for_each_pde(pt, pd, start, length, pde) { 845 GEM_BUG_ON(pt == vm->scratch_pt); 846 847 if (!gen8_ppgtt_clear_pt(vm, pt, start, length)) 848 continue; 849 850 gen8_ppgtt_set_pde(vm, pd, vm->scratch_pt, pde); 851 GEM_BUG_ON(!pd->used_pdes); 852 pd->used_pdes--; 853 854 free_pt(vm, pt); 855 } 856 857 return !pd->used_pdes; 858 } 859 860 static void gen8_ppgtt_set_pdpe(struct i915_address_space *vm, 861 struct i915_page_directory_pointer *pdp, 862 struct i915_page_directory *pd, 863 unsigned int pdpe) 864 { 865 gen8_ppgtt_pdpe_t *vaddr; 866 867 pdp->page_directory[pdpe] = pd; 868 if (!i915_vm_is_4lvl(vm)) 869 return; 870 871 vaddr = kmap_atomic_px(pdp); 872 vaddr[pdpe] = gen8_pdpe_encode(px_dma(pd), I915_CACHE_LLC); 873 kunmap_atomic(vaddr); 874 } 875 876 /* Removes entries from a single page dir pointer, releasing it if it's empty. 877 * Caller can use the return value to update higher-level entries 878 */ 879 static bool gen8_ppgtt_clear_pdp(struct i915_address_space *vm, 880 struct i915_page_directory_pointer *pdp, 881 u64 start, u64 length) 882 { 883 struct i915_page_directory *pd; 884 unsigned int pdpe; 885 886 gen8_for_each_pdpe(pd, pdp, start, length, pdpe) { 887 GEM_BUG_ON(pd == vm->scratch_pd); 888 889 if (!gen8_ppgtt_clear_pd(vm, pd, start, length)) 890 continue; 891 892 gen8_ppgtt_set_pdpe(vm, pdp, vm->scratch_pd, pdpe); 893 GEM_BUG_ON(!pdp->used_pdpes); 894 pdp->used_pdpes--; 895 896 free_pd(vm, pd); 897 } 898 899 return !pdp->used_pdpes; 900 } 901 902 static void gen8_ppgtt_clear_3lvl(struct i915_address_space *vm, 903 u64 start, u64 length) 904 { 905 gen8_ppgtt_clear_pdp(vm, &i915_vm_to_ppgtt(vm)->pdp, start, length); 906 } 907 908 static void gen8_ppgtt_set_pml4e(struct i915_pml4 *pml4, 909 struct i915_page_directory_pointer *pdp, 910 unsigned int pml4e) 911 { 912 gen8_ppgtt_pml4e_t *vaddr; 913 914 pml4->pdps[pml4e] = pdp; 915 916 vaddr = kmap_atomic_px(pml4); 917 vaddr[pml4e] = gen8_pml4e_encode(px_dma(pdp), I915_CACHE_LLC); 918 kunmap_atomic(vaddr); 919 } 920 921 /* Removes entries from a single pml4. 922 * This is the top-level structure in 4-level page tables used on gen8+. 923 * Empty entries are always scratch pml4e. 924 */ 925 static void gen8_ppgtt_clear_4lvl(struct i915_address_space *vm, 926 u64 start, u64 length) 927 { 928 struct i915_hw_ppgtt *ppgtt = i915_vm_to_ppgtt(vm); 929 struct i915_pml4 *pml4 = &ppgtt->pml4; 930 struct i915_page_directory_pointer *pdp; 931 unsigned int pml4e; 932 933 GEM_BUG_ON(!i915_vm_is_4lvl(vm)); 934 935 gen8_for_each_pml4e(pdp, pml4, start, length, pml4e) { 936 GEM_BUG_ON(pdp == vm->scratch_pdp); 937 938 if (!gen8_ppgtt_clear_pdp(vm, pdp, start, length)) 939 continue; 940 941 gen8_ppgtt_set_pml4e(pml4, vm->scratch_pdp, pml4e); 942 943 free_pdp(vm, pdp); 944 } 945 } 946 947 static inline struct sgt_dma { 948 struct scatterlist *sg; 949 dma_addr_t dma, max; 950 } sgt_dma(struct i915_vma *vma) { 951 struct scatterlist *sg = vma->pages->sgl; 952 dma_addr_t addr = sg_dma_address(sg); 953 return (struct sgt_dma) { sg, addr, addr + sg->length }; 954 } 955 956 struct gen8_insert_pte { 957 u16 pml4e; 958 u16 pdpe; 959 u16 pde; 960 u16 pte; 961 }; 962 963 static __always_inline struct gen8_insert_pte gen8_insert_pte(u64 start) 964 { 965 return (struct gen8_insert_pte) { 966 gen8_pml4e_index(start), 967 gen8_pdpe_index(start), 968 gen8_pde_index(start), 969 gen8_pte_index(start), 970 }; 971 } 972 973 static __always_inline bool 974 gen8_ppgtt_insert_pte_entries(struct i915_hw_ppgtt *ppgtt, 975 struct i915_page_directory_pointer *pdp, 976 struct sgt_dma *iter, 977 struct gen8_insert_pte *idx, 978 enum i915_cache_level cache_level, 979 u32 flags) 980 { 981 struct i915_page_directory *pd; 982 const gen8_pte_t pte_encode = gen8_pte_encode(0, cache_level, flags); 983 gen8_pte_t *vaddr; 984 bool ret; 985 986 GEM_BUG_ON(idx->pdpe >= i915_pdpes_per_pdp(&ppgtt->vm)); 987 pd = pdp->page_directory[idx->pdpe]; 988 vaddr = kmap_atomic_px(pd->page_table[idx->pde]); 989 do { 990 vaddr[idx->pte] = pte_encode | iter->dma; 991 992 iter->dma += I915_GTT_PAGE_SIZE; 993 if (iter->dma >= iter->max) { 994 iter->sg = __sg_next(iter->sg); 995 if (!iter->sg) { 996 ret = false; 997 break; 998 } 999 1000 iter->dma = sg_dma_address(iter->sg); 1001 iter->max = iter->dma + iter->sg->length; 1002 } 1003 1004 if (++idx->pte == GEN8_PTES) { 1005 idx->pte = 0; 1006 1007 if (++idx->pde == I915_PDES) { 1008 idx->pde = 0; 1009 1010 /* Limited by sg length for 3lvl */ 1011 if (++idx->pdpe == GEN8_PML4ES_PER_PML4) { 1012 idx->pdpe = 0; 1013 ret = true; 1014 break; 1015 } 1016 1017 GEM_BUG_ON(idx->pdpe >= i915_pdpes_per_pdp(&ppgtt->vm)); 1018 pd = pdp->page_directory[idx->pdpe]; 1019 } 1020 1021 kunmap_atomic(vaddr); 1022 vaddr = kmap_atomic_px(pd->page_table[idx->pde]); 1023 } 1024 } while (1); 1025 kunmap_atomic(vaddr); 1026 1027 return ret; 1028 } 1029 1030 static void gen8_ppgtt_insert_3lvl(struct i915_address_space *vm, 1031 struct i915_vma *vma, 1032 enum i915_cache_level cache_level, 1033 u32 flags) 1034 { 1035 struct i915_hw_ppgtt *ppgtt = i915_vm_to_ppgtt(vm); 1036 struct sgt_dma iter = sgt_dma(vma); 1037 struct gen8_insert_pte idx = gen8_insert_pte(vma->node.start); 1038 1039 gen8_ppgtt_insert_pte_entries(ppgtt, &ppgtt->pdp, &iter, &idx, 1040 cache_level, flags); 1041 1042 vma->page_sizes.gtt = I915_GTT_PAGE_SIZE; 1043 } 1044 1045 static void gen8_ppgtt_insert_huge_entries(struct i915_vma *vma, 1046 struct i915_page_directory_pointer **pdps, 1047 struct sgt_dma *iter, 1048 enum i915_cache_level cache_level, 1049 u32 flags) 1050 { 1051 const gen8_pte_t pte_encode = gen8_pte_encode(0, cache_level, flags); 1052 u64 start = vma->node.start; 1053 dma_addr_t rem = iter->sg->length; 1054 1055 do { 1056 struct gen8_insert_pte idx = gen8_insert_pte(start); 1057 struct i915_page_directory_pointer *pdp = pdps[idx.pml4e]; 1058 struct i915_page_directory *pd = pdp->page_directory[idx.pdpe]; 1059 unsigned int page_size; 1060 bool maybe_64K = false; 1061 gen8_pte_t encode = pte_encode; 1062 gen8_pte_t *vaddr; 1063 u16 index, max; 1064 1065 if (vma->page_sizes.sg & I915_GTT_PAGE_SIZE_2M && 1066 IS_ALIGNED(iter->dma, I915_GTT_PAGE_SIZE_2M) && 1067 rem >= I915_GTT_PAGE_SIZE_2M && !idx.pte) { 1068 index = idx.pde; 1069 max = I915_PDES; 1070 page_size = I915_GTT_PAGE_SIZE_2M; 1071 1072 encode |= GEN8_PDE_PS_2M; 1073 1074 vaddr = kmap_atomic_px(pd); 1075 } else { 1076 struct i915_page_table *pt = pd->page_table[idx.pde]; 1077 1078 index = idx.pte; 1079 max = GEN8_PTES; 1080 page_size = I915_GTT_PAGE_SIZE; 1081 1082 if (!index && 1083 vma->page_sizes.sg & I915_GTT_PAGE_SIZE_64K && 1084 IS_ALIGNED(iter->dma, I915_GTT_PAGE_SIZE_64K) && 1085 (IS_ALIGNED(rem, I915_GTT_PAGE_SIZE_64K) || 1086 rem >= (max - index) * I915_GTT_PAGE_SIZE)) 1087 maybe_64K = true; 1088 1089 vaddr = kmap_atomic_px(pt); 1090 } 1091 1092 do { 1093 GEM_BUG_ON(iter->sg->length < page_size); 1094 vaddr[index++] = encode | iter->dma; 1095 1096 start += page_size; 1097 iter->dma += page_size; 1098 rem -= page_size; 1099 if (iter->dma >= iter->max) { 1100 iter->sg = __sg_next(iter->sg); 1101 if (!iter->sg) 1102 break; 1103 1104 rem = iter->sg->length; 1105 iter->dma = sg_dma_address(iter->sg); 1106 iter->max = iter->dma + rem; 1107 1108 if (maybe_64K && index < max && 1109 !(IS_ALIGNED(iter->dma, I915_GTT_PAGE_SIZE_64K) && 1110 (IS_ALIGNED(rem, I915_GTT_PAGE_SIZE_64K) || 1111 rem >= (max - index) * I915_GTT_PAGE_SIZE))) 1112 maybe_64K = false; 1113 1114 if (unlikely(!IS_ALIGNED(iter->dma, page_size))) 1115 break; 1116 } 1117 } while (rem >= page_size && index < max); 1118 1119 kunmap_atomic(vaddr); 1120 1121 /* 1122 * Is it safe to mark the 2M block as 64K? -- Either we have 1123 * filled whole page-table with 64K entries, or filled part of 1124 * it and have reached the end of the sg table and we have 1125 * enough padding. 1126 */ 1127 if (maybe_64K && 1128 (index == max || 1129 (i915_vm_has_scratch_64K(vma->vm) && 1130 !iter->sg && IS_ALIGNED(vma->node.start + 1131 vma->node.size, 1132 I915_GTT_PAGE_SIZE_2M)))) { 1133 vaddr = kmap_atomic_px(pd); 1134 vaddr[idx.pde] |= GEN8_PDE_IPS_64K; 1135 kunmap_atomic(vaddr); 1136 page_size = I915_GTT_PAGE_SIZE_64K; 1137 1138 /* 1139 * We write all 4K page entries, even when using 64K 1140 * pages. In order to verify that the HW isn't cheating 1141 * by using the 4K PTE instead of the 64K PTE, we want 1142 * to remove all the surplus entries. If the HW skipped 1143 * the 64K PTE, it will read/write into the scratch page 1144 * instead - which we detect as missing results during 1145 * selftests. 1146 */ 1147 if (I915_SELFTEST_ONLY(vma->vm->scrub_64K)) { 1148 u16 i; 1149 1150 encode = vma->vm->scratch_pte; 1151 vaddr = kmap_atomic_px(pd->page_table[idx.pde]); 1152 1153 for (i = 1; i < index; i += 16) 1154 memset64(vaddr + i, encode, 15); 1155 1156 kunmap_atomic(vaddr); 1157 } 1158 } 1159 1160 vma->page_sizes.gtt |= page_size; 1161 } while (iter->sg); 1162 } 1163 1164 static void gen8_ppgtt_insert_4lvl(struct i915_address_space *vm, 1165 struct i915_vma *vma, 1166 enum i915_cache_level cache_level, 1167 u32 flags) 1168 { 1169 struct i915_hw_ppgtt *ppgtt = i915_vm_to_ppgtt(vm); 1170 struct sgt_dma iter = sgt_dma(vma); 1171 struct i915_page_directory_pointer **pdps = ppgtt->pml4.pdps; 1172 1173 if (vma->page_sizes.sg > I915_GTT_PAGE_SIZE) { 1174 gen8_ppgtt_insert_huge_entries(vma, pdps, &iter, cache_level, 1175 flags); 1176 } else { 1177 struct gen8_insert_pte idx = gen8_insert_pte(vma->node.start); 1178 1179 while (gen8_ppgtt_insert_pte_entries(ppgtt, pdps[idx.pml4e++], 1180 &iter, &idx, cache_level, 1181 flags)) 1182 GEM_BUG_ON(idx.pml4e >= GEN8_PML4ES_PER_PML4); 1183 1184 vma->page_sizes.gtt = I915_GTT_PAGE_SIZE; 1185 } 1186 } 1187 1188 static void gen8_free_page_tables(struct i915_address_space *vm, 1189 struct i915_page_directory *pd) 1190 { 1191 int i; 1192 1193 for (i = 0; i < I915_PDES; i++) { 1194 if (pd->page_table[i] != vm->scratch_pt) 1195 free_pt(vm, pd->page_table[i]); 1196 } 1197 } 1198 1199 static int gen8_init_scratch(struct i915_address_space *vm) 1200 { 1201 int ret; 1202 1203 /* 1204 * If everybody agrees to not to write into the scratch page, 1205 * we can reuse it for all vm, keeping contexts and processes separate. 1206 */ 1207 if (vm->has_read_only && 1208 vm->i915->kernel_context && 1209 vm->i915->kernel_context->ppgtt) { 1210 struct i915_address_space *clone = 1211 &vm->i915->kernel_context->ppgtt->vm; 1212 1213 GEM_BUG_ON(!clone->has_read_only); 1214 1215 vm->scratch_order = clone->scratch_order; 1216 vm->scratch_pte = clone->scratch_pte; 1217 vm->scratch_pt = clone->scratch_pt; 1218 vm->scratch_pd = clone->scratch_pd; 1219 vm->scratch_pdp = clone->scratch_pdp; 1220 return 0; 1221 } 1222 1223 ret = setup_scratch_page(vm, __GFP_HIGHMEM); 1224 if (ret) 1225 return ret; 1226 1227 vm->scratch_pte = 1228 gen8_pte_encode(vm->scratch_page.daddr, 1229 I915_CACHE_LLC, 1230 vm->has_read_only); 1231 1232 vm->scratch_pt = alloc_pt(vm); 1233 if (IS_ERR(vm->scratch_pt)) { 1234 ret = PTR_ERR(vm->scratch_pt); 1235 goto free_scratch_page; 1236 } 1237 1238 vm->scratch_pd = alloc_pd(vm); 1239 if (IS_ERR(vm->scratch_pd)) { 1240 ret = PTR_ERR(vm->scratch_pd); 1241 goto free_pt; 1242 } 1243 1244 if (i915_vm_is_4lvl(vm)) { 1245 vm->scratch_pdp = alloc_pdp(vm); 1246 if (IS_ERR(vm->scratch_pdp)) { 1247 ret = PTR_ERR(vm->scratch_pdp); 1248 goto free_pd; 1249 } 1250 } 1251 1252 gen8_initialize_pt(vm, vm->scratch_pt); 1253 gen8_initialize_pd(vm, vm->scratch_pd); 1254 if (i915_vm_is_4lvl(vm)) 1255 gen8_initialize_pdp(vm, vm->scratch_pdp); 1256 1257 return 0; 1258 1259 free_pd: 1260 free_pd(vm, vm->scratch_pd); 1261 free_pt: 1262 free_pt(vm, vm->scratch_pt); 1263 free_scratch_page: 1264 cleanup_scratch_page(vm); 1265 1266 return ret; 1267 } 1268 1269 static int gen8_ppgtt_notify_vgt(struct i915_hw_ppgtt *ppgtt, bool create) 1270 { 1271 struct i915_address_space *vm = &ppgtt->vm; 1272 struct drm_i915_private *dev_priv = vm->i915; 1273 enum vgt_g2v_type msg; 1274 int i; 1275 1276 if (i915_vm_is_4lvl(vm)) { 1277 const u64 daddr = px_dma(&ppgtt->pml4); 1278 1279 I915_WRITE(vgtif_reg(pdp[0].lo), lower_32_bits(daddr)); 1280 I915_WRITE(vgtif_reg(pdp[0].hi), upper_32_bits(daddr)); 1281 1282 msg = (create ? VGT_G2V_PPGTT_L4_PAGE_TABLE_CREATE : 1283 VGT_G2V_PPGTT_L4_PAGE_TABLE_DESTROY); 1284 } else { 1285 for (i = 0; i < GEN8_3LVL_PDPES; i++) { 1286 const u64 daddr = i915_page_dir_dma_addr(ppgtt, i); 1287 1288 I915_WRITE(vgtif_reg(pdp[i].lo), lower_32_bits(daddr)); 1289 I915_WRITE(vgtif_reg(pdp[i].hi), upper_32_bits(daddr)); 1290 } 1291 1292 msg = (create ? VGT_G2V_PPGTT_L3_PAGE_TABLE_CREATE : 1293 VGT_G2V_PPGTT_L3_PAGE_TABLE_DESTROY); 1294 } 1295 1296 I915_WRITE(vgtif_reg(g2v_notify), msg); 1297 1298 return 0; 1299 } 1300 1301 static void gen8_free_scratch(struct i915_address_space *vm) 1302 { 1303 if (!vm->scratch_page.daddr) 1304 return; 1305 1306 if (i915_vm_is_4lvl(vm)) 1307 free_pdp(vm, vm->scratch_pdp); 1308 free_pd(vm, vm->scratch_pd); 1309 free_pt(vm, vm->scratch_pt); 1310 cleanup_scratch_page(vm); 1311 } 1312 1313 static void gen8_ppgtt_cleanup_3lvl(struct i915_address_space *vm, 1314 struct i915_page_directory_pointer *pdp) 1315 { 1316 const unsigned int pdpes = i915_pdpes_per_pdp(vm); 1317 int i; 1318 1319 for (i = 0; i < pdpes; i++) { 1320 if (pdp->page_directory[i] == vm->scratch_pd) 1321 continue; 1322 1323 gen8_free_page_tables(vm, pdp->page_directory[i]); 1324 free_pd(vm, pdp->page_directory[i]); 1325 } 1326 1327 free_pdp(vm, pdp); 1328 } 1329 1330 static void gen8_ppgtt_cleanup_4lvl(struct i915_hw_ppgtt *ppgtt) 1331 { 1332 int i; 1333 1334 for (i = 0; i < GEN8_PML4ES_PER_PML4; i++) { 1335 if (ppgtt->pml4.pdps[i] == ppgtt->vm.scratch_pdp) 1336 continue; 1337 1338 gen8_ppgtt_cleanup_3lvl(&ppgtt->vm, ppgtt->pml4.pdps[i]); 1339 } 1340 1341 cleanup_px(&ppgtt->vm, &ppgtt->pml4); 1342 } 1343 1344 static void gen8_ppgtt_cleanup(struct i915_address_space *vm) 1345 { 1346 struct drm_i915_private *dev_priv = vm->i915; 1347 struct i915_hw_ppgtt *ppgtt = i915_vm_to_ppgtt(vm); 1348 1349 if (intel_vgpu_active(dev_priv)) 1350 gen8_ppgtt_notify_vgt(ppgtt, false); 1351 1352 if (i915_vm_is_4lvl(vm)) 1353 gen8_ppgtt_cleanup_4lvl(ppgtt); 1354 else 1355 gen8_ppgtt_cleanup_3lvl(&ppgtt->vm, &ppgtt->pdp); 1356 1357 gen8_free_scratch(vm); 1358 } 1359 1360 static int gen8_ppgtt_alloc_pd(struct i915_address_space *vm, 1361 struct i915_page_directory *pd, 1362 u64 start, u64 length) 1363 { 1364 struct i915_page_table *pt; 1365 u64 from = start; 1366 unsigned int pde; 1367 1368 gen8_for_each_pde(pt, pd, start, length, pde) { 1369 int count = gen8_pte_count(start, length); 1370 1371 if (pt == vm->scratch_pt) { 1372 pd->used_pdes++; 1373 1374 pt = alloc_pt(vm); 1375 if (IS_ERR(pt)) { 1376 pd->used_pdes--; 1377 goto unwind; 1378 } 1379 1380 if (count < GEN8_PTES || intel_vgpu_active(vm->i915)) 1381 gen8_initialize_pt(vm, pt); 1382 1383 gen8_ppgtt_set_pde(vm, pd, pt, pde); 1384 GEM_BUG_ON(pd->used_pdes > I915_PDES); 1385 } 1386 1387 pt->used_ptes += count; 1388 } 1389 return 0; 1390 1391 unwind: 1392 gen8_ppgtt_clear_pd(vm, pd, from, start - from); 1393 return -ENOMEM; 1394 } 1395 1396 static int gen8_ppgtt_alloc_pdp(struct i915_address_space *vm, 1397 struct i915_page_directory_pointer *pdp, 1398 u64 start, u64 length) 1399 { 1400 struct i915_page_directory *pd; 1401 u64 from = start; 1402 unsigned int pdpe; 1403 int ret; 1404 1405 gen8_for_each_pdpe(pd, pdp, start, length, pdpe) { 1406 if (pd == vm->scratch_pd) { 1407 pdp->used_pdpes++; 1408 1409 pd = alloc_pd(vm); 1410 if (IS_ERR(pd)) { 1411 pdp->used_pdpes--; 1412 goto unwind; 1413 } 1414 1415 gen8_initialize_pd(vm, pd); 1416 gen8_ppgtt_set_pdpe(vm, pdp, pd, pdpe); 1417 GEM_BUG_ON(pdp->used_pdpes > i915_pdpes_per_pdp(vm)); 1418 } 1419 1420 ret = gen8_ppgtt_alloc_pd(vm, pd, start, length); 1421 if (unlikely(ret)) 1422 goto unwind_pd; 1423 } 1424 1425 return 0; 1426 1427 unwind_pd: 1428 if (!pd->used_pdes) { 1429 gen8_ppgtt_set_pdpe(vm, pdp, vm->scratch_pd, pdpe); 1430 GEM_BUG_ON(!pdp->used_pdpes); 1431 pdp->used_pdpes--; 1432 free_pd(vm, pd); 1433 } 1434 unwind: 1435 gen8_ppgtt_clear_pdp(vm, pdp, from, start - from); 1436 return -ENOMEM; 1437 } 1438 1439 static int gen8_ppgtt_alloc_3lvl(struct i915_address_space *vm, 1440 u64 start, u64 length) 1441 { 1442 return gen8_ppgtt_alloc_pdp(vm, 1443 &i915_vm_to_ppgtt(vm)->pdp, start, length); 1444 } 1445 1446 static int gen8_ppgtt_alloc_4lvl(struct i915_address_space *vm, 1447 u64 start, u64 length) 1448 { 1449 struct i915_hw_ppgtt *ppgtt = i915_vm_to_ppgtt(vm); 1450 struct i915_pml4 *pml4 = &ppgtt->pml4; 1451 struct i915_page_directory_pointer *pdp; 1452 u64 from = start; 1453 u32 pml4e; 1454 int ret; 1455 1456 gen8_for_each_pml4e(pdp, pml4, start, length, pml4e) { 1457 if (pml4->pdps[pml4e] == vm->scratch_pdp) { 1458 pdp = alloc_pdp(vm); 1459 if (IS_ERR(pdp)) 1460 goto unwind; 1461 1462 gen8_initialize_pdp(vm, pdp); 1463 gen8_ppgtt_set_pml4e(pml4, pdp, pml4e); 1464 } 1465 1466 ret = gen8_ppgtt_alloc_pdp(vm, pdp, start, length); 1467 if (unlikely(ret)) 1468 goto unwind_pdp; 1469 } 1470 1471 return 0; 1472 1473 unwind_pdp: 1474 if (!pdp->used_pdpes) { 1475 gen8_ppgtt_set_pml4e(pml4, vm->scratch_pdp, pml4e); 1476 free_pdp(vm, pdp); 1477 } 1478 unwind: 1479 gen8_ppgtt_clear_4lvl(vm, from, start - from); 1480 return -ENOMEM; 1481 } 1482 1483 static int gen8_preallocate_top_level_pdp(struct i915_hw_ppgtt *ppgtt) 1484 { 1485 struct i915_address_space *vm = &ppgtt->vm; 1486 struct i915_page_directory_pointer *pdp = &ppgtt->pdp; 1487 struct i915_page_directory *pd; 1488 u64 start = 0, length = ppgtt->vm.total; 1489 u64 from = start; 1490 unsigned int pdpe; 1491 1492 gen8_for_each_pdpe(pd, pdp, start, length, pdpe) { 1493 pd = alloc_pd(vm); 1494 if (IS_ERR(pd)) 1495 goto unwind; 1496 1497 gen8_initialize_pd(vm, pd); 1498 gen8_ppgtt_set_pdpe(vm, pdp, pd, pdpe); 1499 pdp->used_pdpes++; 1500 } 1501 1502 pdp->used_pdpes++; /* never remove */ 1503 return 0; 1504 1505 unwind: 1506 start -= from; 1507 gen8_for_each_pdpe(pd, pdp, from, start, pdpe) { 1508 gen8_ppgtt_set_pdpe(vm, pdp, vm->scratch_pd, pdpe); 1509 free_pd(vm, pd); 1510 } 1511 pdp->used_pdpes = 0; 1512 return -ENOMEM; 1513 } 1514 1515 static void ppgtt_init(struct drm_i915_private *i915, 1516 struct i915_hw_ppgtt *ppgtt) 1517 { 1518 kref_init(&ppgtt->ref); 1519 1520 ppgtt->vm.i915 = i915; 1521 ppgtt->vm.dma = &i915->drm.pdev->dev; 1522 ppgtt->vm.total = BIT_ULL(INTEL_INFO(i915)->ppgtt_size); 1523 1524 i915_address_space_init(&ppgtt->vm, VM_CLASS_PPGTT); 1525 1526 ppgtt->vm.vma_ops.bind_vma = ppgtt_bind_vma; 1527 ppgtt->vm.vma_ops.unbind_vma = ppgtt_unbind_vma; 1528 ppgtt->vm.vma_ops.set_pages = ppgtt_set_pages; 1529 ppgtt->vm.vma_ops.clear_pages = clear_pages; 1530 } 1531 1532 /* 1533 * GEN8 legacy ppgtt programming is accomplished through a max 4 PDP registers 1534 * with a net effect resembling a 2-level page table in normal x86 terms. Each 1535 * PDP represents 1GB of memory 4 * 512 * 512 * 4096 = 4GB legacy 32b address 1536 * space. 1537 * 1538 */ 1539 static struct i915_hw_ppgtt *gen8_ppgtt_create(struct drm_i915_private *i915) 1540 { 1541 struct i915_hw_ppgtt *ppgtt; 1542 int err; 1543 1544 ppgtt = kzalloc(sizeof(*ppgtt), GFP_KERNEL); 1545 if (!ppgtt) 1546 return ERR_PTR(-ENOMEM); 1547 1548 ppgtt_init(i915, ppgtt); 1549 1550 /* 1551 * From bdw, there is hw support for read-only pages in the PPGTT. 1552 * 1553 * Gen11 has HSDES#:1807136187 unresolved. Disable ro support 1554 * for now. 1555 */ 1556 ppgtt->vm.has_read_only = INTEL_GEN(i915) != 11; 1557 1558 /* There are only few exceptions for gen >=6. chv and bxt. 1559 * And we are not sure about the latter so play safe for now. 1560 */ 1561 if (IS_CHERRYVIEW(i915) || IS_BROXTON(i915)) 1562 ppgtt->vm.pt_kmap_wc = true; 1563 1564 err = gen8_init_scratch(&ppgtt->vm); 1565 if (err) 1566 goto err_free; 1567 1568 if (i915_vm_is_4lvl(&ppgtt->vm)) { 1569 err = setup_px(&ppgtt->vm, &ppgtt->pml4); 1570 if (err) 1571 goto err_scratch; 1572 1573 gen8_initialize_pml4(&ppgtt->vm, &ppgtt->pml4); 1574 1575 ppgtt->vm.allocate_va_range = gen8_ppgtt_alloc_4lvl; 1576 ppgtt->vm.insert_entries = gen8_ppgtt_insert_4lvl; 1577 ppgtt->vm.clear_range = gen8_ppgtt_clear_4lvl; 1578 } else { 1579 err = __pdp_init(&ppgtt->vm, &ppgtt->pdp); 1580 if (err) 1581 goto err_scratch; 1582 1583 if (intel_vgpu_active(i915)) { 1584 err = gen8_preallocate_top_level_pdp(ppgtt); 1585 if (err) { 1586 __pdp_fini(&ppgtt->pdp); 1587 goto err_scratch; 1588 } 1589 } 1590 1591 ppgtt->vm.allocate_va_range = gen8_ppgtt_alloc_3lvl; 1592 ppgtt->vm.insert_entries = gen8_ppgtt_insert_3lvl; 1593 ppgtt->vm.clear_range = gen8_ppgtt_clear_3lvl; 1594 } 1595 1596 if (intel_vgpu_active(i915)) 1597 gen8_ppgtt_notify_vgt(ppgtt, true); 1598 1599 ppgtt->vm.cleanup = gen8_ppgtt_cleanup; 1600 1601 return ppgtt; 1602 1603 err_scratch: 1604 gen8_free_scratch(&ppgtt->vm); 1605 err_free: 1606 kfree(ppgtt); 1607 return ERR_PTR(err); 1608 } 1609 1610 /* Write pde (index) from the page directory @pd to the page table @pt */ 1611 static inline void gen6_write_pde(const struct gen6_hw_ppgtt *ppgtt, 1612 const unsigned int pde, 1613 const struct i915_page_table *pt) 1614 { 1615 /* Caller needs to make sure the write completes if necessary */ 1616 iowrite32(GEN6_PDE_ADDR_ENCODE(px_dma(pt)) | GEN6_PDE_VALID, 1617 ppgtt->pd_addr + pde); 1618 } 1619 1620 static void gen7_ppgtt_enable(struct drm_i915_private *dev_priv) 1621 { 1622 struct intel_engine_cs *engine; 1623 u32 ecochk, ecobits; 1624 enum intel_engine_id id; 1625 1626 ecobits = I915_READ(GAC_ECO_BITS); 1627 I915_WRITE(GAC_ECO_BITS, ecobits | ECOBITS_PPGTT_CACHE64B); 1628 1629 ecochk = I915_READ(GAM_ECOCHK); 1630 if (IS_HASWELL(dev_priv)) { 1631 ecochk |= ECOCHK_PPGTT_WB_HSW; 1632 } else { 1633 ecochk |= ECOCHK_PPGTT_LLC_IVB; 1634 ecochk &= ~ECOCHK_PPGTT_GFDT_IVB; 1635 } 1636 I915_WRITE(GAM_ECOCHK, ecochk); 1637 1638 for_each_engine(engine, dev_priv, id) { 1639 /* GFX_MODE is per-ring on gen7+ */ 1640 I915_WRITE(RING_MODE_GEN7(engine), 1641 _MASKED_BIT_ENABLE(GFX_PPGTT_ENABLE)); 1642 } 1643 } 1644 1645 static void gen6_ppgtt_enable(struct drm_i915_private *dev_priv) 1646 { 1647 u32 ecochk, gab_ctl, ecobits; 1648 1649 ecobits = I915_READ(GAC_ECO_BITS); 1650 I915_WRITE(GAC_ECO_BITS, ecobits | ECOBITS_SNB_BIT | 1651 ECOBITS_PPGTT_CACHE64B); 1652 1653 gab_ctl = I915_READ(GAB_CTL); 1654 I915_WRITE(GAB_CTL, gab_ctl | GAB_CTL_CONT_AFTER_PAGEFAULT); 1655 1656 ecochk = I915_READ(GAM_ECOCHK); 1657 I915_WRITE(GAM_ECOCHK, ecochk | ECOCHK_SNB_BIT | ECOCHK_PPGTT_CACHE64B); 1658 1659 if (HAS_PPGTT(dev_priv)) /* may be disabled for VT-d */ 1660 I915_WRITE(GFX_MODE, _MASKED_BIT_ENABLE(GFX_PPGTT_ENABLE)); 1661 } 1662 1663 /* PPGTT support for Sandybdrige/Gen6 and later */ 1664 static void gen6_ppgtt_clear_range(struct i915_address_space *vm, 1665 u64 start, u64 length) 1666 { 1667 struct gen6_hw_ppgtt *ppgtt = to_gen6_ppgtt(i915_vm_to_ppgtt(vm)); 1668 unsigned int first_entry = start / I915_GTT_PAGE_SIZE; 1669 unsigned int pde = first_entry / GEN6_PTES; 1670 unsigned int pte = first_entry % GEN6_PTES; 1671 unsigned int num_entries = length / I915_GTT_PAGE_SIZE; 1672 const gen6_pte_t scratch_pte = vm->scratch_pte; 1673 1674 while (num_entries) { 1675 struct i915_page_table *pt = ppgtt->base.pd.page_table[pde++]; 1676 const unsigned int count = min(num_entries, GEN6_PTES - pte); 1677 gen6_pte_t *vaddr; 1678 1679 GEM_BUG_ON(pt == vm->scratch_pt); 1680 1681 num_entries -= count; 1682 1683 GEM_BUG_ON(count > pt->used_ptes); 1684 pt->used_ptes -= count; 1685 if (!pt->used_ptes) 1686 ppgtt->scan_for_unused_pt = true; 1687 1688 /* 1689 * Note that the hw doesn't support removing PDE on the fly 1690 * (they are cached inside the context with no means to 1691 * invalidate the cache), so we can only reset the PTE 1692 * entries back to scratch. 1693 */ 1694 1695 vaddr = kmap_atomic_px(pt); 1696 memset32(vaddr + pte, scratch_pte, count); 1697 kunmap_atomic(vaddr); 1698 1699 pte = 0; 1700 } 1701 } 1702 1703 static void gen6_ppgtt_insert_entries(struct i915_address_space *vm, 1704 struct i915_vma *vma, 1705 enum i915_cache_level cache_level, 1706 u32 flags) 1707 { 1708 struct i915_hw_ppgtt *ppgtt = i915_vm_to_ppgtt(vm); 1709 unsigned first_entry = vma->node.start / I915_GTT_PAGE_SIZE; 1710 unsigned act_pt = first_entry / GEN6_PTES; 1711 unsigned act_pte = first_entry % GEN6_PTES; 1712 const u32 pte_encode = vm->pte_encode(0, cache_level, flags); 1713 struct sgt_dma iter = sgt_dma(vma); 1714 gen6_pte_t *vaddr; 1715 1716 GEM_BUG_ON(ppgtt->pd.page_table[act_pt] == vm->scratch_pt); 1717 1718 vaddr = kmap_atomic_px(ppgtt->pd.page_table[act_pt]); 1719 do { 1720 vaddr[act_pte] = pte_encode | GEN6_PTE_ADDR_ENCODE(iter.dma); 1721 1722 iter.dma += I915_GTT_PAGE_SIZE; 1723 if (iter.dma == iter.max) { 1724 iter.sg = __sg_next(iter.sg); 1725 if (!iter.sg) 1726 break; 1727 1728 iter.dma = sg_dma_address(iter.sg); 1729 iter.max = iter.dma + iter.sg->length; 1730 } 1731 1732 if (++act_pte == GEN6_PTES) { 1733 kunmap_atomic(vaddr); 1734 vaddr = kmap_atomic_px(ppgtt->pd.page_table[++act_pt]); 1735 act_pte = 0; 1736 } 1737 } while (1); 1738 kunmap_atomic(vaddr); 1739 1740 vma->page_sizes.gtt = I915_GTT_PAGE_SIZE; 1741 } 1742 1743 static int gen6_alloc_va_range(struct i915_address_space *vm, 1744 u64 start, u64 length) 1745 { 1746 struct gen6_hw_ppgtt *ppgtt = to_gen6_ppgtt(i915_vm_to_ppgtt(vm)); 1747 struct i915_page_table *pt; 1748 u64 from = start; 1749 unsigned int pde; 1750 bool flush = false; 1751 1752 gen6_for_each_pde(pt, &ppgtt->base.pd, start, length, pde) { 1753 const unsigned int count = gen6_pte_count(start, length); 1754 1755 if (pt == vm->scratch_pt) { 1756 pt = alloc_pt(vm); 1757 if (IS_ERR(pt)) 1758 goto unwind_out; 1759 1760 gen6_initialize_pt(vm, pt); 1761 ppgtt->base.pd.page_table[pde] = pt; 1762 1763 if (i915_vma_is_bound(ppgtt->vma, 1764 I915_VMA_GLOBAL_BIND)) { 1765 gen6_write_pde(ppgtt, pde, pt); 1766 flush = true; 1767 } 1768 1769 GEM_BUG_ON(pt->used_ptes); 1770 } 1771 1772 pt->used_ptes += count; 1773 } 1774 1775 if (flush) { 1776 mark_tlbs_dirty(&ppgtt->base); 1777 gen6_ggtt_invalidate(ppgtt->base.vm.i915); 1778 } 1779 1780 return 0; 1781 1782 unwind_out: 1783 gen6_ppgtt_clear_range(vm, from, start - from); 1784 return -ENOMEM; 1785 } 1786 1787 static int gen6_ppgtt_init_scratch(struct gen6_hw_ppgtt *ppgtt) 1788 { 1789 struct i915_address_space * const vm = &ppgtt->base.vm; 1790 struct i915_page_table *unused; 1791 u32 pde; 1792 int ret; 1793 1794 ret = setup_scratch_page(vm, __GFP_HIGHMEM); 1795 if (ret) 1796 return ret; 1797 1798 vm->scratch_pte = vm->pte_encode(vm->scratch_page.daddr, 1799 I915_CACHE_NONE, 1800 PTE_READ_ONLY); 1801 1802 vm->scratch_pt = alloc_pt(vm); 1803 if (IS_ERR(vm->scratch_pt)) { 1804 cleanup_scratch_page(vm); 1805 return PTR_ERR(vm->scratch_pt); 1806 } 1807 1808 gen6_initialize_pt(vm, vm->scratch_pt); 1809 gen6_for_all_pdes(unused, &ppgtt->base.pd, pde) 1810 ppgtt->base.pd.page_table[pde] = vm->scratch_pt; 1811 1812 return 0; 1813 } 1814 1815 static void gen6_ppgtt_free_scratch(struct i915_address_space *vm) 1816 { 1817 free_pt(vm, vm->scratch_pt); 1818 cleanup_scratch_page(vm); 1819 } 1820 1821 static void gen6_ppgtt_free_pd(struct gen6_hw_ppgtt *ppgtt) 1822 { 1823 struct i915_page_table *pt; 1824 u32 pde; 1825 1826 gen6_for_all_pdes(pt, &ppgtt->base.pd, pde) 1827 if (pt != ppgtt->base.vm.scratch_pt) 1828 free_pt(&ppgtt->base.vm, pt); 1829 } 1830 1831 struct gen6_ppgtt_cleanup_work { 1832 struct work_struct base; 1833 struct i915_vma *vma; 1834 }; 1835 1836 static void gen6_ppgtt_cleanup_work(struct work_struct *wrk) 1837 { 1838 struct gen6_ppgtt_cleanup_work *work = 1839 container_of(wrk, typeof(*work), base); 1840 /* Side note, vma->vm is the GGTT not the ppgtt we just destroyed! */ 1841 struct drm_i915_private *i915 = work->vma->vm->i915; 1842 1843 mutex_lock(&i915->drm.struct_mutex); 1844 i915_vma_destroy(work->vma); 1845 mutex_unlock(&i915->drm.struct_mutex); 1846 1847 kfree(work); 1848 } 1849 1850 static int nop_set_pages(struct i915_vma *vma) 1851 { 1852 return -ENODEV; 1853 } 1854 1855 static void nop_clear_pages(struct i915_vma *vma) 1856 { 1857 } 1858 1859 static int nop_bind(struct i915_vma *vma, 1860 enum i915_cache_level cache_level, 1861 u32 unused) 1862 { 1863 return -ENODEV; 1864 } 1865 1866 static void nop_unbind(struct i915_vma *vma) 1867 { 1868 } 1869 1870 static const struct i915_vma_ops nop_vma_ops = { 1871 .set_pages = nop_set_pages, 1872 .clear_pages = nop_clear_pages, 1873 .bind_vma = nop_bind, 1874 .unbind_vma = nop_unbind, 1875 }; 1876 1877 static void gen6_ppgtt_cleanup(struct i915_address_space *vm) 1878 { 1879 struct gen6_hw_ppgtt *ppgtt = to_gen6_ppgtt(i915_vm_to_ppgtt(vm)); 1880 struct gen6_ppgtt_cleanup_work *work = ppgtt->work; 1881 1882 /* FIXME remove the struct_mutex to bring the locking under control */ 1883 INIT_WORK(&work->base, gen6_ppgtt_cleanup_work); 1884 work->vma = ppgtt->vma; 1885 work->vma->ops = &nop_vma_ops; 1886 schedule_work(&work->base); 1887 1888 gen6_ppgtt_free_pd(ppgtt); 1889 gen6_ppgtt_free_scratch(vm); 1890 } 1891 1892 static int pd_vma_set_pages(struct i915_vma *vma) 1893 { 1894 vma->pages = ERR_PTR(-ENODEV); 1895 return 0; 1896 } 1897 1898 static void pd_vma_clear_pages(struct i915_vma *vma) 1899 { 1900 GEM_BUG_ON(!vma->pages); 1901 1902 vma->pages = NULL; 1903 } 1904 1905 static int pd_vma_bind(struct i915_vma *vma, 1906 enum i915_cache_level cache_level, 1907 u32 unused) 1908 { 1909 struct i915_ggtt *ggtt = i915_vm_to_ggtt(vma->vm); 1910 struct gen6_hw_ppgtt *ppgtt = vma->private; 1911 u32 ggtt_offset = i915_ggtt_offset(vma) / I915_GTT_PAGE_SIZE; 1912 struct i915_page_table *pt; 1913 unsigned int pde; 1914 1915 ppgtt->base.pd.base.ggtt_offset = ggtt_offset * sizeof(gen6_pte_t); 1916 ppgtt->pd_addr = (gen6_pte_t __iomem *)ggtt->gsm + ggtt_offset; 1917 1918 gen6_for_all_pdes(pt, &ppgtt->base.pd, pde) 1919 gen6_write_pde(ppgtt, pde, pt); 1920 1921 mark_tlbs_dirty(&ppgtt->base); 1922 gen6_ggtt_invalidate(ppgtt->base.vm.i915); 1923 1924 return 0; 1925 } 1926 1927 static void pd_vma_unbind(struct i915_vma *vma) 1928 { 1929 struct gen6_hw_ppgtt *ppgtt = vma->private; 1930 struct i915_page_table * const scratch_pt = ppgtt->base.vm.scratch_pt; 1931 struct i915_page_table *pt; 1932 unsigned int pde; 1933 1934 if (!ppgtt->scan_for_unused_pt) 1935 return; 1936 1937 /* Free all no longer used page tables */ 1938 gen6_for_all_pdes(pt, &ppgtt->base.pd, pde) { 1939 if (pt->used_ptes || pt == scratch_pt) 1940 continue; 1941 1942 free_pt(&ppgtt->base.vm, pt); 1943 ppgtt->base.pd.page_table[pde] = scratch_pt; 1944 } 1945 1946 ppgtt->scan_for_unused_pt = false; 1947 } 1948 1949 static const struct i915_vma_ops pd_vma_ops = { 1950 .set_pages = pd_vma_set_pages, 1951 .clear_pages = pd_vma_clear_pages, 1952 .bind_vma = pd_vma_bind, 1953 .unbind_vma = pd_vma_unbind, 1954 }; 1955 1956 static struct i915_vma *pd_vma_create(struct gen6_hw_ppgtt *ppgtt, int size) 1957 { 1958 struct drm_i915_private *i915 = ppgtt->base.vm.i915; 1959 struct i915_ggtt *ggtt = &i915->ggtt; 1960 struct i915_vma *vma; 1961 1962 GEM_BUG_ON(!IS_ALIGNED(size, I915_GTT_PAGE_SIZE)); 1963 GEM_BUG_ON(size > ggtt->vm.total); 1964 1965 vma = i915_vma_alloc(); 1966 if (!vma) 1967 return ERR_PTR(-ENOMEM); 1968 1969 i915_active_init(i915, &vma->active, NULL); 1970 INIT_ACTIVE_REQUEST(&vma->last_fence); 1971 1972 vma->vm = &ggtt->vm; 1973 vma->ops = &pd_vma_ops; 1974 vma->private = ppgtt; 1975 1976 vma->size = size; 1977 vma->fence_size = size; 1978 vma->flags = I915_VMA_GGTT; 1979 vma->ggtt_view.type = I915_GGTT_VIEW_ROTATED; /* prevent fencing */ 1980 1981 INIT_LIST_HEAD(&vma->obj_link); 1982 1983 mutex_lock(&vma->vm->mutex); 1984 list_add(&vma->vm_link, &vma->vm->unbound_list); 1985 mutex_unlock(&vma->vm->mutex); 1986 1987 return vma; 1988 } 1989 1990 int gen6_ppgtt_pin(struct i915_hw_ppgtt *base) 1991 { 1992 struct gen6_hw_ppgtt *ppgtt = to_gen6_ppgtt(base); 1993 int err; 1994 1995 GEM_BUG_ON(ppgtt->base.vm.closed); 1996 1997 /* 1998 * Workaround the limited maximum vma->pin_count and the aliasing_ppgtt 1999 * which will be pinned into every active context. 2000 * (When vma->pin_count becomes atomic, I expect we will naturally 2001 * need a larger, unpacked, type and kill this redundancy.) 2002 */ 2003 if (ppgtt->pin_count++) 2004 return 0; 2005 2006 /* 2007 * PPGTT PDEs reside in the GGTT and consists of 512 entries. The 2008 * allocator works in address space sizes, so it's multiplied by page 2009 * size. We allocate at the top of the GTT to avoid fragmentation. 2010 */ 2011 err = i915_vma_pin(ppgtt->vma, 2012 0, GEN6_PD_ALIGN, 2013 PIN_GLOBAL | PIN_HIGH); 2014 if (err) 2015 goto unpin; 2016 2017 return 0; 2018 2019 unpin: 2020 ppgtt->pin_count = 0; 2021 return err; 2022 } 2023 2024 void gen6_ppgtt_unpin(struct i915_hw_ppgtt *base) 2025 { 2026 struct gen6_hw_ppgtt *ppgtt = to_gen6_ppgtt(base); 2027 2028 GEM_BUG_ON(!ppgtt->pin_count); 2029 if (--ppgtt->pin_count) 2030 return; 2031 2032 i915_vma_unpin(ppgtt->vma); 2033 } 2034 2035 void gen6_ppgtt_unpin_all(struct i915_hw_ppgtt *base) 2036 { 2037 struct gen6_hw_ppgtt *ppgtt = to_gen6_ppgtt(base); 2038 2039 if (!ppgtt->pin_count) 2040 return; 2041 2042 ppgtt->pin_count = 0; 2043 i915_vma_unpin(ppgtt->vma); 2044 } 2045 2046 static struct i915_hw_ppgtt *gen6_ppgtt_create(struct drm_i915_private *i915) 2047 { 2048 struct i915_ggtt * const ggtt = &i915->ggtt; 2049 struct gen6_hw_ppgtt *ppgtt; 2050 int err; 2051 2052 ppgtt = kzalloc(sizeof(*ppgtt), GFP_KERNEL); 2053 if (!ppgtt) 2054 return ERR_PTR(-ENOMEM); 2055 2056 ppgtt_init(i915, &ppgtt->base); 2057 2058 ppgtt->base.vm.allocate_va_range = gen6_alloc_va_range; 2059 ppgtt->base.vm.clear_range = gen6_ppgtt_clear_range; 2060 ppgtt->base.vm.insert_entries = gen6_ppgtt_insert_entries; 2061 ppgtt->base.vm.cleanup = gen6_ppgtt_cleanup; 2062 2063 ppgtt->base.vm.pte_encode = ggtt->vm.pte_encode; 2064 2065 ppgtt->work = kmalloc(sizeof(*ppgtt->work), GFP_KERNEL); 2066 if (!ppgtt->work) 2067 goto err_free; 2068 2069 err = gen6_ppgtt_init_scratch(ppgtt); 2070 if (err) 2071 goto err_work; 2072 2073 ppgtt->vma = pd_vma_create(ppgtt, GEN6_PD_SIZE); 2074 if (IS_ERR(ppgtt->vma)) { 2075 err = PTR_ERR(ppgtt->vma); 2076 goto err_scratch; 2077 } 2078 2079 return &ppgtt->base; 2080 2081 err_scratch: 2082 gen6_ppgtt_free_scratch(&ppgtt->base.vm); 2083 err_work: 2084 kfree(ppgtt->work); 2085 err_free: 2086 kfree(ppgtt); 2087 return ERR_PTR(err); 2088 } 2089 2090 static void gtt_write_workarounds(struct drm_i915_private *dev_priv) 2091 { 2092 /* This function is for gtt related workarounds. This function is 2093 * called on driver load and after a GPU reset, so you can place 2094 * workarounds here even if they get overwritten by GPU reset. 2095 */ 2096 /* WaIncreaseDefaultTLBEntries:chv,bdw,skl,bxt,kbl,glk,cfl,cnl,icl */ 2097 if (IS_BROADWELL(dev_priv)) 2098 I915_WRITE(GEN8_L3_LRA_1_GPGPU, GEN8_L3_LRA_1_GPGPU_DEFAULT_VALUE_BDW); 2099 else if (IS_CHERRYVIEW(dev_priv)) 2100 I915_WRITE(GEN8_L3_LRA_1_GPGPU, GEN8_L3_LRA_1_GPGPU_DEFAULT_VALUE_CHV); 2101 else if (IS_GEN9_LP(dev_priv)) 2102 I915_WRITE(GEN8_L3_LRA_1_GPGPU, GEN9_L3_LRA_1_GPGPU_DEFAULT_VALUE_BXT); 2103 else if (INTEL_GEN(dev_priv) >= 9) 2104 I915_WRITE(GEN8_L3_LRA_1_GPGPU, GEN9_L3_LRA_1_GPGPU_DEFAULT_VALUE_SKL); 2105 2106 /* 2107 * To support 64K PTEs we need to first enable the use of the 2108 * Intermediate-Page-Size(IPS) bit of the PDE field via some magical 2109 * mmio, otherwise the page-walker will simply ignore the IPS bit. This 2110 * shouldn't be needed after GEN10. 2111 * 2112 * 64K pages were first introduced from BDW+, although technically they 2113 * only *work* from gen9+. For pre-BDW we instead have the option for 2114 * 32K pages, but we don't currently have any support for it in our 2115 * driver. 2116 */ 2117 if (HAS_PAGE_SIZES(dev_priv, I915_GTT_PAGE_SIZE_64K) && 2118 INTEL_GEN(dev_priv) <= 10) 2119 I915_WRITE(GEN8_GAMW_ECO_DEV_RW_IA, 2120 I915_READ(GEN8_GAMW_ECO_DEV_RW_IA) | 2121 GAMW_ECO_ENABLE_64K_IPS_FIELD); 2122 } 2123 2124 int i915_ppgtt_init_hw(struct drm_i915_private *dev_priv) 2125 { 2126 gtt_write_workarounds(dev_priv); 2127 2128 if (IS_GEN(dev_priv, 6)) 2129 gen6_ppgtt_enable(dev_priv); 2130 else if (IS_GEN(dev_priv, 7)) 2131 gen7_ppgtt_enable(dev_priv); 2132 2133 return 0; 2134 } 2135 2136 static struct i915_hw_ppgtt * 2137 __hw_ppgtt_create(struct drm_i915_private *i915) 2138 { 2139 if (INTEL_GEN(i915) < 8) 2140 return gen6_ppgtt_create(i915); 2141 else 2142 return gen8_ppgtt_create(i915); 2143 } 2144 2145 struct i915_hw_ppgtt * 2146 i915_ppgtt_create(struct drm_i915_private *i915) 2147 { 2148 struct i915_hw_ppgtt *ppgtt; 2149 2150 ppgtt = __hw_ppgtt_create(i915); 2151 if (IS_ERR(ppgtt)) 2152 return ppgtt; 2153 2154 trace_i915_ppgtt_create(&ppgtt->vm); 2155 2156 return ppgtt; 2157 } 2158 2159 static void ppgtt_destroy_vma(struct i915_address_space *vm) 2160 { 2161 struct list_head *phases[] = { 2162 &vm->bound_list, 2163 &vm->unbound_list, 2164 NULL, 2165 }, **phase; 2166 2167 vm->closed = true; 2168 for (phase = phases; *phase; phase++) { 2169 struct i915_vma *vma, *vn; 2170 2171 list_for_each_entry_safe(vma, vn, *phase, vm_link) 2172 i915_vma_destroy(vma); 2173 } 2174 } 2175 2176 void i915_ppgtt_release(struct kref *kref) 2177 { 2178 struct i915_hw_ppgtt *ppgtt = 2179 container_of(kref, struct i915_hw_ppgtt, ref); 2180 2181 trace_i915_ppgtt_release(&ppgtt->vm); 2182 2183 ppgtt_destroy_vma(&ppgtt->vm); 2184 2185 GEM_BUG_ON(!list_empty(&ppgtt->vm.bound_list)); 2186 GEM_BUG_ON(!list_empty(&ppgtt->vm.unbound_list)); 2187 2188 ppgtt->vm.cleanup(&ppgtt->vm); 2189 i915_address_space_fini(&ppgtt->vm); 2190 kfree(ppgtt); 2191 } 2192 2193 /* Certain Gen5 chipsets require require idling the GPU before 2194 * unmapping anything from the GTT when VT-d is enabled. 2195 */ 2196 static bool needs_idle_maps(struct drm_i915_private *dev_priv) 2197 { 2198 /* Query intel_iommu to see if we need the workaround. Presumably that 2199 * was loaded first. 2200 */ 2201 return IS_GEN(dev_priv, 5) && IS_MOBILE(dev_priv) && intel_vtd_active(); 2202 } 2203 2204 static void gen6_check_faults(struct drm_i915_private *dev_priv) 2205 { 2206 struct intel_engine_cs *engine; 2207 enum intel_engine_id id; 2208 u32 fault; 2209 2210 for_each_engine(engine, dev_priv, id) { 2211 fault = I915_READ(RING_FAULT_REG(engine)); 2212 if (fault & RING_FAULT_VALID) { 2213 DRM_DEBUG_DRIVER("Unexpected fault\n" 2214 "\tAddr: 0x%08lx\n" 2215 "\tAddress space: %s\n" 2216 "\tSource ID: %d\n" 2217 "\tType: %d\n", 2218 fault & PAGE_MASK, 2219 fault & RING_FAULT_GTTSEL_MASK ? "GGTT" : "PPGTT", 2220 RING_FAULT_SRCID(fault), 2221 RING_FAULT_FAULT_TYPE(fault)); 2222 } 2223 } 2224 } 2225 2226 static void gen8_check_faults(struct drm_i915_private *dev_priv) 2227 { 2228 u32 fault = I915_READ(GEN8_RING_FAULT_REG); 2229 2230 if (fault & RING_FAULT_VALID) { 2231 u32 fault_data0, fault_data1; 2232 u64 fault_addr; 2233 2234 fault_data0 = I915_READ(GEN8_FAULT_TLB_DATA0); 2235 fault_data1 = I915_READ(GEN8_FAULT_TLB_DATA1); 2236 fault_addr = ((u64)(fault_data1 & FAULT_VA_HIGH_BITS) << 44) | 2237 ((u64)fault_data0 << 12); 2238 2239 DRM_DEBUG_DRIVER("Unexpected fault\n" 2240 "\tAddr: 0x%08x_%08x\n" 2241 "\tAddress space: %s\n" 2242 "\tEngine ID: %d\n" 2243 "\tSource ID: %d\n" 2244 "\tType: %d\n", 2245 upper_32_bits(fault_addr), 2246 lower_32_bits(fault_addr), 2247 fault_data1 & FAULT_GTT_SEL ? "GGTT" : "PPGTT", 2248 GEN8_RING_FAULT_ENGINE_ID(fault), 2249 RING_FAULT_SRCID(fault), 2250 RING_FAULT_FAULT_TYPE(fault)); 2251 } 2252 } 2253 2254 void i915_check_and_clear_faults(struct drm_i915_private *dev_priv) 2255 { 2256 /* From GEN8 onwards we only have one 'All Engine Fault Register' */ 2257 if (INTEL_GEN(dev_priv) >= 8) 2258 gen8_check_faults(dev_priv); 2259 else if (INTEL_GEN(dev_priv) >= 6) 2260 gen6_check_faults(dev_priv); 2261 else 2262 return; 2263 2264 i915_clear_error_registers(dev_priv); 2265 } 2266 2267 void i915_gem_suspend_gtt_mappings(struct drm_i915_private *dev_priv) 2268 { 2269 struct i915_ggtt *ggtt = &dev_priv->ggtt; 2270 2271 /* Don't bother messing with faults pre GEN6 as we have little 2272 * documentation supporting that it's a good idea. 2273 */ 2274 if (INTEL_GEN(dev_priv) < 6) 2275 return; 2276 2277 i915_check_and_clear_faults(dev_priv); 2278 2279 ggtt->vm.clear_range(&ggtt->vm, 0, ggtt->vm.total); 2280 2281 i915_ggtt_invalidate(dev_priv); 2282 } 2283 2284 int i915_gem_gtt_prepare_pages(struct drm_i915_gem_object *obj, 2285 struct sg_table *pages) 2286 { 2287 do { 2288 if (dma_map_sg_attrs(&obj->base.dev->pdev->dev, 2289 pages->sgl, pages->nents, 2290 PCI_DMA_BIDIRECTIONAL, 2291 DMA_ATTR_NO_WARN)) 2292 return 0; 2293 2294 /* 2295 * If the DMA remap fails, one cause can be that we have 2296 * too many objects pinned in a small remapping table, 2297 * such as swiotlb. Incrementally purge all other objects and 2298 * try again - if there are no more pages to remove from 2299 * the DMA remapper, i915_gem_shrink will return 0. 2300 */ 2301 GEM_BUG_ON(obj->mm.pages == pages); 2302 } while (i915_gem_shrink(to_i915(obj->base.dev), 2303 obj->base.size >> PAGE_SHIFT, NULL, 2304 I915_SHRINK_BOUND | 2305 I915_SHRINK_UNBOUND)); 2306 2307 return -ENOSPC; 2308 } 2309 2310 static void gen8_set_pte(void __iomem *addr, gen8_pte_t pte) 2311 { 2312 writeq(pte, addr); 2313 } 2314 2315 static void gen8_ggtt_insert_page(struct i915_address_space *vm, 2316 dma_addr_t addr, 2317 u64 offset, 2318 enum i915_cache_level level, 2319 u32 unused) 2320 { 2321 struct i915_ggtt *ggtt = i915_vm_to_ggtt(vm); 2322 gen8_pte_t __iomem *pte = 2323 (gen8_pte_t __iomem *)ggtt->gsm + offset / I915_GTT_PAGE_SIZE; 2324 2325 gen8_set_pte(pte, gen8_pte_encode(addr, level, 0)); 2326 2327 ggtt->invalidate(vm->i915); 2328 } 2329 2330 static void gen8_ggtt_insert_entries(struct i915_address_space *vm, 2331 struct i915_vma *vma, 2332 enum i915_cache_level level, 2333 u32 flags) 2334 { 2335 struct i915_ggtt *ggtt = i915_vm_to_ggtt(vm); 2336 struct sgt_iter sgt_iter; 2337 gen8_pte_t __iomem *gtt_entries; 2338 const gen8_pte_t pte_encode = gen8_pte_encode(0, level, 0); 2339 dma_addr_t addr; 2340 2341 /* 2342 * Note that we ignore PTE_READ_ONLY here. The caller must be careful 2343 * not to allow the user to override access to a read only page. 2344 */ 2345 2346 gtt_entries = (gen8_pte_t __iomem *)ggtt->gsm; 2347 gtt_entries += vma->node.start / I915_GTT_PAGE_SIZE; 2348 for_each_sgt_dma(addr, sgt_iter, vma->pages) 2349 gen8_set_pte(gtt_entries++, pte_encode | addr); 2350 2351 /* 2352 * We want to flush the TLBs only after we're certain all the PTE 2353 * updates have finished. 2354 */ 2355 ggtt->invalidate(vm->i915); 2356 } 2357 2358 static void gen6_ggtt_insert_page(struct i915_address_space *vm, 2359 dma_addr_t addr, 2360 u64 offset, 2361 enum i915_cache_level level, 2362 u32 flags) 2363 { 2364 struct i915_ggtt *ggtt = i915_vm_to_ggtt(vm); 2365 gen6_pte_t __iomem *pte = 2366 (gen6_pte_t __iomem *)ggtt->gsm + offset / I915_GTT_PAGE_SIZE; 2367 2368 iowrite32(vm->pte_encode(addr, level, flags), pte); 2369 2370 ggtt->invalidate(vm->i915); 2371 } 2372 2373 /* 2374 * Binds an object into the global gtt with the specified cache level. The object 2375 * will be accessible to the GPU via commands whose operands reference offsets 2376 * within the global GTT as well as accessible by the GPU through the GMADR 2377 * mapped BAR (dev_priv->mm.gtt->gtt). 2378 */ 2379 static void gen6_ggtt_insert_entries(struct i915_address_space *vm, 2380 struct i915_vma *vma, 2381 enum i915_cache_level level, 2382 u32 flags) 2383 { 2384 struct i915_ggtt *ggtt = i915_vm_to_ggtt(vm); 2385 gen6_pte_t __iomem *entries = (gen6_pte_t __iomem *)ggtt->gsm; 2386 unsigned int i = vma->node.start / I915_GTT_PAGE_SIZE; 2387 struct sgt_iter iter; 2388 dma_addr_t addr; 2389 for_each_sgt_dma(addr, iter, vma->pages) 2390 iowrite32(vm->pte_encode(addr, level, flags), &entries[i++]); 2391 2392 /* 2393 * We want to flush the TLBs only after we're certain all the PTE 2394 * updates have finished. 2395 */ 2396 ggtt->invalidate(vm->i915); 2397 } 2398 2399 static void nop_clear_range(struct i915_address_space *vm, 2400 u64 start, u64 length) 2401 { 2402 } 2403 2404 static void gen8_ggtt_clear_range(struct i915_address_space *vm, 2405 u64 start, u64 length) 2406 { 2407 struct i915_ggtt *ggtt = i915_vm_to_ggtt(vm); 2408 unsigned first_entry = start / I915_GTT_PAGE_SIZE; 2409 unsigned num_entries = length / I915_GTT_PAGE_SIZE; 2410 const gen8_pte_t scratch_pte = vm->scratch_pte; 2411 gen8_pte_t __iomem *gtt_base = 2412 (gen8_pte_t __iomem *)ggtt->gsm + first_entry; 2413 const int max_entries = ggtt_total_entries(ggtt) - first_entry; 2414 int i; 2415 2416 if (WARN(num_entries > max_entries, 2417 "First entry = %d; Num entries = %d (max=%d)\n", 2418 first_entry, num_entries, max_entries)) 2419 num_entries = max_entries; 2420 2421 for (i = 0; i < num_entries; i++) 2422 gen8_set_pte(>t_base[i], scratch_pte); 2423 } 2424 2425 static void bxt_vtd_ggtt_wa(struct i915_address_space *vm) 2426 { 2427 struct drm_i915_private *dev_priv = vm->i915; 2428 2429 /* 2430 * Make sure the internal GAM fifo has been cleared of all GTT 2431 * writes before exiting stop_machine(). This guarantees that 2432 * any aperture accesses waiting to start in another process 2433 * cannot back up behind the GTT writes causing a hang. 2434 * The register can be any arbitrary GAM register. 2435 */ 2436 POSTING_READ(GFX_FLSH_CNTL_GEN6); 2437 } 2438 2439 struct insert_page { 2440 struct i915_address_space *vm; 2441 dma_addr_t addr; 2442 u64 offset; 2443 enum i915_cache_level level; 2444 }; 2445 2446 static int bxt_vtd_ggtt_insert_page__cb(void *_arg) 2447 { 2448 struct insert_page *arg = _arg; 2449 2450 gen8_ggtt_insert_page(arg->vm, arg->addr, arg->offset, arg->level, 0); 2451 bxt_vtd_ggtt_wa(arg->vm); 2452 2453 return 0; 2454 } 2455 2456 static void bxt_vtd_ggtt_insert_page__BKL(struct i915_address_space *vm, 2457 dma_addr_t addr, 2458 u64 offset, 2459 enum i915_cache_level level, 2460 u32 unused) 2461 { 2462 struct insert_page arg = { vm, addr, offset, level }; 2463 2464 stop_machine(bxt_vtd_ggtt_insert_page__cb, &arg, NULL); 2465 } 2466 2467 struct insert_entries { 2468 struct i915_address_space *vm; 2469 struct i915_vma *vma; 2470 enum i915_cache_level level; 2471 u32 flags; 2472 }; 2473 2474 static int bxt_vtd_ggtt_insert_entries__cb(void *_arg) 2475 { 2476 struct insert_entries *arg = _arg; 2477 2478 gen8_ggtt_insert_entries(arg->vm, arg->vma, arg->level, arg->flags); 2479 bxt_vtd_ggtt_wa(arg->vm); 2480 2481 return 0; 2482 } 2483 2484 static void bxt_vtd_ggtt_insert_entries__BKL(struct i915_address_space *vm, 2485 struct i915_vma *vma, 2486 enum i915_cache_level level, 2487 u32 flags) 2488 { 2489 struct insert_entries arg = { vm, vma, level, flags }; 2490 2491 stop_machine(bxt_vtd_ggtt_insert_entries__cb, &arg, NULL); 2492 } 2493 2494 struct clear_range { 2495 struct i915_address_space *vm; 2496 u64 start; 2497 u64 length; 2498 }; 2499 2500 static int bxt_vtd_ggtt_clear_range__cb(void *_arg) 2501 { 2502 struct clear_range *arg = _arg; 2503 2504 gen8_ggtt_clear_range(arg->vm, arg->start, arg->length); 2505 bxt_vtd_ggtt_wa(arg->vm); 2506 2507 return 0; 2508 } 2509 2510 static void bxt_vtd_ggtt_clear_range__BKL(struct i915_address_space *vm, 2511 u64 start, 2512 u64 length) 2513 { 2514 struct clear_range arg = { vm, start, length }; 2515 2516 stop_machine(bxt_vtd_ggtt_clear_range__cb, &arg, NULL); 2517 } 2518 2519 static void gen6_ggtt_clear_range(struct i915_address_space *vm, 2520 u64 start, u64 length) 2521 { 2522 struct i915_ggtt *ggtt = i915_vm_to_ggtt(vm); 2523 unsigned first_entry = start / I915_GTT_PAGE_SIZE; 2524 unsigned num_entries = length / I915_GTT_PAGE_SIZE; 2525 gen6_pte_t scratch_pte, __iomem *gtt_base = 2526 (gen6_pte_t __iomem *)ggtt->gsm + first_entry; 2527 const int max_entries = ggtt_total_entries(ggtt) - first_entry; 2528 int i; 2529 2530 if (WARN(num_entries > max_entries, 2531 "First entry = %d; Num entries = %d (max=%d)\n", 2532 first_entry, num_entries, max_entries)) 2533 num_entries = max_entries; 2534 2535 scratch_pte = vm->scratch_pte; 2536 2537 for (i = 0; i < num_entries; i++) 2538 iowrite32(scratch_pte, >t_base[i]); 2539 } 2540 2541 static void i915_ggtt_insert_page(struct i915_address_space *vm, 2542 dma_addr_t addr, 2543 u64 offset, 2544 enum i915_cache_level cache_level, 2545 u32 unused) 2546 { 2547 unsigned int flags = (cache_level == I915_CACHE_NONE) ? 2548 AGP_USER_MEMORY : AGP_USER_CACHED_MEMORY; 2549 2550 intel_gtt_insert_page(addr, offset >> PAGE_SHIFT, flags); 2551 } 2552 2553 static void i915_ggtt_insert_entries(struct i915_address_space *vm, 2554 struct i915_vma *vma, 2555 enum i915_cache_level cache_level, 2556 u32 unused) 2557 { 2558 unsigned int flags = (cache_level == I915_CACHE_NONE) ? 2559 AGP_USER_MEMORY : AGP_USER_CACHED_MEMORY; 2560 2561 intel_gtt_insert_sg_entries(vma->pages, vma->node.start >> PAGE_SHIFT, 2562 flags); 2563 } 2564 2565 static void i915_ggtt_clear_range(struct i915_address_space *vm, 2566 u64 start, u64 length) 2567 { 2568 intel_gtt_clear_range(start >> PAGE_SHIFT, length >> PAGE_SHIFT); 2569 } 2570 2571 static int ggtt_bind_vma(struct i915_vma *vma, 2572 enum i915_cache_level cache_level, 2573 u32 flags) 2574 { 2575 struct drm_i915_private *i915 = vma->vm->i915; 2576 struct drm_i915_gem_object *obj = vma->obj; 2577 intel_wakeref_t wakeref; 2578 u32 pte_flags; 2579 2580 /* Applicable to VLV (gen8+ do not support RO in the GGTT) */ 2581 pte_flags = 0; 2582 if (i915_gem_object_is_readonly(obj)) 2583 pte_flags |= PTE_READ_ONLY; 2584 2585 with_intel_runtime_pm(i915, wakeref) 2586 vma->vm->insert_entries(vma->vm, vma, cache_level, pte_flags); 2587 2588 vma->page_sizes.gtt = I915_GTT_PAGE_SIZE; 2589 2590 /* 2591 * Without aliasing PPGTT there's no difference between 2592 * GLOBAL/LOCAL_BIND, it's all the same ptes. Hence unconditionally 2593 * upgrade to both bound if we bind either to avoid double-binding. 2594 */ 2595 vma->flags |= I915_VMA_GLOBAL_BIND | I915_VMA_LOCAL_BIND; 2596 2597 return 0; 2598 } 2599 2600 static void ggtt_unbind_vma(struct i915_vma *vma) 2601 { 2602 struct drm_i915_private *i915 = vma->vm->i915; 2603 intel_wakeref_t wakeref; 2604 2605 with_intel_runtime_pm(i915, wakeref) 2606 vma->vm->clear_range(vma->vm, vma->node.start, vma->size); 2607 } 2608 2609 static int aliasing_gtt_bind_vma(struct i915_vma *vma, 2610 enum i915_cache_level cache_level, 2611 u32 flags) 2612 { 2613 struct drm_i915_private *i915 = vma->vm->i915; 2614 u32 pte_flags; 2615 int ret; 2616 2617 /* Currently applicable only to VLV */ 2618 pte_flags = 0; 2619 if (i915_gem_object_is_readonly(vma->obj)) 2620 pte_flags |= PTE_READ_ONLY; 2621 2622 if (flags & I915_VMA_LOCAL_BIND) { 2623 struct i915_hw_ppgtt *appgtt = i915->mm.aliasing_ppgtt; 2624 2625 if (!(vma->flags & I915_VMA_LOCAL_BIND)) { 2626 ret = appgtt->vm.allocate_va_range(&appgtt->vm, 2627 vma->node.start, 2628 vma->size); 2629 if (ret) 2630 return ret; 2631 } 2632 2633 appgtt->vm.insert_entries(&appgtt->vm, vma, cache_level, 2634 pte_flags); 2635 } 2636 2637 if (flags & I915_VMA_GLOBAL_BIND) { 2638 intel_wakeref_t wakeref; 2639 2640 with_intel_runtime_pm(i915, wakeref) { 2641 vma->vm->insert_entries(vma->vm, vma, 2642 cache_level, pte_flags); 2643 } 2644 } 2645 2646 return 0; 2647 } 2648 2649 static void aliasing_gtt_unbind_vma(struct i915_vma *vma) 2650 { 2651 struct drm_i915_private *i915 = vma->vm->i915; 2652 2653 if (vma->flags & I915_VMA_GLOBAL_BIND) { 2654 struct i915_address_space *vm = vma->vm; 2655 intel_wakeref_t wakeref; 2656 2657 with_intel_runtime_pm(i915, wakeref) 2658 vm->clear_range(vm, vma->node.start, vma->size); 2659 } 2660 2661 if (vma->flags & I915_VMA_LOCAL_BIND) { 2662 struct i915_address_space *vm = &i915->mm.aliasing_ppgtt->vm; 2663 2664 vm->clear_range(vm, vma->node.start, vma->size); 2665 } 2666 } 2667 2668 void i915_gem_gtt_finish_pages(struct drm_i915_gem_object *obj, 2669 struct sg_table *pages) 2670 { 2671 struct drm_i915_private *dev_priv = to_i915(obj->base.dev); 2672 struct device *kdev = &dev_priv->drm.pdev->dev; 2673 struct i915_ggtt *ggtt = &dev_priv->ggtt; 2674 2675 if (unlikely(ggtt->do_idle_maps)) { 2676 if (i915_gem_wait_for_idle(dev_priv, 0, MAX_SCHEDULE_TIMEOUT)) { 2677 DRM_ERROR("Failed to wait for idle; VT'd may hang.\n"); 2678 /* Wait a bit, in hopes it avoids the hang */ 2679 udelay(10); 2680 } 2681 } 2682 2683 dma_unmap_sg(kdev, pages->sgl, pages->nents, PCI_DMA_BIDIRECTIONAL); 2684 } 2685 2686 static int ggtt_set_pages(struct i915_vma *vma) 2687 { 2688 int ret; 2689 2690 GEM_BUG_ON(vma->pages); 2691 2692 ret = i915_get_ggtt_vma_pages(vma); 2693 if (ret) 2694 return ret; 2695 2696 vma->page_sizes = vma->obj->mm.page_sizes; 2697 2698 return 0; 2699 } 2700 2701 static void i915_gtt_color_adjust(const struct drm_mm_node *node, 2702 unsigned long color, 2703 u64 *start, 2704 u64 *end) 2705 { 2706 if (node->allocated && node->color != color) 2707 *start += I915_GTT_PAGE_SIZE; 2708 2709 /* Also leave a space between the unallocated reserved node after the 2710 * GTT and any objects within the GTT, i.e. we use the color adjustment 2711 * to insert a guard page to prevent prefetches crossing over the 2712 * GTT boundary. 2713 */ 2714 node = list_next_entry(node, node_list); 2715 if (node->color != color) 2716 *end -= I915_GTT_PAGE_SIZE; 2717 } 2718 2719 int i915_gem_init_aliasing_ppgtt(struct drm_i915_private *i915) 2720 { 2721 struct i915_ggtt *ggtt = &i915->ggtt; 2722 struct i915_hw_ppgtt *ppgtt; 2723 int err; 2724 2725 ppgtt = i915_ppgtt_create(i915); 2726 if (IS_ERR(ppgtt)) 2727 return PTR_ERR(ppgtt); 2728 2729 if (GEM_WARN_ON(ppgtt->vm.total < ggtt->vm.total)) { 2730 err = -ENODEV; 2731 goto err_ppgtt; 2732 } 2733 2734 /* 2735 * Note we only pre-allocate as far as the end of the global 2736 * GTT. On 48b / 4-level page-tables, the difference is very, 2737 * very significant! We have to preallocate as GVT/vgpu does 2738 * not like the page directory disappearing. 2739 */ 2740 err = ppgtt->vm.allocate_va_range(&ppgtt->vm, 0, ggtt->vm.total); 2741 if (err) 2742 goto err_ppgtt; 2743 2744 i915->mm.aliasing_ppgtt = ppgtt; 2745 2746 GEM_BUG_ON(ggtt->vm.vma_ops.bind_vma != ggtt_bind_vma); 2747 ggtt->vm.vma_ops.bind_vma = aliasing_gtt_bind_vma; 2748 2749 GEM_BUG_ON(ggtt->vm.vma_ops.unbind_vma != ggtt_unbind_vma); 2750 ggtt->vm.vma_ops.unbind_vma = aliasing_gtt_unbind_vma; 2751 2752 return 0; 2753 2754 err_ppgtt: 2755 i915_ppgtt_put(ppgtt); 2756 return err; 2757 } 2758 2759 void i915_gem_fini_aliasing_ppgtt(struct drm_i915_private *i915) 2760 { 2761 struct i915_ggtt *ggtt = &i915->ggtt; 2762 struct i915_hw_ppgtt *ppgtt; 2763 2764 ppgtt = fetch_and_zero(&i915->mm.aliasing_ppgtt); 2765 if (!ppgtt) 2766 return; 2767 2768 i915_ppgtt_put(ppgtt); 2769 2770 ggtt->vm.vma_ops.bind_vma = ggtt_bind_vma; 2771 ggtt->vm.vma_ops.unbind_vma = ggtt_unbind_vma; 2772 } 2773 2774 int i915_gem_init_ggtt(struct drm_i915_private *dev_priv) 2775 { 2776 /* Let GEM Manage all of the aperture. 2777 * 2778 * However, leave one page at the end still bound to the scratch page. 2779 * There are a number of places where the hardware apparently prefetches 2780 * past the end of the object, and we've seen multiple hangs with the 2781 * GPU head pointer stuck in a batchbuffer bound at the last page of the 2782 * aperture. One page should be enough to keep any prefetching inside 2783 * of the aperture. 2784 */ 2785 struct i915_ggtt *ggtt = &dev_priv->ggtt; 2786 unsigned long hole_start, hole_end; 2787 struct drm_mm_node *entry; 2788 int ret; 2789 2790 /* 2791 * GuC requires all resources that we're sharing with it to be placed in 2792 * non-WOPCM memory. If GuC is not present or not in use we still need a 2793 * small bias as ring wraparound at offset 0 sometimes hangs. No idea 2794 * why. 2795 */ 2796 ggtt->pin_bias = max_t(u32, I915_GTT_PAGE_SIZE, 2797 intel_guc_reserved_gtt_size(&dev_priv->guc)); 2798 2799 ret = intel_vgt_balloon(dev_priv); 2800 if (ret) 2801 return ret; 2802 2803 /* Reserve a mappable slot for our lockless error capture */ 2804 ret = drm_mm_insert_node_in_range(&ggtt->vm.mm, &ggtt->error_capture, 2805 PAGE_SIZE, 0, I915_COLOR_UNEVICTABLE, 2806 0, ggtt->mappable_end, 2807 DRM_MM_INSERT_LOW); 2808 if (ret) 2809 return ret; 2810 2811 if (USES_GUC(dev_priv)) { 2812 ret = intel_guc_reserve_ggtt_top(&dev_priv->guc); 2813 if (ret) 2814 goto err_reserve; 2815 } 2816 2817 /* Clear any non-preallocated blocks */ 2818 drm_mm_for_each_hole(entry, &ggtt->vm.mm, hole_start, hole_end) { 2819 DRM_DEBUG_KMS("clearing unused GTT space: [%lx, %lx]\n", 2820 hole_start, hole_end); 2821 ggtt->vm.clear_range(&ggtt->vm, hole_start, 2822 hole_end - hole_start); 2823 } 2824 2825 /* And finally clear the reserved guard page */ 2826 ggtt->vm.clear_range(&ggtt->vm, ggtt->vm.total - PAGE_SIZE, PAGE_SIZE); 2827 2828 if (INTEL_PPGTT(dev_priv) == INTEL_PPGTT_ALIASING) { 2829 ret = i915_gem_init_aliasing_ppgtt(dev_priv); 2830 if (ret) 2831 goto err_appgtt; 2832 } 2833 2834 return 0; 2835 2836 err_appgtt: 2837 intel_guc_release_ggtt_top(&dev_priv->guc); 2838 err_reserve: 2839 drm_mm_remove_node(&ggtt->error_capture); 2840 return ret; 2841 } 2842 2843 /** 2844 * i915_ggtt_cleanup_hw - Clean up GGTT hardware initialization 2845 * @dev_priv: i915 device 2846 */ 2847 void i915_ggtt_cleanup_hw(struct drm_i915_private *dev_priv) 2848 { 2849 struct i915_ggtt *ggtt = &dev_priv->ggtt; 2850 struct i915_vma *vma, *vn; 2851 struct pagevec *pvec; 2852 2853 ggtt->vm.closed = true; 2854 2855 mutex_lock(&dev_priv->drm.struct_mutex); 2856 i915_gem_fini_aliasing_ppgtt(dev_priv); 2857 2858 list_for_each_entry_safe(vma, vn, &ggtt->vm.bound_list, vm_link) 2859 WARN_ON(i915_vma_unbind(vma)); 2860 2861 if (drm_mm_node_allocated(&ggtt->error_capture)) 2862 drm_mm_remove_node(&ggtt->error_capture); 2863 2864 intel_guc_release_ggtt_top(&dev_priv->guc); 2865 2866 if (drm_mm_initialized(&ggtt->vm.mm)) { 2867 intel_vgt_deballoon(dev_priv); 2868 i915_address_space_fini(&ggtt->vm); 2869 } 2870 2871 ggtt->vm.cleanup(&ggtt->vm); 2872 2873 pvec = &dev_priv->mm.wc_stash.pvec; 2874 if (pvec->nr) { 2875 set_pages_array_wb(pvec->pages, pvec->nr); 2876 __pagevec_release(pvec); 2877 } 2878 2879 mutex_unlock(&dev_priv->drm.struct_mutex); 2880 2881 arch_phys_wc_del(ggtt->mtrr); 2882 io_mapping_fini(&ggtt->iomap); 2883 2884 i915_gem_cleanup_stolen(dev_priv); 2885 } 2886 2887 static unsigned int gen6_get_total_gtt_size(u16 snb_gmch_ctl) 2888 { 2889 snb_gmch_ctl >>= SNB_GMCH_GGMS_SHIFT; 2890 snb_gmch_ctl &= SNB_GMCH_GGMS_MASK; 2891 return snb_gmch_ctl << 20; 2892 } 2893 2894 static unsigned int gen8_get_total_gtt_size(u16 bdw_gmch_ctl) 2895 { 2896 bdw_gmch_ctl >>= BDW_GMCH_GGMS_SHIFT; 2897 bdw_gmch_ctl &= BDW_GMCH_GGMS_MASK; 2898 if (bdw_gmch_ctl) 2899 bdw_gmch_ctl = 1 << bdw_gmch_ctl; 2900 2901 #ifdef CONFIG_X86_32 2902 /* Limit 32b platforms to a 2GB GGTT: 4 << 20 / pte size * I915_GTT_PAGE_SIZE */ 2903 if (bdw_gmch_ctl > 4) 2904 bdw_gmch_ctl = 4; 2905 #endif 2906 2907 return bdw_gmch_ctl << 20; 2908 } 2909 2910 static unsigned int chv_get_total_gtt_size(u16 gmch_ctrl) 2911 { 2912 gmch_ctrl >>= SNB_GMCH_GGMS_SHIFT; 2913 gmch_ctrl &= SNB_GMCH_GGMS_MASK; 2914 2915 if (gmch_ctrl) 2916 return 1 << (20 + gmch_ctrl); 2917 2918 return 0; 2919 } 2920 2921 static int ggtt_probe_common(struct i915_ggtt *ggtt, u64 size) 2922 { 2923 struct drm_i915_private *dev_priv = ggtt->vm.i915; 2924 struct pci_dev *pdev = dev_priv->drm.pdev; 2925 phys_addr_t phys_addr; 2926 int ret; 2927 2928 /* For Modern GENs the PTEs and register space are split in the BAR */ 2929 phys_addr = pci_resource_start(pdev, 0) + pci_resource_len(pdev, 0) / 2; 2930 2931 /* 2932 * On BXT+/CNL+ writes larger than 64 bit to the GTT pagetable range 2933 * will be dropped. For WC mappings in general we have 64 byte burst 2934 * writes when the WC buffer is flushed, so we can't use it, but have to 2935 * resort to an uncached mapping. The WC issue is easily caught by the 2936 * readback check when writing GTT PTE entries. 2937 */ 2938 if (IS_GEN9_LP(dev_priv) || INTEL_GEN(dev_priv) >= 10) 2939 ggtt->gsm = ioremap_nocache(phys_addr, size); 2940 else 2941 ggtt->gsm = ioremap_wc(phys_addr, size); 2942 if (!ggtt->gsm) { 2943 DRM_ERROR("Failed to map the ggtt page table\n"); 2944 return -ENOMEM; 2945 } 2946 2947 ret = setup_scratch_page(&ggtt->vm, GFP_DMA32); 2948 if (ret) { 2949 DRM_ERROR("Scratch setup failed\n"); 2950 /* iounmap will also get called at remove, but meh */ 2951 iounmap(ggtt->gsm); 2952 return ret; 2953 } 2954 2955 ggtt->vm.scratch_pte = 2956 ggtt->vm.pte_encode(ggtt->vm.scratch_page.daddr, 2957 I915_CACHE_NONE, 0); 2958 2959 return 0; 2960 } 2961 2962 static struct intel_ppat_entry * 2963 __alloc_ppat_entry(struct intel_ppat *ppat, unsigned int index, u8 value) 2964 { 2965 struct intel_ppat_entry *entry = &ppat->entries[index]; 2966 2967 GEM_BUG_ON(index >= ppat->max_entries); 2968 GEM_BUG_ON(test_bit(index, ppat->used)); 2969 2970 entry->ppat = ppat; 2971 entry->value = value; 2972 kref_init(&entry->ref); 2973 set_bit(index, ppat->used); 2974 set_bit(index, ppat->dirty); 2975 2976 return entry; 2977 } 2978 2979 static void __free_ppat_entry(struct intel_ppat_entry *entry) 2980 { 2981 struct intel_ppat *ppat = entry->ppat; 2982 unsigned int index = entry - ppat->entries; 2983 2984 GEM_BUG_ON(index >= ppat->max_entries); 2985 GEM_BUG_ON(!test_bit(index, ppat->used)); 2986 2987 entry->value = ppat->clear_value; 2988 clear_bit(index, ppat->used); 2989 set_bit(index, ppat->dirty); 2990 } 2991 2992 /** 2993 * intel_ppat_get - get a usable PPAT entry 2994 * @i915: i915 device instance 2995 * @value: the PPAT value required by the caller 2996 * 2997 * The function tries to search if there is an existing PPAT entry which 2998 * matches with the required value. If perfectly matched, the existing PPAT 2999 * entry will be used. If only partially matched, it will try to check if 3000 * there is any available PPAT index. If yes, it will allocate a new PPAT 3001 * index for the required entry and update the HW. If not, the partially 3002 * matched entry will be used. 3003 */ 3004 const struct intel_ppat_entry * 3005 intel_ppat_get(struct drm_i915_private *i915, u8 value) 3006 { 3007 struct intel_ppat *ppat = &i915->ppat; 3008 struct intel_ppat_entry *entry = NULL; 3009 unsigned int scanned, best_score; 3010 int i; 3011 3012 GEM_BUG_ON(!ppat->max_entries); 3013 3014 scanned = best_score = 0; 3015 for_each_set_bit(i, ppat->used, ppat->max_entries) { 3016 unsigned int score; 3017 3018 score = ppat->match(ppat->entries[i].value, value); 3019 if (score > best_score) { 3020 entry = &ppat->entries[i]; 3021 if (score == INTEL_PPAT_PERFECT_MATCH) { 3022 kref_get(&entry->ref); 3023 return entry; 3024 } 3025 best_score = score; 3026 } 3027 scanned++; 3028 } 3029 3030 if (scanned == ppat->max_entries) { 3031 if (!entry) 3032 return ERR_PTR(-ENOSPC); 3033 3034 kref_get(&entry->ref); 3035 return entry; 3036 } 3037 3038 i = find_first_zero_bit(ppat->used, ppat->max_entries); 3039 entry = __alloc_ppat_entry(ppat, i, value); 3040 ppat->update_hw(i915); 3041 return entry; 3042 } 3043 3044 static void release_ppat(struct kref *kref) 3045 { 3046 struct intel_ppat_entry *entry = 3047 container_of(kref, struct intel_ppat_entry, ref); 3048 struct drm_i915_private *i915 = entry->ppat->i915; 3049 3050 __free_ppat_entry(entry); 3051 entry->ppat->update_hw(i915); 3052 } 3053 3054 /** 3055 * intel_ppat_put - put back the PPAT entry got from intel_ppat_get() 3056 * @entry: an intel PPAT entry 3057 * 3058 * Put back the PPAT entry got from intel_ppat_get(). If the PPAT index of the 3059 * entry is dynamically allocated, its reference count will be decreased. Once 3060 * the reference count becomes into zero, the PPAT index becomes free again. 3061 */ 3062 void intel_ppat_put(const struct intel_ppat_entry *entry) 3063 { 3064 struct intel_ppat *ppat = entry->ppat; 3065 unsigned int index = entry - ppat->entries; 3066 3067 GEM_BUG_ON(!ppat->max_entries); 3068 3069 kref_put(&ppat->entries[index].ref, release_ppat); 3070 } 3071 3072 static void cnl_private_pat_update_hw(struct drm_i915_private *dev_priv) 3073 { 3074 struct intel_ppat *ppat = &dev_priv->ppat; 3075 int i; 3076 3077 for_each_set_bit(i, ppat->dirty, ppat->max_entries) { 3078 I915_WRITE(GEN10_PAT_INDEX(i), ppat->entries[i].value); 3079 clear_bit(i, ppat->dirty); 3080 } 3081 } 3082 3083 static void bdw_private_pat_update_hw(struct drm_i915_private *dev_priv) 3084 { 3085 struct intel_ppat *ppat = &dev_priv->ppat; 3086 u64 pat = 0; 3087 int i; 3088 3089 for (i = 0; i < ppat->max_entries; i++) 3090 pat |= GEN8_PPAT(i, ppat->entries[i].value); 3091 3092 bitmap_clear(ppat->dirty, 0, ppat->max_entries); 3093 3094 I915_WRITE(GEN8_PRIVATE_PAT_LO, lower_32_bits(pat)); 3095 I915_WRITE(GEN8_PRIVATE_PAT_HI, upper_32_bits(pat)); 3096 } 3097 3098 static unsigned int bdw_private_pat_match(u8 src, u8 dst) 3099 { 3100 unsigned int score = 0; 3101 enum { 3102 AGE_MATCH = BIT(0), 3103 TC_MATCH = BIT(1), 3104 CA_MATCH = BIT(2), 3105 }; 3106 3107 /* Cache attribute has to be matched. */ 3108 if (GEN8_PPAT_GET_CA(src) != GEN8_PPAT_GET_CA(dst)) 3109 return 0; 3110 3111 score |= CA_MATCH; 3112 3113 if (GEN8_PPAT_GET_TC(src) == GEN8_PPAT_GET_TC(dst)) 3114 score |= TC_MATCH; 3115 3116 if (GEN8_PPAT_GET_AGE(src) == GEN8_PPAT_GET_AGE(dst)) 3117 score |= AGE_MATCH; 3118 3119 if (score == (AGE_MATCH | TC_MATCH | CA_MATCH)) 3120 return INTEL_PPAT_PERFECT_MATCH; 3121 3122 return score; 3123 } 3124 3125 static unsigned int chv_private_pat_match(u8 src, u8 dst) 3126 { 3127 return (CHV_PPAT_GET_SNOOP(src) == CHV_PPAT_GET_SNOOP(dst)) ? 3128 INTEL_PPAT_PERFECT_MATCH : 0; 3129 } 3130 3131 static void cnl_setup_private_ppat(struct intel_ppat *ppat) 3132 { 3133 ppat->max_entries = 8; 3134 ppat->update_hw = cnl_private_pat_update_hw; 3135 ppat->match = bdw_private_pat_match; 3136 ppat->clear_value = GEN8_PPAT_WB | GEN8_PPAT_LLCELLC | GEN8_PPAT_AGE(3); 3137 3138 __alloc_ppat_entry(ppat, 0, GEN8_PPAT_WB | GEN8_PPAT_LLC); 3139 __alloc_ppat_entry(ppat, 1, GEN8_PPAT_WC | GEN8_PPAT_LLCELLC); 3140 __alloc_ppat_entry(ppat, 2, GEN8_PPAT_WT | GEN8_PPAT_LLCELLC); 3141 __alloc_ppat_entry(ppat, 3, GEN8_PPAT_UC); 3142 __alloc_ppat_entry(ppat, 4, GEN8_PPAT_WB | GEN8_PPAT_LLCELLC | GEN8_PPAT_AGE(0)); 3143 __alloc_ppat_entry(ppat, 5, GEN8_PPAT_WB | GEN8_PPAT_LLCELLC | GEN8_PPAT_AGE(1)); 3144 __alloc_ppat_entry(ppat, 6, GEN8_PPAT_WB | GEN8_PPAT_LLCELLC | GEN8_PPAT_AGE(2)); 3145 __alloc_ppat_entry(ppat, 7, GEN8_PPAT_WB | GEN8_PPAT_LLCELLC | GEN8_PPAT_AGE(3)); 3146 } 3147 3148 /* The GGTT and PPGTT need a private PPAT setup in order to handle cacheability 3149 * bits. When using advanced contexts each context stores its own PAT, but 3150 * writing this data shouldn't be harmful even in those cases. */ 3151 static void bdw_setup_private_ppat(struct intel_ppat *ppat) 3152 { 3153 ppat->max_entries = 8; 3154 ppat->update_hw = bdw_private_pat_update_hw; 3155 ppat->match = bdw_private_pat_match; 3156 ppat->clear_value = GEN8_PPAT_WB | GEN8_PPAT_LLCELLC | GEN8_PPAT_AGE(3); 3157 3158 if (!HAS_PPGTT(ppat->i915)) { 3159 /* Spec: "For GGTT, there is NO pat_sel[2:0] from the entry, 3160 * so RTL will always use the value corresponding to 3161 * pat_sel = 000". 3162 * So let's disable cache for GGTT to avoid screen corruptions. 3163 * MOCS still can be used though. 3164 * - System agent ggtt writes (i.e. cpu gtt mmaps) already work 3165 * before this patch, i.e. the same uncached + snooping access 3166 * like on gen6/7 seems to be in effect. 3167 * - So this just fixes blitter/render access. Again it looks 3168 * like it's not just uncached access, but uncached + snooping. 3169 * So we can still hold onto all our assumptions wrt cpu 3170 * clflushing on LLC machines. 3171 */ 3172 __alloc_ppat_entry(ppat, 0, GEN8_PPAT_UC); 3173 return; 3174 } 3175 3176 __alloc_ppat_entry(ppat, 0, GEN8_PPAT_WB | GEN8_PPAT_LLC); /* for normal objects, no eLLC */ 3177 __alloc_ppat_entry(ppat, 1, GEN8_PPAT_WC | GEN8_PPAT_LLCELLC); /* for something pointing to ptes? */ 3178 __alloc_ppat_entry(ppat, 2, GEN8_PPAT_WT | GEN8_PPAT_LLCELLC); /* for scanout with eLLC */ 3179 __alloc_ppat_entry(ppat, 3, GEN8_PPAT_UC); /* Uncached objects, mostly for scanout */ 3180 __alloc_ppat_entry(ppat, 4, GEN8_PPAT_WB | GEN8_PPAT_LLCELLC | GEN8_PPAT_AGE(0)); 3181 __alloc_ppat_entry(ppat, 5, GEN8_PPAT_WB | GEN8_PPAT_LLCELLC | GEN8_PPAT_AGE(1)); 3182 __alloc_ppat_entry(ppat, 6, GEN8_PPAT_WB | GEN8_PPAT_LLCELLC | GEN8_PPAT_AGE(2)); 3183 __alloc_ppat_entry(ppat, 7, GEN8_PPAT_WB | GEN8_PPAT_LLCELLC | GEN8_PPAT_AGE(3)); 3184 } 3185 3186 static void chv_setup_private_ppat(struct intel_ppat *ppat) 3187 { 3188 ppat->max_entries = 8; 3189 ppat->update_hw = bdw_private_pat_update_hw; 3190 ppat->match = chv_private_pat_match; 3191 ppat->clear_value = CHV_PPAT_SNOOP; 3192 3193 /* 3194 * Map WB on BDW to snooped on CHV. 3195 * 3196 * Only the snoop bit has meaning for CHV, the rest is 3197 * ignored. 3198 * 3199 * The hardware will never snoop for certain types of accesses: 3200 * - CPU GTT (GMADR->GGTT->no snoop->memory) 3201 * - PPGTT page tables 3202 * - some other special cycles 3203 * 3204 * As with BDW, we also need to consider the following for GT accesses: 3205 * "For GGTT, there is NO pat_sel[2:0] from the entry, 3206 * so RTL will always use the value corresponding to 3207 * pat_sel = 000". 3208 * Which means we must set the snoop bit in PAT entry 0 3209 * in order to keep the global status page working. 3210 */ 3211 3212 __alloc_ppat_entry(ppat, 0, CHV_PPAT_SNOOP); 3213 __alloc_ppat_entry(ppat, 1, 0); 3214 __alloc_ppat_entry(ppat, 2, 0); 3215 __alloc_ppat_entry(ppat, 3, 0); 3216 __alloc_ppat_entry(ppat, 4, CHV_PPAT_SNOOP); 3217 __alloc_ppat_entry(ppat, 5, CHV_PPAT_SNOOP); 3218 __alloc_ppat_entry(ppat, 6, CHV_PPAT_SNOOP); 3219 __alloc_ppat_entry(ppat, 7, CHV_PPAT_SNOOP); 3220 } 3221 3222 static void gen6_gmch_remove(struct i915_address_space *vm) 3223 { 3224 struct i915_ggtt *ggtt = i915_vm_to_ggtt(vm); 3225 3226 iounmap(ggtt->gsm); 3227 cleanup_scratch_page(vm); 3228 } 3229 3230 static void setup_private_pat(struct drm_i915_private *dev_priv) 3231 { 3232 struct intel_ppat *ppat = &dev_priv->ppat; 3233 int i; 3234 3235 ppat->i915 = dev_priv; 3236 3237 if (INTEL_GEN(dev_priv) >= 10) 3238 cnl_setup_private_ppat(ppat); 3239 else if (IS_CHERRYVIEW(dev_priv) || IS_GEN9_LP(dev_priv)) 3240 chv_setup_private_ppat(ppat); 3241 else 3242 bdw_setup_private_ppat(ppat); 3243 3244 GEM_BUG_ON(ppat->max_entries > INTEL_MAX_PPAT_ENTRIES); 3245 3246 for_each_clear_bit(i, ppat->used, ppat->max_entries) { 3247 ppat->entries[i].value = ppat->clear_value; 3248 ppat->entries[i].ppat = ppat; 3249 set_bit(i, ppat->dirty); 3250 } 3251 3252 ppat->update_hw(dev_priv); 3253 } 3254 3255 static int gen8_gmch_probe(struct i915_ggtt *ggtt) 3256 { 3257 struct drm_i915_private *dev_priv = ggtt->vm.i915; 3258 struct pci_dev *pdev = dev_priv->drm.pdev; 3259 unsigned int size; 3260 u16 snb_gmch_ctl; 3261 int err; 3262 3263 /* TODO: We're not aware of mappable constraints on gen8 yet */ 3264 ggtt->gmadr = 3265 (struct resource) DEFINE_RES_MEM(pci_resource_start(pdev, 2), 3266 pci_resource_len(pdev, 2)); 3267 ggtt->mappable_end = resource_size(&ggtt->gmadr); 3268 3269 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(39)); 3270 if (!err) 3271 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(39)); 3272 if (err) 3273 DRM_ERROR("Can't set DMA mask/consistent mask (%d)\n", err); 3274 3275 pci_read_config_word(pdev, SNB_GMCH_CTRL, &snb_gmch_ctl); 3276 if (IS_CHERRYVIEW(dev_priv)) 3277 size = chv_get_total_gtt_size(snb_gmch_ctl); 3278 else 3279 size = gen8_get_total_gtt_size(snb_gmch_ctl); 3280 3281 ggtt->vm.total = (size / sizeof(gen8_pte_t)) * I915_GTT_PAGE_SIZE; 3282 ggtt->vm.cleanup = gen6_gmch_remove; 3283 ggtt->vm.insert_page = gen8_ggtt_insert_page; 3284 ggtt->vm.clear_range = nop_clear_range; 3285 if (intel_scanout_needs_vtd_wa(dev_priv)) 3286 ggtt->vm.clear_range = gen8_ggtt_clear_range; 3287 3288 ggtt->vm.insert_entries = gen8_ggtt_insert_entries; 3289 3290 /* Serialize GTT updates with aperture access on BXT if VT-d is on. */ 3291 if (intel_ggtt_update_needs_vtd_wa(dev_priv) || 3292 IS_CHERRYVIEW(dev_priv) /* fails with concurrent use/update */) { 3293 ggtt->vm.insert_entries = bxt_vtd_ggtt_insert_entries__BKL; 3294 ggtt->vm.insert_page = bxt_vtd_ggtt_insert_page__BKL; 3295 if (ggtt->vm.clear_range != nop_clear_range) 3296 ggtt->vm.clear_range = bxt_vtd_ggtt_clear_range__BKL; 3297 3298 /* Prevent recursively calling stop_machine() and deadlocks. */ 3299 dev_info(dev_priv->drm.dev, 3300 "Disabling error capture for VT-d workaround\n"); 3301 i915_disable_error_state(dev_priv, -ENODEV); 3302 } 3303 3304 ggtt->invalidate = gen6_ggtt_invalidate; 3305 3306 ggtt->vm.vma_ops.bind_vma = ggtt_bind_vma; 3307 ggtt->vm.vma_ops.unbind_vma = ggtt_unbind_vma; 3308 ggtt->vm.vma_ops.set_pages = ggtt_set_pages; 3309 ggtt->vm.vma_ops.clear_pages = clear_pages; 3310 3311 ggtt->vm.pte_encode = gen8_pte_encode; 3312 3313 setup_private_pat(dev_priv); 3314 3315 return ggtt_probe_common(ggtt, size); 3316 } 3317 3318 static int gen6_gmch_probe(struct i915_ggtt *ggtt) 3319 { 3320 struct drm_i915_private *dev_priv = ggtt->vm.i915; 3321 struct pci_dev *pdev = dev_priv->drm.pdev; 3322 unsigned int size; 3323 u16 snb_gmch_ctl; 3324 int err; 3325 3326 ggtt->gmadr = 3327 (struct resource) DEFINE_RES_MEM(pci_resource_start(pdev, 2), 3328 pci_resource_len(pdev, 2)); 3329 ggtt->mappable_end = resource_size(&ggtt->gmadr); 3330 3331 /* 64/512MB is the current min/max we actually know of, but this is just 3332 * a coarse sanity check. 3333 */ 3334 if (ggtt->mappable_end < (64<<20) || ggtt->mappable_end > (512<<20)) { 3335 DRM_ERROR("Unknown GMADR size (%pa)\n", &ggtt->mappable_end); 3336 return -ENXIO; 3337 } 3338 3339 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(40)); 3340 if (!err) 3341 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(40)); 3342 if (err) 3343 DRM_ERROR("Can't set DMA mask/consistent mask (%d)\n", err); 3344 pci_read_config_word(pdev, SNB_GMCH_CTRL, &snb_gmch_ctl); 3345 3346 size = gen6_get_total_gtt_size(snb_gmch_ctl); 3347 ggtt->vm.total = (size / sizeof(gen6_pte_t)) * I915_GTT_PAGE_SIZE; 3348 3349 ggtt->vm.clear_range = nop_clear_range; 3350 if (!HAS_FULL_PPGTT(dev_priv) || intel_scanout_needs_vtd_wa(dev_priv)) 3351 ggtt->vm.clear_range = gen6_ggtt_clear_range; 3352 ggtt->vm.insert_page = gen6_ggtt_insert_page; 3353 ggtt->vm.insert_entries = gen6_ggtt_insert_entries; 3354 ggtt->vm.cleanup = gen6_gmch_remove; 3355 3356 ggtt->invalidate = gen6_ggtt_invalidate; 3357 3358 if (HAS_EDRAM(dev_priv)) 3359 ggtt->vm.pte_encode = iris_pte_encode; 3360 else if (IS_HASWELL(dev_priv)) 3361 ggtt->vm.pte_encode = hsw_pte_encode; 3362 else if (IS_VALLEYVIEW(dev_priv)) 3363 ggtt->vm.pte_encode = byt_pte_encode; 3364 else if (INTEL_GEN(dev_priv) >= 7) 3365 ggtt->vm.pte_encode = ivb_pte_encode; 3366 else 3367 ggtt->vm.pte_encode = snb_pte_encode; 3368 3369 ggtt->vm.vma_ops.bind_vma = ggtt_bind_vma; 3370 ggtt->vm.vma_ops.unbind_vma = ggtt_unbind_vma; 3371 ggtt->vm.vma_ops.set_pages = ggtt_set_pages; 3372 ggtt->vm.vma_ops.clear_pages = clear_pages; 3373 3374 return ggtt_probe_common(ggtt, size); 3375 } 3376 3377 static void i915_gmch_remove(struct i915_address_space *vm) 3378 { 3379 intel_gmch_remove(); 3380 } 3381 3382 static int i915_gmch_probe(struct i915_ggtt *ggtt) 3383 { 3384 struct drm_i915_private *dev_priv = ggtt->vm.i915; 3385 phys_addr_t gmadr_base; 3386 int ret; 3387 3388 ret = intel_gmch_probe(dev_priv->bridge_dev, dev_priv->drm.pdev, NULL); 3389 if (!ret) { 3390 DRM_ERROR("failed to set up gmch\n"); 3391 return -EIO; 3392 } 3393 3394 intel_gtt_get(&ggtt->vm.total, &gmadr_base, &ggtt->mappable_end); 3395 3396 ggtt->gmadr = 3397 (struct resource) DEFINE_RES_MEM(gmadr_base, 3398 ggtt->mappable_end); 3399 3400 ggtt->do_idle_maps = needs_idle_maps(dev_priv); 3401 ggtt->vm.insert_page = i915_ggtt_insert_page; 3402 ggtt->vm.insert_entries = i915_ggtt_insert_entries; 3403 ggtt->vm.clear_range = i915_ggtt_clear_range; 3404 ggtt->vm.cleanup = i915_gmch_remove; 3405 3406 ggtt->invalidate = gmch_ggtt_invalidate; 3407 3408 ggtt->vm.vma_ops.bind_vma = ggtt_bind_vma; 3409 ggtt->vm.vma_ops.unbind_vma = ggtt_unbind_vma; 3410 ggtt->vm.vma_ops.set_pages = ggtt_set_pages; 3411 ggtt->vm.vma_ops.clear_pages = clear_pages; 3412 3413 if (unlikely(ggtt->do_idle_maps)) 3414 DRM_INFO("applying Ironlake quirks for intel_iommu\n"); 3415 3416 return 0; 3417 } 3418 3419 /** 3420 * i915_ggtt_probe_hw - Probe GGTT hardware location 3421 * @dev_priv: i915 device 3422 */ 3423 int i915_ggtt_probe_hw(struct drm_i915_private *dev_priv) 3424 { 3425 struct i915_ggtt *ggtt = &dev_priv->ggtt; 3426 int ret; 3427 3428 ggtt->vm.i915 = dev_priv; 3429 ggtt->vm.dma = &dev_priv->drm.pdev->dev; 3430 3431 if (INTEL_GEN(dev_priv) <= 5) 3432 ret = i915_gmch_probe(ggtt); 3433 else if (INTEL_GEN(dev_priv) < 8) 3434 ret = gen6_gmch_probe(ggtt); 3435 else 3436 ret = gen8_gmch_probe(ggtt); 3437 if (ret) 3438 return ret; 3439 3440 if ((ggtt->vm.total - 1) >> 32) { 3441 DRM_ERROR("We never expected a Global GTT with more than 32bits" 3442 " of address space! Found %lldM!\n", 3443 ggtt->vm.total >> 20); 3444 ggtt->vm.total = 1ULL << 32; 3445 ggtt->mappable_end = 3446 min_t(u64, ggtt->mappable_end, ggtt->vm.total); 3447 } 3448 3449 if (ggtt->mappable_end > ggtt->vm.total) { 3450 DRM_ERROR("mappable aperture extends past end of GGTT," 3451 " aperture=%pa, total=%llx\n", 3452 &ggtt->mappable_end, ggtt->vm.total); 3453 ggtt->mappable_end = ggtt->vm.total; 3454 } 3455 3456 /* GMADR is the PCI mmio aperture into the global GTT. */ 3457 DRM_DEBUG_DRIVER("GGTT size = %lluM\n", ggtt->vm.total >> 20); 3458 DRM_DEBUG_DRIVER("GMADR size = %lluM\n", (u64)ggtt->mappable_end >> 20); 3459 DRM_DEBUG_DRIVER("DSM size = %lluM\n", 3460 (u64)resource_size(&intel_graphics_stolen_res) >> 20); 3461 if (intel_vtd_active()) 3462 DRM_INFO("VT-d active for gfx access\n"); 3463 3464 return 0; 3465 } 3466 3467 /** 3468 * i915_ggtt_init_hw - Initialize GGTT hardware 3469 * @dev_priv: i915 device 3470 */ 3471 int i915_ggtt_init_hw(struct drm_i915_private *dev_priv) 3472 { 3473 struct i915_ggtt *ggtt = &dev_priv->ggtt; 3474 int ret; 3475 3476 stash_init(&dev_priv->mm.wc_stash); 3477 3478 /* Note that we use page colouring to enforce a guard page at the 3479 * end of the address space. This is required as the CS may prefetch 3480 * beyond the end of the batch buffer, across the page boundary, 3481 * and beyond the end of the GTT if we do not provide a guard. 3482 */ 3483 mutex_lock(&dev_priv->drm.struct_mutex); 3484 i915_address_space_init(&ggtt->vm, VM_CLASS_GGTT); 3485 3486 ggtt->vm.is_ggtt = true; 3487 3488 /* Only VLV supports read-only GGTT mappings */ 3489 ggtt->vm.has_read_only = IS_VALLEYVIEW(dev_priv); 3490 3491 if (!HAS_LLC(dev_priv) && !HAS_PPGTT(dev_priv)) 3492 ggtt->vm.mm.color_adjust = i915_gtt_color_adjust; 3493 mutex_unlock(&dev_priv->drm.struct_mutex); 3494 3495 if (!io_mapping_init_wc(&dev_priv->ggtt.iomap, 3496 dev_priv->ggtt.gmadr.start, 3497 dev_priv->ggtt.mappable_end)) { 3498 ret = -EIO; 3499 goto out_gtt_cleanup; 3500 } 3501 3502 ggtt->mtrr = arch_phys_wc_add(ggtt->gmadr.start, ggtt->mappable_end); 3503 3504 /* 3505 * Initialise stolen early so that we may reserve preallocated 3506 * objects for the BIOS to KMS transition. 3507 */ 3508 ret = i915_gem_init_stolen(dev_priv); 3509 if (ret) 3510 goto out_gtt_cleanup; 3511 3512 return 0; 3513 3514 out_gtt_cleanup: 3515 ggtt->vm.cleanup(&ggtt->vm); 3516 return ret; 3517 } 3518 3519 int i915_ggtt_enable_hw(struct drm_i915_private *dev_priv) 3520 { 3521 if (INTEL_GEN(dev_priv) < 6 && !intel_enable_gtt()) 3522 return -EIO; 3523 3524 return 0; 3525 } 3526 3527 void i915_ggtt_enable_guc(struct drm_i915_private *i915) 3528 { 3529 GEM_BUG_ON(i915->ggtt.invalidate != gen6_ggtt_invalidate); 3530 3531 i915->ggtt.invalidate = guc_ggtt_invalidate; 3532 3533 i915_ggtt_invalidate(i915); 3534 } 3535 3536 void i915_ggtt_disable_guc(struct drm_i915_private *i915) 3537 { 3538 /* XXX Temporary pardon for error unload */ 3539 if (i915->ggtt.invalidate == gen6_ggtt_invalidate) 3540 return; 3541 3542 /* We should only be called after i915_ggtt_enable_guc() */ 3543 GEM_BUG_ON(i915->ggtt.invalidate != guc_ggtt_invalidate); 3544 3545 i915->ggtt.invalidate = gen6_ggtt_invalidate; 3546 3547 i915_ggtt_invalidate(i915); 3548 } 3549 3550 void i915_gem_restore_gtt_mappings(struct drm_i915_private *dev_priv) 3551 { 3552 struct i915_ggtt *ggtt = &dev_priv->ggtt; 3553 struct i915_vma *vma, *vn; 3554 3555 i915_check_and_clear_faults(dev_priv); 3556 3557 mutex_lock(&ggtt->vm.mutex); 3558 3559 /* First fill our portion of the GTT with scratch pages */ 3560 ggtt->vm.clear_range(&ggtt->vm, 0, ggtt->vm.total); 3561 ggtt->vm.closed = true; /* skip rewriting PTE on VMA unbind */ 3562 3563 /* clflush objects bound into the GGTT and rebind them. */ 3564 list_for_each_entry_safe(vma, vn, &ggtt->vm.bound_list, vm_link) { 3565 struct drm_i915_gem_object *obj = vma->obj; 3566 3567 if (!(vma->flags & I915_VMA_GLOBAL_BIND)) 3568 continue; 3569 3570 mutex_unlock(&ggtt->vm.mutex); 3571 3572 if (!i915_vma_unbind(vma)) 3573 goto lock; 3574 3575 WARN_ON(i915_vma_bind(vma, 3576 obj ? obj->cache_level : 0, 3577 PIN_UPDATE)); 3578 if (obj) 3579 WARN_ON(i915_gem_object_set_to_gtt_domain(obj, false)); 3580 3581 lock: 3582 mutex_lock(&ggtt->vm.mutex); 3583 } 3584 3585 ggtt->vm.closed = false; 3586 i915_ggtt_invalidate(dev_priv); 3587 3588 mutex_unlock(&ggtt->vm.mutex); 3589 3590 if (INTEL_GEN(dev_priv) >= 8) { 3591 struct intel_ppat *ppat = &dev_priv->ppat; 3592 3593 bitmap_set(ppat->dirty, 0, ppat->max_entries); 3594 dev_priv->ppat.update_hw(dev_priv); 3595 return; 3596 } 3597 } 3598 3599 static struct scatterlist * 3600 rotate_pages(struct drm_i915_gem_object *obj, unsigned int offset, 3601 unsigned int width, unsigned int height, 3602 unsigned int stride, 3603 struct sg_table *st, struct scatterlist *sg) 3604 { 3605 unsigned int column, row; 3606 unsigned int src_idx; 3607 3608 for (column = 0; column < width; column++) { 3609 src_idx = stride * (height - 1) + column + offset; 3610 for (row = 0; row < height; row++) { 3611 st->nents++; 3612 /* We don't need the pages, but need to initialize 3613 * the entries so the sg list can be happily traversed. 3614 * The only thing we need are DMA addresses. 3615 */ 3616 sg_set_page(sg, NULL, I915_GTT_PAGE_SIZE, 0); 3617 sg_dma_address(sg) = 3618 i915_gem_object_get_dma_address(obj, src_idx); 3619 sg_dma_len(sg) = I915_GTT_PAGE_SIZE; 3620 sg = sg_next(sg); 3621 src_idx -= stride; 3622 } 3623 } 3624 3625 return sg; 3626 } 3627 3628 static noinline struct sg_table * 3629 intel_rotate_pages(struct intel_rotation_info *rot_info, 3630 struct drm_i915_gem_object *obj) 3631 { 3632 unsigned int size = intel_rotation_info_size(rot_info); 3633 struct sg_table *st; 3634 struct scatterlist *sg; 3635 int ret = -ENOMEM; 3636 int i; 3637 3638 /* Allocate target SG list. */ 3639 st = kmalloc(sizeof(*st), GFP_KERNEL); 3640 if (!st) 3641 goto err_st_alloc; 3642 3643 ret = sg_alloc_table(st, size, GFP_KERNEL); 3644 if (ret) 3645 goto err_sg_alloc; 3646 3647 st->nents = 0; 3648 sg = st->sgl; 3649 3650 for (i = 0 ; i < ARRAY_SIZE(rot_info->plane); i++) { 3651 sg = rotate_pages(obj, rot_info->plane[i].offset, 3652 rot_info->plane[i].width, rot_info->plane[i].height, 3653 rot_info->plane[i].stride, st, sg); 3654 } 3655 3656 return st; 3657 3658 err_sg_alloc: 3659 kfree(st); 3660 err_st_alloc: 3661 3662 DRM_DEBUG_DRIVER("Failed to create rotated mapping for object size %zu! (%ux%u tiles, %u pages)\n", 3663 obj->base.size, rot_info->plane[0].width, rot_info->plane[0].height, size); 3664 3665 return ERR_PTR(ret); 3666 } 3667 3668 static struct scatterlist * 3669 remap_pages(struct drm_i915_gem_object *obj, unsigned int offset, 3670 unsigned int width, unsigned int height, 3671 unsigned int stride, 3672 struct sg_table *st, struct scatterlist *sg) 3673 { 3674 unsigned int row; 3675 3676 for (row = 0; row < height; row++) { 3677 unsigned int left = width * I915_GTT_PAGE_SIZE; 3678 3679 while (left) { 3680 dma_addr_t addr; 3681 unsigned int length; 3682 3683 /* We don't need the pages, but need to initialize 3684 * the entries so the sg list can be happily traversed. 3685 * The only thing we need are DMA addresses. 3686 */ 3687 3688 addr = i915_gem_object_get_dma_address_len(obj, offset, &length); 3689 3690 length = min(left, length); 3691 3692 st->nents++; 3693 3694 sg_set_page(sg, NULL, length, 0); 3695 sg_dma_address(sg) = addr; 3696 sg_dma_len(sg) = length; 3697 sg = sg_next(sg); 3698 3699 offset += length / I915_GTT_PAGE_SIZE; 3700 left -= length; 3701 } 3702 3703 offset += stride - width; 3704 } 3705 3706 return sg; 3707 } 3708 3709 static noinline struct sg_table * 3710 intel_remap_pages(struct intel_remapped_info *rem_info, 3711 struct drm_i915_gem_object *obj) 3712 { 3713 unsigned int size = intel_remapped_info_size(rem_info); 3714 struct sg_table *st; 3715 struct scatterlist *sg; 3716 int ret = -ENOMEM; 3717 int i; 3718 3719 /* Allocate target SG list. */ 3720 st = kmalloc(sizeof(*st), GFP_KERNEL); 3721 if (!st) 3722 goto err_st_alloc; 3723 3724 ret = sg_alloc_table(st, size, GFP_KERNEL); 3725 if (ret) 3726 goto err_sg_alloc; 3727 3728 st->nents = 0; 3729 sg = st->sgl; 3730 3731 for (i = 0 ; i < ARRAY_SIZE(rem_info->plane); i++) { 3732 sg = remap_pages(obj, rem_info->plane[i].offset, 3733 rem_info->plane[i].width, rem_info->plane[i].height, 3734 rem_info->plane[i].stride, st, sg); 3735 } 3736 3737 i915_sg_trim(st); 3738 3739 return st; 3740 3741 err_sg_alloc: 3742 kfree(st); 3743 err_st_alloc: 3744 3745 DRM_DEBUG_DRIVER("Failed to create remapped mapping for object size %zu! (%ux%u tiles, %u pages)\n", 3746 obj->base.size, rem_info->plane[0].width, rem_info->plane[0].height, size); 3747 3748 return ERR_PTR(ret); 3749 } 3750 3751 static noinline struct sg_table * 3752 intel_partial_pages(const struct i915_ggtt_view *view, 3753 struct drm_i915_gem_object *obj) 3754 { 3755 struct sg_table *st; 3756 struct scatterlist *sg, *iter; 3757 unsigned int count = view->partial.size; 3758 unsigned int offset; 3759 int ret = -ENOMEM; 3760 3761 st = kmalloc(sizeof(*st), GFP_KERNEL); 3762 if (!st) 3763 goto err_st_alloc; 3764 3765 ret = sg_alloc_table(st, count, GFP_KERNEL); 3766 if (ret) 3767 goto err_sg_alloc; 3768 3769 iter = i915_gem_object_get_sg(obj, view->partial.offset, &offset); 3770 GEM_BUG_ON(!iter); 3771 3772 sg = st->sgl; 3773 st->nents = 0; 3774 do { 3775 unsigned int len; 3776 3777 len = min(iter->length - (offset << PAGE_SHIFT), 3778 count << PAGE_SHIFT); 3779 sg_set_page(sg, NULL, len, 0); 3780 sg_dma_address(sg) = 3781 sg_dma_address(iter) + (offset << PAGE_SHIFT); 3782 sg_dma_len(sg) = len; 3783 3784 st->nents++; 3785 count -= len >> PAGE_SHIFT; 3786 if (count == 0) { 3787 sg_mark_end(sg); 3788 i915_sg_trim(st); /* Drop any unused tail entries. */ 3789 3790 return st; 3791 } 3792 3793 sg = __sg_next(sg); 3794 iter = __sg_next(iter); 3795 offset = 0; 3796 } while (1); 3797 3798 err_sg_alloc: 3799 kfree(st); 3800 err_st_alloc: 3801 return ERR_PTR(ret); 3802 } 3803 3804 static int 3805 i915_get_ggtt_vma_pages(struct i915_vma *vma) 3806 { 3807 int ret; 3808 3809 /* The vma->pages are only valid within the lifespan of the borrowed 3810 * obj->mm.pages. When the obj->mm.pages sg_table is regenerated, so 3811 * must be the vma->pages. A simple rule is that vma->pages must only 3812 * be accessed when the obj->mm.pages are pinned. 3813 */ 3814 GEM_BUG_ON(!i915_gem_object_has_pinned_pages(vma->obj)); 3815 3816 switch (vma->ggtt_view.type) { 3817 default: 3818 GEM_BUG_ON(vma->ggtt_view.type); 3819 /* fall through */ 3820 case I915_GGTT_VIEW_NORMAL: 3821 vma->pages = vma->obj->mm.pages; 3822 return 0; 3823 3824 case I915_GGTT_VIEW_ROTATED: 3825 vma->pages = 3826 intel_rotate_pages(&vma->ggtt_view.rotated, vma->obj); 3827 break; 3828 3829 case I915_GGTT_VIEW_REMAPPED: 3830 vma->pages = 3831 intel_remap_pages(&vma->ggtt_view.remapped, vma->obj); 3832 break; 3833 3834 case I915_GGTT_VIEW_PARTIAL: 3835 vma->pages = intel_partial_pages(&vma->ggtt_view, vma->obj); 3836 break; 3837 } 3838 3839 ret = 0; 3840 if (IS_ERR(vma->pages)) { 3841 ret = PTR_ERR(vma->pages); 3842 vma->pages = NULL; 3843 DRM_ERROR("Failed to get pages for VMA view type %u (%d)!\n", 3844 vma->ggtt_view.type, ret); 3845 } 3846 return ret; 3847 } 3848 3849 /** 3850 * i915_gem_gtt_reserve - reserve a node in an address_space (GTT) 3851 * @vm: the &struct i915_address_space 3852 * @node: the &struct drm_mm_node (typically i915_vma.mode) 3853 * @size: how much space to allocate inside the GTT, 3854 * must be #I915_GTT_PAGE_SIZE aligned 3855 * @offset: where to insert inside the GTT, 3856 * must be #I915_GTT_MIN_ALIGNMENT aligned, and the node 3857 * (@offset + @size) must fit within the address space 3858 * @color: color to apply to node, if this node is not from a VMA, 3859 * color must be #I915_COLOR_UNEVICTABLE 3860 * @flags: control search and eviction behaviour 3861 * 3862 * i915_gem_gtt_reserve() tries to insert the @node at the exact @offset inside 3863 * the address space (using @size and @color). If the @node does not fit, it 3864 * tries to evict any overlapping nodes from the GTT, including any 3865 * neighbouring nodes if the colors do not match (to ensure guard pages between 3866 * differing domains). See i915_gem_evict_for_node() for the gory details 3867 * on the eviction algorithm. #PIN_NONBLOCK may used to prevent waiting on 3868 * evicting active overlapping objects, and any overlapping node that is pinned 3869 * or marked as unevictable will also result in failure. 3870 * 3871 * Returns: 0 on success, -ENOSPC if no suitable hole is found, -EINTR if 3872 * asked to wait for eviction and interrupted. 3873 */ 3874 int i915_gem_gtt_reserve(struct i915_address_space *vm, 3875 struct drm_mm_node *node, 3876 u64 size, u64 offset, unsigned long color, 3877 unsigned int flags) 3878 { 3879 int err; 3880 3881 GEM_BUG_ON(!size); 3882 GEM_BUG_ON(!IS_ALIGNED(size, I915_GTT_PAGE_SIZE)); 3883 GEM_BUG_ON(!IS_ALIGNED(offset, I915_GTT_MIN_ALIGNMENT)); 3884 GEM_BUG_ON(range_overflows(offset, size, vm->total)); 3885 GEM_BUG_ON(vm == &vm->i915->mm.aliasing_ppgtt->vm); 3886 GEM_BUG_ON(drm_mm_node_allocated(node)); 3887 3888 node->size = size; 3889 node->start = offset; 3890 node->color = color; 3891 3892 err = drm_mm_reserve_node(&vm->mm, node); 3893 if (err != -ENOSPC) 3894 return err; 3895 3896 if (flags & PIN_NOEVICT) 3897 return -ENOSPC; 3898 3899 err = i915_gem_evict_for_node(vm, node, flags); 3900 if (err == 0) 3901 err = drm_mm_reserve_node(&vm->mm, node); 3902 3903 return err; 3904 } 3905 3906 static u64 random_offset(u64 start, u64 end, u64 len, u64 align) 3907 { 3908 u64 range, addr; 3909 3910 GEM_BUG_ON(range_overflows(start, len, end)); 3911 GEM_BUG_ON(round_up(start, align) > round_down(end - len, align)); 3912 3913 range = round_down(end - len, align) - round_up(start, align); 3914 if (range) { 3915 if (sizeof(unsigned long) == sizeof(u64)) { 3916 addr = get_random_long(); 3917 } else { 3918 addr = get_random_int(); 3919 if (range > U32_MAX) { 3920 addr <<= 32; 3921 addr |= get_random_int(); 3922 } 3923 } 3924 div64_u64_rem(addr, range, &addr); 3925 start += addr; 3926 } 3927 3928 return round_up(start, align); 3929 } 3930 3931 /** 3932 * i915_gem_gtt_insert - insert a node into an address_space (GTT) 3933 * @vm: the &struct i915_address_space 3934 * @node: the &struct drm_mm_node (typically i915_vma.node) 3935 * @size: how much space to allocate inside the GTT, 3936 * must be #I915_GTT_PAGE_SIZE aligned 3937 * @alignment: required alignment of starting offset, may be 0 but 3938 * if specified, this must be a power-of-two and at least 3939 * #I915_GTT_MIN_ALIGNMENT 3940 * @color: color to apply to node 3941 * @start: start of any range restriction inside GTT (0 for all), 3942 * must be #I915_GTT_PAGE_SIZE aligned 3943 * @end: end of any range restriction inside GTT (U64_MAX for all), 3944 * must be #I915_GTT_PAGE_SIZE aligned if not U64_MAX 3945 * @flags: control search and eviction behaviour 3946 * 3947 * i915_gem_gtt_insert() first searches for an available hole into which 3948 * is can insert the node. The hole address is aligned to @alignment and 3949 * its @size must then fit entirely within the [@start, @end] bounds. The 3950 * nodes on either side of the hole must match @color, or else a guard page 3951 * will be inserted between the two nodes (or the node evicted). If no 3952 * suitable hole is found, first a victim is randomly selected and tested 3953 * for eviction, otherwise then the LRU list of objects within the GTT 3954 * is scanned to find the first set of replacement nodes to create the hole. 3955 * Those old overlapping nodes are evicted from the GTT (and so must be 3956 * rebound before any future use). Any node that is currently pinned cannot 3957 * be evicted (see i915_vma_pin()). Similar if the node's VMA is currently 3958 * active and #PIN_NONBLOCK is specified, that node is also skipped when 3959 * searching for an eviction candidate. See i915_gem_evict_something() for 3960 * the gory details on the eviction algorithm. 3961 * 3962 * Returns: 0 on success, -ENOSPC if no suitable hole is found, -EINTR if 3963 * asked to wait for eviction and interrupted. 3964 */ 3965 int i915_gem_gtt_insert(struct i915_address_space *vm, 3966 struct drm_mm_node *node, 3967 u64 size, u64 alignment, unsigned long color, 3968 u64 start, u64 end, unsigned int flags) 3969 { 3970 enum drm_mm_insert_mode mode; 3971 u64 offset; 3972 int err; 3973 3974 lockdep_assert_held(&vm->i915->drm.struct_mutex); 3975 GEM_BUG_ON(!size); 3976 GEM_BUG_ON(!IS_ALIGNED(size, I915_GTT_PAGE_SIZE)); 3977 GEM_BUG_ON(alignment && !is_power_of_2(alignment)); 3978 GEM_BUG_ON(alignment && !IS_ALIGNED(alignment, I915_GTT_MIN_ALIGNMENT)); 3979 GEM_BUG_ON(start >= end); 3980 GEM_BUG_ON(start > 0 && !IS_ALIGNED(start, I915_GTT_PAGE_SIZE)); 3981 GEM_BUG_ON(end < U64_MAX && !IS_ALIGNED(end, I915_GTT_PAGE_SIZE)); 3982 GEM_BUG_ON(vm == &vm->i915->mm.aliasing_ppgtt->vm); 3983 GEM_BUG_ON(drm_mm_node_allocated(node)); 3984 3985 if (unlikely(range_overflows(start, size, end))) 3986 return -ENOSPC; 3987 3988 if (unlikely(round_up(start, alignment) > round_down(end - size, alignment))) 3989 return -ENOSPC; 3990 3991 mode = DRM_MM_INSERT_BEST; 3992 if (flags & PIN_HIGH) 3993 mode = DRM_MM_INSERT_HIGHEST; 3994 if (flags & PIN_MAPPABLE) 3995 mode = DRM_MM_INSERT_LOW; 3996 3997 /* We only allocate in PAGE_SIZE/GTT_PAGE_SIZE (4096) chunks, 3998 * so we know that we always have a minimum alignment of 4096. 3999 * The drm_mm range manager is optimised to return results 4000 * with zero alignment, so where possible use the optimal 4001 * path. 4002 */ 4003 BUILD_BUG_ON(I915_GTT_MIN_ALIGNMENT > I915_GTT_PAGE_SIZE); 4004 if (alignment <= I915_GTT_MIN_ALIGNMENT) 4005 alignment = 0; 4006 4007 err = drm_mm_insert_node_in_range(&vm->mm, node, 4008 size, alignment, color, 4009 start, end, mode); 4010 if (err != -ENOSPC) 4011 return err; 4012 4013 if (mode & DRM_MM_INSERT_ONCE) { 4014 err = drm_mm_insert_node_in_range(&vm->mm, node, 4015 size, alignment, color, 4016 start, end, 4017 DRM_MM_INSERT_BEST); 4018 if (err != -ENOSPC) 4019 return err; 4020 } 4021 4022 if (flags & PIN_NOEVICT) 4023 return -ENOSPC; 4024 4025 /* No free space, pick a slot at random. 4026 * 4027 * There is a pathological case here using a GTT shared between 4028 * mmap and GPU (i.e. ggtt/aliasing_ppgtt but not full-ppgtt): 4029 * 4030 * |<-- 256 MiB aperture -->||<-- 1792 MiB unmappable -->| 4031 * (64k objects) (448k objects) 4032 * 4033 * Now imagine that the eviction LRU is ordered top-down (just because 4034 * pathology meets real life), and that we need to evict an object to 4035 * make room inside the aperture. The eviction scan then has to walk 4036 * the 448k list before it finds one within range. And now imagine that 4037 * it has to search for a new hole between every byte inside the memcpy, 4038 * for several simultaneous clients. 4039 * 4040 * On a full-ppgtt system, if we have run out of available space, there 4041 * will be lots and lots of objects in the eviction list! Again, 4042 * searching that LRU list may be slow if we are also applying any 4043 * range restrictions (e.g. restriction to low 4GiB) and so, for 4044 * simplicity and similarilty between different GTT, try the single 4045 * random replacement first. 4046 */ 4047 offset = random_offset(start, end, 4048 size, alignment ?: I915_GTT_MIN_ALIGNMENT); 4049 err = i915_gem_gtt_reserve(vm, node, size, offset, color, flags); 4050 if (err != -ENOSPC) 4051 return err; 4052 4053 /* Randomly selected placement is pinned, do a search */ 4054 err = i915_gem_evict_something(vm, size, alignment, color, 4055 start, end, flags); 4056 if (err) 4057 return err; 4058 4059 return drm_mm_insert_node_in_range(&vm->mm, node, 4060 size, alignment, color, 4061 start, end, DRM_MM_INSERT_EVICT); 4062 } 4063 4064 #if IS_ENABLED(CONFIG_DRM_I915_SELFTEST) 4065 #include "selftests/mock_gtt.c" 4066 #include "selftests/i915_gem_gtt.c" 4067 #endif 4068