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