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