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