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