1 // SPDX-License-Identifier: MIT 2 /* 3 * Copyright © 2020 Intel Corporation 4 */ 5 6 #include <linux/stop_machine.h> 7 8 #include <asm/set_memory.h> 9 #include <asm/smp.h> 10 11 #include <drm/i915_drm.h> 12 13 #include "intel_gt.h" 14 #include "i915_drv.h" 15 #include "i915_scatterlist.h" 16 #include "i915_vgpu.h" 17 18 #include "intel_gtt.h" 19 20 static int 21 i915_get_ggtt_vma_pages(struct i915_vma *vma); 22 23 static void i915_ggtt_color_adjust(const struct drm_mm_node *node, 24 unsigned long color, 25 u64 *start, 26 u64 *end) 27 { 28 if (i915_node_color_differs(node, color)) 29 *start += I915_GTT_PAGE_SIZE; 30 31 /* 32 * Also leave a space between the unallocated reserved node after the 33 * GTT and any objects within the GTT, i.e. we use the color adjustment 34 * to insert a guard page to prevent prefetches crossing over the 35 * GTT boundary. 36 */ 37 node = list_next_entry(node, node_list); 38 if (node->color != color) 39 *end -= I915_GTT_PAGE_SIZE; 40 } 41 42 static int ggtt_init_hw(struct i915_ggtt *ggtt) 43 { 44 struct drm_i915_private *i915 = ggtt->vm.i915; 45 46 i915_address_space_init(&ggtt->vm, VM_CLASS_GGTT); 47 48 ggtt->vm.is_ggtt = true; 49 50 /* Only VLV supports read-only GGTT mappings */ 51 ggtt->vm.has_read_only = IS_VALLEYVIEW(i915); 52 53 if (!HAS_LLC(i915) && !HAS_PPGTT(i915)) 54 ggtt->vm.mm.color_adjust = i915_ggtt_color_adjust; 55 56 if (ggtt->mappable_end) { 57 if (!io_mapping_init_wc(&ggtt->iomap, 58 ggtt->gmadr.start, 59 ggtt->mappable_end)) { 60 ggtt->vm.cleanup(&ggtt->vm); 61 return -EIO; 62 } 63 64 ggtt->mtrr = arch_phys_wc_add(ggtt->gmadr.start, 65 ggtt->mappable_end); 66 } 67 68 intel_ggtt_init_fences(ggtt); 69 70 return 0; 71 } 72 73 /** 74 * i915_ggtt_init_hw - Initialize GGTT hardware 75 * @i915: i915 device 76 */ 77 int i915_ggtt_init_hw(struct drm_i915_private *i915) 78 { 79 int ret; 80 81 stash_init(&i915->mm.wc_stash); 82 83 /* 84 * Note that we use page colouring to enforce a guard page at the 85 * end of the address space. This is required as the CS may prefetch 86 * beyond the end of the batch buffer, across the page boundary, 87 * and beyond the end of the GTT if we do not provide a guard. 88 */ 89 ret = ggtt_init_hw(&i915->ggtt); 90 if (ret) 91 return ret; 92 93 return 0; 94 } 95 96 /* 97 * Certain Gen5 chipsets require require idling the GPU before 98 * unmapping anything from the GTT when VT-d is enabled. 99 */ 100 static bool needs_idle_maps(struct drm_i915_private *i915) 101 { 102 /* 103 * Query intel_iommu to see if we need the workaround. Presumably that 104 * was loaded first. 105 */ 106 return IS_GEN(i915, 5) && IS_MOBILE(i915) && intel_vtd_active(); 107 } 108 109 void i915_ggtt_suspend(struct i915_ggtt *ggtt) 110 { 111 struct i915_vma *vma, *vn; 112 int open; 113 114 mutex_lock(&ggtt->vm.mutex); 115 116 /* Skip rewriting PTE on VMA unbind. */ 117 open = atomic_xchg(&ggtt->vm.open, 0); 118 119 list_for_each_entry_safe(vma, vn, &ggtt->vm.bound_list, vm_link) { 120 GEM_BUG_ON(!drm_mm_node_allocated(&vma->node)); 121 i915_vma_wait_for_bind(vma); 122 123 if (i915_vma_is_pinned(vma)) 124 continue; 125 126 if (!i915_vma_is_bound(vma, I915_VMA_GLOBAL_BIND)) { 127 __i915_vma_evict(vma); 128 drm_mm_remove_node(&vma->node); 129 } 130 } 131 132 ggtt->vm.clear_range(&ggtt->vm, 0, ggtt->vm.total); 133 ggtt->invalidate(ggtt); 134 atomic_set(&ggtt->vm.open, open); 135 136 mutex_unlock(&ggtt->vm.mutex); 137 138 intel_gt_check_and_clear_faults(ggtt->vm.gt); 139 } 140 141 void gen6_ggtt_invalidate(struct i915_ggtt *ggtt) 142 { 143 struct intel_uncore *uncore = ggtt->vm.gt->uncore; 144 145 spin_lock_irq(&uncore->lock); 146 intel_uncore_write_fw(uncore, GFX_FLSH_CNTL_GEN6, GFX_FLSH_CNTL_EN); 147 intel_uncore_read_fw(uncore, GFX_FLSH_CNTL_GEN6); 148 spin_unlock_irq(&uncore->lock); 149 } 150 151 static void gen8_ggtt_invalidate(struct i915_ggtt *ggtt) 152 { 153 struct intel_uncore *uncore = ggtt->vm.gt->uncore; 154 155 /* 156 * Note that as an uncached mmio write, this will flush the 157 * WCB of the writes into the GGTT before it triggers the invalidate. 158 */ 159 intel_uncore_write_fw(uncore, GFX_FLSH_CNTL_GEN6, GFX_FLSH_CNTL_EN); 160 } 161 162 static void guc_ggtt_invalidate(struct i915_ggtt *ggtt) 163 { 164 struct intel_uncore *uncore = ggtt->vm.gt->uncore; 165 struct drm_i915_private *i915 = ggtt->vm.i915; 166 167 gen8_ggtt_invalidate(ggtt); 168 169 if (INTEL_GEN(i915) >= 12) 170 intel_uncore_write_fw(uncore, GEN12_GUC_TLB_INV_CR, 171 GEN12_GUC_TLB_INV_CR_INVALIDATE); 172 else 173 intel_uncore_write_fw(uncore, GEN8_GTCR, GEN8_GTCR_INVALIDATE); 174 } 175 176 static void gmch_ggtt_invalidate(struct i915_ggtt *ggtt) 177 { 178 intel_gtt_chipset_flush(); 179 } 180 181 static u64 gen8_ggtt_pte_encode(dma_addr_t addr, 182 enum i915_cache_level level, 183 u32 flags) 184 { 185 return addr | _PAGE_PRESENT; 186 } 187 188 static void gen8_set_pte(void __iomem *addr, gen8_pte_t pte) 189 { 190 writeq(pte, addr); 191 } 192 193 static void gen8_ggtt_insert_page(struct i915_address_space *vm, 194 dma_addr_t addr, 195 u64 offset, 196 enum i915_cache_level level, 197 u32 unused) 198 { 199 struct i915_ggtt *ggtt = i915_vm_to_ggtt(vm); 200 gen8_pte_t __iomem *pte = 201 (gen8_pte_t __iomem *)ggtt->gsm + offset / I915_GTT_PAGE_SIZE; 202 203 gen8_set_pte(pte, gen8_ggtt_pte_encode(addr, level, 0)); 204 205 ggtt->invalidate(ggtt); 206 } 207 208 static void gen8_ggtt_insert_entries(struct i915_address_space *vm, 209 struct i915_vma *vma, 210 enum i915_cache_level level, 211 u32 flags) 212 { 213 const gen8_pte_t pte_encode = gen8_ggtt_pte_encode(0, level, 0); 214 struct i915_ggtt *ggtt = i915_vm_to_ggtt(vm); 215 gen8_pte_t __iomem *gte; 216 gen8_pte_t __iomem *end; 217 struct sgt_iter iter; 218 dma_addr_t addr; 219 220 /* 221 * Note that we ignore PTE_READ_ONLY here. The caller must be careful 222 * not to allow the user to override access to a read only page. 223 */ 224 225 gte = (gen8_pte_t __iomem *)ggtt->gsm; 226 gte += vma->node.start / I915_GTT_PAGE_SIZE; 227 end = gte + vma->node.size / I915_GTT_PAGE_SIZE; 228 229 for_each_sgt_daddr(addr, iter, vma->pages) 230 gen8_set_pte(gte++, pte_encode | addr); 231 GEM_BUG_ON(gte > end); 232 233 /* Fill the allocated but "unused" space beyond the end of the buffer */ 234 while (gte < end) 235 gen8_set_pte(gte++, vm->scratch[0].encode); 236 237 /* 238 * We want to flush the TLBs only after we're certain all the PTE 239 * updates have finished. 240 */ 241 ggtt->invalidate(ggtt); 242 } 243 244 static void gen6_ggtt_insert_page(struct i915_address_space *vm, 245 dma_addr_t addr, 246 u64 offset, 247 enum i915_cache_level level, 248 u32 flags) 249 { 250 struct i915_ggtt *ggtt = i915_vm_to_ggtt(vm); 251 gen6_pte_t __iomem *pte = 252 (gen6_pte_t __iomem *)ggtt->gsm + offset / I915_GTT_PAGE_SIZE; 253 254 iowrite32(vm->pte_encode(addr, level, flags), pte); 255 256 ggtt->invalidate(ggtt); 257 } 258 259 /* 260 * Binds an object into the global gtt with the specified cache level. 261 * The object will be accessible to the GPU via commands whose operands 262 * reference offsets within the global GTT as well as accessible by the GPU 263 * through the GMADR mapped BAR (i915->mm.gtt->gtt). 264 */ 265 static void gen6_ggtt_insert_entries(struct i915_address_space *vm, 266 struct i915_vma *vma, 267 enum i915_cache_level level, 268 u32 flags) 269 { 270 struct i915_ggtt *ggtt = i915_vm_to_ggtt(vm); 271 gen6_pte_t __iomem *gte; 272 gen6_pte_t __iomem *end; 273 struct sgt_iter iter; 274 dma_addr_t addr; 275 276 gte = (gen6_pte_t __iomem *)ggtt->gsm; 277 gte += vma->node.start / I915_GTT_PAGE_SIZE; 278 end = gte + vma->node.size / I915_GTT_PAGE_SIZE; 279 280 for_each_sgt_daddr(addr, iter, vma->pages) 281 iowrite32(vm->pte_encode(addr, level, flags), gte++); 282 GEM_BUG_ON(gte > end); 283 284 /* Fill the allocated but "unused" space beyond the end of the buffer */ 285 while (gte < end) 286 iowrite32(vm->scratch[0].encode, gte++); 287 288 /* 289 * We want to flush the TLBs only after we're certain all the PTE 290 * updates have finished. 291 */ 292 ggtt->invalidate(ggtt); 293 } 294 295 static void nop_clear_range(struct i915_address_space *vm, 296 u64 start, u64 length) 297 { 298 } 299 300 static void gen8_ggtt_clear_range(struct i915_address_space *vm, 301 u64 start, u64 length) 302 { 303 struct i915_ggtt *ggtt = i915_vm_to_ggtt(vm); 304 unsigned int first_entry = start / I915_GTT_PAGE_SIZE; 305 unsigned int num_entries = length / I915_GTT_PAGE_SIZE; 306 const gen8_pte_t scratch_pte = vm->scratch[0].encode; 307 gen8_pte_t __iomem *gtt_base = 308 (gen8_pte_t __iomem *)ggtt->gsm + first_entry; 309 const int max_entries = ggtt_total_entries(ggtt) - first_entry; 310 int i; 311 312 if (WARN(num_entries > max_entries, 313 "First entry = %d; Num entries = %d (max=%d)\n", 314 first_entry, num_entries, max_entries)) 315 num_entries = max_entries; 316 317 for (i = 0; i < num_entries; i++) 318 gen8_set_pte(>t_base[i], scratch_pte); 319 } 320 321 static void bxt_vtd_ggtt_wa(struct i915_address_space *vm) 322 { 323 /* 324 * Make sure the internal GAM fifo has been cleared of all GTT 325 * writes before exiting stop_machine(). This guarantees that 326 * any aperture accesses waiting to start in another process 327 * cannot back up behind the GTT writes causing a hang. 328 * The register can be any arbitrary GAM register. 329 */ 330 intel_uncore_posting_read_fw(vm->gt->uncore, GFX_FLSH_CNTL_GEN6); 331 } 332 333 struct insert_page { 334 struct i915_address_space *vm; 335 dma_addr_t addr; 336 u64 offset; 337 enum i915_cache_level level; 338 }; 339 340 static int bxt_vtd_ggtt_insert_page__cb(void *_arg) 341 { 342 struct insert_page *arg = _arg; 343 344 gen8_ggtt_insert_page(arg->vm, arg->addr, arg->offset, arg->level, 0); 345 bxt_vtd_ggtt_wa(arg->vm); 346 347 return 0; 348 } 349 350 static void bxt_vtd_ggtt_insert_page__BKL(struct i915_address_space *vm, 351 dma_addr_t addr, 352 u64 offset, 353 enum i915_cache_level level, 354 u32 unused) 355 { 356 struct insert_page arg = { vm, addr, offset, level }; 357 358 stop_machine(bxt_vtd_ggtt_insert_page__cb, &arg, NULL); 359 } 360 361 struct insert_entries { 362 struct i915_address_space *vm; 363 struct i915_vma *vma; 364 enum i915_cache_level level; 365 u32 flags; 366 }; 367 368 static int bxt_vtd_ggtt_insert_entries__cb(void *_arg) 369 { 370 struct insert_entries *arg = _arg; 371 372 gen8_ggtt_insert_entries(arg->vm, arg->vma, arg->level, arg->flags); 373 bxt_vtd_ggtt_wa(arg->vm); 374 375 return 0; 376 } 377 378 static void bxt_vtd_ggtt_insert_entries__BKL(struct i915_address_space *vm, 379 struct i915_vma *vma, 380 enum i915_cache_level level, 381 u32 flags) 382 { 383 struct insert_entries arg = { vm, vma, level, flags }; 384 385 stop_machine(bxt_vtd_ggtt_insert_entries__cb, &arg, NULL); 386 } 387 388 static void gen6_ggtt_clear_range(struct i915_address_space *vm, 389 u64 start, u64 length) 390 { 391 struct i915_ggtt *ggtt = i915_vm_to_ggtt(vm); 392 unsigned int first_entry = start / I915_GTT_PAGE_SIZE; 393 unsigned int num_entries = length / I915_GTT_PAGE_SIZE; 394 gen6_pte_t scratch_pte, __iomem *gtt_base = 395 (gen6_pte_t __iomem *)ggtt->gsm + first_entry; 396 const int max_entries = ggtt_total_entries(ggtt) - first_entry; 397 int i; 398 399 if (WARN(num_entries > max_entries, 400 "First entry = %d; Num entries = %d (max=%d)\n", 401 first_entry, num_entries, max_entries)) 402 num_entries = max_entries; 403 404 scratch_pte = vm->scratch[0].encode; 405 for (i = 0; i < num_entries; i++) 406 iowrite32(scratch_pte, >t_base[i]); 407 } 408 409 static void i915_ggtt_insert_page(struct i915_address_space *vm, 410 dma_addr_t addr, 411 u64 offset, 412 enum i915_cache_level cache_level, 413 u32 unused) 414 { 415 unsigned int flags = (cache_level == I915_CACHE_NONE) ? 416 AGP_USER_MEMORY : AGP_USER_CACHED_MEMORY; 417 418 intel_gtt_insert_page(addr, offset >> PAGE_SHIFT, flags); 419 } 420 421 static void i915_ggtt_insert_entries(struct i915_address_space *vm, 422 struct i915_vma *vma, 423 enum i915_cache_level cache_level, 424 u32 unused) 425 { 426 unsigned int flags = (cache_level == I915_CACHE_NONE) ? 427 AGP_USER_MEMORY : AGP_USER_CACHED_MEMORY; 428 429 intel_gtt_insert_sg_entries(vma->pages, vma->node.start >> PAGE_SHIFT, 430 flags); 431 } 432 433 static void i915_ggtt_clear_range(struct i915_address_space *vm, 434 u64 start, u64 length) 435 { 436 intel_gtt_clear_range(start >> PAGE_SHIFT, length >> PAGE_SHIFT); 437 } 438 439 static int ggtt_bind_vma(struct i915_vma *vma, 440 enum i915_cache_level cache_level, 441 u32 flags) 442 { 443 struct drm_i915_gem_object *obj = vma->obj; 444 u32 pte_flags; 445 446 if (i915_vma_is_bound(vma, ~flags & I915_VMA_BIND_MASK)) 447 return 0; 448 449 /* Applicable to VLV (gen8+ do not support RO in the GGTT) */ 450 pte_flags = 0; 451 if (i915_gem_object_is_readonly(obj)) 452 pte_flags |= PTE_READ_ONLY; 453 454 vma->vm->insert_entries(vma->vm, vma, cache_level, pte_flags); 455 vma->page_sizes.gtt = I915_GTT_PAGE_SIZE; 456 457 return 0; 458 } 459 460 static void ggtt_unbind_vma(struct i915_vma *vma) 461 { 462 vma->vm->clear_range(vma->vm, vma->node.start, vma->size); 463 } 464 465 static int ggtt_reserve_guc_top(struct i915_ggtt *ggtt) 466 { 467 u64 size; 468 int ret; 469 470 if (!intel_uc_uses_guc(&ggtt->vm.gt->uc)) 471 return 0; 472 473 GEM_BUG_ON(ggtt->vm.total <= GUC_GGTT_TOP); 474 size = ggtt->vm.total - GUC_GGTT_TOP; 475 476 ret = i915_gem_gtt_reserve(&ggtt->vm, &ggtt->uc_fw, size, 477 GUC_GGTT_TOP, I915_COLOR_UNEVICTABLE, 478 PIN_NOEVICT); 479 if (ret) 480 drm_dbg(&ggtt->vm.i915->drm, 481 "Failed to reserve top of GGTT for GuC\n"); 482 483 return ret; 484 } 485 486 static void ggtt_release_guc_top(struct i915_ggtt *ggtt) 487 { 488 if (drm_mm_node_allocated(&ggtt->uc_fw)) 489 drm_mm_remove_node(&ggtt->uc_fw); 490 } 491 492 static void cleanup_init_ggtt(struct i915_ggtt *ggtt) 493 { 494 ggtt_release_guc_top(ggtt); 495 if (drm_mm_node_allocated(&ggtt->error_capture)) 496 drm_mm_remove_node(&ggtt->error_capture); 497 mutex_destroy(&ggtt->error_mutex); 498 } 499 500 static int init_ggtt(struct i915_ggtt *ggtt) 501 { 502 /* 503 * Let GEM Manage all of the aperture. 504 * 505 * However, leave one page at the end still bound to the scratch page. 506 * There are a number of places where the hardware apparently prefetches 507 * past the end of the object, and we've seen multiple hangs with the 508 * GPU head pointer stuck in a batchbuffer bound at the last page of the 509 * aperture. One page should be enough to keep any prefetching inside 510 * of the aperture. 511 */ 512 unsigned long hole_start, hole_end; 513 struct drm_mm_node *entry; 514 int ret; 515 516 /* 517 * GuC requires all resources that we're sharing with it to be placed in 518 * non-WOPCM memory. If GuC is not present or not in use we still need a 519 * small bias as ring wraparound at offset 0 sometimes hangs. No idea 520 * why. 521 */ 522 ggtt->pin_bias = max_t(u32, I915_GTT_PAGE_SIZE, 523 intel_wopcm_guc_size(&ggtt->vm.i915->wopcm)); 524 525 ret = intel_vgt_balloon(ggtt); 526 if (ret) 527 return ret; 528 529 mutex_init(&ggtt->error_mutex); 530 if (ggtt->mappable_end) { 531 /* Reserve a mappable slot for our lockless error capture */ 532 ret = drm_mm_insert_node_in_range(&ggtt->vm.mm, 533 &ggtt->error_capture, 534 PAGE_SIZE, 0, 535 I915_COLOR_UNEVICTABLE, 536 0, ggtt->mappable_end, 537 DRM_MM_INSERT_LOW); 538 if (ret) 539 return ret; 540 } 541 542 /* 543 * The upper portion of the GuC address space has a sizeable hole 544 * (several MB) that is inaccessible by GuC. Reserve this range within 545 * GGTT as it can comfortably hold GuC/HuC firmware images. 546 */ 547 ret = ggtt_reserve_guc_top(ggtt); 548 if (ret) 549 goto err; 550 551 /* Clear any non-preallocated blocks */ 552 drm_mm_for_each_hole(entry, &ggtt->vm.mm, hole_start, hole_end) { 553 drm_dbg_kms(&ggtt->vm.i915->drm, 554 "clearing unused GTT space: [%lx, %lx]\n", 555 hole_start, hole_end); 556 ggtt->vm.clear_range(&ggtt->vm, hole_start, 557 hole_end - hole_start); 558 } 559 560 /* And finally clear the reserved guard page */ 561 ggtt->vm.clear_range(&ggtt->vm, ggtt->vm.total - PAGE_SIZE, PAGE_SIZE); 562 563 return 0; 564 565 err: 566 cleanup_init_ggtt(ggtt); 567 return ret; 568 } 569 570 static int aliasing_gtt_bind_vma(struct i915_vma *vma, 571 enum i915_cache_level cache_level, 572 u32 flags) 573 { 574 u32 pte_flags; 575 int ret; 576 577 /* Currently applicable only to VLV */ 578 pte_flags = 0; 579 if (i915_gem_object_is_readonly(vma->obj)) 580 pte_flags |= PTE_READ_ONLY; 581 582 if (flags & I915_VMA_LOCAL_BIND) { 583 struct i915_ppgtt *alias = i915_vm_to_ggtt(vma->vm)->alias; 584 585 if (flags & I915_VMA_ALLOC) { 586 ret = alias->vm.allocate_va_range(&alias->vm, 587 vma->node.start, 588 vma->size); 589 if (ret) 590 return ret; 591 592 set_bit(I915_VMA_ALLOC_BIT, __i915_vma_flags(vma)); 593 } 594 595 GEM_BUG_ON(!test_bit(I915_VMA_ALLOC_BIT, 596 __i915_vma_flags(vma))); 597 alias->vm.insert_entries(&alias->vm, vma, 598 cache_level, pte_flags); 599 } 600 601 if (flags & I915_VMA_GLOBAL_BIND) 602 vma->vm->insert_entries(vma->vm, vma, cache_level, pte_flags); 603 604 return 0; 605 } 606 607 static void aliasing_gtt_unbind_vma(struct i915_vma *vma) 608 { 609 if (i915_vma_is_bound(vma, I915_VMA_GLOBAL_BIND)) { 610 struct i915_address_space *vm = vma->vm; 611 612 vm->clear_range(vm, vma->node.start, vma->size); 613 } 614 615 if (test_and_clear_bit(I915_VMA_ALLOC_BIT, __i915_vma_flags(vma))) { 616 struct i915_address_space *vm = 617 &i915_vm_to_ggtt(vma->vm)->alias->vm; 618 619 vm->clear_range(vm, vma->node.start, vma->size); 620 } 621 } 622 623 static int init_aliasing_ppgtt(struct i915_ggtt *ggtt) 624 { 625 struct i915_ppgtt *ppgtt; 626 int err; 627 628 ppgtt = i915_ppgtt_create(ggtt->vm.gt); 629 if (IS_ERR(ppgtt)) 630 return PTR_ERR(ppgtt); 631 632 if (GEM_WARN_ON(ppgtt->vm.total < ggtt->vm.total)) { 633 err = -ENODEV; 634 goto err_ppgtt; 635 } 636 637 /* 638 * Note we only pre-allocate as far as the end of the global 639 * GTT. On 48b / 4-level page-tables, the difference is very, 640 * very significant! We have to preallocate as GVT/vgpu does 641 * not like the page directory disappearing. 642 */ 643 err = ppgtt->vm.allocate_va_range(&ppgtt->vm, 0, ggtt->vm.total); 644 if (err) 645 goto err_ppgtt; 646 647 ggtt->alias = ppgtt; 648 ggtt->vm.bind_async_flags |= ppgtt->vm.bind_async_flags; 649 650 GEM_BUG_ON(ggtt->vm.vma_ops.bind_vma != ggtt_bind_vma); 651 ggtt->vm.vma_ops.bind_vma = aliasing_gtt_bind_vma; 652 653 GEM_BUG_ON(ggtt->vm.vma_ops.unbind_vma != ggtt_unbind_vma); 654 ggtt->vm.vma_ops.unbind_vma = aliasing_gtt_unbind_vma; 655 656 return 0; 657 658 err_ppgtt: 659 i915_vm_put(&ppgtt->vm); 660 return err; 661 } 662 663 static void fini_aliasing_ppgtt(struct i915_ggtt *ggtt) 664 { 665 struct i915_ppgtt *ppgtt; 666 667 ppgtt = fetch_and_zero(&ggtt->alias); 668 if (!ppgtt) 669 return; 670 671 i915_vm_put(&ppgtt->vm); 672 673 ggtt->vm.vma_ops.bind_vma = ggtt_bind_vma; 674 ggtt->vm.vma_ops.unbind_vma = ggtt_unbind_vma; 675 } 676 677 int i915_init_ggtt(struct drm_i915_private *i915) 678 { 679 int ret; 680 681 ret = init_ggtt(&i915->ggtt); 682 if (ret) 683 return ret; 684 685 if (INTEL_PPGTT(i915) == INTEL_PPGTT_ALIASING) { 686 ret = init_aliasing_ppgtt(&i915->ggtt); 687 if (ret) 688 cleanup_init_ggtt(&i915->ggtt); 689 } 690 691 return 0; 692 } 693 694 static void ggtt_cleanup_hw(struct i915_ggtt *ggtt) 695 { 696 struct i915_vma *vma, *vn; 697 698 atomic_set(&ggtt->vm.open, 0); 699 700 rcu_barrier(); /* flush the RCU'ed__i915_vm_release */ 701 flush_workqueue(ggtt->vm.i915->wq); 702 703 mutex_lock(&ggtt->vm.mutex); 704 705 list_for_each_entry_safe(vma, vn, &ggtt->vm.bound_list, vm_link) 706 WARN_ON(__i915_vma_unbind(vma)); 707 708 if (drm_mm_node_allocated(&ggtt->error_capture)) 709 drm_mm_remove_node(&ggtt->error_capture); 710 mutex_destroy(&ggtt->error_mutex); 711 712 ggtt_release_guc_top(ggtt); 713 intel_vgt_deballoon(ggtt); 714 715 ggtt->vm.cleanup(&ggtt->vm); 716 717 mutex_unlock(&ggtt->vm.mutex); 718 i915_address_space_fini(&ggtt->vm); 719 720 arch_phys_wc_del(ggtt->mtrr); 721 722 if (ggtt->iomap.size) 723 io_mapping_fini(&ggtt->iomap); 724 } 725 726 /** 727 * i915_ggtt_driver_release - Clean up GGTT hardware initialization 728 * @i915: i915 device 729 */ 730 void i915_ggtt_driver_release(struct drm_i915_private *i915) 731 { 732 struct i915_ggtt *ggtt = &i915->ggtt; 733 struct pagevec *pvec; 734 735 fini_aliasing_ppgtt(ggtt); 736 737 intel_ggtt_fini_fences(ggtt); 738 ggtt_cleanup_hw(ggtt); 739 740 pvec = &i915->mm.wc_stash.pvec; 741 if (pvec->nr) { 742 set_pages_array_wb(pvec->pages, pvec->nr); 743 __pagevec_release(pvec); 744 } 745 } 746 747 static unsigned int gen6_get_total_gtt_size(u16 snb_gmch_ctl) 748 { 749 snb_gmch_ctl >>= SNB_GMCH_GGMS_SHIFT; 750 snb_gmch_ctl &= SNB_GMCH_GGMS_MASK; 751 return snb_gmch_ctl << 20; 752 } 753 754 static unsigned int gen8_get_total_gtt_size(u16 bdw_gmch_ctl) 755 { 756 bdw_gmch_ctl >>= BDW_GMCH_GGMS_SHIFT; 757 bdw_gmch_ctl &= BDW_GMCH_GGMS_MASK; 758 if (bdw_gmch_ctl) 759 bdw_gmch_ctl = 1 << bdw_gmch_ctl; 760 761 #ifdef CONFIG_X86_32 762 /* Limit 32b platforms to a 2GB GGTT: 4 << 20 / pte size * I915_GTT_PAGE_SIZE */ 763 if (bdw_gmch_ctl > 4) 764 bdw_gmch_ctl = 4; 765 #endif 766 767 return bdw_gmch_ctl << 20; 768 } 769 770 static unsigned int chv_get_total_gtt_size(u16 gmch_ctrl) 771 { 772 gmch_ctrl >>= SNB_GMCH_GGMS_SHIFT; 773 gmch_ctrl &= SNB_GMCH_GGMS_MASK; 774 775 if (gmch_ctrl) 776 return 1 << (20 + gmch_ctrl); 777 778 return 0; 779 } 780 781 static int ggtt_probe_common(struct i915_ggtt *ggtt, u64 size) 782 { 783 struct drm_i915_private *i915 = ggtt->vm.i915; 784 struct pci_dev *pdev = i915->drm.pdev; 785 phys_addr_t phys_addr; 786 int ret; 787 788 /* For Modern GENs the PTEs and register space are split in the BAR */ 789 phys_addr = pci_resource_start(pdev, 0) + pci_resource_len(pdev, 0) / 2; 790 791 /* 792 * On BXT+/CNL+ writes larger than 64 bit to the GTT pagetable range 793 * will be dropped. For WC mappings in general we have 64 byte burst 794 * writes when the WC buffer is flushed, so we can't use it, but have to 795 * resort to an uncached mapping. The WC issue is easily caught by the 796 * readback check when writing GTT PTE entries. 797 */ 798 if (IS_GEN9_LP(i915) || INTEL_GEN(i915) >= 10) 799 ggtt->gsm = ioremap(phys_addr, size); 800 else 801 ggtt->gsm = ioremap_wc(phys_addr, size); 802 if (!ggtt->gsm) { 803 drm_err(&i915->drm, "Failed to map the ggtt page table\n"); 804 return -ENOMEM; 805 } 806 807 ret = setup_scratch_page(&ggtt->vm, GFP_DMA32); 808 if (ret) { 809 drm_err(&i915->drm, "Scratch setup failed\n"); 810 /* iounmap will also get called at remove, but meh */ 811 iounmap(ggtt->gsm); 812 return ret; 813 } 814 815 ggtt->vm.scratch[0].encode = 816 ggtt->vm.pte_encode(px_dma(&ggtt->vm.scratch[0]), 817 I915_CACHE_NONE, 0); 818 819 return 0; 820 } 821 822 int ggtt_set_pages(struct i915_vma *vma) 823 { 824 int ret; 825 826 GEM_BUG_ON(vma->pages); 827 828 ret = i915_get_ggtt_vma_pages(vma); 829 if (ret) 830 return ret; 831 832 vma->page_sizes = vma->obj->mm.page_sizes; 833 834 return 0; 835 } 836 837 static void gen6_gmch_remove(struct i915_address_space *vm) 838 { 839 struct i915_ggtt *ggtt = i915_vm_to_ggtt(vm); 840 841 iounmap(ggtt->gsm); 842 cleanup_scratch_page(vm); 843 } 844 845 static struct resource pci_resource(struct pci_dev *pdev, int bar) 846 { 847 return (struct resource)DEFINE_RES_MEM(pci_resource_start(pdev, bar), 848 pci_resource_len(pdev, bar)); 849 } 850 851 static int gen8_gmch_probe(struct i915_ggtt *ggtt) 852 { 853 struct drm_i915_private *i915 = ggtt->vm.i915; 854 struct pci_dev *pdev = i915->drm.pdev; 855 unsigned int size; 856 u16 snb_gmch_ctl; 857 858 /* TODO: We're not aware of mappable constraints on gen8 yet */ 859 if (!IS_DGFX(i915)) { 860 ggtt->gmadr = pci_resource(pdev, 2); 861 ggtt->mappable_end = resource_size(&ggtt->gmadr); 862 } 863 864 pci_read_config_word(pdev, SNB_GMCH_CTRL, &snb_gmch_ctl); 865 if (IS_CHERRYVIEW(i915)) 866 size = chv_get_total_gtt_size(snb_gmch_ctl); 867 else 868 size = gen8_get_total_gtt_size(snb_gmch_ctl); 869 870 ggtt->vm.total = (size / sizeof(gen8_pte_t)) * I915_GTT_PAGE_SIZE; 871 ggtt->vm.cleanup = gen6_gmch_remove; 872 ggtt->vm.insert_page = gen8_ggtt_insert_page; 873 ggtt->vm.clear_range = nop_clear_range; 874 if (intel_scanout_needs_vtd_wa(i915)) 875 ggtt->vm.clear_range = gen8_ggtt_clear_range; 876 877 ggtt->vm.insert_entries = gen8_ggtt_insert_entries; 878 879 /* Serialize GTT updates with aperture access on BXT if VT-d is on. */ 880 if (intel_ggtt_update_needs_vtd_wa(i915) || 881 IS_CHERRYVIEW(i915) /* fails with concurrent use/update */) { 882 ggtt->vm.insert_entries = bxt_vtd_ggtt_insert_entries__BKL; 883 ggtt->vm.insert_page = bxt_vtd_ggtt_insert_page__BKL; 884 ggtt->vm.bind_async_flags = 885 I915_VMA_GLOBAL_BIND | I915_VMA_LOCAL_BIND; 886 } 887 888 ggtt->invalidate = gen8_ggtt_invalidate; 889 890 ggtt->vm.vma_ops.bind_vma = ggtt_bind_vma; 891 ggtt->vm.vma_ops.unbind_vma = ggtt_unbind_vma; 892 ggtt->vm.vma_ops.set_pages = ggtt_set_pages; 893 ggtt->vm.vma_ops.clear_pages = clear_pages; 894 895 ggtt->vm.pte_encode = gen8_ggtt_pte_encode; 896 897 setup_private_pat(ggtt->vm.gt->uncore); 898 899 return ggtt_probe_common(ggtt, size); 900 } 901 902 static u64 snb_pte_encode(dma_addr_t addr, 903 enum i915_cache_level level, 904 u32 flags) 905 { 906 gen6_pte_t pte = GEN6_PTE_ADDR_ENCODE(addr) | GEN6_PTE_VALID; 907 908 switch (level) { 909 case I915_CACHE_L3_LLC: 910 case I915_CACHE_LLC: 911 pte |= GEN6_PTE_CACHE_LLC; 912 break; 913 case I915_CACHE_NONE: 914 pte |= GEN6_PTE_UNCACHED; 915 break; 916 default: 917 MISSING_CASE(level); 918 } 919 920 return pte; 921 } 922 923 static u64 ivb_pte_encode(dma_addr_t addr, 924 enum i915_cache_level level, 925 u32 flags) 926 { 927 gen6_pte_t pte = GEN6_PTE_ADDR_ENCODE(addr) | GEN6_PTE_VALID; 928 929 switch (level) { 930 case I915_CACHE_L3_LLC: 931 pte |= GEN7_PTE_CACHE_L3_LLC; 932 break; 933 case I915_CACHE_LLC: 934 pte |= GEN6_PTE_CACHE_LLC; 935 break; 936 case I915_CACHE_NONE: 937 pte |= GEN6_PTE_UNCACHED; 938 break; 939 default: 940 MISSING_CASE(level); 941 } 942 943 return pte; 944 } 945 946 static u64 byt_pte_encode(dma_addr_t addr, 947 enum i915_cache_level level, 948 u32 flags) 949 { 950 gen6_pte_t pte = GEN6_PTE_ADDR_ENCODE(addr) | GEN6_PTE_VALID; 951 952 if (!(flags & PTE_READ_ONLY)) 953 pte |= BYT_PTE_WRITEABLE; 954 955 if (level != I915_CACHE_NONE) 956 pte |= BYT_PTE_SNOOPED_BY_CPU_CACHES; 957 958 return pte; 959 } 960 961 static u64 hsw_pte_encode(dma_addr_t addr, 962 enum i915_cache_level level, 963 u32 flags) 964 { 965 gen6_pte_t pte = HSW_PTE_ADDR_ENCODE(addr) | GEN6_PTE_VALID; 966 967 if (level != I915_CACHE_NONE) 968 pte |= HSW_WB_LLC_AGE3; 969 970 return pte; 971 } 972 973 static u64 iris_pte_encode(dma_addr_t addr, 974 enum i915_cache_level level, 975 u32 flags) 976 { 977 gen6_pte_t pte = HSW_PTE_ADDR_ENCODE(addr) | GEN6_PTE_VALID; 978 979 switch (level) { 980 case I915_CACHE_NONE: 981 break; 982 case I915_CACHE_WT: 983 pte |= HSW_WT_ELLC_LLC_AGE3; 984 break; 985 default: 986 pte |= HSW_WB_ELLC_LLC_AGE3; 987 break; 988 } 989 990 return pte; 991 } 992 993 static int gen6_gmch_probe(struct i915_ggtt *ggtt) 994 { 995 struct drm_i915_private *i915 = ggtt->vm.i915; 996 struct pci_dev *pdev = i915->drm.pdev; 997 unsigned int size; 998 u16 snb_gmch_ctl; 999 1000 ggtt->gmadr = pci_resource(pdev, 2); 1001 ggtt->mappable_end = resource_size(&ggtt->gmadr); 1002 1003 /* 1004 * 64/512MB is the current min/max we actually know of, but this is 1005 * just a coarse sanity check. 1006 */ 1007 if (ggtt->mappable_end < (64<<20) || ggtt->mappable_end > (512<<20)) { 1008 drm_err(&i915->drm, "Unknown GMADR size (%pa)\n", 1009 &ggtt->mappable_end); 1010 return -ENXIO; 1011 } 1012 1013 pci_read_config_word(pdev, SNB_GMCH_CTRL, &snb_gmch_ctl); 1014 1015 size = gen6_get_total_gtt_size(snb_gmch_ctl); 1016 ggtt->vm.total = (size / sizeof(gen6_pte_t)) * I915_GTT_PAGE_SIZE; 1017 1018 ggtt->vm.clear_range = nop_clear_range; 1019 if (!HAS_FULL_PPGTT(i915) || intel_scanout_needs_vtd_wa(i915)) 1020 ggtt->vm.clear_range = gen6_ggtt_clear_range; 1021 ggtt->vm.insert_page = gen6_ggtt_insert_page; 1022 ggtt->vm.insert_entries = gen6_ggtt_insert_entries; 1023 ggtt->vm.cleanup = gen6_gmch_remove; 1024 1025 ggtt->invalidate = gen6_ggtt_invalidate; 1026 1027 if (HAS_EDRAM(i915)) 1028 ggtt->vm.pte_encode = iris_pte_encode; 1029 else if (IS_HASWELL(i915)) 1030 ggtt->vm.pte_encode = hsw_pte_encode; 1031 else if (IS_VALLEYVIEW(i915)) 1032 ggtt->vm.pte_encode = byt_pte_encode; 1033 else if (INTEL_GEN(i915) >= 7) 1034 ggtt->vm.pte_encode = ivb_pte_encode; 1035 else 1036 ggtt->vm.pte_encode = snb_pte_encode; 1037 1038 ggtt->vm.vma_ops.bind_vma = ggtt_bind_vma; 1039 ggtt->vm.vma_ops.unbind_vma = ggtt_unbind_vma; 1040 ggtt->vm.vma_ops.set_pages = ggtt_set_pages; 1041 ggtt->vm.vma_ops.clear_pages = clear_pages; 1042 1043 return ggtt_probe_common(ggtt, size); 1044 } 1045 1046 static void i915_gmch_remove(struct i915_address_space *vm) 1047 { 1048 intel_gmch_remove(); 1049 } 1050 1051 static int i915_gmch_probe(struct i915_ggtt *ggtt) 1052 { 1053 struct drm_i915_private *i915 = ggtt->vm.i915; 1054 phys_addr_t gmadr_base; 1055 int ret; 1056 1057 ret = intel_gmch_probe(i915->bridge_dev, i915->drm.pdev, NULL); 1058 if (!ret) { 1059 drm_err(&i915->drm, "failed to set up gmch\n"); 1060 return -EIO; 1061 } 1062 1063 intel_gtt_get(&ggtt->vm.total, &gmadr_base, &ggtt->mappable_end); 1064 1065 ggtt->gmadr = 1066 (struct resource)DEFINE_RES_MEM(gmadr_base, ggtt->mappable_end); 1067 1068 ggtt->do_idle_maps = needs_idle_maps(i915); 1069 ggtt->vm.insert_page = i915_ggtt_insert_page; 1070 ggtt->vm.insert_entries = i915_ggtt_insert_entries; 1071 ggtt->vm.clear_range = i915_ggtt_clear_range; 1072 ggtt->vm.cleanup = i915_gmch_remove; 1073 1074 ggtt->invalidate = gmch_ggtt_invalidate; 1075 1076 ggtt->vm.vma_ops.bind_vma = ggtt_bind_vma; 1077 ggtt->vm.vma_ops.unbind_vma = ggtt_unbind_vma; 1078 ggtt->vm.vma_ops.set_pages = ggtt_set_pages; 1079 ggtt->vm.vma_ops.clear_pages = clear_pages; 1080 1081 if (unlikely(ggtt->do_idle_maps)) 1082 drm_notice(&i915->drm, 1083 "Applying Ironlake quirks for intel_iommu\n"); 1084 1085 return 0; 1086 } 1087 1088 static int ggtt_probe_hw(struct i915_ggtt *ggtt, struct intel_gt *gt) 1089 { 1090 struct drm_i915_private *i915 = gt->i915; 1091 int ret; 1092 1093 ggtt->vm.gt = gt; 1094 ggtt->vm.i915 = i915; 1095 ggtt->vm.dma = &i915->drm.pdev->dev; 1096 1097 if (INTEL_GEN(i915) <= 5) 1098 ret = i915_gmch_probe(ggtt); 1099 else if (INTEL_GEN(i915) < 8) 1100 ret = gen6_gmch_probe(ggtt); 1101 else 1102 ret = gen8_gmch_probe(ggtt); 1103 if (ret) 1104 return ret; 1105 1106 if ((ggtt->vm.total - 1) >> 32) { 1107 drm_err(&i915->drm, 1108 "We never expected a Global GTT with more than 32bits" 1109 " of address space! Found %lldM!\n", 1110 ggtt->vm.total >> 20); 1111 ggtt->vm.total = 1ULL << 32; 1112 ggtt->mappable_end = 1113 min_t(u64, ggtt->mappable_end, ggtt->vm.total); 1114 } 1115 1116 if (ggtt->mappable_end > ggtt->vm.total) { 1117 drm_err(&i915->drm, 1118 "mappable aperture extends past end of GGTT," 1119 " aperture=%pa, total=%llx\n", 1120 &ggtt->mappable_end, ggtt->vm.total); 1121 ggtt->mappable_end = ggtt->vm.total; 1122 } 1123 1124 /* GMADR is the PCI mmio aperture into the global GTT. */ 1125 drm_dbg(&i915->drm, "GGTT size = %lluM\n", ggtt->vm.total >> 20); 1126 drm_dbg(&i915->drm, "GMADR size = %lluM\n", 1127 (u64)ggtt->mappable_end >> 20); 1128 drm_dbg(&i915->drm, "DSM size = %lluM\n", 1129 (u64)resource_size(&intel_graphics_stolen_res) >> 20); 1130 1131 return 0; 1132 } 1133 1134 /** 1135 * i915_ggtt_probe_hw - Probe GGTT hardware location 1136 * @i915: i915 device 1137 */ 1138 int i915_ggtt_probe_hw(struct drm_i915_private *i915) 1139 { 1140 int ret; 1141 1142 ret = ggtt_probe_hw(&i915->ggtt, &i915->gt); 1143 if (ret) 1144 return ret; 1145 1146 if (intel_vtd_active()) 1147 drm_info(&i915->drm, "VT-d active for gfx access\n"); 1148 1149 return 0; 1150 } 1151 1152 int i915_ggtt_enable_hw(struct drm_i915_private *i915) 1153 { 1154 if (INTEL_GEN(i915) < 6 && !intel_enable_gtt()) 1155 return -EIO; 1156 1157 return 0; 1158 } 1159 1160 void i915_ggtt_enable_guc(struct i915_ggtt *ggtt) 1161 { 1162 GEM_BUG_ON(ggtt->invalidate != gen8_ggtt_invalidate); 1163 1164 ggtt->invalidate = guc_ggtt_invalidate; 1165 1166 ggtt->invalidate(ggtt); 1167 } 1168 1169 void i915_ggtt_disable_guc(struct i915_ggtt *ggtt) 1170 { 1171 /* XXX Temporary pardon for error unload */ 1172 if (ggtt->invalidate == gen8_ggtt_invalidate) 1173 return; 1174 1175 /* We should only be called after i915_ggtt_enable_guc() */ 1176 GEM_BUG_ON(ggtt->invalidate != guc_ggtt_invalidate); 1177 1178 ggtt->invalidate = gen8_ggtt_invalidate; 1179 1180 ggtt->invalidate(ggtt); 1181 } 1182 1183 static unsigned int clear_bind(struct i915_vma *vma) 1184 { 1185 return atomic_fetch_and(~I915_VMA_BIND_MASK, &vma->flags); 1186 } 1187 1188 void i915_ggtt_resume(struct i915_ggtt *ggtt) 1189 { 1190 struct i915_vma *vma; 1191 bool flush = false; 1192 int open; 1193 1194 intel_gt_check_and_clear_faults(ggtt->vm.gt); 1195 1196 /* First fill our portion of the GTT with scratch pages */ 1197 ggtt->vm.clear_range(&ggtt->vm, 0, ggtt->vm.total); 1198 1199 /* Skip rewriting PTE on VMA unbind. */ 1200 open = atomic_xchg(&ggtt->vm.open, 0); 1201 1202 /* clflush objects bound into the GGTT and rebind them. */ 1203 list_for_each_entry(vma, &ggtt->vm.bound_list, vm_link) { 1204 struct drm_i915_gem_object *obj = vma->obj; 1205 unsigned int was_bound = clear_bind(vma); 1206 1207 WARN_ON(i915_vma_bind(vma, 1208 obj ? obj->cache_level : 0, 1209 was_bound, NULL)); 1210 if (obj) { /* only used during resume => exclusive access */ 1211 flush |= fetch_and_zero(&obj->write_domain); 1212 obj->read_domains |= I915_GEM_DOMAIN_GTT; 1213 } 1214 } 1215 1216 atomic_set(&ggtt->vm.open, open); 1217 ggtt->invalidate(ggtt); 1218 1219 if (flush) 1220 wbinvd_on_all_cpus(); 1221 1222 if (INTEL_GEN(ggtt->vm.i915) >= 8) 1223 setup_private_pat(ggtt->vm.gt->uncore); 1224 1225 intel_ggtt_restore_fences(ggtt); 1226 } 1227 1228 static struct scatterlist * 1229 rotate_pages(struct drm_i915_gem_object *obj, unsigned int offset, 1230 unsigned int width, unsigned int height, 1231 unsigned int stride, 1232 struct sg_table *st, struct scatterlist *sg) 1233 { 1234 unsigned int column, row; 1235 unsigned int src_idx; 1236 1237 for (column = 0; column < width; column++) { 1238 src_idx = stride * (height - 1) + column + offset; 1239 for (row = 0; row < height; row++) { 1240 st->nents++; 1241 /* 1242 * We don't need the pages, but need to initialize 1243 * the entries so the sg list can be happily traversed. 1244 * The only thing we need are DMA addresses. 1245 */ 1246 sg_set_page(sg, NULL, I915_GTT_PAGE_SIZE, 0); 1247 sg_dma_address(sg) = 1248 i915_gem_object_get_dma_address(obj, src_idx); 1249 sg_dma_len(sg) = I915_GTT_PAGE_SIZE; 1250 sg = sg_next(sg); 1251 src_idx -= stride; 1252 } 1253 } 1254 1255 return sg; 1256 } 1257 1258 static noinline struct sg_table * 1259 intel_rotate_pages(struct intel_rotation_info *rot_info, 1260 struct drm_i915_gem_object *obj) 1261 { 1262 unsigned int size = intel_rotation_info_size(rot_info); 1263 struct drm_i915_private *i915 = to_i915(obj->base.dev); 1264 struct sg_table *st; 1265 struct scatterlist *sg; 1266 int ret = -ENOMEM; 1267 int i; 1268 1269 /* Allocate target SG list. */ 1270 st = kmalloc(sizeof(*st), GFP_KERNEL); 1271 if (!st) 1272 goto err_st_alloc; 1273 1274 ret = sg_alloc_table(st, size, GFP_KERNEL); 1275 if (ret) 1276 goto err_sg_alloc; 1277 1278 st->nents = 0; 1279 sg = st->sgl; 1280 1281 for (i = 0 ; i < ARRAY_SIZE(rot_info->plane); i++) { 1282 sg = rotate_pages(obj, rot_info->plane[i].offset, 1283 rot_info->plane[i].width, rot_info->plane[i].height, 1284 rot_info->plane[i].stride, st, sg); 1285 } 1286 1287 return st; 1288 1289 err_sg_alloc: 1290 kfree(st); 1291 err_st_alloc: 1292 1293 drm_dbg(&i915->drm, "Failed to create rotated mapping for object size %zu! (%ux%u tiles, %u pages)\n", 1294 obj->base.size, rot_info->plane[0].width, 1295 rot_info->plane[0].height, size); 1296 1297 return ERR_PTR(ret); 1298 } 1299 1300 static struct scatterlist * 1301 remap_pages(struct drm_i915_gem_object *obj, unsigned int offset, 1302 unsigned int width, unsigned int height, 1303 unsigned int stride, 1304 struct sg_table *st, struct scatterlist *sg) 1305 { 1306 unsigned int row; 1307 1308 for (row = 0; row < height; row++) { 1309 unsigned int left = width * I915_GTT_PAGE_SIZE; 1310 1311 while (left) { 1312 dma_addr_t addr; 1313 unsigned int length; 1314 1315 /* 1316 * We don't need the pages, but need to initialize 1317 * the entries so the sg list can be happily traversed. 1318 * The only thing we need are DMA addresses. 1319 */ 1320 1321 addr = i915_gem_object_get_dma_address_len(obj, offset, &length); 1322 1323 length = min(left, length); 1324 1325 st->nents++; 1326 1327 sg_set_page(sg, NULL, length, 0); 1328 sg_dma_address(sg) = addr; 1329 sg_dma_len(sg) = length; 1330 sg = sg_next(sg); 1331 1332 offset += length / I915_GTT_PAGE_SIZE; 1333 left -= length; 1334 } 1335 1336 offset += stride - width; 1337 } 1338 1339 return sg; 1340 } 1341 1342 static noinline struct sg_table * 1343 intel_remap_pages(struct intel_remapped_info *rem_info, 1344 struct drm_i915_gem_object *obj) 1345 { 1346 unsigned int size = intel_remapped_info_size(rem_info); 1347 struct drm_i915_private *i915 = to_i915(obj->base.dev); 1348 struct sg_table *st; 1349 struct scatterlist *sg; 1350 int ret = -ENOMEM; 1351 int i; 1352 1353 /* Allocate target SG list. */ 1354 st = kmalloc(sizeof(*st), GFP_KERNEL); 1355 if (!st) 1356 goto err_st_alloc; 1357 1358 ret = sg_alloc_table(st, size, GFP_KERNEL); 1359 if (ret) 1360 goto err_sg_alloc; 1361 1362 st->nents = 0; 1363 sg = st->sgl; 1364 1365 for (i = 0 ; i < ARRAY_SIZE(rem_info->plane); i++) { 1366 sg = remap_pages(obj, rem_info->plane[i].offset, 1367 rem_info->plane[i].width, rem_info->plane[i].height, 1368 rem_info->plane[i].stride, st, sg); 1369 } 1370 1371 i915_sg_trim(st); 1372 1373 return st; 1374 1375 err_sg_alloc: 1376 kfree(st); 1377 err_st_alloc: 1378 1379 drm_dbg(&i915->drm, "Failed to create remapped mapping for object size %zu! (%ux%u tiles, %u pages)\n", 1380 obj->base.size, rem_info->plane[0].width, 1381 rem_info->plane[0].height, size); 1382 1383 return ERR_PTR(ret); 1384 } 1385 1386 static noinline struct sg_table * 1387 intel_partial_pages(const struct i915_ggtt_view *view, 1388 struct drm_i915_gem_object *obj) 1389 { 1390 struct sg_table *st; 1391 struct scatterlist *sg, *iter; 1392 unsigned int count = view->partial.size; 1393 unsigned int offset; 1394 int ret = -ENOMEM; 1395 1396 st = kmalloc(sizeof(*st), GFP_KERNEL); 1397 if (!st) 1398 goto err_st_alloc; 1399 1400 ret = sg_alloc_table(st, count, GFP_KERNEL); 1401 if (ret) 1402 goto err_sg_alloc; 1403 1404 iter = i915_gem_object_get_sg(obj, view->partial.offset, &offset); 1405 GEM_BUG_ON(!iter); 1406 1407 sg = st->sgl; 1408 st->nents = 0; 1409 do { 1410 unsigned int len; 1411 1412 len = min(iter->length - (offset << PAGE_SHIFT), 1413 count << PAGE_SHIFT); 1414 sg_set_page(sg, NULL, len, 0); 1415 sg_dma_address(sg) = 1416 sg_dma_address(iter) + (offset << PAGE_SHIFT); 1417 sg_dma_len(sg) = len; 1418 1419 st->nents++; 1420 count -= len >> PAGE_SHIFT; 1421 if (count == 0) { 1422 sg_mark_end(sg); 1423 i915_sg_trim(st); /* Drop any unused tail entries. */ 1424 1425 return st; 1426 } 1427 1428 sg = __sg_next(sg); 1429 iter = __sg_next(iter); 1430 offset = 0; 1431 } while (1); 1432 1433 err_sg_alloc: 1434 kfree(st); 1435 err_st_alloc: 1436 return ERR_PTR(ret); 1437 } 1438 1439 static int 1440 i915_get_ggtt_vma_pages(struct i915_vma *vma) 1441 { 1442 int ret; 1443 1444 /* 1445 * The vma->pages are only valid within the lifespan of the borrowed 1446 * obj->mm.pages. When the obj->mm.pages sg_table is regenerated, so 1447 * must be the vma->pages. A simple rule is that vma->pages must only 1448 * be accessed when the obj->mm.pages are pinned. 1449 */ 1450 GEM_BUG_ON(!i915_gem_object_has_pinned_pages(vma->obj)); 1451 1452 switch (vma->ggtt_view.type) { 1453 default: 1454 GEM_BUG_ON(vma->ggtt_view.type); 1455 /* fall through */ 1456 case I915_GGTT_VIEW_NORMAL: 1457 vma->pages = vma->obj->mm.pages; 1458 return 0; 1459 1460 case I915_GGTT_VIEW_ROTATED: 1461 vma->pages = 1462 intel_rotate_pages(&vma->ggtt_view.rotated, vma->obj); 1463 break; 1464 1465 case I915_GGTT_VIEW_REMAPPED: 1466 vma->pages = 1467 intel_remap_pages(&vma->ggtt_view.remapped, vma->obj); 1468 break; 1469 1470 case I915_GGTT_VIEW_PARTIAL: 1471 vma->pages = intel_partial_pages(&vma->ggtt_view, vma->obj); 1472 break; 1473 } 1474 1475 ret = 0; 1476 if (IS_ERR(vma->pages)) { 1477 ret = PTR_ERR(vma->pages); 1478 vma->pages = NULL; 1479 drm_err(&vma->vm->i915->drm, 1480 "Failed to get pages for VMA view type %u (%d)!\n", 1481 vma->ggtt_view.type, ret); 1482 } 1483 return ret; 1484 } 1485