aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/drm_drv.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-10-14 03:39:08 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2014-10-14 03:39:08 -0400
commit2d65a9f48fcdf7866aab6457bc707ca233e0c791 (patch)
treef93e5838d6ac2e59434367f4ff905f7d9c45fc2b /drivers/gpu/drm/drm_drv.c
parentda92da3638a04894afdca8b99e973ddd20268471 (diff)
parentdfda0df3426483cf5fc7441f23f318edbabecb03 (diff)
Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux
Pull drm updates from Dave Airlie: "This is the main git pull for the drm, I pretty much froze major pulls at -rc5/6 time, and haven't had much fallout, so will probably continue doing that. Lots of changes all over, big internal header cleanup to make it clear drm features are legacy things and what are things that modern KMS drivers should be using. Also big move to use the new generic fences in all the TTM drivers. core: atomic prep work, vblank rework changes, allows immediate vblank disables major header reworking and cleanups to better delinate legacy interfaces from what KMS drivers should be using. cursor planes locking fixes ttm: move to generic fences (affects all TTM drivers) ppc64 caching fixes radeon: userptr support, uvd for old asics, reset rework for fence changes better buffer placement changes, dpm feature enablement hdmi audio support fixes intel: Cherryview work, 180 degree rotation, skylake prep work, execlist command submission full ppgtt prep work cursor improvements edid caching, vdd handling improvements nouveau: fence reworking kepler memory clock work gt21x clock work fan control improvements hdmi infoframe fixes DP audio ast: ppc64 fixes caching fix rcar: rcar-du DT support ipuv3: prep work for capture support msm: LVDS support for mdp4, new panel, gpu refactoring exynos: exynos3250 SoC support, drop bad mmap interface, mipi dsi changes, and component match support" * 'drm-next' of git://people.freedesktop.org/~airlied/linux: (640 commits) drm/mst: rework payload table allocation to conform better. drm/ast: Fix HW cursor image drm/radeon/kv: add uvd/vce info to dpm debugfs output drm/radeon/ci: add uvd/vce info to dpm debugfs output drm/radeon: export reservation_object from dmabuf to ttm drm/radeon: cope with foreign fences inside the reservation object drm/radeon: cope with foreign fences inside display drm/core: use helper to check driver features drm/radeon/cik: write gfx ucode version to ucode addr reg drm/radeon/si: print full CS when we hit a packet 0 drm/radeon: remove unecessary includes drm/radeon/combios: declare legacy_connector_convert as static drm/radeon/atombios: declare connector convert tables as static drm/radeon: drop btc_get_max_clock_from_voltage_dependency_table drm/radeon/dpm: drop clk/voltage dependency filters for BTC drm/radeon/dpm: drop clk/voltage dependency filters for CI drm/radeon/dpm: drop clk/voltage dependency filters for SI drm/radeon/dpm: drop clk/voltage dependency filters for NI drm/radeon: disable audio when we disable hdmi (v2) drm/radeon: split audio enable between eg and r600 (v2) ...
Diffstat (limited to 'drivers/gpu/drm/drm_drv.c')
-rw-r--r--drivers/gpu/drm/drm_drv.c40
1 files changed, 10 insertions, 30 deletions
diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
index 3242e208c0d0..bc3da32d4585 100644
--- a/drivers/gpu/drm/drm_drv.c
+++ b/drivers/gpu/drm/drm_drv.c
@@ -35,32 +35,20 @@
35#include <drm/drmP.h> 35#include <drm/drmP.h>
36#include <drm/drm_core.h> 36#include <drm/drm_core.h>
37#include "drm_legacy.h" 37#include "drm_legacy.h"
38#include "drm_internal.h"
38 39
39unsigned int drm_debug = 0; /* 1 to enable debug output */ 40unsigned int drm_debug = 0; /* 1 to enable debug output */
40EXPORT_SYMBOL(drm_debug); 41EXPORT_SYMBOL(drm_debug);
41 42
42unsigned int drm_vblank_offdelay = 5000; /* Default to 5000 msecs. */
43
44unsigned int drm_timestamp_precision = 20; /* Default to 20 usecs. */
45
46/*
47 * Default to use monotonic timestamps for wait-for-vblank and page-flip
48 * complete events.
49 */
50unsigned int drm_timestamp_monotonic = 1;
51
52MODULE_AUTHOR(CORE_AUTHOR); 43MODULE_AUTHOR(CORE_AUTHOR);
53MODULE_DESCRIPTION(CORE_DESC); 44MODULE_DESCRIPTION(CORE_DESC);
54MODULE_LICENSE("GPL and additional rights"); 45MODULE_LICENSE("GPL and additional rights");
55MODULE_PARM_DESC(debug, "Enable debug output"); 46MODULE_PARM_DESC(debug, "Enable debug output");
56MODULE_PARM_DESC(vblankoffdelay, "Delay until vblank irq auto-disable [msecs]"); 47MODULE_PARM_DESC(vblankoffdelay, "Delay until vblank irq auto-disable [msecs] (0: never disable, <0: disable immediately)");
57MODULE_PARM_DESC(timestamp_precision_usec, "Max. error on timestamps [usecs]"); 48MODULE_PARM_DESC(timestamp_precision_usec, "Max. error on timestamps [usecs]");
58MODULE_PARM_DESC(timestamp_monotonic, "Use monotonic timestamps"); 49MODULE_PARM_DESC(timestamp_monotonic, "Use monotonic timestamps");
59 50
60module_param_named(debug, drm_debug, int, 0600); 51module_param_named(debug, drm_debug, int, 0600);
61module_param_named(vblankoffdelay, drm_vblank_offdelay, int, 0600);
62module_param_named(timestamp_precision_usec, drm_timestamp_precision, int, 0600);
63module_param_named(timestamp_monotonic, drm_timestamp_monotonic, int, 0600);
64 52
65static DEFINE_SPINLOCK(drm_minor_lock); 53static DEFINE_SPINLOCK(drm_minor_lock);
66static struct idr drm_minors_idr; 54static struct idr drm_minors_idr;
@@ -68,22 +56,19 @@ static struct idr drm_minors_idr;
68struct class *drm_class; 56struct class *drm_class;
69static struct dentry *drm_debugfs_root; 57static struct dentry *drm_debugfs_root;
70 58
71int drm_err(const char *func, const char *format, ...) 59void drm_err(const char *func, const char *format, ...)
72{ 60{
73 struct va_format vaf; 61 struct va_format vaf;
74 va_list args; 62 va_list args;
75 int r;
76 63
77 va_start(args, format); 64 va_start(args, format);
78 65
79 vaf.fmt = format; 66 vaf.fmt = format;
80 vaf.va = &args; 67 vaf.va = &args;
81 68
82 r = printk(KERN_ERR "[" DRM_NAME ":%s] *ERROR* %pV", func, &vaf); 69 printk(KERN_ERR "[" DRM_NAME ":%s] *ERROR* %pV", func, &vaf);
83 70
84 va_end(args); 71 va_end(args);
85
86 return r;
87} 72}
88EXPORT_SYMBOL(drm_err); 73EXPORT_SYMBOL(drm_err);
89 74
@@ -102,6 +87,8 @@ void drm_ut_debug_printk(const char *function_name, const char *format, ...)
102} 87}
103EXPORT_SYMBOL(drm_ut_debug_printk); 88EXPORT_SYMBOL(drm_ut_debug_printk);
104 89
90#define DRM_MAGIC_HASH_ORDER 4 /**< Size of key hash table. Must be power of 2. */
91
105struct drm_master *drm_master_create(struct drm_minor *minor) 92struct drm_master *drm_master_create(struct drm_minor *minor)
106{ 93{
107 struct drm_master *master; 94 struct drm_master *master;
@@ -133,7 +120,6 @@ EXPORT_SYMBOL(drm_master_get);
133static void drm_master_destroy(struct kref *kref) 120static void drm_master_destroy(struct kref *kref)
134{ 121{
135 struct drm_master *master = container_of(kref, struct drm_master, refcount); 122 struct drm_master *master = container_of(kref, struct drm_master, refcount);
136 struct drm_magic_entry *pt, *next;
137 struct drm_device *dev = master->minor->dev; 123 struct drm_device *dev = master->minor->dev;
138 struct drm_map_list *r_list, *list_temp; 124 struct drm_map_list *r_list, *list_temp;
139 125
@@ -143,7 +129,7 @@ static void drm_master_destroy(struct kref *kref)
143 129
144 list_for_each_entry_safe(r_list, list_temp, &dev->maplist, head) { 130 list_for_each_entry_safe(r_list, list_temp, &dev->maplist, head) {
145 if (r_list->master == master) { 131 if (r_list->master == master) {
146 drm_rmmap_locked(dev, r_list->map); 132 drm_legacy_rmmap_locked(dev, r_list->map);
147 r_list = NULL; 133 r_list = NULL;
148 } 134 }
149 } 135 }
@@ -154,12 +140,6 @@ static void drm_master_destroy(struct kref *kref)
154 master->unique_len = 0; 140 master->unique_len = 0;
155 } 141 }
156 142
157 list_for_each_entry_safe(pt, next, &master->magicfree, head) {
158 list_del(&pt->head);
159 drm_ht_remove_item(&master->magiclist, &pt->hash_item);
160 kfree(pt);
161 }
162
163 drm_ht_remove(&master->magiclist); 143 drm_ht_remove(&master->magiclist);
164 144
165 mutex_unlock(&dev->struct_mutex); 145 mutex_unlock(&dev->struct_mutex);
@@ -615,7 +595,7 @@ struct drm_device *drm_dev_alloc(struct drm_driver *driver,
615 goto err_ht; 595 goto err_ht;
616 } 596 }
617 597
618 if (driver->driver_features & DRIVER_GEM) { 598 if (drm_core_check_feature(dev, DRIVER_GEM)) {
619 ret = drm_gem_init(dev); 599 ret = drm_gem_init(dev);
620 if (ret) { 600 if (ret) {
621 DRM_ERROR("Cannot initialize graphics execution manager (GEM)\n"); 601 DRM_ERROR("Cannot initialize graphics execution manager (GEM)\n");
@@ -645,7 +625,7 @@ static void drm_dev_release(struct kref *ref)
645{ 625{
646 struct drm_device *dev = container_of(ref, struct drm_device, ref); 626 struct drm_device *dev = container_of(ref, struct drm_device, ref);
647 627
648 if (dev->driver->driver_features & DRIVER_GEM) 628 if (drm_core_check_feature(dev, DRIVER_GEM))
649 drm_gem_destroy(dev); 629 drm_gem_destroy(dev);
650 630
651 drm_legacy_ctxbitmap_cleanup(dev); 631 drm_legacy_ctxbitmap_cleanup(dev);
@@ -779,7 +759,7 @@ void drm_dev_unregister(struct drm_device *dev)
779 drm_vblank_cleanup(dev); 759 drm_vblank_cleanup(dev);
780 760
781 list_for_each_entry_safe(r_list, list_temp, &dev->maplist, head) 761 list_for_each_entry_safe(r_list, list_temp, &dev->maplist, head)
782 drm_rmmap(dev, r_list->map); 762 drm_legacy_rmmap(dev, r_list->map);
783 763
784 drm_minor_unregister(dev, DRM_MINOR_LEGACY); 764 drm_minor_unregister(dev, DRM_MINOR_LEGACY);
785 drm_minor_unregister(dev, DRM_MINOR_RENDER); 765 drm_minor_unregister(dev, DRM_MINOR_RENDER);