xref: /linux/drivers/gpu/drm/omapdrm/omap_gem.c (revision 570f7e331f5febb30f1384817463c7e42b65ca7d)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (C) 2011 Texas Instruments Incorporated - https://www.ti.com/
4  * Author: Rob Clark <rob.clark@linaro.org>
5  */
6 
7 #include <linux/dma-mapping.h>
8 #include <linux/pagemap.h>
9 #include <linux/seq_file.h>
10 #include <linux/shmem_fs.h>
11 #include <linux/spinlock.h>
12 #include <linux/vmalloc.h>
13 
14 #include <drm/drm_dumb_buffers.h>
15 #include <drm/drm_prime.h>
16 #include <drm/drm_print.h>
17 #include <drm/drm_vma_manager.h>
18 
19 #include "omap_drv.h"
20 #include "omap_dmm_tiler.h"
21 
22 /*
23  * GEM buffer object implementation.
24  */
25 
26 /* note: we use upper 8 bits of flags for driver-internal flags: */
27 #define OMAP_BO_MEM_DMA_API	0x01000000	/* memory allocated with the dma_alloc_* API */
28 #define OMAP_BO_MEM_SHMEM	0x02000000	/* memory allocated through shmem backing */
29 #define OMAP_BO_MEM_DMABUF	0x08000000	/* memory imported from a dmabuf */
30 
31 struct omap_gem_object {
32 	struct drm_gem_object base;
33 
34 	struct list_head mm_list;
35 
36 	u32 flags;
37 
38 	/** width/height for tiled formats (rounded up to slot boundaries) */
39 	u16 width, height;
40 
41 	/** roll applied when mapping to DMM */
42 	u32 roll;
43 
44 	/** protects pin_cnt, block, pages, dma_addrs and vaddr */
45 	struct mutex lock;
46 
47 	/**
48 	 * dma_addr contains the buffer DMA address. It is valid for
49 	 *
50 	 * - buffers allocated through the DMA mapping API (with the
51 	 *   OMAP_BO_MEM_DMA_API flag set)
52 	 *
53 	 * - buffers imported from dmabuf (with the OMAP_BO_MEM_DMABUF flag set)
54 	 *   if they are physically contiguous
55 	 *
56 	 * - buffers mapped through the TILER when pin_cnt is not zero, in which
57 	 *   case the DMA address points to the TILER aperture
58 	 *
59 	 * Physically contiguous buffers have their DMA address equal to the
60 	 * physical address as we don't remap those buffers through the TILER.
61 	 *
62 	 * Buffers mapped to the TILER have their DMA address pointing to the
63 	 * TILER aperture. As TILER mappings are refcounted (through pin_cnt)
64 	 * the DMA address must be accessed through omap_gem_pin() to ensure
65 	 * that the mapping won't disappear unexpectedly. References must be
66 	 * released with omap_gem_unpin().
67 	 */
68 	dma_addr_t dma_addr;
69 
70 	/**
71 	 * # of users
72 	 */
73 	refcount_t pin_cnt;
74 
75 	/**
76 	 * If the buffer has been imported from a dmabuf the OMAP_DB_DMABUF flag
77 	 * is set and the sgt field is valid.
78 	 */
79 	struct sg_table *sgt;
80 
81 	/**
82 	 * tiler block used when buffer is remapped in DMM/TILER.
83 	 */
84 	struct tiler_block *block;
85 
86 	/**
87 	 * Array of backing pages, if allocated.  Note that pages are never
88 	 * allocated for buffers originally allocated from contiguous memory
89 	 */
90 	struct page **pages;
91 
92 	/** addresses corresponding to pages in above array */
93 	dma_addr_t *dma_addrs;
94 
95 	/**
96 	 * Virtual address, if mapped.
97 	 */
98 	void *vaddr;
99 };
100 
101 #define to_omap_bo(x) container_of(x, struct omap_gem_object, base)
102 
103 /* To deal with userspace mmap'ings of 2d tiled buffers, which (a) are
104  * not necessarily pinned in TILER all the time, and (b) when they are
105  * they are not necessarily page aligned, we reserve one or more small
106  * regions in each of the 2d containers to use as a user-GART where we
107  * can create a second page-aligned mapping of parts of the buffer
108  * being accessed from userspace.
109  *
110  * Note that we could optimize slightly when we know that multiple
111  * tiler containers are backed by the same PAT.. but I'll leave that
112  * for later..
113  */
114 #define NUM_USERGART_ENTRIES 2
115 struct omap_drm_usergart_entry {
116 	struct tiler_block *block;	/* the reserved tiler block */
117 	dma_addr_t dma_addr;
118 	struct drm_gem_object *obj;	/* the current pinned obj */
119 	pgoff_t obj_pgoff;		/* page offset of obj currently
120 					   mapped in */
121 };
122 
123 struct omap_drm_usergart {
124 	struct omap_drm_usergart_entry entry[NUM_USERGART_ENTRIES];
125 	int height;				/* height in rows */
126 	int height_shift;		/* ilog2(height in rows) */
127 	int slot_shift;			/* ilog2(width per slot) */
128 	int stride_pfn;			/* stride in pages */
129 	int last;				/* index of last used entry */
130 };
131 
132 /* -----------------------------------------------------------------------------
133  * Helpers
134  */
135 
136 /** get mmap offset */
137 u64 omap_gem_mmap_offset(struct drm_gem_object *obj)
138 {
139 	struct drm_device *dev = obj->dev;
140 	int ret;
141 	size_t size;
142 
143 	/* Make it mmapable */
144 	size = omap_gem_mmap_size(obj);
145 	ret = drm_gem_create_mmap_offset_size(obj, size);
146 	if (ret) {
147 		dev_err(dev->dev, "could not allocate mmap offset\n");
148 		return 0;
149 	}
150 
151 	return drm_vma_node_offset_addr(&obj->vma_node);
152 }
153 
154 static bool omap_gem_sgt_is_contiguous(struct sg_table *sgt, size_t size)
155 {
156 	return !(drm_prime_get_contiguous_size(sgt) < size);
157 }
158 
159 static bool omap_gem_is_contiguous(struct omap_gem_object *omap_obj)
160 {
161 	if (omap_obj->flags & OMAP_BO_MEM_DMA_API)
162 		return true;
163 
164 	if ((omap_obj->flags & OMAP_BO_MEM_DMABUF) &&
165 	    omap_gem_sgt_is_contiguous(omap_obj->sgt, omap_obj->base.size))
166 		return true;
167 
168 	return false;
169 }
170 
171 /* -----------------------------------------------------------------------------
172  * Eviction
173  */
174 
175 static void omap_gem_evict_entry(struct drm_gem_object *obj,
176 		enum tiler_fmt fmt, struct omap_drm_usergart_entry *entry)
177 {
178 	struct omap_gem_object *omap_obj = to_omap_bo(obj);
179 	struct omap_drm_private *priv = obj->dev->dev_private;
180 	int n = priv->usergart[fmt].height;
181 	size_t size = PAGE_SIZE * n;
182 	loff_t off = omap_gem_mmap_offset(obj) +
183 			(entry->obj_pgoff << PAGE_SHIFT);
184 	const int m = DIV_ROUND_UP(omap_obj->width << fmt, PAGE_SIZE);
185 
186 	if (m > 1) {
187 		int i;
188 		/* if stride > than PAGE_SIZE then sparse mapping: */
189 		for (i = n; i > 0; i--) {
190 			unmap_mapping_range(obj->dev->anon_inode->i_mapping,
191 					    off, PAGE_SIZE, 1);
192 			off += PAGE_SIZE * m;
193 		}
194 	} else {
195 		unmap_mapping_range(obj->dev->anon_inode->i_mapping,
196 				    off, size, 1);
197 	}
198 
199 	entry->obj = NULL;
200 }
201 
202 /* Evict a buffer from usergart, if it is mapped there */
203 static void omap_gem_evict(struct drm_gem_object *obj)
204 {
205 	struct omap_gem_object *omap_obj = to_omap_bo(obj);
206 	struct omap_drm_private *priv = obj->dev->dev_private;
207 
208 	if (omap_obj->flags & OMAP_BO_TILED_MASK) {
209 		enum tiler_fmt fmt = gem2fmt(omap_obj->flags);
210 		int i;
211 
212 		for (i = 0; i < NUM_USERGART_ENTRIES; i++) {
213 			struct omap_drm_usergart_entry *entry =
214 				&priv->usergart[fmt].entry[i];
215 
216 			if (entry->obj == obj)
217 				omap_gem_evict_entry(obj, fmt, entry);
218 		}
219 	}
220 }
221 
222 /* -----------------------------------------------------------------------------
223  * Page Management
224  */
225 
226 /*
227  * Ensure backing pages are allocated. Must be called with the omap_obj.lock
228  * held.
229  */
230 static int omap_gem_attach_pages(struct drm_gem_object *obj)
231 {
232 	struct drm_device *dev = obj->dev;
233 	struct omap_gem_object *omap_obj = to_omap_bo(obj);
234 	struct page **pages;
235 	int npages = obj->size >> PAGE_SHIFT;
236 	int i, ret;
237 	dma_addr_t *addrs;
238 
239 	lockdep_assert_held(&omap_obj->lock);
240 
241 	/*
242 	 * If not using shmem (in which case backing pages don't need to be
243 	 * allocated) or if pages are already allocated we're done.
244 	 */
245 	if (!(omap_obj->flags & OMAP_BO_MEM_SHMEM) || omap_obj->pages)
246 		return 0;
247 
248 	pages = drm_gem_get_pages(obj);
249 	if (IS_ERR(pages)) {
250 		dev_err(obj->dev->dev, "could not get pages: %ld\n", PTR_ERR(pages));
251 		return PTR_ERR(pages);
252 	}
253 
254 	/* for non-cached buffers, ensure the new pages are clean because
255 	 * DSS, GPU, etc. are not cache coherent:
256 	 */
257 	if (omap_obj->flags & (OMAP_BO_WC|OMAP_BO_UNCACHED)) {
258 		addrs = kmalloc_objs(*addrs, npages);
259 		if (!addrs) {
260 			ret = -ENOMEM;
261 			goto free_pages;
262 		}
263 
264 		for (i = 0; i < npages; i++) {
265 			addrs[i] = dma_map_page(dev->dev, pages[i],
266 					0, PAGE_SIZE, DMA_TO_DEVICE);
267 
268 			if (dma_mapping_error(dev->dev, addrs[i])) {
269 				dev_warn(dev->dev,
270 					"%s: failed to map page\n", __func__);
271 
272 				for (i = i - 1; i >= 0; --i) {
273 					dma_unmap_page(dev->dev, addrs[i],
274 						PAGE_SIZE, DMA_TO_DEVICE);
275 				}
276 
277 				ret = -ENOMEM;
278 				goto free_addrs;
279 			}
280 		}
281 	} else {
282 		addrs = kzalloc_objs(*addrs, npages);
283 		if (!addrs) {
284 			ret = -ENOMEM;
285 			goto free_pages;
286 		}
287 	}
288 
289 	omap_obj->dma_addrs = addrs;
290 	omap_obj->pages = pages;
291 
292 	return 0;
293 
294 free_addrs:
295 	kfree(addrs);
296 free_pages:
297 	drm_gem_put_pages(obj, pages, true, false);
298 
299 	return ret;
300 }
301 
302 /* Release backing pages. Must be called with the omap_obj.lock held. */
303 static void omap_gem_detach_pages(struct drm_gem_object *obj)
304 {
305 	struct omap_gem_object *omap_obj = to_omap_bo(obj);
306 	unsigned int npages = obj->size >> PAGE_SHIFT;
307 	unsigned int i;
308 
309 	lockdep_assert_held(&omap_obj->lock);
310 
311 	for (i = 0; i < npages; i++) {
312 		if (omap_obj->dma_addrs[i])
313 			dma_unmap_page(obj->dev->dev, omap_obj->dma_addrs[i],
314 				       PAGE_SIZE, DMA_TO_DEVICE);
315 	}
316 
317 	kfree(omap_obj->dma_addrs);
318 	omap_obj->dma_addrs = NULL;
319 
320 	drm_gem_put_pages(obj, omap_obj->pages, true, false);
321 	omap_obj->pages = NULL;
322 }
323 
324 /* get buffer flags */
325 u32 omap_gem_flags(struct drm_gem_object *obj)
326 {
327 	return to_omap_bo(obj)->flags;
328 }
329 
330 /** get mmap size */
331 size_t omap_gem_mmap_size(struct drm_gem_object *obj)
332 {
333 	struct omap_gem_object *omap_obj = to_omap_bo(obj);
334 	size_t size = obj->size;
335 
336 	if (omap_obj->flags & OMAP_BO_TILED_MASK) {
337 		/* for tiled buffers, the virtual size has stride rounded up
338 		 * to 4kb.. (to hide the fact that row n+1 might start 16kb or
339 		 * 32kb later!).  But we don't back the entire buffer with
340 		 * pages, only the valid picture part.. so need to adjust for
341 		 * this in the size used to mmap and generate mmap offset
342 		 */
343 		size = tiler_vsize(gem2fmt(omap_obj->flags),
344 				omap_obj->width, omap_obj->height);
345 	}
346 
347 	return size;
348 }
349 
350 /* -----------------------------------------------------------------------------
351  * Fault Handling
352  */
353 
354 /* Normal handling for the case of faulting in non-tiled buffers */
355 static vm_fault_t omap_gem_fault_1d(struct drm_gem_object *obj,
356 		struct vm_area_struct *vma, struct vm_fault *vmf)
357 {
358 	struct omap_gem_object *omap_obj = to_omap_bo(obj);
359 	unsigned long pfn;
360 	pgoff_t pgoff;
361 
362 	/* We don't use vmf->pgoff since that has the fake offset: */
363 	pgoff = linear_page_delta(vma, vmf->address);
364 
365 	if (omap_obj->pages) {
366 		omap_gem_cpu_sync_page(obj, pgoff);
367 		pfn = page_to_pfn(omap_obj->pages[pgoff]);
368 	} else {
369 		BUG_ON(!omap_gem_is_contiguous(omap_obj));
370 		pfn = (omap_obj->dma_addr >> PAGE_SHIFT) + pgoff;
371 	}
372 
373 	VERB("Inserting %p pfn %lx, pa %lx", (void *)vmf->address,
374 			pfn, pfn << PAGE_SHIFT);
375 
376 	return vmf_insert_mixed(vma, vmf->address, pfn);
377 }
378 
379 /* Special handling for the case of faulting in 2d tiled buffers */
380 static vm_fault_t omap_gem_fault_2d(struct drm_gem_object *obj,
381 		struct vm_area_struct *vma, struct vm_fault *vmf)
382 {
383 	struct omap_gem_object *omap_obj = to_omap_bo(obj);
384 	struct omap_drm_private *priv = obj->dev->dev_private;
385 	struct omap_drm_usergart_entry *entry;
386 	enum tiler_fmt fmt = gem2fmt(omap_obj->flags);
387 	struct page *pages[64];  /* XXX is this too much to have on stack? */
388 	unsigned long pfn;
389 	pgoff_t pgoff, base_pgoff;
390 	unsigned long vaddr;
391 	int i, err, slots;
392 	vm_fault_t ret = VM_FAULT_NOPAGE;
393 
394 	/*
395 	 * Note the height of the slot is also equal to the number of pages
396 	 * that need to be mapped in to fill 4kb wide CPU page.  If the slot
397 	 * height is 64, then 64 pages fill a 4kb wide by 64 row region.
398 	 */
399 	const int n = priv->usergart[fmt].height;
400 	const int n_shift = priv->usergart[fmt].height_shift;
401 
402 	/*
403 	 * If buffer width in bytes > PAGE_SIZE then the virtual stride is
404 	 * rounded up to next multiple of PAGE_SIZE.. this need to be taken
405 	 * into account in some of the math, so figure out virtual stride
406 	 * in pages
407 	 */
408 	const int m = DIV_ROUND_UP(omap_obj->width << fmt, PAGE_SIZE);
409 
410 	/* We don't use vmf->pgoff since that has the fake offset: */
411 	pgoff = linear_page_delta(vma, vmf->address);
412 
413 	/*
414 	 * Actual address we start mapping at is rounded down to previous slot
415 	 * boundary in the y direction:
416 	 */
417 	base_pgoff = round_down(pgoff, m << n_shift);
418 
419 	/* figure out buffer width in slots */
420 	slots = omap_obj->width >> priv->usergart[fmt].slot_shift;
421 
422 	vaddr = vmf->address - ((pgoff - base_pgoff) << PAGE_SHIFT);
423 
424 	entry = &priv->usergart[fmt].entry[priv->usergart[fmt].last];
425 
426 	/* evict previous buffer using this usergart entry, if any: */
427 	if (entry->obj)
428 		omap_gem_evict_entry(entry->obj, fmt, entry);
429 
430 	entry->obj = obj;
431 	entry->obj_pgoff = base_pgoff;
432 
433 	/* now convert base_pgoff to phys offset from virt offset: */
434 	base_pgoff = (base_pgoff >> n_shift) * slots;
435 
436 	/* for wider-than 4k.. figure out which part of the slot-row we want: */
437 	if (m > 1) {
438 		int off = pgoff % m;
439 		entry->obj_pgoff += off;
440 		base_pgoff /= m;
441 		slots = min(slots - (off << n_shift), n);
442 		base_pgoff += off << n_shift;
443 		vaddr += off << PAGE_SHIFT;
444 	}
445 
446 	/*
447 	 * Map in pages. Beyond the valid pixel part of the buffer, we set
448 	 * pages[i] to NULL to get a dummy page mapped in.. if someone
449 	 * reads/writes it they will get random/undefined content, but at
450 	 * least it won't be corrupting whatever other random page used to
451 	 * be mapped in, or other undefined behavior.
452 	 */
453 	memcpy(pages, &omap_obj->pages[base_pgoff],
454 			sizeof(struct page *) * slots);
455 	memset(pages + slots, 0,
456 			sizeof(struct page *) * (n - slots));
457 
458 	err = tiler_pin(entry->block, pages, ARRAY_SIZE(pages), 0, true);
459 	if (err) {
460 		ret = vmf_error(err);
461 		dev_err(obj->dev->dev, "failed to pin: %d\n", err);
462 		return ret;
463 	}
464 
465 	pfn = entry->dma_addr >> PAGE_SHIFT;
466 
467 	VERB("Inserting %p pfn %lx, pa %lx", (void *)vmf->address,
468 			pfn, pfn << PAGE_SHIFT);
469 
470 	for (i = n; i > 0; i--) {
471 		ret = vmf_insert_mixed(vma, vaddr, pfn);
472 		if (ret & VM_FAULT_ERROR)
473 			break;
474 		pfn += priv->usergart[fmt].stride_pfn;
475 		vaddr += PAGE_SIZE * m;
476 	}
477 
478 	/* simple round-robin: */
479 	priv->usergart[fmt].last = (priv->usergart[fmt].last + 1)
480 				 % NUM_USERGART_ENTRIES;
481 
482 	return ret;
483 }
484 
485 /**
486  * omap_gem_fault		-	pagefault handler for GEM objects
487  * @vmf: fault detail
488  *
489  * Invoked when a fault occurs on an mmap of a GEM managed area. GEM
490  * does most of the work for us including the actual map/unmap calls
491  * but we need to do the actual page work.
492  *
493  * The VMA was set up by GEM. In doing so it also ensured that the
494  * vma->vm_private_data points to the GEM object that is backing this
495  * mapping.
496  */
497 static vm_fault_t omap_gem_fault(struct vm_fault *vmf)
498 {
499 	struct vm_area_struct *vma = vmf->vma;
500 	struct drm_gem_object *obj = vma->vm_private_data;
501 	struct omap_gem_object *omap_obj = to_omap_bo(obj);
502 	int err;
503 	vm_fault_t ret;
504 
505 	/* Make sure we don't parallel update on a fault, nor move or remove
506 	 * something from beneath our feet
507 	 */
508 	mutex_lock(&omap_obj->lock);
509 
510 	/* if a shmem backed object, make sure we have pages attached now */
511 	err = omap_gem_attach_pages(obj);
512 	if (err) {
513 		ret = vmf_error(err);
514 		goto fail;
515 	}
516 
517 	/* where should we do corresponding put_pages().. we are mapping
518 	 * the original page, rather than thru a GART, so we can't rely
519 	 * on eviction to trigger this.  But munmap() or all mappings should
520 	 * probably trigger put_pages()?
521 	 */
522 
523 	if (omap_obj->flags & OMAP_BO_TILED_MASK)
524 		ret = omap_gem_fault_2d(obj, vma, vmf);
525 	else
526 		ret = omap_gem_fault_1d(obj, vma, vmf);
527 
528 
529 fail:
530 	mutex_unlock(&omap_obj->lock);
531 	return ret;
532 }
533 
534 static int omap_gem_object_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)
535 {
536 	struct omap_gem_object *omap_obj = to_omap_bo(obj);
537 
538 	vm_flags_set(vma, VM_DONTEXPAND | VM_DONTDUMP | VM_IO | VM_MIXEDMAP);
539 
540 	if (omap_obj->flags & OMAP_BO_WC) {
541 		vma->vm_page_prot = pgprot_writecombine(vma_get_page_prot(vma));
542 	} else if (omap_obj->flags & OMAP_BO_UNCACHED) {
543 		vma->vm_page_prot = pgprot_noncached(vma_get_page_prot(vma));
544 	} else {
545 		/*
546 		 * We do have some private objects, at least for scanout buffers
547 		 * on hardware without DMM/TILER.  But these are allocated write-
548 		 * combine
549 		 */
550 		if (WARN_ON(!obj->filp))
551 			return -EINVAL;
552 
553 		/*
554 		 * Shunt off cached objs to shmem file so they have their own
555 		 * address_space (so unmap_mapping_range does what we want,
556 		 * in particular in the case of mmap'd dmabufs)
557 		 */
558 		vma->vm_pgoff -= drm_vma_node_start(&obj->vma_node);
559 		vma_set_file(vma, obj->filp);
560 
561 		vma->vm_page_prot = vma_get_page_prot(vma);
562 	}
563 
564 	vma->vm_page_prot = pgprot_decrypted(vma->vm_page_prot);
565 
566 	return 0;
567 }
568 
569 /* -----------------------------------------------------------------------------
570  * Dumb Buffers
571  */
572 
573 /**
574  * omap_gem_dumb_create	-	create a dumb buffer
575  * @file: our client file
576  * @dev: our device
577  * @args: the requested arguments copied from userspace
578  *
579  * Allocate a buffer suitable for use for a frame buffer of the
580  * form described by user space. Give userspace a handle by which
581  * to reference it.
582  */
583 int omap_gem_dumb_create(struct drm_file *file, struct drm_device *dev,
584 		struct drm_mode_create_dumb *args)
585 {
586 	union omap_gem_size gsize = { };
587 	int ret;
588 
589 	ret = drm_mode_size_dumb(dev, args, SZ_8, 0);
590 	if (ret)
591 		return ret;
592 	gsize.bytes = args->size;
593 
594 	return omap_gem_new_handle(dev, file, gsize,
595 			OMAP_BO_SCANOUT | OMAP_BO_WC, &args->handle);
596 }
597 
598 /**
599  * omap_gem_dumb_map_offset - create an offset for a dumb buffer
600  * @file: our drm client file
601  * @dev: drm device
602  * @handle: GEM handle to the object (from dumb_create)
603  * @offset: memory map offset placeholder
604  *
605  * Do the necessary setup to allow the mapping of the frame buffer
606  * into user memory. We don't have to do much here at the moment.
607  */
608 int omap_gem_dumb_map_offset(struct drm_file *file, struct drm_device *dev,
609 		u32 handle, u64 *offset)
610 {
611 	struct drm_gem_object *obj;
612 	int ret = 0;
613 
614 	/* GEM does all our handle to object mapping */
615 	obj = drm_gem_object_lookup(file, handle);
616 	if (obj == NULL) {
617 		ret = -ENOENT;
618 		goto fail;
619 	}
620 
621 	*offset = omap_gem_mmap_offset(obj);
622 
623 	drm_gem_object_put(obj);
624 
625 fail:
626 	return ret;
627 }
628 
629 #ifdef CONFIG_DRM_FBDEV_EMULATION
630 /* Set scrolling position.  This allows us to implement fast scrolling
631  * for console.
632  *
633  * Call only from non-atomic contexts.
634  */
635 int omap_gem_roll(struct drm_gem_object *obj, u32 roll)
636 {
637 	struct omap_gem_object *omap_obj = to_omap_bo(obj);
638 	u32 npages = obj->size >> PAGE_SHIFT;
639 	int ret = 0;
640 
641 	if (roll > npages) {
642 		dev_err(obj->dev->dev, "invalid roll: %d\n", roll);
643 		return -EINVAL;
644 	}
645 
646 	omap_obj->roll = roll;
647 
648 	mutex_lock(&omap_obj->lock);
649 
650 	/* if we aren't mapped yet, we don't need to do anything */
651 	if (omap_obj->block) {
652 		ret = omap_gem_attach_pages(obj);
653 		if (ret)
654 			goto fail;
655 
656 		ret = tiler_pin(omap_obj->block, omap_obj->pages, npages,
657 				roll, true);
658 		if (ret)
659 			dev_err(obj->dev->dev, "could not repin: %d\n", ret);
660 	}
661 
662 fail:
663 	mutex_unlock(&omap_obj->lock);
664 
665 	return ret;
666 }
667 #endif
668 
669 /* -----------------------------------------------------------------------------
670  * Memory Management & DMA Sync
671  */
672 
673 /*
674  * shmem buffers that are mapped cached are not coherent.
675  *
676  * We keep track of dirty pages using page faulting to perform cache management.
677  * When a page is mapped to the CPU in read/write mode the device can't access
678  * it and omap_obj->dma_addrs[i] is NULL. When a page is mapped to the device
679  * the omap_obj->dma_addrs[i] is set to the DMA address, and the page is
680  * unmapped from the CPU.
681  */
682 static inline bool omap_gem_is_cached_coherent(struct drm_gem_object *obj)
683 {
684 	struct omap_gem_object *omap_obj = to_omap_bo(obj);
685 
686 	return !((omap_obj->flags & OMAP_BO_MEM_SHMEM) &&
687 		((omap_obj->flags & OMAP_BO_CACHE_MASK) == OMAP_BO_CACHED));
688 }
689 
690 /* Sync the buffer for CPU access.. note pages should already be
691  * attached, ie. omap_gem_get_pages()
692  */
693 void omap_gem_cpu_sync_page(struct drm_gem_object *obj, int pgoff)
694 {
695 	struct drm_device *dev = obj->dev;
696 	struct omap_gem_object *omap_obj = to_omap_bo(obj);
697 
698 	if (omap_gem_is_cached_coherent(obj))
699 		return;
700 
701 	if (omap_obj->dma_addrs[pgoff]) {
702 		dma_unmap_page(dev->dev, omap_obj->dma_addrs[pgoff],
703 				PAGE_SIZE, DMA_TO_DEVICE);
704 		omap_obj->dma_addrs[pgoff] = 0;
705 	}
706 }
707 
708 /* sync the buffer for DMA access */
709 void omap_gem_dma_sync_buffer(struct drm_gem_object *obj,
710 		enum dma_data_direction dir)
711 {
712 	struct drm_device *dev = obj->dev;
713 	struct omap_gem_object *omap_obj = to_omap_bo(obj);
714 	int i, npages = obj->size >> PAGE_SHIFT;
715 	struct page **pages = omap_obj->pages;
716 	bool dirty = false;
717 
718 	if (omap_gem_is_cached_coherent(obj))
719 		return;
720 
721 	for (i = 0; i < npages; i++) {
722 		if (!omap_obj->dma_addrs[i]) {
723 			dma_addr_t addr;
724 
725 			addr = dma_map_page(dev->dev, pages[i], 0,
726 					    PAGE_SIZE, dir);
727 			if (dma_mapping_error(dev->dev, addr)) {
728 				dev_warn(dev->dev, "%s: failed to map page\n",
729 					__func__);
730 				break;
731 			}
732 
733 			dirty = true;
734 			omap_obj->dma_addrs[i] = addr;
735 		}
736 	}
737 
738 	if (dirty) {
739 		unmap_mapping_range(obj->filp->f_mapping, 0,
740 				    omap_gem_mmap_size(obj), 1);
741 	}
742 }
743 
744 static int omap_gem_pin_tiler(struct drm_gem_object *obj)
745 {
746 	struct omap_gem_object *omap_obj = to_omap_bo(obj);
747 	u32 npages = obj->size >> PAGE_SHIFT;
748 	enum tiler_fmt fmt = gem2fmt(omap_obj->flags);
749 	struct tiler_block *block;
750 	int ret;
751 
752 	BUG_ON(omap_obj->block);
753 
754 	if (omap_obj->flags & OMAP_BO_TILED_MASK) {
755 		block = tiler_reserve_2d(fmt, omap_obj->width, omap_obj->height,
756 					 PAGE_SIZE);
757 	} else {
758 		block = tiler_reserve_1d(obj->size);
759 	}
760 
761 	if (IS_ERR(block)) {
762 		ret = PTR_ERR(block);
763 		dev_err(obj->dev->dev, "could not remap: %d (%d)\n", ret, fmt);
764 		goto fail;
765 	}
766 
767 	/* TODO: enable async refill.. */
768 	ret = tiler_pin(block, omap_obj->pages, npages, omap_obj->roll, true);
769 	if (ret) {
770 		tiler_release(block);
771 		dev_err(obj->dev->dev, "could not pin: %d\n", ret);
772 		goto fail;
773 	}
774 
775 	omap_obj->dma_addr = tiler_ssptr(block);
776 	omap_obj->block = block;
777 
778 	DBG("got dma address: %pad", &omap_obj->dma_addr);
779 
780 fail:
781 	return ret;
782 }
783 
784 /**
785  * omap_gem_pin() - Pin a GEM object in memory
786  * @obj: the GEM object
787  * @dma_addr: the DMA address
788  *
789  * Pin the given GEM object in memory and fill the dma_addr pointer with the
790  * object's DMA address. If the buffer is not physically contiguous it will be
791  * remapped through the TILER to provide a contiguous view.
792  *
793  * Pins are reference-counted, calling this function multiple times is allowed
794  * as long the corresponding omap_gem_unpin() calls are balanced.
795  *
796  * Return 0 on success or a negative error code otherwise.
797  */
798 int omap_gem_pin(struct drm_gem_object *obj, dma_addr_t *dma_addr)
799 {
800 	struct omap_drm_private *priv = obj->dev->dev_private;
801 	struct omap_gem_object *omap_obj = to_omap_bo(obj);
802 	int ret = 0;
803 
804 	mutex_lock(&omap_obj->lock);
805 
806 	if (!omap_gem_is_contiguous(omap_obj)) {
807 		if (refcount_read(&omap_obj->pin_cnt) == 0) {
808 
809 			refcount_set(&omap_obj->pin_cnt, 1);
810 
811 			ret = omap_gem_attach_pages(obj);
812 			if (ret)
813 				goto fail;
814 
815 			if (omap_obj->flags & OMAP_BO_SCANOUT) {
816 				if (priv->has_dmm) {
817 					ret = omap_gem_pin_tiler(obj);
818 					if (ret)
819 						goto fail;
820 				}
821 			}
822 		} else {
823 			refcount_inc(&omap_obj->pin_cnt);
824 		}
825 	}
826 
827 	if (dma_addr)
828 		*dma_addr = omap_obj->dma_addr;
829 
830 fail:
831 	mutex_unlock(&omap_obj->lock);
832 
833 	return ret;
834 }
835 
836 /**
837  * omap_gem_unpin_locked() - Unpin a GEM object from memory
838  * @obj: the GEM object
839  *
840  * omap_gem_unpin() without locking.
841  */
842 static void omap_gem_unpin_locked(struct drm_gem_object *obj)
843 {
844 	struct omap_drm_private *priv = obj->dev->dev_private;
845 	struct omap_gem_object *omap_obj = to_omap_bo(obj);
846 	int ret;
847 
848 	if (omap_gem_is_contiguous(omap_obj))
849 		return;
850 
851 	if (refcount_dec_and_test(&omap_obj->pin_cnt)) {
852 		if (omap_obj->sgt) {
853 			sg_free_table(omap_obj->sgt);
854 			kfree(omap_obj->sgt);
855 			omap_obj->sgt = NULL;
856 		}
857 		if (!(omap_obj->flags & OMAP_BO_SCANOUT))
858 			return;
859 		if (priv->has_dmm) {
860 			ret = tiler_unpin(omap_obj->block);
861 			if (ret) {
862 				dev_err(obj->dev->dev,
863 					"could not unpin pages: %d\n", ret);
864 			}
865 			ret = tiler_release(omap_obj->block);
866 			if (ret) {
867 				dev_err(obj->dev->dev,
868 					"could not release unmap: %d\n", ret);
869 			}
870 			omap_obj->dma_addr = 0;
871 			omap_obj->block = NULL;
872 		}
873 	}
874 }
875 
876 /**
877  * omap_gem_unpin() - Unpin a GEM object from memory
878  * @obj: the GEM object
879  *
880  * Unpin the given GEM object previously pinned with omap_gem_pin(). Pins are
881  * reference-counted, the actual unpin will only be performed when the number
882  * of calls to this function matches the number of calls to omap_gem_pin().
883  */
884 void omap_gem_unpin(struct drm_gem_object *obj)
885 {
886 	struct omap_gem_object *omap_obj = to_omap_bo(obj);
887 
888 	mutex_lock(&omap_obj->lock);
889 	omap_gem_unpin_locked(obj);
890 	mutex_unlock(&omap_obj->lock);
891 }
892 
893 /* Get rotated scanout address (only valid if already pinned), at the
894  * specified orientation and x,y offset from top-left corner of buffer
895  * (only valid for tiled 2d buffers)
896  */
897 int omap_gem_rotated_dma_addr(struct drm_gem_object *obj, u32 orient,
898 		int x, int y, dma_addr_t *dma_addr)
899 {
900 	struct omap_gem_object *omap_obj = to_omap_bo(obj);
901 	int ret = -EINVAL;
902 
903 	mutex_lock(&omap_obj->lock);
904 
905 	if ((refcount_read(&omap_obj->pin_cnt) > 0) && omap_obj->block &&
906 			(omap_obj->flags & OMAP_BO_TILED_MASK)) {
907 		*dma_addr = tiler_tsptr(omap_obj->block, orient, x, y);
908 		ret = 0;
909 	}
910 
911 	mutex_unlock(&omap_obj->lock);
912 
913 	return ret;
914 }
915 
916 /* Get tiler stride for the buffer (only valid for 2d tiled buffers) */
917 int omap_gem_tiled_stride(struct drm_gem_object *obj, u32 orient)
918 {
919 	struct omap_gem_object *omap_obj = to_omap_bo(obj);
920 	int ret = -EINVAL;
921 	if (omap_obj->flags & OMAP_BO_TILED_MASK)
922 		ret = tiler_stride(gem2fmt(omap_obj->flags), orient);
923 	return ret;
924 }
925 
926 /* if !remap, and we don't have pages backing, then fail, rather than
927  * increasing the pin count (which we don't really do yet anyways,
928  * because we don't support swapping pages back out).  And 'remap'
929  * might not be quite the right name, but I wanted to keep it working
930  * similarly to omap_gem_pin().  Note though that mutex is not
931  * aquired if !remap (because this can be called in atomic ctxt),
932  * but probably omap_gem_unpin() should be changed to work in the
933  * same way.  If !remap, a matching omap_gem_put_pages() call is not
934  * required (and should not be made).
935  */
936 int omap_gem_get_pages(struct drm_gem_object *obj, struct page ***pages,
937 		bool remap)
938 {
939 	struct omap_gem_object *omap_obj = to_omap_bo(obj);
940 	int ret = 0;
941 
942 	mutex_lock(&omap_obj->lock);
943 
944 	if (remap) {
945 		ret = omap_gem_attach_pages(obj);
946 		if (ret)
947 			goto unlock;
948 	}
949 
950 	if (!omap_obj->pages) {
951 		ret = -ENOMEM;
952 		goto unlock;
953 	}
954 
955 	*pages = omap_obj->pages;
956 
957 unlock:
958 	mutex_unlock(&omap_obj->lock);
959 
960 	return ret;
961 }
962 
963 /* release pages when DMA no longer being performed */
964 int omap_gem_put_pages(struct drm_gem_object *obj)
965 {
966 	/* do something here if we dynamically attach/detach pages.. at
967 	 * least they would no longer need to be pinned if everyone has
968 	 * released the pages..
969 	 */
970 	return 0;
971 }
972 
973 struct sg_table *omap_gem_get_sg(struct drm_gem_object *obj,
974 		enum dma_data_direction dir)
975 {
976 	struct omap_gem_object *omap_obj = to_omap_bo(obj);
977 	dma_addr_t addr;
978 	struct sg_table *sgt;
979 	struct scatterlist *sg;
980 	unsigned int count, len, stride, i;
981 	int ret;
982 
983 	ret = omap_gem_pin(obj, &addr);
984 	if (ret)
985 		return ERR_PTR(ret);
986 
987 	mutex_lock(&omap_obj->lock);
988 
989 	sgt = omap_obj->sgt;
990 	if (sgt)
991 		goto out;
992 
993 	sgt = kzalloc_obj(*sgt);
994 	if (!sgt) {
995 		ret = -ENOMEM;
996 		goto err_unpin;
997 	}
998 
999 	if (addr) {
1000 		if (omap_obj->flags & OMAP_BO_TILED_MASK) {
1001 			enum tiler_fmt fmt = gem2fmt(omap_obj->flags);
1002 
1003 			len = omap_obj->width << (int)fmt;
1004 			count = omap_obj->height;
1005 			stride = tiler_stride(fmt, 0);
1006 		} else {
1007 			len = obj->size;
1008 			count = 1;
1009 			stride = 0;
1010 		}
1011 	} else {
1012 		count = obj->size >> PAGE_SHIFT;
1013 	}
1014 
1015 	ret = sg_alloc_table(sgt, count, GFP_KERNEL);
1016 	if (ret)
1017 		goto err_free;
1018 
1019 	/* this must be after omap_gem_pin() to ensure we have pages attached */
1020 	omap_gem_dma_sync_buffer(obj, dir);
1021 
1022 	if (addr) {
1023 		for_each_sg(sgt->sgl, sg, count, i) {
1024 			sg_set_page(sg, pfn_to_page(__phys_to_pfn(addr)),
1025 				    len, offset_in_page(addr));
1026 			sg_dma_address(sg) = addr;
1027 			sg_dma_len(sg) = len;
1028 
1029 			addr += stride;
1030 		}
1031 	} else {
1032 		for_each_sg(sgt->sgl, sg, count, i) {
1033 			sg_set_page(sg, omap_obj->pages[i], PAGE_SIZE, 0);
1034 			sg_dma_address(sg) = omap_obj->dma_addrs[i];
1035 			sg_dma_len(sg) =  PAGE_SIZE;
1036 		}
1037 	}
1038 
1039 	omap_obj->sgt = sgt;
1040 out:
1041 	mutex_unlock(&omap_obj->lock);
1042 	return sgt;
1043 
1044 err_free:
1045 	kfree(sgt);
1046 err_unpin:
1047 	mutex_unlock(&omap_obj->lock);
1048 	omap_gem_unpin(obj);
1049 	return ERR_PTR(ret);
1050 }
1051 
1052 void omap_gem_put_sg(struct drm_gem_object *obj, struct sg_table *sgt)
1053 {
1054 	struct omap_gem_object *omap_obj = to_omap_bo(obj);
1055 
1056 	if (WARN_ON(omap_obj->sgt != sgt))
1057 		return;
1058 
1059 	omap_gem_unpin(obj);
1060 }
1061 
1062 #ifdef CONFIG_DRM_FBDEV_EMULATION
1063 /*
1064  * Get kernel virtual address for CPU access.. this more or less only
1065  * exists for omap_fbdev.
1066  */
1067 void *omap_gem_vaddr(struct drm_gem_object *obj)
1068 {
1069 	struct omap_gem_object *omap_obj = to_omap_bo(obj);
1070 	void *vaddr;
1071 	int ret;
1072 
1073 	mutex_lock(&omap_obj->lock);
1074 
1075 	if (!omap_obj->vaddr) {
1076 		ret = omap_gem_attach_pages(obj);
1077 		if (ret) {
1078 			vaddr = ERR_PTR(ret);
1079 			goto unlock;
1080 		}
1081 
1082 		omap_obj->vaddr = vmap(omap_obj->pages, obj->size >> PAGE_SHIFT,
1083 				VM_MAP, pgprot_writecombine(PAGE_KERNEL));
1084 	}
1085 
1086 	vaddr = omap_obj->vaddr;
1087 
1088 unlock:
1089 	mutex_unlock(&omap_obj->lock);
1090 	return vaddr;
1091 }
1092 #endif
1093 
1094 /* -----------------------------------------------------------------------------
1095  * Power Management
1096  */
1097 
1098 #ifdef CONFIG_PM
1099 /* re-pin objects in DMM in resume path: */
1100 int omap_gem_resume(struct drm_device *dev)
1101 {
1102 	struct omap_drm_private *priv = dev->dev_private;
1103 	struct omap_gem_object *omap_obj;
1104 	int ret = 0;
1105 
1106 	mutex_lock(&priv->list_lock);
1107 	list_for_each_entry(omap_obj, &priv->obj_list, mm_list) {
1108 		if (omap_obj->block) {
1109 			struct drm_gem_object *obj = &omap_obj->base;
1110 			u32 npages = obj->size >> PAGE_SHIFT;
1111 
1112 			WARN_ON(!omap_obj->pages);  /* this can't happen */
1113 			ret = tiler_pin(omap_obj->block,
1114 					omap_obj->pages, npages,
1115 					omap_obj->roll, true);
1116 			if (ret) {
1117 				dev_err(dev->dev, "could not repin: %d\n", ret);
1118 				goto done;
1119 			}
1120 		}
1121 	}
1122 
1123 done:
1124 	mutex_unlock(&priv->list_lock);
1125 	return ret;
1126 }
1127 #endif
1128 
1129 /* -----------------------------------------------------------------------------
1130  * DebugFS
1131  */
1132 
1133 #ifdef CONFIG_DEBUG_FS
1134 void omap_gem_describe(struct drm_gem_object *obj, struct seq_file *m)
1135 {
1136 	struct omap_gem_object *omap_obj = to_omap_bo(obj);
1137 	u64 off;
1138 
1139 	off = drm_vma_node_start(&obj->vma_node);
1140 
1141 	mutex_lock(&omap_obj->lock);
1142 
1143 	seq_printf(m, "%08x: %2d (%2d) %08llx %pad (%2d) %p %4d",
1144 			omap_obj->flags, obj->name, kref_read(&obj->refcount),
1145 			off, &omap_obj->dma_addr,
1146 			refcount_read(&omap_obj->pin_cnt),
1147 			omap_obj->vaddr, omap_obj->roll);
1148 
1149 	if (omap_obj->flags & OMAP_BO_TILED_MASK) {
1150 		seq_printf(m, " %dx%d", omap_obj->width, omap_obj->height);
1151 		if (omap_obj->block) {
1152 			struct tcm_area *area = &omap_obj->block->area;
1153 			seq_printf(m, " (%dx%d, %dx%d)",
1154 					area->p0.x, area->p0.y,
1155 					area->p1.x, area->p1.y);
1156 		}
1157 	} else {
1158 		seq_printf(m, " %zu", obj->size);
1159 	}
1160 
1161 	mutex_unlock(&omap_obj->lock);
1162 
1163 	seq_printf(m, "\n");
1164 }
1165 
1166 void omap_gem_describe_objects(struct list_head *list, struct seq_file *m)
1167 {
1168 	struct omap_gem_object *omap_obj;
1169 	int count = 0;
1170 	size_t size = 0;
1171 
1172 	list_for_each_entry(omap_obj, list, mm_list) {
1173 		struct drm_gem_object *obj = &omap_obj->base;
1174 		seq_printf(m, "   ");
1175 		omap_gem_describe(obj, m);
1176 		count++;
1177 		size += obj->size;
1178 	}
1179 
1180 	seq_printf(m, "Total %d objects, %zu bytes\n", count, size);
1181 }
1182 #endif
1183 
1184 /* -----------------------------------------------------------------------------
1185  * Constructor & Destructor
1186  */
1187 
1188 static void omap_gem_free_object(struct drm_gem_object *obj)
1189 {
1190 	struct drm_device *dev = obj->dev;
1191 	struct omap_drm_private *priv = dev->dev_private;
1192 	struct omap_gem_object *omap_obj = to_omap_bo(obj);
1193 
1194 	omap_gem_evict(obj);
1195 
1196 	mutex_lock(&priv->list_lock);
1197 	list_del(&omap_obj->mm_list);
1198 	mutex_unlock(&priv->list_lock);
1199 
1200 	/*
1201 	 * We own the sole reference to the object at this point, but to keep
1202 	 * lockdep happy, we must still take the omap_obj_lock to call
1203 	 * omap_gem_detach_pages(). This should hardly make any difference as
1204 	 * there can't be any lock contention.
1205 	 */
1206 	mutex_lock(&omap_obj->lock);
1207 
1208 	/* The object should not be pinned. */
1209 	WARN_ON(refcount_read(&omap_obj->pin_cnt) > 0);
1210 
1211 	if (omap_obj->pages) {
1212 		if (omap_obj->flags & OMAP_BO_MEM_DMABUF)
1213 			kfree(omap_obj->pages);
1214 		else
1215 			omap_gem_detach_pages(obj);
1216 	}
1217 
1218 	if (omap_obj->flags & OMAP_BO_MEM_DMA_API) {
1219 		dma_free_wc(dev->dev, obj->size, omap_obj->vaddr,
1220 			    omap_obj->dma_addr);
1221 	} else if (omap_obj->vaddr) {
1222 		vunmap(omap_obj->vaddr);
1223 	} else if (obj->import_attach) {
1224 		drm_prime_gem_destroy(obj, omap_obj->sgt);
1225 	}
1226 
1227 	mutex_unlock(&omap_obj->lock);
1228 
1229 	drm_gem_object_release(obj);
1230 
1231 	mutex_destroy(&omap_obj->lock);
1232 
1233 	kfree(omap_obj);
1234 }
1235 
1236 static bool omap_gem_validate_flags(struct drm_device *dev, u32 flags)
1237 {
1238 	struct omap_drm_private *priv = dev->dev_private;
1239 
1240 	switch (flags & OMAP_BO_CACHE_MASK) {
1241 	case OMAP_BO_CACHED:
1242 	case OMAP_BO_WC:
1243 	case OMAP_BO_CACHE_MASK:
1244 		break;
1245 
1246 	default:
1247 		return false;
1248 	}
1249 
1250 	if (flags & OMAP_BO_TILED_MASK) {
1251 		if (!priv->usergart)
1252 			return false;
1253 
1254 		switch (flags & OMAP_BO_TILED_MASK) {
1255 		case OMAP_BO_TILED_8:
1256 		case OMAP_BO_TILED_16:
1257 		case OMAP_BO_TILED_32:
1258 			break;
1259 
1260 		default:
1261 			return false;
1262 		}
1263 	}
1264 
1265 	return true;
1266 }
1267 
1268 static const struct vm_operations_struct omap_gem_vm_ops = {
1269 	.fault = omap_gem_fault,
1270 	.open = drm_gem_vm_open,
1271 	.close = drm_gem_vm_close,
1272 };
1273 
1274 static const struct drm_gem_object_funcs omap_gem_object_funcs = {
1275 	.free = omap_gem_free_object,
1276 	.export = omap_gem_prime_export,
1277 	.mmap = omap_gem_object_mmap,
1278 	.vm_ops = &omap_gem_vm_ops,
1279 };
1280 
1281 /* GEM buffer object constructor */
1282 struct drm_gem_object *omap_gem_new(struct drm_device *dev,
1283 		union omap_gem_size gsize, u32 flags)
1284 {
1285 	struct omap_drm_private *priv = dev->dev_private;
1286 	struct omap_gem_object *omap_obj;
1287 	struct drm_gem_object *obj;
1288 	struct address_space *mapping;
1289 	size_t size;
1290 	int ret;
1291 
1292 	if (!omap_gem_validate_flags(dev, flags))
1293 		return NULL;
1294 
1295 	/* Validate the flags and compute the memory and cache flags. */
1296 	if (flags & OMAP_BO_TILED_MASK) {
1297 		/*
1298 		 * Tiled buffers are always shmem paged backed. When they are
1299 		 * scanned out, they are remapped into DMM/TILER.
1300 		 */
1301 		flags |= OMAP_BO_MEM_SHMEM;
1302 
1303 		/*
1304 		 * Currently don't allow cached buffers. There is some caching
1305 		 * stuff that needs to be handled better.
1306 		 */
1307 		flags &= ~(OMAP_BO_CACHED|OMAP_BO_WC|OMAP_BO_UNCACHED);
1308 		flags |= tiler_get_cpu_cache_flags();
1309 	} else if ((flags & OMAP_BO_SCANOUT) && !priv->has_dmm) {
1310 		/*
1311 		 * If we don't have DMM, we must allocate scanout buffers
1312 		 * from contiguous DMA memory.
1313 		 */
1314 		flags |= OMAP_BO_MEM_DMA_API;
1315 	} else if (!(flags & OMAP_BO_MEM_DMABUF)) {
1316 		/*
1317 		 * All other buffers not backed by dma_buf are shmem-backed.
1318 		 */
1319 		flags |= OMAP_BO_MEM_SHMEM;
1320 	}
1321 
1322 	/* Allocate the initialize the OMAP GEM object. */
1323 	omap_obj = kzalloc_obj(*omap_obj);
1324 	if (!omap_obj)
1325 		return NULL;
1326 
1327 	obj = &omap_obj->base;
1328 	omap_obj->flags = flags;
1329 	mutex_init(&omap_obj->lock);
1330 
1331 	if (flags & OMAP_BO_TILED_MASK) {
1332 		/*
1333 		 * For tiled buffers align dimensions to slot boundaries and
1334 		 * calculate size based on aligned dimensions.
1335 		 */
1336 		tiler_align(gem2fmt(flags), &gsize.tiled.width,
1337 			    &gsize.tiled.height);
1338 
1339 		size = tiler_size(gem2fmt(flags), gsize.tiled.width,
1340 				  gsize.tiled.height);
1341 
1342 		omap_obj->width = gsize.tiled.width;
1343 		omap_obj->height = gsize.tiled.height;
1344 	} else {
1345 		size = PAGE_ALIGN(gsize.bytes);
1346 	}
1347 
1348 	obj->funcs = &omap_gem_object_funcs;
1349 
1350 	/* Initialize the GEM object. */
1351 	if (!(flags & OMAP_BO_MEM_SHMEM)) {
1352 		drm_gem_private_object_init(dev, obj, size);
1353 	} else {
1354 		ret = drm_gem_object_init(dev, obj, size);
1355 		if (ret)
1356 			goto err_free;
1357 
1358 		mapping = obj->filp->f_mapping;
1359 		mapping_set_gfp_mask(mapping, GFP_USER | __GFP_DMA32);
1360 	}
1361 
1362 	/* Allocate memory if needed. */
1363 	if (flags & OMAP_BO_MEM_DMA_API) {
1364 		omap_obj->vaddr = dma_alloc_wc(dev->dev, size,
1365 					       &omap_obj->dma_addr,
1366 					       GFP_KERNEL);
1367 		if (!omap_obj->vaddr)
1368 			goto err_release;
1369 	}
1370 
1371 	mutex_lock(&priv->list_lock);
1372 	list_add(&omap_obj->mm_list, &priv->obj_list);
1373 	mutex_unlock(&priv->list_lock);
1374 
1375 	return obj;
1376 
1377 err_release:
1378 	drm_gem_object_release(obj);
1379 err_free:
1380 	kfree(omap_obj);
1381 	return NULL;
1382 }
1383 
1384 struct drm_gem_object *omap_gem_new_dmabuf(struct drm_device *dev, size_t size,
1385 					   struct sg_table *sgt)
1386 {
1387 	struct omap_drm_private *priv = dev->dev_private;
1388 	struct omap_gem_object *omap_obj;
1389 	struct drm_gem_object *obj;
1390 	union omap_gem_size gsize;
1391 
1392 	/* Without a DMM only physically contiguous buffers can be supported. */
1393 	if (!omap_gem_sgt_is_contiguous(sgt, size) && !priv->has_dmm)
1394 		return ERR_PTR(-EINVAL);
1395 
1396 	gsize.bytes = PAGE_ALIGN(size);
1397 	obj = omap_gem_new(dev, gsize, OMAP_BO_MEM_DMABUF | OMAP_BO_WC);
1398 	if (!obj)
1399 		return ERR_PTR(-ENOMEM);
1400 
1401 	omap_obj = to_omap_bo(obj);
1402 
1403 	omap_obj->sgt = sgt;
1404 
1405 	if (omap_gem_sgt_is_contiguous(sgt, size)) {
1406 		omap_obj->dma_addr = sg_dma_address(sgt->sgl);
1407 	} else {
1408 		/* Create pages list from sgt */
1409 		struct page **pages;
1410 		unsigned int npages;
1411 		unsigned int ret;
1412 
1413 		npages = DIV_ROUND_UP(size, PAGE_SIZE);
1414 		pages = kzalloc_objs(*pages, npages);
1415 		if (!pages) {
1416 			omap_gem_free_object(obj);
1417 			return ERR_PTR(-ENOMEM);
1418 		}
1419 
1420 		omap_obj->pages = pages;
1421 		ret = drm_prime_sg_to_page_array(sgt, pages, npages);
1422 		if (ret) {
1423 			omap_gem_free_object(obj);
1424 			return ERR_PTR(-ENOMEM);
1425 		}
1426 	}
1427 
1428 	return obj;
1429 }
1430 
1431 /* convenience method to construct a GEM buffer object, and userspace handle */
1432 int omap_gem_new_handle(struct drm_device *dev, struct drm_file *file,
1433 		union omap_gem_size gsize, u32 flags, u32 *handle)
1434 {
1435 	struct drm_gem_object *obj;
1436 	int ret;
1437 
1438 	obj = omap_gem_new(dev, gsize, flags);
1439 	if (!obj)
1440 		return -ENOMEM;
1441 
1442 	ret = drm_gem_handle_create(file, obj, handle);
1443 	if (ret) {
1444 		omap_gem_free_object(obj);
1445 		return ret;
1446 	}
1447 
1448 	/* drop reference from allocate - handle holds it now */
1449 	drm_gem_object_put(obj);
1450 
1451 	return 0;
1452 }
1453 
1454 /* -----------------------------------------------------------------------------
1455  * Init & Cleanup
1456  */
1457 
1458 /* If DMM is used, we need to set some stuff up.. */
1459 void omap_gem_init(struct drm_device *dev)
1460 {
1461 	struct omap_drm_private *priv = dev->dev_private;
1462 	struct omap_drm_usergart *usergart;
1463 	const enum tiler_fmt fmts[] = {
1464 			TILFMT_8BIT, TILFMT_16BIT, TILFMT_32BIT
1465 	};
1466 	int i, j;
1467 
1468 	if (!dmm_is_available()) {
1469 		/* DMM only supported on OMAP4 and later, so this isn't fatal */
1470 		dev_warn(dev->dev, "DMM not available, disable DMM support\n");
1471 		return;
1472 	}
1473 
1474 	usergart = kzalloc_objs(*usergart, 3);
1475 	if (!usergart)
1476 		return;
1477 
1478 	/* reserve 4k aligned/wide regions for userspace mappings: */
1479 	for (i = 0; i < ARRAY_SIZE(fmts); i++) {
1480 		u16 h = 1, w = PAGE_SIZE >> i;
1481 
1482 		tiler_align(fmts[i], &w, &h);
1483 		/* note: since each region is 1 4kb page wide, and minimum
1484 		 * number of rows, the height ends up being the same as the
1485 		 * # of pages in the region
1486 		 */
1487 		usergart[i].height = h;
1488 		usergart[i].height_shift = ilog2(h);
1489 		usergart[i].stride_pfn = tiler_stride(fmts[i], 0) >> PAGE_SHIFT;
1490 		usergart[i].slot_shift = ilog2((PAGE_SIZE / h) >> i);
1491 		for (j = 0; j < NUM_USERGART_ENTRIES; j++) {
1492 			struct omap_drm_usergart_entry *entry;
1493 			struct tiler_block *block;
1494 
1495 			entry = &usergart[i].entry[j];
1496 			block = tiler_reserve_2d(fmts[i], w, h, PAGE_SIZE);
1497 			if (IS_ERR(block)) {
1498 				dev_err(dev->dev,
1499 						"reserve failed: %d, %d, %ld\n",
1500 						i, j, PTR_ERR(block));
1501 				return;
1502 			}
1503 			entry->dma_addr = tiler_ssptr(block);
1504 			entry->block = block;
1505 
1506 			DBG("%d:%d: %dx%d: dma_addr=%pad stride=%d", i, j, w, h,
1507 					&entry->dma_addr,
1508 					usergart[i].stride_pfn << PAGE_SHIFT);
1509 		}
1510 	}
1511 
1512 	priv->usergart = usergart;
1513 	priv->has_dmm = true;
1514 }
1515 
1516 void omap_gem_deinit(struct drm_device *dev)
1517 {
1518 	struct omap_drm_private *priv = dev->dev_private;
1519 
1520 	/* I believe we can rely on there being no more outstanding GEM
1521 	 * objects which could depend on usergart/dmm at this point.
1522 	 */
1523 	kfree(priv->usergart);
1524 }
1525