aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/omapdrm/omap_gem.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-08-07 20:36:12 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2014-08-07 20:36:12 -0400
commita7d7a143d0b4cb1914705884ca5c25e322dba693 (patch)
tree0ee5e9e43f0863b38a29e8abc293e80eab177d74 /drivers/gpu/drm/omapdrm/omap_gem.c
parent43c40df2c7fedce640a6c39fcdf58764f6bbac5c (diff)
parent7963e9db1b1f842fdc53309baa8714d38e9f5681 (diff)
Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux
Pull DRM updates from Dave Airlie: "Like all good pull reqs this ends with a revert, so it must mean we tested it, [ Ed. That's _one_ way of looking at it ] This pull is missing nouveau, Ben has been stuck trying to track down a very longstanding bug that revealed itself due to some other changes. I've asked him to send you a direct pull request for nouveau once he cleans things up. I'm away until Monday so don't want to delay things, you can make a decision on that when he sends it, I have my phone so I can ack things just not really merge much. It has one trivial conflict with your tree in armada_drv.c, and also the pull request contains some component changes that are already in your tree, the base tree from Russell went via Greg's tree already, but some stuff still shows up in here that doesn't when I merge my tree into yours. Otherwise all pretty standard graphics fare, one new driver and changes all over the place. New drivers: - sti kms driver for STMicroelectronics chipsets stih416 and stih407. core: - lots of cleanups to the drm core - DP MST helper code merged - universal cursor planes. - render nodes enabled by default panel: - better panel interfaces - new panel support - non-continuous cock advertising ability ttm: - shrinker fixes i915: - hopefully ditched UMS support - runtime pm fixes - psr tracking and locking - now enabled by default - userptr fixes - backlight brightness fixes - MST support merged - runtime PM for dpms - primary planes locking fixes - gen8 hw semaphore support - fbc fixes - runtime PM on SOix sleep state hw. - mmio base page flipping - lots of vlv/chv fixes. - universal cursor planes radeon: - Hawaii fixes - display scalar support for non-fixed mode displays - new firmware format support - dpm on more asics by default - GPUVM improvements - uncached and wc GTT buffers - BOs > visible VRAM exynos: - i80 interface support - module auto-loading - ipp driver consolidated. armada: - irq handling in crtc layer only - crtc renumbering - add component support - DT interaction changes. tegra: - load as module fixes - eDP bpp and sync polarity fixed - DSI non-continuous clock mode support - better support for importing buffers from nouveau msm: - mdp5/adq8084 v1.3 hw enablement - devicetree clk changse - ifc6410 board working tda998x: - component support - DT documentation update vmwgfx: - fix compat shader namespace" * 'drm-next' of git://people.freedesktop.org/~airlied/linux: (551 commits) Revert "drm: drop redundant drm_file->is_master" drm/panel: simple: Use devm_gpiod_get_optional() drm/dsi: Replace upcasting macro by function drm/panel: ld9040: Replace upcasting macro by function drm/exynos: dp: Modify driver to support drm_panel drm/exynos: Move DP setup into commit() drm/panel: simple: Add AUO B133HTN01 panel support drm/panel: simple: Support delays in panel functions drm/panel: simple: Add proper definition for prepare and unprepare drm/panel: s6e8aa0: Add proper definition for prepare and unprepare drm/panel: ld9040: Add proper definition for prepare and unprepare drm/tegra: Add support for panel prepare and unprepare routines drm/exynos: dsi: Add support for panel prepare and unprepare routines drm/exynos: dpi: Add support for panel prepare and unprepare routines drm/panel: simple: Add dummy prepare and unprepare routines drm/panel: s6e8aa0: Add dummy prepare and unprepare routines drm/panel: ld9040: Add dummy prepare and unprepare routines drm/panel: Provide convenience wrapper for .get_modes() drm/panel: add .prepare() and .unprepare() functions drm/panel: simple: Remove simple-panel compatible ...
Diffstat (limited to 'drivers/gpu/drm/omapdrm/omap_gem.c')
-rw-r--r--drivers/gpu/drm/omapdrm/omap_gem.c33
1 files changed, 15 insertions, 18 deletions
diff --git a/drivers/gpu/drm/omapdrm/omap_gem.c b/drivers/gpu/drm/omapdrm/omap_gem.c
index 95dbce286a41..e4849413ee80 100644
--- a/drivers/gpu/drm/omapdrm/omap_gem.c
+++ b/drivers/gpu/drm/omapdrm/omap_gem.c
@@ -233,11 +233,7 @@ static int omap_gem_attach_pages(struct drm_gem_object *obj)
233 233
234 WARN_ON(omap_obj->pages); 234 WARN_ON(omap_obj->pages);
235 235
236 /* TODO: __GFP_DMA32 .. but somehow GFP_HIGHMEM is coming from the 236 pages = drm_gem_get_pages(obj);
237 * mapping_gfp_mask(mapping) which conflicts w/ GFP_DMA32.. probably
238 * we actually want CMA memory for it all anyways..
239 */
240 pages = drm_gem_get_pages(obj, GFP_KERNEL);
241 if (IS_ERR(pages)) { 237 if (IS_ERR(pages)) {
242 dev_err(obj->dev->dev, "could not get pages: %ld\n", PTR_ERR(pages)); 238 dev_err(obj->dev->dev, "could not get pages: %ld\n", PTR_ERR(pages));
243 return PTR_ERR(pages); 239 return PTR_ERR(pages);
@@ -791,7 +787,7 @@ int omap_gem_get_paddr(struct drm_gem_object *obj,
791 omap_obj->paddr = tiler_ssptr(block); 787 omap_obj->paddr = tiler_ssptr(block);
792 omap_obj->block = block; 788 omap_obj->block = block;
793 789
794 DBG("got paddr: %08x", omap_obj->paddr); 790 DBG("got paddr: %pad", &omap_obj->paddr);
795 } 791 }
796 792
797 omap_obj->paddr_cnt++; 793 omap_obj->paddr_cnt++;
@@ -985,9 +981,9 @@ void omap_gem_describe(struct drm_gem_object *obj, struct seq_file *m)
985 981
986 off = drm_vma_node_start(&obj->vma_node); 982 off = drm_vma_node_start(&obj->vma_node);
987 983
988 seq_printf(m, "%08x: %2d (%2d) %08llx %08Zx (%2d) %p %4d", 984 seq_printf(m, "%08x: %2d (%2d) %08llx %pad (%2d) %p %4d",
989 omap_obj->flags, obj->name, obj->refcount.refcount.counter, 985 omap_obj->flags, obj->name, obj->refcount.refcount.counter,
990 off, omap_obj->paddr, omap_obj->paddr_cnt, 986 off, &omap_obj->paddr, omap_obj->paddr_cnt,
991 omap_obj->vaddr, omap_obj->roll); 987 omap_obj->vaddr, omap_obj->roll);
992 988
993 if (omap_obj->flags & OMAP_BO_TILED) { 989 if (omap_obj->flags & OMAP_BO_TILED) {
@@ -1183,9 +1179,7 @@ int omap_gem_op_sync(struct drm_gem_object *obj, enum omap_gem_op op)
1183 } 1179 }
1184 } 1180 }
1185 spin_unlock(&sync_lock); 1181 spin_unlock(&sync_lock);
1186 1182 kfree(waiter);
1187 if (waiter)
1188 kfree(waiter);
1189 } 1183 }
1190 return ret; 1184 return ret;
1191} 1185}
@@ -1347,6 +1341,7 @@ struct drm_gem_object *omap_gem_new(struct drm_device *dev,
1347 struct omap_drm_private *priv = dev->dev_private; 1341 struct omap_drm_private *priv = dev->dev_private;
1348 struct omap_gem_object *omap_obj; 1342 struct omap_gem_object *omap_obj;
1349 struct drm_gem_object *obj = NULL; 1343 struct drm_gem_object *obj = NULL;
1344 struct address_space *mapping;
1350 size_t size; 1345 size_t size;
1351 int ret; 1346 int ret;
1352 1347
@@ -1404,14 +1399,16 @@ struct drm_gem_object *omap_gem_new(struct drm_device *dev,
1404 omap_obj->height = gsize.tiled.height; 1399 omap_obj->height = gsize.tiled.height;
1405 } 1400 }
1406 1401
1407 ret = 0; 1402 if (flags & (OMAP_BO_DMA|OMAP_BO_EXT_MEM)) {
1408 if (flags & (OMAP_BO_DMA|OMAP_BO_EXT_MEM))
1409 drm_gem_private_object_init(dev, obj, size); 1403 drm_gem_private_object_init(dev, obj, size);
1410 else 1404 } else {
1411 ret = drm_gem_object_init(dev, obj, size); 1405 ret = drm_gem_object_init(dev, obj, size);
1406 if (ret)
1407 goto fail;
1412 1408
1413 if (ret) 1409 mapping = file_inode(obj->filp)->i_mapping;
1414 goto fail; 1410 mapping_set_gfp_mask(mapping, GFP_USER | __GFP_DMA32);
1411 }
1415 1412
1416 return obj; 1413 return obj;
1417 1414
@@ -1467,8 +1464,8 @@ void omap_gem_init(struct drm_device *dev)
1467 entry->paddr = tiler_ssptr(block); 1464 entry->paddr = tiler_ssptr(block);
1468 entry->block = block; 1465 entry->block = block;
1469 1466
1470 DBG("%d:%d: %dx%d: paddr=%08x stride=%d", i, j, w, h, 1467 DBG("%d:%d: %dx%d: paddr=%pad stride=%d", i, j, w, h,
1471 entry->paddr, 1468 &entry->paddr,
1472 usergart[i].stride_pfn << PAGE_SHIFT); 1469 usergart[i].stride_pfn << PAGE_SHIFT);
1473 } 1470 }
1474 } 1471 }